diff --git a/.travis.yml b/.travis.yml index f26102a3b3e..043755d6b93 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,44 @@ #pretending we're C because otherwise ruby will initialize, even with "language: dm". language: c +sudo: false env: - BYOND_MAJOR="508" - BYOND_MINOR="1287" + BYOND_MAJOR="509" + BYOND_MINOR="1318" + MACRO_COUNT=1004 -before_install: - - sudo apt-get update -qq - - sudo apt-get install libc6:i386 libgcc1:i386 libstdc++6:i386 -qq - - sudo apt-get install python -qq - - sudo apt-get install python-pip -qq - - sudo pip install PyYaml -q - - sudo pip install beautifulsoup4 -q +cache: + directories: + - $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} + +addons: + apt: + packages: + - libc6-i386 + - libgcc1:i386 + - libstdc++6:i386 + +before_script: + - chmod +x ./install-byond.sh + - ./install-byond.sh install: - - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip - - unzip byond.zip - - cd byond - - sudo make install - - cd .. + - pip install --user PyYaml -q + - pip install --user beautifulsoup4 -q script: - shopt -s globstar - (! grep 'step_[xy]' maps/**/*.dmm) - (! find nano/templates/ -type f -exec md5sum {} + | sort | uniq -D -w 32 | grep nano) - - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; [ $num -le 1355 ]) + - (! grep -En "<\s*span\s+class\s*=\s*('[^'>]+|[^'>]+')\s*>" **/*.dm) + - awk -f tools/indentation.awk **/*.dm + - md5sum -c - <<< "88490b460c26947f5ec1ab1bb9fa9f17 *html/changelogs/example.yml" + - (num=`grep -E '\\\\(red|blue|green|black|b|i[^mc])' **/*.dm | wc -l`; echo "$num escapes (expecting ${MACRO_COUNT} or less)"; [ $num -le ${MACRO_COUNT} ]) + - source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup + - python tools/TagMatcher/tag-matcher.py ../.. + - echo "#define UNIT_TEST 1" > code/_unit_tests.dm + - cp config/example/* config/ - DreamMaker polaris.dme + - DreamDaemon polaris.dmb -invisible -trusted -core 2>&1 | tee log.txt + - grep "All Unit Tests Passed" log.txt + diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 9fcdad86139..faefa64883d 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -10,6 +10,7 @@ anchored = 1 use_power = 0 idle_power_usage = 5 // 5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/cooler var/heatsink_temperature = T20C // The constant temperature reservoir into which the freezer pumps heat. Probably the hull of the station or something. var/internal_volume = 600 // L @@ -24,7 +25,6 @@ ..() initialize_directions = dir component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/unary_atmos/cooler(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index e139f6faf3f..aa51d9669f0 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -10,6 +10,7 @@ anchored = 1 use_power = 0 idle_power_usage = 5 //5 Watts for thermostat related circuitry + circuit = /obj/item/weapon/circuitboard/unary_atmos/heater var/max_temperature = T20C + 680 var/internal_volume = 600 //L @@ -25,7 +26,6 @@ initialize_directions = dir component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/unary_atmos/heater(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/__defines/appearance.dm b/code/__defines/appearance.dm new file mode 100644 index 00000000000..faa97e8f066 --- /dev/null +++ b/code/__defines/appearance.dm @@ -0,0 +1,3 @@ +// Consider these images/atoms as part of the UI/HUD +#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA +#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 9741282f93c..e9f44499a4a 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -25,26 +25,6 @@ #define PROCESS_KILL 26 // Used to trigger removal from a processing list. #define MAX_GEAR_COST 10 // Used in chargen for accessory loadout limit. -// Preference toggles. -#define SOUND_ADMINHELP 0x1 -#define SOUND_MIDI 0x2 -#define SOUND_AMBIENCE 0x4 -#define SOUND_LOBBY 0x8 -#define CHAT_OOC 0x10 -#define CHAT_DEAD 0x20 -#define CHAT_GHOSTEARS 0x40 -#define CHAT_GHOSTSIGHT 0x80 -#define CHAT_PRAYER 0x100 -#define CHAT_RADIO 0x200 -#define CHAT_ATTACKLOGS 0x400 -#define CHAT_DEBUGLOGS 0x800 -#define CHAT_LOOC 0x1000 -#define CHAT_GHOSTRADIO 0x2000 -#define SHOW_TYPING 0x4000 -#define CHAT_NOICONS 0x8000 - -#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC) - // For secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans. #define HEALTH_HUD 1 // A simple line rounding the mob's number health. #define STATUS_HUD 2 // Alive, dead, diseased, etc. diff --git a/code/__defines/unit_tests.dm b/code/__defines/unit_tests.dm new file mode 100644 index 00000000000..478c75fdb25 --- /dev/null +++ b/code/__defines/unit_tests.dm @@ -0,0 +1,4 @@ +#define ASCII_ESC ascii2text(27) +#define ASCII_RED "[ASCII_ESC]\[31m" +#define ASCII_GREEN "[ASCII_ESC]\[32m" +#define ASCII_RESET "[ASCII_ESC]\[0m" \ No newline at end of file diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 3964ddeebaa..06b277257f1 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -244,7 +244,7 @@ var/turf/ear = get_turf(M) if(ear) // Ghostship is magic: Ghosts can hear radio chatter from anywhere - if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && (M.client) && (M.client.prefs.toggles & CHAT_GHOSTRADIO))) + if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && M.is_preference_enabled(/datum/client_preference/ghost_radio))) . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down. return . diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 57527aab429..39c3a83995e 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -78,7 +78,13 @@ var/global/list/socks_t = list( "Black knee" = "black_knee", "Black thigh" = "black_thigh", "Thin knee" = "thin_knee", "Thin thigh" = "thin_thigh", "Pantyhose" = "pantyhose", "Striped thigh" = "striped_thigh", "Striped knee" = "striped_knee", "Rainbow knee" = "rainbow_knee", "Rainbow thigh" = "rainbow_thigh", - "Fishnets" = "fishnet", "Thin white thigh" = "thinwhite_thigh", "Thin white knee" = "thinwhite_knee", "None") + "Fishnets" = "fishnet", "Thin white thigh" = "thinwhite_thigh", "Thin white knee" = "thinwhite_knee", + "Green striped thigh" = "gstriped_thigh", "Green striped knee" = "gstriped_knee", + "Purple striped thigh" = "pstriped_thigh", "Purple striped knee" = "pstriped_knee", + "Blue striped thigh" = "bstriped_thigh", "Blue striped knee" = "bstriped_knee", + "Yellow striped thigh" = "ystriped_thigh", "Yellow striped knee" = "ystriped_knee", + "Red striped thigh" = "rstriped_thigh", "Red striped knee" = "rstriped_knee", + "Orange striped thigh" = "ostriped_thigh", "Orange striped knee" = "ostriped_knee", "None") //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index a6d5ea89afe..3fb03069010 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -30,13 +30,6 @@ return "[output][and_text][input[index]]" - -/proc/ConvertReqString2List(var/list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - //Returns list element or null. Should prevent "index out of bounds" error. proc/listgetindex(var/list/list,index) if(istype(list) && list.len) diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 23119c69ad5..133707b794c 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -31,7 +31,7 @@ diary << "\[[time_stamp()]]DEBUG: [text][log_end]" for(var/client/C in admins) - if(C.prefs.toggles & CHAT_DEBUGLOGS) + if(C.is_preference_enabled(/datum/client_preference/debug/show_debug_logs)) C << "DEBUG: [text]" @@ -82,6 +82,9 @@ /proc/log_misc(text) diary << "\[[time_stamp()]]MISC: [text][log_end]" +/proc/log_unit_test(text) + world.log << "## UNIT_TEST: [text]" + //pretty print a direction bitflag, can be useful for debugging. /proc/print_dir(var/dir) var/list/comps = list() @@ -91,7 +94,7 @@ if(dir & WEST) comps += "WEST" if(dir & UP) comps += "UP" if(dir & DOWN) comps += "DOWN" - + return english_list(comps, nothing_text="0", and_text="|", comma_text="|") //more or less a logging utility diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 9213765bbc2..9f4ece96f84 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -30,13 +30,10 @@ proc/random_hair_style(gender, species = "Human") var/list/valid_hairstyles = list() for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] - - if(gender != NEUTER && gender != PLURAL) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] @@ -52,13 +49,10 @@ proc/random_facial_hair_style(gender, species = "Human") var/list/valid_facialhairstyles = list() for(var/facialhairstyle in facial_hair_styles_list) var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle] - - if(gender != NEUTER && gender != PLURAL) - if(gender == MALE && S.gender == FEMALE) - continue - if(gender == FEMALE && S.gender == MALE) - continue - + if(gender == MALE && S.gender == FEMALE) + continue + if(gender == FEMALE && S.gender == MALE) + continue if( !(species in S.species_allowed)) continue @@ -171,3 +165,88 @@ Proc for attack log creation, because really why not return 0 var/mob/living/silicon/robot/R = thing.loc return (thing in R.module.modules) + +/proc/get_exposed_defense_zone(var/atom/movable/target) + var/obj/item/weapon/grab/G = locate() in target + if(G && G.state >= GRAB_NECK) //works because mobs are currently not allowed to upgrade to NECK if they are grabbing two people. + return pick("head", "l_hand", "r_hand", "l_foot", "r_foot", "l_arm", "r_arm", "l_leg", "r_leg") + else + return pick("chest", "groin") + +/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1) + if(!user || !target) + return 0 + var/user_loc = user.loc + var/target_loc = target.loc + + var/holding = user.get_active_hand() + var/datum/progressbar/progbar + if (progress) + progbar = new(user, time, target) + + var/endtime = world.time+time + var/starttime = world.time + . = 1 + while (world.time < endtime) + sleep(1) + if (progress) + progbar.update(world.time - starttime) + if(!user || !target) + . = 0 + break + if(uninterruptible) + continue + + if(!user || user.incapacitated() || user.loc != user_loc) + . = 0 + break + + if(target.loc != target_loc) + . = 0 + break + + if(user.get_active_hand() != holding) + . = 0 + break + + if (progbar) + qdel(progbar) + +/proc/do_after(mob/user, delay, atom/target = null, needhand = 1, progress = 1, var/incapacitation_flags = INCAPACITATION_DEFAULT) + if(!user) + return 0 + var/atom/target_loc = null + if(target) + target_loc = target.loc + + var/atom/original_loc = user.loc + + var/holding = user.get_active_hand() + + var/datum/progressbar/progbar + if (progress) + progbar = new(user, delay, target) + + var/endtime = world.time + delay + var/starttime = world.time + . = 1 + while (world.time < endtime) + sleep(1) + if (progress) + progbar.update(world.time - starttime) + + if(!user || user.incapacitated(incapacitation_flags) || user.loc != original_loc) + . = 0 + break + + if(target_loc && (!target || target_loc != target.loc)) + . = 0 + break + + if(needhand) + if(user.get_active_hand() != holding) + . = 0 + break + + if (progbar) + qdel(progbar) diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm index 437661b7fc4..54a922c30dc 100644 --- a/code/_helpers/names.dm +++ b/code/_helpers/names.dm @@ -161,7 +161,7 @@ var/syndicate_code_response//Code response for traitors. Obviously, some people will be better at this than others but in theory, everyone should be able to do it and it only enhances roleplay. Can probably be done through "{ }" but I don't really see the practical benefit. One example of an earlier system is commented below. - /N + -N */ /proc/generate_code_phrase()//Proc is used for phrase and response in master_controller.dm diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 224301a8983..72549c9ee13 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -304,7 +304,7 @@ proc/TextPreview(var/string,var/len=40) // to always create it and then throw it out. /var/icon/text_tag_icons = new('./icons/chattags.dmi') /proc/create_text_tag(var/tagname, var/tagdesc = tagname, var/client/C = null) - if(C && (C.prefs.toggles & CHAT_NOICONS)) + if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) return tagdesc return "[tagdesc]" diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm index 336d72fc136..19e2206cd09 100644 --- a/code/_helpers/time.dm +++ b/code/_helpers/time.dm @@ -30,11 +30,21 @@ proc/isDay(var/month, var/day) var/next_duration_update = 0 var/last_round_duration = 0 -proc/round_duration() +var/round_start_time = 0 + +/hook/roundstart/proc/start_timer() + round_start_time = world.time + return 1 + +#define round_duration_in_ticks (round_start_time ? world.time - round_start_time : 0) + +/proc/round_duration_as_text() + if(!round_start_time) + return "00:00" if(last_round_duration && world.time < next_duration_update) return last_round_duration - var/mills = world.time // 1/10 of a second, not real milliseconds but whatever + var/mills = round_duration_in_ticks // 1/10 of a second, not real milliseconds but whatever //var/secs = ((mills % 36000) % 600) / 10 //Not really needed, but I'll leave it here for refrence.. or something var/mins = round((mills % 36000) / 600) var/hours = round(mills / 36000) diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index ebdee3c6593..0bcf5461230 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -149,6 +149,26 @@ if (rights & R_MENTOR) . += "[seperator]+MENTOR" return . +// Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ). +/proc/hex2rgb(hex) + // Strips the starting #, in case this is ever supplied without one, so everything doesn't break. + if(findtext(hex,"#",1,2)) + hex = copytext(hex, 2) + return list(hex2rgb_r(hex), hex2rgb_g(hex), hex2rgb_b(hex)) + +// The three procs below require that the '#' part of the hex be stripped, which hex2rgb() does automatically. +/proc/hex2rgb_r(hex) + var/hex_to_work_on = copytext(hex,1,3) + return hex2num(hex_to_work_on) + +/proc/hex2rgb_g(hex) + var/hex_to_work_on = copytext(hex,3,5) + return hex2num(hex_to_work_on) + +/proc/hex2rgb_b(hex) + var/hex_to_work_on = copytext(hex,5,7) + return hex2num(hex_to_work_on) + // heat2color functions. Adapted from: http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ /proc/heat2color(temp) return rgb(heat2color_r(temp), heat2color_g(temp), heat2color_b(temp)) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 8057d65f969..dc17e47a594 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -646,47 +646,6 @@ proc/GaussRandRound(var/sigma,var/roundto) else return get_step(ref, base_dir) -/proc/do_mob(var/mob/user, var/mob/target, var/delay = 30, var/numticks = 5, var/needhand = 1) //This is quite an ugly solution but i refuse to use the old request system. - if(!user || !target) return 0 - if(numticks == 0) return 0 - - var/delayfraction = round(delay/numticks) - var/original_user_loc = user.loc - var/original_target_loc = target.loc - var/holding = user.get_active_hand() - - for(var/i = 0, i= timerbuffer - 600) + if (round_duration_in_ticks >= timerbuffer - 1 MINUTE) vote.autotransfer() - timerbuffer = timerbuffer + config.vote_autotransfer_interval \ No newline at end of file + timerbuffer = timerbuffer + config.vote_autotransfer_interval diff --git a/code/controllers/hooks.dm b/code/controllers/hooks.dm index 48f1199ef76..e7888304e58 100644 --- a/code/controllers/hooks.dm +++ b/code/controllers/hooks.dm @@ -9,11 +9,11 @@ * * To add some code to be called by the hook, define a proc under the type, as so: * @code - /hook/foo/proc/bar() - if(1) - return 1 //Sucessful - else - return 0 //Error, or runtime. +/hook/foo/proc/bar() + if(1) + return 1 //Sucessful + else + return 0 //Error, or runtime. * @endcode * All hooks must return nonzero on success, as runtimes will force return null. */ diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index be9688b09b1..a97840c0677 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -317,9 +317,9 @@ var/global/datum/shuttle_controller/shuttle_controller "Arrivals dock" = "nuke_shuttle_dock_airlock", ) - MS.announcer = "NDV Icarus" - MS.arrival_message = "Attention, [station_short], you have a large signature approaching the station - looks unarmed to surface scans. We're too far out to intercept - brace for visitors." - MS.departure_message = "Your visitors are on their way out of the system, [station_short], burning delta-v like it's nothing. Good riddance." + MS.announcer = "Automated Traffic Control" + MS.arrival_message = "Attention. A vessel is approaching the colony." + MS.departure_message = "Attention. A vessel is now leaving from the colony." MS.interim = locate(/area/syndicate_station/transit) MS.warmup_time = 0 diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index c394318c286..bb7bf300d03 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -25,7 +25,7 @@ usr.client.debug_variables(antag) message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") -/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry")) +/client/proc/debug_controller(controller in list("Master","Ticker","Ticker Process","Air","Jobs","Sun","Radio","Supply","Shuttles","Emergency Shuttle","Configuration","pAI", "Cameras", "Transfer Controller", "Gas Data","Event","Plants","Alarm","Nano","Chemistry","Vote")) set category = "Debug" set name = "Debug Controller" set desc = "Debug the various periodic loop controllers for the game (be careful!)" @@ -92,5 +92,8 @@ if("Chemistry") debug_variables(chemistryProcess) feedback_add_details("admin_verb", "DChem") + if("Vote") + debug_variables(vote) + feedback_add_details("admin_verb", "DVote") message_admins("Admin [key_name_admin(usr)] is debugging the [controller] controller.") return diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index efab1204833..e6f88731b6f 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -1,9 +1,15 @@ var/datum/controller/vote/vote = new() -var/global/list/round_voters = list() //Keeps track of the individuals voting for a given round, for use in forcedrafting. +var/global/list/round_voters = list() // Keeps track of the individuals voting for a given round, for use in forcedrafting. -datum/controller/vote - var/initiator = null +#define VOTE_RESTART "restart" +#define VOTE_GAMEMODE "gamemode" +#define VOTE_CREW_TRANSFER "crew_transfer" +#define VOTE_ADD_ANTAGONIST "add_antagonist" +#define VOTE_CUSTOM "custom" + +/datum/controller/vote + var/initiator = null // Key of the one who started the vote or "the server" var/started_time = null var/time_remaining = 0 var/mode = null @@ -11,385 +17,366 @@ datum/controller/vote var/list/choices = list() var/list/gamemode_names = list() var/list/voted = list() - var/list/voting = list() var/list/current_votes = list() var/list/additional_text = list() - var/auto_muted = 0 - New() - if(vote != src) - if(istype(vote)) - del(vote) - vote = src +/datum/controller/vote/New() + if(vote != src) + if(istype(vote)) + del(vote) + vote = src - proc/process() //called by master_controller - if(mode) - // No more change mode votes after the game has started. - // 3 is GAME_STATE_PLAYING, but that #define is undefined for some reason - if(mode == "gamemode" && ticker.current_state >= 2) - world << "Voting aborted due to game start." - src.reset() - return +/datum/controller/vote/proc/process() //called by master_controller + if(mode) + // No more change mode votes after the game has started. + if(mode == VOTE_GAMEMODE && ticker.current_state >= GAME_STATE_SETTING_UP) + world << "Voting aborted due to game start." + src.reset() + return - // Calculate how much time is remaining by comparing current time, to time of vote start, - // plus vote duration - time_remaining = round((started_time + config.vote_period - world.time)/10) - - if(time_remaining < 0) - result() - for(var/client/C in voting) - if(C) - C << browse(null,"window=vote") - reset() - else - for(var/client/C in voting) - if(C) - C << browse(vote.interface(C),"window=vote") - - voting.Cut() - - proc/autotransfer() - initiate_vote("crew_transfer","the server", 1) - log_debug("The server has called a crew transfer vote") - - proc/autogamemode() - initiate_vote("gamemode","the server", 1) - log_debug("The server has called a gamemode vote") - - proc/reset() - initiator = null - time_remaining = 0 - mode = null - question = null - choices.Cut() - voted.Cut() - voting.Cut() - current_votes.Cut() - additional_text.Cut() - - proc/get_result() - //get the highest number of votes - var/greatest_votes = 0 - var/total_votes = 0 - for(var/option in choices) - var/votes = choices[option] - total_votes += votes - if(votes > greatest_votes) - greatest_votes = votes - //default-vote for everyone who didn't vote - if(!config.vote_no_default && choices.len) - var/non_voters = (clients.len - total_votes) - if(non_voters > 0) - if(mode == "restart") - choices["Continue Playing"] += non_voters - if(choices["Continue Playing"] >= greatest_votes) - greatest_votes = choices["Continue Playing"] - else if(mode == "gamemode") - if(master_mode in choices) - choices[master_mode] += non_voters - if(choices[master_mode] >= greatest_votes) - greatest_votes = choices[master_mode] - else if(mode == "crew_transfer") - var/factor = 0.5 - switch(world.time / (10 * 60)) // minutes - if(0 to 60) - factor = 0.5 - if(61 to 120) - factor = 0.8 - if(121 to 240) - factor = 1 - if(241 to 300) - factor = 1.2 - else - factor = 1.4 - choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor) - world << "Crew Transfer Factor: [factor]" - greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"]) - - - //get all options with that many votes and return them in a list - . = list() - if(greatest_votes) - for(var/option in choices) - if(choices[option] == greatest_votes) - . += option - return . - - proc/announce_result() - var/list/winners = get_result() - var/text - if(winners.len > 0) - if(winners.len > 1) - if(mode != "gamemode" || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes - text = "Vote Tied Between:\n" - for(var/option in winners) - text += "\t[option]\n" - . = pick(winners) - - for(var/key in current_votes) - if(choices[current_votes[key]] == .) - round_voters += key // Keep track of who voted for the winning round. - if((mode == "gamemode" && . == "Extended") || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes - text += "Vote Result: [.]" - else - if(mode != "gamemode") - text += "Vote Result: [.]" - else - text += "The vote has ended." // What will be shown if it is a gamemode vote that isn't extended - - else - text += "Vote Result: Inconclusive - No Votes!" - if(mode == "add_antagonist") - antag_add_failed = 1 - log_vote(text) - world << "[text]" - return . - - proc/result() - . = announce_result() - var/restart = 0 - if(.) - switch(mode) - if("restart") - if(. == "Restart Round") - restart = 1 - if("gamemode") - if(master_mode != .) - world.save_mode(.) - if(ticker && ticker.mode) - restart = 1 - else - master_mode = . - if("crew_transfer") - if(. == "Initiate Crew Transfer") - init_shift_change(null, 1) - if("add_antagonist") - if(isnull(.) || . == "None") - antag_add_failed = 1 - else - additional_antag_types |= antag_names_to_ids[.] - - if(mode == "gamemode") //fire this even if the vote fails. - if(!round_progressing) - round_progressing = 1 - world << "The round will start soon." - - if(restart) - world << "World restarting due to vote..." - feedback_set_details("end_error","restart vote") - if(blackbox) blackbox.save_all_data_to_sql() - sleep(50) - log_game("Rebooting due to restart vote") - world.Reboot() - - return . - - proc/submit_vote(var/ckey, var/vote) - if(mode) - if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) - return 0 - if(vote && vote >= 1 && vote <= choices.len) - if(current_votes[ckey]) - choices[choices[current_votes[ckey]]]-- - voted += usr.ckey - choices[choices[vote]]++ //check this - current_votes[ckey] = vote - return vote - return 0 - - proc/initiate_vote(var/vote_type, var/initiator_key, var/automatic = 0) - if(!mode) - if(started_time != null && !(check_rights(R_ADMIN) || automatic)) - var/next_allowed_time = (started_time + config.vote_delay) - if(next_allowed_time > world.time) - return 0 + // Calculate how much time is remaining by comparing current time, to time of vote start, + // plus vote duration + time_remaining = round((started_time + config.vote_period - world.time)/10) + if(time_remaining < 0) + result() reset() - switch(vote_type) - if("restart") - choices.Add("Restart Round","Continue Playing") - if("gamemode") - if(ticker.current_state >= 2) - return 0 - choices.Add(config.votable_modes) - for (var/F in choices) - var/datum/game_mode/M = gamemode_cache[F] - if(!M) - continue - gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works - additional_text.Add("[M.required_players]") - gamemode_names["secret"] = "Secret" - if("crew_transfer") - if(check_rights(R_ADMIN|R_MOD, 0)) - question = "End the shift?" - choices.Add("Initiate Crew Transfer", "Continue The Round") + +/datum/controller/vote/proc/autotransfer() + initiate_vote(VOTE_CREW_TRANSFER, "the server", 1) + log_debug("The server has called a crew transfer vote") + +/datum/controller/vote/proc/autogamemode() + initiate_vote(VOTE_GAMEMODE, "the server", 1) + log_debug("The server has called a gamemode vote") + +/datum/controller/vote/proc/reset() + initiator = null + time_remaining = 0 + mode = null + question = null + choices.Cut() + voted.Cut() + current_votes.Cut() + additional_text.Cut() + +/datum/controller/vote/proc/get_result() // Get the highest number of votes + var/greatest_votes = 0 + var/total_votes = 0 + + for(var/option in choices) + var/votes = choices[option] + total_votes += votes + if(votes > greatest_votes) + greatest_votes = votes + + if(!config.vote_no_default && choices.len) // Default-vote for everyone who didn't vote + var/non_voters = (clients.len - total_votes) + if(non_voters > 0) + if(mode == VOTE_RESTART) + choices["Continue Playing"] += non_voters + if(choices["Continue Playing"] >= greatest_votes) + greatest_votes = choices["Continue Playing"] + else if(mode == VOTE_GAMEMODE) + if(master_mode in choices) + choices[master_mode] += non_voters + if(choices[master_mode] >= greatest_votes) + greatest_votes = choices[master_mode] + else if(mode == VOTE_CREW_TRANSFER) + var/factor = 0.5 + switch(world.time / (10 * 60)) // minutes + if(0 to 60) + factor = 0.5 + if(61 to 120) + factor = 0.8 + if(121 to 240) + factor = 1 + if(241 to 300) + factor = 1.2 else - if (get_security_level() == "red" || get_security_level() == "delta") - initiator_key << "The current alert status is too high to call for a crew transfer!" - return 0 - if(ticker.current_state <= 2) - return 0 - initiator_key << "The crew transfer button has been disabled!" - question = "End the shift?" - choices.Add("Initiate Crew Transfer", "Continue The Round") - if("add_antagonist") - if(!config.allow_extra_antags || ticker.current_state >= 2) - return 0 - for(var/antag_type in all_antag_types) - var/datum/antagonist/antag = all_antag_types[antag_type] - if(!(antag.id in additional_antag_types) && antag.is_votable()) - choices.Add(antag.role_text) - choices.Add("None") - if("custom") - question = sanitizeSafe(input(usr,"What is the vote for?") as text|null) - if(!question) return 0 - for(var/i=1,i<=10,i++) - var/option = capitalize(sanitize(input(usr,"Please enter an option or hit cancel to finish") as text|null)) - if(!option || mode || !usr.client) break - choices.Add(option) - else - return 0 - mode = vote_type - initiator = initiator_key - started_time = world.time - var/text = "[capitalize(mode)] vote started by [initiator]." - if(mode == "custom") - text += "\n[question]" + factor = 1.4 + choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor) + world << "Crew Transfer Factor: [factor]" + greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"]) - log_vote(text) - world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period/10] seconds to vote." - switch(vote_type) - if("crew_transfer") - world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) - if("gamemode") - world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) - if("custom") - world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) - if(mode == "gamemode" && round_progressing) - round_progressing = 0 - world << "Round start has been delayed." + . = list() // Get all options with that many votes and return them in a list + if(greatest_votes) + for(var/option in choices) + if(choices[option] == greatest_votes) + . += option - time_remaining = round(config.vote_period/10) - return 1 - return 0 +/datum/controller/vote/proc/announce_result() + var/list/winners = get_result() + var/text + if(winners.len > 0) + if(winners.len > 1) + if(mode != VOTE_GAMEMODE || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes + text = "Vote Tied Between:\n" + for(var/option in winners) + text += "\t[option]\n" + . = pick(winners) - proc/interface(var/client/C) - if(!C) return - var/admin = 0 - var/trialmin = 0 - if(C.holder) - if(C.holder.rights & R_ADMIN) - admin = 1 - trialmin = 1 // don't know why we use both of these it's really weird, but I'm 2 lasy to refactor this all to use just admin. - voting |= C - - . = "Voting Panel" - if(mode) - if(question) . += "

Vote: '[question]'

" - else . += "

Vote: [capitalize(mode)]

" - . += "Time Left: [time_remaining] s
" - . += "" - if(capitalize(mode) == "Gamemode") .+= "" - - for(var/i = 1, i <= choices.len, i++) - var/votes = choices[choices[i]] - if(!votes) votes = 0 - . += "" - if(mode == "gamemode") - if(current_votes[C.ckey] == i) - . += "" - else - . += "" - else - if(current_votes[C.ckey] == i) - . += "" - else - . += "" - if (additional_text.len >= i) - . += additional_text[i] - . += "" - - . += "
ChoicesVotesMinimum Players
[gamemode_names[choices[i]]][votes][gamemode_names[choices[i]]][votes][choices[i]][votes][choices[i]][votes]

" - if(admin) - . += "(Cancel Vote) " + for(var/key in current_votes) + if(choices[current_votes[key]] == .) + round_voters += key // Keep track of who voted for the winning round. + if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes + text += "Vote Result: [.]" else - . += "

Start a vote:



" - . += "Close" - return . + text += "The vote has ended." + else + text += "Vote Result: Inconclusive - No Votes!" + if(mode == VOTE_ADD_ANTAGONIST) + antag_add_failed = 1 + log_vote(text) + world << "[text]" - Topic(href,href_list[],hsrc) - if(!usr || !usr.client) return //not necessary but meh...just in-case somebody does something stupid - switch(href_list["vote"]) - if("close") - voting -= usr.client - usr << browse(null, "window=vote") - return - if("cancel") - if(usr.client.holder) - reset() - if("toggle_restart") - if(usr.client.holder) - config.allow_vote_restart = !config.allow_vote_restart - if("toggle_gamemode") - if(usr.client.holder) - config.allow_vote_mode = !config.allow_vote_mode - if("restart") - if(config.allow_vote_restart || usr.client.holder) - initiate_vote("restart",usr.key) - if("gamemode") - if(config.allow_vote_mode || usr.client.holder) - initiate_vote("gamemode",usr.key) - if("crew_transfer") - if(config.allow_vote_restart || usr.client.holder) - initiate_vote("crew_transfer",usr.key) - if("add_antagonist") - if(config.allow_extra_antags) - initiate_vote("add_antagonist",usr.key) - if("custom") - if(usr.client.holder) - initiate_vote("custom",usr.key) +/datum/controller/vote/proc/result() + . = announce_result() + var/restart = 0 + if(.) + switch(mode) + if(VOTE_RESTART) + if(. == "Restart Round") + restart = 1 + if(VOTE_GAMEMODE) + if(master_mode != .) + world.save_mode(.) + if(ticker && ticker.mode) + restart = 1 + else + master_mode = . + if(VOTE_CREW_TRANSFER) + if(. == "Initiate Crew Transfer") + init_shift_change(null, 1) + if(VOTE_ADD_ANTAGONIST) + if(isnull(.) || . == "None") + antag_add_failed = 1 + else + additional_antag_types |= antag_names_to_ids[.] + + if(mode == VOTE_GAMEMODE) //fire this even if the vote fails. + if(!round_progressing) + round_progressing = 1 + world << "The round will start soon." + + if(restart) + world << "World restarting due to vote..." + feedback_set_details("end_error", "restart vote") + if(blackbox) + blackbox.save_all_data_to_sql() + sleep(50) + log_game("Rebooting due to restart vote") + world.Reboot() + +/datum/controller/vote/proc/submit_vote(var/ckey, var/newVote) + if(mode) + if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) + return + if(current_votes[ckey]) + choices[choices[current_votes[ckey]]]-- + if(newVote && newVote >= 1 && newVote <= choices.len) + choices[choices[newVote]]++ + current_votes[ckey] = newVote + else + current_votes[ckey] = null + +/datum/controller/vote/proc/initiate_vote(var/vote_type, var/initiator_key, var/automatic = 0) + if(!mode) + if(started_time != null && !(check_rights(R_ADMIN) || automatic)) + var/next_allowed_time = (started_time + config.vote_delay) + if(next_allowed_time > world.time) + return 0 + + reset() + + switch(vote_type) + if(VOTE_RESTART) + choices.Add("Restart Round", "Continue Playing") + if(VOTE_GAMEMODE) + if(ticker.current_state >= GAME_STATE_SETTING_UP) + return 0 + choices.Add(config.votable_modes) + for(var/F in choices) + var/datum/game_mode/M = gamemode_cache[F] + if(!M) + continue + gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works + additional_text.Add("[M.required_players]") + gamemode_names["secret"] = "Secret" + if(VOTE_CREW_TRANSFER) + if(!check_rights(R_ADMIN|R_MOD, 0)) // The gods care not for the affairs of the mortals + if(get_security_level() == "red" || get_security_level() == "delta") + initiator_key << "The current alert status is too high to call for a crew transfer!" + return 0 + if(ticker.current_state <= GAME_STATE_SETTING_UP) + initiator_key << "The crew transfer button has been disabled!" + return 0 + question = "End the shift?" + choices.Add("Initiate Crew Transfer", "Continue The Round") + if(VOTE_ADD_ANTAGONIST) + if(!config.allow_extra_antags || ticker.current_state >= GAME_STATE_SETTING_UP) + return 0 + for(var/antag_type in all_antag_types) + var/datum/antagonist/antag = all_antag_types[antag_type] + if(!(antag.id in additional_antag_types) && antag.is_votable()) + choices.Add(antag.role_text) + choices.Add("None") + if(VOTE_CUSTOM) + question = sanitizeSafe(input(usr, "What is the vote for?") as text|null) + if(!question) + return 0 + for(var/i = 1 to 10) + var/option = capitalize(sanitize(input(usr, "Please enter an option or hit cancel to finish") as text|null)) + if(!option || mode || !usr.client) + break + choices.Add(option) else - var/t = round(text2num(href_list["vote"])) - if(t) // It starts from 1, so there's no problem - submit_vote(usr.ckey, t) - usr.vote() + return 0 + mode = vote_type + initiator = initiator_key + started_time = world.time + var/text = "[capitalize(mode)] vote started by [initiator]." + if(mode == VOTE_CUSTOM) + text += "\n[question]" -/mob/verb/vote() + log_vote(text) + + world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote." + if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM) + world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3) + + if(mode == VOTE_GAMEMODE && round_progressing) + round_progressing = 0 + world << "Round start has been delayed." + + time_remaining = round(config.vote_period / 10) + return 1 + return 0 + +/datum/controller/vote/proc/interface(var/client/C) + if(!istype(C)) + return + var/admin = 0 + if(C.holder) + if(C.holder.rights & R_ADMIN) + admin = 1 + + . = "Voting Panel" + if(mode) + if(question) + . += "

Vote: '[question]'

" + else + . += "

Vote: [capitalize(mode)]

" + . += "Time Left: [time_remaining] s
" + . += "" + if(mode == VOTE_GAMEMODE) + .+= "" + + for(var/i = 1 to choices.len) + var/votes = choices[choices[i]] + if(!votes) + votes = 0 + . += "" + var/thisVote = (current_votes[C.ckey] == i) + if(mode == VOTE_GAMEMODE) + . += "" + else + . += "" + if (additional_text.len >= i) + . += additional_text[i] + . += "" + + . += "" + + . += "
ChoicesVotesMinimum Players
[thisVote ? "" : ""][gamemode_names[choices[i]]][thisVote ? "" : ""][votes][thisVote ? "" : ""][choices[i]][thisVote ? "" : ""][votes]
Unvote

" + if(admin) + . += "(Cancel Vote) " + else + . += "

Start a vote:



" + + . += "Close" + +/datum/controller/vote/Topic(href, href_list[]) + if(!usr || !usr.client) + return + switch(href_list["vote"]) + if("close") + usr << browse(null, "window=vote") + return + + if("cancel") + if(usr.client.holder) + reset() + if("toggle_restart") + if(usr.client.holder) + config.allow_vote_restart = !config.allow_vote_restart + if("toggle_gamemode") + if(usr.client.holder) + config.allow_vote_mode = !config.allow_vote_mode + + if(VOTE_RESTART) + if(config.allow_vote_restart || usr.client.holder) + initiate_vote(VOTE_RESTART, usr.key) + if(VOTE_GAMEMODE) + if(config.allow_vote_mode || usr.client.holder) + initiate_vote(VOTE_GAMEMODE, usr.key) + if(VOTE_CREW_TRANSFER) + if(config.allow_vote_restart || usr.client.holder) + initiate_vote(VOTE_CREW_TRANSFER, usr.key) + if(VOTE_ADD_ANTAGONIST) + if(config.allow_extra_antags || usr.client.holder) + initiate_vote(VOTE_ADD_ANTAGONIST, usr.key) + if(VOTE_CUSTOM) + if(usr.client.holder) + initiate_vote(VOTE_CUSTOM, usr.key) + + if("unvote") + submit_vote(usr.ckey, null) + + else + var/t = round(text2num(href_list["vote"])) + if(t) // It starts from 1, so there's no problem + submit_vote(usr.ckey, t) + usr.client.vote() + +/client/verb/vote() set category = "OOC" set name = "Vote" if(vote) - src << browse(vote.interface(client),"window=vote") + src << browse(vote.interface(src), "window=vote;size=500x[300 + vote.choices.len * 25]") diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index f9b05a3afe4..0d0f77a957a 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -74,11 +74,21 @@ if(real_rank in civilian_positions) civ[name] = rank department = 1 - if(real_rank in nonhuman_positions) - bot[name] = rank - department = 1 if(!department && !(name in heads)) misc[name] = rank + + // Synthetics don't have actual records, so we will pull them from here. + for(var/mob/living/silicon/ai/ai in mob_list) + bot[ai.name] = "Artificial Intelligence" + + for(var/mob/living/silicon/robot/robot in mob_list) + // No combat/syndicate cyborgs, no drones. + if(robot.module && robot.module.hide_on_manifest) + continue + + bot[robot.name] = "[robot.modtype] [robot.braintype]" + + if(heads.len > 0) dat += "Heads" for(name in heads) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index fd033aa5b96..cdb8e7d15ec 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -61,10 +61,13 @@ //put this here for easier tracking ingame var/datum/money_account/initial_account - + //used for antag tcrystal trading, more info in code\game\objects\items\telecrystals.dm var/accept_tcrystals = 0 + //used for optional self-objectives that antagonists can give themselves, which are displayed at the end of the round. + var/ambitions + /datum/mind/New(var/key) src.key = key @@ -106,6 +109,8 @@ output += "Objective #[obj_count]: [objective.explanation_text]" obj_count++ + if(ambitions) + output += "
Ambitions: [ambitions]
" recipient << browse(output,"window=memory") /datum/mind/proc/edit_memory() @@ -139,7 +144,8 @@ else out += "None." - out += "
\[add\]" + out += "
\[add\]

" + out += "Ambitions: [ambitions ? ambitions : "None"] \[edit\]
" usr << browse(out, "window=edit_memory[src]") /datum/mind/Topic(href, href_list) @@ -147,7 +153,7 @@ if(href_list["add_antagonist"]) var/datum/antagonist/antag = all_antag_types[href_list["add_antagonist"]] - if(antag) + if(antag) if(antag.add_antagonist(src, 1, 1, 0, 1, 1)) // Ignore equipment and role type for this. log_admin("[key_name_admin(usr)] made [key_name(src)] into a [antag.role_text].") else @@ -179,6 +185,18 @@ if (isnull(new_memo)) return memory = new_memo + else if (href_list["amb_edit"]) + var/datum/mind/mind = locate(href_list["amb_edit"]) + if(!mind) + return + var/new_ambition = input("Enter a new ambition", "Memory", mind.ambitions) as null|message + if(isnull(new_ambition)) + return + if(mind) + mind.ambitions = sanitize(new_ambition) + mind.current << "Your ambitions have been changed by higher powers, they are now: [mind.ambitions]" + log_and_message_admins("made [key_name(mind.current)]'s ambitions be '[mind.ambitions]'.") + else if (href_list["obj_edit"] || href_list["obj_add"]) var/datum/objective/objective var/objective_pos diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm new file mode 100644 index 00000000000..bed0f332752 --- /dev/null +++ b/code/datums/progressbar.dm @@ -0,0 +1,43 @@ +/datum/progressbar + var/goal = 1 + var/image/bar + var/shown = 0 + var/mob/user + var/client/client + +/datum/progressbar/New(mob/user, goal_number, atom/target) + . = ..() + if(!target) target = user + if (!istype(target)) + EXCEPTION("Invalid target given") + if (goal_number) + goal = goal_number + bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0") + bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA + bar.pixel_y = 32 + src.user = user + if(user) + client = user.client + +/datum/progressbar/Destroy() + if (client) + client.images -= bar + qdel(bar) + . = ..() + +/datum/progressbar/proc/update(progress) + //world << "Update [progress] - [goal] - [(progress / goal)] - [((progress / goal) * 100)] - [round(((progress / goal) * 100), 5)]" + if (!user || !user.client) + shown = 0 + return + if (user.client != client) + if (client) + client.images -= bar + shown = 0 + client = user.client + + progress = Clamp(progress, 0, goal) + bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" + if (!shown && user.is_preference_enabled(/datum/client_preference/show_progress_bar)) + user.client.images += bar + shown = 1 diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 6098315c11c..460a13f7b7a 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -74,18 +74,33 @@ if (items && items.len) var/list/checklist = list() checklist = items.Copy() // You should really trust Copy - for(var/obj/O in container) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = 0 - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - checklist.Cut(i, i+1) - found = 1 - break - if (!found) - . = 0 + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for(var/obj/O in (machine.contents - machine.component_parts)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = 0 + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + checklist.Cut(i, i+1) + found = 1 + break + if (!found) + . = 0 + else + for(var/obj/O in container.contents) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = 0 + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + checklist.Cut(i, i+1) + found = 1 + break + if (!found) + . = 0 if (checklist.len) . = -1 return . @@ -93,9 +108,15 @@ //general version /datum/recipe/proc/make(var/obj/container as obj) var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for (var/obj/O in ((machine.contents-result_obj)-machine.component_parts)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + else + for (var/obj/O in (container.contents-result_obj)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) container.reagents.clear_reagents() return result_obj @@ -105,12 +126,21 @@ world << "Recipe [type] is defined without a result, please bug this." return var/obj/result_obj = new result(container) - for (var/obj/O in (container.contents-result_obj)) - if (O.reagents) - O.reagents.del_reagent("nutriment") - O.reagents.update_total() - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for (var/obj/O in ((machine.contents-result_obj)-machine.component_parts)) + if (O.reagents) + O.reagents.del_reagent("nutriment") + O.reagents.update_total() + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + else + for (var/obj/O in (container.contents-result_obj)) + if (O.reagents) + O.reagents.del_reagent("nutriment") + O.reagents.update_total() + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) container.reagents.clear_reagents() return result_obj diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 1bf774c8500..a2157fa39ec 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -221,6 +221,12 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee name = "Janitorial supplies" contains = list(/obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/mop, + /obj/item/clothing/under/rank/janitor, + /obj/item/weapon/cartridge/janitor, + /obj/item/clothing/gloves/black, + /obj/item/clothing/head/soft/purple, + /obj/item/weapon/storage/belt/janitor, + /obj/item/clothing/shoes/galoshes, /obj/item/weapon/caution, /obj/item/weapon/caution, /obj/item/weapon/caution, @@ -609,7 +615,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/solar_assembly, /obj/item/solar_assembly, /obj/item/solar_assembly, - /obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller + /obj/item/solar_assembly, // 21 Solar Assemblies. 1 Extra for the controller, /obj/item/weapon/circuitboard/solar_control, /obj/item/weapon/tracker_electronics, /obj/item/weapon/paper/solar) @@ -671,8 +677,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/mecha_ripley name = "Circuit Crate (\"Ripley\" APLU)" contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair, - /obj/item/weapon/circuitboard/mecha/ripley/main, //TEMPORARY due to lack of circuitboard printer - /obj/item/weapon/circuitboard/mecha/ripley/peripherals) //TEMPORARY due to lack of circuitboard printer + /obj/item/weapon/circuitboard/mecha/ripley/main, + /obj/item/weapon/circuitboard/mecha/ripley/peripherals) cost = 30 containertype = /obj/structure/closet/crate/secure containername = "APLU \"Ripley\" Circuit Crate" @@ -681,8 +687,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/mecha_odysseus name = "Circuit Crate (\"Odysseus\")" - contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, //TEMPORARY due to lack of circuitboard printer - /obj/item/weapon/circuitboard/mecha/odysseus/main) //TEMPORARY due to lack of circuitboard printer + contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, + /obj/item/weapon/circuitboard/mecha/odysseus/main) cost = 25 containertype = /obj/structure/closet/crate/secure containername = "\"Odysseus\" Circuit Crate" @@ -1001,7 +1007,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Security barrier crate" group = "Security" -/datum/supply_packs/securitybarriers +/datum/supply_packs/securityshieldgen name = "Wall shield Generators" contains = list(/obj/machinery/shieldwallgen, /obj/machinery/shieldwallgen, @@ -1635,6 +1641,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee num_contained = 4 contains = list(/obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/clothing/accessory/storage/white_vest, /obj/item/clothing/accessory/storage/webbing) cost = 15 containertype = "/obj/structure/closet/crate" @@ -1729,7 +1736,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/device/camera_film, /obj/item/device/camera_film, /obj/item/weapon/storage/photo_album, - /obj/item/device/reagent_scanner) + /obj/item/device/reagent_scanner, + /obj/item/device/flashlight/maglight) cost = 35 containertype = "/obj/structure/closet/crate/secure" containername = "Forensic equipment" @@ -1785,7 +1793,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/storage/black_vest, /obj/item/clothing/head/soft/sec/corp, /obj/item/clothing/under/rank/security/corp, - /obj/item/weapon/gun/energy/taser) + /obj/item/weapon/gun/energy/taser, + /obj/item/device/flashlight/maglight) cost = 30 containertype = "/obj/structure/closet/crate/secure" containername = "Officer equipment" @@ -1811,7 +1820,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/melee/baton/loaded, /obj/item/weapon/storage/box/holobadge, - /obj/item/clothing/head/beret/sec/corporate/warden) + /obj/item/clothing/head/beret/sec/corporate/warden, + /obj/item/device/flashlight/maglight) cost = 45 containertype = "/obj/structure/closet/crate/secure" containername = "Warden equipment" @@ -1835,7 +1845,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/clothing/accessory/holster/waist, /obj/item/weapon/melee/telebaton, /obj/item/weapon/shield/riot/tele, - /obj/item/clothing/head/beret/sec/corporate/hos) + /obj/item/clothing/head/beret/sec/corporate/hos, + /obj/item/device/flashlight/maglight) cost = 65 containertype = "/obj/structure/closet/crate/secure" containername = "Head of security equipment" @@ -2069,7 +2080,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/device/healthanalyzer, /obj/item/weapon/cartridge/medical, /obj/item/device/flashlight/pen, - /obj/item/weapon/reagent_containers/syringe) + /obj/item/weapon/reagent_containers/syringe, + /obj/item/clothing/accessory/storage/white_vest) cost = 20 containertype = "/obj/structure/closet/crate/secure" containername = "Paramedic equipment" diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index c34b0291fbb..ace1ba9ec35 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -11,7 +11,7 @@ var/const/AALARM_WIRE_AALARM = 16 /datum/wires/alarm/CanUse(var/mob/living/L) var/obj/machinery/alarm/A = holder - if(A.wiresexposed && A.buildstage == 2) + if(A.wiresexposed) return 1 return 0 diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 7babc9c4c1a..3300da0cebf 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -62,9 +62,8 @@ using /datum/datacore/proc/manifest_inject( ), or manifest_insert( ) */ var/global/list/PDA_Manifest = list() -var/global/ManifestJSON -/datum/datacore/proc/get_manifest_json() +/datum/datacore/proc/get_manifest_list() if(PDA_Manifest.len) return var/heads[0] @@ -146,7 +145,6 @@ var/global/ManifestJSON "bot" = bot,\ "misc" = misc\ ) - ManifestJSON = json_encode(PDA_Manifest) return diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 6dcb8853d74..f35257a6a46 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -128,6 +128,13 @@ icon_state = "nullrod" item_state = "foldcane" +/obj/item/weapon/cane/whitecane + name = "white cane" + desc = "A cane used by the blind." + icon = 'icons/obj/weapons.dmi' + icon_state = "whitecane" + item_state = "whitecane" + /obj/item/weapon/disk name = "disk" icon = 'icons/obj/items.dmi' @@ -268,21 +275,6 @@ throw_range = 5 w_class = 2.0 -/obj/item/weapon/wire - desc = "This is just a simple piece of regular insulated wire." - name = "wire" - icon = 'icons/obj/power.dmi' - icon_state = "item_wire" - var/amount = 1.0 - var/laying = 0.0 - var/old_lay = null - matter = list(DEFAULT_WALL_MATERIAL = 40) - attack_verb = list("whipped", "lashed", "disciplined", "tickled") - - suicide_act(mob/user) - viewers(user) << "[user] is strangling \himself with \the [src]! It looks like \he's trying to commit suicide." - return (OXYLOSS) - /obj/item/weapon/module icon = 'icons/obj/module.dmi' icon_state = "std_module" @@ -598,3 +590,29 @@ icon = 'icons/obj/stock_parts.dmi' icon_state = "smes_coil" origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19) + +// Additional construction stock parts + +/obj/item/weapon/stock_parts/gear + name = "gear" + desc = "A gear used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "gear" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 50) + +/obj/item/weapon/stock_parts/motor + name = "motor" + desc = "A motor used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "motor" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 60, "glass" = 10) + +/obj/item/weapon/stock_parts/spring + name = "spring" + desc = "A spring used for construction." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "spring" + origin_tech = list(TECH_ENGINEERING = 1) + matter = list(DEFAULT_WALL_MATERIAL = 40) \ No newline at end of file diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index 9f594f9b637..e42888737f3 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -30,6 +30,12 @@ if(faction_verb && player.current) player.current.verbs |= faction_verb + spawn(1 SECOND) //Added a delay so that this should pop up at the bottom and not the top of the text flood the new antag gets. + player.current << "Once you decide on a goal to pursue, you can optionally display it to \ + everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ + and it otherwise has no bearing on your round." + player.current.verbs |= /mob/living/proc/write_ambition + // Handle only adding a mind and not bothering with gear etc. if(nonstandard_role_type) faction_members |= player @@ -50,5 +56,8 @@ player.special_role = null update_icons_removed(player) BITSET(player.current.hud_updateflag, SPECIALROLE_HUD) + if(!is_special_character(player)) + player.current.verbs -= /mob/living/proc/write_ambition + player.ambitions = "" return 1 return 0 \ No newline at end of file diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 65c7a080cd8..24cca9d6400 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -104,12 +104,6 @@ create_nuke() show_objectives(player) - - // Clown clumsiness check, I guess downstream might use it. - if (player.current.mind) - if (player.current.mind.assigned_role == "Clown") - player.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." - player.current.mutations.Remove(CLUMSY) return 1 /datum/antagonist/proc/set_antag_name(var/mob/living/player) diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index f9b3f8116b6..63597103781 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -30,3 +30,26 @@ world << "[loss_text]" if(loss_feedback_tag) feedback_set_details("round_end_result","[loss_feedback_tag]") +/mob/living/proc/write_ambition() + set name = "Set Ambition" + set category = "IC" + set src = usr + + if(!mind) + return + if(!is_special_character(mind)) + src << "While you may perhaps have goals, this verb's meant to only be visible \ + to antagonists. Please make a bug report!" + return + var/new_ambitions = input(src, "Write a short sentence of what your character hopes to accomplish \ + today as an antagonist. Remember that this is purely optional. It will be shown at the end of the \ + round for everybody else.", "Ambitions", mind.ambitions) as null|message + if(isnull(new_ambitions)) + return + mind.ambitions = new_ambitions + new_ambitions = sanitize(new_ambitions) + if(new_ambitions) + src << "You've set your goal to be '[new_ambitions]'." + else + src << "You leave your ambitions behind." + log_and_message_admins("has set their ambitions to now be: [new_ambitions].") diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index ea107824d5a..d862239a9ff 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -7,6 +7,9 @@ for(var/datum/mind/P in current_antagonists) text += print_player_full(P) text += get_special_objective_text(P) + if(P.ambitions) + text += "
Their goals for today were..." + text += "
[P.ambitions]" if(!global_objectives.len && P.objectives && P.objectives.len) var/failed var/num = 1 diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index bcc89a02956..0a68becfd68 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -27,7 +27,7 @@ var/datum/antagonist/raider/raiders /obj/item/clothing/under/serviceoveralls, /obj/item/clothing/under/captain_fly, /obj/item/clothing/under/det, - /obj/item/clothing/under/brown, + /obj/item/clothing/under/color/brown, ) var/list/raider_shoes = list( diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index f6741cafa07..ac8c0ef44db 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -76,7 +76,7 @@ var/datum/antagonist/wizard/wizards return 0 wizard_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(wizard_mob), slot_l_ear) - wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(wizard_mob), slot_w_uniform) + wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), slot_w_uniform) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 4b9d257a46e..bba83cd42aa 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -838,6 +838,10 @@ area/space/atmosalert() /area/maintenance/engineering name = "Engineering Maintenance" icon_state = "maint_engineering" + +/area/maintenance/engineering/pumpstation + name = "Engineering Pump Station" + icon_state = "maint_pumpstation" /area/maintenance/evahallway name = "\improper EVA Maintenance" @@ -2757,12 +2761,12 @@ var/list/the_station_areas = list ( /area/rnd, /area/storage, /area/construction, - /area/ai_monitored/storage/eva, //do not try to simplify to "/area/ai_monitored" --rastaf0 + /area/ai_monitored/storage/eva, /area/ai_monitored/storage/secure, - /area/ai_monitored/storage/emergency, - /area/ai_upload, //do not try to simplify to "/area" --rastaf0 + /area/ai_monitored/storage/emergency, + /area/ai_upload, /area/ai_upload_foyer, - /area/ai, + /area/ai ) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 81f0da074de..1c420728ba5 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -243,7 +243,7 @@ var/list/mob/living/forced_ambiance_list = new /area/proc/play_ambience(var/mob/living/L) // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch - if(!(L && L.client && (L.client.prefs.toggles & SOUND_AMBIENCE))) return + if(!(L && L.is_preference_enabled(/datum/client_preference/play_ambiance))) return // If we previously were in an area with force-played ambiance, stop it. if(L in forced_ambiance_list) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index b37342ced52..3138c654394 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -47,6 +47,7 @@ idle_power_usage = 50 active_power_usage = 300 interact_offline = 1 + circuit = /obj/item/weapon/circuitboard/clonescanner var/locked = 0 var/mob/living/carbon/occupant = null var/obj/item/weapon/reagent_containers/glass/beaker = null @@ -55,7 +56,6 @@ /obj/machinery/dna_scannernew/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonescanner(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/game/gamemodes/changeling/absorbed_dna.dm b/code/game/gamemodes/changeling/absorbed_dna.dm new file mode 100644 index 00000000000..2527f906975 --- /dev/null +++ b/code/game/gamemodes/changeling/absorbed_dna.dm @@ -0,0 +1,12 @@ +/datum/absorbed_dna + var/name + var/datum/dna/dna + var/speciesName + var/list/languages + +/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages) + ..() + name = newName + dna = newDNA + speciesName = newSpecies + languages = newLanguages diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 0ac3d8d35d0..23bd46243ee 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,5 +1,5 @@ /datum/game_mode/changeling - name = "changeling" + name = "Changeling" round_description = "There are alien changelings on the station. Do not let the changelings succeed!" extended_round_description = "Life always finds a way. However, life can sometimes take a more disturbing route. \ Humanity's extensive knowledge of xeno-biological specimens has made them confident and arrogant. Yet \ diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 84d6bb85360..7e6563ca4b1 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -1,9 +1,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") /datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind) - var/list/absorbed_dna = list() - var/list/absorbed_species = list() - var/list/absorbed_languages = list() + var/list/datum/absorbed_dna/absorbed_dna = list() + var/list/absorbed_languages = list() // Necessary because of set_species stuff var/absorbedcount = 0 var/chem_charges = 20 var/chem_recharge_rate = 0.5 @@ -23,25 +22,36 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E /datum/changeling/New(var/gender=FEMALE) ..() - var/honorific = (gender == FEMALE) ? "Ms." : "Mr." if(possible_changeling_IDs.len) changelingID = pick(possible_changeling_IDs) possible_changeling_IDs -= changelingID - changelingID = "[honorific] [changelingID]" + changelingID = "[changelingID]" else - changelingID = "[honorific] [rand(1,999)]" + changelingID = "[rand(1,999)]" /datum/changeling/proc/regenerate() chem_charges = min(max(0, chem_charges+chem_recharge_rate), chem_storage) geneticdamage = max(0, geneticdamage-1) /datum/changeling/proc/GetDNA(var/dna_owner) - var/datum/dna/chosen_dna - for(var/datum/dna/DNA in absorbed_dna) - if(dna_owner == DNA.real_name) - chosen_dna = DNA - break - return chosen_dna + for(var/datum/absorbed_dna/DNA in absorbed_dna) + if(dna_owner == DNA.name) + return DNA + +/mob/proc/absorbDNA(var/datum/absorbed_dna/newDNA) + var/datum/changeling/changeling = null + if(src.mind && src.mind.changeling) + changeling = src.mind.changeling + if(!changeling) + return + + for(var/language in newDNA.languages) + changeling.absorbed_languages |= language + + changeling_update_languages(changeling.absorbed_languages) + + if(!changeling.GetDNA(newDNA.name)) // Don't duplicate - I wonder if it's possible for it to still be a different DNA? DNA code could use a rewrite + changeling.absorbed_dna += newDNA //Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human /mob/proc/make_changeling() @@ -70,14 +80,13 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!(P in src.verbs)) src.verbs += P.verbpath - mind.changeling.absorbed_dna |= dna + for(var/language in languages) + mind.changeling.absorbed_languages |= language var/mob/living/carbon/human/H = src if(istype(H)) - mind.changeling.absorbed_species += H.species.name - - for(var/language in languages) - mind.changeling.absorbed_languages |= language + var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages) + absorbDNA(newDNA) return 1 @@ -118,10 +127,8 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E return changeling - //Used to dump the languages from the changeling datum into the actual mob. /mob/proc/changeling_update_languages(var/updated_languages) - languages = list() for(var/language in updated_languages) languages += language @@ -129,8 +136,6 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E //This isn't strictly necessary but just to be safe... add_language("Changeling") - return - ////////// //STINGS// //They get a pretty header because there's just so fucking many of them ;_; ////////// @@ -171,9 +176,3 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting T << "You feel a tiny prick." return - - - - - - diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index d145f95946b..16f34357b5e 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -65,33 +65,21 @@ src << "We have absorbed [T]!" src.visible_message("[src] sucks the fluids from [T]!") T << "You have been absorbed by the changeling!" - - T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. - changeling.absorbed_dna |= T.dna if(src.nutrition < 400) src.nutrition = min((src.nutrition + T.nutrition), 400) changeling.chem_charges += 10 -// changeling.geneticpoints += 2 src.verbs += /mob/proc/changeling_respec src << "We can now re-adapt, reverting our evolution so that we may start anew, if needed." - //Steal all of their languages! - for(var/language in T.languages) - if(!(language in changeling.absorbed_languages)) - changeling.absorbed_languages += language - - changeling_update_languages(changeling.absorbed_languages) - - //Steal their species! - if(T.species && !(T.species.name in changeling.absorbed_species)) - changeling.absorbed_species += T.species.name + var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) + absorbDNA(newDNA) if(T.mind && T.mind.changeling) if(T.mind.changeling.absorbed_dna) - for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot + for(var/datum/absorbed_dna/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot if(dna_data in changeling.absorbed_dna) continue - changeling.absorbed_dna += dna_data + absorbDNA(dna_data) changeling.absorbedcount++ T.mind.changeling.absorbed_dna.len = 1 diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm index b73a2351b43..38981ddd6cc 100644 --- a/code/game/gamemodes/changeling/powers/armblade.dm +++ b/code/game/gamemodes/changeling/powers/armblade.dm @@ -56,7 +56,7 @@ /obj/item/weapon/melee/arm_blade/dropped(mob/user) visible_message("With a sickening crunch, [creator] reforms their arm blade into an arm!", "We assimilate the weapon back into our body.", - "You hear organic matter ripping and tearing!") playsound(src, 'sound/effects/blobattack.ogg', 30, 1) spawn(1) if(src) diff --git a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm index 9b0d1e149a1..a761a5335c1 100644 --- a/code/game/gamemodes/changeling/powers/extract_dna_sting.dm +++ b/code/game/gamemodes/changeling/powers/extract_dna_sting.dm @@ -19,6 +19,9 @@ var/mob/living/carbon/human/T = changeling_sting(40, /mob/proc/changeling_extract_dna_sting) + if(!T) + return + if(!istype(T) || T.isSynthetic()) src << "\The [T] is not compatible with our biology." return 0 @@ -31,10 +34,8 @@ src << "This creature's DNA is ruined beyond useability!" return 0 - T.dna.real_name = T.real_name - changeling.absorbed_dna |= T.dna - if(T.species && !(T.species.name in changeling.absorbed_species)) - changeling.absorbed_species += T.species.name + var/datum/absorbed_dna/newDNA = new(T.real_name, T.dna, T.species.name, T.languages) + absorbDNA(newDNA) feedback_add_details("changeling_powers","ED") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm index 940df49cd9d..8a469f9f27c 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -27,9 +27,9 @@ var/list/datum/dna/hivemind_bank = list() if(!changeling) return var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) + for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) if(!(DNA in hivemind_bank)) - names += DNA.real_name + names += DNA.name if(names.len <= 0) src << "The airwaves already have all of our DNA." @@ -38,7 +38,7 @@ var/list/datum/dna/hivemind_bank = list() var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names if(!S) return - var/datum/dna/chosen_dna = changeling.GetDNA(S) + var/datum/absorbed_dna/chosen_dna = changeling.GetDNA(S) if(!chosen_dna) return @@ -57,9 +57,9 @@ var/list/datum/dna/hivemind_bank = list() if(!changeling) return var/list/names = list() - for(var/datum/dna/DNA in hivemind_bank) + for(var/datum/absorbed_dna/DNA in hivemind_bank) if(!(DNA in changeling.absorbed_dna)) - names[DNA.real_name] = DNA + names[DNA.name] = DNA if(names.len <= 0) src << "There's no new DNA to absorb from the air." @@ -67,12 +67,12 @@ var/list/datum/dna/hivemind_bank = list() var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names if(!S) return - var/datum/dna/chosen_dna = names[S] + var/datum/absorbed_dna/chosen_dna = names[S] if(!chosen_dna) return changeling.chem_charges -= 20 - changeling.absorbed_dna += chosen_dna + absorbDNA(chosen_dna) src << "We absorb the DNA of [S] from the air." feedback_add_details("changeling_powers","HD") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/rapid_regen.dm b/code/game/gamemodes/changeling/powers/rapid_regen.dm index a320c33b96a..6f2d43e5daa 100644 --- a/code/game/gamemodes/changeling/powers/rapid_regen.dm +++ b/code/game/gamemodes/changeling/powers/rapid_regen.dm @@ -48,7 +48,7 @@ new /obj/effect/gibspawner/human(T) visible_message("With a sickening squish, [src] reforms their whole body, casting their old parts on the floor!", "We reform our body. We are whole once more.", - "You hear organic matter ripping and tearing!") feedback_add_details("changeling_powers","RR") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/self_respiration.dm b/code/game/gamemodes/changeling/powers/self_respiration.dm index a00ec7958cb..96b8f3d277c 100644 --- a/code/game/gamemodes/changeling/powers/self_respiration.dm +++ b/code/game/gamemodes/changeling/powers/self_respiration.dm @@ -1,8 +1,8 @@ /datum/power/changeling/self_respiration name = "Self Respiration" - desc = "We evolve our body to no longer require drawing oxygen from the atmosphere.." + desc = "We evolve our body to no longer require drawing oxygen from the atmosphere." helptext = "We will no longer require internals, and we cannot inhale any gas, including harmful ones." - genomecost = 1 + genomecost = 0 isVerb = 0 verbpath = /mob/proc/changeling_self_respiration diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index 99f1a4d1303..793b3a42eaf 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -4,12 +4,6 @@ genomecost = 0 verbpath = /mob/proc/changeling_transform -/datum/power/changeling/change_species - name = "Change Species" - desc = "We take on the apperance of a species that we have absorbed." - genomecost = 0 - verbpath = /mob/proc/changeling_change_species - //Change our DNA to that of somebody we've absorbed. /mob/proc/changeling_transform() set category = "Changeling" @@ -19,73 +13,42 @@ if(!changeling) return var/list/names = list() - for(var/datum/dna/DNA in changeling.absorbed_dna) - names += "[DNA.real_name]" + for(var/datum/absorbed_dna/DNA in changeling.absorbed_dna) + names += "[DNA.name]" var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names if(!S) return - var/datum/dna/chosen_dna = changeling.GetDNA(S) + var/datum/absorbed_dna/chosen_dna = changeling.GetDNA(S) if(!chosen_dna) return changeling.chem_charges -= 5 src.visible_message("[src] transforms!") changeling.geneticdamage = 5 - src.dna = chosen_dna.Clone() + + if(ishuman(src)) + var/mob/living/carbon/human/H = src + var/newSpecies = chosen_dna.speciesName + H.set_species(newSpecies,1) + + src.dna = chosen_dna.dna.Clone() src.dna.b_type = "AB+" //This is needed to avoid blood rejection bugs. The fact that the blood type might not match up w/ records could be a *FEATURE* too. if(ishuman(src)) var/mob/living/carbon/human/H = src H.b_type = "AB+" //For some reason we have two blood types on the mob. for(var/flavor in H.flavor_texts) //Nulls out flavor text, so we don't keep our previous mob's flavor. flavor = null - src.real_name = chosen_dna.real_name + src.real_name = chosen_dna.name src.flavor_text = "" src.UpdateAppearance() domutcheck(src, null) + changeling_update_languages(changeling.absorbed_languages) src.verbs -= /mob/proc/changeling_transform - spawn(10) src.verbs += /mob/proc/changeling_transform + spawn(10) + src.verbs += /mob/proc/changeling_transform + src.regenerate_icons() feedback_add_details("changeling_powers","TR") return 1 - -//Used to switch species based on the changeling datum. -/mob/proc/changeling_change_species() - - set category = "Changeling" - set name = "Change Species (5)" - - var/mob/living/carbon/human/H = src - if(!istype(H)) - src << "We may only use this power while in humanoid form." - return - - var/datum/changeling/changeling = changeling_power(5,1,0) - if(!changeling) return - - if(changeling.absorbed_species.len < 2) - src << "We do not know of any other species genomes to use." - return - - var/S = input("Select the target species: ", "Target Species", null) as null|anything in changeling.absorbed_species - if(!S) return - - domutcheck(src, null) - - changeling.chem_charges -= 5 - changeling.geneticdamage = 5 - - src.visible_message("[src] transforms!") - - src.verbs -= /mob/proc/changeling_change_species - H.set_species(S,1) //Until someone moves body colour into DNA, they're going to have to use the default. - - spawn(10) - src.verbs += /mob/proc/changeling_change_species - src.regenerate_icons() - - changeling_update_languages(changeling.absorbed_languages) - feedback_add_details("changeling_powers","TR") - - return 1 \ No newline at end of file diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 70e2219440a..83b124efc90 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -36,7 +36,7 @@ desc = "A hood worn by the followers of Nar-Sie." flags_inv = HIDEFACE body_parts_covered = HEAD - armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 30, laser = 50, energy = 20, bomb = 25, bio = 10, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0 @@ -61,7 +61,7 @@ item_state = "cultrobes" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade) - armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 50, bullet = 30, laser = 50, energy = 20, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEJUMPSUIT siemens_coefficient = 0 @@ -84,7 +84,7 @@ name = "cult helmet" desc = "A space worthy helmet used by the followers of Nar-Sie" icon_state = "cult_helmet" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 /obj/item/clothing/head/helmet/space/cult/cultify() @@ -98,7 +98,7 @@ w_class = 3 allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit) slowdown = 1 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 569d034cade..853d3f02dc4 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -185,7 +185,6 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," throw_range = 5 w_class = 2.0 unique = 1 - var/notedat = "" var/tomedat = "" var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri") @@ -285,57 +284,12 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," "} - - Topic(href,href_list[]) - if (src.loc == usr) - var/number = text2num(href_list["number"]) - if (usr.stat|| usr.restrained()) - return - switch(href_list["action"]) - if("clear") - words[words[number]] = words[number] - if("change") - words[words[number]] = input("Enter the translation for [words[number]]", "Word notes") in engwords - for (var/w in words) - if ((words[w] == words[words[number]]) && (w != words[number])) - words[w] = w - notedat = {" -
Word translation notes
- [words[1]] is [words[words[1]]] Clear
- [words[2]] is [words[words[2]]] Clear
- [words[3]] is [words[words[3]]] Clear
- [words[4]] is [words[words[4]]] Clear
- [words[5]] is [words[words[5]]] Clear
- [words[6]] is [words[words[6]]] Clear
- [words[7]] is [words[words[7]]] Clear
- [words[8]] is [words[words[8]]] Clear
- [words[9]] is [words[words[9]]] Clear
- [words[10]] is [words[words[10]]] Clear
- "} - usr << browse("[notedat]", "window=notes") -// call(/obj/item/weapon/book/tome/proc/edit_notes)() - else - usr << browse(null, "window=notes") - return - - -// proc/edit_notes() FUCK IT. Cant get it to work properly. - K0000 -// world << "its been called! [usr]" -// notedat = {" -//
Word translation notes
-// [words[1]] is [words[words[1]]] Clear
-// [words[2]] is [words[words[2]]] Clear
-// [words[3]] is [words[words[3]]] Clear
-// [words[4]] is [words[words[4]]] Clear
-// [words[5]] is [words[words[5]]] Clear
-// [words[6]] is [words[words[6]]] Clear
-// [words[7]] is [words[words[7]]] Clear
-// [words[8]] is [words[words[8]]] Clear
-// [words[9]] is [words[words[9]]] Clear
-// [words[10]] is [words[words[10]]] Clear
-// "} -// usr << "whatev" -// usr << browse(null, "window=tank") + New() + ..() + if(!cultwords["travel"]) + runerandom() + for(var/V in cultwords) + words[cultwords[V]] = V attack(mob/living/M as mob, mob/living/user as mob) @@ -378,7 +332,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," alert("The cloth of reality can't take that much of a strain. Remove some runes first!") return else - switch(alert("You open the tome",,"Read it","Scribe a rune", "Notes")) //Fuck the "Cancel" option. Rewrite the whole tome interface yourself if you want it to work better. And input() is just ugly. - K0000 + switch(alert("You open the tome",,"Read it","Scribe a rune", "Cancel")) if("Cancel") return if("Read it") @@ -386,25 +340,6 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," return user << browse("[tomedat]", "window=Arcane Tome") return - if("Notes") - if(usr.get_active_hand() != src) - return - notedat = {" -
Word translation notes
- [words[1]] is [words[words[1]]] Clear
- [words[2]] is [words[words[2]]] Clear
- [words[3]] is [words[words[3]]] Clear
- [words[4]] is [words[words[4]]] Clear
- [words[5]] is [words[words[5]]] Clear
- [words[6]] is [words[words[6]]] Clear
- [words[7]] is [words[words[7]]] Clear
- [words[8]] is [words[words[8]]] Clear
- [words[9]] is [words[words[9]]] Clear
- [words[10]] is [words[words[10]]] Clear
- "} -// call(/obj/item/weapon/book/tome/proc/edit_notes)() - user << browse("[notedat]", "window=notes") - return if(usr.get_active_hand() != src) return @@ -489,21 +424,6 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," user << "The book seems full of illegible scribbles. Is this a joke?" return - attackby(obj/item/weapon/book/tome/T as obj, mob/living/user as mob) - if(istype(T, /obj/item/weapon/book/tome)) // sanity check to prevent a runtime error - switch(alert("Copy the runes from your tome?",,"Copy", "Cancel")) - if("cancel") - return - // var/list/nearby = viewers(1,src) //- Fuck this as well. No clue why this doesnt work. -K0000 - // if (T.loc != user) - // return - // for(var/mob/M in nearby) - // if(M == user) - for(var/entry in words) - words[entry] = T.words[entry] - user << "You copy the translation notes from your tome." - - examine(mob/user) if(!iscultist(user)) user << "An old, dusty tome with frayed edges and a sinister looking cover." diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index d603f14b56b..c8c44b825f3 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -423,7 +423,7 @@ var/list/sacrificed = list() L.ajourn=0 return else - L.take_organ_damage(10, 0) + L.take_organ_damage(3, 0) sleep(100) return fizzle() diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm index 4f98bbcc2bb..07b8d7f4348 100644 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ b/code/game/gamemodes/epidemic/epidemic.dm @@ -1,5 +1,5 @@ /datum/game_mode/epidemic - name = "epidemic" + name = "Epidemic" config_tag = "epidemic" required_players = 1 required_players_secret = 15 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 59327bd65e0..a0be65c729f 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -39,10 +39,6 @@ var/global/list/additional_antag_types = list() /datum/game_mode/New() ..() - // Enforce some formatting. - // This will probably break something. - name = capitalize(lowertext(name)) - config_tag = lowertext(config_tag) /datum/game_mode/Topic(href, href_list[]) if(..()) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 54524e3cf8d..4c390e7c690 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -112,7 +112,7 @@ var/global/datum/controller/gameticker/ticker tmpmodes+=M.name tmpmodes = sortList(tmpmodes) if(tmpmodes.len) - world << "Possibilities: [english_list(tmpmodes)]" + world << "Possibilities: [english_list(tmpmodes, and_text= "; ", comma_text = "; ")]" else src.mode.announce() diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 39b73a8dac0..c978cb4ffe7 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -5,7 +5,7 @@ VOX HEIST ROUNDTYPE var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind' objective. Clumsy, rewrite sometime. /datum/game_mode/heist - name = "heist" + name = "Heist" config_tag = "heist" required_players = 15 required_players_secret = 15 diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 558dbe12b63..de868328b31 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -1,5 +1,5 @@ /datum/game_mode/malfunction - name = "AI malfunction" + name = "AI Malfunction" round_description = "The AI is behaving abnormally and must be stopped." extended_round_description = "The AI will attempt to hack the APCs around the station in order to gain as much control as possible." config_tag = "malfunction" diff --git a/code/game/gamemodes/mixed/conflux.dm b/code/game/gamemodes/mixed/conflux.dm index 2d8753ce1a7..0e9513bbabf 100644 --- a/code/game/gamemodes/mixed/conflux.dm +++ b/code/game/gamemodes/mixed/conflux.dm @@ -1,5 +1,5 @@ /datum/game_mode/conflux - name = "conflux" + name = "Wizard & Cult" round_description = "A space wizard and a cult have invaded the station!" extended_round_description = "Cultists and wizards spawn during this round." config_tag = "conflux" diff --git a/code/game/gamemodes/mixed/infestation.dm b/code/game/gamemodes/mixed/infestation.dm index 346f51967c8..34bd062b803 100644 --- a/code/game/gamemodes/mixed/infestation.dm +++ b/code/game/gamemodes/mixed/infestation.dm @@ -1,5 +1,5 @@ /datum/game_mode/infestation - name = "infestation" + name = "Borers & Changelings" round_description = "There's something in the walls!" extended_round_description = "Two alien antagonists (Cortical Borers or Changelings) spawn during this round." config_tag = "infestation" diff --git a/code/game/gamemodes/mixed/intrigue.dm b/code/game/gamemodes/mixed/intrigue.dm index d08452e6dde..5c432c30db0 100644 --- a/code/game/gamemodes/mixed/intrigue.dm +++ b/code/game/gamemodes/mixed/intrigue.dm @@ -1,11 +1,11 @@ /datum/game_mode/intrigue - name = "Intrigue" + name = "Traitors & Ninja" round_description = "Crewmembers are contacted by external elements while another infiltrates the colony." extended_round_description = "Traitors and a ninja spawn during this round." config_tag = "intrigue" - required_players = 15 - required_players_secret = 15 - required_enemies = 4 + required_players = 6 + required_players_secret = 8 + required_enemies = 3 end_on_antag_death = 0 antag_tags = list(MODE_NINJA, MODE_AUTOTRAITOR) round_autoantag = 1 diff --git a/code/game/gamemodes/mixed/lizard.dm b/code/game/gamemodes/mixed/lizard.dm index c61b9e60942..3323db503b5 100644 --- a/code/game/gamemodes/mixed/lizard.dm +++ b/code/game/gamemodes/mixed/lizard.dm @@ -1,11 +1,11 @@ /datum/game_mode/lizard - name = "lizard" + name = "Wizard & Changelings" round_description = "A space wizard and changelings have invaded the station!" extended_round_description = "Changelings and a wizard spawn during this round." config_tag = "lizard" - required_players = 15 - required_players_secret = 15 - required_enemies = 4 + required_players = 2 + required_players_secret = 8 + required_enemies = 3 end_on_antag_death = 0 antag_tags = list(MODE_WIZARD, MODE_CHANGELING) require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/mercrenegade.dm b/code/game/gamemodes/mixed/mercrenegade.dm new file mode 100644 index 00000000000..37ef6b76d9d --- /dev/null +++ b/code/game/gamemodes/mixed/mercrenegade.dm @@ -0,0 +1,11 @@ +/datum/game_mode/mercren + name = "Mercenaries & Renegades" + round_description = "A mercenary team has invaded the station, as well as other having brought their own form protection." + extended_round_description = "Mercenaries and traitors spawn during this round." + config_tag = "mercren" + required_players = 16 //What could possibly go wrong? + required_players_secret = 15 + required_enemies = 8 + end_on_antag_death = 0 + antag_tags = list(MODE_MERCENARY, MODE_RENEGADE) + require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/mercwiz.dm b/code/game/gamemodes/mixed/mercwiz.dm new file mode 100644 index 00000000000..af3629bfef8 --- /dev/null +++ b/code/game/gamemodes/mixed/mercwiz.dm @@ -0,0 +1,11 @@ +/datum/game_mode/mercwiz + name = "Mercenaries & Wizard" + round_description = "A mercenary team and a wizard have invaded the station!" + extended_round_description = "Mercenaries and wizard spawn during this round." + config_tag = "mercwiz" + required_players = 15 //I don't think we can have it lower and not need an ERT every round. + required_players_secret = 15 //I don't think we can have it lower and not need an ERT every round. + required_enemies = 7 + end_on_antag_death = 0 + antag_tags = list(MODE_MERCENARY, MODE_WIZARD) + require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/paranoia.dm b/code/game/gamemodes/mixed/paranoia.dm index 7c3e903b140..cda62701a03 100644 --- a/code/game/gamemodes/mixed/paranoia.dm +++ b/code/game/gamemodes/mixed/paranoia.dm @@ -1,5 +1,5 @@ /datum/game_mode/paranoia - name = "paranoia" + name = "Malf AI, Renegades & Changelings" round_description = "The AI has malfunctioned, and subversive elements infest the crew..." extended_round_description = "Rampant AIs, renegades and changelings spawn in this mode." config_tag = "paranoia" diff --git a/code/game/gamemodes/mixed/traitorling.dm b/code/game/gamemodes/mixed/traitorling.dm index 4eb4b6c77a2..1ae93d7d384 100644 --- a/code/game/gamemodes/mixed/traitorling.dm +++ b/code/game/gamemodes/mixed/traitorling.dm @@ -1,5 +1,5 @@ /datum/game_mode/traitorling - name = "traitorling" + name = "Traitors & Changelings" round_description = "There are traitors and alien changelings on the station. Do not let the changelings succeed!" extended_round_description = "Traitors and changelings both spawn during this mode." config_tag = "traitorling" diff --git a/code/game/gamemodes/mixed/traitorrenegade.dm b/code/game/gamemodes/mixed/traitorrenegade.dm new file mode 100644 index 00000000000..c9430b10f9e --- /dev/null +++ b/code/game/gamemodes/mixed/traitorrenegade.dm @@ -0,0 +1,11 @@ +/datum/game_mode/traitorren + name = "Traitors & Renegades" + round_description = "Subversive elements have invaded the station, and certain individuals are feeling uncertain about their safety." + extended_round_description = "Traitors and renegades spawn during this round." + config_tag = "traitorren" + required_players = 10 //I don't think we can have it lower and not need an ERT every round. + required_players_secret = 11 //I don't think we can have it lower and not need an ERT every round. + required_enemies = 4 + end_on_antag_death = 0 + antag_tags = list(MODE_TRAITOR, MODE_RENEGADE) + require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/uprising.dm b/code/game/gamemodes/mixed/uprising.dm index 005d9dce915..d557cfc0755 100644 --- a/code/game/gamemodes/mixed/uprising.dm +++ b/code/game/gamemodes/mixed/uprising.dm @@ -1,5 +1,5 @@ /datum/game_mode/uprising - name = "uprising" + name = "Revolution & Cult" config_tag = "uprising" round_description = "Some crewmembers are attempting to start a revolution while a cult plots in the shadows!" extended_round_description = "Cultists and revolutionaries spawn in this round." diff --git a/code/game/gamemodes/mixed/visitors.dm b/code/game/gamemodes/mixed/visitors.dm index 89099c98782..e9a59198191 100644 --- a/code/game/gamemodes/mixed/visitors.dm +++ b/code/game/gamemodes/mixed/visitors.dm @@ -1,10 +1,10 @@ /datum/game_mode/visitors - name = "Visitors" + name = "Wizard & Ninja" round_description = "A space wizard and a ninja have invaded the station!" extended_round_description = "A ninja and wizard spawn during this round." config_tag = "visitors" - required_players = 10 - required_players_secret = 10 + required_players = 6 + required_players_secret = 6 required_enemies = 2 end_on_antag_death = 0 antag_tags = list(MODE_WIZARD, MODE_NINJA) diff --git a/code/game/gamemodes/ninja/ninja.dm b/code/game/gamemodes/ninja/ninja.dm index 40f59026bf3..d71412dc8a1 100644 --- a/code/game/gamemodes/ninja/ninja.dm +++ b/code/game/gamemodes/ninja/ninja.dm @@ -1,5 +1,5 @@ /datum/game_mode/ninja - name = "ninja" + name = "Ninja" round_description = "An agent of the Spider Clan is onboard the station!" extended_round_description = "What was that?! Was that a person or did your eyes just play tricks on you? \ You have no idea. That slim-suited, cryptic individual is an enigma to you and all of your knowledge. \ diff --git a/code/game/gamemodes/sandbox/sandbox.dm b/code/game/gamemodes/sandbox/sandbox.dm index a96c7c76398..a9641dabd28 100644 --- a/code/game/gamemodes/sandbox/sandbox.dm +++ b/code/game/gamemodes/sandbox/sandbox.dm @@ -1,5 +1,5 @@ /datum/game_mode/sandbox - name = "sandbox" + name = "Sandbox" config_tag = "sandbox" required_players = 0 votable = 0 diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index 5ac35742b2a..5f60ee90f55 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -19,6 +19,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) minimal_player_age = 14 economic_modifier = 20 + minimum_character_age = 25 ideal_character_age = 70 // Old geezer captains ftw @@ -67,6 +68,8 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) req_admin_notify = 1 minimal_player_age = 10 economic_modifier = 10 + + minimum_character_age = 25 ideal_character_age = 50 access = list(access_security, access_sec_doors, access_brig, access_forensics_lockers, diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 98661a9c4f2..48769efa197 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -188,12 +188,13 @@ department = "Civilian" department_flag = CIVILIAN faction = "Station" - total_positions = 1 - spawn_positions = 1 + total_positions = 2 + spawn_positions = 2 supervisors = "the head of personnel" selection_color = "#dddddd" access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels) + alt_titles = list("Custodian") equip(var/mob/living/carbon/human/H) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 20a5c1e5d16..15cae264ebd 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -13,6 +13,7 @@ req_admin_notify = 1 economic_modifier = 10 + minimum_character_age = 25 ideal_character_age = 50 diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index cced0b79b36..6bfd8c16cff 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -19,6 +19,7 @@ access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, access_keycard_auth, access_sec_doors, access_psychiatrist, access_eva, access_external_airlocks, access_maint_tunnels) + minimum_character_age = 25 minimal_player_age = 10 ideal_character_age = 50 diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index f5b1f4ed290..b892ad228fa 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -21,6 +21,7 @@ access_research, access_robotics, access_xenobiology, access_ai_upload, access_tech_storage, access_RC_announce, access_keycard_auth, access_tcomsat, access_gateway, access_xenoarch) + minimum_character_age = 25 minimal_player_age = 14 ideal_character_age = 50 @@ -124,7 +125,7 @@ if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand) + H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_r_store) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) - return 1 \ No newline at end of file + return 1 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index cc09386234c..ff13bf5cbfd 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -20,6 +20,7 @@ access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks) + minimum_character_age = 25 minimal_player_age = 14 equip(var/mob/living/carbon/human/H) @@ -92,7 +93,7 @@ spawn_positions = 2 supervisors = "the head of security" selection_color = "#ffeeee" - alt_titles = list("Forensic Technician") + alt_titles = list("Forensic Technician","Investigator") access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks) economic_modifier = 5 @@ -119,6 +120,7 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_trench(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/head/det(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit(H), slot_r_hand) return 1 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 7bf949e217f..adf5e2ab451 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -111,7 +111,7 @@ var/global/datum/controller/occupations/job_master if(istype(job, GetJob("Assistant"))) // We don't want to give him assistant, that's boring! continue - if(job in command_positions) //If you want a command position, select it! + if(job.title in command_positions) //If you want a command position, select it! continue if(jobban_isbanned(player, job.title)) @@ -331,7 +331,6 @@ var/global/datum/controller/occupations/job_master var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage. var/list/custom_equip_leftovers = list() if(H.client.prefs.gear && H.client.prefs.gear.len && job.title != "Cyborg" && job.title != "AI") - for(var/thing in H.client.prefs.gear) var/datum/gear/G = gear_datums[thing] if(G) @@ -353,10 +352,11 @@ var/global/datum/controller/occupations/job_master if(G.slot && !(G.slot in custom_equip_slots)) // This is a miserable way to fix the loadout overwrite bug, but the alternative requires // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + var/metadata = H.client.prefs.gear[G.display_name] if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) custom_equip_leftovers += thing - else if(H.equip_to_slot_or_del(new G.path(H), G.slot)) - H << "Equipping you with [thing]!" + else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" custom_equip_slots.Add(G.slot) else custom_equip_leftovers.Add(thing) @@ -375,8 +375,9 @@ var/global/datum/controller/occupations/job_master if(G.slot in custom_equip_slots) spawn_in_storage += thing else - if(H.equip_to_slot_or_del(new G.path(H), G.slot)) - H << "Equipping you with [thing]!" + var/metadata = H.client.prefs.gear[G.display_name] + if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) + H << "Equipping you with \the [thing]!" custom_equip_slots.Add(G.slot) else spawn_in_storage += thing @@ -439,9 +440,10 @@ var/global/datum/controller/occupations/job_master if(!isnull(B)) for(var/thing in spawn_in_storage) - H << "Placing [thing] in your [B]!" + H << "Placing \the [thing] in your [B.name]!" var/datum/gear/G = gear_datums[thing] - new G.path(B) + var/metadata = H.client.prefs.gear[G.display_name] + G.spawn_item(B, metadata) else H << "Failed to locate a storage object on your mob, either you spawned with no arms and no backpack or this is a bug." diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index d3603fe96e1..699898fde07 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -54,6 +54,7 @@ var/wiresexposed = 0 // If it's been screwdrivered open. var/aidisabled = 0 var/shorted = 0 + circuit = /obj/item/weapon/circuitboard/airalarm var/datum/wires/alarm/wires @@ -61,7 +62,6 @@ var/screen = AALARM_SCREEN_MAIN var/area_uid var/area/alarm_area - var/buildstage = 2 //2 is built, 1 is building, 0 is frame. var/target_temperature = T0C+20 var/regulating_temperature = 0 @@ -105,23 +105,8 @@ wires = null return ..() -/obj/machinery/alarm/New(var/loc, var/dir, var/building = 0) +/obj/machinery/alarm/New() ..() - - if(building) - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - update_icon() - return - first_run() /obj/machinery/alarm/proc/first_run() @@ -148,7 +133,7 @@ elect_master() /obj/machinery/alarm/process() - if((stat & (NOPOWER|BROKEN)) || shorted || buildstage != 2) + if((stat & (NOPOWER|BROKEN)) || shorted) return var/turf/simulated/location = loc @@ -605,9 +590,6 @@ data["thresholds"] = thresholds /obj/machinery/alarm/CanUseTopic(var/mob/user, var/datum/topic_state/state, var/href_list = list()) - if(buildstage != 2) - return STATUS_CLOSE - if(aidisabled && isAI(user)) user << "AI control for \the [src] interface has been disabled." return STATUS_CLOSE @@ -763,73 +745,43 @@ /obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up. + //user << "You pop the Air Alarm's maintence panel open." + wiresexposed = !wiresexposed + user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + update_icon() + return - switch(buildstage) - if(2) - if(istype(W, /obj/item/weapon/screwdriver)) // Opening that Air Alarm up. - //user << "You pop the Air Alarm's maintence panel open." - wiresexposed = !wiresexposed - user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" - update_icon() - return + if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "airalarm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "airalarm_2" + M.deconstruct(src) + qdel(src) + return - if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - new/obj/item/stack/cable_coil(get_turf(src), 5) - buildstage = 1 - update_icon() - return - - if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card - if(stat & (NOPOWER|BROKEN)) - user << "It does nothing" - return - else - if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) - locked = !locked - user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface." - else - user << "Access denied." + if (istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))// trying to unlock the interface with an ID card + if(stat & (NOPOWER|BROKEN)) + user << "It does nothing" return - - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - update_icon() - first_run() - return - else - user << "You need 5 pieces of cable to do wire \the [src]." - return - - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You start prying out the circuit." - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - if(do_after(user,20)) - user << "You pry out the circuit!" - var/obj/item/weapon/airalarm_electronics/circuit = new /obj/item/weapon/airalarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - return - if(0) - if(istype(W, /obj/item/weapon/airalarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - return - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/air_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) - + else + if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) + locked = !locked + user << "You [ locked ? "lock" : "unlock"] the Air Alarm interface." + else + user << "Access denied." return ..() /obj/machinery/alarm/power_change() @@ -839,14 +791,10 @@ /obj/machinery/alarm/examine(mob/user) ..(user) - if (buildstage < 2) - user << "It is not wired." - if (buildstage < 1) - user << "The circuit is missing." /* AIR ALARM CIRCUIT Just a object used in constructing air alarms -*/ + /obj/item/weapon/airalarm_electronics name = "air alarm electronics" icon = 'icons/obj/doors/door_assembly.dmi' @@ -854,7 +802,7 @@ Just a object used in constructing air alarms desc = "Looks like a circuit. Probably is." w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - +*/ /* FIRE ALARM */ @@ -875,20 +823,13 @@ FIRE ALARM power_channel = ENVIRON var/last_process = 0 var/wiresexposed = 0 - var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone var/seclevel + circuit = /obj/item/weapon/circuitboard/firealarm /obj/machinery/firealarm/update_icon() overlays.Cut() if(wiresexposed) - switch(buildstage) - if(2) - icon_state="fire_b2" - if(1) - icon_state="fire_b1" - if(0) - icon_state="fire_b0" set_light(0) return @@ -932,56 +873,36 @@ FIRE ALARM /obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob) src.add_fingerprint(user) - if (istype(W, /obj/item/weapon/screwdriver) && buildstage == 2) + if (istype(W, /obj/item/weapon/screwdriver)) wiresexposed = !wiresexposed update_icon() return if(wiresexposed) - switch(buildstage) - if(2) - if (istype(W, /obj/item/device/multitool)) - src.detecting = !( src.detecting ) - if (src.detecting) - user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") - else - user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") - else if (istype(W, /obj/item/weapon/wirecutters)) - user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") - new/obj/item/stack/cable_coil(get_turf(src), 5) - playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) - buildstage = 1 - update_icon() - if(1) - if(istype(W, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = W - if (C.use(5)) - user << "You wire \the [src]." - buildstage = 2 - return - else - user << "You need 5 pieces of cable to wire \the [src]." - return - else if(istype(W, /obj/item/weapon/crowbar)) - user << "You pry out the circuit!" - playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) - spawn(20) - var/obj/item/weapon/firealarm_electronics/circuit = new /obj/item/weapon/firealarm_electronics() - circuit.loc = user.loc - buildstage = 0 - update_icon() - if(0) - if(istype(W, /obj/item/weapon/firealarm_electronics)) - user << "You insert the circuit!" - qdel(W) - buildstage = 1 - update_icon() - - else if(istype(W, /obj/item/weapon/wrench)) - user << "You remove the fire alarm assembly from the wall!" - new /obj/item/frame/fire_alarm(get_turf(user)) - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - qdel(src) + if (istype(W, /obj/item/device/multitool)) + src.detecting = !( src.detecting ) + if (src.detecting) + user.visible_message("\The [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") + else + user.visible_message("\The [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") + else if (istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("\The [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + new/obj/item/stack/cable_coil(get_turf(src), 5) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "firealarm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "firealarm_2" + M.deconstruct(src) + qdel(src) return src.alarm() @@ -1016,9 +937,6 @@ FIRE ALARM if(user.stat || stat & (NOPOWER|BROKEN)) return - if (buildstage != 2) - return - user.set_machine(src) var/area/A = src.loc var/d1 @@ -1061,9 +979,6 @@ FIRE ALARM if (usr.stat || stat & (BROKEN|NOPOWER)) return - if (buildstage != 2) - return - if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) if (href_list["reset"]) @@ -1106,23 +1021,6 @@ FIRE ALARM //playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0) return - - -/obj/machinery/firealarm/New(loc, dir, building) - ..() - - if(loc) - src.loc = loc - - if(dir) - src.set_dir(dir) - - if(building) - buildstage = 0 - wiresexposed = 1 - pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) - pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - /obj/machinery/firealarm/proc/set_security_level(var/newlevel) if(seclevel != newlevel) seclevel = newlevel @@ -1135,7 +1033,7 @@ FIRE ALARM /* FIRE ALARM CIRCUIT Just a object used in constructing fire alarms -*/ + /obj/item/weapon/firealarm_electronics name = "fire alarm electronics" icon = 'icons/obj/doors/door_assembly.dmi' @@ -1143,7 +1041,7 @@ Just a object used in constructing fire alarms desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = 2.0 matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - +*/ /obj/machinery/partyalarm name = "\improper PARTY BUTTON" desc = "Cuban Pete is in the house!" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 8029fd67c4a..d2f3c215a3c 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 2000 - + circuit = /obj/item/weapon/circuitboard/autolathe var/list/machine_recipes var/list/stored_material = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0) var/list/storage_capacity = list(DEFAULT_WALL_MATERIAL = 0, "glass" = 0) @@ -30,14 +30,13 @@ wires = new(src) //Create parts for lathe. component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/autolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/console_screen(src) RefreshParts() - + /obj/machinery/autolathe/Destroy() qdel(wires) wires = null diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 8c4c2447998..244b74f17fc 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -158,12 +158,12 @@ /datum/autolathe/recipe/airalarm name = "air alarm electronics" - path = /obj/item/weapon/airalarm_electronics + path = /obj/item/weapon/circuitboard/airalarm category = "Engineering" /datum/autolathe/recipe/firealarm name = "fire alarm electronics" - path = /obj/item/weapon/firealarm_electronics + path = /obj/item/weapon/circuitboard/firealarm category = "Engineering" /datum/autolathe/recipe/powermodule @@ -171,6 +171,96 @@ path = /obj/item/weapon/module/power_control category = "Engineering" +/datum/autolathe/recipe/statusdisplay + name = "status display electronics" + path = /obj/item/weapon/circuitboard/status_display + category = "Engineering" + +/datum/autolathe/recipe/aistatusdisplay + name = "ai status display electronics" + path = /obj/item/weapon/circuitboard/ai_status_display + category = "Engineering" + +/datum/autolathe/recipe/newscaster + name = "newscaster electronics" + path = /obj/item/weapon/circuitboard/newscaster + category = "Engineering" + +/datum/autolathe/recipe/atm + name = "atm electronics" + path = /obj/item/weapon/circuitboard/atm + category = "Engineering" + +/datum/autolathe/recipe/intercom + name = "intercom electronics" + path = /obj/item/weapon/circuitboard/intercom + category = "Engineering" + +/datum/autolathe/recipe/holopad + name = "holopad electronics" + path = /obj/item/weapon/circuitboard/holopad + category = "Engineering" + +/datum/autolathe/recipe/guestpass + name = "guestpass console electronics" + path = /obj/item/weapon/circuitboard/guestpass + category = "Engineering" + +/datum/autolathe/recipe/entertainment + name = "entertainment camera electronics" + path = /obj/item/weapon/circuitboard/security/telescreen/entertainment + category = "Engineering" + +/datum/autolathe/recipe/keycard + name = "keycard authenticator electronics" + path = /obj/item/weapon/circuitboard/keycard_auth + category = "Engineering" + +/datum/autolathe/recipe/photocopier + name = "photocopier electronics" + path = /obj/item/weapon/circuitboard/photocopier + category = "Engineering" + +/datum/autolathe/recipe/fax + name = "fax machine electronics" + path = /obj/item/weapon/circuitboard/fax + category = "Engineering" + +/datum/autolathe/recipe/conveyor + name = "conveyor electronics" + path = /obj/item/weapon/circuitboard/conveyor + category = "Engineering" + +/datum/autolathe/recipe/microwave + name = "microwave electronics" + path = /obj/item/weapon/circuitboard/microwave + category = "Engineering" + +/datum/autolathe/recipe/vending + name = "vending machine electronics" + path = /obj/item/weapon/circuitboard/vending + category = "Engineering" + +/datum/autolathe/recipe/washing + name = "washing machine electronics" + path = /obj/item/weapon/circuitboard/washing + category = "Engineering" + +/datum/autolathe/recipe/motor + name = "motor" + path = /obj/item/weapon/stock_parts/motor + category = "Engineering" + +/datum/autolathe/recipe/gear + name = "gear" + path = /obj/item/weapon/stock_parts/gear + category = "Engineering" + +/datum/autolathe/recipe/spring + name = "spring" + path = /obj/item/weapon/stock_parts/spring + category = "Engineering" + /datum/autolathe/recipe/rcd_ammo name = "matter cartridge" path = /obj/item/weapon/rcd_ammo diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index d1a82813618..f5b437521a0 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -5,6 +5,7 @@ icon_state = "biogen-stand" density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/biogenerator use_power = 1 idle_power_usage = 40 var/processing = 0 @@ -23,7 +24,6 @@ beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src) component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/biogenerator(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) @@ -106,9 +106,9 @@ dat += "10 milk ([round(20/build_eff)])
" dat += "Slab of meat ([round(50/build_eff)])
" dat += "Nutrient
" - dat += "E-Z-Nutrient ([round(10/build_eff)]) | x5
" - dat += "Left 4 Zed ([round(20/build_eff)]) | x5
" - dat += "Robust Harvest ([round(25/build_eff)]) | x5
" + dat += "E-Z-Nutrient ([round(10/build_eff)]) | x5
" + dat += "Left 4 Zed ([round(20/build_eff)]) | x5
" + dat += "Robust Harvest ([round(25/build_eff)]) | x5
" dat += "Leather
" dat += "Wallet ([round(100/build_eff)])
" dat += "Botanical gloves ([round(250/build_eff)])
" @@ -179,29 +179,29 @@ if("meat") new/obj/item/weapon/reagent_containers/food/snacks/meat(loc) if("ez") - new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) if("l4z") - new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/left4zed(loc) if("rh") - new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/robustharvest(loc) if("ez5") //It's not an elegant method, but it's safe and easy. -Cheridan - new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/eznutrient(loc) if("l4z5") - new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/left4zed(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/left4zed(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/left4zed(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/left4zed(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/left4zed(loc) if("rh5") - new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) - new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/robustharvest(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/robustharvest(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/robustharvest(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/robustharvest(loc) + new/obj/item/weapon/reagent_containers/glass/bottle/robustharvest(loc) if("wallet") new/obj/item/weapon/storage/wallet(loc) if("gloves") diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a06b22927db..3f7a8d600ce 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -30,6 +30,7 @@ desc = "An electronically-lockable pod for growing organic tissue." density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/clonepod icon = 'icons/obj/cloning.dmi' icon_state = "pod_0" req_access = list(access_genetics) //For premature unlocking. @@ -47,7 +48,6 @@ /obj/machinery/clonepod/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/clonepod(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 87cfeea09b3..189fe5b40a8 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -393,14 +393,14 @@ dat += "
You ran out of food and starved." if(emagged) user.nutrition = 0 //yeah you pretty hongry - user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." + user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." if(fuel <= 0) dat += "
You ran out of fuel, and drift, slowly, into a star." if(emagged) var/mob/living/M = user M.adjust_fire_stacks(5) M.IgniteMob() //flew into a star, so you're on fire - user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames." + user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames." dat += "

OK...

" if(emagged) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index e7f92e02375..4b64cbadce9 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -215,7 +215,8 @@ icon_screen = "entertainment" light_color = "#FFEEDB" light_range_on = 2 - circuit = null + network = list(NETWORK_THUNDER) + circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment /obj/machinery/computer/security/wooden_tv name = "security camera monitor" desc = "An old TV hooked into the stations camera network." diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index d9d5f4707be..6f380739cc4 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -7,7 +7,7 @@ use_power = 1 idle_power_usage = 300 active_power_usage = 300 - var/circuit = null //The path to the circuit board type. If circuit==null, the computer can't be disassembled. + frame_type = "computer" var/processing = 0 var/icon_keyboard = "generic_key" @@ -98,23 +98,28 @@ /obj/machinery/computer/attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(do_after(user, 20)) - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M A.anchored = 1 + A.density = 1 + A.frame_type = M.board_type for (var/obj/C in src) - C.loc = src.loc + C.forceMove(loc) if (src.stat & BROKEN) user << "The broken glass falls out." new /obj/item/weapon/material/shard( src.loc ) A.state = 3 - A.icon_state = "3" + A.icon_state = "[A.frame_type]_3" else user << "You disconnect the monitor." A.state = 4 - A.icon_state = "4" + A.icon_state = "[A.frame_type]_4" + A.pixel_x = pixel_x + A.pixel_y = pixel_y M.deconstruct(src) qdel(src) else diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index ac311ff062b..30d12b0b507 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -46,6 +46,7 @@ icon_keyboard = null icon_screen = "pass" density = 0 + circuit = /obj/item/weapon/circuitboard/guestpass var/obj/item/weapon/card/id/giver var/list/accesses = list() @@ -60,10 +61,29 @@ ..() uid = "[rand(100,999)]-G[rand(10,99)]" -/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) - if(istype(O, /obj/item/weapon/card/id)) - if(!giver && user.removeItem(O, src)) - giver = O +/obj/machinery/computer/guestpass/attackby(obj/I, mob/user) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "guestpass" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "guestpass_4" + M.deconstruct(src) + qdel(src) + return + if(istype(I, /obj/item/weapon/card/id)) + if(!giver && user.removeItem(I, src)) + giver = I updateUsrDialog() else if(giver) user << "There is already ID card inside." @@ -134,8 +154,12 @@ var/A = text2num(href_list["access"]) if (A in accesses) accesses.Remove(A) - else - accesses.Add(A) + else + if(A in giver.access) //Let's make sure the ID card actually has the access. + accesses.Add(A) + else + usr << "Invalid selection, please consult technical support if there are any issues." + log_debug("[key_name_admin(usr)] tried selecting an invalid guest pass terminal option.") if (href_list["action"]) switch(href_list["action"]) if ("id") diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index c2c45987063..1c54fb0f4ce 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -26,32 +26,6 @@ var/prison_shuttle_timeleft = 0 attack_ai(var/mob/user as mob) return src.attack_hand(user) - attackby(I as obj, user as mob) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/prison_shuttle/M = new /obj/item/weapon/circuitboard/prison_shuttle( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.anchored = 1 - - if (src.stat & BROKEN) - user << "The broken glass falls out." - new /obj/item/weapon/material/shard( src.loc ) - A.state = 3 - A.icon_state = "3" - else - user << "You disconnect the monitor." - A.state = 4 - A.icon_state = "4" - - qdel(src) - else - return src.attack_hand(user) - - attack_hand(var/mob/user as mob) if(!src.allowed(user) && (!hacked)) user << "Access Denied." diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 132f6625674..82834df8962 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -91,7 +91,7 @@ if(!target || !istype(target)) return - var/istraitor = traitors.is_antagonist(target.mind) + var/istraitor = target.mind.special_role if (istraitor) target.lockcharge = !target.lockcharge if (target.lockcharge) @@ -187,7 +187,7 @@ robot["name"] = R.name if(R.stat) robot["status"] = "Not Responding" - else if (!R.canmove) + else if (R.lockcharge) robot["status"] = "Lockdown" else robot["status"] = "Operational" diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm index 37d9a67d924..e0040a6d838 100644 --- a/code/game/machinery/computer3/computer.dm +++ b/code/game/machinery/computer3/computer.dm @@ -29,7 +29,7 @@ // when you had to search the list to find what you had. // Mostly decorative, holds the OS rom - var/obj/item/part/computer/circuitboard/circuit + var/obj/item/part/computer/circuitboard/circuitb // Storage var/obj/item/part/computer/storage/hdd/hdd = null @@ -97,11 +97,11 @@ overlays += kb if(!built) - if(!circuit || !istype(circuit)) - circuit = new(src) - if(circuit.OS) - os = circuit.OS - circuit.OS.computer = src + if(!circuitb || !istype(circuitb)) + circuitb = new(src) + if(circuitb.OS) + os = circuitb.OS + circuitb.OS.computer = src else os = null @@ -121,10 +121,10 @@ floppy.addfile(P) program = P else - circuit.OS = P - circuit.OS.computer = src - os = circuit.OS - circuit.name = "Circuitboard ([P])" + circuitb.OS = P + circuitb.OS.computer = src + os = circuitb.OS + circuitb.name = "Circuitboard ([P])" if(hdd) // Spawn files diff --git a/code/game/machinery/computer3/computers/camera.dm b/code/game/machinery/computer3/computers/camera.dm index 5a1b3acc0e2..0f92519c361 100644 --- a/code/game/machinery/computer3/computers/camera.dm +++ b/code/game/machinery/computer3/computers/camera.dm @@ -26,7 +26,7 @@ New() ..(built=0) os = program - circuit.OS = os + circuitb.OS = os /obj/machinery/computer3/security/mining diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 48fea8a04aa..6c4c6160cd8 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -63,10 +63,9 @@ return 1 /obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob) - if(user.stat) - return - go_out() - return + // note that relaymove will also be called for mobs outside the cell with UI open + if(src.occupant == user && !user.stat) + go_out() /obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) ui_interact(user) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index f3e5373761a..ac88f1644bb 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -219,7 +219,7 @@ var/disallow_occupant_types = list() var/mob/occupant = null // Person waiting to be despawned. - var/time_till_despawn = 18000 // 30 minutes-ish safe period before being despawned. + var/time_till_despawn = 9000 // Down to 15 minutes //30 minutes-ish is too long var/time_entered = 0 // Used to keep track of the safe period. var/obj/item/device/radio/intercom/announce // @@ -486,32 +486,33 @@ if(istype(G, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/grab = G if(occupant) user << "\The [src] is in use." return - if(!ismob(G:affecting)) + if(!ismob(grab.affecting)) return - if(!check_occupant_allowed(G:affecting)) + if(!check_occupant_allowed(grab.affecting)) return var/willing = null //We don't want to allow people to be forced into despawning. - var/mob/M = G:affecting + var/mob/M = grab.affecting if(M.client) if(alert(M,"Would you like to enter long-term storage?",,"Yes","No") == "Yes") - if(!M || !G || !G:affecting) return + if(!M || !grab || !grab:affecting) return willing = 1 else willing = 1 if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("\The [user] starts putting [grab:affecting:name] into \the [src].", 3) if(do_after(user, 20)) - if(!M || !G || !G:affecting) return + if(!M || !grab || !grab:affecting) return M.forceMove(src) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index cb8b9f5e692..15d2848cd22 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -808,23 +808,23 @@ About the new airlock wires panel: else spawn(0) close(1) - else if(istype(C, /obj/item/weapon/material/twohanded/fireaxe) && !arePowerSystemsOn()) + // Check if we're using a crowbar or armblade, and if the airlock's unpowered for whatever reason (off, broken, etc). + else if( (istype(C, /obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade) ) && !arePowerSystemsOn()) if(locked) user << "The airlock's bolts prevent it from being forced." else if( !welded && !operating ) + if(istype(C, /obj/item/weapon/material/twohanded/fireaxe)) // If this is a fireaxe, make sure it's held in two hands. + var/obj/item/weapon/material/twohanded/fireaxe/F = C + if(!F.wielded) + user << "You need to be wielding \the [F] to do that." + return + // At this point, it's an armblade or a fireaxe that passed the wielded test, let's try to open it. if(density) - var/obj/item/weapon/material/twohanded/fireaxe/F = C - if(F.wielded) - spawn(0) open(1) - else - user << "You need to be wielding \the [C] to do that." + spawn(0) + open(1) else - var/obj/item/weapon/material/twohanded/fireaxe/F = C - if(F.wielded) - spawn(0) close(1) - else - user << "You need to be wielding \the [C] to do that." - + spawn(0) + close(1) else ..() return diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 8c960e7bdf4..9647befd6ec 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -86,11 +86,17 @@ // Proc: attackby() // Parameters: 2 (C - Item this object was clicked with, user - Mob which clicked this object) -// Description: If we are clicked with crowbar or wielded fire axe, try to manually open the door. +// Description: If we are clicked with crowbar, wielded fire axe, or armblade, try to manually open the door. // This only works on broken doors or doors without power. Also allows repair with Plasteel. /obj/machinery/door/blast/attackby(obj/item/weapon/C as obj, mob/user as mob) src.add_fingerprint(user) - if(istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/material/twohanded/fireaxe) && C:wielded == 1)) + if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade)) + if(istype(C,/obj/item/weapon/material/twohanded/fireaxe)) + var/obj/item/weapon/material/twohanded/fireaxe/F = C + if(!F.wielded) + user << "You need to be wielding \the [F] to do that." + return + if(((stat & NOPOWER) || (stat & BROKEN)) && !( src.operating )) force_toggle() else @@ -144,7 +150,7 @@ if(stat & BROKEN) stat &= ~BROKEN - + /obj/machinery/door/blast/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group) return 1 return ..() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index 08d47db1582..b2b619e342b 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -221,7 +221,7 @@ if (stat & BROKEN) new /obj/item/weapon/circuitboard/broken(src.loc) else - new/obj/item/weapon/airalarm_electronics(src.loc) + new/obj/item/weapon/circuitboard/airalarm(src.loc) var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(src.loc) FA.anchored = 1 @@ -235,7 +235,7 @@ user << "\The [src] is welded shut!" return - if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/material/twohanded/fireaxe)) + if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/material/twohanded/fireaxe) || istype(C, /obj/item/weapon/melee/arm_blade)) if(operating) return diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index c01fff5bed3..a96065d2c6d 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -36,7 +36,7 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob) new/obj/item/stack/cable_coil(src.loc, 1) wired = 0 - else if(istype(C, /obj/item/weapon/airalarm_electronics) && wired) + else if(istype(C, /obj/item/weapon/circuitboard/airalarm) && wired) if(anchored) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] has inserted a circuit into \the [src]!", diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm new file mode 100644 index 00000000000..35f0cf6af0c --- /dev/null +++ b/code/game/machinery/frame.dm @@ -0,0 +1,412 @@ +/obj/structure/frame + anchored = 0 + name = "frame" + icon = 'icons/obj/stock_parts.dmi' + icon_state = "machine_0" + var/state = 0 + var/obj/item/weapon/circuitboard/circuit = null + var/need_circuit = 1 + var/frame_type = "machine" + + var/list/components = null + var/list/req_components = null + var/list/req_component_names = null + + var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard") + var/list/machines = list("machine", "photocopier", "fax", "microwave", "conveyor", "vending", "recharger", "wrecharger", "washing", "grinder") + var/list/computers = list("computer", "holopad") + var/list/displays = list("display", "guestpass", "newscaster", "atm") + var/list/no_circuit = list("wrecharger", "recharger", "grinder","conveyor") + +/obj/structure/frame/proc/update_desc() + var/D + if(req_components) + var/list/component_list = new + for(var/I in req_components) + if(req_components[I] > 0) + component_list += "[num2text(req_components[I])] [req_component_names[I]]" + D = "Requires [english_list(component_list)]." + desc = D + +/obj/structure/frame/proc/check_components(mob/user as mob) + components = list() + req_components = circuit.req_components.Copy() + for(var/A in circuit.req_components) + req_components[A] = circuit.req_components[A] + req_component_names = circuit.req_components.Copy() + for(var/A in req_components) + var/cp = text2path(A) + var/obj/ct = new cp() // have to quickly instantiate it get name + req_component_names[A] = ct.name + +/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob) + ..() + if(building) + src.frame_type = frame_type + icon_state = "[frame_type]_0" + + if(frame_type in alarms) + if(loc) + src.loc = loc + + state = 0 + if(frame_type == "airalarm" || frame_type == "firealarm" || frame_type == "keycard") + if(dir) + src.set_dir(dir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) + pixel_y = (dir & 3)? (dir == 1 ? -24 : 24) : 0 + + if(frame_type == "intercom") + if(dir) + src.set_dir(dir) + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -28 : 28) : 0 + + update_icon() + return + + if(frame_type in displays) + if(loc) + src.loc = loc + + if(frame_type == "display" || frame_type == "atm") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0 + + if(frame_type == "newscaster") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + + if(frame_type == "guestpass") + pixel_x = (dir & 3)? 0 : (dir == 4 ? -30 : 30) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + + update_icon() + return + + if(frame_type in no_circuit) + need_circuit = 0 + if(frame_type == "wrecharger") + circuit = new /obj/item/weapon/circuitboard/recharger/wrecharger(src) + if(loc) + src.loc = loc + + state = 0 + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -26 : 32) + pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0 + + update_icon() + return + if(frame_type == "recharger") + circuit = new /obj/item/weapon/circuitboard/recharger(src) + if(frame_type == "grinder") + circuit = new /obj/item/weapon/circuitboard/grinder(src) + if(frame_type == "conveyor") + circuit = new /obj/item/weapon/circuitboard/conveyor(src) + if(dir) + src.set_dir(dir) + + if(frame_type == "computer") + density = 1 + if(frame_type in machines) + density = 1 + return + +/obj/structure/frame/attackby(obj/item/P as obj, mob/user as mob) + if(istype(P, /obj/item/weapon/wrench)) + if(state == 0) + user << "You start to wrench the frame into place." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + src.anchored = 1 + if(!need_circuit && circuit) + src.state = 2 + check_components() + update_desc() + src.icon_state = "[frame_type]_2" + user << "You wrench the frame into place and set the outer cover." + else + src.state = 1 + user << "You wrench the frame into place." + return + + if(state == 1) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the frame." + src.anchored = 0 + src.state = 0 + return + + if(istype(P, /obj/item/weapon/weldingtool)) + if(state == 0) + var/obj/item/weapon/weldingtool/WT = P + if(!WT.remove_fuel(0, user)) + user << "The welding tool must be on to complete this task." + return + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + user << "You deconstruct the frame." + if(frame_type == "holopad" || frame_type == "microwave") + new /obj/item/stack/material/steel( src.loc, 4 ) + else if(frame_type == "fax" || frame_type == "newscaster" || frame_type == "recharger" || frame_type == "wrecharger" || frame_type == "grinder") + new /obj/item/stack/material/steel( src.loc, 3 ) + else if(frame_type == "firealarm" || frame_type == "airalarm" || frame_type == "intercom" || frame_type == "guestpass") + new /obj/item/stack/material/steel( src.loc, 2 ) + else if(frame_type == "keycard") + new /obj/item/stack/material/steel( src.loc, 1 ) + else + new /obj/item/stack/material/steel( src.loc, 5 ) + qdel(src) + return + + if(istype(P, /obj/item/weapon/circuitboard) && need_circuit && !circuit) + if(state == 1) + var/obj/item/weapon/circuitboard/B = P + if(B.board_type == frame_type) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You place the circuit board inside the frame." + src.icon_state = "[frame_type]_1" + src.circuit = P + user.drop_item() + P.loc = src + if(frame_type in machines) //because machines are assholes + check_components() + update_desc() + return + else + user << "This frame does not accept circuit boards of this type!" + return + + if(istype(P, /obj/item/weapon/screwdriver)) + if(state == 1) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You screw the circuit board into place." + src.state = 2 + src.icon_state = "[frame_type]_2" + return + + if(state == 2) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You unfasten the circuit board." + src.state = 1 + src.icon_state = "[frame_type]_1" + return + + if(!need_circuit && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You unfasten the outer cover." + src.state = 1 + src.icon_state = "[frame_type]_0" + return + + if(state == 3) + if(frame_type in machines) + var/component_check = 1 + for(var/R in req_components) + if(req_components[R] > 0) + component_check = 0 + break + if(component_check) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir) + if(!new_machine.component_parts) + for(var/obj/O in src.components) + O.forceMove(null) + new_machine.RefreshParts() + + src.circuit.construct(new_machine) + new_machine.pixel_x = src.pixel_x + new_machine.pixel_y = src.pixel_y + qdel(src) + return + + if(frame_type in alarms) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You fasten the cover." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + B.set_dir(dir) + src.circuit.construct(B) + qdel(src) + return + + if(state == 4) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You connect the monitor." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + src.circuit.construct(B) + qdel(src) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You connect the monitor." + var/obj/machinery/B = new src.circuit.build_path ( src.loc ) + B.pixel_x = src.pixel_x + B.pixel_y = src.pixel_y + src.circuit.construct(B) + qdel(src) + return + + if(istype(P, /obj/item/weapon/crowbar)) + if(state == 1) + if(need_circuit && circuit) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the circuit board." + src.state = 1 + src.icon_state = "[frame_type]_0" + circuit.loc = src.loc + src.circuit = null + if(frame_type in machines) //becuase machines are assholes + req_components = null + return + + if(state == 3) + if(frame_type in machines) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + if(components.len == 0) + user << "There are no components to remove." + else + user << "You remove the components." + for(var/obj/item/weapon/W in components) + W.forceMove(loc) + check_components() + update_desc() + user << desc + return + + if(state == 4) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass panel." + src.state = 3 + src.icon_state = "[frame_type]_3" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass panel." + src.state = 3 + src.icon_state = "[frame_type]_3" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(P, /obj/item/stack/cable_coil)) + if(state == 2) + var/obj/item/stack/cable_coil/C = P + if (C.get_amount() < 5) + user << "You need five coils of wire to add them to the frame." + return + user << "You start to add cables to the frame." + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(do_after(user, 20) && state == 2) + if (C.use(5)) + user << "You add cables to the frame." + state = 3 + icon_state = "[frame_type]_3" + if(frame_type in machines) + user << desc + return + + if(istype(P, /obj/item/weapon/wirecutters)) + if(state == 3) + if(frame_type in computers) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in displays) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in alarms) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(frame_type in machines) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You remove the cables." + src.state = 2 + src.icon_state = "[frame_type]_2" + new /obj/item/stack/cable_coil( src.loc, 5 ) + return + + if(istype(P, /obj/item/stack/material) && P.get_material_name() == "glass") + if(state == 3) + if(frame_type in computers) + var/obj/item/stack/G = P + if (G.get_amount() < 2) + user << "You need two sheets of glass to put in the glass panel." + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You start to put in the glass panel." + if(do_after(user, 20) && state == 3) + if (G.use(2)) + user << "You put in the glass panel." + src.state = 4 + src.icon_state = "[frame_type]_4" + return + + if(frame_type in displays) + var/obj/item/stack/G = P + if (G.get_amount() < 2) + user << "You need two sheets of glass to put in the glass panel." + return + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + user << "You start to put in the glass panel." + if(do_after(user, 20) && state == 3) + if (G.use(2)) + user << "You put in the glass panel." + src.state = 4 + src.icon_state = "[frame_type]_4" + return + + if(istype(P, /obj/item)) + if(state == 3) + if(frame_type in machines) + for(var/I in req_components) + if(istype(P, text2path(I)) && (req_components[I] > 0)) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + if(istype(P, /obj/item/stack)) + var/obj/item/stack/CP = P + if(CP.get_amount() > 1) + var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided + var/obj/item/stack/CC = new /obj/item/stack(src) + CC.amount = camt + CC.update_icon() + CP.use(camt) + components += CC + req_components[I] -= camt + update_desc() + break + user.drop_item() + P.forceMove(src) + components += P + req_components[I]-- + update_desc() + break + user << desc + if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil) && !istype(P, /obj/item/stack/material)) + user << "You cannot add that component to the machine!" + return \ No newline at end of file diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index d34acd5d2d4..58c8423a23e 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -36,6 +36,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." icon_state = "holopad0" show_messages = 1 + circuit = /obj/item/weapon/circuitboard/holopad layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. @@ -47,6 +48,30 @@ var/const/HOLOPAD_MODE = RANGE_BASED var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. +/obj/machinery/hologram/holopad/attackby(obj/item/I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start removing the glass." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + A.density = 1 + A.frame_type = "holopad" + for (var/obj/C in src) + C.forceMove(loc) + user << "You remove the glass." + A.state = 4 + A.icon_state = "holopad_4" + M.deconstruct(src) + for (var/mob/living/silicon/ai/master in masters) + clear_holo(master) + qdel(src) + else + src.attack_hand(user) + return + /obj/machinery/hologram/holopad/attack_hand(var/mob/living/carbon/human/user) //Carn: Hologram requests. if(!istype(user)) return diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index d2fa5478cbb..1df586b809e 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -62,6 +62,19 @@ user << "You attach \the [W] to \the [src]." src.update_icon() return + + if(istype(W, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You start to dismantle the IV drip." + if(do_after(user, 15)) + user << "You dismantle the IV drip." + var/obj/item/stack/rods/A = new /obj/item/stack/rods( src.loc ) + A.amount = 6 + if(src.beaker) + src.beaker.loc = get_turf(src) + src.beaker = null + qdel(src) + return else return ..() diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index 91c9792c60e..bb92f2c4b07 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -10,6 +10,7 @@ idle_power_usage = 5 active_power_usage = 100 flags = OPENCONTAINER | NOREACT + circuit = /obj/item/weapon/circuitboard/microwave var/operating = 0 // Is it on? var/dirty = 0 // = {0..100} Does it need cleaning? var/broken = 0 // ={0,1,2} How broken is it??? @@ -29,6 +30,13 @@ ..() reagents = new/datum/reagents(100) reagents.my_atom = src + + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + RefreshParts() + if (!available_recipes) available_recipes = new for (var/type in (typesof(/datum/recipe)-/datum/recipe)) @@ -82,6 +90,11 @@ else user << "It's broken!" return 1 + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner)) // If they're trying to clean it then let them user.visible_message( \ @@ -101,7 +114,7 @@ user << "It's dirty!" return 1 else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=max_n_of_items) + if (contents.len>=(max_n_of_items + component_parts.len)) //Adds component_parts to the maximum number of items. user << "This [src] is full of ingredients, you cannot put more." return 1 if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it @@ -162,7 +175,7 @@ var/list/items_counts = new var/list/items_measures = new var/list/items_measures_p = new - for (var/obj/O in contents) + for (var/obj/O in (contents-component_parts)) var/display_name = O.name if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg)) items_measures[display_name] = "egg" @@ -222,7 +235,7 @@ if(stat & (NOPOWER|BROKEN)) return start() - if (reagents.total_volume==0 && !(locate(/obj) in contents)) //dry run + if (reagents.total_volume==0 && !(locate(/obj) in (contents-component_parts))) //dry run if (!wzhzhzh(10)) abort() return @@ -284,7 +297,7 @@ return 1 /obj/machinery/microwave/proc/has_extra_item() - for (var/obj/O in contents) + for (var/obj/O in (contents-component_parts)) if ( \ !istype(O,/obj/item/weapon/reagent_containers/food) && \ !istype(O, /obj/item/weapon/grown) \ @@ -310,7 +323,7 @@ src.updateUsrDialog() /obj/machinery/microwave/proc/dispose() - for (var/obj/O in contents) + for (var/obj/O in (contents-component_parts)) O.loc = src.loc if (src.reagents.total_volume) src.dirty++ @@ -345,7 +358,7 @@ /obj/machinery/microwave/proc/fail() var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src) var/amount = 0 - for (var/obj/O in contents-ffuu) + for (var/obj/O in (contents-ffuu)-component_parts) amount++ if (O.reagents) var/id = O.reagents.get_master_reagent_id() diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index ded7ebc9b98..74f60a3a729 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -7,10 +7,12 @@ icon = 'icons/obj/power.dmi' icon_state = "light1" anchored = 1.0 + use_power = 1 + idle_power_usage = 10 + power_channel = LIGHT var/on = 1 var/area/area = null var/otherarea = null - // luminosity = 1 /obj/machinery/light_switch/New() ..() @@ -31,8 +33,12 @@ /obj/machinery/light_switch/proc/updateicon() if(stat & NOPOWER) icon_state = "light-p" + set_light(0) + layer = OBJ_LAYER else icon_state = "light[on]" + set_light(2, 1.5, on ? "#82FF4C" : "#F86060") + layer = LIGHTING_LAYER+0.1 /obj/machinery/light_switch/examine(mob/user) if(..(user, 1)) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6c391b75b5e..9ad2fd73eb1 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -112,6 +112,8 @@ Class Procs: var/panel_open = 0 var/global/gl_uid = 1 var/interact_offline = 0 // Can the machine be interacted with while de-powered. + var/circuit = null + var/frame_type = "machine" /obj/machinery/New(l, d=0) ..(l) @@ -225,11 +227,6 @@ Class Procs: istype(usr, /mob/living/silicon))) usr << "You don't have the dexterity to do this!" return 1 -/* - //distance checks are made by atom/proc/DblClick - if ((get_dist(src, user) > 1 || !istype(src.loc, /turf)) && !istype(user, /mob/living/silicon)) - return 1 -*/ if (ishuman(user)) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 55) @@ -280,29 +277,13 @@ Class Procs: return 1 return 0 -/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) - if(!istype(C)) - return 0 - if(!panel_open) - return 0 - . = dismantle() - -/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) - if(!istype(S)) - return 0 - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - panel_open = !panel_open - user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." - update_icon() - return 1 - /obj/machinery/proc/default_part_replacement(var/mob/user, var/obj/item/weapon/storage/part_replacer/R) if(!istype(R)) return 0 if(!component_parts) return 0 if(panel_open) - var/obj/item/weapon/circuitboard/CB = locate(/obj/item/weapon/circuitboard) in component_parts + var/obj/item/weapon/circuitboard/CB = circuit var/P for(var/obj/item/weapon/stock_parts/A in component_parts) for(var/D in CB.req_components) @@ -328,13 +309,45 @@ Class Procs: user << " [C.name]" return 1 +/obj/machinery/proc/default_deconstruction_crowbar(var/mob/user, var/obj/item/weapon/crowbar/C) + if(!istype(C)) + return 0 + if(!panel_open) + return 0 + . = dismantle() + +/obj/machinery/proc/default_deconstruction_screwdriver(var/mob/user, var/obj/item/weapon/screwdriver/S) + if(!istype(S)) + return 0 + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + panel_open = !panel_open + user << "You [panel_open ? "open" : "close"] the maintenance hatch of [src]." + update_icon() + return 1 + /obj/machinery/proc/dismantle() playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc) - M.set_dir(src.dir) - M.state = 2 - M.icon_state = "box_1" - for(var/obj/I in component_parts) - I.loc = loc + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.circuit = M + A.anchored = 1 + A.density = 1 + A.frame_type = M.board_type + if(A.frame_type in A.no_circuit) + A.need_circuit = 0 + for (var/obj/D in src) + D.forceMove(loc) + if(A.components) + A.components.Cut() + else + A.components = list() + component_parts = list() + A.icon_state = "[A.frame_type]_3" + A.state = 3 + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.check_components() + A.update_desc() + M.deconstruct(src) qdel(src) return 1 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 5a2663a7d1b..7bfe32d7191 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -167,7 +167,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co light_range = 0 anchored = 1 var/obj/machinery/exonet_node/node = null - + circuit = /obj/item/weapon/circuitboard/newscaster /obj/machinery/newscaster/security_unit //Security unit name = "Security Newscaster" @@ -751,32 +751,34 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co -/obj/machinery/newscaster/attackby(obj/item/I as obj, mob/user as mob) - if (src.isbroken) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 100, 1) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] further abuses the shattered [src.name].") - else - if(istype(I, /obj/item/weapon) ) - var/obj/item/weapon/W = I - if(W.force <15) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] hits the [src.name] with the [W.name] with no visible effect." ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) +/obj/machinery/newscaster/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + user << "You start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "newscaster" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + if (src.stat & isbroken == 1) + user << "The broken glass falls out." + new /obj/item/weapon/material/shard( src.loc ) + A.state = 3 + A.icon_state = "newscaster_3" else - src.hitstaken++ - if(src.hitstaken==3) - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] smashes the [src.name]!" ) - src.isbroken=1 - playsound(src.loc, 'sound/effects/Glassbr3.ogg', 100, 1) - else - for (var/mob/O in hearers(5, src.loc)) - O.show_message("[user.name] forcefully slams the [src.name] with the [I.name]!" ) - playsound(src.loc, 'sound/effects/Glasshit.ogg', 100, 1) - else - user << "This does nothing." - src.update_icon() + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "newscaster_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return /obj/machinery/newscaster/attack_ai(mob/user as mob) return src.attack_hand(user) //or maybe it'll have some special functions? No idea. diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 992a93c40a9..95c62a8ccdb 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -14,6 +14,16 @@ obj/machinery/recharger var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered var/portable = 1 + circuit = /obj/item/weapon/circuitboard/recharger + frame_type = "recharger" + +obj/machinery/recharger/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/capacitor(src) + component_parts += new /obj/item/stack/cable_coil(src, 5) + RefreshParts() + ..() + return obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -52,6 +62,10 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) anchored = !anchored user << "You [anchored ? "attached" : "detached"] the recharger." playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + else if(default_deconstruction_screwdriver(user, G)) + return + else if(default_deconstruction_crowbar(user, G)) + return obj/machinery/recharger/attack_hand(mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -156,3 +170,5 @@ obj/machinery/recharger/wallcharger icon_state_charging = "wrecharger1" icon_state_idle = "wrecharger0" portable = 0 + circuit = /obj/item/weapon/circuitboard/recharger/wrecharger + frame_type = "wrecharger" \ No newline at end of file diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index efcc8314c12..c3759100fb3 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -5,6 +5,7 @@ icon_state = "borgcharger0" density = 1 anchored = 1 + circuit = /obj/item/weapon/circuitboard/recharge_station use_power = 1 idle_power_usage = 50 var/mob/occupant = null @@ -25,7 +26,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/recharge_station(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index dd862a77543..8b0d78cb968 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -17,6 +17,7 @@ density = 0 use_power = 1 idle_power_usage = 10 + circuit = /obj/item/weapon/circuitboard/status_display var/mode = 1 // 0 = Blank // 1 = Shuttle timer // 2 = Arbitrary message(s) @@ -51,6 +52,29 @@ radio_controller.remove_object(src,frequency) return ..() +/obj/machinery/status_display/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "display" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "display_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + + // register for radio system /obj/machinery/status_display/initialize() ..() diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index 0b7371c1b08..51fcfb4f51c 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -59,6 +59,7 @@ var/list/ai_status_emotions = list( name = "AI display" anchored = 1 density = 0 + circuit = /obj/item/weapon/circuitboard/ai_status_display var/mode = 0 // 0 = Blank // 1 = AI emoticon @@ -68,6 +69,28 @@ var/list/ai_status_emotions = list( var/emotion = "Neutral" +/obj/machinery/ai_status_display/attackby(I as obj, user as mob) + if(istype(I, /obj/item/weapon/screwdriver) && circuit) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "display" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "display_4" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + /obj/machinery/ai_status_display/attack_ai/(mob/user as mob) var/list/ai_emotions = get_ai_emotions(user.ckey) var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index b64f5923c83..30c92af9227 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -286,19 +286,14 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept for (var/mob/R in receive) /* --- Loop through the receivers and categorize them --- */ - - if (R.client) - if(R.client.prefs) - if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue - else - log_debug("Client prefs found to be null in /proc/Broadcast_Message() for mob [R] and client [R.ckey], this should be investigated.") + if (!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) + continue if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. continue // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates - if(data == 3 && istype(R, /mob/observer/dead) && R.client && R.client.prefs && (R.client.prefs.toggles & CHAT_GHOSTRADIO)) + if(data == 3 && istype(R, /mob/observer/dead) && R.is_preference_enabled(/datum/client_preference/ghost_radio)) continue // --- Check for compression --- @@ -494,12 +489,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept /* --- Loop through the receivers and categorize them --- */ - if (R.client) - if(R.client.prefs) - if(!(R.client.prefs.toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. - continue - else - log_debug("Client prefs found to be null in /proc/Broadcast_SimpleMessage() for mob [R] and client [R.ckey], this should be investigated.") + if(!R.is_preference_enabled(/datum/client_preference/holder/hear_radio)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + continue // --- Check for compression --- diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index 072c99322fe..b9cc3428f93 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -10,6 +10,7 @@ var/screen = 0 // the screen number: var/list/servers = list() // the servers located by the computer var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_server var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages @@ -188,36 +189,6 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_server/M = new /obj/item/weapon/circuitboard/comm_server( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/server/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 2859083c9d6..2b3561395f5 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -98,8 +98,8 @@ // Drop a circuit board too C.loc = user.loc - // Create a machine frame and delete the current machine - var/obj/machinery/constructable_frame/machine_frame/F = new + // Create a frame and delete the current machine + var/obj/structure/frame/F = new F.loc = src.loc qdel(src) diff --git a/code/game/machinery/telecomms/telemonitor.dm b/code/game/machinery/telecomms/telemonitor.dm index 24549bd8b71..6567012a800 100644 --- a/code/game/machinery/telecomms/telemonitor.dm +++ b/code/game/machinery/telecomms/telemonitor.dm @@ -14,6 +14,7 @@ var/screen = 0 // the screen number: var/list/machinelist = list() // the machines located by the computer var/obj/machinery/telecomms/SelectedMachine + circuit = /obj/item/weapon/circuitboard/comm_monitor var/network = "NULL" // the network to probe @@ -123,36 +124,6 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_monitor/M = new /obj/item/weapon/circuitboard/comm_monitor( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/monitor/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index e941a268ef9..0d372b2aaae 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -14,6 +14,7 @@ var/mob/lasteditor var/list/viewingcode = list() var/obj/machinery/telecomms/server/SelectedServer + circuit = /obj/item/weapon/circuitboard/comm_traffic var/network = "NULL" // the network to probe var/temp = "" // temporary feedback messages @@ -206,40 +207,10 @@ updateUsrDialog() return - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/material/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - qdel(src) - else - user << "You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - qdel(src) - src.updateUsrDialog() - return - /obj/machinery/computer/telecomms/traffic/emag_act(var/remaining_charges, var/mob/user) if(!emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = 1 user << "You you disable the security protocols" src.updateUsrDialog() - return 1 + return 1 \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 029802e8b70..ca060ca80f8 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -36,6 +36,8 @@ layer = 2.9 anchored = 1 density = 1 + circuit = /obj/item/weapon/circuitboard/vending + frame_type = "vending" var/icon_vend //Icon_state when vending var/icon_deny //Icon_state when denying access @@ -94,6 +96,14 @@ /obj/machinery/vending/New() ..() wires = new(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/spring(src) + component_parts += new /obj/item/weapon/stock_parts/spring(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/console_screen(src) + component_parts += new /obj/item/stack/material/glass/reinforced(src, 2) + RefreshParts() spawn(4) if(src.product_slogans) src.slogan_list += splittext(src.product_slogans, ";") @@ -232,6 +242,8 @@ user << "You [anchored? "un" : ""]secured \the [src]!" anchored = !anchored return + else if(default_deconstruction_crowbar(user, W)) + return else @@ -829,7 +841,7 @@ product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..." icon_state = "nutri" icon_deny = "nutri-deny" - products = list(/obj/item/weapon/reagent_containers/glass/fertilizer/ez = 35,/obj/item/weapon/reagent_containers/glass/fertilizer/l4z = 25,/obj/item/weapon/reagent_containers/glass/fertilizer/rh = 15,/obj/item/weapon/plantspray/pests = 20, + products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20, /obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5) premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5) idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. @@ -921,7 +933,15 @@ icon_state = "engivend" icon_deny = "engivend-deny" req_access = list(access_engine_equip) - products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10,/obj/item/weapon/airalarm_electronics = 10,/obj/item/weapon/cell/high = 10) + products = list(/obj/item/clothing/glasses/meson = 2,/obj/item/device/multitool = 4,/obj/item/weapon/cell/high = 10, + /obj/item/weapon/airlock_electronics = 10,/obj/item/weapon/module/power_control = 10, + /obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2, + /obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2, + /obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4, + /obj/item/weapon/circuitboard/atm = 0,/obj/item/weapon/circuitboard/guestpass = 0,/obj/item/weapon/circuitboard/keycard_auth = 0, + /obj/item/weapon/circuitboard/photocopier = 0,/obj/item/weapon/circuitboard/fax = 0,/obj/item/weapon/circuitboard/conveyor = 0, + /obj/item/weapon/circuitboard/microwave = 0,/obj/item/weapon/circuitboard/vending = 0,/obj/item/weapon/circuitboard/washing = 0, + /obj/item/weapon/stock_parts/motor = 0,/obj/item/weapon/stock_parts/spring = 0,/obj/item/weapon/stock_parts/gear = 0) contraband = list(/obj/item/weapon/cell/potato = 3) premium = list(/obj/item/weapon/storage/belt/utility = 3) diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index c9182586c8c..fd0fd3ce7c2 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -1,13 +1,14 @@ /obj/item/frame - name = "frame" - desc = "Used for building machines." - icon = 'icons/obj/monitors.dmi' - icon_state = "fire_bitem" + name = "frame parts" + desc = "Used for building frames." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "frame_bitem" flags = CONDUCT - var/build_machine_type - var/refund_amt = 2 + var/build_machine_type = /obj/structure/frame + var/refund_amt = 5 var/refund_type = /obj/item/stack/material/steel var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) + var/frame_type = null /obj/item/frame/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/wrench)) @@ -16,7 +17,82 @@ return ..() -/obj/item/frame/proc/try_build(turf/on_wall) +/obj/item/frame/attack_self(mob/user as mob) + ..() + if(!build_machine_type) + return + + var/ndir + if(!frame_type) + var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor", + "Photocopier", "Fax", "Microwave", "Vending Machine", + "Recharger", "Washing Machine", "Grinder", + "Cancel") + + if(response == "Cancel") + return + + frame_type = lowertext(response) + + switch(response) + if("Holopad") + new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets + if("Conveyor") + ndir = get_dir(src,usr) + if (!(ndir in cardinal)) + return + if("Fax") + new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets + if("Microwave") + new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets + if("Vending Machine") + frame_type = "vending" + if("Recharger") + new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets + if("Washing Machine") + frame_type = "washing" + if("Grinder") + new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets + + var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type) + M.fingerprints = src.fingerprints + M.fingerprintshidden = src.fingerprintshidden + M.fingerprintslast = src.fingerprintslast + qdel(src) + +/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob) + if(!frame_type) + var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster", + "ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator", + "Wall Charger", + "Cancel") + + if(response == "Cancel") + return + + frame_type = lowertext(response) + + switch(response) + if("Fire Alarm") + frame_type = "firealarm" + new /obj/item/stack/material/steel( usr.loc, 3 ) //fire alarms are smaller, they only need 2 sheets + if("Air Alarm") + frame_type = "airalarm" + new /obj/item/stack/material/steel( usr.loc, 3 ) //air alarms are smaller, they only need 2 sheets + if("Intercom") + new /obj/item/stack/material/steel( usr.loc, 3 ) //intercoms are smaller, they only need 2 sheets + if("Newscaster") + new /obj/item/stack/material/steel( usr.loc, 2 ) //newscasters are smaller, they only need 3 sheets + if("Guest Pass Console") + frame_type = "guestpass" + new /obj/item/stack/material/steel( usr.loc, 3 ) //guestpass consoles are smaller, they only need 2 sheets + if("Keycard Authenticator") + frame_type = "keycard" + new /obj/item/stack/material/steel( usr.loc, 4 ) //keycard authenticators are smaller, they only need 1 sheets + if("Wall Charger") + frame_type = "wrecharger" + new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets + if(!build_machine_type) return @@ -35,7 +111,7 @@ var/turf/loc = get_turf(usr) var/area/A = loc.loc if (!istype(loc, /turf/simulated/floor)) - usr << "\The [src] Alarm cannot be placed on this spot." + usr << "\The frame cannot be placed on this spot." return if (A.requires_power == 0 || A.name == "Space") usr << "\The [src] Alarm cannot be placed in this area." @@ -44,23 +120,12 @@ if(gotwallitem(loc, ndir)) usr << "There's already an item on this wall!" return - - var/obj/machinery/M = new build_machine_type(loc, ndir, 1) + var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type) M.fingerprints = src.fingerprints M.fingerprintshidden = src.fingerprintshidden M.fingerprintslast = src.fingerprintslast qdel(src) -/obj/item/frame/fire_alarm - name = "fire alarm frame" - desc = "Used for building fire alarms." - build_machine_type = /obj/machinery/firealarm - -/obj/item/frame/air_alarm - name = "air alarm frame" - desc = "Used for building air alarms." - build_machine_type = /obj/machinery/alarm - /obj/item/frame/light name = "light fixture frame" desc = "Used for building lights." @@ -68,9 +133,48 @@ icon_state = "tube-construct-item" build_machine_type = /obj/machinery/light_construct reverse = 1 + frame_type = 1 /obj/item/frame/light/small name = "small light fixture frame" icon_state = "bulb-construct-item" refund_amt = 1 build_machine_type = /obj/machinery/light_construct/small + frame_type = 1 + +/obj/item/frame/extinguisher_cabinet + name = "extinguisher cabinet frame" + desc = "Used for building fire extinguisher cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "extinguisher_empty" + refund_amt = 4 + build_machine_type = /obj/structure/extinguisher_cabinet + frame_type = 1 + +/obj/item/frame/noticeboard + name = "noticeboard frame" + desc = "Used for building noticeboards." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nboard00" + refund_amt = 4 + refund_type = /obj/item/stack/material/wood + build_machine_type = /obj/structure/noticeboard + frame_type = 1 + +/obj/item/frame/mirror + name = "mirror frame" + desc = "Used for building mirrors." + icon = 'icons/obj/watercloset.dmi' + icon_state = "mirror_frame" + refund_amt = 1 + build_machine_type = /obj/structure/mirror + frame_type = 1 + +/obj/item/frame/fireaxe_cabinet + name = "fire axe cabinet frame" + desc = "Used for building fire axe cabinets." + icon = 'icons/obj/closet.dmi' + icon_state = "fireaxe0101" + refund_amt = 4 + build_machine_type = /obj/structure/closet/fireaxecabinet + frame_type = 1 \ No newline at end of file diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index a22482a4168..830a848bfe7 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -4,6 +4,7 @@ icon_state = "wm_10" density = 1 anchored = 1.0 + circuit = /obj/item/weapon/circuitboard/washing var/state = 1 //1 = empty, open door //2 = empty, closed door @@ -13,14 +14,19 @@ //6 = blood, open door //7 = blood, closed door //8 = blood, running - var/panel = 0 - //0 = closed - //1 = open var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. //0 = not hacked //1 = hacked var/gibs_ready = 0 var/obj/crayon + var/list/washing = list() + +/obj/machinery/washing_machine/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + RefreshParts() /obj/machinery/washing_machine/verb/start() set name = "Start Washing" @@ -34,25 +40,25 @@ usr << "The washing machine cannot run in this state." return - if( locate(/mob,contents) ) + if( locate(/mob,washing) ) state = 8 else state = 5 update_icon() sleep(200) - for(var/atom/A in contents) + for(var/atom/A in washing) A.clean_blood() - for(var/obj/item/I in contents) + for(var/obj/item/I in washing) I.decontaminate() //Tanning! - for(var/obj/item/stack/material/hairlesshide/HH in contents) + for(var/obj/item/stack/material/hairlesshide/HH in washing) var/obj/item/stack/material/wetleather/WL = new(src) WL.amount = HH.amount qdel(HH) - if( locate(/mob,contents) ) + if( locate(/mob,washing) ) state = 7 gibs_ready = 1 else @@ -70,9 +76,14 @@ /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state][panel]" + icon_state = "wm_[state][panel_open]" /obj/machinery/washing_machine/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(state == 2 && washing.len < 1) + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return /*if(istype(W,/obj/item/weapon/screwdriver)) panel = !panel user << "You [panel ? "open" : "close"] the [src]'s maintenance panel"*/ @@ -142,10 +153,11 @@ user << "This item does not fit." return - if(contents.len < 5) + if(washing.len < 5) if ( state in list(1, 3) ) user.drop_item() W.loc = src + washing += W state = 3 else user << "You can't put the item in right now." @@ -161,15 +173,17 @@ state = 2 if(2) state = 1 - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc + washing.Cut() if(3) state = 4 if(4) state = 3 - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc crayon = null + washing.Cut() state = 1 if(5) user << "The [src] is busy." @@ -178,13 +192,13 @@ if(7) if(gibs_ready) gibs_ready = 0 - if(locate(/mob,contents)) - var/mob/M = locate(/mob,contents) + if(locate(/mob,washing)) + var/mob/M = locate(/mob,washing) M.gib() - for(var/atom/movable/O in contents) + for(var/atom/movable/O in washing) O.loc = src.loc crayon = null state = 1 + washing.Cut() - - update_icon() + update_icon() \ No newline at end of file diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index cf50e695259..23c30d3a3d9 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -5,6 +5,7 @@ icon_state = "recharge_floor" density = 0 layer = TURF_LAYER + 0.1 + circuit = /obj/item/weapon/circuitboard/mech_recharger var/obj/mecha/charging = null var/charge = 45 @@ -14,7 +15,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mech_recharger(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 0685e6efd20..425b959d31d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -9,6 +9,7 @@ idle_power_usage = 20 active_power_usage = 5000 req_access = list(access_robotics) + circuit = /obj/item/weapon/circuitboard/mechfab var/speed = 1 var/mat_efficiency = 1 @@ -29,7 +30,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/mechfab(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) @@ -89,7 +89,7 @@ return ui_interact(user) -/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/machinery/mecha_part_fabricator/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] var/datum/design/current = queue.len ? queue[1] : null diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4b6b437900b..b7b258f5d6e 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -21,6 +21,8 @@ return /obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(W.attack_verb.len) visible_message("\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") else diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index dd584ab7cfb..2493e296099 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -10,6 +10,7 @@ var/burn_point = null var/burning = null var/hitsound = null + var/storage_cost = null var/slot_flags = 0 //This is used to determine on which slots an item can fit. var/no_attack_log = 0 //If it's an item we don't want to log attack_logs with, set this to 1 pass_flags = PASSTABLE @@ -358,7 +359,7 @@ var/list/global/slot_flags_enumeration = list( var/allow = 0 if(H.back && istype(H.back, /obj/item/weapon/storage/backpack)) var/obj/item/weapon/storage/backpack/B = H.back - if(B.contents.len < B.storage_slots && w_class <= B.max_w_class) + if(B.can_be_inserted(src,1)) allow = 1 if(!allow) return 0 diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 996b2c728bf..33c505ea92b 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -462,7 +462,7 @@ var/global/list/obj/item/device/pda/PDAs = list() data["convo_job"] = sanitize(c["job"]) break if(mode==41) - data_core.get_manifest_json() + data_core.get_manifest_list() if(mode==3) @@ -531,7 +531,7 @@ var/global/list/obj/item/device/pda/PDAs = list() data["feed"] = feed - data["manifest"] = list("__json_cache" = ManifestJSON) + data["manifest"] = PDA_Manifest nanoUI = data // update the ui if it exists, returns null if no ui is passed/found @@ -990,7 +990,7 @@ var/global/list/obj/item/device/pda/PDAs = list() tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) // src.client is so that ghosts don't have to listen to mice + if(M.stat == DEAD && M.client && (M.is_preference_enabled(/datum/client_preference/ghost_ears))) // src.client is so that ghosts don't have to listen to mice if(istype(M, /mob/new_player)) continue M.show_message("PDA Message - [owner] -> [P.owner]: [t]") diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 24a2db67d73..5d576959fb7 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -354,12 +354,12 @@ var/muleData[0] muleData["name"] = M.suffix muleData["location"] = get_area(M) - muleData["mode"] = M.mode + muleData["paused"] = M.paused muleData["home"] = M.homeName muleData["target"] = M.targetName muleData["ref"] = "\ref[M]" muleData["load"] = M.load ? M.load.name : "Nothing" - + mulebotsData[++mulebotsData.len] = muleData.Copy() values["mulebotcount"] = count diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 2906cb756df..3cc011cfb8b 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -43,13 +43,30 @@ var/global/list/obj/item/device/communicator/all_communicators = list() node = get_exonet_node() processing_objects |= src //This is a pretty terrible way of doing this. - spawn(50) //Wait for our mob to finish spawning. + spawn(5 SECONDS) //Wait for our mob to finish spawning. if(ismob(loc)) register_device(loc) + initialize_exonet(loc) else if(istype(loc, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = loc if(ismob(S.loc)) register_device(S.loc) + initialize_exonet(S.loc) + +// Proc: initialize_exonet() +// Parameters: 1 (user - the person the communicator belongs to) +// Description: Sets up the exonet datum, gives the device an address, and then gets a node reference. Afterwards, populates the device +// list. +/obj/item/device/communicator/proc/initialize_exonet(mob/user) + if(!user || !istype(user, /mob/living)) + return + if(!exonet) + exonet = new(src) + if(!exonet.address) + exonet.make_address("communicator-[user.client]-[user.name]") + if(!node) + node = get_exonet_node() + populate_known_devices() // Proc: examine() // Parameters: 1 (user - the person examining the device) @@ -139,13 +156,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Description: Makes an exonet datum if one does not exist, allocates an address for it, maintains the lists of all devies, clears the alert icon, and // finally makes NanoUI appear. /obj/item/device/communicator/attack_self(mob/user) - if(!exonet) - exonet = new(src) - if(!exonet.address) - exonet.make_address("communicator-[user.client]-[user.name]") - if(!node) - node = get_exonet_node() - populate_known_devices() + initialize_exonet(user) alert_called = 0 update_icon() ui_interact(user) @@ -292,7 +303,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() return var/their_address = href_list["dial"] exonet.send_message(their_address, "voice") - + if(href_list["disconnect"]) var/name_to_disconnect = href_list["disconnect"] for(var/mob/living/voice/V in contents) @@ -304,13 +315,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(href_list["copy"]) target_address = href_list["copy"] - + if(href_list["hang_up"]) for(var/mob/living/voice/V in contents) close_connection(usr, V, "[usr] hung up.") for(var/obj/item/device/communicator/comm in communicating) close_connection(usr, comm, "[usr] hung up.") - + if(href_list["switch_tab"]) selected_tab = href_list["switch_tab"] diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index ed8cf4ce0bc..7aaf609eca6 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -6,8 +6,10 @@ w_class = 4.0 canhear_range = 2 flags = CONDUCT | NOBLOODY + var/circuit = /obj/item/weapon/circuitboard/intercom var/number = 0 var/last_tick //used to delay the powercheck + var/wiresexposed = 0 /obj/item/device/radio/intercom/custom name = "station intercom (Custom)" @@ -81,6 +83,41 @@ spawn (0) attack_self(user) +/obj/item/device/radio/intercom/attackby(obj/item/W as obj, mob/user as mob) + src.add_fingerprint(user) + if(istype(W, /obj/item/weapon/screwdriver)) // Opening the intercom up. + wiresexposed = !wiresexposed + user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]" + if(wiresexposed) + if(!on) + icon_state = "intercom-p_open" + else + icon_state = "intercom_open" + else + icon_state = "intercom" + return + if (wiresexposed && istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("[user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + new/obj/item/stack/cable_coil(get_turf(src), 5) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "intercom" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.set_dir(dir) + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 2 + A.icon_state = "intercom_2" + M.deconstruct(src) + qdel(src) + else + src.attack_hand(user) + return + /obj/item/device/radio/intercom/receive_range(freq, level) if (!on) return -1 @@ -110,9 +147,15 @@ on = A.powered(EQUIP) // set "on" to the power status if(!on) - icon_state = "intercom-p" + if(wiresexposed) + icon_state = "intercom-p_open" + else + icon_state = "intercom-p" else - icon_state = initial(icon_state) + if(wiresexposed) + icon_state = "intercom_open" + else + icon_state = initial(icon_state) /obj/item/device/radio/intercom/locked var/locked_frequency diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 3d6a5c96261..a0496b367db 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -9,7 +9,7 @@ throwforce = 15.0 throw_speed = 5 throw_range = 20 - matter = list(DEFAULT_WALL_MATERIAL = 1875) + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2) max_amount = 60 attack_verb = list("hit", "bludgeoned", "whacked") diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 96a6656795c..9926a14330e 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -76,7 +76,7 @@ desc = "Those could work as a pretty decent throwing weapon" //why? icon_state = "tile" force = 6.0 - matter = list(DEFAULT_WALL_MATERIAL = 937.5) + matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4) throwforce = 15.0 throw_speed = 5 throw_range = 20 @@ -92,13 +92,13 @@ name = "steel floor tile" singular_name = "steel floor tile" icon_state = "tile_steel" - matter = list("plasteel" = 937.5) + matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor_white name = "white floor tile" singular_name = "white floor tile" icon_state = "tile_white" - matter = list("plastic" = 937.5) + matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor_yellow name = "yellow floor tile" @@ -110,13 +110,13 @@ name = "dark floor tile" singular_name = "dark floor tile" icon_state = "fr_tile" - matter = list("plasteel" = 937.5) + matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor_freezer name = "freezer floor tile" singular_name = "freezer floor tile" icon_state = "tile_freezer" - matter = list("plastic" = 937.5) + matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4) /obj/item/stack/tile/floor/cyborg name = "floor tile synthesizer" diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 0068473fb73..63a88dadbb8 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -407,12 +407,12 @@ * Bosun's whistle */ - /obj/item/toy/bosunwhistle - name = "bosun's whistle" - desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." - icon = 'icons/obj/toy.dmi' - icon_state = "bosunwhistle" - var/cooldown = 0 +/obj/item/toy/bosunwhistle + name = "bosun's whistle" + desc = "A genuine Admiral Krush Bosun's Whistle, for the aspiring ship's captain! Suitable for ages 8 and up, do not swallow." + icon = 'icons/obj/toy.dmi' + icon_state = "bosunwhistle" + var/cooldown = 0 w_class = 1 slot_flags = SLOT_EARS diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm index 60f8bce2684..0016fc730ab 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -29,6 +29,16 @@ network = list("MINE") req_access = list() +/obj/item/weapon/circuitboard/security/telescreen/entertainment + name = T_BOARD("entertainment camera monitor") + build_path = /obj/machinery/computer/security/telescreen/entertainment + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/security/telescreen/entertainment/New() + ..() + network = NETWORK_THUNDER + /obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) if (..(C)) C.network = network.Copy() diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm new file mode 100644 index 00000000000..30be1d52f7b --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -0,0 +1,253 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +//Circuitboards for frames (mostly wall based frames). Most of these don't fit into other categories. + +//Display + +/obj/item/weapon/circuitboard/guestpass + name = T_BOARD("guestpass console") + build_path = /obj/machinery/computer/guestpass + board_type = "guestpass" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/status_display + name = T_BOARD("status display") + build_path = /obj/machinery/status_display + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/ai_status_display + name = T_BOARD("ai status display") + build_path = /obj/machinery/ai_status_display + board_type = "display" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/newscaster + name = T_BOARD("newscaster") + build_path = /obj/machinery/newscaster + board_type = "newscaster" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/atm + name = T_BOARD("atm") + build_path = /obj/machinery/atm + board_type = "atm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Alarm + +/obj/item/weapon/circuitboard/firealarm + name = T_BOARD("fire alarm") + build_path = /obj/machinery/firealarm + board_type = "firealarm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/airalarm + name = T_BOARD("air alarm") + build_path = /obj/machinery/alarm + board_type = "airalarm" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/intercom + name = T_BOARD("intercom") + build_path = /obj/item/device/radio/intercom + board_type = "intercom" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +/obj/item/weapon/circuitboard/keycard_auth + name = T_BOARD("keycard authenticator") + build_path = /obj/machinery/keycard_auth + board_type = "keycard" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Computer + +/obj/item/weapon/circuitboard/holopad + name = T_BOARD("holopad") + build_path = /obj/machinery/hologram/holopad + board_type = "holopad" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + +//Machine + +/obj/item/weapon/circuitboard/photocopier + name = T_BOARD("photocopier") + build_path = /obj/machinery/photocopier + board_type = "photocopier" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/matter_bin" = 1) + +/obj/item/weapon/circuitboard/fax + name = T_BOARD("fax") + build_path = /obj/machinery/photocopier/faxmachine + board_type = "fax" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/scanning_module" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/micro_laser" = 1, + "/obj/item/weapon/stock_parts/matter_bin" = 1) + +/obj/item/weapon/circuitboard/conveyor + name = T_BOARD("conveyor") + build_path = /obj/machinery/conveyor + board_type = "conveyor" + req_components = list( + "/obj/item/weapon/stock_parts/gear" = 2, + "/obj/item/weapon/stock_parts/motor" = 2, + "/obj/item/stack/cable_coil" = 5) + +/obj/item/weapon/circuitboard/microwave + name = T_BOARD("microwave") + build_path = /obj/machinery/microwave + board_type = "microwave" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 1) + +/obj/item/weapon/circuitboard/vending + name = T_BOARD("vending") + build_path = /obj/machinery/vending + board_type = "vending" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/console_screen" = 1, + "/obj/item/weapon/stock_parts/motor" = 2, + "/obj/item/weapon/stock_parts/spring" = 2, + "/obj/item/stack/material/glass/reinforced" = 2) + +/obj/item/weapon/circuitboard/recharger + name = T_BOARD("recharger") + build_path = /obj/machinery/recharger + board_type = "recharger" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/capacitor" = 1, + "/obj/item/stack/cable_coil" = 5) + +/obj/item/weapon/circuitboard/recharger/wrecharger + name = T_BOARD("wall recharger") + build_path = /obj/machinery/recharger/wallcharger + board_type = "wrecharger" + +/obj/item/weapon/circuitboard/washing + name = T_BOARD("washing machine") + build_path = /obj/machinery/washing_machine + board_type = "washing" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/gear" = 2) + +/obj/item/weapon/circuitboard/grinder + name = T_BOARD("reagent grinder") + build_path = /obj/machinery/reagentgrinder + board_type = "grinder" + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + "/obj/item/weapon/stock_parts/motor" = 1, + "/obj/item/weapon/stock_parts/gear" = 1, + "/obj/item/weapon/reagent_containers/glass/beaker/large" = 1) + +//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways. +/obj/item/weapon/storage/box/frame_parts + display_contents_with_number = 1 + New() + ..() + new /obj/item/weapon/circuitboard/guestpass( src ) + new /obj/item/weapon/circuitboard/status_display( src ) + new /obj/item/weapon/circuitboard/ai_status_display( src ) + new /obj/item/weapon/circuitboard/newscaster( src ) + new /obj/item/weapon/circuitboard/atm( src ) + new /obj/item/weapon/circuitboard/firealarm( src ) + new /obj/item/weapon/circuitboard/airalarm( src ) + new /obj/item/weapon/circuitboard/intercom( src ) + new /obj/item/weapon/circuitboard/keycard_auth( src ) + new /obj/item/weapon/circuitboard/holopad( src ) + new /obj/item/weapon/circuitboard/photocopier( src ) + new /obj/item/weapon/circuitboard/fax( src ) + new /obj/item/weapon/circuitboard/microwave( src ) + new /obj/item/weapon/circuitboard/vending( src ) + new /obj/item/weapon/circuitboard/washing( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/weapon/stock_parts/scanning_module( src ) + new /obj/item/weapon/stock_parts/motor( src ) + new /obj/item/weapon/stock_parts/micro_laser( src ) + new /obj/item/weapon/stock_parts/matter_bin( src ) + new /obj/item/weapon/stock_parts/gear( src ) + new /obj/item/weapon/stock_parts/console_screen( src ) + new /obj/item/weapon/stock_parts/capacitor( src ) + new /obj/item/weapon/stock_parts/spring( src ) + new /obj/item/stack/cable_coil( src , 5 ) + new /obj/item/stack/material/glass/reinforced( src , 2 ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm index 6d016a96fa1..da70371e4ac 100644 --- a/code/game/objects/items/weapons/circuitboards/other.dm +++ b/code/game/objects/items/weapons/circuitboards/other.dm @@ -1,5 +1,5 @@ #ifndef T_BOARD -#error T_BOARD macro is not defined but we need it! +#error T_BOARD macro is not defined but we need it! #endif //Stuff that doesn't fit into any category goes here @@ -7,4 +7,4 @@ /obj/item/weapon/circuitboard/aicore name = T_BOARD("AI core") origin_tech = list(TECH_DATA = 4, TECH_BIO = 2) - board_type = "other" + board_type = "other" \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index b404b69f0b9..52b949cf351 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -68,6 +68,12 @@ /obj/item/weapon/material/twohanded/update_icon() icon_state = "[base_icon][wielded]" item_state = icon_state + +/obj/item/weapon/material/twohanded/dropped() + ..() + if(wielded) + spawn(0) + update_held_icon() /* * Fireaxe diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index db9db8a360e..85091725811 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -22,7 +22,7 @@ ) w_class = 4 slot_flags = SLOT_BACK - max_w_class = 3 + max_w_class = 4 max_storage_space = 28 /obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -53,6 +53,7 @@ icon_state = "holdingpack" max_w_class = 4 max_storage_space = 56 + storage_cost = 29 New() ..() @@ -77,7 +78,6 @@ icon_state = "giftbag0" item_state = "giftbag" w_class = 4.0 - storage_slots = 20 max_w_class = 3 max_storage_space = 400 // can store a ton of shit! item_state_slots = null @@ -142,57 +142,84 @@ desc = "It's an orange backpack which was designed to hold beakers, pill bottles and bottles." icon_state = "chempack" +/* + * Duffle Types + */ + /obj/item/weapon/storage/backpack/dufflebag name = "dufflebag" desc = "A large dufflebag for holding extra things." icon_state = "duffle" - item_state = "duffle" + item_state_slots = list( + slot_l_hand_str = "duffle", + slot_r_hand_str = "duffle", + ) slowdown = 1 - max_storage_space = 38 - storage_slots = 12 + max_storage_space = 36 /obj/item/weapon/storage/backpack/dufflebag/syndie - name = "suspicious looking dufflebag" + name = "black dufflebag" desc = "A large dufflebag for holding extra tactical supplies." icon_state = "duffle_syndie" - item_state = "duffle_syndiemed" + item_state_slots = list( + slot_l_hand_str = "duffle_syndiemed", + slot_r_hand_str = "duffle_syndiemed", + ) slowdown = 0 /obj/item/weapon/storage/backpack/dufflebag/syndie/med name = "medical dufflebag" desc = "A large dufflebag for holding extra tactical medical supplies." icon_state = "duffle_syndiemed" - item_state = "duffle_syndiemed" + item_state_slots = list( + slot_l_hand_str = "duffle_syndiemed", + slot_r_hand_str = "duffle_syndiemed", + ) /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo name = "ammunition dufflebag" desc = "A large dufflebag for holding extra weapons ammunition and supplies." icon_state = "duffle_syndieammo" - item_state = "duffle_syndieammo" + item_state_slots = list( + slot_l_hand_str = "duffle_syndieammo", + slot_r_hand_str = "duffle_syndieammo", + ) /obj/item/weapon/storage/backpack/dufflebag/captain name = "captain's dufflebag" desc = "A large dufflebag for holding extra captainly goods." icon_state = "duffle_captain" - item_state = "duffle_captain" + item_state_slots = list( + slot_l_hand_str = "duffle_captain", + slot_r_hand_str = "duffle_captain", + ) /obj/item/weapon/storage/backpack/dufflebag/med name = "medical dufflebag" desc = "A large dufflebag for holding extra medical supplies." icon_state = "duffle_med" - item_state = "duffle_med" + item_state_slots = list( + slot_l_hand_str = "duffle_med", + slot_r_hand_str = "duffle_med", + ) /obj/item/weapon/storage/backpack/dufflebag/sec name = "security dufflebag" desc = "A large dufflebag for holding extra security supplies and ammunition." icon_state = "duffle_sec" - item_state = "duffle_sec" + item_state_slots = list( + slot_l_hand_str = "duffle_sec", + slot_r_hand_str = "duffle_sec", + ) /obj/item/weapon/storage/backpack/dufflebag/eng name = "industrial dufflebag" desc = "A large dufflebag for holding extra tools and supplies." icon_state = "duffle_eng" - item_state = "duffle_eng" + item_state_slots = list( + slot_l_hand_str = "duffle_eng", + slot_r_hand_str = "duffle_eng", + ) /* * Satchel Types diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 84ae45f2b2d..8c5f8dbd8ae 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -34,7 +34,6 @@ w_class = 4 max_w_class = 2 - storage_slots = 21 can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -61,7 +60,6 @@ w_class = 4 max_w_class = 2 - storage_slots = 21 can_hold = list() // any cant_hold = list(/obj/item/weapon/disk/nuclear) @@ -76,8 +74,7 @@ icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET w_class = 3 - storage_slots = 50 - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class + max_storage_space = 100 max_w_class = 3 can_hold = list(/obj/item/weapon/ore) @@ -90,8 +87,7 @@ name = "plant bag" icon = 'icons/obj/hydroponics_machines.dmi' icon_state = "plantbag" - storage_slots = 50; //the number of plant pieces it can carry. - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class + max_storage_space = 100 max_w_class = 3 w_class = 2 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown) @@ -111,6 +107,7 @@ var/capacity = 300; //the number of sheets it can carry. w_class = 3 + storage_slots = 7 allow_quick_empty = 1 // this function is superceded New() @@ -193,7 +190,7 @@ var/col_count = min(7,storage_slots) -1 if (adjusted_contents > 7) row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.standard_orient_objs(row_num, col_count, numbered_contents) + src.slot_orient_objs(row_num, col_count, numbered_contents) return @@ -248,8 +245,7 @@ icon = 'icons/obj/storage.dmi' icon_state = "cashbag" desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front." - storage_slots = 50; //the number of cash pieces it can carry. - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class + max_storage_space = 100 max_w_class = 3 w_class = 2 can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 6f93f03df2f..478272b8b25 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -4,6 +4,9 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "utilitybelt" item_state = "utility" + storage_slots = 7 + max_storage_space = 28 //This should ensure belts always have enough room to store whatever. + max_w_class = 3 slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/belt.dmi') @@ -121,9 +124,7 @@ desc = "Can hold security gear like handcuffs and flashes." icon_state = "securitybelt" item_state = "security" - storage_slots = 7 max_w_class = 3 - max_storage_space = 28 can_hold = list( /obj/item/weapon/grenade, /obj/item/weapon/reagent_containers/spray/pepper, @@ -180,7 +181,13 @@ /obj/item/device/megaphone, /obj/item/device/radio/headset, /obj/item/clothing/gloves, - /obj/item/taperoll/police + /obj/item/taperoll/police, + /obj/item/weapon/reagent_containers/spray/pepper, + /obj/item/weapon/handcuffs, + /obj/item/device/flash, + /obj/item/weapon/flame/lighter, + /obj/item/weapon/reagent_containers/food/snacks/donut/, + /obj/item/ammo_magazine ) /obj/item/weapon/storage/belt/soulstone @@ -227,3 +234,27 @@ desc = "Can hold security gear like handcuffs and flashes, with more pouches for more storage." icon_state = "bandolier" item_state = "bandolier" + +/obj/item/weapon/storage/belt/janitor + name = "janitorial belt" + desc = "A belt used to hold most janitorial supplies." + icon_state = "janibelt" + item_state = "janibelt" + storage_slots = 7 + max_w_class = 3 + can_hold = list( + /obj/item/clothing/glasses, + /obj/item/device/flashlight, + /obj/item/weapon/grenade, + /obj/item/device/pda, + /obj/item/device/radio/headset, + /obj/item/clothing/gloves, + /obj/item/clothing/mask/surgical, //sterile mask, + /obj/item/device/assembly/mousetrap, + /obj/item/weapon/light/bulb, + /obj/item/weapon/light/tube, + /obj/item/weapon/flame/lighter, + /obj/item/device/megaphone, + /obj/item/weapon/reagent_containers/spray, + /obj/item/weapon/soap + ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 62a9117de12..657d2f4f5a4 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -25,6 +25,7 @@ icon_state = "box" item_state = "syringe_kit" var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard + max_w_class = 2 // BubbleWrap - A box can be folded up to make card /obj/item/weapon/storage/box/attack_self(mob/user as mob) @@ -498,12 +499,11 @@ desc = "Drymate brand monkey cubes. Just add water!" icon = 'icons/obj/food.dmi' icon_state = "monkeycubebox" - storage_slots = 7 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube) New() ..() if(src.type == /obj/item/weapon/storage/box/monkeycubes) - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src) /obj/item/weapon/storage/box/monkeycubes/farwacubes @@ -511,7 +511,7 @@ desc = "Drymate brand farwa cubes, shipped from Ahdomai. Just add water!" New() ..() - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src) /obj/item/weapon/storage/box/monkeycubes/stokcubes @@ -519,7 +519,7 @@ desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!" New() ..() - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src) /obj/item/weapon/storage/box/monkeycubes/neaeracubes @@ -527,7 +527,7 @@ desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!" New() ..() - for(var/i = 1; i <= 5; i++) + for(var/i = 1 to 5) new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src) /obj/item/weapon/storage/box/ids @@ -612,11 +612,10 @@ desc = "Eight wrappers of fun! Ages 8 and up. Not suitable for children." icon = 'icons/obj/toy.dmi' icon_state = "spbox" - storage_slots = 8 can_hold = list(/obj/item/toy/snappop) New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i = 1 to 8) new /obj/item/toy/snappop(src) /obj/item/weapon/storage/box/matches @@ -625,14 +624,13 @@ icon = 'icons/obj/cigarettes.dmi' icon_state = "matchbox" item_state = "zippo" - storage_slots = 10 w_class = 1 slot_flags = SLOT_BELT can_hold = list(/obj/item/weapon/flame/match) New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to 10) new /obj/item/weapon/flame/match(src) attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob) @@ -650,7 +648,7 @@ icon_state = "syringe" New() ..() - for (var/i; i < storage_slots; i++) + for (var/i = 1 to 7) new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src) /obj/item/weapon/storage/box/lights @@ -696,7 +694,6 @@ icon_state = "portafreezer" item_state = "medicalpack" foldable = null - storage_slots=7 max_w_class = 3 can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/food, /obj/item/weapon/reagent_containers/glass) max_storage_space = 21 diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 1af88c9fa86..758ac8dc39c 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -53,7 +53,7 @@ /obj/item/weapon/storage/fancy/egg_box/New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to storage_slots) new /obj/item/weapon/reagent_containers/food/snacks/egg(src) return @@ -68,14 +68,13 @@ icon_state = "candlebox5" icon_type = "candle" item_state = "candlebox5" - storage_slots = 5 throwforce = 2 slot_flags = SLOT_BELT /obj/item/weapon/storage/fancy/candle_box/New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to 5) new /obj/item/weapon/flame/candle(src) return @@ -89,7 +88,6 @@ icon = 'icons/obj/crayons.dmi' icon_state = "crayonbox" w_class = 2.0 - storage_slots = 6 icon_type = "crayon" can_hold = list( /obj/item/weapon/pen/crayon @@ -144,27 +142,42 @@ for(var/i = 1 to storage_slots) new /obj/item/clothing/mask/smokable/cigarette(src) create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one + flags |= OPENCONTAINER /obj/item/weapon/storage/fancy/cigarettes/update_icon() icon_state = "[initial(icon_state)][contents.len]" return /obj/item/weapon/storage/fancy/cigarettes/remove_from_storage(obj/item/W as obj, atom/new_location) + // Don't try to transfer reagents to lighters + if(istype(W, /obj/item/clothing/mask/smokable/cigarette)) var/obj/item/clothing/mask/smokable/cigarette/C = W - if(!istype(C)) return // what reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) - ..() + ..() /obj/item/weapon/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!istype(M, /mob)) return - if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask) - var/obj/item/clothing/mask/smokable/cigarette/W = new /obj/item/clothing/mask/smokable/cigarette(user) - reagents.trans_to_obj(W, (reagents.total_volume/contents.len)) - user.equip_to_slot_if_possible(W, slot_wear_mask) + if(M == user && user.zone_sel.selecting == O_MOUTH) + // Find ourselves a cig. Note that we could be full of lighters. + var/obj/item/clothing/mask/smokable/cigarette/cig = locate() in src + + if(cig == null) + user << "Looks like the packet is out of cigarettes." + return + + // Instead of running equip_to_slot_if_possible() we check here first, + // to avoid dousing cig with reagents if we're not going to equip it + if(!cig.mob_can_equip(user, slot_wear_mask)) + return + + // We call remove_from_storage first to manage the reagent transfer and + // UI updates. + remove_from_storage(cig, null) + user.equip_to_slot(cig, slot_wear_mask) + reagents.maximum_volume = 15 * contents.len - contents.len-- user << "You take a cigarette out of the pack." update_icon() else @@ -248,21 +261,6 @@ reagents.trans_to_obj(C, (reagents.total_volume/contents.len)) ..() -/obj/item/weapon/storage/fancy/cigar/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(M == user && user.zone_sel.selecting == O_MOUTH && contents.len > 0 && !user.wear_mask) - var/obj/item/clothing/mask/smokable/cigarette/cigar/W = new /obj/item/clothing/mask/smokable/cigarette/cigar(user) - reagents.trans_to_obj(W, (reagents.total_volume/contents.len)) - user.equip_to_slot_if_possible(W, slot_wear_mask) - reagents.maximum_volume = 15 * contents.len - contents.len-- - user << "You take a cigar out of the case." - update_icon() - else - ..() - /* * Vial Box */ @@ -278,7 +276,7 @@ /obj/item/weapon/storage/fancy/vials/New() ..() - for(var/i=1; i <= storage_slots; i++) + for(var/i=1 to 6) new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) return diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index dad95da904a..9b9918d92fc 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -162,7 +162,6 @@ can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper) allow_quick_gather = 1 use_to_pickup = 1 - storage_slots = 14 use_sound = null /obj/item/weapon/storage/pill_bottle/antitox diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index 33d462eff2a..e8f09a0ab31 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -8,7 +8,6 @@ w_class = 4 max_w_class = 3 max_storage_space = 14 //The sum of the w_classes of all the items in this storage item. - storage_slots = 4 req_access = list(access_armory) var/locked = 1 var/broken = 0 diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index eb63c96cb8b..8d954d53062 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -15,14 +15,13 @@ icon = 'icons/obj/food.dmi' icon_state = "donutbox" name = "donut box" - storage_slots = 6 var/startswith = 6 can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut) foldable = /obj/item/stack/material/cardboard /obj/item/weapon/storage/box/donut/New() ..() - for(var/i=1; i <= startswith; i++) + for(var/i=1 to startswith) new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src) update_icon() return diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9ad85925cd2..aaea243a7e4 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -15,9 +15,15 @@ var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage var/max_w_class = 2 //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = 14 //The sum of the storage costs of all the items in this storage item. - var/storage_slots = 7 //The number of storage slots in this container. + var/max_storage_space = 8 //The sum of the storage costs of all the items in this storage item. + var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. var/obj/screen/storage/boxes = null + var/obj/screen/storage/storage_start = null //storage UI + var/obj/screen/storage/storage_continue = null + var/obj/screen/storage/storage_end = null + var/obj/screen/storage/stored_start = null + var/obj/screen/storage/stored_continue = null + var/obj/screen/storage/stored_end = null var/obj/screen/close/closer = null var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. @@ -29,6 +35,12 @@ /obj/item/weapon/storage/Destroy() close_all() qdel(boxes) + qdel(src.storage_start) + qdel(src.storage_continue) + qdel(src.storage_end) + qdel(src.stored_start) + qdel(src.stored_continue) + qdel(src.stored_end) qdel(closer) ..() @@ -92,11 +104,19 @@ if(user.s_active) user.s_active.hide_from(user) user.client.screen -= src.boxes + user.client.screen -= src.storage_start + user.client.screen -= src.storage_continue + user.client.screen -= src.storage_end user.client.screen -= src.closer user.client.screen -= src.contents - user.client.screen += src.boxes user.client.screen += src.closer user.client.screen += src.contents + if(storage_slots) + user.client.screen += src.boxes + else + user.client.screen += src.storage_start + user.client.screen += src.storage_continue + user.client.screen += src.storage_end user.s_active = src is_seeing |= user return @@ -106,6 +126,9 @@ if(!user.client) return user.client.screen -= src.boxes + user.client.screen -= src.storage_start + user.client.screen -= src.storage_continue + user.client.screen -= src.storage_end user.client.screen -= src.closer user.client.screen -= src.contents if(user.s_active == src) @@ -157,7 +180,7 @@ return //This proc draws out the inventory and places the items on it. It uses the standard position. -/obj/item/weapon/storage/proc/standard_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) +/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) var/cx = 4 var/cy = 2+rows src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" @@ -183,6 +206,52 @@ src.closer.screen_loc = "[4+cols+1]:16,2:16" return +/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) + + var/baseline_max_storage_space = 16 //should be equal to default backpack capacity + var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space + var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item + var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space + + storage_start.overlays.Cut() + + var/matrix/M = matrix() + M.Scale((storage_width-storage_cap_width*2+3)/32,1) + src.storage_continue.transform = M + + src.storage_start.screen_loc = "4:16,2:16" + src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" + src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" + + var/startpoint = 0 + var/endpoint = 1 + + for(var/obj/item/O in contents) + startpoint = endpoint + 1 + endpoint += storage_width * O.get_storage_cost()/max_storage_space + + var/matrix/M_start = matrix() + var/matrix/M_continue = matrix() + var/matrix/M_end = matrix() + M_start.Translate(startpoint,0) + M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1) + M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0) + M_end.Translate(endpoint-stored_cap_width,0) + src.stored_start.transform = M_start + src.stored_continue.transform = M_continue + src.stored_end.transform = M_end + storage_start.overlays += src.stored_start + storage_start.overlays += src.stored_continue + storage_start.overlays += src.stored_end + + O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" + O.maptext = "" + O.layer = 20 + + src.closer.screen_loc = "4:[storage_width+19],2:16" + return + + /datum/numbered_display var/obj/item/sample_object var/number @@ -214,12 +283,14 @@ adjusted_contents++ numbered_contents.Add( new/datum/numbered_display(I) ) - //var/mob/living/carbon/human/H = user - var/row_num = 0 - var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.standard_orient_objs(row_num, col_count, numbered_contents) + if(storage_slots == null) + src.space_orient_objs(numbered_contents) + else + var/row_num = 0 + var/col_count = min(7,storage_slots) -1 + if (adjusted_contents > 7) + row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. + src.slot_orient_objs(row_num, col_count, numbered_contents) return //This proc return 1 if the item can be picked up and 0 if it can't. @@ -227,12 +298,12 @@ /obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) if(!istype(W)) return //Not an item - if(usr.isEquipped(W) && !usr.canUnEquip(W)) + if(usr && usr.isEquipped(W) && !usr.canUnEquip(W)) return 0 if(src.loc == W) return 0 //Means the item is already in the storage item - if(contents.len >= storage_slots) + if(storage_slots != null && contents.len >= storage_slots) if(!stop_messages) usr << "[src] is full, make some space." return 0 //Storage item is full @@ -249,9 +320,9 @@ usr << "[src] cannot hold [W]." return 0 - if (W.w_class > max_w_class) + if (max_w_class != null && W.w_class > max_w_class) if(!stop_messages) - usr << "[W] is too big for this [src]." + usr << "[W] is too long for \the [src]." return 0 var/total_storage_space = W.get_storage_cost() @@ -260,7 +331,7 @@ if(total_storage_space > max_storage_space) if(!stop_messages) - usr << "[src] is full, make some space." + usr << "[src] is too full, make some space." return 0 if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) @@ -437,15 +508,51 @@ else verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode + spawn(5) + var/total_storage_space = 0 + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() + max_storage_space = max(total_storage_space,max_storage_space) //prevents spawned containers from being too small for their contents + src.boxes = new /obj/screen/storage( ) src.boxes.name = "storage" src.boxes.master = src src.boxes.icon_state = "block" src.boxes.screen_loc = "7,7 to 10,8" src.boxes.layer = 19 + + src.storage_start = new /obj/screen/storage( ) + src.storage_start.name = "storage" + src.storage_start.master = src + src.storage_start.icon_state = "storage_start" + src.storage_start.screen_loc = "7,7 to 10,8" + src.storage_start.layer = 19 + src.storage_continue = new /obj/screen/storage( ) + src.storage_continue.name = "storage" + src.storage_continue.master = src + src.storage_continue.icon_state = "storage_continue" + src.storage_continue.screen_loc = "7,7 to 10,8" + src.storage_continue.layer = 19 + src.storage_end = new /obj/screen/storage( ) + src.storage_end.name = "storage" + src.storage_end.master = src + src.storage_end.icon_state = "storage_end" + src.storage_end.screen_loc = "7,7 to 10,8" + src.storage_end.layer = 19 + + src.stored_start = new /obj //we just need these to hold the icon + src.stored_start.icon_state = "stored_start" + src.stored_start.layer = 19 + src.stored_continue = new /obj + src.stored_continue.icon_state = "stored_continue" + src.stored_continue.layer = 19 + src.stored_end = new /obj + src.stored_end.icon_state = "stored_end" + src.stored_end.layer = 19 + src.closer = new /obj/screen/close( ) src.closer.master = src - src.closer.icon_state = "x" + src.closer.icon_state = "storage_close" src.closer.layer = 20 orient2hud() return @@ -500,4 +607,19 @@ return depth /obj/item/proc/get_storage_cost() - return 2**(w_class-1) //1,2,4,8,16,... + if (storage_cost) + return storage_cost + else + switch(w_class) + if(1) + return 1 + if(2) + return 2 + if(3) + return 4 + if(4) + return 8 + if(5) + return 16 + else + return 1000 diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 11c2d6a8539..8c6365d6fd4 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -11,7 +11,7 @@ throw_range = 7 w_class = 4 max_w_class = 3 - max_storage_space = 14 //can hold 7 w_class-2 items or up to 3 w_class-3 items (with 1 w_class-2 item as change). + max_storage_space = 14 //enough to hold all starting contents origin_tech = list(TECH_COMBAT = 1) attack_verb = list("robusted") @@ -20,63 +20,153 @@ icon_state = "red" item_state = "toolbox_red" - New() - ..() - new /obj/item/weapon/crowbar/red(src) - new /obj/item/weapon/extinguisher/mini(src) - if(prob(50)) - new /obj/item/device/flashlight(src) - else - new /obj/item/device/flashlight/flare(src) - new /obj/item/device/radio(src) +/obj/item/weapon/storage/toolbox/emergency/New() + ..() + new /obj/item/weapon/crowbar/red(src) + new /obj/item/weapon/extinguisher/mini(src) + if(prob(50)) + new /obj/item/device/flashlight(src) + else + new /obj/item/device/flashlight/flare(src) + new /obj/item/device/radio(src) /obj/item/weapon/storage/toolbox/mechanical name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" - New() - ..() - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/device/analyzer(src) - new /obj/item/weapon/wirecutters(src) +/obj/item/weapon/storage/toolbox/mechanical/New() + ..() + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/device/analyzer(src) + new /obj/item/weapon/wirecutters(src) /obj/item/weapon/storage/toolbox/electrical name = "electrical toolbox" icon_state = "yellow" item_state = "toolbox_yellow" - New() - ..() - var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/t_scanner(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/stack/cable_coil(src,30,color) - new /obj/item/stack/cable_coil(src,30,color) - if(prob(5)) - new /obj/item/clothing/gloves/yellow(src) - else - new /obj/item/stack/cable_coil(src,30,color) +/obj/item/weapon/storage/toolbox/electrical/New() + ..() + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/t_scanner(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/stack/cable_coil/random(src,30) + new /obj/item/stack/cable_coil/random(src,30) + if(prob(5)) + new /obj/item/clothing/gloves/yellow(src) + else + new /obj/item/stack/cable_coil/random(src,30) /obj/item/weapon/storage/toolbox/syndicate - name = "suspicious looking toolbox" + name = "black and red toolbox" icon_state = "syndicate" item_state = "toolbox_syndi" origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1) force = 7.0 - New() - ..() - var/color = pick("red","yellow","green","blue","pink","orange","cyan","white") - new /obj/item/weapon/screwdriver(src) - new /obj/item/weapon/wrench(src) - new /obj/item/weapon/weldingtool(src) - new /obj/item/weapon/crowbar(src) - new /obj/item/stack/cable_coil(src,30,color) - new /obj/item/weapon/wirecutters(src) - new /obj/item/device/multitool(src) +/obj/item/weapon/storage/toolbox/syndicate/New() + ..() + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/wrench(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/crowbar(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/device/multitool(src) + +/obj/item/weapon/storage/toolbox/lunchbox + max_storage_space = 8 //slightly smaller than a toolbox + name = "rainbow lunchbox" + icon_state = "lunchbox_rainbow" + item_state = "toolbox_pink" + desc = "A little lunchbox. This one is the colors of the rainbow!" + w_class = 3 + max_w_class = 2 + var/filled = FALSE + attack_verb = list("lunched") + +/obj/item/weapon/storage/toolbox/lunchbox/New() + ..() + if(filled) + var/list/lunches = lunchables_lunches() + var/lunch = lunches[pick(lunches)] + new lunch(src) + + var/list/snacks = lunchables_snacks() + var/snack = snacks[pick(snacks)] + new snack(src) + + var/list/drinks = lunchables_drinks() + var/drink = drinks[pick(drinks)] + new drink(src) + +/obj/item/weapon/storage/toolbox/lunchbox/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/heart + name = "heart lunchbox" + icon_state = "lunchbox_lovelyhearts" + item_state = "toolbox_pink" + desc = "A little lunchbox. This one has cute little hearts on it!" + +/obj/item/weapon/storage/toolbox/lunchbox/heart/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cat + name = "cat lunchbox" + icon_state = "lunchbox_sciencecatshow" + item_state = "toolbox_green" + desc = "A little lunchbox. This one has a cute little science cat from a popular show on it!" + +/obj/item/weapon/storage/toolbox/lunchbox/cat/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nt + name = "Nanotrasen brand lunchbox" + icon_state = "lunchbox_nanotrasen" + item_state = "toolbox_blue" + desc = "A little lunchbox. This one is branded with the Nanotrasen logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/nt/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/mars + name = "\improper Mars university lunchbox" + icon_state = "lunchbox_marsuniversity" + item_state = "toolbox_red" + desc = "A little lunchbox. This one is branded with the Mars university logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/mars/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/cti + name = "\improper CTI lunchbox" + icon_state = "lunchbox_cti" + item_state = "toolbox_blue" + desc = "A little lunchbox. This one is branded with the CTI logo!" + +/obj/item/weapon/storage/toolbox/lunchbox/cti/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/nymph + name = "\improper Diona nymph lunchbox" + icon_state = "lunchbox_dionanymph" + item_state = "toolbox_yellow" + desc = "A little lunchbox. This one is an adorable Diona nymph on the side!" + +/obj/item/weapon/storage/toolbox/lunchbox/nymph/filled + filled = TRUE + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate + name = "black and red lunchbox" + icon_state = "lunchbox_syndie" + item_state = "toolbox_syndi" + desc = "A little lunchbox. This one is a sleek black and red, made of a durable steel!" + +/obj/item/weapon/storage/toolbox/lunchbox/syndicate/filled + filled = TRUE diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 4f80e85a529..4e427c8f6e6 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -127,7 +127,6 @@ /obj/item/weapon/storage/box/syndie_kit/chameleon name = "chameleon kit" desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately." - storage_slots = 10 /obj/item/weapon/storage/box/syndie_kit/chameleon/New() ..() diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 9b4f9271a24..81cee4552a2 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -73,18 +73,16 @@ else return ..() + /obj/item/weapon/storage/wallet/random/New() ..() - var/item1_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) - var/item2_type - if(prob(50)) - item2_type = pick( /obj/item/weapon/spacecash/c10,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c1000,/obj/item/weapon/spacecash/c20,/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50, /obj/item/weapon/spacecash/c500) - var/item3_type = pick( /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron ) - - spawn(2) - if(item1_type) - new item1_type(src) - if(item2_type) - new item2_type(src) - if(item3_type) - new item3_type(src) + var/amount = rand(50, 100) + rand(50, 100) // Triangular distribution from 100 to 200 + var/obj/item/weapon/spacecash/SC = null + for(var/i in list(100, 50, 20, 10, 5, 1)) + if(amount < i) + continue + SC = new(src) + while(amount >= i) + amount -= i + SC.adjust_worth(i, 0) + SC.update_icon() \ No newline at end of file diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm deleted file mode 100644 index 0a70fdbe1c2..00000000000 --- a/code/game/objects/items/weapons/wires.dm +++ /dev/null @@ -1,18 +0,0 @@ -// WIRES - -/obj/item/weapon/wire/proc/update() - if (src.amount > 1) - src.icon_state = "spool_wire" - src.desc = text("This is just spool of regular insulated wire. It consists of about [] unit\s of wire.", src.amount) - else - src.icon_state = "item_wire" - src.desc = "This is just a simple piece of regular insulated wire." - return - -/obj/item/weapon/wire/attack_self(mob/user as mob) - if (src.laying) - src.laying = 0 - user << "You're done laying wire!" - else - user << "You are not using this to lay wire..." - return diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 68c774c91f3..2712d6de790 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -102,7 +102,7 @@ usr.visible_message("[user] starts climbing onto \the [src]!") climbers |= user - if(!do_after(user,(issmall(user) ? 30 : 50))) + if(!do_after(user,(issmall(user) ? 20 : 34))) climbers -= user return diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 23d819afa0a..ad1797756ca 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -10,6 +10,7 @@ LINEN BINS icon = 'icons/obj/items.dmi' icon_state = "sheet" item_state = "bedsheet" + slot_flags = SLOT_BACK layer = 4.0 throwforce = 1 throw_speed = 1 @@ -19,7 +20,7 @@ LINEN BINS /obj/item/weapon/bedsheet/attack_self(mob/user as mob) user.drop_item() if(layer == initial(layer)) - layer = 5 + layer = MOB_LAYER + 0.1 else layer = initial(layer) add_fingerprint(user) @@ -38,51 +39,67 @@ LINEN BINS /obj/item/weapon/bedsheet/blue icon_state = "sheetblue" + item_state = "sheetblue" /obj/item/weapon/bedsheet/green icon_state = "sheetgreen" + item_state = "sheetgreen" /obj/item/weapon/bedsheet/orange icon_state = "sheetorange" + item_state = "sheetorange" /obj/item/weapon/bedsheet/purple icon_state = "sheetpurple" + item_state = "sheetpurple" /obj/item/weapon/bedsheet/rainbow icon_state = "sheetrainbow" + item_state = "sheetrainbow" /obj/item/weapon/bedsheet/red icon_state = "sheetred" + item_state = "sheetred" /obj/item/weapon/bedsheet/yellow icon_state = "sheetyellow" + item_state = "sheetyellow" /obj/item/weapon/bedsheet/mime icon_state = "sheetmime" + item_state = "sheetmime" /obj/item/weapon/bedsheet/clown icon_state = "sheetclown" + item_state = "sheetclown" /obj/item/weapon/bedsheet/captain icon_state = "sheetcaptain" + item_state = "sheetcaptain" /obj/item/weapon/bedsheet/rd icon_state = "sheetrd" + item_state = "sheetrd" /obj/item/weapon/bedsheet/medical icon_state = "sheetmedical" + item_state = "sheetmedical" /obj/item/weapon/bedsheet/hos icon_state = "sheethos" + item_state = "sheethos" /obj/item/weapon/bedsheet/hop icon_state = "sheethop" + item_state = "sheethop" /obj/item/weapon/bedsheet/ce icon_state = "sheetce" + item_state = "sheetce" /obj/item/weapon/bedsheet/brown icon_state = "sheetbrown" + item_state = "sheetbrown" /obj/structure/bedsheetbin diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 390830e8293..ff15bb0a6c8 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -79,6 +79,7 @@ new /obj/item/weapon/caution(src) new /obj/item/device/lightreplacer(src) new /obj/item/weapon/storage/bag/trash(src) + new /obj/item/weapon/storage/belt/janitor(src) new /obj/item/clothing/shoes/galoshes(src) /* @@ -114,3 +115,7 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/laceup(src) new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/glasses/sunglasses/big(src) + new /obj/item/clothing/glasses/sunglasses/big(src) + new /obj/item/clothing/under/lawyer/blue(src) + new /obj/item/clothing/under/lawyer/blue(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index 4f52278a9ca..1b4b27b196a 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -12,8 +12,8 @@ /obj/structure/closet/l3closet/general/New() ..() - new /obj/item/clothing/suit/bio_suit/general( src ) - new /obj/item/clothing/head/bio_hood/general( src ) + new /obj/item/clothing/suit/bio_suit/general(src) + new /obj/item/clothing/head/bio_hood/general(src) /obj/structure/closet/l3closet/virology @@ -23,9 +23,9 @@ /obj/structure/closet/l3closet/virology/New() ..() - new /obj/item/clothing/suit/bio_suit/virology( src ) - new /obj/item/clothing/head/bio_hood/virology( src ) - new /obj/item/clothing/mask/breath(src) + new /obj/item/clothing/suit/bio_suit/virology(src) + new /obj/item/clothing/head/bio_hood/virology(src) + new /obj/item/clothing/mask/gas(src) new /obj/item/weapon/tank/oxygen(src) @@ -36,8 +36,8 @@ /obj/structure/closet/l3closet/security/New() ..() - new /obj/item/clothing/suit/bio_suit/security( src ) - new /obj/item/clothing/head/bio_hood/security( src ) + new /obj/item/clothing/suit/bio_suit/security(src) + new /obj/item/clothing/head/bio_hood/security(src) /obj/structure/closet/l3closet/janitor @@ -47,8 +47,14 @@ /obj/structure/closet/l3closet/janitor/New() ..() - new /obj/item/clothing/suit/bio_suit/janitor( src ) - new /obj/item/clothing/head/bio_hood/janitor( src ) + new /obj/item/clothing/suit/bio_suit/janitor(src) + new /obj/item/clothing/suit/bio_suit/janitor(src) + new /obj/item/clothing/head/bio_hood/janitor(src) + new /obj/item/clothing/head/bio_hood/janitor(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) /obj/structure/closet/l3closet/scientist @@ -58,5 +64,23 @@ /obj/structure/closet/l3closet/scientist/New() ..() - new /obj/item/clothing/suit/bio_suit/scientist( src ) - new /obj/item/clothing/head/bio_hood/scientist( src ) + new /obj/item/clothing/suit/bio_suit/scientist(src) + new /obj/item/clothing/head/bio_hood/scientist(src) + + +/obj/structure/closet/l3closet/medical + icon_state = "bio_scientist" + icon_closed = "bio_scientist" + icon_opened = "bio_scientistopen" + +/obj/structure/closet/l3closet/medical/New() + ..() + new /obj/item/clothing/suit/bio_suit/general(src) + new /obj/item/clothing/suit/bio_suit/general(src) + new /obj/item/clothing/suit/bio_suit/general(src) + new /obj/item/clothing/head/bio_hood/general(src) + new /obj/item/clothing/head/bio_hood/general(src) + new /obj/item/clothing/head/bio_hood/general(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/mask/gas(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index bd2b216888b..cec9b898550 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -17,10 +17,7 @@ new /obj/item/weapon/storage/backpack/satchel_eng(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag/eng(src) - if (prob(70)) - new /obj/item/clothing/accessory/storage/brown_vest(src) - else - new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/blueprints(src) new /obj/item/clothing/under/rank/chief_engineer(src) new /obj/item/clothing/under/rank/chief_engineer/skirt(src) @@ -38,6 +35,7 @@ new /obj/item/device/flash(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) return @@ -92,6 +90,9 @@ new /obj/item/weapon/weldpack(src) new /obj/item/weapon/weldpack(src) new /obj/item/weapon/weldpack(src) + new /obj/item/clothing/glasses/welding(src) + new /obj/item/clothing/glasses/welding(src) + new /obj/item/clothing/glasses/welding(src) return @@ -115,10 +116,7 @@ new /obj/item/weapon/storage/backpack/satchel_eng(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag/eng(src) - if (prob(70)) - new /obj/item/clothing/accessory/storage/brown_vest(src) - else - new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/weapon/storage/toolbox/mechanical(src) new /obj/item/device/radio/headset/headset_eng(src) new /obj/item/device/radio/headset/headset_eng/alt(src) @@ -128,7 +126,11 @@ new /obj/item/weapon/cartridge/engineering(src) new /obj/item/taperoll/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) return + + + /obj/structure/closet/secure_closet/atmos_personal name = "technician's locker" req_access = list(access_atmospherics) @@ -148,10 +150,7 @@ new /obj/item/weapon/storage/backpack/satchel_eng(src) if(prob(50)) new /obj/item/weapon/storage/backpack/dufflebag/eng(src) - if (prob(70)) - new /obj/item/clothing/accessory/storage/brown_vest(src) - else - new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/clothing/accessory/storage/brown_vest(src) new /obj/item/clothing/suit/fire/firefighter(src) new /obj/item/device/flashlight(src) new /obj/item/weapon/extinguisher(src) @@ -162,4 +161,5 @@ new /obj/item/weapon/cartridge/atmos(src) new /obj/item/taperoll/atmos(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos(src) + new /obj/item/weapon/tank/emergency_oxygen/engi(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 23e9eaa98d4..b424c65be5a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -70,7 +70,7 @@ new /obj/item/weapon/storage/backpack/dufflebag/med(src) new /obj/item/clothing/under/rank/nursesuit (src) new /obj/item/clothing/head/nursehat (src) - switch(pick("blue", "green", "purple", "black")) + switch(pick("blue", "green", "purple", "black", "navyblue")) if ("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) @@ -83,7 +83,10 @@ if ("black") new /obj/item/clothing/under/rank/medical/black(src) new /obj/item/clothing/head/surgery/black(src) - switch(pick("blue", "green", "purple", "black")) + if ("navyblue") + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) + switch(pick("blue", "green", "purple", "black", "navyblue")) if ("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) @@ -96,6 +99,9 @@ if ("black") new /obj/item/clothing/under/rank/medical/black(src) new /obj/item/clothing/head/surgery/black(src) + if ("navyblue") + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/under/rank/nurse(src) new /obj/item/clothing/under/rank/orderly(src) @@ -144,6 +150,7 @@ new /obj/item/weapon/crowbar(src) new /obj/item/weapon/extinguisher/mini(src) new /obj/item/weapon/storage/box/freezer(src) + new /obj/item/clothing/accessory/storage/white_vest(src) return /obj/structure/closet/secure_closet/CMO @@ -167,7 +174,7 @@ new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) new /obj/item/clothing/shoes/white(src) - switch(pick("blue", "green", "purple", "black")) + switch(pick("blue", "green", "purple", "black", "navyblue")) if ("blue") new /obj/item/clothing/under/rank/medical/blue(src) new /obj/item/clothing/head/surgery/blue(src) @@ -180,6 +187,9 @@ if ("black") new /obj/item/clothing/under/rank/medical/black(src) new /obj/item/clothing/head/surgery/black(src) + if ("navyblue") + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/under/rank/chief_medical_officer(src) new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src) new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src) @@ -193,6 +203,7 @@ new /obj/item/weapon/reagent_containers/hypospray(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src) new /obj/item/weapon/storage/box/freezer(src) + new /obj/item/clothing/mask/gas(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index fcbe9e90605..5a692dc1c4a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -10,31 +10,16 @@ New() ..() - if(prob(50)) - new /obj/item/weapon/storage/backpack/captain(src) - else - new /obj/item/weapon/storage/backpack/satchel_cap(src) - if(prob(50)) - new /obj/item/weapon/storage/backpack/dufflebag/captain(src) - new /obj/item/clothing/suit/captunic(src) - new /obj/item/clothing/suit/captunic/capjacket(src) - new /obj/item/clothing/head/caphat/cap(src) - new /obj/item/clothing/under/rank/captain(src) + new /obj/item/weapon/storage/backpack/dufflebag/captain(src) new /obj/item/clothing/suit/storage/vest(src) new /obj/item/weapon/cartridge/captain(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/weapon/storage/lockbox/medal(src) - new /obj/item/clothing/shoes/brown(src) new /obj/item/device/radio/headset/heads/captain(src) new /obj/item/device/radio/headset/heads/captain/alt(src) - new /obj/item/clothing/gloves/captain(src) new /obj/item/weapon/gun/energy/gun(src) new /obj/item/clothing/suit/armor/captain(src) new /obj/item/weapon/melee/telebaton(src) - new /obj/item/clothing/under/dress/dress_cap(src) - new /obj/item/clothing/head/caphat/formal(src) - new /obj/item/clothing/under/captainformal(src) - new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src) return @@ -51,7 +36,6 @@ New() ..() - new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/suit/storage/vest(src) new /obj/item/clothing/head/helmet(src) new /obj/item/weapon/cartridge/hop(src) @@ -89,6 +73,8 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src) new /obj/item/clothing/head/caphat/hop(src) + new /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit(src) + new /obj/item/clothing/glasses/sunglasses(src) return @@ -273,20 +259,8 @@ New() ..() - new /obj/item/clothing/under/det(src) - new /obj/item/clothing/under/det/grey(src) - new /obj/item/clothing/under/det/black(src) - new /obj/item/clothing/under/det/waistcoat(src) - new /obj/item/clothing/under/det/grey/waistcoat(src) - new /obj/item/clothing/suit/storage/det_trench(src) - new /obj/item/clothing/suit/storage/det_trench/grey(src) - new /obj/item/clothing/suit/storage/forensics/blue(src) - new /obj/item/clothing/suit/storage/forensics/red(src) new /obj/item/clothing/accessory/badge/holo/detective(src) new /obj/item/clothing/gloves/black(src) - new /obj/item/clothing/head/det(src) - new /obj/item/clothing/head/det/grey(src) - new /obj/item/clothing/shoes/laceup(src) new /obj/item/weapon/storage/belt/detective(src) new /obj/item/weapon/storage/box/evidence(src) new /obj/item/device/radio/headset/headset_sec(src) @@ -297,6 +271,9 @@ new /obj/item/taperoll/police(src) new /obj/item/weapon/gun/projectile/colt/detective(src) new /obj/item/clothing/accessory/holster/armpit(src) + new /obj/item/device/flashlight/maglight(src) + new /obj/item/weapon/reagent_containers/food/drinks/flask/detflask(src) + new /obj/item/weapon/storage/briefcase/crimekit(src) return /obj/structure/closet/secure_closet/detective/update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index aa820a48fa1..0c49681489c 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -66,18 +66,32 @@ ..() new /obj/item/clothing/head/det(src) new /obj/item/clothing/head/det(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/under/det(src) - new /obj/item/clothing/under/det(src) new /obj/item/clothing/head/det/grey(src) new /obj/item/clothing/head/det/grey(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/shoes/laceup(src) + new /obj/item/clothing/under/det(src) + new /obj/item/clothing/under/det(src) + new /obj/item/clothing/under/det/waistcoat(src) + new /obj/item/clothing/under/det/waistcoat(src) new /obj/item/clothing/under/det/grey(src) new /obj/item/clothing/under/det/grey(src) + new /obj/item/clothing/under/det/grey/waistcoat(src) + new /obj/item/clothing/under/det/grey/waistcoat(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/corporate(src) new /obj/item/clothing/under/det/corporate(src) + new /obj/item/clothing/suit/storage/det_trench(src) + new /obj/item/clothing/suit/storage/det_trench(src) + new /obj/item/clothing/suit/storage/det_trench/grey(src) + new /obj/item/clothing/suit/storage/det_trench/grey(src) + new /obj/item/clothing/suit/storage/forensics/blue(src) + new /obj/item/clothing/suit/storage/forensics/blue(src) + new /obj/item/clothing/suit/storage/forensics/red(src) + new /obj/item/clothing/suit/storage/forensics/red(src) return /obj/structure/closet/wardrobe/pink @@ -280,6 +294,9 @@ new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) + new /obj/item/clothing/shoes/workboots(src) return @@ -453,6 +470,8 @@ new /obj/item/clothing/under/rank/medical/green(src) new /obj/item/clothing/under/rank/medical/purple(src) new /obj/item/clothing/under/rank/medical/black(src) + new /obj/item/clothing/under/rank/medical/navyblue(src) + new /obj/item/clothing/head/surgery/navyblue(src) new /obj/item/clothing/head/surgery/purple(src) new /obj/item/clothing/head/surgery/blue(src) new /obj/item/clothing/head/surgery/green(src) @@ -516,7 +535,7 @@ new /obj/item/clothing/under/pants/black(src) new /obj/item/clothing/under/pants/tan(src) new /obj/item/clothing/under/pants/track(src) - new /obj/item/clothing/under/pants/jeans(src) + new /obj/item/clothing/under/pants(src) new /obj/item/clothing/under/pants/khaki(src) new /obj/item/clothing/mask/bandana/blue(src) new /obj/item/clothing/mask/bandana/blue(src) @@ -589,3 +608,29 @@ new /obj/item/clothing/under/scratch(src) new /obj/item/weapon/storage/backpack/satchel(src) new /obj/item/weapon/storage/backpack/satchel(src) + return + +/obj/structure/closet/wardrobe/captain + name = "captain's wardrobe" + icon_state = "cabinet_closed" + icon_closed = "cabinet_closed" + icon_opened = "cabinet_open" + +/obj/structure/closet/wardrobe/captain/New() + ..() + new /obj/item/weapon/storage/backpack/captain(src) + new /obj/item/clothing/suit/captunic(src) + new /obj/item/clothing/suit/captunic/capjacket(src) + new /obj/item/clothing/head/caphat/cap(src) + new /obj/item/clothing/under/rank/captain(src) + new /obj/item/clothing/shoes/brown(src) + new /obj/item/clothing/gloves/captain(src) + new /obj/item/clothing/under/dress/dress_cap(src) + new /obj/item/weapon/storage/backpack/satchel_cap(src) + new /obj/item/clothing/head/caphat/formal(src) + new /obj/item/clothing/under/captainformal(src) + new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src) + new /obj/item/clothing/head/beret/centcom/captain(src) + new /obj/item/clothing/under/gimmick/rank/captain/suit(src) + new /obj/item/clothing/glasses/sunglasses(src) + return \ No newline at end of file diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index cc67d80ac3b..bd241bb63ab 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -1,5 +1,5 @@ #define SHOWER_OPEN_LAYER OBJ_LAYER + 0.4 -#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.1 +#define SHOWER_CLOSED_LAYER MOB_LAYER + 0.2 /obj/structure/curtain name = "curtain" @@ -35,6 +35,21 @@ icon_state = "open" layer = SHOWER_OPEN_LAYER +/obj/structure/curtain/attackby(obj/item/P, mob/user) + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You start to cut the shower curtains." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 10)) + user << "You cut the shower curtains." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 3 + qdel(src) + return + else + src.attack_hand(user) + return + /obj/structure/curtain/black name = "black curtain" color = "#222222" diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 4b884d8154f..9af8021d44e 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -8,9 +8,19 @@ var/obj/item/weapon/extinguisher/has_extinguisher var/opened = 0 -/obj/structure/extinguisher_cabinet/New() +/obj/structure/extinguisher_cabinet/New(var/loc, var/dir, var/building = 0) ..() - has_extinguisher = new/obj/item/weapon/extinguisher(src) + + if(building) + if(loc) + src.loc = loc + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -27 : 27) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + update_icon() + return + else + has_extinguisher = new/obj/item/weapon/extinguisher(src) /obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user) if(isrobot(user)) @@ -22,6 +32,15 @@ user << "You place [O] in [src]." else opened = !opened + if(istype(O, /obj/item/weapon/wrench)) + if(!has_extinguisher) + user << "You start to unwrench the extinguisher cabinet." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15)) + user << "You unwrench the extinguisher cabinet." + new /obj/item/frame/extinguisher_cabinet( src.loc ) + qdel(src) + return else opened = !opened update_icon() diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 3d867111cce..20b326ebc9a 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -40,7 +40,7 @@ /obj/structure/inflatable/bullet_act(var/obj/item/projectile/Proj) var/proj_damage = Proj.get_structure_damage() if(!proj_damage) return - + health -= proj_damage ..() if(health <= 0) @@ -248,6 +248,7 @@ desc = "Contains inflatable walls and doors." icon_state = "inf_box" item_state = "syringe_kit" + w_class = 3 max_storage_space = 28 can_hold = list(/obj/item/inflatable) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 88e771f8edd..a8747e07ec1 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -8,9 +8,18 @@ anchored = 1 var/shattered = 0 var/list/ui_users = list() + var/glass = 1 + +/obj/structure/mirror/New(var/loc, var/dir, var/building = 0, mob/user as mob) + if(building) + glass = 0 + icon_state = "mirror_frame" + pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) + pixel_y = (dir & 3)? (dir == 1 ? -30 : 30) : 0 + return /obj/structure/mirror/attack_hand(mob/user as mob) - + if(!glass) return if(shattered) return if(ishuman(user)) @@ -22,6 +31,7 @@ AC.ui_interact(user) /obj/structure/mirror/proc/shatter() + if(!glass) return if(shattered) return shattered = 1 icon_state = "mirror_broke" @@ -34,18 +44,57 @@ if(prob(Proj.get_structure_damage() * 2)) if(!shattered) shatter() - else + else if(glass) playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) ..() /obj/structure/mirror/attackby(obj/item/I as obj, mob/user as mob) - if(shattered) + if(istype(I, /obj/item/weapon/wrench)) + if(!glass) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the frame." + new /obj/item/frame/mirror( src.loc ) + qdel(src) + return + if(istype(I, /obj/item/weapon/crowbar)) + if(shattered && glass) + user << "The broken glass falls out." + icon_state = "mirror_frame" + glass = !glass + new /obj/item/weapon/material/shard( src.loc ) + return + if(!shattered && glass) + playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) + user << "You remove the glass." + glass = !glass + icon_state = "mirror_frame" + new /obj/item/stack/material/glass( src.loc, 2 ) + return + + if(istype(I, /obj/item/stack/material/glass)) + if(!glass) + var/obj/item/stack/material/glass/G = I + if (G.get_amount() < 2) + user << "You need two sheets of glass to add them to the frame." + return + user << "You start to add the glass to the frame." + if(do_after(user, 20)) + if (G.use(2)) + shattered = 0 + glass = 1 + icon_state = "mirror" + user << "You add the glass to the frame." + return + + if(shattered && glass) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return if(prob(I.force * 2)) visible_message("[user] smashes [src] with [I]!") - shatter() + if(glass) + shatter() else visible_message("[user] hits [src] with [I]!") playsound(src.loc, 'sound/effects/Glasshit.ogg', 70, 1) @@ -53,13 +102,14 @@ /obj/structure/mirror/attack_generic(var/mob/user, var/damage) user.do_attack_animation(src) - if(shattered) + if(shattered && glass) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return 0 if(damage) user.visible_message("[user] smashes [src]!") - shatter() + if(glass) + shatter() else user.visible_message("[user] hits [src] and bounces off!") return 1 diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 1c5fd457f29..8dbc65edbc1 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -7,6 +7,18 @@ anchored = 1 var/notices = 0 +/obj/structure/noticeboard/New(var/loc, var/dir, var/building = 0) + ..() + + if(building) + if(loc) + src.loc = loc + + pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) + pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 + update_icon() + return + /obj/structure/noticeboard/initialize() for(var/obj/item/I in loc) if(notices > 4) break @@ -27,6 +39,14 @@ user << "You pin the paper to the noticeboard." else user << "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached." + if(istype(O, /obj/item/weapon/wrench)) + user << "You start to unwrench the noticeboard." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 15)) + user << "You unwrench the noticeboard." + new /obj/item/frame/noticeboard( src.loc ) + qdel(src) + return /obj/structure/noticeboard/attack_hand(var/mob/user) examine(user) diff --git a/code/game/sound.dm b/code/game/sound.dm index ce2b992d9be..fea1bdcb38d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -157,7 +157,7 @@ var/const/FALLOFF_SOUNDS = 0.5 /client/proc/playtitlemusic() if(!ticker || !ticker.login_music) return - if(prefs.toggles & SOUND_LOBBY) + if(is_preference_enabled(/datum/client_preference/play_lobby_music)) src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS /proc/get_rand_frequency() diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index cc91ee49a20..47a3c5a63e9 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -55,6 +55,20 @@ var/list/mechtoys = list( /mob/living/silicon/robot/drone ) +/obj/structure/plasticflaps/attackby(obj/item/P, mob/user) + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + user << "You start to cut the plastic flaps." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 10)) + user << "You cut the plastic flaps." + var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) + A.amount = 4 + qdel(src) + return + else + return + /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) return prob(60) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 2e82174e536..23ffac6465d 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -306,8 +306,8 @@ if(istype(W, /obj/item/weapon/crowbar)) user << "You struggle to pry off the outer sheath." playsound(src, 'sound/items/Crowbar.ogg', 100, 1) - sleep(100) - if(!istype(src, /turf/simulated/wall) || !user || !W || !T ) return + if(!do_after(user,100) || !istype(src, /turf/simulated/wall) || !user || !W || !T ) + return if(user.loc == T && user.get_active_hand() == W ) user << "You pry off the outer sheath." dismantle_wall() diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index f2a2d74f117..1e976a2afcd 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -15,7 +15,7 @@ msg = sanitize(msg) if(!msg) return - if(!(prefs.toggles & CHAT_OOC)) + if(!is_preference_enabled(/datum/client_preference/show_ooc)) src << "You have OOC muted." return @@ -50,7 +50,7 @@ ooc_style = "admin" for(var/client/target in clients) - if(target.prefs.toggles & CHAT_OOC) + if(target.is_preference_enabled(/datum/client_preference/show_ooc)) var/display_name = src.key if(holder) if(holder.fakekey) @@ -83,7 +83,7 @@ if(!msg) return - if(!(prefs.toggles & CHAT_LOOC)) + if(!is_preference_enabled(/datum/client_preference/show_looc)) src << "You have LOOC muted." return @@ -117,7 +117,7 @@ display_name = mob.name for(var/client/target in clients) - if(target.prefs.toggles & CHAT_LOOC) + if(target.is_preference_enabled(/datum/client_preference/show_looc)) var/prefix = "" var/admin_stuff = "" var/send = 0 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index a3e6a5032d3..23c5961b661 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -16,7 +16,7 @@ var/global/floorIsLava = 0 var/rendered = "ATTACK: [text]" for(var/client/C in admins) if((R_ADMIN|R_MOD) & C.holder.rights) - if(C.prefs.toggles & CHAT_ATTACKLOGS) + if(C.is_preference_enabled(/datum/client_preference/mod/show_attack_logs)) var/msg = rendered C << msg @@ -895,22 +895,26 @@ proc/admin_notice(var/message, var/rights) ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode +/proc/is_special_character(var/character) // returns 1 for special characters and 2 for heroes of gamemode if(!ticker || !ticker.mode) return 0 - if (!istype(M)) - return 0 + var/datum/mind/M + if (ismob(character)) + var/mob/C = character + M = C.mind + else if(istype(character, /datum/mind)) + M = character - if(M.mind) + if(M) if(ticker.mode.antag_templates && ticker.mode.antag_templates.len) for(var/datum/antagonist/antag in ticker.mode.antag_templates) - if(antag.is_antagonist(M.mind)) + if(antag.is_antagonist(M)) return 2 - else if(M.mind.special_role) + else if(M.special_role) return 1 - if(isrobot(M)) - var/mob/living/silicon/robot/R = M + if(isrobot(character)) + var/mob/living/silicon/robot/R = character if(R.emagged) return 1 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 228030f157c..78aca1da789 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,102 +1,101 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless var/list/admin_verbs_default = list( - /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ + /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags, /client/proc/player_panel, - /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ - /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ - /client/proc/hide_verbs, /*hides all our adminverbs*/ - /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ - /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/ -// /client/proc/check_antagonists, /*shows all antags*/ + /client/proc/deadmin_self, //destroys our own admin datum so we can play as a regular player, + /client/proc/hide_verbs, //hides all our adminverbs, + /client/proc/hide_most_verbs, //hides all our hideable adminverbs, + /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify, +// /client/proc/check_antagonists, //shows all antags, // /client/proc/cmd_mod_say, - /client/proc/cmd_mentor_check_new_players -// /client/proc/deadchat /*toggles deadchat on/off*/ + /client/proc/cmd_mentor_check_new_players, +// /client/proc/deadchat //toggles deadchat on/off, +// /client/proc/toggle_ahelp_sound, ) var/list/admin_verbs_admin = list( - /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/ + /client/proc/player_panel_new, //shows an interface for all players, with links to various panels, /datum/admins/proc/set_tcrystals, /datum/admins/proc/add_tcrystals, - /client/proc/invisimin, /*allows our mob to go invisible/visible*/ -// /datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/ -Removed due to rare practical use. Moved to debug verbs ~Errorage - /datum/admins/proc/show_game_mode, /*Configuration window for the current game mode.*/ - /datum/admins/proc/force_mode_latespawn, /*Force the mode to try a latespawn proc*/ - /datum/admins/proc/force_antag_latespawn, /*Force a specific template to try a latespawn proc*/ - /datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/ - /datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/ - /datum/admins/proc/announce, /*priority announce something to all clients.*/ - /client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/ - /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ - /client/proc/toggle_view_range, /*changes how far we can see*/ - /datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/ - /datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/ - /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ - /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ - /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/ - /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ - /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ - /datum/admins/proc/access_news_network, /*allows access of newscasters*/ - /client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/ - /client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/ - /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ - /client/proc/Getmob, /*teleports a mob to our location*/ - /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ -// /client/proc/sendmob, /*sends a mob somewhere*/ -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage + /client/proc/invisimin, //allows our mob to go invisible/visible, +// /datum/admins/proc/show_traitor_panel, //interface which shows a mob's mind -Removed due to rare practical use. Moved to debug verbs ~Errorage, + /datum/admins/proc/show_game_mode, //Configuration window for the current game mode., + /datum/admins/proc/force_mode_latespawn, //Force the mode to try a latespawn proc, + /datum/admins/proc/force_antag_latespawn, //Force a specific template to try a latespawn proc, + /datum/admins/proc/toggleenter, //toggles whether people can join the current game, + /datum/admins/proc/toggleguests, //toggles whether guests can join the current game, + /datum/admins/proc/announce, //priority announce something to all clients., + /client/proc/colorooc, //allows us to set a custom colour for everythign we say in ooc, + /client/proc/admin_ghost, //allows us to ghost/reenter body at will, + /client/proc/toggle_view_range, //changes how far we can see, + /datum/admins/proc/view_txt_log, //shows the server log (diary) for today, + /datum/admins/proc/view_atk_log, //shows the server combat-log, doesn't do anything presently, + /client/proc/cmd_admin_pm_context, //right-click adminPM interface, + /client/proc/cmd_admin_pm_panel, //admin-pm list, + /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', + /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc, + /client/proc/cmd_admin_check_contents, //displays the contents of an instance, + /datum/admins/proc/access_news_network, //allows access of newscasters, + /client/proc/giveruntimelog, //allows us to give access to runtime logs to somebody, + /client/proc/getserverlog, //allows us to fetch server logs (diary) for other days, + /client/proc/jumptocoord, //we ghost and jump to a coordinate, + /client/proc/Getmob, //teleports a mob to our location, + /client/proc/Getkey, //teleports a mob with a certain ckey to our location, +// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage, /client/proc/Jump, - /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ - /client/proc/jumptomob, /*allows us to jump to a specific mob*/ - /client/proc/jumptoturf, /*allows us to jump to a specific turf*/ - /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/ - /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/ - /client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/ - /client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/ + /client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey, + /client/proc/jumptomob, //allows us to jump to a specific mob, + /client/proc/jumptoturf, //allows us to jump to a specific turf, + /client/proc/admin_call_shuttle, //allows us to call the emergency shuttle, + /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to centcomm, + /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, + /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding, /client/proc/cmd_admin_create_centcom_report, - /client/proc/check_words, /*displays cult-words*/ - /client/proc/check_ai_laws, /*shows AI and borg laws*/ - /client/proc/rename_silicon, /*properly renames silicons*/ - /client/proc/manage_silicon_laws, /* Allows viewing and editing silicon laws. */ + /client/proc/check_words, //displays cult-words, + /client/proc/check_ai_laws, //shows AI and borg laws, + /client/proc/rename_silicon, //properly renames silicons, + /client/proc/manage_silicon_laws, // Allows viewing and editing silicon laws. , /client/proc/check_antagonists, - /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ - /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/toggleprayers, /*toggles prayers on/off*/ -// /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/ - /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ - /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ + /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others, + /client/proc/dsay, //talk in deadchat using our ckey/fakekey, +// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat, + /client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log, /client/proc/secrets, - /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ - /datum/admins/proc/togglelooc, /*toggles looc on/off for everyone*/ - /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ - /datum/admins/proc/togglehubvisibility, /*toggles visibility on the BYOND Hub.*/ - /datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/ - /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ - /client/proc/cmd_admin_say, /*admin-only ooc chat*/ + /datum/admins/proc/toggleooc, //toggles ooc on/off for everyone, + /datum/admins/proc/togglelooc, //toggles looc on/off for everyone, + /datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead, + /datum/admins/proc/togglehubvisibility, //toggles visibility on the BYOND Hub., + /datum/admins/proc/toggledsay, //toggles dsay on/off for everyone, + /client/proc/game_panel, //game panel, allows to change game-mode etc, + /client/proc/cmd_admin_say, //admin-only ooc chat, /datum/admins/proc/PlayerNotes, /client/proc/cmd_mod_say, /datum/admins/proc/show_player_info, - /client/proc/free_slot, /*frees slot for chosen job*/ + /client/proc/free_slot, //frees slot for chosen job, /client/proc/cmd_admin_change_custom_event, /client/proc/cmd_admin_rejuvenate, - /client/proc/toggleattacklogs, - /client/proc/toggledebuglogs, /client/proc/toggleghostwriters, /client/proc/toggledrones, /datum/admins/proc/show_skills, /client/proc/check_customitem_activity, /client/proc/man_up, /client/proc/global_man_up, - /client/proc/response_team, // Response Teams admin verb + /client/proc/response_team, // Response Teams admin verb, /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, - /client/proc/allow_character_respawn, /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn, // Allows a ghost to respawn , /client/proc/event_manager_panel, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/aooc, - /client/proc/change_human_appearance_admin, /* Allows an admin to change the basic appearance of human-based mobs */ - /client/proc/change_human_appearance_self, /* Allows the human-based mob itself change its basic appearance */ + /client/proc/change_human_appearance_admin, // Allows an admin to change the basic appearance of human-based mobs , + /client/proc/change_human_appearance_self, // Allows the human-based mob itself change its basic appearance , /client/proc/change_security_level, /client/proc/view_chemical_reaction_logs, /client/proc/makePAI, - /datum/admins/proc/paralyze_mob + /client/proc/toggle_debug_logs, + /client/proc/toggle_attack_logs, + /datum/admins/proc/paralyze_mob, + /client/proc/fixatmos ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -131,7 +130,7 @@ var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_custom_item, /datum/admins/proc/check_custom_items, /datum/admins/proc/spawn_plant, - /datum/admins/proc/spawn_atom, /*allows us to spawn instances*/ + /datum/admins/proc/spawn_atom, //allows us to spawn instances, /client/proc/respawn_character, /client/proc/virus2_editor, /client/proc/spawn_chemdisp_cartridge @@ -149,7 +148,7 @@ var/list/admin_verbs_server = list( /datum/admins/proc/immreboot, /client/proc/everyone_random, /datum/admins/proc/toggleAI, - /client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/ + /client/proc/cmd_admin_delete, //delete an instance/object/mob/etc, /client/proc/cmd_debug_del_all, /datum/admins/proc/adrev, /datum/admins/proc/adspawn, @@ -161,7 +160,7 @@ var/list/admin_verbs_server = list( /client/proc/nanomapgen_DumpImage ) var/list/admin_verbs_debug = list( - /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/ + /client/proc/getruntimelog, //allows us to access runtime logs to somebody, /client/proc/cmd_admin_list_open_jobs, /client/proc/Debug2, /client/proc/kill_air, @@ -187,14 +186,14 @@ var/list/admin_verbs_debug = list( /client/proc/enable_debug_verbs, /client/proc/callproc, /client/proc/callproc_target, - /client/proc/toggledebuglogs, /client/proc/SDQL_query, /client/proc/SDQL2_query, /client/proc/Jump, /client/proc/jumptomob, /client/proc/jumptocoord, /client/proc/dsay, - /client/proc/admin_ghost /*allows us to ghost/reenter body at will*/ + /client/proc/toggle_debug_logs, + /client/proc/admin_ghost //allows us to ghost/reenter body at will, ) var/list/admin_verbs_paranoid_debug = list( @@ -218,8 +217,6 @@ var/list/admin_verbs_rejuv = list( var/list/admin_verbs_hideable = list( /client/proc/deadmin_self, // /client/proc/deadchat, - /client/proc/toggleprayers, - /client/proc/toggle_hear_radio, /datum/admins/proc/show_traitor_panel, /datum/admins/proc/toggleenter, /datum/admins/proc/toggleguests, @@ -288,14 +285,12 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/set_tcrystals ) var/list/admin_verbs_mod = list( - /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ - /client/proc/cmd_admin_pm_panel, /*admin-pm list*/ - /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/ - /client/proc/toggledebuglogs, + /client/proc/cmd_admin_pm_context, //right-click adminPM interface, + /client/proc/cmd_admin_pm_panel, //admin-pm list, + /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game., /datum/admins/proc/PlayerNotes, - /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ + /client/proc/admin_ghost, //allows us to ghost/reenter body at will, /client/proc/cmd_mod_say, - /client/proc/toggleattacklogs, /datum/admins/proc/show_player_info, /client/proc/player_panel_new, /client/proc/dsay, @@ -304,10 +299,11 @@ var/list/admin_verbs_mod = list( /client/proc/check_antagonists, /client/proc/aooc, /client/proc/jobbans, - /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/ + /client/proc/toggle_attack_logs, + /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', /datum/admins/proc/paralyze_mob, /client/proc/cmd_admin_direct_narrate, - /client/proc/allow_character_respawn /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn // Allows a ghost to respawn , ) var/list/admin_verbs_mentor = list( @@ -525,12 +521,16 @@ var/list/admin_verbs_mentor = list( if(holder) if(holder.fakekey) holder.fakekey = null + if(istype(src.mob, /mob/new_player)) + mob.name = capitalize(ckey) else var/new_key = ckeyEx(input("Enter your desired display name.", "Fake Key", key) as text|null) if(!new_key) return if(length(new_key) >= 26) new_key = copytext(new_key, 1, 26) holder.fakekey = new_key + if(istype(mob, /mob/new_player)) + mob.name = new_key log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]") message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1) feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -903,17 +903,6 @@ var/list/admin_verbs_mentor = list( message_admins("A job slot for [job] has been opened by [key_name_admin(usr)]") return -/client/proc/toggleattacklogs() - set name = "Toggle Attack Log Messages" - set category = "Preferences" - - prefs.toggles ^= CHAT_ATTACKLOGS - if (prefs.toggles & CHAT_ATTACKLOGS) - usr << "You now will get attack log messages" - else - usr << "You now won't get attack log messages" - - /client/proc/toggleghostwriters() set name = "Toggle ghost writers" set category = "Server" @@ -942,17 +931,6 @@ var/list/admin_verbs_mentor = list( src << "Enabled maint drones." message_admins("Admin [key_name_admin(usr)] has enabled maint drones.", 1) -/client/proc/toggledebuglogs() - set name = "Toggle Debug Log Messages" - set category = "Preferences" - - prefs.toggles ^= CHAT_DEBUGLOGS - if (prefs.toggles & CHAT_DEBUGLOGS) - usr << "You now will get debug log messages" - else - usr << "You now won't get debug log messages" - - /client/proc/man_up(mob/T as mob in mob_list) set category = "Fun" set name = "Man Up" diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 83a2f3b370a..622be84c3d3 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -392,7 +392,7 @@ if (ticker && ticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

Round Status

" dat += "Current Game Mode: [ticker.mode.name]
" - dat += "Round Duration: [round(world.time / 36000)]:[add_zero(world.time / 600 % 60, 2)]:[world.time / 100 % 6][world.time / 100 % 10]
" + dat += "Round Duration: [round_duration_as_text()]
" dat += "Emergency shuttle
" if (!emergency_shuttle.online()) dat += "Call Shuttle
" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index f4ce67aa2c9..504a8419bf8 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -100,7 +100,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if((R_ADMIN|R_MOD|R_MENTOR|R_SERVER) & X.holder.rights) if(X.is_afk()) admin_number_afk++ - if(X.prefs.toggles & SOUND_ADMINHELP) + if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) X << 'sound/effects/adminhelp.ogg' if(X.holder.rights == R_MENTOR) X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index f031bc2835c..898cc4e8350 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -104,7 +104,7 @@ //play the recieving admin the adminhelp sound (if they have them enabled) //non-admins shouldn't be able to disable this - if(C.prefs && C.prefs.toggles & SOUND_ADMINHELP) + if(C.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping)) C << 'sound/effects/adminhelp.ogg' log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index e6da3c736ac..11193a3f090 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -8,11 +8,11 @@ if(!src.mob) return if(prefs.muted & MUTE_DEADCHAT) - src << "\red You cannot send DSAY messages (muted)." + src << "You cannot send DSAY messages (muted)." return - if(!(prefs.toggles & CHAT_DEAD)) - src << "\red You have deadchat muted." + if(!is_preference_enabled(/datum/client_preference/show_dsay)) + src << "You have deadchat muted." return if (src.handle_spam_prevention(msg,MUTE_DEADCHAT)) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 003a89b4e66..6fa7ef43a68 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -732,7 +732,7 @@ M.equip_to_slot_or_del(W, slot_wear_id) if("blue wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) @@ -744,7 +744,7 @@ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("red wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) @@ -756,7 +756,7 @@ M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("marisa wizard") - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/marisa(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/marisa(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm new file mode 100644 index 00000000000..dd28127e4a9 --- /dev/null +++ b/code/modules/admin/verbs/grief_fixers.dm @@ -0,0 +1,54 @@ +/client/proc/fixatmos() + set category = "Admin" + set name = "Fix Atmospherics Grief" + + if(!check_rights(R_ADMIN|R_DEBUG)) return + + + if(alert("WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", "No", "Yes") == "No") + return + feedback_add_details("admin_verb","FA") + + log_and_message_admins("Full atmosphere reset initiated by [usr].") + world << "Initiating restart of atmosphere. The server may lag a bit." + sleep(10) + var/current_time = world.timeofday + + // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes. + for(var/obj/machinery/power/supermatter/S in machines) + S.power = 0 + usr << "\[1/5\] - Supermatter depowered" + + // Remove all gases from all pipenets + for(var/datum/pipe_network/PN in pipe_networks) + for(var/datum/gas_mixture/G in PN.gases) + G.gas = list() + G.update_values() + + usr << "\[2/5\] - All pipenets purged of gas." + + // Delete all zones. + for(var/zone/Z in world) + Z.c_invalidate() + + usr << "\[3/5\] - All ZAS Zones removed." + + var/list/unsorted_overlays = list() + for(var/id in gas_data.tile_overlay) + unsorted_overlays |= gas_data.tile_overlay[id] + + + for(var/turf/simulated/T in world) + T.air = null + T.overlays.Remove(unsorted_overlays) + T.zone = null + + usr << "\[4/5\] - All turfs reset to roundstart values." + + qdel(air_master) + air_master = new + air_master.Setup() + spawn air_master.Start() + + usr << "\[5/5\] - ZAS Rebooted" + world << "Atmosphere restart completed in [(world.timeofday - current_time)/10] seconds." \ No newline at end of file diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 50ddc81f41b..51f1fbceb31 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -1,7 +1,7 @@ var/list/forbidden_varedit_object_types = list( - /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea. - /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering - /datum/feedback_variable //Prevents people messing with feedback gathering + /datum/admins, //Admins editing their own admin-power object? Yup, sounds like a good idea, + /obj/machinery/blackbox_recorder, //Prevents people messing with feedback gathering, + /datum/feedback_variable //Prevents people messing with feedback gathering, ) var/list/VVlocked = list("vars", "client", "virus", "viruses", "cuffed", "last_eaten", "unlock_content", "bound_x", "bound_y", "step_x", "step_y", "force_ending") diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 3a4b40d9850..eb7451c61ce 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -16,7 +16,7 @@ var/list/sounds_cache = list() log_admin("[key_name(src)] played sound [S]") message_admins("[key_name_admin(src)] played sound [S]", 1) for(var/mob/M in player_list) - if(M.client.prefs.toggles & SOUND_MIDI) + if(M.is_preference_enabled(/datum/client_preference/play_admin_midis)) M << uploaded_sound feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index e43c5400d96..600549cdfab 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -21,7 +21,7 @@ for(var/client/C in admins) if(R_ADMIN & C.holder.rights) - if(C.prefs.toggles & CHAT_PRAYER) + if(C.is_preference_enabled(/datum/client_preference/admin/show_chat_prayers)) C << msg usr << "Your prayers have been received by the gods." diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 41da036b138..96acc58fce9 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -234,9 +234,9 @@ Ccomp's first proc. var/list/mobs = list() var/list/ghosts = list() - var/list/sortmob = sortAtom(mob_list) // get the mob list. - /var/any=0 - for(var/mob/observer/dead/M in sortmob) + var/list/sortmob = sortAtom(mob_list) // get the mob list. + var/any=0 + for(var/mob/observer/dead/M in sortmob) mobs.Add(M) //filter it where it's only ghosts any = 1 //if no ghosts show up, any will just be 0 if(!any) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 0961115d6a8..b5596521328 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -46,3 +46,5 @@ var/related_accounts_cid = "Requires database" //So admins know why it isn't working - Used to determine what other accounts previously logged in from this computer id preload_rsc = 0 // This is 0 so we can set it to an URL once the player logs in and have them download the resources from a different server. + var/global/obj/screen/click_catcher/void + diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index c7a6dd7ccb2..4c05ebece50 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -159,6 +159,10 @@ send_resources() nanomanager.send_resources(src) + + if(!void) + void = new() + screen += void if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates. src << "You have unread updates in the changelog." diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 367d3e247b3..efd55d37ec3 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -21,7 +21,7 @@ /datum/category_item/player_setup_item/general/basic/sanitize_character() if(!pref.species) pref.species = "Human" - var/datum/species/S = all_species[pref.species] + var/datum/species/S = all_species[pref.species ? pref.species : "Human"] pref.age = sanitize_integer(pref.age, S.min_age, S.max_age, initial(pref.age)) pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders)) pref.real_name = sanitize_name(pref.real_name, pref.species) diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index eb25cb24e8e..db9fa5227d5 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -409,7 +409,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O choice_options = list("Normal","Prosthesis") var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in choice_options - if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION + if(!new_state || !CanUseTopic(user)) return TOPIC_NOACTION switch(new_state) if("Normal") diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index 7b61a86cb44..60eeeb144e7 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -1,38 +1,130 @@ +/datum/preferences + var/preferences_enabled = null + var/preferences_disabled = null + /datum/category_item/player_setup_item/player_global/settings name = "Settings" sort_order = 2 /datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S) - S["lastchangelog"] >> pref.lastchangelog - S["default_slot"] >> pref.default_slot - S["toggles"] >> pref.toggles + S["lastchangelog"] >> pref.lastchangelog + S["default_slot"] >> pref.default_slot + S["preferences"] >> pref.preferences_enabled + S["preferences_disabled"] >> pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S) - S["lastchangelog"] << pref.lastchangelog - S["default_slot"] << pref.default_slot - S["toggles"] << pref.toggles + S["lastchangelog"] << pref.lastchangelog + S["default_slot"] << pref.default_slot + S["preferences"] << pref.preferences_enabled + S["preferences_disabled"] << pref.preferences_disabled /datum/category_item/player_setup_item/player_global/settings/sanitize_preferences() + // Ensure our preferences are lists. + if(!istype(pref.preferences_enabled, /list)) + pref.preferences_enabled = list() + if(!istype(pref.preferences_disabled, /list)) + pref.preferences_disabled = list() + + // Arrange preferences that have never been enabled/disabled. + var/list/client_preference_keys = list() + for(var/cp in get_client_preferences()) + var/datum/client_preference/client_pref = cp + client_preference_keys += client_pref.key + if((client_pref.key in pref.preferences_enabled) || (client_pref.key in pref.preferences_disabled)) + continue + + if(client_pref.enabled_by_default) + pref.preferences_enabled += client_pref.key + else + pref.preferences_disabled += client_pref.key + + // Clean out preferences that no longer exist. + for(var/key in pref.preferences_enabled) + if(!(key in client_preference_keys)) + pref.preferences_enabled -= key + for(var/key in pref.preferences_disabled) + if(!(key in client_preference_keys)) + pref.preferences_disabled -= key + pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog)) pref.default_slot = sanitize_integer(pref.default_slot, 1, config.character_slots, initial(pref.default_slot)) - pref.toggles = sanitize_integer(pref.toggles, 0, 65535, initial(pref.toggles)) /datum/category_item/player_setup_item/player_global/settings/content(var/mob/user) - . += "Play admin midis: [(pref.toggles & SOUND_MIDI) ? "Yes" : "No"]
" - . += "Play lobby music: [(pref.toggles & SOUND_LOBBY) ? "Yes" : "No"]
" - . += "Ghost ears: [(pref.toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]
" - . += "Ghost sight: [(pref.toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]
" - . += "Ghost radio: [(pref.toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]
" + . = list() + . += "Preferences
" + . += "" + var/mob/pref_mob = preference_mob() + for(var/cp in get_client_preferences()) + var/datum/client_preference/client_pref = cp + if(!client_pref.may_toggle(pref_mob)) + continue + + . += "" + if(pref_mob.is_preference_enabled(client_pref.key)) + . += "" + else + . += "" + . += "" + + . += "
[client_pref.description]: [client_pref.enabled_description] [client_pref.disabled_description][client_pref.enabled_description] [client_pref.disabled_description]
" + return jointext(., "") /datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["toggle"]) - var/toggle_flag = text2num(href_list["toggle"]) - pref.toggles ^= toggle_flag - if(toggle_flag == SOUND_LOBBY && isnewplayer(user)) - if(pref.toggles & SOUND_LOBBY) - user << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) - else - user << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) + var/mob/pref_mob = preference_mob() + if(href_list["toggle_on"]) + . = pref_mob.set_preference(href_list["toggle_on"], TRUE) + else if(href_list["toggle_off"]) + . = pref_mob.set_preference(href_list["toggle_off"], FALSE) + if(.) return TOPIC_REFRESH return ..() + +/client/proc/is_preference_enabled(var/preference) + var/datum/client_preference/cp = get_client_preference(preference) + return cp && (cp.key in prefs.preferences_enabled) + +/client/proc/set_preference(var/preference, var/set_preference) + var/datum/client_preference/cp = get_client_preference(preference) + if(!cp) + return FALSE + preference = cp.key + + if(set_preference && !(preference in prefs.preferences_enabled)) + return toggle_preference(cp) + else if(!set_preference && (preference in prefs.preferences_enabled)) + return toggle_preference(cp) + +/client/proc/toggle_preference(var/preference, var/set_preference) + var/datum/client_preference/cp = get_client_preference(preference) + if(!cp) + return FALSE + preference = cp.key + + var/enabled + if(preference in prefs.preferences_disabled) + prefs.preferences_enabled |= preference + prefs.preferences_disabled -= preference + enabled = TRUE + . = TRUE + else if(preference in prefs.preferences_enabled) + prefs.preferences_enabled -= preference + prefs.preferences_disabled |= preference + enabled = FALSE + . = TRUE + if(.) + cp.toggled(mob, enabled) + +/mob/proc/is_preference_enabled(var/preference) + if(!client) + return FALSE + return client.is_preference_enabled(preference) + +/mob/proc/set_preference(var/preference, var/set_preference) + if(!client) + return FALSE + if(!client.prefs) + log_debug("Client prefs found to be null for mob [src] and client [ckey], this should be investigated.") + return FALSE + + return client.set_preference(preference, set_preference) diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm new file mode 100644 index 00000000000..e5d408c477e --- /dev/null +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -0,0 +1,185 @@ +var/list/_client_preferences +var/list/_client_preferences_by_key +var/list/_client_preferences_by_type + +/proc/get_client_preferences() + if(!_client_preferences) + _client_preferences = list() + for(var/ct in subtypes(/datum/client_preference)) + var/datum/client_preference/client_type = ct + if(initial(client_type.description)) + _client_preferences += new client_type() + return _client_preferences + +/proc/get_client_preference(var/datum/client_preference/preference) + if(istype(preference)) + return preference + if(ispath(preference)) + return get_client_preference_by_type(preference) + return get_client_preference_by_key(preference) + +/proc/get_client_preference_by_key(var/preference) + if(!_client_preferences_by_key) + _client_preferences_by_key = list() + for(var/ct in get_client_preferences()) + var/datum/client_preference/client_pref = ct + _client_preferences_by_key[client_pref.key] = client_pref + return _client_preferences_by_key[preference] + +/proc/get_client_preference_by_type(var/preference) + if(!_client_preferences_by_type) + _client_preferences_by_type = list() + for(var/ct in get_client_preferences()) + var/datum/client_preference/client_pref = ct + _client_preferences_by_type[client_pref.type] = client_pref + return _client_preferences_by_type[preference] + +/datum/client_preference + var/description + var/key + var/enabled_by_default = TRUE + var/enabled_description = "Yes" + var/disabled_description = "No" + +/datum/client_preference/proc/may_toggle(var/mob/preference_mob) + return TRUE + +/datum/client_preference/proc/toggled(var/mob/preference_mob, var/enabled) + return + +/********************* +* Player Preferences * +*********************/ + +/datum/client_preference/play_admin_midis + description ="Play admin midis" + key = "SOUND_MIDI" + +/datum/client_preference/play_lobby_music + description ="Play lobby music" + key = "SOUND_LOBBY" + +/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled) + if(enabled) + preference_mob << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) + else + preference_mob << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) + +/datum/client_preference/play_ambiance + description ="Play ambience" + key = "SOUND_AMBIENCE" + +/datum/client_preference/play_ambiance/toggled(var/mob/preference_mob, var/enabled) + if(!enabled) + preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) + preference_mob << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) + +/datum/client_preference/ghost_ears + description ="Ghost ears" + key = "CHAT_GHOSTEARS" + enabled_description = "All Speech" + disabled_description = "Nearby" + +/datum/client_preference/ghost_sight + description ="Ghost sight" + key = "CHAT_GHOSTSIGHT" + enabled_description = "All Emotes" + disabled_description = "Nearby" + +/datum/client_preference/ghost_radio + description ="Ghost radio" + key = "CHAT_GHOSTRADIO" + enabled_description = "All Chatter" + disabled_description = "Nearby" + +/datum/client_preference/chat_tags + description ="Chat tags" + key = "CHAT_SHOWICONS" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_typing_indicator + description ="Typing indicator" + key = "SHOW_TYPING" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_typing_indicator/toggled(var/mob/preference_mob, var/enabled) + if(!enabled) + preference_mob.set_typing_indicator(0) + +/datum/client_preference/show_ooc + description ="OOC chat" + key = "CHAT_OOC" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_looc + description ="LOOC chat" + key = "CHAT_LOOC" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_dsay + description ="Dead chat" + key = "CHAT_DEAD" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/show_progress_bar + description ="Progress Bar" + key = "SHOW_PROGRESS" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/safefiring + description = "Gun Firing Intent Requirement" + key = "SAFE_FIRING" + enabled_description = "Safe" + disabled_description = "Dangerous" +/******************** +* Staff Preferences * +********************/ +/datum/client_preference/admin/may_toggle(var/mob/preference_mob) + return check_rights(R_ADMIN, 0, preference_mob) + +/datum/client_preference/mod/may_toggle(var/mob/preference_mob) + return check_rights(R_MOD|R_ADMIN, 0, preference_mob) + +/datum/client_preference/debug/may_toggle(var/mob/preference_mob) + return check_rights(R_DEBUG|R_ADMIN, 0, preference_mob) + +/datum/client_preference/mod/show_attack_logs + description = "Attack Log Messages" + key = "CHAT_ATTACKLOGS" + enabled_description = "Show" + disabled_description = "Hide" + enabled_by_default = FALSE + +/datum/client_preference/debug/show_debug_logs + description = "Debug Log Messages" + key = "CHAT_DEBUGLOGS" + enabled_description = "Show" + disabled_description = "Hide" + enabled_by_default = FALSE + +/datum/client_preference/admin/show_chat_prayers + description = "Chat Prayers" + key = "CHAT_PRAYER" + enabled_description = "Show" + disabled_description = "Hide" + +/datum/client_preference/holder/may_toggle(var/mob/preference_mob) + return preference_mob && preference_mob.client && preference_mob.client.holder + +/datum/client_preference/holder/play_adminhelp_ping + description = "Adminhelps" + key = "SOUND_ADMINHELP" + enabled_description = "Hear" + disabled_description = "Silent" + +/datum/client_preference/holder/hear_radio + description = "Radio chatter" + key = "CHAT_RADIO" + enabled_description = "Show" + disabled_description = "Hide" \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm new file mode 100644 index 00000000000..820c95f3248 --- /dev/null +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -0,0 +1,144 @@ +/datum/gear_tweak/proc/get_contents(var/metadata) + return + +/datum/gear_tweak/proc/get_metadata(var/user, var/metadata) + return + +/datum/gear_tweak/proc/get_default() + return + +/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) + return + +/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata) + return + +/* +* Color adjustment +*/ + +var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() + +/datum/gear_tweak/color + var/list/valid_colors + +/datum/gear_tweak/color/New(var/list/valid_colors) + src.valid_colors = valid_colors + ..() + +/datum/gear_tweak/color/get_contents(var/metadata) + return "Color: " + +/datum/gear_tweak/color/get_default() + return valid_colors ? valid_colors[1] : COLOR_GRAY + +/datum/gear_tweak/color/get_metadata(var/user, var/metadata) + if(valid_colors) + return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors + return input(user, "Choose an item color.", "Global Preference", metadata) as color|null + +/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) + if(valid_colors && !(metadata in valid_colors)) + return + I.color = metadata + +/* +* Path adjustment +*/ + +/datum/gear_tweak/path + var/list/valid_paths + +/datum/gear_tweak/path/New(var/list/valid_paths) + src.valid_paths = valid_paths + ..() + +/datum/gear_tweak/path/get_contents(var/metadata) + return "Type: [metadata]" + +/datum/gear_tweak/path/get_default() + return valid_paths[1] + +/datum/gear_tweak/path/get_metadata(var/user, var/metadata) + return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths + +/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) + if(!(metadata in valid_paths)) + return + gear_data.path = valid_paths[metadata] + +/* +* Content adjustment +*/ + +/datum/gear_tweak/contents + var/list/valid_contents + +/datum/gear_tweak/contents/New() + valid_contents = args.Copy() + ..() + +/datum/gear_tweak/contents/get_contents(var/metadata) + return "Contents: [english_list(metadata, and_text = ", ")]" + +/datum/gear_tweak/contents/get_default() + . = list() + for(var/i = 1 to valid_contents.len) + . += "Random" + +/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) + . = list() + for(var/i = metadata.len to valid_contents.len) + metadata += "Random" + for(var/i = 1 to valid_contents.len) + var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) + if(entry) + . += entry + else + return metadata + +/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata.len != valid_contents.len) + return + for(var/i = 1 to valid_contents.len) + var/path + var/list/contents = valid_contents[i] + if(metadata[i] == "Random") + path = pick(contents) + path = contents[path] + else if(metadata[i] == "None") + continue + else + path = contents[metadata[i]] + new path(I) + +/* +* Ragent adjustment +*/ + +/datum/gear_tweak/reagents + var/list/valid_reagents + +/datum/gear_tweak/reagents/New(var/list/reagents) + valid_reagents = reagents.Copy() + ..() + +/datum/gear_tweak/reagents/get_contents(var/metadata) + return "Reagents: [metadata]" + +/datum/gear_tweak/reagents/get_default() + return "Random" + +/datum/gear_tweak/reagents/get_metadata(var/user, var/list/metadata) + . = input(user, "Choose an entry.", "Character Preference", metadata) as null|anything in (valid_reagents + list("Random", "None")) + if(!.) + return metadata + +/datum/gear_tweak/reagents/tweak_item(var/obj/item/I, var/list/metadata) + if(metadata == "None") + return + if(metadata == "Random") + . = valid_reagents[pick(valid_reagents)] + else + . = valid_reagents[metadata] + I.reagents.add_reagent(., I.reagents.get_free_space()) diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index a8b5b680fda..4244cd0037c 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -92,6 +92,7 @@ var/list/gear_datums = list() var/fcolor = "#3366CC" if(total_cost < MAX_GEAR_COST) fcolor = "#E67300" + . += list() . += "" . += "" @@ -122,11 +123,33 @@ var/list/gear_datums = list() for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in pref.gear) - var/obj/item/temp = G.path - . += "" - . += "" - . += "" + . += "" + . += "" + . += "" + if(ticked) + . += "" . += "
[total_cost]/[MAX_GEAR_COST] loadout points spent. \[Clear Loadout\]
[G.display_name][G.cost][initial(temp.desc)]
[G.display_name][G.cost][G.description]
" + for(var/datum/gear_tweak/tweak in G.gear_tweaks) + . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" + . += "
" + . = jointext(.) + +/datum/category_item/player_setup_item/loadout/proc/get_gear_metadata(var/datum/gear/G) + . = pref.gear[G.display_name] + if(!.) + . = list() + pref.gear[G.display_name] = . + +/datum/category_item/player_setup_item/loadout/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) + var/list/metadata = get_gear_metadata(G) + . = metadata["[tweak]"] + if(!.) + . = tweak.get_default() + metadata["[tweak]"] = . + +/datum/category_item/player_setup_item/loadout/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) + var/list/metadata = get_gear_metadata(G) + metadata["[tweak]"] = new_metadata /datum/category_item/player_setup_item/loadout/OnTopic(href, href_list, user) if(href_list["toggle_gear"]) @@ -141,6 +164,16 @@ var/list/gear_datums = list() if((total_cost+TG.cost) <= MAX_GEAR_COST) pref.gear += TG.display_name return TOPIC_REFRESH + if(href_list["gear"] && href_list["tweak"]) + var/datum/gear/gear = gear_datums[href_list["gear"]] + var/datum/gear_tweak/tweak = locate(href_list["tweak"]) + if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) + return TOPIC_NOACTION + var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) + if(!metadata || !CanUseTopic(user)) + return TOPIC_NOACTION + set_tweak_metadata(gear, tweak, metadata) + return TOPIC_REFRESH else if(href_list["select_category"]) current_tab = href_list["select_category"] return TOPIC_REFRESH @@ -151,11 +184,34 @@ var/list/gear_datums = list() /datum/gear var/display_name //Name/index. Must be unique. + var/description //Description of this gear. If left blank will default to the description of the pathed item. var/path //Path to item. var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. var/slot //Slot to equip to. var/list/allowed_roles //Roles that can spawn with this item. var/whitelisted //Term to check the whitelist for.. var/sort_category = "General" + var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. +/datum/gear/New() + ..() + if(!description) + var/obj/O = path + description = initial(O.desc) +/datum/gear_data + var/path + var/location + +/datum/gear_data/New(var/path, var/location) + src.path = path + src.location = location + +/datum/gear/proc/spawn_item(var/location, var/metadata) + var/datum/gear_data/gd = new(path, location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_gear_data(metadata["[gt]"], gd) + var/item = new gd.path(gd.location) + for(var/datum/gear_tweak/gt in gear_tweaks) + gt.tweak_item(item, metadata["[gt]"]) + return item diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 3e255953832..ced70ebef82 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -28,6 +28,10 @@ display_name = "armband, science" path = /obj/item/clothing/accessory/armband/science +/datum/gear/accessory/wallet + display_name = "wallet" + path = /obj/item/weapon/storage/wallet/random + /datum/gear/accessory/holster display_name = "holster, armpit" path = /obj/item/clothing/accessory/holster/armpit @@ -127,6 +131,11 @@ path = /obj/item/clothing/accessory/storage/black_vest allowed_roles = list("Security Officer","Head of Security","Warden") +/datum/gear/accessory/white_vest + display_name = "webbing, medical" + path = /obj/item/clothing/accessory/storage/white_vest + allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor") + /datum/gear/accessory/webbing display_name = "webbing, simple" path = /obj/item/clothing/accessory/storage/webbing diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index bd7f87e5e52..2b1c4bbb6b7 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -30,10 +30,34 @@ display_name = "flask" path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask +/datum/gear/flask/New() + ..() + gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents()) + /datum/gear/vacflask display_name = "vacuum-flask" path = /obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask +/datum/gear/vacflask/New() + ..() + gear_tweaks += new/datum/gear_tweak/reagents(lunchables_drink_reagents()) + /datum/gear/comb display_name = "purple comb" - path = /obj/item/weapon/haircomb \ No newline at end of file + path = /obj/item/weapon/haircomb + +/datum/gear/lunchbox + display_name = "lunchbox" + description = "A little lunchbox." + cost = 2 + path = /obj/item/weapon/storage/toolbox/lunchbox + +/datum/gear/lunchbox/New() + ..() + var/list/lunchboxes = list() + for(var/lunchbox_type in typesof(/obj/item/weapon/storage/toolbox/lunchbox)) + var/obj/item/weapon/storage/toolbox/lunchbox/lunchbox = lunchbox_type + if(!initial(lunchbox.filled)) + lunchboxes[initial(lunchbox.name)] = lunchbox_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lunchboxes)) + gear_tweaks += new/datum/gear_tweak/contents(lunchables_lunches(), lunchables_snacks(), lunchables_drinks()) diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index a58f3a450a0..a2635ef79c5 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -187,253 +187,25 @@ whitelisted = "Tajara" /datum/gear/head/hijab - display_name = "hijab, black" + display_name = "hijab" path = /obj/item/clothing/head/hijab -/datum/gear/head/hijab/white - display_name = "hijab, white" - path = /obj/item/clothing/head/hijab/white - -/datum/gear/head/hijab/aqua - display_name = "hijab, aqua" - path = /obj/item/clothing/head/hijab/aqua - -/datum/gear/head/hijab/blue - display_name = "hijab, blue" - path = /obj/item/clothing/head/hijab/blue - -/datum/gear/head/hijab/brown - display_name = "hijab, brown" - path = /obj/item/clothing/head/hijab/brown - -/datum/gear/head/hijab/darkblue - display_name = "hijab, dark blue" - path = /obj/item/clothing/head/hijab/darkblue - -/datum/gear/head/hijab/darkred - display_name = "hijab, dark red" - path = /obj/item/clothing/head/hijab/darkred - -/datum/gear/head/hijab/green - display_name = "hijab, green" - path = /obj/item/clothing/head/hijab/green - -/datum/gear/head/hijab/grey - display_name = "hijab, grey" - path = /obj/item/clothing/head/hijab/grey - -/datum/gear/head/hijab/lightblue - display_name = "hijab, light blue" - path = /obj/item/clothing/head/hijab/lightblue - -/datum/gear/head/hijab/lightbrown - display_name = "hijab, light brown" - path = /obj/item/clothing/head/hijab/lightbrown - -/datum/gear/head/hijab/lightgreen - display_name = "hijab, light green" - path = /obj/item/clothing/head/hijab/lightgreen - -/datum/gear/head/hijab/lightpurple - display_name = "hijab, light purple" - path = /obj/item/clothing/head/hijab/lightpurple - -/datum/gear/head/hijab/lightred - display_name = "hijab, light red" - path = /obj/item/clothing/head/hijab/lightred - -/datum/gear/head/hijab/maroon - display_name = "hijab, maroon" - path = /obj/item/clothing/head/hijab/maroon - -/datum/gear/head/hijab/orange - display_name = "hijab, orange" - path = /obj/item/clothing/head/hijab/orange - -/datum/gear/head/hijab/pink - display_name = "hijab, pink" - path = /obj/item/clothing/head/hijab/pink - -/datum/gear/head/hijab/purple - display_name = "hijab, purple" - path = /obj/item/clothing/head/hijab/purple - -/datum/gear/head/hijab/red - display_name = "hijab, red" - path = /obj/item/clothing/head/hijab/red - -/datum/gear/head/hijab/yellowgreen - display_name = "hijab, yellow green" - path = /obj/item/clothing/head/hijab/yellowgreen - -/datum/gear/head/hijab/yellow - display_name = "hijab, yellow" - path = /obj/item/clothing/head/hijab/yellow +/datum/gear/head/hijab/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) /datum/gear/head/kippa - display_name = "kippa, black" + display_name = "kippa" path = /obj/item/clothing/head/kippa -/datum/gear/head/kippa/white - display_name = "kippa, white" - path = /obj/item/clothing/head/kippa/white - -/datum/gear/head/kippa/aqua - display_name = "kippa, aqua" - path = /obj/item/clothing/head/kippa/aqua - -/datum/gear/head/kippa/blue - display_name = "kippa, blue" - path = /obj/item/clothing/head/kippa/blue - -/datum/gear/head/kippa/brown - display_name = "kippa, brown" - path = /obj/item/clothing/head/kippa/brown - -/datum/gear/head/kippa/darkblue - display_name = "kippa, dark blue" - path = /obj/item/clothing/head/kippa/darkblue - -/datum/gear/head/kippa/darkred - display_name = "kippa, dark red" - path = /obj/item/clothing/head/kippa/darkred - -/datum/gear/head/kippa/green - display_name = "kippa, green" - path = /obj/item/clothing/head/kippa/green - -/datum/gear/head/kippa/grey - display_name = "kippa, grey" - path = /obj/item/clothing/head/kippa/grey - -/datum/gear/head/kippa/lightblue - display_name = "kippa, light blue" - path = /obj/item/clothing/head/kippa/lightblue - -/datum/gear/head/kippa/lightbrown - display_name = "kippa, light brown" - path = /obj/item/clothing/head/kippa/lightbrown - -/datum/gear/head/kippa/lightgreen - display_name = "kippa, light green" - path = /obj/item/clothing/head/kippa/lightgreen - -/datum/gear/head/kippa/lightpurple - display_name = "kippa, light purple" - path = /obj/item/clothing/head/kippa/lightpurple - -/datum/gear/head/kippa/lightred - display_name = "kippa, light red" - path = /obj/item/clothing/head/kippa/lightred - -/datum/gear/head/kippa/maroon - display_name = "kippa, maroon" - path = /obj/item/clothing/head/kippa/maroon - -/datum/gear/head/kippa/orange - display_name = "kippa, orange" - path = /obj/item/clothing/head/kippa/orange - -/datum/gear/head/kippa/pink - display_name = "kippa, pink" - path = /obj/item/clothing/head/kippa/pink - -/datum/gear/head/kippa/purple - display_name = "kippa, purple" - path = /obj/item/clothing/head/kippa/purple - -/datum/gear/head/kippa/red - display_name = "kippa, red" - path = /obj/item/clothing/head/kippa/red - -/datum/gear/head/kippa/yellowgreen - display_name = "kippa, yellow green" - path = /obj/item/clothing/head/kippa/yellowgreen - -/datum/gear/head/kippa/yellow - display_name = "kippa, yellow" - path = /obj/item/clothing/head/kippa/yellow +/datum/gear/head/kippa/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) /datum/gear/head/turban - display_name = "turban, black" + display_name = "turban" path = /obj/item/clothing/head/turban -/datum/gear/head/turban/white - display_name = "turban, white" - path = /obj/item/clothing/head/turban/white - -/datum/gear/head/turban/aqua - display_name = "turban, aqua" - path = /obj/item/clothing/head/turban/aqua - -/datum/gear/head/turban/blue - display_name = "turban, blue" - path = /obj/item/clothing/head/turban/blue - -/datum/gear/head/turban/brown - display_name = "turban, brown" - path = /obj/item/clothing/head/turban/brown - -/datum/gear/head/turban/darkblue - display_name = "turban, dark blue" - path = /obj/item/clothing/head/turban/darkblue - -/datum/gear/head/turban/darkred - display_name = "turban, dark red" - path = /obj/item/clothing/head/turban/darkred - -/datum/gear/head/turban/green - display_name = "turban, green" - path = /obj/item/clothing/head/turban/green - -/datum/gear/head/turban/grey - display_name = "turban, grey" - path = /obj/item/clothing/head/turban/grey - -/datum/gear/head/turban/lightblue - display_name = "turban, light blue" - path = /obj/item/clothing/head/turban/lightblue - -/datum/gear/head/turban/lightbrown - display_name = "turban, light brown" - path = /obj/item/clothing/head/turban/lightbrown - -/datum/gear/head/turban/lightgreen - display_name = "turban, light green" - path = /obj/item/clothing/head/turban/lightgreen - -/datum/gear/head/turban/lightpurple - display_name = "turban, light purple" - path = /obj/item/clothing/head/turban/lightpurple - -/datum/gear/head/turban/lightred - display_name = "turban, light red" - path = /obj/item/clothing/head/turban/lightred - -/datum/gear/head/turban/maroon - display_name = "turban, maroon" - path = /obj/item/clothing/head/turban/maroon - -/datum/gear/head/turban/orange - display_name = "turban, orange" - path = /obj/item/clothing/head/turban/orange - -/datum/gear/head/turban/pink - display_name = "turban, pink" - path = /obj/item/clothing/head/turban/pink - -/datum/gear/head/turban/purple - display_name = "turban, purple" - path = /obj/item/clothing/head/turban/purple - -/datum/gear/head/turban/red - display_name = "turban, red" - path = /obj/item/clothing/head/turban/red - -/datum/gear/head/turban/yellowgreen - display_name = "turban, yellow green" - path = /obj/item/clothing/head/turban/yellowgreen - -/datum/gear/head/turban/yellow - display_name = "turban, yellow" - path = /obj/item/clothing/head/turban/yellow \ No newline at end of file +/datum/gear/head/turban/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 997520a1c7a..80b5e2bd6a2 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -59,48 +59,16 @@ path = /obj/item/clothing/suit/storage/hazardvest /datum/gear/suit/hoodie - display_name = "hoodie, grey" + display_name = "hoodie selection" path = /obj/item/clothing/suit/storage/toggle/hoodie -/datum/gear/suit/hoodie/red - display_name = "hoodie, red" - path = /obj/item/clothing/suit/storage/toggle/hoodie/red - -/datum/gear/suit/hoodie/blue - display_name = "hoodie, blue" - path = /obj/item/clothing/suit/storage/toggle/hoodie/blue - -/datum/gear/suit/hoodie/yellow - display_name = "hoodie, yellow" - path = /obj/item/clothing/suit/storage/toggle/hoodie/yellow - -/datum/gear/suit/hoodie/green - display_name = "hoodie, green" - path = /obj/item/clothing/suit/storage/toggle/hoodie/green - -/datum/gear/suit/hoodie/orange - display_name = "hoodie, orange" - path = /obj/item/clothing/suit/storage/toggle/hoodie/orange - -/datum/gear/suit/hoodie/black - display_name = "hoodie, black" - path = /obj/item/clothing/suit/storage/toggle/hoodie/black - -/datum/gear/suit/hoodie/cti - display_name = "hoodie, CTI" - path = /obj/item/clothing/suit/storage/toggle/hoodie/cti - -/datum/gear/suit/hoodie/mu - display_name = "hoodie, MU" - path = /obj/item/clothing/suit/storage/toggle/hoodie/mu - -/datum/gear/suit/hoodie/nt - display_name = "hoodie, NT" - path = /obj/item/clothing/suit/storage/toggle/hoodie/nt - -/datum/gear/suit/hoodie/smw - display_name = "hoodie, Space Mountain Wind" - path = /obj/item/clothing/suit/storage/toggle/hoodie/smw +/datum/gear/suit/hoodie/New() + ..() + var/list/hoodies = list() + for(var/hoodie_style in typesof(/obj/item/clothing/suit/storage/toggle/hoodie)) + var/obj/item/clothing/suit/storage/toggle/hoodie/hoodie = hoodie_style + hoodies[initial(hoodie.name)] = hoodie + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hoodies)) /datum/gear/suit/labcoat display_name = "labcoat" @@ -145,30 +113,43 @@ cost = 1 /datum/gear/suit/poncho - display_name = "poncho, tan" + display_name = "poncho selection" path = /obj/item/clothing/suit/poncho cost = 1 -/datum/gear/suit/poncho/blue - display_name = "poncho, blue" - path = /obj/item/clothing/suit/poncho/blue +/datum/gear/suit/poncho/New() + ..() + var/list/ponchos = list() + for(var/poncho_style in (typesof(/obj/item/clothing/suit/poncho) - typesof(/obj/item/clothing/suit/poncho/roles))) + var/obj/item/clothing/suit/storage/toggle/hoodie/poncho = poncho_style + ponchos[initial(poncho.name)] = poncho + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ponchos)) -/datum/gear/suit/poncho/green - display_name = "poncho, green" - path = /obj/item/clothing/suit/poncho/green - -/datum/gear/suit/poncho/purple - display_name = "poncho, purple" - path = /obj/item/clothing/suit/poncho/purple - -/datum/gear/suit/poncho/red - display_name = "poncho, red" - path = /obj/item/clothing/suit/poncho/red - -/datum/gear/suit/poncho/security +/datum/gear/suit/poncho/roles/security display_name = "poncho, security" - path = /obj/item/clothing/suit/poncho/security + path = /obj/item/clothing/suit/poncho/roles/security + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") +/datum/gear/suit/poncho/roles/medical + display_name = "poncho, medical" + path = /obj/item/clothing/suit/poncho/roles/medical + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + +/datum/gear/suit/poncho/roles/engineering + display_name = "poncho, engineering" + path = /obj/item/clothing/suit/poncho/roles/engineering + allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer") + +/datum/gear/suit/poncho/roles/science + display_name = "poncho, science" + path = /obj/item/clothing/suit/poncho/roles/science + allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobotanist") + +/datum/gear/suit/poncho/roles/cargo + display_name = "poncho, cargo" + path = /obj/item/clothing/suit/poncho/roles/cargo + allowed_roles = list("Quartermaster","Cargo Technician") + /datum/gear/suit/unathi_robe display_name = "roughspun robe" path = /obj/item/clothing/suit/unathi/robe @@ -213,4 +194,4 @@ /datum/gear/suit/forensics/red/short display_name = "forensics, red" path = /obj/item/clothing/suit/storage/forensics/red - allowed_roles = list("Detective") \ No newline at end of file + allowed_roles = list("Detective") diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 927ed31743f..5ea992d0932 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -33,93 +33,17 @@ display_name = "cut top, red" path = /obj/item/clothing/under/cuttop/red -/datum/gear/uniform/jumpskirt - display_name = "jumpskirt, black" - path = /obj/item/clothing/under/blackjumpskirt - /datum/gear/uniform/jumpsuit - display_name = "jumpsuit, rainbow" - path = /obj/item/clothing/under/rainbow - -/datum/gear/uniform/jumpsuit/black - display_name = "jumpsuit, black" - path = /obj/item/clothing/under/color/black - -/datum/gear/uniform/jumpsuit/blackfemale - display_name = "jumpsuit, female-black" - path = /obj/item/clothing/under/color/blackf - -/datum/gear/uniform/jumpsuit/blue - display_name = "jumpsuit, blue" - path = /obj/item/clothing/under/color/blue - -/datum/gear/uniform/jumpsuit/green - display_name = "jumpsuit, green" - path = /obj/item/clothing/under/color/green - -/datum/gear/uniform/jumpsuit/grey - display_name = "jumpsuit, grey" + display_name = "jumpclothes selection" path = /obj/item/clothing/under/color/grey -/datum/gear/uniform/jumpsuit/pink - display_name = "jumpsuit, pink" - path = /obj/item/clothing/under/color/pink - -/datum/gear/uniform/jumpsuit/white - display_name = "jumpsuit, white" - path = /obj/item/clothing/under/color/white - -/datum/gear/uniform/jumpsuit/yellow - display_name = "jumpsuit, yellow" - path = /obj/item/clothing/under/color/yellow - -/datum/gear/uniform/jumpsuit/lightblue - display_name = "jumpsuit, lightblue" - path = /obj/item/clothing/under/lightblue - -/datum/gear/uniform/jumpsuit/red - display_name = "jumpsuit, red" - path = /obj/item/clothing/under/color/red - -/datum/gear/uniform/jumpsuit/aqua - display_name = "jumpsuit, aqua" - path = /obj/item/clothing/under/aqua - -/datum/gear/uniform/jumpsuit/purple - display_name = "jumpsuit, purple" - path = /obj/item/clothing/under/purple - -/datum/gear/uniform/jumpsuit/lightpurple - display_name = "jumpsuit, lightpurple" - path = /obj/item/clothing/under/lightpurple - -/datum/gear/uniform/jumpsuit/lightgreen - display_name = "jumpsuit, lightgreen" - path = /obj/item/clothing/under/lightgreen - -/datum/gear/uniform/jumpsuit/lightbrown - display_name = "jumpsuit, lightbrown" - path = /obj/item/clothing/under/lightbrown - -/datum/gear/uniform/jumpsuit/brown - display_name = "jumpsuit, brown" - path = /obj/item/clothing/under/brown - -/datum/gear/uniform/jumpsuit/yellowgreen - display_name = "jumpsuit, yellowgreen" - path = /obj/item/clothing/under/yellowgreen - -/datum/gear/uniform/jumpsuit/darkblue - display_name = "jumpsuit, darkblue" - path = /obj/item/clothing/under/darkblue - -/datum/gear/uniform/jumpsuit/lightred - display_name = "jumpsuit, lightred" - path = /obj/item/clothing/under/lightred - -/datum/gear/uniform/jumpsuit/darkred - display_name = "jumpsuit, darkred" - path = /obj/item/clothing/under/darkred +/datum/gear/uniform/jumpsuit/New() + ..() + var/list/jumpclothes = list() + for(var/jump in typesof(/obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/jumps = jump + jumpclothes[initial(jumps.name)] = jumps + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes)) /datum/gear/uniform/skirt display_name = "plaid skirt, blue" @@ -228,100 +152,28 @@ allowed_roles = list("Quartermaster","Cargo Technician") /datum/gear/uniform/pants - display_name = "pants, white" + display_name = "pants selection" path = /obj/item/clothing/under/pants/white -/datum/gear/uniform/pants/red - display_name = "pants, red" - path = /obj/item/clothing/under/pants/red +/datum/gear/uniform/pants/New() + ..() + var/list/pants = list() + for(var/pant in typesof(/obj/item/clothing/under/pants)) + var/obj/item/clothing/under/pants/pant_type = pant + pants[initial(pant_type.name)] = pant_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) -/datum/gear/uniform/pants/black - display_name = "pants, black" - path = /obj/item/clothing/under/pants/black - -/datum/gear/uniform/pants/tan - display_name = "pants, tan" - path = /obj/item/clothing/under/pants/tan - -/datum/gear/uniform/pants/track - display_name = "pants, track" - path = /obj/item/clothing/under/pants/track - -/datum/gear/uniform/pants/khaki - display_name = "pants, khaki" - path = /obj/item/clothing/under/pants/khaki - -/datum/gear/uniform/pants/camo - display_name = "pants, camo" - path = /obj/item/clothing/under/pants/camo - -/datum/gear/uniform/pants/jeans - display_name = "pants, jeans" - path = /obj/item/clothing/under/pants/jeans - -/datum/gear/uniform/pants/jeans/classic - display_name = "pants, classic jeans" - path = /obj/item/clothing/under/pants/classicjeans - -/datum/gear/uniform/pants/jeans/mustang - display_name = "pants, mustang jeans" - path = /obj/item/clothing/under/pants/mustangjeans - -/datum/gear/uniform/pants/jeans/black - display_name = "pants, black jeans" - path = /obj/item/clothing/under/pants/blackjeans - -/datum/gear/uniform/pants/jeans/youngfolks - display_name = "pants, young folks jeans" - path = /obj/item/clothing/under/pants/youngfolksjeans - -/datum/gear/uniform/jeans - display_name = "shorts, jeans" +/datum/gear/uniform/shorts + display_name = "shorts selection" path = /obj/item/clothing/under/shorts/jeans -/datum/gear/uniform/jeans/classic - display_name = "shorts, classic jeans" - path = /obj/item/clothing/under/shorts/jeans/classic - -/datum/gear/uniform/jeans/mustang - display_name = "shorts, mustang jeans" - path = /obj/item/clothing/under/shorts/jeans/mustang - -/datum/gear/uniform/jeans/youngfolks - display_name = "shorts, young folks jeans" - path = /obj/item/clothing/under/shorts/jeans/youngfolks - -/datum/gear/uniform/jeans/black - display_name = "shorts, black jeans" - path = /obj/item/clothing/under/shorts/jeans/black - -/datum/gear/uniform/jeans/female - display_name = "shorts, female, jeans" - path = /obj/item/clothing/under/shorts/jeans/female - -/datum/gear/uniform/jeans/classic/female - display_name = "shorts, female, classic jeans" - path = /obj/item/clothing/under/shorts/jeans/classic/female - -/datum/gear/uniform/jeans/mustang/female - display_name = "shorts, female, mustang jeans" - path = /obj/item/clothing/under/shorts/jeans/mustang/female - -/datum/gear/uniform/jeans/youngfolks/female - display_name = "shorts, female, young folks jeans" - path = /obj/item/clothing/under/shorts/jeans/youngfolks/female - -/datum/gear/uniform/jeans/black/female - display_name = "shorts, female, black jeans" - path = /obj/item/clothing/under/shorts/jeans/black/female - -/datum/gear/uniform/khaki - display_name = "shorts, khaki" - path = /obj/item/clothing/under/shorts/khaki - -/datum/gear/uniform/khaki/female - display_name = "shorts, female, khaki" - path = /obj/item/clothing/under/shorts/khaki/female +/datum/gear/uniform/shorts/New() + ..() + var/list/shorts = list() + for(var/short in typesof(/obj/item/clothing/under/shorts)) + var/obj/item/clothing/under/pants/short_type = short + shorts[initial(short_type.name)] = short_type + gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts)) /datum/gear/uniform/suit //amish display_name = "suit, amish" @@ -412,6 +264,10 @@ display_name = "scrubs, green" path = /obj/item/clothing/under/rank/medical/green +/datum/gear/uniform/scrubs/navyblue + display_name = "scrubs, navy blue" + path = /obj/item/clothing/under/rank/medical/navyblue + /datum/gear/uniform/sundress display_name = "sundress" path = /obj/item/clothing/under/sundress @@ -439,6 +295,16 @@ path = /obj/item/clothing/under/rank/security/corp allowed_roles = list("Security Officer","Head of Security","Warden") +/datum/gear/uniform/corpwarsuit + display_name = "uniform, corporate (Warden)" + path = /obj/item/clothing/under/rank/warden/corp + allowed_roles = list("Head of Security","Warden") + +/datum/gear/uniform/corphossuit + display_name = "uniform, corporate (Head of Security)" + path = /obj/item/clothing/under/rank/head_of_security/corp + allowed_roles = list("Head of Security") + /datum/gear/uniform/uniform_hop display_name = "uniform, HoP's dress" path = /obj/item/clothing/under/dress/dress_hop @@ -451,6 +317,16 @@ allowed_roles = list("Head of Personnel") /datum/gear/uniform/navysecsuit - display_name = "uniform, navyblue (Security)" + display_name = "uniform, navy blue (Security)" path = /obj/item/clothing/under/rank/security/navyblue - allowed_roles = list("Security Officer","Head of Security","Warden") \ No newline at end of file + allowed_roles = list("Security Officer","Head of Security","Warden") + +/datum/gear/uniform/navywarsuit + display_name = "uniform, navy blue (Wardem)" + path = /obj/item/clothing/under/rank/warden/navyblue + allowed_roles = list("Head of Security","Warden") + +/datum/gear/uniform/navyhossuit + display_name = "uniform, navy blue (Head of Security)" + path = /obj/item/clothing/under/rank/head_of_security/navyblue + allowed_roles = list("Head of Security") \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index 8ff1003214c..79e6a1ec7f4 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -62,29 +62,29 @@ display_name = "headtail-wear, female, pink, cloth (Skrell)" path = /obj/item/clothing/ears/skrell/cloth_female/pink -/datum/gear/uniform/jumpsuit/teshari +/datum/gear/uniform/teshari display_name = "smock, grey (Teshari)" path = /obj/item/clothing/under/seromi whitelisted = "Teshari" sort_category = "Xenowear" -/datum/gear/uniform/jumpsuit/teshari/yellow +/datum/gear/uniform/teshari/jumpsuit display_name = "smock, yellow (Teshari)" path = /obj/item/clothing/under/seromi/yellow -/datum/gear/uniform/jumpsuit/teshari/red +/datum/gear/uniform/teshari/jumpsuit/red display_name = "smock, red (Teshari)" path = /obj/item/clothing/under/seromi/red -/datum/gear/uniform/jumpsuit/teshari/white +/datum/gear/uniform/teshari/jumpsuit/white display_name = "smock, white (Teshari)" path = /obj/item/clothing/under/seromi/white -/datum/gear/uniform/jumpsuit/teshari/medical +/datum/gear/uniform/teshari/jumpsuit/medical display_name = "smock, Medical (Teshari)" path = /obj/item/clothing/under/seromi/medical -/datum/gear/uniform/jumpsuit/teshari/rainbow +/datum/gear/uniform/teshari/jumpsuit/rainbow display_name = "smock, rainbow (Teshari)" path = /obj/item/clothing/under/seromi/rainbow diff --git a/code/modules/client/preference_setup/occupation/occupation.dm b/code/modules/client/preference_setup/occupation/occupation.dm index 92c6320c646..62c3fc206d2 100644 --- a/code/modules/client/preference_setup/occupation/occupation.dm +++ b/code/modules/client/preference_setup/occupation/occupation.dm @@ -44,7 +44,7 @@ pref.job_engsec_high = sanitize_integer(pref.job_engsec_high, 0, 65535, initial(pref.job_engsec_high)) pref.job_engsec_med = sanitize_integer(pref.job_engsec_med, 0, 65535, initial(pref.job_engsec_med)) pref.job_engsec_low = sanitize_integer(pref.job_engsec_low, 0, 65535, initial(pref.job_engsec_low)) - if(!pref.player_alt_titles) pref.player_alt_titles = new() + if(!(pref.player_alt_titles)) pref.player_alt_titles = new() if(!job_master) return diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 81c1f4c463c..a890db16f51 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -212,13 +212,13 @@ /datum/category_item/player_setup_item/Topic(var/href,var/list/href_list) if(..()) return 1 - var/mob/user = usr - if(!user.client) + var/mob/pref_mob = preference_mob() + if(!pref_mob || !pref_mob.client) return 1 - . = OnTopic(href, href_list, user) + . = OnTopic(href, href_list, usr) if(. == TOPIC_REFRESH) - user.client.prefs.ShowChoices(user) + pref_mob.client.prefs.ShowChoices(usr) /datum/category_item/player_setup_item/CanUseTopic(var/mob/user) return 1 @@ -227,5 +227,11 @@ return TOPIC_NOACTION /datum/category_item/player_setup_item/proc/preference_mob() - if(pref && pref.client && pref.client.mob) + if(!pref.client) + for(var/client/C) + if(C.ckey == pref.client_ckey) + pref.client = C + break + + if(pref.client) return pref.client.mob diff --git a/code/modules/client/preference_setup/skills/skills.dm b/code/modules/client/preference_setup/skills/skills.dm index 1f60cd3bb7f..8370f35668b 100644 --- a/code/modules/client/preference_setup/skills/skills.dm +++ b/code/modules/client/preference_setup/skills/skills.dm @@ -57,7 +57,7 @@ else if(href_list["preconfigured"]) var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE - if(!selected && !CanUseTopic(user)) return + if(!selected || !CanUseTopic(user)) return pref.ZeroSkills(1) for(var/V in SKILL_PRE[selected]) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 313e507498a..cc339556c30 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -19,7 +19,6 @@ datum/preferences var/ooccolor = "#010000" //Whatever this is set to acts as 'reset' color and is thus unusable as an actual custom color var/be_special = 0 //Special role selection var/UI_style = "Midnight" - var/toggles = TOGGLES_DEFAULT var/UI_style_color = "#ffffff" var/UI_style_alpha = 255 @@ -110,11 +109,12 @@ datum/preferences // OOC Metadata: var/metadata = "" + var/client/client = null + var/client_ckey = null + // Communicator identity data var/communicator_visibility = 0 - var/client/client = null - var/datum/category_collection/player_setup_collection/player_setup /datum/preferences/New(client/C) @@ -127,6 +127,7 @@ datum/preferences if(istype(C)) client = C + client_ckey = C.ckey if(!IsGuestKey(C.key)) load_path(C.ckey) if(load_preferences()) @@ -187,6 +188,12 @@ datum/preferences /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return + + if(!get_mob_by_key(client_ckey)) + user << "No mob exists for the given client!" + close_load_dialog(user) + return + var/dat = "
" if(path) @@ -204,7 +211,7 @@ datum/preferences dat += player_setup.content(user) dat += "" - user << browse(dat, "window=preferences;size=625x736") + user << browse(dat, "window=preferences;size=635x736") /datum/preferences/proc/process_link(mob/user, list/href_list) if(!user) return diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm new file mode 100644 index 00000000000..f074fee298c --- /dev/null +++ b/code/modules/client/preferences_toggle_procs.dm @@ -0,0 +1,225 @@ +//Toggles for preferences, normal clients +/client/verb/toggle_ghost_ears() + set name = "Show/Hide Ghost Ears" + set category = "Preferences" + set desc = "Toggles between seeing all mob speech and nearby mob speech." + + var/pref_path = /datum/client_preference/ghost_ears + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear all mob speech as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TGEars") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ghost_vision() + set name = "Show/Hide Ghost Vision" + set category = "Preferences" + set desc = "Toggles between seeing all mob emotes and nearby mob emotes." + + var/pref_path = /datum/client_preference/ghost_sight + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] see all emotes as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TGVision") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ghost_radio() + set name = "Show/Hide Radio Chatter" + set category = "Preferences" + set desc = "Toggles between seeing all radio chat and nearby radio chatter." + + var/pref_path = /datum/client_preference/ghost_radio + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear all radios as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TGRadio") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_deadchat() + set name = "Show/Hide Deadchat" + set category = "Preferences" + set desc = "Toggles the dead chat channel." + + var/pref_path = /datum/client_preference/show_dsay + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear dead chat as a ghost." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TDeadChat") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ooc() + set name = "Show/Hide OOC" + set category = "Preferences" + set desc = "Toggles global out of character chat." + + var/pref_path = /datum/client_preference/show_ooc + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(/datum/client_preference/show_ooc)) ? "now" : "no longer"] hear global out of character chat." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_looc() + set name = "Show/Hide LOOC" + set category = "Preferences" + set desc = "Toggles local out of character chat." + + var/pref_path = /datum/client_preference/show_looc + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear local out of character chat." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_typing() + set name = "Show/Hide Typing Indicator" + set category = "Preferences" + set desc = "Toggles the speech bubble typing indicator." + + var/pref_path = /datum/client_preference/show_typing_indicator + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] see the speech indicator." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ahelp_sound() + set name = "Toggle Admin Help Sound" + set category = "Preferences" + set desc = "Toggles the ability to hear a noise broadcasted when you get an admin message." + + var/pref_path = /datum/client_preference/holder/play_adminhelp_ping + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive noise from admin messages." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TAHelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_lobby_music() + set name = "Toggle Lobby Music" + set category = "Preferences" + set desc = "Toggles the music in the lobby." + + var/pref_path = /datum/client_preference/play_lobby_music + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear music in the lobby." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TLobMusic") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_admin_midis() + set name = "Toggle Admin MIDIs" + set category = "Preferences" + set desc = "Toggles the music in the lobby." + + var/pref_path = /datum/client_preference/play_admin_midis + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear MIDIs from admins." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TAMidis") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_ambience() + set name = "Toggle Ambience" + set category = "Preferences" + set desc = "Toggles the playing of ambience." + + var/pref_path = /datum/client_preference/play_ambiance + + toggle_preference(pref_path) + + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : " no longer"] hear ambient noise." + + prefs.save_preferences() + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_be_special(role in be_special_flags) + set name = "Toggle SpecialRole Candidacy" + set category = "Preferences" + set desc = "Toggles which special roles you would like to be a candidate for, during events." + + var/role_flag = be_special_flags[role] + if(!role_flag) return + + prefs.be_special ^= role_flag + prefs.save_preferences() + + src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)." + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_safe_firing() + set name = "Toggle Gun Firing Intent Requirement" + set category = "Preferences" + set desc = "Toggles between safe and dangerous firing. Safe requires a non-help intent to fire, dangerous can be fired on help intent." + + var/pref_path = /datum/client_preference/safefiring + toggle_preference(pref_path) + prefs.save_preferences() + + src << "You will now use [(is_preference_enabled(/datum/client_preference/safefiring)) ? "safe" : "dangerous"] firearms firing." + + feedback_add_details("admin_verb","TFiringMode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +//Toggles for Staff +//Developers + +/client/proc/toggle_debug_logs() + set name = "Toggle Debug Logs" + set category = "Preferences" + set desc = "Toggles debug logs." + + var/pref_path = /datum/client_preference/debug/show_debug_logs + + if(check_rights(R_ADMIN|R_DEBUG)) + toggle_preference(pref_path) + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive debug logs." + prefs.save_preferences() + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +//Mods +/client/proc/toggle_attack_logs() + set name = "Toggle Attack Logs" + set category = "Preferences" + set desc = "Toggles attack logs." + + var/pref_path = /datum/client_preference/mod/show_attack_logs + + if(check_rights(R_ADMIN|R_MOD)) + toggle_preference(pref_path) + src << "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] receive attack logs." + prefs.save_preferences() + + feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm deleted file mode 100644 index 09ee55b1736..00000000000 --- a/code/modules/client/preferences_toggles.dm +++ /dev/null @@ -1,159 +0,0 @@ -//toggles -/client/verb/toggle_ghost_ears() - set name = "Show/Hide GhostEars" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob speech, and only speech of nearby mobs" - prefs.toggles ^= CHAT_GHOSTEARS - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"]." - prefs.save_preferences() - feedback_add_details("admin_verb","TGE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_sight() - set name = "Show/Hide GhostSight" - set category = "Preferences" - set desc = ".Toggle Between seeing all mob emotes, and only emotes of nearby mobs" - prefs.toggles ^= CHAT_GHOSTSIGHT - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"]." - prefs.save_preferences() - feedback_add_details("admin_verb","TGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggle_ghost_radio() - set name = "Enable/Disable GhostRadio" - set category = "Preferences" - set desc = ".Toggle between hearing all radio chatter, or only from nearby speakers" - prefs.toggles ^= CHAT_GHOSTRADIO - src << "As a ghost, you will now [(prefs.toggles & CHAT_GHOSTRADIO) ? "hear all radio chat in the world" : "only hear from nearby speakers"]." - prefs.save_preferences() - feedback_add_details("admin_verb","TGR") - -/client/proc/toggle_hear_radio() - set name = "Show/Hide RadioChatter" - set category = "Preferences" - set desc = "Toggle seeing radiochatter from radios and speakers" - if(!holder) return - prefs.toggles ^= CHAT_RADIO - prefs.save_preferences() - usr << "You will [(prefs.toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from radios or speakers" - feedback_add_details("admin_verb","THR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleadminhelpsound() - set name = "Hear/Silence Adminhelps" - set category = "Preferences" - set desc = "Toggle hearing a notification when admin PMs are recieved" - if(!holder) return - prefs.toggles ^= SOUND_ADMINHELP - prefs.save_preferences() - usr << "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive." - feedback_add_details("admin_verb","AHS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/deadchat() // Deadchat toggle is usable by anyone. - set name = "Show/Hide Deadchat" - set category = "Preferences" - set desc ="Toggles seeing deadchat" - prefs.toggles ^= CHAT_DEAD - prefs.save_preferences() - - if(src.holder) - src << "You will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat." - else - src << "As a ghost, you will [(prefs.toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat." - - feedback_add_details("admin_verb","TDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/proc/toggleprayers() - set name = "Show/Hide Prayers" - set category = "Preferences" - set desc = "Toggles seeing prayers" - prefs.toggles ^= CHAT_PRAYER - prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat." - feedback_add_details("admin_verb","TP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/toggletitlemusic() - set name = "Hear/Silence LobbyMusic" - set category = "Preferences" - set desc = "Toggles hearing the GameLobby music" - prefs.toggles ^= SOUND_LOBBY - prefs.save_preferences() - if(prefs.toggles & SOUND_LOBBY) - src << "You will now hear music in the game lobby." - if(istype(mob, /mob/new_player)) - playtitlemusic() - else - src << "You will no longer hear music in the game lobby." - if(istype(mob, /mob/new_player)) - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jamsz - feedback_add_details("admin_verb","TLobby") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/togglemidis() - set name = "Hear/Silence Midis" - set category = "Preferences" - set desc = "Toggles hearing sounds uploaded by admins" - prefs.toggles ^= SOUND_MIDI - prefs.save_preferences() - if(prefs.toggles & SOUND_MIDI) - src << "You will now hear any sounds uploaded by admins." - var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = 777) - break_sound.priority = 250 - src << break_sound //breaks the client's sound output on channel 777 - else - src << "You will no longer hear sounds uploaded by admins; any currently playing midis have been disabled." - feedback_add_details("admin_verb","TMidi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/client/verb/listen_ooc() - set name = "Show/Hide OOC" - set category = "Preferences" - set desc = "Toggles seeing OutOfCharacter chat" - prefs.toggles ^= CHAT_OOC - prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel." - feedback_add_details("admin_verb","TOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/listen_looc() - set name = "Show/Hide LOOC" - set category = "Preferences" - set desc = "Toggles seeing Local OutOfCharacter chat" - prefs.toggles ^= CHAT_LOOC - prefs.save_preferences() - - src << "You will [(prefs.toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel." - feedback_add_details("admin_verb","TLOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/toggle_chattags() - set name = "Show/Hide Chat Tags" - set category = "Preferences" - set desc = "Toggles seeing chat tags/icons" - prefs.toggles ^= CHAT_NOICONS - prefs.save_preferences() - - src << "You will [!(prefs.toggles & CHAT_NOICONS) ? "now" : "no longer"] see chat tag icons." - feedback_add_details("admin_verb","TCTAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - - -/client/verb/Toggle_Soundscape() //All new ambience should be added here so it works with this verb until someone better at things comes up with a fix that isn't awful - set name = "Hear/Silence Ambience" - set category = "Preferences" - set desc = "Toggles hearing ambient sound effects" - prefs.toggles ^= SOUND_AMBIENCE - prefs.save_preferences() - if(prefs.toggles & SOUND_AMBIENCE) - src << "You will now hear ambient sounds." - else - src << "You will no longer hear ambient sounds." - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 1) - src << sound(null, repeat = 0, wait = 0, volume = 0, channel = 2) - feedback_add_details("admin_verb","TAmbi") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -//be special -/client/verb/toggle_be_special(role in be_special_flags) - set name = "Toggle SpecialRole Candidacy" - set category = "Preferences" - set desc = "Toggles which special roles you would like to be a candidate for, during events." - var/role_flag = be_special_flags[role] - if(!role_flag) return - prefs.be_special ^= role_flag - prefs.save_preferences() - src << "You will [(prefs.be_special & role_flag) ? "now" : "no longer"] be considered for [role] events (where possible)." - feedback_add_details("admin_verb","TBeSpecial") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/client/ui_style.dm b/code/modules/client/ui_style.dm index 2802d25e60b..7a021879a97 100644 --- a/code/modules/client/ui_style.dm +++ b/code/modules/client/ui_style.dm @@ -5,7 +5,8 @@ "Orange" = 'icons/mob/screen/orange.dmi', "old" = 'icons/mob/screen/old.dmi', "White" = 'icons/mob/screen/white.dmi', - "old-noborder" = 'icons/mob/screen/old-noborder.dmi' + "old-noborder" = 'icons/mob/screen/old-noborder.dmi', + "minimalist" = 'icons/mob/screen/minimalist.dmi' ) /proc/ui_style2icon(ui_style) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 8d1614301f5..1fa8af24e48 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -25,21 +25,14 @@ flags_inv = HIDEEARS siemens_coefficient = 0.7 action_button_name = "Toggle Visor" - var/flipped = 0 //Piggybacked from cap flipping. -/obj/item/clothing/head/helmet/riot/dropped() - src.icon_state = initial(icon_state) - src.flipped=0 - ..() - -/obj/item/clothing/head/helmet/riot/attack_self(mob/user) - src.flipped = !src.flipped - if(src.flipped) - icon_state = "[icon_state]up" - user << "You flip the visor up." +/obj/item/clothing/head/helmet/riot/attack_self(mob/user as mob) + if(src.icon_state == initial(icon_state)) + src.icon_state = "[icon_state]up" + user << "You raise the visor on the riot helmet." else src.icon_state = initial(icon_state) - user << "You flip the visor down." + user << "You lower the visor on the riot helmet." update_clothing_icon() //so our mob-overlays update /obj/item/clothing/head/helmet/laserproof diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index be9abbf920d..4075a6d4b31 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -67,7 +67,7 @@ icon_state = "beret_navy_officer" /obj/item/clothing/head/beret/sec/navy/hos name = "officer beret" - desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety." + desc = "A navy blue beret with a head of security's rank emblem. For officers that are more inclined towards style than safety." icon_state = "beret_navy_hos" /obj/item/clothing/head/beret/sec/navy/warden name = "warden beret" @@ -79,7 +79,7 @@ icon_state = "beret_corporate_officer" /obj/item/clothing/head/beret/sec/corporate/hos name = "officer beret" - desc = "A corporate black beret with a commander's rank emblem. For officers that are more inclined towards style than safety." + desc = "A corporate black beret with a head of security's rank emblem. For officers that are more inclined towards style than safety." icon_state = "beret_corporate_hos" /obj/item/clothing/head/beret/sec/corporate/warden name = "warden beret" @@ -95,11 +95,11 @@ icon_state = "beret_purple" /obj/item/clothing/head/beret/centcom/officer name = "officers beret" - desc = "A black beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces." + desc = "A dark blue beret adorned with a silver patch. Worn by NanoTrasen Officials." icon_state = "beret_centcom_officer" /obj/item/clothing/head/beret/centcom/captain name = "captains beret" - desc = "A white beret adorned with the shield - a silver kite shield with an engraved sword - of the corporate security forces." + desc = "A white beret adorned with a blue patch. Worn by NanoTrasen command staff." icon_state = "beret_centcom_captain" //Medical @@ -123,4 +123,8 @@ /obj/item/clothing/head/surgery/black desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is black." - icon_state = "surgcap_black" \ No newline at end of file + icon_state = "surgcap_black" + +/obj/item/clothing/head/surgery/navyblue + desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is navy blue." + icon_state = "surgcap_navyblue" \ No newline at end of file diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 17c7cd0666a..e9143b4bca2 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -273,329 +273,22 @@ icon_state = "orange_bandana" body_parts_covered = 0 -//Hijabs - /obj/item/clothing/head/hijab - name = "black hijab" - desc = "A black veil that is wrapped to cover the head and chest" - icon_state = "hijab_black" + name = "hijab" + desc = "A veil that is wrapped to cover the head and chest" + icon_state = "hijab" body_parts_covered = 0 flags_inv = BLOCKHAIR -/obj/item/clothing/head/hijab/white - name = "white hijab" - desc = "A white veil that is wrapped to cover the head and chest" - icon_state = "hijab_white" - -/obj/item/clothing/head/hijab/aqua - name = "aqua hijab" - desc = "An aqua veil that is wrapped to cover the head and chest" - icon_state = "hijab_aqua" - -/obj/item/clothing/head/hijab/blue - name = "blue hijab" - desc = "A blue veil that is wrapped to cover the head and chest" - icon_state = "hijab_blue" - -/obj/item/clothing/head/hijab/brown - name = "brown hijab" - desc = "A brown veil that is wrapped to cover the head and chest" - icon_state = "hijab_brown" - -/obj/item/clothing/head/hijab/darkblue - name = "bark blue hijab" - desc = "A dark blue veil that is wrapped to cover the head and chest" - icon_state = "hijab_darkblue" - -/obj/item/clothing/head/hijab/darkred - name = "dark red hijab" - desc = "A dark red veil that is wrapped to cover the head and chest" - icon_state = "hijab_darkred" - -/obj/item/clothing/head/hijab/green - name = "green hijab" - desc = "A green veil that is wrapped to cover the head and chest" - icon_state = "hijab_green" - -/obj/item/clothing/head/hijab/grey - name = "grey hijab" - desc = "A grey veil that is wrapped to cover the head and chest" - icon_state = "hijab_grey" - -/obj/item/clothing/head/hijab/lightblue - name = "light blue hijab" - desc = "A light blue veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightblue" - -/obj/item/clothing/head/hijab/lightbrown - name = "light brown hijab" - desc = "A light brown veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightbrown" - -/obj/item/clothing/head/hijab/lightgreen - name = "light green hijab" - desc = "A light green veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightgreen" - -/obj/item/clothing/head/hijab/lightpurple - name = "light purple hijab" - desc = "A light purple veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightpurple" - -/obj/item/clothing/head/hijab/lightred - name = "light red hijab" - desc = "A light red veil that is wrapped to cover the head and chest" - icon_state = "hijab_lightred" - -/obj/item/clothing/head/hijab/maroon - name = "maroon hijab" - desc = "A maroon veil that is wrapped to cover the head and chest" - icon_state = "hijab_maroon" - -/obj/item/clothing/head/hijab/orange - name = "orange hijab" - desc = "An orange veil that is wrapped to cover the head and chest" - icon_state = "hijab_orange" - -/obj/item/clothing/head/hijab/pink - name = "pink hijab" - desc = "A pink veil that is wrapped to cover the head and chest" - icon_state = "hijab_pink" - -/obj/item/clothing/head/hijab/purple - name = "purple hijab" - desc = "A purple veil that is wrapped to cover the head and chest" - icon_state = "hijab_purple" - -/obj/item/clothing/head/hijab/red - name = "red hijab" - desc = "A red veil that is wrapped to cover the head and chest" - icon_state = "hijab_red" - -/obj/item/clothing/head/hijab/yellowgreen - name = "yellow green hijab" - desc = "A yellow green veil that is wrapped to cover the head and chest" - icon_state = "hijab_yellowgreen" - -/obj/item/clothing/head/hijab/yellow - name = "yellow hijab" - desc = "A yellow veil that is wrapped to cover the head and chest" - icon_state = "hijab_yellow" - -//Kippot - /obj/item/clothing/head/kippa - name = "black kippa" - desc = "A small, brimless cap. It is black." - icon_state = "kippa_black" + name = "kippa" + desc = "A small, brimless cap." + icon_state = "kippa" body_parts_covered = 0 -/obj/item/clothing/head/kippa/aqua - name = "aqua kippa" - desc = "A small, brimless cap. It is aqua." - icon_state = "kippa_aqua" - -/obj/item/clothing/head/kippa/blue - name = "blue kippa" - desc = "A small, brimless cap. It is blue." - icon_state = "kippa_blue" - -/obj/item/clothing/head/kippa/brown - name = "brown kippa" - desc = "A small, brimless cap. It is blue." - icon_state = "kippa_brown" - -/obj/item/clothing/head/kippa/darkblue - name = "dark blue kippa" - desc = "A small, brimless cap. It is dark blue." - icon_state = "kippa_darkblue" - -/obj/item/clothing/head/kippa/darkred - name = "dark red kippa" - desc = "A small, brimless cap. It is dark red." - icon_state = "kippa_darkred" - -/obj/item/clothing/head/kippa/green - name = "green kippa" - desc = "A small, brimless cap. It is green." - icon_state = "kippa_green" - -/obj/item/clothing/head/kippa/grey - name = "grey kippa" - desc = "A small, brimless cap. It is grey." - icon_state = "kippa_grey" - -/obj/item/clothing/head/kippa/lightblue - name = "light blue kippa" - desc = "A small, brimless cap. It is light blue." - icon_state = "kippa_lightblue" - -/obj/item/clothing/head/kippa/lightbrown - name = "light brown kippa" - desc = "A small, brimless cap. It is light brown." - icon_state = "kippa_lightbrown" - -/obj/item/clothing/head/kippa/lightgreen - name = "light green kippa" - desc = "A small, brimless cap. It is light green." - icon_state = "kippa_lightgreen" - -/obj/item/clothing/head/kippa/lightpurple - name = "light purple kippa" - desc = "A small, brimless cap. It is light purple." - icon_state = "kippa_lightpurple" - -/obj/item/clothing/head/kippa/lightred - name = "light red kippa" - desc = "A small, brimless cap. It is light red." - icon_state = "kippa_lightred" - -/obj/item/clothing/head/kippa/maroon - name = "maroon kippa" - desc = "A small, brimless cap. It is maroon." - icon_state = "kippa_maroon" - -/obj/item/clothing/head/kippa/orange - name = "orange kippa" - desc = "A small, brimless cap. It is orange." - icon_state = "kippa_orange" - -/obj/item/clothing/head/kippa/pink - name = "pink kippa" - desc = "A small, brimless cap. It is pink." - icon_state = "kippa_pink" - -/obj/item/clothing/head/kippa/purple - name = "purple kippa" - desc = "A small, brimless cap. It is purple." - icon_state = "kippa_purple" - -/obj/item/clothing/head/kippa/red - name = "red kippa" - desc = "A small, brimless cap. It is red." - icon_state = "kippa_red" - -/obj/item/clothing/head/kippa/white - name = "white kippa" - desc = "A small, brimless cap. It is white." - icon_state = "kippa_white" - -/obj/item/clothing/head/kippa/yellowgreen - name = "yellow green kippa" - desc = "A small, brimless cap. It is yellow green." - icon_state = "kippa_yellowgreen" - -/obj/item/clothing/head/kippa/yellow - name = "yellow kippa" - desc = "A small, brimless cap. It is yellow." - icon_state = "kippa_yellow" - -//Turbans - /obj/item/clothing/head/turban - name = "black turban" - desc = "A black cloth used to wind around the head" - icon_state = "turban_black" + name = "turban" + desc = "A cloth used to wind around the head" + icon_state = "turban" body_parts_covered = 0 flags_inv = BLOCKHAIR - -/obj/item/clothing/head/turban/aqua - name = "aqua turban" - desc = "An aqua cloth used to wind around the head." - icon_state = "turban_aqua" - -/obj/item/clothing/head/turban/blue - name = "blue turban" - desc = "A blue cloth used to wind around the head." - icon_state = "turban_blue" - -/obj/item/clothing/head/turban/brown - name = "brown turban" - desc = "A brown cloth used to wind around the head." - icon_state = "turban_brown" - -/obj/item/clothing/head/turban/darkblue - name = "dark blue turban" - desc = "A dark blue cloth used to wind around the head." - icon_state = "turban_darkblue" - -/obj/item/clothing/head/turban/darkred - name = "dark red turban" - desc = "A dark red cloth used to wind around the head." - icon_state = "turban_darkred" - -/obj/item/clothing/head/turban/green - name = "green turban" - desc = "A green cloth used to wind around the head." - icon_state = "turban_green" - -/obj/item/clothing/head/turban/grey - name = "grey turban" - desc = "A grey cloth used to wind around the head." - icon_state = "turban_grey" - -/obj/item/clothing/head/turban/lightblue - name = "light blue turban" - desc = "A light blue cloth used to wind around the head." - icon_state = "turban_lightblue" - -/obj/item/clothing/head/turban/lightbrown - name = "light brown turban" - desc = "A light brown cloth used to wind around the head." - icon_state = "turban_lightbrown" - -/obj/item/clothing/head/turban/lightgreen - name = "light green turban" - desc = "A light green cloth used to wind around the head." - icon_state = "turban_lightgreen" - -/obj/item/clothing/head/turban/lightpurple - name = "light purple turban" - desc = "A light purple cloth used to wind around the head." - icon_state = "turban_lightpurple" - -/obj/item/clothing/head/turban/lightred - name = "light red turban" - desc = "A light red cloth used to wind around the head." - icon_state = "turban_lightred" - -/obj/item/clothing/head/turban/maroon - name = "maroon turban" - desc = "A maroon cloth used to wind around the head." - icon_state = "turban_maroon" - -/obj/item/clothing/head/turban/orange - name = "orange turban" - desc = "An orange cloth used to wind around the head." - icon_state = "turban_orange" - -/obj/item/clothing/head/turban/pink - name = "pink turban" - desc = "A pink cloth used to wind around the head." - icon_state = "turban_pink" - -/obj/item/clothing/head/turban/purple - name = "purple turban" - desc = "A purple cloth used to wind around the head." - icon_state = "turban_purple" - -/obj/item/clothing/head/turban/red - name = "red turban" - desc = "A red cloth used to wind around the head." - icon_state = "turban_red" - -/obj/item/clothing/head/turban/white - name = "white turban" - desc = "A white cloth used to wind around the head." - icon_state = "turban_white" - -/obj/item/clothing/head/turban/yellowgreen - name = "yellow green turban" - desc = "A yellow green cloth used to wind around the head." - icon_state = "turban_yellowgreen" - -/obj/item/clothing/head/turban/yellow - name = "yellow turban" - desc = "A yellow cloth used to wind around the head." - icon_state = "turban_yellow" - diff --git a/code/modules/clothing/shoes/leg_guards.dm b/code/modules/clothing/shoes/leg_guards.dm index 2467b2eec62..5dd8b0d5fcd 100644 --- a/code/modules/clothing/shoes/leg_guards.dm +++ b/code/modules/clothing/shoes/leg_guards.dm @@ -3,6 +3,7 @@ desc = "These will protect your legs and feet." body_parts_covered = LEGS|FEET slowdown = 0 //Shoes have a slowdown of -1, so this needs to be 0 in order for it to effectively be 1 slowdown. + species_restricted = null //Unathi and Taj can wear leg armor now w_class = 3 /obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) @@ -25,14 +26,14 @@ desc = "These will protect your legs and feet from ballistic weapons." icon_state = "leg_guards_bullet" siemens_coefficient = 0.7 - armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 10, bullet = 80, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/shoes/leg_guard/riot name = "riot leg guards" desc = "These will protect your legs and feet from close combat weapons." icon_state = "leg_guards_riot" siemens_coefficient = 0.5 - armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/shoes/leg_guard/combat name = "combat leg guards" diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm index 38cfc4a84b8..e99dc6d8ce6 100644 --- a/code/modules/clothing/spacesuits/captain.dm +++ b/code/modules/clothing/spacesuits/captain.dm @@ -15,7 +15,7 @@ desc = "A bulky, heavy-duty piece of exclusive corporate armor. YOU are in charge!" icon_state = "caparmor" item_state = "capspacesuit" - w_class = 4 + w_class = 5 gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 item_flags = STOPPRESSUREDAMAGE diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index dc6e4e06fa1..218c9b81e63 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -14,7 +14,7 @@ slot_flags = SLOT_BACK req_one_access = list() req_access = list() - w_class = 4 + w_class = 5 // These values are passed on to all component pieces. armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20) diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 7014e9cf418..ecac7222048 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -51,7 +51,7 @@ desc = "A suit that protects against low pressure environments. \"NORTHERN STAR\" is written in large block letters on the back." icon_state = "space" item_state = "s_suit" - w_class = 4//bulky item + w_class = 5 // So you can't fit this in your bag and be prepared at all times. gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 41b0209e4d0..bfcde568e9c 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -1,6 +1,6 @@ /obj/item/clothing/suit/armor - allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL @@ -143,6 +143,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) slowdown = 1 + w_class = 5 armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS @@ -263,7 +264,7 @@ icon_state = "kvest" item_state = "kvest" armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) - allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight) body_parts_covered = UPPER_TORSO|LOWER_TORSO item_flags = THICKMATERIAL @@ -291,7 +292,7 @@ icon_nobadge = "wardenvest_nobadge" /obj/item/clothing/suit/storage/vest/hos - name = "commander armor vest" + name = "head of security armor vest" desc = "A simple kevlar plate carrier. This one has a gold badge clipped to the chest." icon_state = "hosvest_nobadge" item_state = "hosvest_nobadge" @@ -339,7 +340,7 @@ icon_nobadge = "wardenwebvest_nobadge" /obj/item/clothing/suit/storage/vest/heavy/hos - name = "commander heavy armor vest" + name = "head of security heavy armor vest" desc = "A heavy kevlar plate carrier with webbing attached. This one has a gold badge clipped to the chest." icon_state = "hoswebvest_nobadge" item_state = "hoswebvest_nobadge" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 3931b3ec675..0c5f09e5afb 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -10,7 +10,7 @@ item_state = "apron" blood_overlay_type = "armor" body_parts_covered = 0 - allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/fertilizer,/obj/item/weapon/material/minihoe) + allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/material/minihoe) //Captain /obj/item/clothing/suit/captunic @@ -96,7 +96,7 @@ item_state = "det_suit" blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/det_trench/grey @@ -109,7 +109,7 @@ desc = "A forensics technician jacket." item_state = "det_suit" body_parts_covered = UPPER_TORSO|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) /obj/item/clothing/suit/storage/forensics/red diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 9456a2cbdef..cb7db449328 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -343,12 +343,36 @@ icon_state = "blueponcho" item_state = "blueponcho" -/obj/item/clothing/suit/poncho/security +/obj/item/clothing/suit/poncho/roles/security name = "security poncho" desc = "A simple, comfortable cloak without sleeves. This one is black and red, standard NanoTrasen Security colors." icon_state = "secponcho" item_state = "secponcho" +/obj/item/clothing/suit/poncho/roles/medical + name = "medical poncho" + desc = "A simple, comfortable cloak without sleeves. This one is white with green and blue tint, standard Medical colors." + icon_state = "medponcho" + item_state = "medponcho" + +/obj/item/clothing/suit/poncho/roles/engineering + name = "engineering poncho" + desc = "A simple, comfortable cloak without sleeves. This one is yellow and orange, standard Engineering colors." + icon_state = "engiponcho" + item_state = "engiponcho" + +/obj/item/clothing/suit/poncho/roles/science + name = "science poncho" + desc = "A simple, comfortable cloak without sleeves. This one is white with purple trim, standard NanoTrasen Science colors." + icon_state = "sciponcho" + item_state = "sciponcho" + +/obj/item/clothing/suit/poncho/roles/cargo + name = "cargo poncho" + desc = "A simple, comfortable cloak without sleeves. This one is tan and grey, the colors of Cargo." + icon_state = "cargoponcho" + item_state = "cargoponcho" + /obj/item/clothing/suit/jacket/puffer name = "puffer jacket" desc = "A thick jacket with a rubbery, water-resistant shell." @@ -486,7 +510,7 @@ /obj/item/clothing/suit/storage/toggle/hoodie/cti name = "CTI hoodie" - desc = "A warm, black sweatshirt. It bears the letters ‘CTI’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." + desc = "A warm, black sweatshirt. It bears the letters ‘CTIÂ’ on the back, a lettering to the prestigious university in Tau Ceti, Ceti Technical Institute. There is a blue supernova embroidered on the front, the emblem of CTI." icon_state = "cti_hoodie" item_state = "cti_hoodie" icon_open = "cti_hoodie_open" @@ -494,7 +518,7 @@ /obj/item/clothing/suit/storage/toggle/hoodie/mu name = "mars university hoodie" - desc = "A warm, gray sweatshirt. It bears the letters ‘MU’ on the front, a lettering to the well-known public college, Mars University." + desc = "A warm, gray sweatshirt. It bears the letters ‘MUÂ’ on the front, a lettering to the well-known public college, Mars University." icon_state = "mu_hoodie" item_state = "mu_hoodie" icon_open = "mu_hoodie_open" @@ -631,4 +655,4 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/miner name = "mining winter coat" icon_state = "coatminer" - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) \ No newline at end of file + armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index e0cbb20ced8..25348451738 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -4,7 +4,6 @@ /obj/item/clothing/suit/storage/New() ..() pockets = new/obj/item/weapon/storage/internal(src) - pockets.storage_slots = 2 //two slots pockets.max_w_class = 2 //fit only pocket sized items pockets.max_storage_space = 4 @@ -77,7 +76,6 @@ /obj/item/clothing/suit/storage/vest/heavy/New() ..() pockets = new/obj/item/weapon/storage/internal(src) - pockets.storage_slots = 4 pockets.max_w_class = 2 pockets.max_storage_space = 8 diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 2342010ce6a..0e9a004a2ef 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -12,7 +12,8 @@ /obj/item/clothing/accessory/storage/New() ..() hold = new/obj/item/weapon/storage/internal(src) - hold.storage_slots = slots + hold.max_storage_space = slots * 2 + hold.max_w_class = 2 /obj/item/clothing/accessory/storage/attack_hand(mob/user as mob) if (has_suit) //if we are part of a suit @@ -61,6 +62,12 @@ icon_state = "vest_brown" slots = 5 +/obj/item/clothing/accessory/storage/white_vest + name = "white webbing vest" + desc = "Durable white synthcotton vest with lots of pockets to carry essentials." + icon_state = "vest_white" + slots = 5 + /obj/item/clothing/accessory/storage/knifeharness name = "decorated harness" desc = "A heavily decorated harness of sinew and leather with two knife-loops." diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index ca2b9f0d991..c852147ba33 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -12,6 +12,13 @@ item_state = "bl_suit" worn_state = "blackf" +/obj/item/clothing/under/color/blackjumpskirt + name = "black jumpskirt" + desc = "A black jumpskirt, Sol size 0." + icon_state = "blackjumpskirt" + item_state = "bl_suit" + worn_state = "blackjumpskirt" + /obj/item/clothing/under/color/blue name = "blue jumpsuit" icon_state = "blue" @@ -78,89 +85,89 @@ item_state = "psyche" worn_state = "psyche" -/obj/item/clothing/under/lightblue +/obj/item/clothing/under/color/lightblue name = "lightblue jumpsuit" - desc = "lightblue" + desc = "A light blue jumpsuit." icon_state = "lightblue" item_state = "b_suit" worn_state = "lightblue" rolled_sleeves = 0 -/obj/item/clothing/under/aqua +/obj/item/clothing/under/color/aqua name = "aqua jumpsuit" - desc = "aqua" + desc = "An aqua jumpsuit." icon_state = "aqua" item_state = "b_suit" worn_state = "aqua" rolled_sleeves = 0 -/obj/item/clothing/under/purple +/obj/item/clothing/under/color name = "purple jumpsuit" - desc = "purple" + desc = "The latest in space fashion." icon_state = "purple" item_state = "p_suit" worn_state = "purple" rolled_sleeves = 0 -/obj/item/clothing/under/lightpurple +/obj/item/clothing/under/color/lightpurple name = "lightpurple jumpsuit" - desc = "lightpurple" + desc = "A light purple jumpsuit." icon_state = "lightpurple" item_state = "p_suit" worn_state = "lightpurple" rolled_sleeves = 0 -/obj/item/clothing/under/lightgreen +/obj/item/clothing/under/color/lightgreen name = "lightgreen jumpsuit" - desc = "lightgreen" + desc = "A light green jumpsuit." icon_state = "lightgreen" item_state = "g_suit" worn_state = "lightgreen" rolled_sleeves = 0 -/obj/item/clothing/under/lightbrown +/obj/item/clothing/under/color/lightbrown name = "lightbrown jumpsuit" - desc = "lightbrown" + desc = "A light brown jumpsuit." icon_state = "lightbrown" item_state = "lb_suit" worn_state = "lightbrown" rolled_sleeves = 0 -/obj/item/clothing/under/brown +/obj/item/clothing/under/color/brown name = "brown jumpsuit" - desc = "brown" + desc = "A brown jumpsuit." icon_state = "brown" item_state = "lb_suit" worn_state = "brown" rolled_sleeves = 0 -/obj/item/clothing/under/yellowgreen +/obj/item/clothing/under/color/yellowgreen name = "yellowgreen jumpsuit" - desc = "yellowgreen" + desc = "A... yellow green jumpsuit?" icon_state = "yellowgreen" item_state = "y_suit" worn_state = "yellowgreen" rolled_sleeves = 0 -/obj/item/clothing/under/darkblue +/obj/item/clothing/under/color/darkblue name = "darkblue jumpsuit" - desc = "darkblue" + desc = "A dark blue jumpsuit." icon_state = "darkblue" item_state = "b_suit" worn_state = "darkblue" rolled_sleeves = 0 -/obj/item/clothing/under/lightred +/obj/item/clothing/under/color/lightred name = "lightred jumpsuit" - desc = "lightred" + desc = "A light red jumpsuit." icon_state = "lightred" item_state = "r_suit" worn_state = "lightred" rolled_sleeves = 0 -/obj/item/clothing/under/darkred +/obj/item/clothing/under/color/darkred name = "darkred jumpsuit" - desc = "darkred" + desc = "A dark red jumpsuit." icon_state = "darkred" item_state = "r_suit" worn_state = "darkred" diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 057733298e7..4b212331be3 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -204,6 +204,14 @@ worn_state = "scrubsblack" rolled_sleeves = -1 +/obj/item/clothing/under/rank/medical/navyblue + name = "medical scrubs" + desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in navy blue." + icon_state = "scrubsnavyblue" + item_state = "b_suit" + worn_state = "scrubsnavyblue" + rolled_sleeves = -1 + /obj/item/clothing/under/rank/psych desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." name = "psychiatrist's jumpsuit" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index c439308a0da..eb8310d2191 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -223,8 +223,8 @@ /obj/item/clothing/suit/armor/hos/jensen name = "armored trenchcoat" desc = "A trenchcoat augmented with a special alloy for some protection and style." - icon_state = "jensencoat" - item_state = "jensencoat" + icon_state = "hostrench" + item_state = "hostrench" flags_inv = 0 siemens_coefficient = 0.6 body_parts_covered = UPPER_TORSO|ARMS diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 5b263604cb4..91ade60b71a 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -140,9 +140,9 @@ worn_state = "johnny" item_state = "johnny" -/obj/item/clothing/under/rainbow - name = "rainbow" - desc = "rainbow" +/obj/item/clothing/under/color/rainbow + name = "rainbow jumpsuit" + desc = "A multi-colored jumpsuit." icon_state = "rainbow" item_state = "rainbow" worn_state = "rainbow" @@ -482,13 +482,6 @@ worn_state = "sundress_white" body_parts_covered = UPPER_TORSO|LOWER_TORSO -/obj/item/clothing/under/blackjumpskirt - name = "black jumpskirt" - desc = "A black jumpskirt, Sol size 0." - icon_state = "blackjumpskirt" - item_state = "bl_suit" - worn_state = "blackjumpskirt" - /obj/item/clothing/under/captainformal name = "captain's formal uniform" desc = "A captain's formal-wear, for special occasions." diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 975cf6c4ae7..f3c38cc4331 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -1,4 +1,7 @@ /obj/item/clothing/under/pants + name = "jeans" + desc = "A nondescript pair of tough blue jeans." + icon_state = "jeans" gender = PLURAL body_parts_covered = LOWER_TORSO|LEGS @@ -17,6 +20,11 @@ desc = "Only for those who can pull it off." icon_state = "jeansblack" +/obj/item/clothing/under/pants/greyjeans + name = "grey jeans" + desc = "Only for those who can pull it off." + icon_state = "jeansgrey" + /obj/item/clothing/under/pants/youngfolksjeans name = "Young Folks jeans" desc = "For those tired of boring old jeans. Relive the passion of your youth!" @@ -47,11 +55,6 @@ desc = "A pair of track pants, for the athletic." icon_state = "trackpants" -/obj/item/clothing/under/pants/jeans - name = "jeans" - desc = "A nondescript pair of tough blue jeans." - icon_state = "jeans" - /obj/item/clothing/under/pants/khaki name = "khaki pants" desc = "A pair of dust beige khaki pants." diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 4ad336aa264..1d792bcc107 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -36,6 +36,7 @@ worn_state = "jeans_shorts" /obj/item/clothing/under/shorts/jeans/female + name = "jeans short shorts" icon_state = "jeans_shorts_f" worn_state = "jeans_shorts_f" @@ -45,6 +46,7 @@ worn_state = "jeansclassic_shorts" /obj/item/clothing/under/shorts/jeans/classic/female + name = "classic jeans short shorts" icon_state = "jeansclassic_shorts_f" worn_state = "jeansclassic_shorts_f" @@ -54,6 +56,7 @@ worn_state = "jeansmustang_shorts" /obj/item/clothing/under/shorts/jeans/mustang/female + name = "mustang jeans short shorts" icon_state = "jeansmustang_shorts_f" worn_state = "jeansmustang_shorts_f" @@ -63,6 +66,7 @@ worn_state = "jeansyoungfolks_shorts" /obj/item/clothing/under/shorts/jeans/youngfolks/female + name = "young folks jeans short shorts" icon_state = "jeansyoungfolks_shorts_f" worn_state = "jeansyoungfolks_shorts_f" @@ -72,9 +76,20 @@ worn_state = "blackpants_shorts" /obj/item/clothing/under/shorts/jeans/black/female + name = "black jeans short shorts" icon_state = "black_shorts_f" worn_state = "black_shorts_f" +/obj/item/clothing/under/shorts/jeans/grey + name = "grey jeans shorts" + icon_state = "greypants_shorts" + worn_state = "greypants_shorts" + +/obj/item/clothing/under/shorts/jeans/grey/female + name = "grey jeans short shorts" + icon_state = "grey_shorts_f" + worn_state = "grey_shorts_f" + /obj/item/clothing/under/shorts/khaki name = "khaki shorts" desc = "For that island getaway. It's five o'clock somewhere, right?" @@ -82,5 +97,6 @@ worn_state = "tanpants_shorts" /obj/item/clothing/under/shorts/khaki/female + name = "khaki short shorts" icon_state = "khaki_shorts_f" worn_state = "khaki_shorts_f" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 2dc37f79f7e..66edeaaf09e 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -11,9 +11,9 @@ /obj/item/clothing/under/syndicate/combat //ERT tactleneck name = "combat turtleneck" desc = "It's some non-descript, slightly suspicious looking, civilian clothing." - icon_state = "syndicate" + icon_state = "combat" item_state = "bl_suit" - worn_state = "syndicate" + worn_state = "combat" has_sensor = 1 armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 diff --git a/code/modules/detectivework/tools/storage.dm b/code/modules/detectivework/tools/storage.dm index e0cdabaafdd..9c45028e93d 100644 --- a/code/modules/detectivework/tools/storage.dm +++ b/code/modules/detectivework/tools/storage.dm @@ -8,16 +8,18 @@ /obj/item/weapon/storage/box/swabs/New() ..() - for(var/i=0;iYou start disconnecting the monitor." + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "atm" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + user << "You disconnect the monitor." + A.state = 4 + A.icon_state = "atm_4" + M.deconstruct(src) + qdel(src) + return if(istype(I, /obj/item/weapon/card)) if(emagged > 0) //prevent inserting id into an emagged ATM diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index 2cbe3b35d97..4051bf95881 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -21,8 +21,7 @@ if(istype(W, /obj/item/weapon/spacecash/ewallet)) return 0 var/obj/item/weapon/spacecash/SC = W - SC.worth += src.worth - SC.update_icon() + SC.adjust_worth(src.worth) if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/h_user = user h_user.removeItem(src) @@ -59,26 +58,32 @@ src.overlays += banknote src.desc = "They are worth [worth] Thalers." +/obj/item/weapon/spacecash/proc/adjust_worth(var/adjust_worth = 0, var/update = 1) + worth += adjust_worth + if(worth > 0) + if(update) + update_icon() + return worth + else + qdel(src) + return 0 + +/obj/item/weapon/spacecash/proc/set_worth(var/new_worth = 0, var/update = 1) + worth = max(0, new_worth) + if(update) + update_icon() + return worth + /obj/item/weapon/spacecash/attack_self() var/amount = input(usr, "How many Thalers do you want to take? (0 to [src.worth])", "Take Money", 20) as num amount = round(Clamp(amount, 0, src.worth)) - if(amount==0) return 0 + if(!amount) + return - src.worth -= amount - src.update_icon() - if(!worth) - usr.removeItem(src) - if(amount in list(1000,500,200,100,50,20,1)) - var/cashtype = text2path("/obj/item/weapon/spacecash/c[amount]") - var/obj/cash = new cashtype (usr.loc) - usr.put_in_hands(cash) - else - var/obj/item/weapon/spacecash/SC = new (usr.loc) - SC.worth = amount - SC.update_icon() - usr.put_in_hands(SC) - if(!worth) - qdel(src) + adjust_worth(-amount) + var/obj/item/weapon/spacecash/SC = new (usr.loc) + SC.set_worth(amount) + usr.put_in_hands(SC) /obj/item/weapon/spacecash/c1 name = "1 Thaler" @@ -130,8 +135,7 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) var/obj/item/weapon/spacecash/SC = new (spawnloc) - SC.worth = sum - SC.update_icon() + SC.set_worth(sum) if (ishuman(human_user) && !human_user.get_active_hand()) human_user.put_in_hands(SC) return diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index b296ac3e0bf..8c39fcac8da 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -50,7 +50,7 @@ /var/list/economic_species_modifier = list( /datum/species/human = 10, /datum/species/skrell = 12, - /datum/species/teshari = 9, // Skrell sponsored! + /datum/species/teshari = 9, // Skrell sponsored, /datum/species/tajaran = 7, /datum/species/unathi = 7 ) @@ -87,7 +87,7 @@ var/global/economy_init = 0 if(economy_init) return 2 - news_network.CreateFeedChannel("The Vir Times", "SolGov Minister of Information", 1, 1) + news_network.CreateFeedChannel("The Vir Times", "Vir Times ExoNode - Northern Star", 1, 1) news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1) for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination) diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 20d50995172..f731a28f722 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -93,16 +93,10 @@ user << "You load [W] into [src]." return - if(istype(W,/obj/item/weapon/screwdriver)) - open = !open - user << "You [open ? "open" : "close"] the maintenance panel." + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) return - - if(open) - if(istype(W, /obj/item/weapon/crowbar)) - dismantle() - return - if(istype(W,/obj/item/weapon/disk/botany)) if(loaded_disk) user << "There is already a data disk loaded." diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm index 7583deae416..818bbd3b15f 100644 --- a/code/modules/hydroponics/trays/tray_reagents.dm +++ b/code/modules/hydroponics/trays/tray_reagents.dm @@ -92,47 +92,4 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle15" toxicity = 8 - weed_kill_str = 7 - -// ************************************* -// Nutrient defines for hydroponics -// ************************************* - -/obj/item/weapon/reagent_containers/glass/fertilizer - name = "fertilizer bottle" - desc = "A small glass bottle. Can hold up to 10 units." - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle16" - flags = OPENCONTAINER - possible_transfer_amounts = null - w_class = 2.0 - - var/fertilizer //Reagent contained, if any. - - //Like a shot glass! - amount_per_transfer_from_this = 10 - volume = 10 - -/obj/item/weapon/reagent_containers/glass/fertilizer/New() - ..() - - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) - - if(fertilizer) - reagents.add_reagent(fertilizer,10) - -/obj/item/weapon/reagent_containers/glass/fertilizer/ez - name = "bottle of E-Z-Nutrient" - icon_state = "bottle16" - fertilizer = "eznutrient" - -/obj/item/weapon/reagent_containers/glass/fertilizer/l4z - name = "bottle of Left 4 Zed" - icon_state = "bottle18" - fertilizer = "left4zed" - -/obj/item/weapon/reagent_containers/glass/fertilizer/rh - name = "bottle of Robust Harvest" - icon_state = "bottle15" - fertilizer = "robustharvest" + weed_kill_str = 7 \ No newline at end of file diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 13caccfba02..3dbb74d9335 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -45,7 +45,7 @@ user << "You begin dismantling \the [src]." if(do_after(user,25)) user << "You dismantle \the [src]." - new /obj/item/stack/material/wood(get_turf(src), amount = 3) + new /obj/item/stack/material/wood(get_turf(src), 3) for(var/obj/item/weapon/book/b in contents) b.loc = (get_turf(src)) qdel(src) diff --git a/code/modules/maps/swapmaps.dm b/code/modules/maps/swapmaps.dm index 127af2e7a1e..6c4909f2290 100644 --- a/code/modules/maps/swapmaps.dm +++ b/code/modules/maps/swapmaps.dm @@ -419,8 +419,8 @@ swapmap Build procs: Take 2 turfs as corners, plus an item type. An item may be like: - /turf/wall - /obj/fence{icon_state="iron"} + turf/wall + obj/fence{icon_state="iron"} */ proc/BuildFilledRectangle(turf/T1,turf/T2,item) if(!Contains(T1) || !Contains(T2)) return diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 18c96cf622c..cf83cef983a 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -47,9 +47,11 @@ recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0) recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20) recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60) - recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1) + recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1) + //recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1) recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1) - recipes += new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe_list("airlock assemblies", list( \ new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ @@ -70,13 +72,17 @@ new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \ )) - + recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1) recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade) recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2) recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1) recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2) - recipes += new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2) - recipes += new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2) + recipes += new/datum/stack_recipe_list("filing cabinets", list( \ + new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \ + )) /material/plasteel/generate_recipes() ..() @@ -84,6 +90,7 @@ recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1) recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]") recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20) + recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1) /material/sandstone/generate_recipes() ..() @@ -99,6 +106,10 @@ recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20) recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20) + recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 1, one_per_turf = 1, on_floor = 1) /material/wood/generate_recipes() ..() @@ -110,6 +121,7 @@ recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4) recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1) recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1) + recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1) /material/cardboard/generate_recipes() ..() diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 25edc577289..70f69be8347 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -5,11 +5,11 @@ self-explanatory but the various object types may have their own documentation. ~Z PATHS THAT USE DATUMS - /turf/simulated/wall - /obj/item/weapon/material - /obj/structure/barricade - /obj/item/stack/material - /obj/structure/table + turf/simulated/wall + obj/item/weapon/material + obj/structure/barricade + obj/item/stack/material + obj/structure/table VALID ICONS WALLS @@ -355,7 +355,7 @@ var/list/name_to_material hardness = 80 weight = 23 stack_origin_tech = list(TECH_MATERIAL = 2) - composite_material = list(DEFAULT_WALL_MATERIAL = 3750, "platinum" = 3750) //todo + composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo /material/plasteel/titanium name = "titanium" @@ -466,7 +466,7 @@ var/list/name_to_material hardness = 40 weight = 30 stack_origin_tech = "materials=2" - composite_material = list(DEFAULT_WALL_MATERIAL = 1875,"glass" = 3750) + composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 2, "glass" = SHEET_MATERIAL_AMOUNT) window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 5) created_window = /obj/structure/window/reinforced wire_product = null diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 381072871f0..baa3306c88d 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -9,6 +9,7 @@ name = "mining drill head" desc = "An enormous drill." icon_state = "mining_drill" + circuit = /obj/item/weapon/circuitboard/miningdrill var/braces_needed = 2 var/list/supports = list() var/supported = 0 @@ -43,7 +44,6 @@ ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/miningdrill(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/capacitor(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 340546002ff..8ab162dbc43 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -33,7 +33,7 @@ continue if(findtext(message," snores.")) //Because we have so many sleeping people. break - if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null))) M.show_message(message, m_type) if (m_type & 1) @@ -66,7 +66,7 @@ src << "You cannot send deadchat emotes (muted)." return - if(!(client.prefs.toggles & CHAT_DEAD)) + if(!is_preference_enabled(/datum/client_preference/show_dsay)) src << "You have deadchat muted." return diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index fabca030494..375b1e1e130 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -4,7 +4,7 @@ if(!client) return - if(speaker && !speaker.client && istype(src,/mob/observer/dead) && client.prefs.toggles & CHAT_GHOSTEARS && !speaker in view(src)) + if(speaker && !speaker.client && istype(src,/mob/observer/dead) && is_preference_enabled(/datum/client_preference/ghost_ears) && !(speaker in view(src))) //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. return @@ -51,12 +51,12 @@ var/track = null if(istype(src, /mob/observer/dead)) - if(italics && client.prefs.toggles & CHAT_GHOSTRADIO) + if(italics && is_preference_enabled(/datum/client_preference/ghost_radio)) return if(speaker_name != speaker.real_name && speaker.real_name) speaker_name = "[speaker.real_name] ([speaker_name])" track = "([ghost_follow_link(speaker, src)]) " - if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src)) + if(is_preference_enabled(/datum/client_preference/ghost_ears) && (speaker in view(src))) message = "[message]" if((sdisabilities & DEAF) || ear_deaf) diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index cd2dbb8642d..5679cc1a461 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -6,6 +6,7 @@ layer = MOB_LAYER universal_speak = 1 density = 0 + var/obj/item/weapon/card/id/botcard = null var/list/botcard_access = list() var/on = 1 @@ -13,11 +14,30 @@ var/locked = 1 var/emagged = 0 var/light_strength = 3 + var/busy = 0 var/obj/access_scanner = null var/list/req_access = list() var/list/req_one_access = list() + var/atom/target = null + var/list/ignore_list = list() + var/list/patrol_path = list() + var/list/target_path = list() + var/turf/obstacle = null + + var/wait_if_pulled = 0 // Only applies to moving to the target + var/will_patrol = 0 // Not a setting - whether or no this type of bots patrols at all + var/patrol_speed = 1 // How many times per tick we move when patrolling + var/target_speed = 2 // Ditto for chasing the target + var/min_target_dist = 1 // How close we try to get to the target + var/max_target_dist = 50 // How far we are willing to go + var/max_patrol_dist = 250 + + var/target_patience = 5 + var/frustration = 0 + var/max_frustration = 0 + /mob/living/bot/New() ..() update_icons() @@ -40,6 +60,9 @@ stunned = 0 paralysis = 0 + if(on && !client && !busy) + handleAI() + /mob/living/bot/updatehealth() if(status_flags & GODMODE) health = maxHealth @@ -109,6 +132,123 @@ /mob/living/bot/emag_act(var/remaining_charges, var/mob/user) return 0 +/mob/living/bot/proc/handleAI() + if(ignore_list.len) + for(var/atom/A in ignore_list) + if(!A || !A.loc || prob(1)) + ignore_list -= A + handleRegular() + if(target && confirmTarget(target)) + if(Adjacent(target)) + handleAdjacentTarget() + else + handleRangedTarget() + if(!wait_if_pulled || !pulledby) + for(var/i = 1 to target_speed) + stepToTarget() + if(i < target_speed) + sleep(20 / target_speed) + if(max_frustration && frustration > max_frustration * target_speed) + handleFrustrated(1) + else + resetTarget() + lookForTargets() + if(will_patrol && !pulledby && !target) + if(patrol_path.len) + for(var/i = 1 to patrol_speed) + handlePatrol() + if(i < patrol_speed) + sleep(20 / patrol_speed) + if(max_frustration && frustration > max_frustration * patrol_speed) + handleFrustrated(0) + else + startPatrol() + else + handleIdle() + +/mob/living/bot/proc/handleRegular() + return + +/mob/living/bot/proc/handleAdjacentTarget() + return + +/mob/living/bot/proc/handleRangedTarget() + return + +/mob/living/bot/proc/stepToTarget() + if(!target || !target.loc) + return + if(get_dist(src, target) > min_target_dist) + if(!target_path.len || get_turf(target) != target_path[target_path.len]) + calcTargetPath() + if(makeStep(target_path)) + frustration = 0 + else if(max_frustration) + ++frustration + return + +/mob/living/bot/proc/handleFrustrated(var/targ) + obstacle = targ ? target_path[1] : patrol_path[1] + target_path = list() + patrol_path = list() + return + +/mob/living/bot/proc/lookForTargets() + return + +/mob/living/bot/proc/confirmTarget(var/atom/A) + if(A.invisibility >= INVISIBILITY_LEVEL_ONE) + return 0 + if(A in ignore_list) + return 0 + if(!A.loc) + return 0 + return 1 + +/mob/living/bot/proc/handlePatrol() + makeStep(patrol_path) + return + +/mob/living/bot/proc/startPatrol() + var/turf/T = getPatrolTurf() + if(T) + patrol_path = AStar(get_turf(loc), T, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_patrol_dist, id = botcard, exclude = obstacle) + if(!patrol_path) + patrol_path = list() + obstacle = null + return + +/mob/living/bot/proc/getPatrolTurf() + return null + +/mob/living/bot/proc/handleIdle() + return + +/mob/living/bot/proc/calcTargetPath() + target_path = AStar(get_turf(loc), get_turf(target), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard, exclude = obstacle) + if(!target_path) + if(target && target.loc) + ignore_list |= target + resetTarget() + obstacle = null + return + +/mob/living/bot/proc/makeStep(var/list/path) + if(!path.len) + return 0 + var/turf/T = path[1] + if(get_turf(src) == T) + path -= T + return makeStep(path) + + return step_towards(src, T) + +/mob/living/bot/proc/resetTarget() + target = null + target_path = list() + frustration = 0 + obstacle = null + /mob/living/bot/proc/turn_on() if(stat) return 0 @@ -121,6 +261,9 @@ on = 0 set_light(0) update_icons() + resetTarget() + patrol_path = list() + ignore_list = list() /mob/living/bot/proc/explode() qdel(src) @@ -141,7 +284,7 @@ // for(var/turf/simulated/t in oview(src,1)) for(var/d in cardinal) - var/turf/simulated/T = get_step(src, d) + var/turf/T = get_step(src, d) if(istype(T) && !T.density) if(!LinkBlockedWithAccess(src, T, ID)) L.Add(T) diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index 3f0105b7266..21e8b6a2dcd 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -6,18 +6,8 @@ botcard_access = list(access_janitor, access_maint_tunnels) locked = 0 // Start unlocked so roboticist can set them to patrol. - - var/obj/effect/decal/cleanable/target - var/list/path = list() - var/list/patrol_path = list() - var/list/ignorelist = list() - - var/obj/cleanbot_listener/listener = null - var/beacon_freq = 1445 // navigation beacon frequency - var/signal_sent = 0 - var/closest_dist - var/next_dest - var/next_dest_loc + wait_if_pulled = 1 + min_target_dist = 0 var/cleaning = 0 var/screwloose = 0 @@ -26,48 +16,11 @@ var/blood = 1 var/list/target_types = list() - var/maximum_search_range = 7 - /mob/living/bot/cleanbot/New() ..() get_targets() - listener = new /obj/cleanbot_listener(src) - listener.cleanbot = src - - if(radio_controller) - radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) - -/mob/living/bot/cleanbot/proc/handle_target() - if(loc == target.loc) - if(!cleaning) - UnarmedAttack(target) - return 1 - if(!path.len) -// spawn(0) - path = AStar(loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - custom_emote(2, "[src] can't reach the target and is giving up.") - target = null - path = list() - return - if(path.len) - step_to(src, path[1]) - path -= path[1] - return 1 - return - -/mob/living/bot/cleanbot/Life() - ..() - - if(!on) - return - - if(client) - return - if(cleaning) - return - +/mob/living/bot/cleanbot/handleIdle() if(!screwloose && !oddbutton && prob(5)) custom_emote(2, "makes an excited beeping booping sound!") @@ -79,68 +32,27 @@ if(oddbutton && prob(5)) // Make a big mess visible_message("Something flies out of [src]. He seems to be acting oddly.") var/obj/effect/decal/cleanable/blood/gibs/gib = new /obj/effect/decal/cleanable/blood/gibs(loc) - ignorelist += gib + ignore_list += gib spawn(600) - ignorelist -= gib + ignore_list -= gib - // Find a target - - if(pulledby) // Don't wiggle if someone pulls you - patrol_path = list() - return - - var/found_spot - search_loop: - for(var/i=0, i <= maximum_search_range, i++) - for(var/obj/effect/decal/cleanable/D in view(i, src)) - if(D in ignorelist) - continue - for(var/T in target_types) - if(istype(D, T)) - patrol_path = list() - target = D - found_spot = handle_target() - if (found_spot) - break search_loop - else - target = null - continue // no need to check the other types - - - if(!found_spot && !target) // No targets in range - if(!patrol_path || !patrol_path.len) - if(!signal_sent || signal_sent > world.time + 200) // Waited enough or didn't send yet - var/datum/radio_frequency/frequency = radio_controller.return_frequency(beacon_freq) - if(!frequency) - return - - closest_dist = 9999 - next_dest = null - next_dest_loc = null - - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = 1 - signal.data = list("findbeakon" = "patrol") - frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS) - signal_sent = world.time - else - if(next_dest) - next_dest_loc = listener.memorized[next_dest] - if(next_dest_loc) - patrol_path = AStar(loc, next_dest_loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id = botcard, exclude = null) - signal_sent = 0 - else - if(pulledby) // Don't wiggle if someone pulls you - patrol_path = list() - return - if(patrol_path[1] == loc) - patrol_path -= patrol_path[1] - var/moved = step_towards(src, patrol_path[1]) - if(moved) - patrol_path -= patrol_path[1] +/mob/living/bot/cleanbot/lookForTargets() + for(var/obj/effect/decal/cleanable/D in view(world.view, src)) // There was some odd code to make it start with nearest decals, it's unnecessary, this works + if(confirmTarget(D)) + target = D + return +/mob/living/bot/cleanbot/confirmTarget(var/obj/effect/decal/cleanable/D) + if(!..()) + return 0 + for(var/T in target_types) + if(istype(D, T)) + return 1 + return 0 +/mob/living/bot/cleanbot/handleAdjacentTarget() + if(get_turf(target) == src.loc) + UnarmedAttack(target) /mob/living/bot/cleanbot/UnarmedAttack(var/obj/effect/decal/cleanable/D, var/proximity) if(!..()) @@ -152,7 +64,7 @@ if(D.loc != loc) return - cleaning = 1 + busy = 1 custom_emote(2, "begins to clean up \the [D]") update_icons() var/cleantime = istype(D, /obj/effect/decal/cleanable/dirt) ? 10 : 50 @@ -165,7 +77,7 @@ qdel(D) if(D == target) target = null - cleaning = 0 + busy = 0 update_icons() /mob/living/bot/cleanbot/explode() @@ -185,17 +97,11 @@ return /mob/living/bot/cleanbot/update_icons() - if(cleaning) + if(busy) icon_state = "cleanbot-c" else icon_state = "cleanbot[on]" -/mob/living/bot/cleanbot/turn_off() - ..() - target = null - path = list() - patrol_path = list() - /mob/living/bot/cleanbot/attack_hand(var/mob/user) var/dat dat += "Automatic Station Cleaner v1.0

" @@ -230,10 +136,6 @@ if("patrol") should_patrol = !should_patrol patrol_path = null - if("freq") - var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10 - if (freq > 0) - beacon_freq = freq if("screw") screwloose = !screwloose usr << "You twiddle the screw." @@ -264,25 +166,6 @@ if(blood) target_types += /obj/effect/decal/cleanable/blood -/* Radio object that listens to signals */ - -/obj/cleanbot_listener - var/mob/living/bot/cleanbot/cleanbot = null - var/list/memorized = list() - -/obj/cleanbot_listener/receive_signal(var/datum/signal/signal) - var/recv = signal.data["beacon"] - var/valid = signal.data["patrol"] - if(!recv || !valid || !cleanbot) - return - - var/dist = get_dist(cleanbot, signal.source.loc) - memorized[recv] = signal.source.loc - - if(dist < cleanbot.closest_dist) // We check all signals, choosing the closest beakon; then we move to the NEXT one after the closest one - cleanbot.closest_dist = dist - cleanbot.next_dest = signal.data["next_patrol"] - /* Assembly */ /obj/item/weapon/bucket_sensor diff --git a/code/modules/mob/living/bot/ed209bot.dm b/code/modules/mob/living/bot/ed209bot.dm index ec828fb60b2..96d9397c7ed 100644 --- a/code/modules/mob/living/bot/ed209bot.dm +++ b/code/modules/mob/living/bot/ed209bot.dm @@ -7,7 +7,6 @@ health = 100 maxHealth = 100 - bot_version = "2.5" is_ranged = 1 preparing_arrest_sounds = new() @@ -20,7 +19,7 @@ var/last_shot = 0 /mob/living/bot/secbot/ed209/update_icons() - if(on && is_attacking) + if(on && busy) icon_state = "ed209-c" else icon_state = "ed209[on]" @@ -50,6 +49,9 @@ new /obj/effect/decal/cleanable/blood/oil(Tsec) qdel(src) +/mob/living/bot/secbot/ed209/handleRangedTarget() + RangedAttack(target) + /mob/living/bot/secbot/ed209/RangedAttack(var/atom/A) if(last_shot + shot_delay > world.time) src << "You are not ready to fire yet!" diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 069c10ca215..613a551f6a7 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -22,17 +22,12 @@ var/obj/structure/reagent_dispensers/watertank/tank - var/attacking = 0 - var/list/path = list() - var/atom/target - var/frustration = 0 - -/mob/living/bot/farmbot/New() - ..() - spawn(5) - tank = locate() in contents - if(!tank) - tank = new /obj/structure/reagent_dispensers/watertank(src) +/mob/living/bot/farmbot/New(var/newloc, var/newTank) + ..(newloc) + if(!newTank) + newTank = new /obj/structure/reagent_dispensers/watertank(src) + tank = newTank + tank.forceMove(src) /mob/living/bot/farmbot/attack_hand(var/mob/user as mob) . = ..() @@ -110,63 +105,55 @@ else icon_state = "farmbot[on]" -/mob/living/bot/farmbot/Life() - ..() - if(!on) - return +/mob/living/bot/farmbot/handleRegular() if(emagged && prob(1)) flick("farmbot_broke", src) - if(client) - return - if(target) - if(Adjacent(target)) - UnarmedAttack(target) - path = list() - target = null - else - if(path.len && frustration < 5) - if(path[1] == loc) - path -= path[1] - var/t = step_towards(src, path[1]) - if(t) - path -= path[1] - else - ++frustration - else - path = list() - target = null +/mob/living/bot/farmbot/handleAdjacentTarget() + UnarmedAttack(target) + +/mob/living/bot/farmbot/lookForTargets() + if(emagged) + for(var/mob/living/carbon/human/H in view(7, src)) + target = H + return else - if(emagged) - for(var/mob/living/carbon/human/H in view(7, src)) - target = H - break - else - for(var/obj/machinery/portable_atmospherics/hydroponics/tray in view(7, src)) - if(process_tray(tray)) - target = tray - frustration = 0 - break - if(!target && refills_water && tank && tank.reagents.total_volume < tank.reagents.maximum_volume) - for(var/obj/structure/sink/source in view(7, src)) - target = source - frustration = 0 - break - if(target) - var/t = get_dir(target, src) // Turf with the tray is impassable, so a* can't navigate directly to it - path = AStar(loc, get_step(target, t), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - path = list() + for(var/obj/machinery/portable_atmospherics/hydroponics/tray in view(7, src)) + if(confirmTarget(tray)) + target = tray + return + if(!target && refills_water && tank && tank.reagents.total_volume < tank.reagents.maximum_volume) + for(var/obj/structure/sink/source in view(7, src)) + target = source + return + +/mob/living/bot/farmbot/calcTargetPath() // We need to land NEXT to the tray, because the tray itself is impassable + for(var/trayDir in list(NORTH, SOUTH, EAST, WEST)) + target_path = AStar(get_turf(loc), get_step(get_turf(target), trayDir), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, max_target_dist, id = botcard) + if(target_path) + break + if(!target_path) + ignore_list |= target + target = null + target_path = list() + return + +/mob/living/bot/farmbot/stepToTarget() // Same reason + var/turf/T = get_turf(target) + if(!target_path.len || !T.Adjacent(target_path[target_path.len])) + calcTargetPath() + makeStep(target_path) + return /mob/living/bot/farmbot/UnarmedAttack(var/atom/A, var/proximity) if(!..()) return - if(attacking) + if(busy) return if(istype(A, /obj/machinery/portable_atmospherics/hydroponics)) var/obj/machinery/portable_atmospherics/hydroponics/T = A - var/t = process_tray(T) + var/t = confirmTarget(T) switch(t) if(0) return @@ -174,7 +161,7 @@ action = "water" // Needs a better one update_icons() visible_message("[src] starts [T.dead? "removing the plant from" : "harvesting"] \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) visible_message("[src] [T.dead? "removes the plant from" : "harvests"] \the [A].") T.attack_hand(src) @@ -182,7 +169,7 @@ action = "water" update_icons() visible_message("[src] starts watering \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) visible_message("[src] waters \the [A].") @@ -191,7 +178,7 @@ action = "hoe" update_icons() visible_message("[src] starts uprooting the weeds in \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) visible_message("[src] uproots the weeds in \the [A].") T.weedlevel = 0 @@ -199,11 +186,11 @@ action = "fertile" update_icons() visible_message("[src] starts fertilizing \the [A].") - attacking = 1 + busy = 1 if(do_after(src, 30)) - visible_message("[src] waters \the [A].") + visible_message("[src] fertilizes \the [A].") T.reagents.add_reagent("ammonia", 10) - attacking = 0 + busy = 0 action = "" update_icons() T.update_icon() @@ -213,20 +200,20 @@ action = "water" update_icons() visible_message("[src] starts refilling its tank from \the [A].") - attacking = 1 + busy = 1 while(do_after(src, 10) && tank.reagents.total_volume < tank.reagents.maximum_volume) tank.reagents.add_reagent("water", 10) if(prob(5)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - attacking = 0 + busy = 0 action = "" update_icons() visible_message("[src] finishes refilling its tank.") else if(emagged && ishuman(A)) var/action = pick("weed", "water") - attacking = 1 + busy = 1 spawn(50) // Some delay - attacking = 0 + busy = 0 switch(action) if("weed") flick("farmbot_hoe", src) @@ -238,7 +225,8 @@ A.attack_generic(src, 5, t) if("water") flick("farmbot_water", src) - visible_message("[src] splashes [A] with water!") // That's it. RP effect. + visible_message("[src] splashes [A] with water!") + tank.reagents.splash(A, 100) /mob/living/bot/farmbot/explode() visible_message("[src] blows apart!") @@ -261,8 +249,22 @@ qdel(src) return -/mob/living/bot/farmbot/proc/process_tray(var/obj/machinery/portable_atmospherics/hydroponics/tray) - if(!tray || !istype(tray)) +/mob/living/bot/farmbot/confirmTarget(var/atom/targ) + if(!..()) + return 0 + + if(emagged && ishuman(targ)) + if(targ in view(world.view, src)) + return 1 + return 0 + + if(istype(targ, /obj/structure/sink)) + if(!tank || tank.reagents.total_volume >= tank.reagents.maximum_volume) + return 0 + return 1 + + var/obj/machinery/portable_atmospherics/hydroponics/tray = targ + if(!istype(tray)) return 0 if(tray.closed_system || !tray.seed) @@ -291,27 +293,27 @@ icon_state = "water_arm" var/build_step = 0 var/created_name = "Farmbot" + var/obj/tank w_class = 3.0 - New() - ..() - spawn(4) // If an admin spawned it, it won't have a watertank it, so lets make one for em! - var tank = locate(/obj/structure/reagent_dispensers/watertank) in contents - if(!tank) - new /obj/structure/reagent_dispensers/watertank(src) - +/obj/item/weapon/farmbot_arm_assembly/New(var/newloc, var/theTank) + ..(newloc) + if(!theTank) // If an admin spawned it, it won't have a watertank it, so lets make one for em! + tank = new /obj/structure/reagent_dispensers/watertank(src) + else + tank = theTank + tank.forceMove(src) /obj/structure/reagent_dispensers/watertank/attackby(var/obj/item/robot_parts/S, mob/user as mob) if ((!istype(S, /obj/item/robot_parts/l_arm)) && (!istype(S, /obj/item/robot_parts/r_arm))) ..() return - var/obj/item/weapon/farmbot_arm_assembly/A = new /obj/item/weapon/farmbot_arm_assembly(loc) - user << "You add the robot arm to [src]." - loc = A //Place the water tank into the assembly, it will be needed for the finished bot user.deleteItem(S) + new /obj/item/weapon/farmbot_arm_assembly(loc, src) + /obj/item/weapon/farmbot_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() if((istype(W, /obj/item/device/analyzer/plant_analyzer)) && (build_step == 0)) @@ -335,10 +337,7 @@ else if((isprox(W)) && (build_step == 3)) build_step++ user << "You complete the Farmbot! Beep boop." - var/mob/living/bot/farmbot/S = new /mob/living/bot/farmbot(get_turf(src)) - for(var/obj/structure/reagent_dispensers/watertank/wTank in contents) - wTank.loc = S - S.tank = wTank + var/mob/living/bot/farmbot/S = new /mob/living/bot/farmbot(get_turf(src), tank) S.name = created_name user.deleteItem(W) qdel(src) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 4705d96e9bc..38655699879 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -3,22 +3,20 @@ desc = "A little floor repairing robot, he looks so excited!" icon_state = "floorbot0" req_access = list(access_construction) + wait_if_pulled = 1 + min_target_dist = 0 var/amount = 10 // 1 for tile, 2 for lattice var/maxAmount = 60 var/tilemake = 0 // When it reaches 100, bot makes a tile - var/repairing = 0 var/improvefloors = 0 var/eattiles = 0 var/maketiles = 0 var/targetdirection = null - var/list/path = list() - var/list/ignorelist = list() - var/turf/target var/floor_build_type = /decl/flooring/tiling // Basic steel floor. /mob/living/bot/floorbot/update_icons() - if(repairing) + if(busy) icon_state = "floorbot-c" else if(amount > 0) icon_state = "floorbot[on]" @@ -31,7 +29,7 @@ dat += "Automatic Station Floor Repairer v1.0

" dat += "Status: [src.on ? "On" : "Off"]
" dat += "Maintenance panel is [open ? "opened" : "closed"]
" - //dat += "Tiles left: [amount]
" + dat += "Tiles left: [amount]
" dat += "Behvaiour controls are [locked ? "locked" : "unlocked"]
" if(!locked || issilicon(user)) dat += "Improves floors: [improvefloors ? "Yes" : "No"]
" @@ -89,100 +87,90 @@ targetdirection = null attack_hand(usr) -/mob/living/bot/floorbot/turn_off() - ..() - target = null - path = list() - ignorelist = list() - -/mob/living/bot/floorbot/Life() - ..() - - if(!on) - return - +/mob/living/bot/floorbot/handleRegular() ++tilemake if(tilemake >= 100) tilemake = 0 addTiles(1) - if(client) - return - - if(prob(5)) + if(prob(1)) custom_emote(2, "makes an excited booping beeping sound!") - if(ignorelist.len) // Don't stick forever - for(var/T in ignorelist) - if(prob(1)) - ignorelist -= T - - if(amount && !emagged) - if(!target && targetdirection) // Building a bridge - var/turf/T = get_step(src, targetdirection) - while(T in range(src)) - if(istype(T, /turf/space)) - target = T - break - T = get_step(T, targetdirection) - - if(!target) // Fixing floors - for(var/turf/T in view(src)) - if(T.loc.name == "Space") - continue - if(T in ignorelist) - continue - if(istype(T, /turf/space)) - if(get_turf(T) == loc || prob(40)) // So they target the same tile all the time - target = T - if(improvefloors && istype(T, /turf/simulated/floor)) - var/turf/simulated/floor/F = T - if(!F.flooring && (get_turf(T) == loc || prob(40))) - target = T - - if(emagged) // Time to griff - for(var/turf/simulated/floor/D in view(src)) - if(D.loc.name == "Space") - continue - if(D in ignorelist) - continue - target = D - break - - if(!target && amount < maxAmount && eattiles || maketiles) // Eat tiles - if(eattiles) - for(var/obj/item/stack/tile/floor/T in view(src)) - if(T in ignorelist) - continue - target = T - break - if(maketiles && !target) - for(var/obj/item/stack/material/steel/T in view(src)) - if(T in ignorelist) - continue - target = T - break - - if(target && get_turf(target) == loc) +/mob/living/bot/floorbot/handleAdjacentTarget() + if(get_turf(target) == src.loc) UnarmedAttack(target) - if(target && get_turf(target) != loc && !path.len) - spawn(0) - path = AStar(loc, get_turf(target), /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - path = list() - ignorelist += target - target = null +/mob/living/bot/floorbot/lookForTargets() + if(emagged) // Time to griff + for(var/turf/simulated/floor/D in view(src)) + if(confirmTarget(D)) + target = D + return - if(path.len) - step_to(src, path[1]) - path -= path[1] + else if(amount) + if(targetdirection) // Building a bridge + var/turf/T = get_step(src, targetdirection) + while(T in range(world.view, src)) + if(confirmTarget(T)) + target = T + return + T = get_step(T, targetdirection) + + else // Fixing floors + for(var/turf/space/T in view(src)) // Breaches are of higher priority + if(confirmTarget(T)) + target = T + return + + for(var/turf/simulated/mineral/floor/T in view(src)) // Asteroids are of smaller priority + if(confirmTarget(T)) + target = T + return + + if(improvefloors) + for(var/turf/simulated/floor/T in view(src)) + if(confirmTarget(T)) + target = T + return + + if(amount < maxAmount && (eattiles || maketiles)) + for(var/obj/item/stack/S in view(src)) + if(confirmTarget(S)) + target = S + return + +/mob/living/bot/floorbot/confirmTarget(var/atom/A) // The fact that we do some checks twice may seem confusing but remember that the bot's settings may be toggled while it's moving and we want them to stop in that case + if(!..()) + return 0 + + if(istype(A, /obj/item/stack/tile/floor)) + return (amount < maxAmount && eattiles) + if(istype(A, /obj/item/stack/material/steel)) + return (amount < maxAmount && maketiles) + + if(A.loc.name == "Space") + return 0 + + if(emagged) + return (istype(A, /turf/simulated/floor)) + + if(!amount) + return 0 + + if(istype(A, /turf/space)) + return 1 + + if(istype(A, /turf/simulated/mineral/floor)) + return 1 + + var/turf/simulated/floor/T = A + return (istype(T) && improvefloors && !T.flooring && (get_turf(T) == loc || prob(40))) /mob/living/bot/floorbot/UnarmedAttack(var/atom/A, var/proximity) if(!..()) return - if(repairing) + if(busy) return if(get_turf(A) != loc) @@ -190,9 +178,9 @@ if(emagged && istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A - repairing = 1 + busy = 1 update_icons() - if(F.is_plating()) + if(F.flooring) visible_message("[src] begins to tear the floor tile from the floor!") if(do_after(src, 50)) F.break_tile_to_plating() @@ -203,15 +191,15 @@ F.ReplaceWithLattice() addTiles(1) target = null - repairing = 0 + busy = 0 update_icons() - else if(istype(A, /turf/space)) + else if(istype(A, /turf/space) || istype(A, /turf/simulated/mineral/floor)) var/building = 2 if(locate(/obj/structure/lattice, A)) building = 1 if(amount < building) return - repairing = 1 + busy = 1 update_icons() visible_message("[src] begins to repair the hole.") if(do_after(src, 50)) @@ -223,12 +211,12 @@ I = PoolOrNew(/obj/item/stack/rods, src) A.attackby(I, src) target = null - repairing = 0 + busy = 0 update_icons() else if(istype(A, /turf/simulated/floor)) var/turf/simulated/floor/F = A if(!F.flooring && amount) - repairing = 1 + busy = 1 update_icons() visible_message("[src] begins to improve the floor.") if(do_after(src, 50)) @@ -236,12 +224,12 @@ F.set_flooring(get_flooring_data(floor_build_type)) addTiles(-1) target = null - repairing = 0 + busy = 0 update_icons() else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount) var/obj/item/stack/tile/floor/T = A visible_message("[src] begins to collect tiles.") - repairing = 1 + busy = 1 update_icons() if(do_after(src, 20)) if(T) @@ -249,13 +237,13 @@ T.use(eaten) addTiles(eaten) target = null - repairing = 0 + busy = 0 update_icons() else if(istype(A, /obj/item/stack/material) && amount + 4 <= maxAmount) var/obj/item/stack/material/M = A if(M.get_material_name() == DEFAULT_WALL_MATERIAL) visible_message("[src] begins to make tiles.") - repairing = 1 + busy = 1 update_icons() if(do_after(50)) if(M) diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index 97851a60208..a8530cd9ce9 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -3,21 +3,16 @@ desc = "A little medical robot. He looks somewhat underwhelmed." icon_state = "medibot0" req_access = list(access_medical) - - var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. botcard_access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) + var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits. + //AI vars - var/frustration = 0 - var/list/path = list() - var/mob/living/carbon/human/patient = null - var/mob/ignored = list() // Used by emag var/last_newpatient_speak = 0 var/vocal = 1 //Healing vars var/obj/item/weapon/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents. - var/currently_healing = 0 var/injection_amount = 15 //How much reagent do we inject at a time? var/heal_threshold = 10 //Start healing when they have this much damage in a category var/use_beaker = 0 //Use reagents in beaker instead of default treatment agents. @@ -29,49 +24,26 @@ var/treatment_emag = "toxin" var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? -/mob/living/bot/medbot/Life() - ..() +/mob/living/bot/medbot/handleIdle() + if(vocal && prob(1)) + var/message = pick("Radar, put a mask on!", "There's always a catch, and it's the best there is.", "I knew it, I should've been a plastic surgeon.", "What kind of medbay is this? Everyone's dropping like dead flies.", "Delicious!") + say(message) - if(!on) - return +/mob/living/bot/medbot/handleAdjacentTarget() + UnarmedAttack(target) - if(!client) +/mob/living/bot/medbot/lookForTargets() + for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! + if(confirmTarget(H)) + target = H + if(last_newpatient_speak + 300 < world.time) + var/message = pick("Hey, [H.name]! Hold on, I'm coming.", "Wait [H.name]! I want to help!", "[H.name], you appear to be injured!") + say(message) + custom_emote(1, "points at [H.name].") + last_newpatient_speak = world.time + break - if(vocal && prob(1)) - var/message = pick("Radar, put a mask on!", "There's always a catch, and it's the best there is.", "I knew it, I should've been a plastic surgeon.", "What kind of medbay is this? Everyone's dropping like dead flies.", "Delicious!") - say(message) - - if(patient) - if(Adjacent(patient)) - if(!currently_healing) - UnarmedAttack(patient) - else - if(path.len && (get_dist(patient, path[path.len]) > 2)) // We have a path, but it's off - path = list() - if(!path.len && (get_dist(src, patient) > 1)) - spawn(0) - path = AStar(loc, get_turf(patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id = botcard) - if(!path) - path = list() - if(path.len) - step_to(src, path[1]) - path -= path[1] - ++frustration - if(get_dist(src, patient) > 7 || frustration > 8) - patient = null - else - for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! - if(valid_healing_target(H)) - patient = H - frustration = 0 - if(last_newpatient_speak + 300 < world.time) - var/message = pick("Hey, [H.name]! Hold on, I'm coming.", "Wait [H.name]! I want to help!", "[H.name], you appear to be injured!") - say(message) - custom_emote(1, "points at [H.name].") - last_newpatient_speak = world.time - break - -/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H, var/proximity) +/mob/living/bot/medbot/UnarmedAttack(var/mob/living/carbon/human/H) if(!..()) return @@ -81,25 +53,27 @@ if(!istype(H)) return + if(busy) + return + if(H.stat == DEAD) var/death_message = pick("No! NO!", "Live, damnit! LIVE!", "I... I've never lost a patient before. Not today, I mean.") say(death_message) - patient = null + target = null return - var/t = valid_healing_target(H) + var/t = confirmTarget(H) if(!t) var/message = pick("All patched up!", "An apple a day keeps me away.", "Feel better soon!") say(message) - patient = null + target = null return - icon_state = "medibots" visible_message("[src] is trying to inject [H]!") if(declare_treatment) var/area/location = get_area(src) broadcast_medical_hud_message("[src] is treating [H] in [location]", src) - currently_healing = 1 + busy = 1 update_icons() if(do_mob(src, H, 30)) if(t == 1) @@ -107,14 +81,14 @@ else H.reagents.add_reagent(t, injection_amount) visible_message("[src] injects [H] with the syringe!") - currently_healing = 0 + busy = 0 update_icons() /mob/living/bot/medbot/update_icons() overlays.Cut() if(skin) overlays += image('icons/obj/aibots.dmi', "medskin_[skin]") - if(currently_healing) + if(busy) icon_state = "medibots" else icon_state = "medibot[on]" @@ -226,13 +200,13 @@ user << "You short out [src]'s reagent synthesis circuits." visible_message("[src] buzzes oddly!") flick("medibot_spark", src) - patient = null - currently_healing = 0 + target = null + busy = 0 emagged = 1 on = 1 update_icons() . = 1 - ignored |= user + ignore_list |= user /mob/living/bot/medbot/explode() on = 0 @@ -255,15 +229,15 @@ qdel(src) return -/mob/living/bot/medbot/proc/valid_healing_target(var/mob/living/carbon/human/H) +/mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) + if(!..()) + return 0 + if(H.stat == DEAD) // He's dead, Jim - return null + return 0 if(H.suiciding) - return null - - if(H in ignored) - return null + return 0 if(emagged) return treatment_emag diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index a4ede33ab14..c330e0efc0e 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -17,23 +17,22 @@ maxHealth = 150 mob_bump_flag = HEAVY + min_target_dist = 0 + max_target_dist = 250 + target_speed = 3 + max_frustration = 5 botcard_access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - var/busy = 0 - var/mode = MULE_IDLE var/atom/movable/load + var/paused = 0 var/crates_only = 1 var/auto_return = 1 var/safety = 1 - var/list/path = list() - var/frustration = 0 - var/turf/target var/targetName var/turf/home var/homeName - var/turf/obstacle var/global/amount = 0 @@ -71,19 +70,6 @@ dat += "Power: [on ? "On" : "Off"]
" if(!open) - dat += "Status: " - switch(mode) - if(MULE_IDLE) - dat += "Ready" - if(MULE_MOVING, MULE_UNLOAD, MULE_PATH_DONE) - dat += "Navigating" - if(MULE_UNLOAD) - dat += "Unloading" - if(MULE_LOST) - dat += "Processing commands" - if(MULE_CALC_MIN to MULE_CALC_MAX) - dat += "Calculating navigation path" - dat += "
Current Load: [load ? load.name : "none"]
" if(locked) @@ -177,10 +163,9 @@ /mob/living/bot/mulebot/proc/obeyCommand(var/command) switch(command) if("Home") - mode = MULE_IDLE + resetTarget() target = home targetName = "Home" - mode = MULE_LOST if("SetD") var/new_dest var/list/beaconlist = new() @@ -192,13 +177,13 @@ else alert("No destination beacons available.") if(new_dest) + resetTarget() target = get_turf(beaconlist[new_dest]) targetName = new_dest if("GoTD") - if(mode == MULE_IDLE) - mode = MULE_LOST + paused = 0 if("Stop") - mode = MULE_IDLE + paused = 1 /mob/living/bot/mulebot/emag_act(var/remaining_charges, var/user) locked = !locked @@ -211,89 +196,49 @@ if(open) icon_state = "mulebot-hatch" return - if(mode == MULE_MOVING || mode == MULE_UNLOAD) + if(target_path.len && !paused) icon_state = "mulebot1" return icon_state = "mulebot0" -/mob/living/bot/mulebot/Life() - ..() - - if(busy) - return - +/mob/living/bot/mulebot/handleRegular() if(!safety && prob(1)) flick("mulebot-emagged", src) + update_icons() - switch(mode) - if(MULE_IDLE) // Idle - return - if(MULE_MOVING) // Moving to target - if(!target) // Return home - if(auto_return && home) - target = home - targetName = "Home" - mode = MULE_LOST - else - mode = MULE_IDLE - update_icons() - return - if(loc == target) // Unload or stop - custom_emote(2, "makes a chiming sound.") - playsound(loc, 'sound/machines/chime.ogg', 50, 0) - mode = MULE_UNLOAD - update_icons() - return - if(path.len) // Move - makeStep() - sleep(10) - if(path.len) - makeStep() - else - mode = MULE_LOST +/mob/living/bot/mulebot/handleFrustrated() + custom_emote(2, "makes a sighing buzz.") + playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + ..() - update_icons() - return - if(MULE_UNLOAD) - unload(dir) +/mob/living/bot/mulebot/handleAdjacentTarget() + if(target == src.loc) + custom_emote(2, "makes a chiming sound.") + playsound(loc, 'sound/machines/chime.ogg', 50, 0) + UnarmedAttack(target) + resetTarget() + if(auto_return && home && (loc != home)) + target = home + targetName = "Home" - if(auto_return && home && (loc != home)) - target = home - targetName = "Home" - mode = MULE_LOST - else - mode = MULE_IDLE - update_icons() - return - if(MULE_LOST) // Lost my way - if(target) - spawn(0) - calc_path(obstacle) - mode = MULE_CALC_MIN - else - mode = MULE_IDLE - update_icons() - return - if(MULE_CALC_MIN to MULE_CALC_MAX) // Calcing path - if(path.len) - mode = MULE_PATH_DONE - update_icons() - else - ++mode - return - if(MULE_PATH_DONE) // Done with path - obstacle = null - if(path.len) - frustration = 0 - mode = MULE_MOVING - else - if(home) - target = home - targetName = "Home" - mode = MULE_LOST - else - mode = MULE_IDLE - update_icons() +/mob/living/bot/mulebot/confirmTarget() + return 1 + +/mob/living/bot/mulebot/calcTargetPath() + ..() + if(!target_path.len && target != home) // I presume that target is not null + resetTarget() + target = home + targetName = "Home" + +/mob/living/bot/mulebot/stepToTarget() + if(paused) + return + ..() + +/mob/living/bot/mulebot/UnarmedAttack(var/turf/T) + if(T == src.loc) + unload(dir) /mob/living/bot/mulebot/Bump(var/mob/living/M) if(!safety && istype(M)) @@ -302,28 +247,6 @@ M.Weaken(5) ..() -/mob/living/bot/mulebot/proc/makeStep() - var/turf/next = path[1] - if(next == loc) - path -= next - return - - var/moved = step_towards(src, next) - if(moved) - frustration = 0 - path -= next - else if(frustration < 6) - if(frustration == 3) - custom_emote(2, "makes an annoyed buzzing sound") - playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) - ++frustration - else - custom_emote(2, "makes a sighing buzz.") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - obstacle = next - - mode = MULE_LOST - /mob/living/bot/mulebot/proc/runOver(var/mob/living/carbon/human/H) if(istype(H)) // No safety checks - WILL run over lying humans. Stop ERPing in the maint! visible_message("[src] drives over [H]!") @@ -362,11 +285,6 @@ new /obj/effect/decal/cleanable/blood/oil(Tsec) ..() -/mob/living/bot/mulebot/proc/calc_path(var/turf/avoid = null) - path = AStar(loc, target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, id = botcard, exclude = avoid) - if(!path) - path = list() - /mob/living/bot/mulebot/proc/load(var/atom/movable/C) if(busy || load || get_dist(C, src) > 1 || !isturf(C.loc)) return @@ -384,10 +302,6 @@ if(istype(crate)) crate.close() - //I'm sure someone will come along and ask why this is here... well people were dragging screen items onto the mule, and that was not cool. - //So this is a simple fix that only allows a selection of item types to be considered. Further narrowing-down is below. - //if(!istype(C,/obj/item) && !istype(C,/obj/machinery) && !istype(C,/obj/structure) && !ismob(C)) - // return busy = 1 C.loc = loc @@ -428,11 +342,3 @@ AM.layer = initial(AM.layer) AM.pixel_y = initial(AM.pixel_y) busy = 0 - -#undef MULE_IDLE -#undef MULE_MOVING -#undef MULE_UNLOAD -#undef MULE_LOST -#undef MULE_CALC_MIN -#undef MULE_CALC_MAX -#undef MULE_PATH_DONE diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 723c7b352a4..83f26ea550c 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -6,8 +6,8 @@ health = 50 req_one_access = list(access_security, access_forensics_lockers) botcard_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels) - - var/mob/target + patrol_speed = 2 + target_speed = 3 var/idcheck = 0 // If true, arrests for having weapons without authorization. var/check_records = 0 // If true, arrests people without a record. @@ -16,30 +16,9 @@ var/declare_arrests = 0 // If true, announces arrests over sechuds. var/auto_patrol = 0 // If true, patrols on its own - var/mode = 0 -#define SECBOT_IDLE 0 // idle -#define SECBOT_HUNT 1 // found target, hunting -#define SECBOT_ARREST 2 // arresting target -#define SECBOT_START_PATROL 3 // start patrol -#define SECBOT_WAIT_PATROL 4 // waiting for signals -#define SECBOT_PATROL 5 // patrolling -#define SECBOT_SUMMON 6 // summoned by PDA - var/is_attacking = 0 var/is_ranged = 0 var/awaiting_surrender = 0 - var/obj/secbot_listener/listener = null - var/beacon_freq = 1445 // Navigation beacon frequency - var/control_freq = BOT_FREQ // Bot control frequency - var/list/path = list() - var/frustration = 0 - var/turf/patrol_target = null // This is where we are headed - var/closest_dist // Used to find the closest beakon - var/destination = "__nearest__" // This is the current beacon's ID - var/next_destination = "__nearest__" // This is the next beacon's ID - var/nearest_beacon // Tag of the beakon that we assume to be the closest one - - var/bot_version = 1.3 var/list/threat_found_sounds = new('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg') var/list/preparing_arrest_sounds = new('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg') @@ -48,24 +27,8 @@ desc = "It's Officer Beep O'sky! Powered by a potato and a shot of whiskey." auto_patrol = 1 -/mob/living/bot/secbot/New() - ..() - listener = new /obj/secbot_listener(src) - listener.secbot = src - - spawn(5) // Since beepsky is made on the start... this delay is necessary - if(radio_controller) - radio_controller.add_object(listener, control_freq, filter = RADIO_SECBOT) - radio_controller.add_object(listener, beacon_freq, filter = RADIO_NAVBEACONS) - -/mob/living/bot/secbot/turn_off() - ..() - target = null - frustration = 0 - mode = SECBOT_IDLE - /mob/living/bot/secbot/update_icons() - if(on && is_attacking) + if(on && busy) icon_state = "secbot-c" else icon_state = "secbot[on]" @@ -78,7 +41,7 @@ /mob/living/bot/secbot/attack_hand(var/mob/user) user.set_machine(src) var/dat - dat += "Automatic Security Unit v[bot_version]

" + dat += "Automatic Security Unit

" dat += "Status: [on ? "On" : "Off"]
" dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" dat += "Maintenance panel is [open ? "opened" : "closed"]" @@ -89,7 +52,7 @@ dat += "Operating Mode: [arrest_type ? "Detain" : "Arrest"]
" dat += "Report Arrests: [declare_arrests ? "Yes" : "No"]
" dat += "Auto Patrol: [auto_patrol ? "On" : "Off"]" - user << browse("Securitron v[bot_version] controls[dat]", "window=autosec") + user << browse("Securitron controls[dat]", "window=autosec") onclose(user, "autosec") return @@ -118,7 +81,6 @@ arrest_type = !arrest_type if("patrol") auto_patrol = !auto_patrol - mode = SECBOT_IDLE if("declarearrests") declare_arrests = !declare_arrests attack_hand(usr) @@ -129,127 +91,47 @@ if(health < curhealth) target = user awaiting_surrender = 5 - mode = SECBOT_HUNT -/mob/living/bot/secbot/Life() +/mob/living/bot/secbot/startPatrol() + if(!locked) // Stop running away when we set you up + return ..() - if(!on) - return - if(client) - return - if(!target) - scan_view() +/mob/living/bot/secbot/confirmTarget(var/atom/A) + if(!..()) + return 0 - if(!locked && (mode == SECBOT_START_PATROL || mode == SECBOT_PATROL)) // Stop running away when we set you up - mode = SECBOT_IDLE + return (check_threat(A) > 3) - switch(mode) - if(SECBOT_IDLE) - if(auto_patrol && locked) - mode = SECBOT_START_PATROL +/mob/living/bot/secbot/lookForTargets() + for(var/mob/living/M in view(src)) + if(M.stat == DEAD) + continue + if(confirmTarget(M)) + var/threat = check_threat(M) + target = M + awaiting_surrender = -1 + say("Level [threat] infraction alert!") + custom_emote(1, "points at [M.name]!") return - if(SECBOT_HUNT) // Target is in the view or has been recently - chase it - if(frustration > 7) - target = null - frustration = 0 - awaiting_surrender = 0 - mode = SECBOT_IDLE - return - if(target) - var/threat = check_threat(target) - if(threat < 4) // Re-evaluate in case they dropped the weapon or something - target = null - frustration = 0 - awaiting_surrender = 0 - mode = SECBOT_IDLE - return - if(!(target in view(7, src))) - ++frustration - if(Adjacent(target)) - mode = SECBOT_ARREST - return - else - if(is_ranged) - RangedAttack(target) - else - step_towards(src, target) // Melee bots chase a bit faster - spawn(8) - if(!Adjacent(target)) - step_towards(src, target) - spawn(16) - if(!Adjacent(target)) - step_towards(src, target) +/mob/living/bot/secbot/calcTargetPath() + ..() + if(awaiting_surrender != -1) + awaiting_surrender = 5 // This implies that a) we have already approached the target and b) it has moved after the warning - if(SECBOT_ARREST) // Target is next to us - attack it - if(!target) - mode = SECBOT_IDLE - if(!Adjacent(target)) - awaiting_surrender = 5 // I'm done playing nice - mode = SECBOT_HUNT - return - var/threat = check_threat(target) - if(threat < 4) - target = null - awaiting_surrender = 0 - frustration = 0 - mode = SECBOT_IDLE - return - if(awaiting_surrender < 5 && ishuman(target) && !target.lying) - if(awaiting_surrender == 0) - say("Down on the floor, [target]! You have five seconds to comply.") - ++awaiting_surrender - else - UnarmedAttack(target) - if(ishuman(target) && declare_arrests) - var/area/location = get_area(src) - broadcast_security_hud_message("[src] is [arrest_type ? "detaining" : "arresting"] a level [check_threat(target)] suspect [target] in [location].", src) - return - - if(SECBOT_START_PATROL) - if(path.len && patrol_target) - mode = SECBOT_PATROL - return - else if(patrol_target) - spawn(0) - calc_path() - if(!path.len) - patrol_target = null - mode = SECBOT_IDLE - else - mode = SECBOT_PATROL - if(!patrol_target) - if(next_destination) - find_next_target() - else - find_patrol_target() - say("Engaging patrol mode.") - mode = SECBOT_WAIT_PATROL - return - - if(SECBOT_WAIT_PATROL) - if(patrol_target) - mode = SECBOT_START_PATROL - else - ++frustration - if(frustration > 120) - frustration = 0 - mode = SECBOT_IDLE - - if(SECBOT_PATROL) - patrol_step() - spawn(10) - patrol_step() - return - - if(SECBOT_SUMMON) - patrol_step() - spawn(8) - patrol_step() - spawn(16) - patrol_step() - return +/mob/living/bot/secbot/handleAdjacentTarget() + if(awaiting_surrender < 5 && ishuman(target) && !target:lying) + if(awaiting_surrender == -1) + say("Down on the floor, [target]! You have five seconds to comply.") + ++awaiting_surrender + else + UnarmedAttack(target) + if(ishuman(target) && declare_arrests) + var/area/location = get_area(src) + broadcast_security_hud_message("[src] is [arrest_type ? "detaining" : "arresting"] a level [check_threat(target)] suspect [target] in [location].", src) + + // say("Engaging patrol mode.") /mob/living/bot/secbot/UnarmedAttack(var/mob/M, var/proximity) if(!..()) @@ -271,31 +153,33 @@ C.stun_effect_act(0, 60, null) playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) do_attack_animation(C) - is_attacking = 1 + busy = 1 update_icons() spawn(2) - is_attacking = 0 + busy = 0 update_icons() visible_message("[C] was prodded by [src] with a stun baton!") else playsound(loc, 'sound/weapons/handcuffs.ogg', 30, 1, -2) visible_message("[src] is trying to put handcuffs on [C]!") + busy = 1 if(do_mob(src, C, 60)) if(!C.handcuffed) C.handcuffed = new /obj/item/weapon/handcuffs(C) C.update_inv_handcuffed() if(preparing_arrest_sounds.len) playsound(loc, pick(preparing_arrest_sounds), 50, 0) + busy = 0 else if(istype(M, /mob/living/simple_animal)) var/mob/living/simple_animal/S = M S.AdjustStunned(10) S.adjustBruteLoss(15) do_attack_animation(M) playsound(loc, "swing_hit", 50, 1, -1) - is_attacking = 1 + busy = 1 update_icons() spawn(2) - is_attacking = 0 + busy = 0 update_icons() visible_message("[M] was beaten by [src] with a stun baton!") @@ -319,30 +203,8 @@ new /obj/effect/decal/cleanable/blood/oil(Tsec) qdel(src) -/mob/living/bot/secbot/proc/scan_view() - for(var/mob/living/M in view(7, src)) - if(M.invisibility >= INVISIBILITY_LEVEL_ONE) - continue - if(M.stat) - continue - - var/threat = check_threat(M) - - if(threat >= 4) - target = M - say("Level [threat] infraction alert!") - custom_emote(1, "points at [M.name]!") - mode = SECBOT_HUNT - break - return - -/mob/living/bot/secbot/proc/calc_path(var/turf/avoid = null) - path = AStar(loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid) - if(!path) - path = list() - /mob/living/bot/secbot/proc/check_threat(var/mob/living/M) - if(!M || !istype(M) || M.stat || src == M) + if(!M || !istype(M) || M.stat == DEAD || src == M) return 0 if(emagged) @@ -350,131 +212,6 @@ return M.assess_perp(access_scanner, 0, idcheck, check_records, check_arrest) -/mob/living/bot/secbot/proc/patrol_step() - if(loc == patrol_target) - patrol_target = null - path = list() - mode = SECBOT_IDLE - return - - if(path.len && patrol_target) - var/turf/next = path[1] - if(loc == next) - path -= next - return - var/moved = step_towards(src, next) - if(moved) - path -= next - frustration = 0 - else - ++frustration - if(frustration > 5) // Make a new path - mode = SECBOT_START_PATROL - return - else - mode = SECBOT_START_PATROL - -/mob/living/bot/secbot/proc/find_patrol_target() - send_status() - nearest_beacon = null - next_destination = "__nearest__" - listener.post_signal(beacon_freq, "findbeacon", "patrol") - -/mob/living/bot/secbot/proc/find_next_target() - send_status() - nearest_beacon = null - listener.post_signal(beacon_freq, "findbeacon", "patrol") - -/mob/living/bot/secbot/proc/send_status() - var/list/kv = list( - "type" = "secbot", - "name" = name, - "loca" = get_area(loc), - "mode" = mode - ) - listener.post_signal_multiple(control_freq, kv) - -/obj/secbot_listener - var/mob/living/bot/secbot/secbot = null - -/obj/secbot_listener/proc/post_signal(var/freq, var/key, var/value) // send a radio signal with a single data key/value pair - post_signal_multiple(freq, list("[key]" = value)) - -/obj/secbot_listener/proc/post_signal_multiple(var/freq, var/list/keyval) // send a radio signal with multiple data key/values - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) - if(!frequency) - return - - var/datum/signal/signal = new() - signal.source = secbot - signal.transmission_method = 1 - signal.data = keyval.Copy() - - if(signal.data["findbeacon"]) - frequency.post_signal(secbot, signal, filter = RADIO_NAVBEACONS) - else if(signal.data["type"] == "secbot") - frequency.post_signal(secbot, signal, filter = RADIO_SECBOT) - else - frequency.post_signal(secbot, signal) - -/obj/secbot_listener/receive_signal(datum/signal/signal) - if(!secbot || !secbot.on) - return - - var/recv = signal.data["command"] - if(recv == "bot_status") - secbot.send_status() - return - - if(signal.data["active"] == secbot) - switch(recv) - if("stop") - secbot.mode = SECBOT_IDLE - secbot.auto_patrol = 0 - return - - if("go") - secbot.mode = SECBOT_IDLE - secbot.auto_patrol = 1 - return - - if("summon") - secbot.patrol_target = signal.data["target"] - secbot.next_destination = secbot.destination - secbot.destination = null - //secbot.awaiting_beacon = 0 - secbot.mode = SECBOT_SUMMON - secbot.calc_path() - secbot.say("Responding.") - return - - recv = signal.data["beacon"] - var/valid = signal.data["patrol"] - if(!recv || !valid) - return - - if(recv == secbot.next_destination) // This beacon is our target - secbot.destination = secbot.next_destination - secbot.patrol_target = signal.source.loc - secbot.next_destination = signal.data["next_patrol"] - else if(secbot.next_destination == "__nearest__") - var/dist = get_dist(secbot, signal.source.loc) - if(dist <= 1) - return - - if(secbot.nearest_beacon) - if(dist < secbot.closest_dist) - secbot.nearest_beacon = recv - secbot.patrol_target = secbot.nearest_beacon - secbot.next_destination = signal.data["next_patrol"] - secbot.closest_dist = dist - return - else - secbot.nearest_beacon = recv - secbot.patrol_target = secbot.nearest_beacon - secbot.next_destination = signal.data["next_patrol"] - secbot.closest_dist = dist - //Secbot Construction /obj/item/clothing/head/helmet/attackby(var/obj/item/device/assembly/signaler/S, mob/user as mob) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 429e82b3d00..9352ada1c53 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -43,8 +43,6 @@ silent = 0 else updatehealth() - handle_stunned() - handle_weakened() if(health <= 0) death() blinded = 1 @@ -52,7 +50,6 @@ return 1 if(paralysis && paralysis > 0) - handle_paralysed() blinded = 1 stat = UNCONSCIOUS if(halloss > 0) diff --git a/code/modules/mob/living/carbon/brain/emote.dm b/code/modules/mob/living/carbon/brain/emote.dm index 1995ff5e1cc..f29167f1f37 100644 --- a/code/modules/mob/living/carbon/brain/emote.dm +++ b/code/modules/mob/living/carbon/brain/emote.dm @@ -70,7 +70,7 @@ for(var/mob/M in dead_mob_list) if (!M.client || istype(M, /mob/new_player)) continue //skip monkeys, leavers, and new_players - if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null))) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_sight) && !(M in viewers(src,null))) M.show_message(message) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 283bb595c60..29ef1a24846 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -157,8 +157,6 @@ src << "\red All systems restored." emp_damage -= 1 - //Other - handle_statuses() return 1 /mob/living/carbon/brain/handle_regular_hud_updates() @@ -254,4 +252,4 @@ emp_damage += rand(10,20) if(3) emp_damage += rand(0,10) - ..()*/ + ..()*/ diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 0abdc6ef9ad..235abffef60 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -48,7 +48,7 @@ else if(gender == FEMALE) use_gender = "a gynoid" - msg += ", [use_gender]!" + msg += ", [use_gender]!" else if(species.name != "Human") msg += ", \a [species.name]!" diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 9a7cbbe06a4..77fe9868579 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -22,8 +22,15 @@ var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80 if (hungry >= 70) tally += hungry/50 - if(wear_suit) - tally += wear_suit.slowdown + // Loop through some slots, and add up their slowdowns. Shoes are handled below, unfortunately. + // Includes slots which can provide armor, the back slot, and suit storage. + for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store) ) + tally += I.slowdown + + // Hands are also included, to make the 'take off your armor instantly and carry it with you to go faster' trick no longer viable. + // This is done seperately to disallow negative numbers. + for(var/obj/item/I in list(r_hand, l_hand) ) + tally += max(I.slowdown, 0) if(istype(buckled, /obj/structure/bed/chair/wheelchair)) for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 47cca0e5cff..b0a45faff66 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -149,6 +149,23 @@ return ONE_ATMOSPHERE + pressure_difference /mob/living/carbon/human/handle_disabilities() + ..() + //Vision + if(species.vision_organ) + if(internal_organs_by_name[species.vision_organ]) // Vision organs cut out? Permablind. + eye_blind = 0 + blinded = 0 + eye_blurry = 0 + else + eye_blind = 1 + blinded = 1 + eye_blurry = 1 + else // Presumably if a species has no vision organs, they see via some other means. + eye_blind = 0 + blinded = 0 + eye_blurry = 0 + + if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 1)) src << "\red You have a seizure!" @@ -174,13 +191,7 @@ emote("twitch") if(2 to 3) say("[prob(50) ? ";" : ""][pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER", "TITS")]") - var/old_x = pixel_x - var/old_y = pixel_y - pixel_x += rand(-2,2) - pixel_y += rand(-1,1) - sleep(2) - pixel_x = old_x - pixel_y = old_y + make_jittery(100) return if (disabilities & NERVOUS) speech_problem_flag = 1 @@ -601,31 +612,32 @@ //Body temperature is too hot. fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode - - if(bodytemperature < species.heat_level_2) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) - else if(bodytemperature < species.heat_level_3) - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) - else - take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 2) + var/burn_dam = 0 + switch(bodytemperature) + if(species.heat_level_1 to species.heat_level_2) + burn_dam = HEAT_DAMAGE_LEVEL_1 + if(species.heat_level_2 to species.heat_level_3) + burn_dam = HEAT_DAMAGE_LEVEL_2 + if(species.heat_level_3 to INFINITY) + burn_dam = HEAT_DAMAGE_LEVEL_3 + take_overall_damage(burn=burn_dam, used_weapon = "High Body Temperature") + fire_alert = max(fire_alert, 2) else if(bodytemperature <= species.cold_level_1) fire_alert = max(fire_alert, 1) if(status_flags & GODMODE) return 1 //godmode if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - if(bodytemperature > species.cold_level_2) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 1) - else if(bodytemperature > species.cold_level_3) - take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 1) - else - take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "High Body Temperature") - fire_alert = max(fire_alert, 1) + var/burn_dam = 0 + switch(bodytemperature) + if(-INFINITY to species.cold_level_3) + burn_dam = COLD_DAMAGE_LEVEL_1 + if(species.cold_level_3 to species.cold_level_2) + burn_dam = COLD_DAMAGE_LEVEL_2 + if(species.cold_level_2 to species.cold_level_1) + burn_dam = COLD_DAMAGE_LEVEL_3 + take_overall_damage(burn=burn_dam, used_weapon = "Low Body Temperature") + fire_alert = max(fire_alert, 1) // Account for massive pressure differences. Done by Polymorph // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! @@ -711,85 +723,25 @@ //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list) /mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = 0 + . = 0 //Handle normal clothing - if(head) - if(head.max_heat_protection_temperature && head.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= head.heat_protection - if(wear_suit) - if(wear_suit.max_heat_protection_temperature && wear_suit.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_suit.heat_protection - if(w_uniform) - if(w_uniform.max_heat_protection_temperature && w_uniform.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= w_uniform.heat_protection - if(shoes) - if(shoes.max_heat_protection_temperature && shoes.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= shoes.heat_protection - if(gloves) - if(gloves.max_heat_protection_temperature && gloves.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= gloves.heat_protection - if(wear_mask) - if(wear_mask.max_heat_protection_temperature && wear_mask.max_heat_protection_temperature >= temperature) - thermal_protection_flags |= wear_mask.heat_protection - - return thermal_protection_flags - -/mob/living/carbon/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. - var/thermal_protection_flags = get_heat_protection_flags(temperature) - - var/thermal_protection = 0.0 - if(thermal_protection_flags) - if(thermal_protection_flags & HEAD) - thermal_protection += THERMAL_PROTECTION_HEAD - if(thermal_protection_flags & UPPER_TORSO) - thermal_protection += THERMAL_PROTECTION_UPPER_TORSO - if(thermal_protection_flags & LOWER_TORSO) - thermal_protection += THERMAL_PROTECTION_LOWER_TORSO - if(thermal_protection_flags & LEG_LEFT) - thermal_protection += THERMAL_PROTECTION_LEG_LEFT - if(thermal_protection_flags & LEG_RIGHT) - thermal_protection += THERMAL_PROTECTION_LEG_RIGHT - if(thermal_protection_flags & FOOT_LEFT) - thermal_protection += THERMAL_PROTECTION_FOOT_LEFT - if(thermal_protection_flags & FOOT_RIGHT) - thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT - if(thermal_protection_flags & ARM_LEFT) - thermal_protection += THERMAL_PROTECTION_ARM_LEFT - if(thermal_protection_flags & ARM_RIGHT) - thermal_protection += THERMAL_PROTECTION_ARM_RIGHT - if(thermal_protection_flags & HAND_LEFT) - thermal_protection += THERMAL_PROTECTION_HAND_LEFT - if(thermal_protection_flags & HAND_RIGHT) - thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - - - return min(1,thermal_protection) + for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask)) + if(C) + if(C.max_heat_protection_temperature && C.max_heat_protection_temperature >= temperature) + . |= C.heat_protection //See proc/get_heat_protection_flags(temperature) for the description of this proc. /mob/living/carbon/human/proc/get_cold_protection_flags(temperature) - var/thermal_protection_flags = 0 + . = 0 //Handle normal clothing + for(var/obj/item/clothing/C in list(head,wear_suit,w_uniform,shoes,gloves,wear_mask)) + if(C) + if(C.min_cold_protection_temperature && C.min_cold_protection_temperature <= temperature) + . |= C.cold_protection - if(head) - if(head.min_cold_protection_temperature && head.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= head.cold_protection - if(wear_suit) - if(wear_suit.min_cold_protection_temperature && wear_suit.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_suit.cold_protection - if(w_uniform) - if(w_uniform.min_cold_protection_temperature && w_uniform.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= w_uniform.cold_protection - if(shoes) - if(shoes.min_cold_protection_temperature && shoes.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= shoes.cold_protection - if(gloves) - if(gloves.min_cold_protection_temperature && gloves.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= gloves.cold_protection - if(wear_mask) - if(wear_mask.min_cold_protection_temperature && wear_mask.min_cold_protection_temperature <= temperature) - thermal_protection_flags |= wear_mask.cold_protection - - return thermal_protection_flags +/mob/living/carbon/human/get_heat_protection(temperature) //Temperature is the temperature you're being exposed to. + var/thermal_protection_flags = get_heat_protection_flags(temperature) + return get_thermal_protection(thermal_protection_flags) /mob/living/carbon/human/get_cold_protection(temperature) if(COLD_RESISTANCE in mutations) @@ -797,33 +749,34 @@ temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. var/thermal_protection_flags = get_cold_protection_flags(temperature) + return get_thermal_protection(thermal_protection_flags) - var/thermal_protection = 0.0 - if(thermal_protection_flags) - if(thermal_protection_flags & HEAD) - thermal_protection += THERMAL_PROTECTION_HEAD - if(thermal_protection_flags & UPPER_TORSO) - thermal_protection += THERMAL_PROTECTION_UPPER_TORSO - if(thermal_protection_flags & LOWER_TORSO) - thermal_protection += THERMAL_PROTECTION_LOWER_TORSO - if(thermal_protection_flags & LEG_LEFT) - thermal_protection += THERMAL_PROTECTION_LEG_LEFT - if(thermal_protection_flags & LEG_RIGHT) - thermal_protection += THERMAL_PROTECTION_LEG_RIGHT - if(thermal_protection_flags & FOOT_LEFT) - thermal_protection += THERMAL_PROTECTION_FOOT_LEFT - if(thermal_protection_flags & FOOT_RIGHT) - thermal_protection += THERMAL_PROTECTION_FOOT_RIGHT - if(thermal_protection_flags & ARM_LEFT) - thermal_protection += THERMAL_PROTECTION_ARM_LEFT - if(thermal_protection_flags & ARM_RIGHT) - thermal_protection += THERMAL_PROTECTION_ARM_RIGHT - if(thermal_protection_flags & HAND_LEFT) - thermal_protection += THERMAL_PROTECTION_HAND_LEFT - if(thermal_protection_flags & HAND_RIGHT) - thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - - return min(1,thermal_protection) +/mob/living/carbon/human/proc/get_thermal_protection(var/flags) + .=0 + if(flags) + if(flags & HEAD) + . += THERMAL_PROTECTION_HEAD + if(flags & UPPER_TORSO) + . += THERMAL_PROTECTION_UPPER_TORSO + if(flags & LOWER_TORSO) + . += THERMAL_PROTECTION_LOWER_TORSO + if(flags & LEG_LEFT) + . += THERMAL_PROTECTION_LEG_LEFT + if(flags & LEG_RIGHT) + . += THERMAL_PROTECTION_LEG_RIGHT + if(flags & FOOT_LEFT) + . += THERMAL_PROTECTION_FOOT_LEFT + if(flags & FOOT_RIGHT) + . += THERMAL_PROTECTION_FOOT_RIGHT + if(flags & ARM_LEFT) + . += THERMAL_PROTECTION_ARM_LEFT + if(flags & ARM_RIGHT) + . += THERMAL_PROTECTION_ARM_RIGHT + if(flags & HAND_LEFT) + . += THERMAL_PROTECTION_HAND_LEFT + if(flags & HAND_RIGHT) + . += THERMAL_PROTECTION_HAND_RIGHT + return min(1,.) /mob/living/carbon/human/handle_chemicals_in_body() @@ -860,9 +813,9 @@ var/turf/T = loc var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T if(L) - light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights + light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 2 //hardcapped so it's not abused by having a ton of flashlights else - light_amount = 5 + light_amount = 10 nutrition += light_amount traumatic_shock -= light_amount @@ -915,6 +868,7 @@ return //TODO: DEFERRED +//DO NOT CALL handle_statuses() from this proc, it's called from living/Life() as long as this returns a true value. /mob/living/carbon/human/handle_regular_status_updates() if(!handle_some_updates()) return 0 @@ -968,19 +922,16 @@ animate_tail_reset() adjustHalLoss(-3) - if(paralysis) - AdjustParalysis(-1) - - else if(sleeping) - speech_problem_flag = 1 - handle_dreams() - if (mind) - //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar. - if(client || sleeping > 3) - AdjustSleeping(-1) - if( prob(2) && health && !hal_crit ) - spawn(0) - emote("snore") + if(sleeping) + speech_problem_flag = 1 + handle_dreams() + if (mind) + //Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar. + if(client || sleeping > 3) + AdjustSleeping(-1) + if( prob(2) && health && !hal_crit ) + spawn(0) + emote("snore") //CONSCIOUS else stat = CONSCIOUS @@ -1057,9 +1008,6 @@ jitteriness = max(0, jitteriness - 3) adjustHalLoss(-1) - //Other - handle_statuses() - if (drowsyness) drowsyness-- eye_blurry = max(2, eye_blurry) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 797b9b1fe63..e8a83045100 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -48,7 +48,7 @@ // Combat vars. var/total_health = 100 // Point at which the mob will enter crit. - var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat. + var/list/unarmed_types = list( // Possible unarmed attacks that the mob will use in combat, /datum/unarmed_attack, /datum/unarmed_attack/bite ) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 8817c435288..157310291a4 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -116,7 +116,7 @@ for (var/mob/M in dead_mob_list) //does this include players who joined as observers as well? if (!(M.client)) continue - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) listening |= M //Pass whispers on to anything inside the immediate listeners. diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 28a2f938dda..7db2bcf5c85 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -106,14 +106,11 @@ else if (src.paralysis || src.stunned || src.weakened || (status_flags && FAKEDEATH)) //Stunned etc. if (src.stunned > 0) - AdjustStunned(-1) src.stat = 0 if (src.weakened > 0) - AdjustWeakened(-1) src.lying = 0 src.stat = 0 if (src.paralysis > 0) - AdjustParalysis(-1) src.blinded = 0 src.lying = 0 src.stat = 0 diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index f8646fab95b..06501b92b0e 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -1,4 +1,3 @@ - /mob/living/carbon/process_resist() //drop && roll @@ -17,14 +16,17 @@ "You extinguish yourself." ) ExtinguishMob() - return + return TRUE - ..() + if(..()) + return TRUE if(handcuffed) spawn() escape_handcuffs() else if(legcuffed) spawn() escape_legcuffs() + else + ..() /mob/living/carbon/proc/escape_handcuffs() //if(!(last_special <= world.time)) return @@ -57,8 +59,8 @@ "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" ) - if(do_after(src, breakouttime)) - if(!handcuffed) + if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) + if(!handcuffed || buckled) return visible_message( "\The [src] manages to remove \the [handcuffed]!", @@ -91,7 +93,7 @@ "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" ) - if(do_after(src, breakouttime)) + if(do_after(src, breakouttime, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) if(!legcuffed || buckled) return visible_message( @@ -113,7 +115,7 @@ "You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)" ) - if(do_after(src, 50)) + if(do_after(src, 5 SECONDS, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) if(!handcuffed || buckled) return @@ -134,7 +136,7 @@ src << "You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)" visible_message("[src] is trying to break the legcuffs!") - if(do_after(src, 50)) + if(do_after(src, 5 SECONDS, incapacitation_flags = INCAPACITATION_DEFAULT & ~INCAPACITATION_RESTRAINED)) if(!legcuffed || buckled) return @@ -166,7 +168,7 @@ "You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)" ) - if(do_after(usr, 1200)) + if(do_after(usr, 2 MINUTES, incapacitation_flags = INCAPACITATION_DEFAULT & ~(INCAPACITATION_RESTRAINED | INCAPACITATION_BUCKLED_FULLY))) if(!buckled) return visible_message("[usr] manages to unbuckle themself!", diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm index df575a8dbe0..76c9a5f8d0a 100644 --- a/code/modules/mob/living/inventory.dm +++ b/code/modules/mob/living/inventory.dm @@ -10,13 +10,13 @@ // Try put it in their backpack if(istype(src.back,/obj/item/weapon/storage)) var/obj/item/weapon/storage/backpack = src.back - if(backpack.contents.len < backpack.storage_slots) + if(backpack.can_be_inserted(newitem, 1)) newitem.forceMove(src.back) return 1 // Try to place it in any item that can store stuff, on the mob. for(var/obj/item/weapon/storage/S in src.contents) - if (S.contents.len < S.storage_slots) + if (S.can_be_inserted(newitem, 1)) newitem.forceMove(S) return 1 return 0 diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 5e7a6e2d90f..c3162b030cd 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -47,7 +47,7 @@ if(handle_regular_status_updates()) // Status & health update, are we dead or alive etc. handle_disabilities() // eye, ear, brain damages - handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc + handle_statuses() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc handle_actions() @@ -94,19 +94,55 @@ stat = CONSCIOUS return 1 -//this updates all special effects: stunned, sleeping, weakened, druggy, stuttering, etc.. -/mob/living/proc/handle_status_effects() - if(paralysis) - paralysis = max(paralysis-1,0) +/mob/living/proc/handle_statuses() + handle_stunned() + handle_weakened() + handle_paralysed() + handle_stuttering() + handle_silent() + handle_drugged() + handle_slurring() + +/mob/living/proc/handle_stunned() if(stunned) - stunned = max(stunned-1,0) + AdjustStunned(-1) if(!stunned) update_icons() + return stunned +/mob/living/proc/handle_weakened() if(weakened) weakened = max(weakened-1,0) if(!weakened) update_icons() + return weakened + +/mob/living/proc/handle_stuttering() + if(stuttering) + stuttering = max(stuttering-1, 0) + return stuttering + +/mob/living/proc/handle_silent() + if(silent) + silent = max(silent-1, 0) + return silent + +/mob/living/proc/handle_drugged() + if(druggy) + druggy = max(druggy-1, 0) + return druggy + +/mob/living/proc/handle_slurring() + if(slurring) + slurring = max(slurring-1, 0) + return slurring + +/mob/living/proc/handle_paralysed() + if(paralysis) + AdjustParalysis(-1) + if(!paralysis) + update_icons() + return paralysis /mob/living/proc/handle_disabilities() //Eyes diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 4edcd71a47d..a3e2eae1897 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -125,10 +125,10 @@ default behaviour is: ..() if (!istype(AM, /atom/movable) || AM.anchored) if(confused && prob(50) && m_intent=="run") - Paralyse(1) + Weaken(2) playsound(loc, "punch", 25, 1, -1) visible_message("[src] [pick("ran", "slammed")] into \the [AM]!") - src.take_organ_damage(5) + src.apply_damage(5, BRUTE) return if (!now_pushing) now_pushing = 1 @@ -510,52 +510,38 @@ default behaviour is: if ((get_dist(src, pulling) > 1 || diag)) if (isliving(pulling)) var/mob/living/M = pulling - var/ok = 1 - if (locate(/obj/item/weapon/grab, M.grabbed_by)) - if (prob(75)) - var/obj/item/weapon/grab/G = pick(M.grabbed_by) - if (istype(G, /obj/item/weapon/grab)) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] has been pulled from []'s grip by []", G.affecting, G.assailant, src), 1) - //G = null - qdel(G) - else - ok = 0 - if (locate(/obj/item/weapon/grab, M.grabbed_by.len)) - ok = 0 - if (ok) - var/atom/movable/t = M.pulling - M.stop_pulling() + var/atom/movable/t = M.pulling + M.stop_pulling() - if(!istype(M.loc, /turf/space)) - var/area/A = get_area(M) - if(A.has_gravity) - //this is the gay blood on floor shit -- Added back -- Skie - if (M.lying && (prob(M.getBruteLoss() / 6))) + if(!istype(M.loc, /turf/space)) + var/area/A = get_area(M) + if(A.has_gravity) + //this is the gay blood on floor shit -- Added back -- Skie + if (M.lying && (prob(M.getBruteLoss() / 6))) + var/turf/location = M.loc + if (istype(location, /turf/simulated)) + location.add_blood(M) + //pull damage with injured people + if(prob(25)) + M.adjustBruteLoss(1) + visible_message("\The [M]'s [M.isSynthetic() ? "state worsens": "wounds open more"] from being dragged!") + if(M.pull_damage()) + if(prob(25)) + M.adjustBruteLoss(2) + visible_message("\The [M]'s [M.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!") var/turf/location = M.loc if (istype(location, /turf/simulated)) location.add_blood(M) - //pull damage with injured people - if(prob(25)) - M.adjustBruteLoss(1) - visible_message("\The [M]'s [M.isSynthetic() ? "state worsens": "wounds open more"] from being dragged!") - if(M.pull_damage()) - if(prob(25)) - M.adjustBruteLoss(2) - visible_message("\The [M]'s [M.isSynthetic() ? "state" : "wounds"] worsen terribly from being dragged!") - var/turf/location = M.loc - if (istype(location, /turf/simulated)) - location.add_blood(M) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/blood_volume = round(H.vessel.get_reagent_amount("blood")) - if(blood_volume > 0) - H.vessel.remove_reagent("blood", 1) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/blood_volume = round(H.vessel.get_reagent_amount("blood")) + if(blood_volume > 0) + H.vessel.remove_reagent("blood", 1) - step(pulling, get_dir(pulling.loc, T)) - if(t) - M.start_pulling(t) + step(pulling, get_dir(pulling.loc, T)) + if(t) + M.start_pulling(t) else if (pulling) if (istype(pulling, /obj/structure/window)) @@ -595,11 +581,13 @@ default behaviour is: //unbuckling yourself if(buckled) spawn() escape_buckle() + return TRUE //Breaking out of a locker? if( src.loc && (istype(src.loc, /obj/structure/closet)) ) var/obj/structure/closet/C = loc spawn() C.mob_breakout(src) + return TRUE /mob/living/proc/escape_inventory(obj/item/weapon/holder/H) if(H != src.loc) return @@ -662,7 +650,7 @@ default behaviour is: src << "You are now [resting ? "resting" : "getting up"]" /mob/living/proc/is_allowed_vent_crawl_item(var/obj/item/carried_item) - return isnull(get_inventory_slot(carried_item)) + return (get_inventory_slot(carried_item) == 0) /mob/living/simple_animal/spiderbot/is_allowed_vent_crawl_item(var/obj/item/carried_item) if(carried_item == held_item) @@ -730,10 +718,12 @@ default behaviour is: return if(!ignore_items) + var/list/badItems = list() for(var/obj/item/carried_item in contents)//If the monkey got on objects. - if(is_allowed_vent_crawl_item(carried_item)) - continue - src << "You can't be carrying items or have items equipped when vent crawling!" + if(!is_allowed_vent_crawl_item(carried_item)) + badItems += carried_item.name + if(badItems.len) + src << "Your [english_list(badItems)] prevent[badItems.len == 1 ? "s" : ""] you from ventcrawling." return if(isslime(src)) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index fe33cfdcb96..54af2697ecd 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -248,7 +248,7 @@ proc/get_radio_key_from_channel(var/channel) for(var/mob/M in player_list) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) + if(M.stat == DEAD && M.client && M.is_preference_enabled(/datum/client_preference/ghost_ears)) listening |= M continue if(M.loc && M.locs[1] in hearturfs) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 761ef5110dc..ee452849255 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -20,7 +20,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/toggle_hidden_verbs, ) -var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.com/1172/ +var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.com/1172/, /mob/living/silicon/ai/proc/ai_announcement, /mob/living/silicon/ai/proc/ai_call_shuttle, /mob/living/silicon/ai/proc/ai_camera_track, diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 52c075552db..537e7c0c50f 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -121,11 +121,11 @@ toggle = 0 on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1) - data_core.get_manifest_json() + data_core.get_manifest_list() var/data[0] // This is dumb, but NanoUI breaks if it has no data to send - data["manifest"] = list("__json_cache" = ManifestJSON) + data["manifest"] = PDA_Manifest ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open) if(!ui) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 88f989f15ef..e91670df5dc 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -11,8 +11,6 @@ //Has a list of items that it can hold. var/list/can_hold = list( /obj/item/weapon/cell, - /obj/item/weapon/firealarm_electronics, - /obj/item/weapon/airalarm_electronics, /obj/item/weapon/airlock_electronics, /obj/item/weapon/tracker_electronics, /obj/item/weapon/module/power_control, @@ -63,9 +61,9 @@ /obj/item/device/mmi, /obj/item/robot_parts, /obj/item/borg/upgrade, - /obj/item/device/flash, //to build borgs - /obj/item/organ/internal/brain, //to insert into MMIs. - /obj/item/stack/cable_coil, //again, for borg building + /obj/item/device/flash, //to build borgs, + /obj/item/organ/internal/brain, //to insert into MMIs, + /obj/item/stack/cable_coil, //again, for borg building, /obj/item/weapon/circuitboard, /obj/item/slime_extract, /obj/item/weapon/reagent_containers/glass, diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index 40f0119c996..b0f89a70ea0 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -9,7 +9,7 @@ message = sanitize(message) - if (stat == 2) + if (stat == DEAD) return say_dead(message) if(copytext(message,1,2) == "*") @@ -34,7 +34,7 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) if(M.client) M << "[src] transmits, \"[message]\"" return 1 return ..(message, 0) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 2d591f4c36b..ee25aebe24e 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -28,10 +28,9 @@ user << "You activate the analyzer's microlaser, analyzing \the [loaded_item] and breaking it down." flick("portable_analyzer_scan", src) playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) - var/list/temp_tech = ConvertReqString2List(loaded_item.origin_tech) - for(var/T in temp_tech) - files.UpdateTech(T, temp_tech[T]) - user << "\The [loaded_item] had level [temp_tech[T]] in [T]." + for(var/T in loaded_item.origin_tech) + files.UpdateTech(T, loaded_item.origin_tech[T]) + user << "\The [loaded_item] had level [loaded_item.origin_tech[T]] in [CallTechName(T)]." loaded_item = null for(var/obj/I in contents) for(var/mob/M in I.contents) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ed8ce8f9d80..69371109ec7 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -20,6 +20,7 @@ var/global/list/robot_modules = list( w_class = 100.0 item_state = "electronic" flags = CONDUCT + var/hide_on_manifest = 0 var/channels = list() var/networks = list() var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK_TAJR = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0) @@ -617,6 +618,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/syndicate name = "illegal robot module" + hide_on_manifest = 1 languages = list( LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, @@ -651,6 +653,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/security/combat name = "combat robot module" + hide_on_manifest = 1 sprites = list("Combat Android" = "droid-combat") /obj/item/weapon/robot_module/combat/New() @@ -665,6 +668,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/drone name = "drone module" + hide_on_manifest = 1 no_slip = 1 networks = list(NETWORK_ENGINEERING) @@ -747,6 +751,7 @@ var/global/list/robot_modules = list( /obj/item/weapon/robot_module/drone/construction name = "construction drone module" + hide_on_manifest = 1 channels = list("Engineering" = 1) languages = list() diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm index b153c78c8c1..2d6bfc34b3c 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_captive.dm @@ -28,7 +28,7 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) M << "The captive mind of [src] whispers, \"[message]\"" /mob/living/captive_brain/emote(var/message) diff --git a/code/modules/mob/living/simple_animal/borer/say.dm b/code/modules/mob/living/simple_animal/borer/say.dm index a5e5a34d580..0d4cdad06ef 100644 --- a/code/modules/mob/living/simple_animal/borer/say.dm +++ b/code/modules/mob/living/simple_animal/borer/say.dm @@ -38,5 +38,5 @@ for (var/mob/M in player_list) if (istype(M, /mob/new_player)) continue - else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) M << "[src.truename] whispers to [host], \"[message]\"" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 0c52a38cd1d..b999ec68401 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -71,7 +71,7 @@ //Parrots will generally sit on their pertch unless something catches their eye. //These vars store their preffered perch and if they dont have one, what they can use as a perch var/obj/parrot_perch = null - var/obj/desired_perches = list(/obj/structure/computerframe, /obj/structure/displaycase, \ + var/obj/desired_perches = list(/obj/structure/frame, /obj/structure/displaycase, \ /obj/structure/filingcabinet, /obj/machinery/teleport, \ /obj/machinery/computer, /obj/machinery/clonepod, \ /obj/machinery/dna_scannernew, /obj/machinery/telecomms, \ diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 06daf72260e..2fbad9deee4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -72,7 +72,8 @@ /mob/living/simple_animal/Login() if(src && src.client) - src.client.screen = null + src.client.screen = list() + src.client.screen += src.client.void ..() /mob/living/simple_animal/updatehealth() @@ -110,7 +111,7 @@ turns_since_move++ if(turns_since_move >= turns_per_move) if(!(stop_automated_movement_when_pulled && pulledby)) //Soma animals don't move when pulled - /var/moving_to = 0 // otherwise it always picks 4, fuck if I know. Did I mention fuck BYOND + var/moving_to = 0 // otherwise it always picks 4, fuck if I know. Did I mention fuck BYOND moving_to = pick(cardinal) dir = moving_to //How about we turn them the direction they are moving, yay. Move(get_step(src,moving_to)) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 7658f28ce1e..7f6fdd8aabf 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -30,7 +30,7 @@ world.update_status() client.images = null //remove the images such as AIs being unable to see runes - client.screen = null //remove hud items just in case + client.screen = list() //remove hud items just in case if(hud_used) qdel(hud_used) //remove the hud objects hud_used = new /datum/hud(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index fdbb295b94e..f45fd574cea 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -154,7 +154,9 @@ /mob/proc/buckled() // Preliminary work for a future buckle rewrite, // where one might be fully restrained (like an elecrical chair), or merely secured (shuttle chair, keeping you safe but not otherwise restrained from acting) - return buckled ? FULLY_BUCKLED : UNBUCKLED + if(!buckled) + return UNBUCKLED + return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED /mob/proc/incapacitated(var/incapacitation_flags = INCAPACITATION_DEFAULT) if (stat || paralysis || stunned || weakened || resting || sleeping || (status_flags & FAKEDEATH)) @@ -360,6 +362,7 @@ log_game("[usr.key] AM failed due to disconnect.") return client.screen.Cut() + client.screen += client.void if(!client) log_game("[usr.key] AM failed due to disconnect.") return @@ -544,21 +547,33 @@ if(ismob(AM)) if(!can_pull_mobs || !can_pull_size) - src << "It won't budge!" + src << "They won't budge!" return if((mob_size < M.mob_size) && (can_pull_mobs != MOB_PULL_LARGER)) - src << "It won't budge!" + src << "[M] is too large for you to move!" return if((mob_size == M.mob_size) && (can_pull_mobs == MOB_PULL_SMALLER)) - src << "It won't budge!" + src << "[M] is too heavy for you to move!" return // If your size is larger than theirs and you have some // kind of mob pull value AT ALL, you will be able to pull // them, so don't bother checking that explicitly. + if(M.grabbed_by.len) + // Only start pulling when nobody else has a grab on them + . = 1 + for(var/obj/item/weapon/grab/G in M.grabbed_by) + if(G.assailant != usr) + . = 0 + else + qdel(G) + if(!.) + src << "Somebody has a grip on them!" + return + if(!iscarbon(src)) M.LAssailant = null else @@ -630,7 +645,7 @@ if(.) if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME) stat("Station Time", worldtime2text()) - stat("Round Duration", round_duration()) + stat("Round Duration", round_duration_as_text()) if(client.holder) if(statpanel("Status")) @@ -899,49 +914,6 @@ mob/proc/yank_out_object() anchored = 0 return 1 -/mob/living/proc/handle_statuses() - handle_stunned() - handle_weakened() - handle_stuttering() - handle_silent() - handle_drugged() - handle_slurring() - -/mob/living/proc/handle_stunned() - if(stunned) - AdjustStunned(-1) - return stunned - -/mob/living/proc/handle_weakened() - if(weakened) - weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times - return weakened - -/mob/living/proc/handle_stuttering() - if(stuttering) - stuttering = max(stuttering-1, 0) - return stuttering - -/mob/living/proc/handle_silent() - if(silent) - silent = max(silent-1, 0) - return silent - -/mob/living/proc/handle_drugged() - if(druggy) - druggy = max(druggy-1, 0) - return druggy - -/mob/living/proc/handle_slurring() - if(slurring) - slurring = max(slurring-1, 0) - return slurring - -/mob/living/proc/handle_paralysed() // Currently only used by simple_animal.dm, treated as a special case in other mobs - if(paralysis) - AdjustParalysis(-1) - return paralysis - //Check for brain worms in head. /mob/proc/has_brain_worms() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index ec83ced425f..47e05847402 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -57,8 +57,14 @@ G.dancing = 1 G.adjust_position() dancing = 1 + + //stop pulling the affected + if(assailant.pulling == affecting) + assailant.stop_pulling() + adjust_position() + //Used by throw code to hand over the mob, instead of throwing the grab. The grab is then deleted by the throw code. /obj/item/weapon/grab/proc/throw_held() if(affecting) @@ -91,9 +97,6 @@ assailant.client.screen -= hud assailant.client.screen += hud - if(assailant.pulling == affecting) - assailant.stop_pulling() - if(state <= GRAB_AGGRESSIVE) allow_upgrade = 1 //disallow upgrading if we're grabbing more than one person diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 316e0e2f306..876257be91f 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -385,7 +385,7 @@ proc/is_blind(A) name = realname for(var/mob/M in player_list) - if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_mentor(M.client))) && (M.client.prefs.toggles & CHAT_DEAD)) + if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_mentor(M.client))) && M.is_preference_enabled(/datum/client_preference/show_dsay)) var/follow var/lname if(subject) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 32d12ad0b31..53ec10e31e2 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -286,8 +286,8 @@ //specific vehicle move delays are set in code\modules\vehicles\vehicle.dm move_delay = world.time + tickcomp //drunk driving - if(mob.confused && prob(75)) - direct = pick(cardinal) + if(mob.confused && prob(20)) //vehicles tend to keep moving in the same direction + direct = turn(direct, pick(90, -90)) return mob.buckled.relaymove(mob,direct) if(istype(mob.machine, /obj/machinery)) @@ -310,9 +310,9 @@ else if(mob.confused) switch(mob.m_intent) if("run") - if(prob(75)) direct = pick(cardinal) + if(prob(50)) direct = turn(direct, pick(90, -90)) if("walk") - if(prob(25)) direct = pick(cardinal) + if(prob(25)) direct = turn(direct, pick(90, -90)) move_delay += 2 return mob.buckled.relaymove(mob,direct) @@ -351,13 +351,17 @@ M.animate_movement = 2 return - else if(mob.confused) - switch(mob.m_intent) - if("run") - if(prob(75)) step(mob, pick(cardinal)) - if("walk") - if(prob(25)) step(mob, pick(cardinal)) - else + else + if(mob.confused) + switch(mob.m_intent) + if("run") + if(prob(75)) + direct = turn(direct, pick(90, -90)) + n = get_step(mob, direct) + if("walk") + if(prob(25)) + direct = turn(direct, pick(90, -90)) + n = get_step(mob, direct) . = mob.SelfMove(n, direct) for (var/obj/item/weapon/grab/G in mob) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ed04bdfd60e..43f7d80815b 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -364,7 +364,7 @@ var/dat = "
" dat += "Welcome, [name].
" - dat += "Round Duration: [round_duration()]
" + dat += "Round Duration: [round_duration_as_text()]
" if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles. if(emergency_shuttle.going_to_centcom()) //Shuttle is going to centcomm, not recalled diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index b1eebda6a94..3f8d01d3c00 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -66,11 +66,26 @@ icon_state = "seromi_default" species_allowed = list("Teshari") + teshari_altdefault + name = "Teshari Alt. Default" + icon_state = "seromi_ears" + species_allowed = list("Teshari") + + teshari_tight + name = "Teshari Tight" + icon_state = "seromi_tight" + species_allowed = list("Teshari") + teshari_excited name = "Teshari Spiky" icon_state = "seromi_spiky" species_allowed = list("Teshari") + teshari_spike + name = "Teshari Spike" + icon_state = "seromi_spike" + species_allowed = list("Teshari") + teshari_long name = "Teshari Overgrown" icon_state = "seromi_long" @@ -81,7 +96,7 @@ icon_state = "seromi_burst" species_allowed = list("Teshari") - teshari_burst + teshari_shortburst name = "Teshari Short Starburst" icon_state = "seromi_burst_short" species_allowed = list("Teshari") diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 8eabd679516..ec47effabab 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -54,7 +54,7 @@ src << "Deadchat is globally muted." return - if(client && !(client.prefs.toggles & CHAT_DEAD)) + if(!is_preference_enabled(/datum/client_preference/show_dsay)) usr << "You have deadchat muted." return diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index 147edb1afe3..8a8d92f2c7c 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -15,8 +15,8 @@ mob/var/obj/effect/decal/typing_indicator typing_indicator.icon_state = "typing" if(client && !stat) - typing_indicator.invisibility = invisibility - if(client.prefs.toggles & SHOW_TYPING) + typing_indicator.invisibility = invisibility + if(!is_preference_enabled(/datum/client_preference/show_typing_indicator)) overlays -= typing_indicator else if(state) @@ -54,35 +54,20 @@ mob/var/obj/effect/decal/typing_indicator me_verb(message) /mob/proc/handle_typing_indicator() - if(client) - if(!(client.prefs.toggles & SHOW_TYPING) && !hud_typing) - var/temp = winget(client, "input", "text") + if(is_preference_enabled(/datum/client_preference/show_typing_indicator) && !hud_typing) + var/temp = winget(client, "input", "text") - if (temp != last_typed) - last_typed = temp - last_typed_time = world.time + if (temp != last_typed) + last_typed = temp + last_typed_time = world.time - if (world.time > last_typed_time + TYPING_INDICATOR_LIFETIME) - set_typing_indicator(0) - return - if(length(temp) > 5 && findtext(temp, "Say \"", 1, 7)) - set_typing_indicator(1) - else if(length(temp) > 3 && findtext(temp, "Me ", 1, 5)) - set_typing_indicator(1) + if (world.time > last_typed_time + TYPING_INDICATOR_LIFETIME) + set_typing_indicator(0) + return + if(length(temp) > 5 && findtext(temp, "Say \"", 1, 7)) + set_typing_indicator(1) + else if(length(temp) > 3 && findtext(temp, "Me ", 1, 5)) + set_typing_indicator(1) - else - set_typing_indicator(0) - -/client/verb/typing_indicator() - set name = "Show/Hide Typing Indicator" - set category = "Preferences" - set desc = "Toggles showing an indicator when you are typing emote or say message." - prefs.toggles ^= SHOW_TYPING - prefs.save_preferences() - src << "You will [(prefs.toggles & SHOW_TYPING) ? "no longer" : "now"] display a typing indicator." - - // Clear out any existing typing indicator. - if(prefs.toggles & SHOW_TYPING) - if(istype(mob)) mob.set_typing_indicator(0) - - feedback_add_details("admin_verb","TID") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + else + set_typing_indicator(0) \ No newline at end of file diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm index dd65b7bbd08..3b2b4158e85 100644 --- a/code/modules/nano/nanomapgen.dm +++ b/code/modules/nano/nanomapgen.dm @@ -1,7 +1,7 @@ // This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm #define NANOMAP_ICON_SIZE 4 -#define NANOMAP_MAX_ICON_DIMENSION 1024 +#define NANOMAP_MAX_ICON_DIMENSION 1200 #define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE) @@ -19,42 +19,42 @@ /client/proc/nanomapgen_DumpImage() set name = "Generate NanoUI Map" set category = "Server" - + if(holder) - nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) + nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) /client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) if (endX < 0 || endX > world.maxx) endX = world.maxx - + if (endY < 0 || endY > world.maxy) endY = world.maxy - + if (currentZ < 0 || currentZ > world.maxz) usr << "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]" - + sleep(3) return NANOMAP_TERMINALERR - + if (startX > endX) usr << "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])" - + sleep(3) return NANOMAP_TERMINALERR - + if (startY > endX) usr << "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])" sleep(3) return NANOMAP_TERMINALERR - - var/icon/Tile = icon(file("nano/mapbase1024.png")) + + var/icon/Tile = icon(file("nano/mapbase1200.png")) if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) world.log << "NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]" sleep(3) return NANOMAP_TERMINALERR - - world.log << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" + + world.log << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" usr << "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])" var/count = 0; @@ -62,26 +62,26 @@ for(var/WorldY = startY, WorldY <= endY, WorldY++) var/atom/Turf = locate(WorldX, WorldY, currentZ) - + var/icon/TurfIcon = new(Turf.icon, Turf.icon_state) TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) - + Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) - + count++ - + if (count % 8000 == 0) world.log << "NanoMapGen: [count] tiles done" sleep(1) - + var/mapFilename = "nanomap_z[currentZ]-new.png" - + world.log << "NanoMapGen: sending [mapFilename] to client" usr << browse(Tile, "window=picture;file=[mapFilename];display=0") - + world.log << "NanoMapGen: Done." - + usr << "NanoMapGen: Done. File [mapFilename] uploaded to your cache." if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 7efa4a4fb3c..d351ca9cdd0 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -56,6 +56,7 @@ var/disfigured = 0 // Scarred/burned beyond recognition. var/cannot_amputate // Impossible to amputate. var/cannot_break // Impossible to fracture. + var/cannot_gib // Impossible to gib, distinct from amputation. var/joint = "joint" // Descriptive string used in dislocation. var/amputation_point // Descriptive string used in amputation. var/dislocated = 0 // If you target a joint, you can dislocate the limb, causing temporary damage to the organ. @@ -727,12 +728,16 @@ Note that amputating the affected organ does in fact remove the infection from t "Your [src.name] goes flying off!",\ "You hear a terrible sound of [gore_sound].") if(DROPLIMB_BURN) + if(cannot_gib) + return var/gore = "[(status & ORGAN_ROBOT) ? "": " of burning flesh"]" owner.visible_message( "\The [owner]'s [src.name] flashes away into ashes!",\ "Your [src.name] flashes away into ashes!",\ "You hear a crackling sound[gore].") if(DROPLIMB_BLUNT) + if(cannot_gib) + return var/gore = "[(status & ORGAN_ROBOT) ? "": " in shower of gore"]" var/gore_sound = "[(status & ORGAN_ROBOT) ? "rending sound of tortured metal" : "sickening splatter of gore"]" owner.visible_message( diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index e4edadfe140..6975e747d02 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -104,6 +104,7 @@ icon = 'icons/obj/robot_component.dmi' icon_state = "camera" dead_icon = "camera_broken" + verbs |= /obj/item/organ/internal/eyes/proc/change_eye_color /obj/item/organ/internal/eyes/robot name = "optical sensor" @@ -112,6 +113,26 @@ ..() robotize() +/obj/item/organ/internal/eyes/proc/change_eye_color() + set name = "Change Eye Color" + set desc = "Changes your robotic eye color instantly." + set category = "IC" + set src in usr + + var/current_color = rgb(eye_colour[1],eye_colour[2],eye_colour[3]) + var/new_color = input("Pick a new color for your eyes.","Eye Color", current_color) as null|color + if(new_color && owner) + // input() supplies us with a hex color, which we can't use, so we convert it to rbg values. + var/list/new_color_rgb_list = hex2rgb(new_color) + // First, update mob vars. + owner.r_eyes = new_color_rgb_list[1] + owner.g_eyes = new_color_rgb_list[2] + owner.b_eyes = new_color_rgb_list[3] + // Now sync the organ's eye_colour list. + update_colour() + // Finally, update the eye icon on the mob. + owner.update_eyes() + /obj/item/organ/internal/eyes/replaced(var/mob/living/carbon/human/target) // Apply our eye colour to the target. diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 281f854dac0..e54598d23e4 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -45,4 +45,9 @@ var/datum/robolimb/basic_robolimb /datum/robolimb/wardtakahashi company = "Ward-Takahashi" desc = "This limb features sleek black and white polymers." - icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi' \ No newline at end of file + icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi' + +/datum/robolimb/veymed + company = "Vey-Med" + desc = "This high quality limb is nearly indistinguishable from an organic one." + icon = 'icons/mob/human_races/cyberlimbs/veymed.dmi' \ No newline at end of file diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 5d195f3b0cf..ffc337824de 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -145,6 +145,7 @@ joint = "jaw" amputation_point = "neck" gendered_icon = 1 + cannot_gib = 1 encased = "skull" var/can_intake_reagents = 1 diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index ff93f313c7b..6862e16c615 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -14,6 +14,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins use_power = 1 idle_power_usage = 30 active_power_usage = 200 + frame_type = "fax" var/obj/item/weapon/card/id/scan = null // identification var/authenticated = 0 diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 67eb5c9aeba..57691fed9ba 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -17,12 +17,10 @@ density = 1 anchored = 1 - /obj/structure/filingcabinet/chestdrawer name = "chest drawer" icon_state = "chestdrawer" - /obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete icon_state = "tallcabinet" @@ -46,6 +44,16 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + else if(istype(P, /obj/item/weapon/screwdriver)) + user << "You begin taking the [name] apart." + if(do_after(user, 10)) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You take the [name] apart." + new /obj/item/stack/material/steel( src.loc, 4 ) + for(var/obj/item/I in contents) + I.forceMove(loc) + qdel(src) + return else user << "You can't put [P] in [src]!" @@ -151,7 +159,7 @@ var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src) P.info = "
Medical Record

" P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nSex: [G.fields["sex"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
" - + P.info += "
\n
Medical Data

\nBlood Type: [M.fields["b_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\n
Comments/Log

" var/counter = 1 while(M.fields["com_[counter]"]) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 7d612158b10..7ee79cb923e 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -111,8 +111,8 @@ /* * Parapens */ - /obj/item/weapon/pen/reagent/paralysis - origin_tech = "materials=2;syndicate=5" +/obj/item/weapon/pen/reagent/paralysis + origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5) /obj/item/weapon/pen/reagent/paralysis/New() ..() diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 6d24a8f238d..f29883a54cd 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -9,11 +9,21 @@ idle_power_usage = 30 active_power_usage = 200 power_channel = EQUIP + circuit = /obj/item/weapon/circuitboard/photocopier + frame_type = "photocopier" var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! +/obj/machinery/photocopier/New() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + RefreshParts() + /obj/machinery/photocopier/attack_ai(mob/user as mob) return attack_hand(user) @@ -126,6 +136,12 @@ playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = !anchored user << "You [anchored ? "wrench" : "unwrench"] \the [src]." + + else if(default_deconstruction_screwdriver(user, O)) + return + else if(default_deconstruction_crowbar(user, O)) + return + return /obj/machinery/photocopier/ex_act(severity) diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index a6954e9e2f0..f37cdce7063 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -52,6 +52,10 @@ name = "centcomm rubber stamp" icon_state = "stamp-cent" +/obj/item/weapon/stamp/qm + name = "quartermaster's stamp" + icon_state = "stamp-qm" + // Syndicate stamp to forge documents. /obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob) diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index a70b19421ec..2d7f38e3b99 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -9,6 +9,7 @@ input_level_max = 0 output_level_max = 0 icon_state = "gsmes" + circuit = /obj/item/weapon/circuitboard/batteryrack var/cells_amount = 0 var/capacitors_amount = 0 var/global/list/br_cache = null @@ -22,7 +23,6 @@ //Maybe this should be moved up to obj/machinery /obj/machinery/power/smes/batteryrack/proc/add_parts() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/batteryrack component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high @@ -49,7 +49,7 @@ /obj/machinery/power/smes/batteryrack/update_icon() overlays.Cut() if(stat & BROKEN) return - + if(!br_cache) br_cache = list() br_cache.len = 7 @@ -60,7 +60,7 @@ br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2") br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3") br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4") - + if (output_attempt) overlays += br_cache[1] if(inputting) @@ -83,9 +83,10 @@ if (charge < (capacity / 100)) if (!output_attempt && !input_attempt) playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1) - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/M = new /obj/structure/frame(src.loc) + M.frame_type = "machine" M.state = 2 - M.icon_state = "box_1" + M.icon_state = "machine_1" for(var/obj/I in component_parts) I.loc = src.loc qdel(src) @@ -117,12 +118,12 @@ /obj/machinery/power/smes/batteryrack/makeshift name = "makeshift PSU" desc = "A rack of batteries connected by a mess of wires posing as a PSU." + circuit = /obj/item/weapon/circuitboard/ghettosmes var/overcharge_percent = 0 /obj/machinery/power/smes/batteryrack/makeshift/add_parts() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/ghettosmes component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high component_parts += new /obj/item/weapon/cell/high diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index bfcf1aefa3f..f467cf4dd53 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -12,7 +12,7 @@ 9 1 5 \ | / - 8 - 0 - 4 + 8 - 0 - 4, / | \ 10 2 6 diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 4bbce17aa1a..f3596a5d9a0 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -590,7 +590,7 @@ icon = 'icons/obj/lighting.dmi' force = 2 throwforce = 5 - w_class = 2 + w_class = 1 var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/base_state var/switchcount = 0 // number of times switched diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 400e7281b6f..41e182b91bc 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -287,14 +287,15 @@ else user << "\blue You close the access panel." else if(istype(O, /obj/item/weapon/crowbar) && open) - var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/new_frame = new /obj/structure/frame(src.loc) for(var/obj/item/I in component_parts) I.loc = src.loc while ( sheets > 0 ) DropFuel() + new_frame.frame_type = "machine" new_frame.state = 2 - new_frame.icon_state = "box_1" + new_frame.icon_state = "machine_1" qdel(src) /obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 05dae4fdbfd..29714847151 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -12,6 +12,7 @@ density = 1 anchored = 1 use_power = 0 + circuit = /obj/item/weapon/circuitboard/smes var/capacity = 5e6 // maximum charge var/charge = 1e6 // actual charge diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm index 497e16a885e..f14c084882a 100644 --- a/code/modules/power/smes_construction.dm +++ b/code/modules/power/smes_construction.dm @@ -116,7 +116,6 @@ /obj/machinery/power/smes/buildable/New(var/install_coils = 1) component_parts = list() component_parts += new /obj/item/stack/cable_coil(src,30) - component_parts += new /obj/item/weapon/circuitboard/smes(src) src.wires = new /datum/wires/smes(src) // Allows for mapped-in SMESs with larger capacity/IO @@ -345,9 +344,10 @@ return usr << "\red You have disassembled the SMES cell!" - var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc) + var/obj/structure/frame/M = new /obj/structure/frame(src.loc) + M.frame_type = "machine" M.state = 2 - M.icon_state = "box_1" + M.icon_state = "machine_1" for(var/obj/I in component_parts) I.loc = src.loc component_parts -= I diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 232adb345b8..dd1c2a56b60 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -407,25 +407,27 @@ var/list/solars_list = list() if(do_after(user, 20)) if (src.stat & BROKEN) user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) new /obj/item/weapon/material/shard( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M + A.frame_type = "computer" A.state = 3 - A.icon_state = "3" + A.icon_state = "computer_3" A.anchored = 1 qdel(src) else user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A ) for (var/obj/C in src) C.loc = src.loc A.circuit = M + A.frame_type = "computer" A.state = 4 - A.icon_state = "4" + A.icon_state = "computer_4" A.anchored = 1 qdel(src) else diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 44b36db8ac7..de6c67446ef 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -145,7 +145,7 @@ PreFire(A,user,params) //They're using the new gun system, locate what they're aiming at. return - if(user && user.a_intent == I_HELP) //regardless of what happens, refuse to shoot if help intent is on + if(user && user.a_intent == I_HELP && user.is_preference_enabled(/datum/client_preference/safefiring)) //regardless of what happens, refuse to shoot if help intent is on user << "You refrain from firing your [src] as your intent is set to help." else Fire(A,user,params) //Otherwise, fire normally. @@ -163,6 +163,8 @@ add_fingerprint(user) + user.break_cloak() + if(!special_check(user)) return diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 665e9342c18..5889b523e10 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -5,7 +5,7 @@ desc = "A vicious alien projectile weapon. Parts of it quiver gelatinously, as though the thing is insectile and alive." var/last_regen = 0 - var/spike_gen_time = 100 + var/spike_gen_time = 150 var/max_spikes = 3 var/spikes = 3 release_force = 30 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index c21fc97bd8d..466170e52a4 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -89,7 +89,7 @@ obj/item/weapon/gun/energy/retro max_shots = 4 fire_delay = 35 force = 10 - w_class = 4 + w_class = 5 // So it can't fit in a backpack. accuracy = -3 //shooting at the hip scoped_accuracy = 0 diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index e38740e732f..e03ff739880 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -3,7 +3,7 @@ desc = "A portable anti-armour rifle fitted with a scope, the HI PTR-7 Rifle was originally designed to used against armoured exosuits. It is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells." icon_state = "heavysniper" item_state = "l6closednomag" //placeholder - w_class = 4 + w_class = 5 // So it can't fit in a backpack. force = 10 slot_flags = SLOT_BACK origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index e008d8e58c1..a1048ab7631 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -140,9 +140,6 @@ icon_state = "xray" damage = 50 armor_penetration = 10 - stun = 3 - weaken = 3 - stutter = 3 muzzle_type = /obj/effect/projectile/xray/muzzle tracer_type = /obj/effect/projectile/xray/tracer @@ -170,4 +167,4 @@ muzzle_type = /obj/effect/projectile/stun/muzzle tracer_type = /obj/effect/projectile/stun/tracer - impact_type = /obj/effect/projectile/stun/impact + impact_type = /obj/effect/projectile/stun/impact diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 46b01a9d1bf..b0577bdf5fa 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -23,6 +23,7 @@ owner = newowner loc = null verbs.Cut() + toggle_permission(TARGET_CAN_RADIO) /obj/aiming_overlay/proc/toggle_permission(var/perm) @@ -202,6 +203,7 @@ obj/aiming_overlay/proc/update_aiming_deferred() else owner << "You will no longer aim rather than fire." owner.client.remove_gun_icons() + owner.gun_setting_icon.icon_state = "gun[active]" /obj/aiming_overlay/proc/cancel_aiming(var/no_message = 0) if(!aiming_with || !aiming_at) diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm index ea18fc3a708..9fd2208a358 100644 --- a/code/modules/projectiles/targeting/targeting_triggers.dm +++ b/code/modules/projectiles/targeting/targeting_triggers.dm @@ -1,4 +1,8 @@ -/mob/living/proc/trigger_aiming(var/trigger_type) +//as core click exists at the mob level +/mob/proc/trigger_aiming(var/trigger_type) + return + +/mob/living/trigger_aiming(var/trigger_type) if(!aimed.len) return for(var/obj/aiming_overlay/AO in aimed) @@ -16,14 +20,10 @@ if(!owner.canClick()) return owner.setClickCooldown(5) // Spam prevention, essentially. - if(owner.a_intent == I_HELP) + if(owner.a_intent == I_HELP && owner.is_preference_enabled(/datum/client_preference/safefiring)) owner << "You refrain from firing \the [aiming_with] as your intent is set to help." return owner.visible_message("\The [owner] pulls the trigger reflexively!") var/obj/item/weapon/gun/G = aiming_with if(istype(G)) G.Fire(aiming_at, owner) - -/mob/living/ClickOn(var/atom/A, var/params) - . = ..() - trigger_aiming(TARGET_CAN_CLICK) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index aaec504b39c..c1f2dc0ddf2 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -310,6 +310,7 @@ use_power = 1 idle_power_usage = 5 active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/grinder var/inuse = 0 var/obj/item/weapon/reagent_containers/beaker = null var/limit = 10 @@ -326,6 +327,10 @@ /obj/machinery/reagentgrinder/New() ..() beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + RefreshParts() return /obj/machinery/reagentgrinder/update_icon() @@ -333,6 +338,11 @@ return /obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(beaker) + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ @@ -356,13 +366,13 @@ return if(istype(O,/obj/item/weapon/storage/bag/plants)) + var/obj/item/weapon/storage/bag/plants/bag = O var/failed = 1 for(var/obj/item/G in O.contents) if(!G.reagents || !G.reagents.total_volume) continue failed = 0 - O.contents -= G - G.loc = src + bag.remove_from_storage(G, src) holdingitems += G if(holdingitems && holdingitems.len >= limit) break diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm index 9a49d409e08..2b7e3a832a3 100644 --- a/code/modules/reagents/Chemistry-Readme.dm +++ b/code/modules/reagents/Chemistry-Readme.dm @@ -127,7 +127,7 @@ About the Holder: trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf(). - /atom/proc/create_reagents(var/max_vol) + atom/proc/create_reagents(var/max_vol) Creates a new reagent datum. About Reagents: @@ -285,7 +285,7 @@ About the Tools: By default, all atom have a reagents var - but its empty. if you want to use an object for the chem. system you'll need to add something like this in its new proc: - /atom/proc/create_reagents(var/max_volume) + atom/proc/create_reagents(var/max_volume) Other important stuff: diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 574e1131aad..e7317b32e88 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -55,7 +55,7 @@ return if(!affects_dead && M.stat == DEAD) return - if(overdose && (dose > overdose) && (location != CHEM_TOUCH)) + if(overdose && (volume > overdose) && (location != CHEM_TOUCH)) overdose(M, alien) var/removed = metabolism if(ingest_met && (location == CHEM_INGEST)) diff --git a/code/modules/reagents/dispenser/supply.dm b/code/modules/reagents/dispenser/supply.dm index f4a12d45d38..0487e8f4010 100644 --- a/code/modules/reagents/dispenser/supply.dm +++ b/code/modules/reagents/dispenser/supply.dm @@ -145,7 +145,7 @@ group = "Reagents" #define SEC_PACK(_tname, _type, _name, _cname, _cost, _access)\ - /datum/supply_packs/dispenser_cartridges{\ + datum/supply_packs/dispenser_cartridges{\ _tname {\ name = _name ;\ containername = _cname ;\ @@ -157,7 +157,7 @@ }\ } #define PACK(_tname, _type, _name, _cname, _cost)\ - /datum/supply_packs/dispenser_cartridges{\ + datum/supply_packs/dispenser_cartridges{\ _tname {\ name = _name ;\ containername = _cname ;\ diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/reagents/reagent_containers/food/lunch.dm new file mode 100644 index 00000000000..edb4e3b8909 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/lunch.dm @@ -0,0 +1,115 @@ +var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/snacks/sandwich, + /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice, + /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice, + /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice, + /obj/item/weapon/reagent_containers/food/snacks/margheritaslice, + /obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice, + /obj/item/weapon/reagent_containers/food/snacks/tastybread, + /obj/item/weapon/reagent_containers/food/snacks/liquidfood, + /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, + /obj/item/weapon/reagent_containers/food/snacks/tossedsalad) + +var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/muffin, + /obj/item/weapon/reagent_containers/food/snacks/popcorn, + /obj/item/weapon/reagent_containers/food/snacks/sosjerky, + /obj/item/weapon/reagent_containers/food/snacks/no_raisin, + /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie, + /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, + /obj/item/weapon/reagent_containers/food/snacks/carrotfries, + /obj/item/weapon/reagent_containers/food/snacks/candiedapple, + /obj/item/weapon/reagent_containers/food/snacks/applepie, + /obj/item/weapon/reagent_containers/food/snacks/cherrypie, + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, + /obj/item/weapon/reagent_containers/food/snacks/appletart, + /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice, + /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice, + /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/limecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice, + /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice, + /obj/item/weapon/reagent_containers/food/snacks/watermelonslice, + /obj/item/weapon/reagent_containers/food/snacks/applecakeslice, + /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice, + /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks) + +var/list/lunchables_drinks_ = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind, + /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb, + /obj/item/weapon/reagent_containers/food/drinks/cans/starkist, + /obj/item/weapon/reagent_containers/food/drinks/cans/space_up, + /obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime, + /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea, + /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice, + /obj/item/weapon/reagent_containers/food/drinks/cans/tonic, + /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater) + +// This default list is a bit different, it contains items we don't want +var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing, + /datum/reagent/drink/doctor_delight, + /datum/reagent/drink/dry_ramen, + /datum/reagent/drink/hell_ramen, + /datum/reagent/drink/hot_ramen, + /datum/reagent/drink/nuka_cola,) + +// This default list is a bit different, it contains items we don't want +var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, + /datum/reagent/ethanol/atomicbomb, + /datum/reagent/ethanol/beepsky_smash, + /datum/reagent/ethanol/coffee, + /datum/reagent/ethanol/hippies_delight, + /datum/reagent/ethanol/hooch, + /datum/reagent/ethanol/thirteenloko, + /datum/reagent/ethanol/manhattan_proj, + /datum/reagent/ethanol/neurotoxin, + /datum/reagent/ethanol/pwine, + /datum/reagent/ethanol/threemileisland, + /datum/reagent/ethanol/toxins_special) + +/proc/lunchables_lunches() + if(!(lunchables_lunches_[lunchables_lunches_[1]])) + lunchables_lunches_ = init_lunchable_list(lunchables_lunches_) + return lunchables_lunches_ + +/proc/lunchables_snacks() + if(!(lunchables_snacks_[lunchables_snacks_[1]])) + lunchables_snacks_ = init_lunchable_list(lunchables_snacks_) + return lunchables_snacks_ + +/proc/lunchables_drinks() + if(!(lunchables_drinks_[lunchables_drinks_[1]])) + lunchables_drinks_ = init_lunchable_list(lunchables_drinks_) + return lunchables_drinks_ + +/proc/lunchables_drink_reagents() + if(!(lunchables_drink_reagents_[lunchables_drink_reagents_[1]])) + lunchables_drink_reagents_ = init_lunchable_reagent_list(lunchables_drink_reagents_, /datum/reagent/drink) + return lunchables_drink_reagents_ + +/proc/lunchables_ethanol_reagents() + if(!(lunchables_ethanol_reagents_[lunchables_ethanol_reagents_[1]])) + lunchables_ethanol_reagents_ = init_lunchable_reagent_list(lunchables_ethanol_reagents_, /datum/reagent/ethanol) + return lunchables_ethanol_reagents_ + +/proc/init_lunchable_list(var/list/lunches) + . = list() + for(var/lunch in lunches) + var/obj/O = lunch + .[initial(O.name)] = lunch + return sortAssoc(.) + +/proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types) + . = list() + for(var/reagent_type in subtypes(reagent_types)) + if(reagent_type in banned_reagents) + continue + var/datum/reagent/reagent = reagent_type + .[initial(reagent.name)] = initial(reagent.id) + return sortAssoc(.) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index b0ba58ed422..cfe34198de0 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -2238,6 +2238,12 @@ filling_color = "#FF7575" bitesize = 2 center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread name = "xenomeatbread loaf" @@ -2262,6 +2268,12 @@ filling_color = "#8AFF75" bitesize = 2 center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 4) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread name = "Banana-nut bread" @@ -2286,6 +2298,12 @@ filling_color = "#EDE5AD" bitesize = 2 center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("banana", 4) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread name = "Tofubread" @@ -2309,6 +2327,11 @@ filling_color = "#F7FFE0" bitesize = 2 center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 6) /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake @@ -2334,6 +2357,12 @@ filling_color = "#FFD675" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("imidazoline", 2) + reagents.add_reagent("nutriment", 5) /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake name = "Brain Cake" @@ -2359,6 +2388,13 @@ filling_color = "#E6AEDB" bitesize = 2 center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/braincakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 5) + reagents.add_reagent("nutriment", 1) + reagents.add_reagent("alkysine", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake name = "Cheese Cake" @@ -2383,6 +2419,12 @@ filling_color = "#FAF7AF" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake name = "Vanilla Cake" @@ -2405,6 +2447,11 @@ filling_color = "#F7EDD5" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake name = "Orange Cake" @@ -2427,6 +2474,11 @@ filling_color = "#FADA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake name = "Lime Cake" @@ -2449,6 +2501,11 @@ filling_color = "#CBFA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/limecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake name = "Lemon Cake" @@ -2471,6 +2528,11 @@ filling_color = "#FAFA8E" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake name = "Chocolate Cake" @@ -2493,6 +2555,11 @@ filling_color = "#805930" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel name = "Cheese wheel" @@ -2539,6 +2606,12 @@ filling_color = "#FFD6D6" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("sprinkles", 2) /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread name = "Bread" @@ -2562,6 +2635,11 @@ filling_color = "#D27332" bitesize = 2 center_of_mass = list("x"=16, "y"=4) + +/obj/item/weapon/reagent_containers/food/snacks/breadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread @@ -2587,7 +2665,12 @@ filling_color = "#FFF896" bitesize = 2 center_of_mass = list("x"=16, "y"=13) - + +/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 3) + reagents.add_reagent("nutriment", 1) /obj/item/weapon/reagent_containers/food/snacks/watermelonslice name = "Watermelon Slice" @@ -2596,7 +2679,11 @@ filling_color = "#FF3867" bitesize = 2 center_of_mass = list("x"=16, "y"=10) - + +/obj/item/weapon/reagent_containers/food/snacks/watermelonslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("watermelonjuice", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake name = "Apple Cake" @@ -2619,6 +2706,11 @@ filling_color = "#EBF5B8" bitesize = 2 center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/applecakeslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 3) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie name = "Pumpkin Pie" @@ -2641,6 +2733,11 @@ filling_color = "#F5B951" bitesize = 2 center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 3) /obj/item/weapon/reagent_containers/food/snacks/cracker name = "Cracker" @@ -2683,6 +2780,13 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/margheritaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("protein", 1) + reagents.add_reagent("tomatojuice", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza name = "Meatpizza" @@ -2705,6 +2809,12 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("protein", 7) + reagents.add_reagent("tomatojuice", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza name = "Mushroompizza" @@ -2727,6 +2837,12 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 5) + reagents.add_reagent("protein", 1) /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza name = "Vegetable pizza" @@ -2751,6 +2867,14 @@ filling_color = "#BAA14C" bitesize = 2 center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice/New() + ..() + if(!(reagents.total_volume)) + reagents.add_reagent("nutriment", 4) + reagents.add_reagent("protein", 1) + reagents.add_reagent("tomatojuice", 1) + reagents.add_reagent("imidazoline", 2) /obj/item/pizzabox name = "pizza box" diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index f58f541d0d2..1a9484ea3eb 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -40,7 +40,7 @@ /obj/machinery/sleeper, /obj/machinery/smartfridge/, /obj/machinery/biogenerator, - /obj/machinery/constructable_frame, + /obj/structure/frame, /obj/machinery/radiocarbon_spectrometer ) @@ -245,6 +245,17 @@ var/image/lid = image(icon, src, "lid_[initial(icon_state)]") overlays += lid +/obj/item/weapon/reagent_containers/glass/cooler_bottle + desc = "A bottle for a water-cooler." + name = "water-cooler bottle" + icon = 'icons/obj/vending.dmi' + icon_state = "water_cooler_bottle" + matter = list(DEFAULT_WALL_MATERIAL = 200) + w_class = 3.0 + amount_per_transfer_from_this = 20 + possible_transfer_amounts = list(10,20,30,60,120) + volume = 120 + /* /obj/item/weapon/reagent_containers/glass/blender_jug name = "Blender Jug" diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index d05e2d23b7b..55dfcc7745d 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -55,16 +55,18 @@ var/image/lid = image(icon, src, "lid_bottle") overlays += lid + /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline name = "inaprovaline bottle" desc = "A small bottle. Contains inaprovaline - used to stabilize patients." icon = 'icons/obj/chemical.dmi' icon_state = "bottle-4" - New() - ..() - reagents.add_reagent("inaprovaline", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline/New() + ..() + reagents.add_reagent("inaprovaline", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/toxin name = "toxin bottle" @@ -72,10 +74,11 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-3" - New() - ..() - reagents.add_reagent("toxin", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/toxin/New() + ..() + reagents.add_reagent("toxin", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/cyanide name = "cyanide bottle" @@ -83,10 +86,11 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-3" - New() - ..() - reagents.add_reagent("cyanide", 30) //volume changed to match chloral - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/cyanide/New() + ..() + reagents.add_reagent("cyanide", 30) //volume changed to match chloral + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/stoxin name = "soporific bottle" @@ -94,10 +98,11 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-3" - New() - ..() - reagents.add_reagent("stoxin", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/stoxin/New() + ..() + reagents.add_reagent("stoxin", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate name = "Chloral Hydrate Bottle" @@ -105,10 +110,11 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-3" - New() - ..() - reagents.add_reagent("chloralhydrate", 30) //Intentionally low since it is so strong. Still enough to knock someone out. - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate/New() + ..() + reagents.add_reagent("chloralhydrate", 30) //Intentionally low since it is so strong. Still enough to knock someone out. + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/antitoxin name = "dylovene bottle" @@ -116,10 +122,11 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-4" - New() - ..() - reagents.add_reagent("anti_toxin", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/antitoxin/New() + ..() + reagents.add_reagent("anti_toxin", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/mutagen name = "unstable mutagen bottle" @@ -127,10 +134,11 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-1" - New() - ..() - reagents.add_reagent("mutagen", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/mutagen/New() + ..() + reagents.add_reagent("mutagen", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/ammonia name = "ammonia bottle" @@ -138,10 +146,47 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-1" - New() - ..() - reagents.add_reagent("ammonia", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/ammonia/New() + ..() + reagents.add_reagent("ammonia", 60) + update_icon() + + +/obj/item/weapon/reagent_containers/glass/bottle/eznutrient + name = "\improper EZ NUtrient bottle" + desc = "A small bottle." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle-4" + +/obj/item/weapon/reagent_containers/glass/bottle/eznutrient/New() + ..() + reagents.add_reagent("eznutrient", 60) + update_icon() + + +/obj/item/weapon/reagent_containers/glass/bottle/left4zed + name = "\improper Left-4-Zed bottle" + desc = "A small bottle." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle-4" + +/obj/item/weapon/reagent_containers/glass/bottle/left4zed/New() + ..() + reagents.add_reagent("left4zed", 60) + update_icon() + + +/obj/item/weapon/reagent_containers/glass/bottle/robustharvest + name = "\improper Robust Harvest" + desc = "A small bottle." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle-4" + +/obj/item/weapon/reagent_containers/glass/bottle/robustharvest/New() + ..() + reagents.add_reagent("robustharvest", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/diethylamine name = "diethylamine bottle" @@ -149,47 +194,56 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bottle-4" - New() - ..() - reagents.add_reagent("diethylamine", 60) - update_icon() +/obj/item/weapon/reagent_containers/glass/bottle/diethylamine/New() + ..() + reagents.add_reagent("diethylamine", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/pacid name = "Polytrinic Acid Bottle" desc = "A small bottle. Contains a small amount of Polytrinic Acid" icon = 'icons/obj/chemical.dmi' icon_state = "bottle-4" - New() - ..() - reagents.add_reagent("pacid", 60) - update_icon() + +/obj/item/weapon/reagent_containers/glass/bottle/pacid/New() + ..() + reagents.add_reagent("pacid", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/adminordrazine name = "Adminordrazine Bottle" desc = "A small bottle. Contains the liquid essence of the gods." icon = 'icons/obj/drinks.dmi' icon_state = "holyflask" - New() - ..() - reagents.add_reagent("adminordrazine", 60) - update_icon() + + +/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine/New() + ..() + reagents.add_reagent("adminordrazine", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/capsaicin name = "Capsaicin Bottle" desc = "A small bottle. Contains hot sauce." icon = 'icons/obj/chemical.dmi' icon_state = "bottle-4" - New() - ..() - reagents.add_reagent("capsaicin", 60) - update_icon() + +/obj/item/weapon/reagent_containers/glass/bottle/capsaicin/New() + ..() + reagents.add_reagent("capsaicin", 60) + update_icon() + /obj/item/weapon/reagent_containers/glass/bottle/frostoil name = "Frost Oil Bottle" desc = "A small bottle. Contains cold sauce." icon = 'icons/obj/chemical.dmi' icon_state = "bottle-4" - New() - ..() - reagents.add_reagent("frostoil", 60) - update_icon() + +/obj/item/weapon/reagent_containers/glass/bottle/frostoil/New() + ..() + reagents.add_reagent("frostoil", 60) + update_icon() diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 630f3845841..e0dc0fc9f6b 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -3,7 +3,7 @@ //////////////////////////////////////////////////////////////////////////////// /obj/item/weapon/reagent_containers/pill name = "pill" - desc = "a pill." + desc = "A pill." icon = 'icons/obj/chemical.dmi' icon_state = null item_state = "pill" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index d68be94b9ba..495a248c53c 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -68,7 +68,7 @@ //Dispensers /obj/structure/reagent_dispensers/watertank name = "watertank" - desc = "A watertank" + desc = "A watertank." icon = 'icons/obj/objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 @@ -78,7 +78,7 @@ /obj/structure/reagent_dispensers/fueltank name = "fueltank" - desc = "A fueltank" + desc = "A fueltank." icon = 'icons/obj/objects.dmi' icon_state = "weldtank" amount_per_transfer_from_this = 10 @@ -183,7 +183,7 @@ /obj/structure/reagent_dispensers/peppertank name = "Pepper Spray Refiller" - desc = "Refill pepper spray canisters." + desc = "Refills pepper spray canisters." icon = 'icons/obj/objects.dmi' icon_state = "peppertank" anchored = 1 @@ -202,10 +202,69 @@ icon_state = "water_cooler" possible_transfer_amounts = null anchored = 1 - New() - ..() - reagents.add_reagent("water",500) + var/bottle = 0 +/obj/structure/reagent_dispensers/water_cooler/New() + if(bottle == 1) + ..() + reagents.add_reagent("water",120) + else + icon_state = "water_cooler_0" + +/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/wrench)) + src.add_fingerprint(user) + if(bottle) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 20)) + user << "You unfasten the jug." + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc ) + for(var/datum/reagent/R in reagents.reagent_list) + var/total_reagent = reagents.get_reagent_amount(R.id) + G.reagents.add_reagent(R.id, total_reagent) + reagents.clear_reagents() + bottle = 0 + icon_state = "water_cooler_0" + else + if(anchored) + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.") + else + user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.") + if(do_after(user, 20, src)) + if(!src) return + user << "You [anchored? "un" : ""]secured \the [src]!" + anchored = !anchored + return + + if(istype(I, /obj/item/weapon/screwdriver)) + if(!bottle) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You take the water-cooler apart." + new /obj/item/stack/material/plastic( src.loc, 4 ) + qdel(src) + return + + if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle)) + src.add_fingerprint(user) + if(!bottle) + if(anchored) + var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I + user << "You start to screw the bottle onto the water-cooler." + if(do_after(user, 20)) + bottle = 1 + icon_state = "water_cooler" + user << "You screw the bottle onto the water-cooler but accidently spill some!" //you spill some because it for somereason transfers 5 units to the bottle after it gets attached but before it's deleted... + for(var/datum/reagent/R in G.reagents.reagent_list) + var/total_reagent = G.reagents.get_reagent_amount(R.id) + reagents.add_reagent(R.id, total_reagent) + qdel(G) + else + user << "You need to wrench down the cooler first." + else + user << "There is already a bottle there!" + return + else + return ..() /obj/structure/reagent_dispensers/beerkeg name = "beer keg" @@ -225,7 +284,7 @@ /obj/structure/reagent_dispensers/virusfood name = "Virus Food Dispenser" - desc = "A dispenser of virus food." + desc = "A dispenser of virus food. Yum." icon = 'icons/obj/objects.dmi' icon_state = "virusfoodtank" amount_per_transfer_from_this = 10 diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 957c3b574dc..0e591e97b0b 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -8,6 +8,8 @@ desc = "A conveyor belt." layer = 2 // so they appear under stuff anchored = 1 + circuit = /obj/item/weapon/circuitboard/conveyor + frame_type = "conveyor" var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off var/operable = 1 // true if can operate (no broken segments in this belt run) var/forwards // this is the default (forward) direction, set by the map dir @@ -37,6 +39,14 @@ operating = 1 setmove() + component_parts = list() + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/weapon/stock_parts/gear(src) + component_parts += new /obj/item/weapon/stock_parts/motor(src) + component_parts += new /obj/item/stack/cable_coil(src,5) + RefreshParts() + /obj/machinery/conveyor/proc/setmove() if(operating == 1) movedir = forwards @@ -81,6 +91,23 @@ if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts if(I.loc != user) return // This should stop mounted modules ending up outside the module. + if(default_deconstruction_screwdriver(user, I)) + return + if(default_deconstruction_crowbar(user, I)) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id)) + if(!input) + usr << "No input found please hang up and try your call again." + return + id = input + for(var/obj/machinery/conveyor_switch/C in world) + if(C.id == id) + C.conveyors += src + return + user.drop_item(get_turf(src)) return @@ -221,6 +248,36 @@ S.position = position S.update() +/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user) + if(default_deconstruction_screwdriver(user, I)) + return + + if(istype(I, /obj/item/weapon/weldingtool)) + if(panel_open) + var/obj/item/weapon/weldingtool/WT = I + if(!WT.remove_fuel(0, user)) + user << "The welding tool must be on to complete this task." + return + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(do_after(user, 20)) + if(!src || !WT.isOn()) return + user << "You deconstruct the frame." + new /obj/item/stack/material/steel( src.loc, 2 ) + qdel(src) + return + + if(istype(I, /obj/item/device/multitool)) + if(panel_open) + var/input = sanitize(input(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id)) + if(!input) + usr << "No input found please hang up and try your call again." + return + id = input + for(var/obj/machinery/conveyor/C in world) + if(C.id == id) + conveyors += C + return + /obj/machinery/conveyor_switch/oneway var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.) desc = "A conveyor control switch. It appears to only go in one direction." diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 0e3858e662d..6831034edf1 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -8,6 +8,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). name = "Circuit Imprinter" icon_state = "circuit_imprinter" flags = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/circuit_imprinter var/list/datum/design/queue = list() var/progress = 0 @@ -24,7 +25,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). /obj/machinery/r_n_d/circuit_imprinter/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index ccf20c0ce7d..3fbb141f7e8 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -11,7 +11,7 @@ Note: Must be placed within 3 tiles of the R&D Console icon_state = "d_analyzer" var/obj/item/weapon/loaded_item = null var/decon_mod = 0 - + circuit = /obj/item/weapon/circuitboard/destructive_analyzer use_power = 1 idle_power_usage = 30 active_power_usage = 2500 @@ -19,7 +19,6 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index f10e3ae472d..85ace414528 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -395,7 +395,7 @@ /datum/design/item/mecha/drill name = "Drill" - id = "drill" + id = "mech_drill" build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill /datum/design/item/mecha/extinguisher diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 8809ee29554..7d5bae00caa 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -2,7 +2,7 @@ name = "Protolathe" icon_state = "protolathe" flags = OPENCONTAINER - + circuit = /obj/item/weapon/circuitboard/protolathe use_power = 1 idle_power_usage = 30 active_power_usage = 5000 @@ -20,7 +20,6 @@ /obj/machinery/r_n_d/protolathe/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/protolathe(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) component_parts += new /obj/item/weapon/stock_parts/manipulator(src) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 9f9315eba6c..186c869ad35 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -47,19 +47,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, req_access = list(access_research) //Data and setting manipulation requires scientist access. -/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID. - var/datum/tech/check_tech - var/return_name = null - for(var/T in typesof(/datum/tech) - /datum/tech) - check_tech = null - check_tech = new T() - if(check_tech.id == ID) - return_name = check_tech.name - qdel(check_tech) - check_tech = null - break - return return_name - /obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) var/return_name = ID switch(return_name) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 8dc8a12263f..fc5ca4bcbfe 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -122,6 +122,13 @@ research holder datum. KT.level = max(KT.level + 1, level - 1) return +// A simple helper proc to find the name of a tech with a given ID. +/proc/CallTechName(var/ID) + for(var/T in subtypes(/datum/tech)) + var/datum/tech/check_tech = T + if(initial(check_tech.id) == ID) + return initial(check_tech.name) + /*************************************************************** ** Technology Datums ** ** Includes all the various technoliges and what they make. ** diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index a5e5a00043d..fcaaa7a2128 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -13,11 +13,11 @@ idle_power_usage = 800 var/delay = 10 req_access = list(access_rd) //Only the R&D can change server settings. + circuit = /obj/item/weapon/circuitboard/rdserver /obj/machinery/r_n_d/server/New() ..() component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(src) component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) component_parts += new /obj/item/stack/cable_coil(src) component_parts += new /obj/item/stack/cable_coil(src) diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm index b0a31faecc3..2f6cc45e75a 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_unknown.dm @@ -26,7 +26,7 @@ var/list/valid_primary_effect_types = list(\ /datum/artifact_effect/forcefield,\ /datum/artifact_effect/gasoxy,\ /datum/artifact_effect/gasplasma,\ -/* /datum/artifact_effect/gassleeping,\*/ +// /datum/artifact_effect/gassleeping,\ /datum/artifact_effect/heal,\ /datum/artifact_effect/hurt,\ /datum/artifact_effect/emp,\ @@ -45,7 +45,7 @@ var/list/valid_secondary_effect_types = list(\ /datum/artifact_effect/gasnitro,\ /datum/artifact_effect/gasoxy,\ /datum/artifact_effect/gasphoron,\ -/* /datum/artifact_effect/gassleeping,\*/ +// /datum/artifact_effect/gassleeping,\ /datum/artifact_effect/goodfeeling,\ /datum/artifact_effect/heal,\ /datum/artifact_effect/hurt,\ diff --git a/code/modules/research/xenoarchaeology/finds/finds_misc.dm b/code/modules/research/xenoarchaeology/finds/finds_misc.dm index f494505b63f..90afe5a737d 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_misc.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_misc.dm @@ -13,8 +13,8 @@ //large finds /* - /obj/machinery/syndicate_beacon - /obj/machinery/wish_granter + obj/machinery/syndicate_beacon + obj/machinery/wish_granter if(18) item_type = "jagged green crystal" additional_desc = pick("It shines faintly as it catches the light.","It appears to have a faint inner glow.","It seems to draw you inward as you look it at.","Something twinkles faintly as you look at it.","It's mesmerizing to behold.") diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm index 0dd7e46ed8d..69aaac47c0d 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm @@ -121,7 +121,7 @@ continue //skip monkeys and leavers if (istype(M, /mob/new_player)) continue - if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) listening|=M for(var/mob/M in listening) diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm index 62dde2edd56..ad44c7d2ced 100644 --- a/code/modules/research/xenoarchaeology/machinery/coolant.dm +++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm @@ -1,6 +1,6 @@ /obj/structure/reagent_dispensers/coolanttank name = "coolant tank" - desc = "A tank of industrial coolant" + desc = "A tank of industrial coolant." icon = 'icons/obj/objects.dmi' icon_state = "coolanttank" amount_per_transfer_from_this = 10 diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm index 99307f37931..65f4b9f1fc0 100644 --- a/code/modules/research/xenoarchaeology/master_controller.dm +++ b/code/modules/research/xenoarchaeology/master_controller.dm @@ -12,7 +12,7 @@ /datum/controller/game_controller/proc/SetupXenoarch() //create digsites for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz))) - if(M.density) + if(!(M.density)) continue if(isnull(M.geologic_data)) diff --git a/code/modules/research/xenoarchaeology/tools/tools.dm b/code/modules/research/xenoarchaeology/tools/tools.dm index e16db119c55..bc9d0ca21f5 100644 --- a/code/modules/research/xenoarchaeology/tools/tools.dm +++ b/code/modules/research/xenoarchaeology/tools/tools.dm @@ -30,7 +30,6 @@ icon_state = "satchel" slot_flags = SLOT_BELT | SLOT_POCKET w_class = 3 - storage_slots = 50 - max_storage_space = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * ore.w_class + max_storage_space = 100 max_w_class = 3 can_hold = list(/obj/item/weapon/fossil) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 87514a5473b..b4301cf557a 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -3,6 +3,7 @@ desc = "This device is used to trigger station functions, which require more than one ID card to authenticate." icon = 'icons/obj/monitors.dmi' icon_state = "auth_off" + circuit = /obj/item/weapon/circuitboard/keycard_auth var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. var/event = "" var/screen = 1 @@ -40,6 +41,24 @@ event_triggered_by = usr broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices + if(istype(W, /obj/item/weapon/screwdriver)) + user << "You remove the faceplate from the [src]" + var/obj/structure/frame/A = new /obj/structure/frame( src.loc ) + var/obj/item/weapon/circuitboard/M = new circuit( A ) + A.frame_type = "keycard" + A.pixel_x = pixel_x + A.pixel_y = pixel_y + A.set_dir(dir) + A.circuit = M + A.anchored = 1 + for (var/obj/C in src) + C.forceMove(loc) + A.state = 3 + A.icon_state = "keycard_3" + M.deconstruct(src) + qdel(src) + return + /obj/machinery/keycard_auth/power_change() ..() if(stat &NOPOWER) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 721f124e4ef..82c6ad543c8 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -27,7 +27,7 @@ internal_bleeding = 1 break - return affected.open >= 2 && internal_bleeding + return affected.open == (affected.encased ? 3 : 2) && internal_bleeding begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -206,4 +206,4 @@ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s [tool] can't quite seem to get through the metal...", \ - "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") \ No newline at end of file + "Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.") diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm new file mode 100644 index 00000000000..7ca778655a1 --- /dev/null +++ b/code/unit_tests/loadout_tests.dm @@ -0,0 +1,23 @@ +/datum/unit_test/loadout_test_shall_have_name_cost_path + name = "LOADOUT: Entries shall have name, cost, and path definitions" + +/datum/unit_test/loadout_test_shall_have_name_cost_path/start_test() + var/failed = 0 + for(var/geartype in typesof(/datum/gear) - /datum/gear) + var/datum/gear/G = geartype + + if(!initial(G.display_name)) + log_unit_test("[G]: Loadout - Missing display name.") + failed = 1 + else if(!initial(G.cost)) + log_unit_test("[G]: Loadout - Missing cost.") + failed = 1 + else if(!initial(G.path)) + log_unit_test("[G]: Loadout - Missing path definition.") + failed = 1 + + if(failed) + fail("One or more /datum/gear definitions had invalid display names, costs, or path definitions") + else + pass("All /datum/gear definitions had correct settings.") + return 1 diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm new file mode 100644 index 00000000000..97d4909833c --- /dev/null +++ b/code/unit_tests/map_tests.dm @@ -0,0 +1,99 @@ +/datum/unit_test/apc_area_test + name = "MAP: Area Test APC / Scrubbers / Vents Z level 1" + +/datum/unit_test/apc_area_test/start_test() + var/list/bad_areas = list() + var/area_test_count = 0 + var/list/exempt_areas = typesof(/area/space, + /area/syndicate_station, + /area/skipjack_station, + /area/solar, + /area/shuttle, + /area/holodeck, + /area/supply/station, + /area/mine, + /area/vacant/vacant_shop + ) + + var/list/exempt_from_atmos = typesof(/area/maintenance, + /area/storage, + /area/engineering/atmos/storage, + /area/rnd/test_area, + /area/construction, + /area/server, + /area/mine, + /area/vacant/vacant_shop, + /area/rnd/research_storage, // This should probably be fixed, + /area/security/riot_control // This should probably be fixed, + ) + + var/list/exempt_from_apc = typesof(/area/construction, + /area/medical/genetics, + /area/mine, + /area/vacant/vacant_shop + ) + + for(var/area/A in world) + if(A.z == 1 && !(A.type in exempt_areas)) + area_test_count++ + var/area_good = 1 + var/bad_msg = "--------------- [A.name]([A.type])" + + + if(isnull(A.apc) && !(A.type in exempt_from_apc)) + log_unit_test("[bad_msg] lacks an APC.") + area_good = 0 + + if(!A.air_scrub_info.len && !(A.type in exempt_from_atmos)) + log_unit_test("[bad_msg] lacks an Air scrubber.") + area_good = 0 + + if(!A.air_vent_info.len && !(A.type in exempt_from_atmos)) + log_unit_test("[bad_msg] lacks an Air vent.") + area_good = 0 + + if(!area_good) + bad_areas.Add(A) + + if(bad_areas.len) + fail("\[[bad_areas.len]/[area_test_count]\]Some areas lacked APCs, Air Scrubbers, or Air vents.") + else + pass("All \[[area_test_count]\] areas contained APCs, Air scrubbers, and Air vents.") + + return 1 + +/datum/unit_test/wire_test + name = "MAP: Cable Test Z level 1" + +/datum/unit_test/wire_test/start_test() + var/wire_test_count = 0 + var/bad_tests = 0 + var/turf/T = null + var/obj/structure/cable/C = null + var/list/cable_turfs = list() + var/list/dirs_checked = list() + + for(C in world) + T = null + + T = get_turf(C) + if(T && T.z == 1) + cable_turfs |= get_turf(C) + + for(T in cable_turfs) + var/bad_msg = "--------------- [T.name] \[[T.x] / [T.y] / [T.z]\]" + dirs_checked.Cut() + for(C in T) + wire_test_count++ + var/combined_dir = "[C.d1]-[C.d2]" + if(combined_dir in dirs_checked) + bad_tests++ + log_unit_test("[bad_msg] Contains multiple wires with same direction on top of each other.") + dirs_checked.Add(combined_dir) + + if(bad_tests) + fail("\[[bad_tests] / [wire_test_count]\] Some turfs had overlapping wires going the same direction.") + else + pass("All \[[wire_test_count]\] wires had no overlapping cables going the same direction.") + + return 1 diff --git a/code/unit_tests/mob_tests.dm b/code/unit_tests/mob_tests.dm new file mode 100644 index 00000000000..c6b21e5d36b --- /dev/null +++ b/code/unit_tests/mob_tests.dm @@ -0,0 +1,29 @@ +/datum/unit_test/space_suffocation + name = "MOB: human mob suffocates in space" + + var/startOxyloss + var/endOxyloss + var/mob/living/carbon/human/H + async = 1 + +/datum/unit_test/space_suffocation/start_test() + var/turf/space/T = locate() + + H = new(T) + startOxyloss = H.getOxyLoss() + + return 1 + +/datum/unit_test/space_suffocation/check_result() + if(H.life_tick < 10) + return 0 + + endOxyloss = H.getOxyLoss() + + if(startOxyloss < endOxyloss) + pass("Human mob takes oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])") + else + fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])") + + qdel(H) + return 1 diff --git a/code/unit_tests/research_tests.dm b/code/unit_tests/research_tests.dm new file mode 100644 index 00000000000..34c63b9d108 --- /dev/null +++ b/code/unit_tests/research_tests.dm @@ -0,0 +1,42 @@ +/datum/unit_test/research_designs_shall_be_unique + name = "RESEARCH: Designs Shall Be Unique" + +/datum/unit_test/research_designs_shall_be_unique/start_test() + var/list/ids = list() + var/list/build_paths = list() + + for(var/design_type in typesof(/datum/design) - /datum/design) + var/datum/design/design = design_type + if(initial(design.id) == "id") + continue + + group_by(ids, design, initial(design.id)) + group_by(build_paths, design, initial(design.build_path)) + + var/number_of_issues = number_of_issues(ids, "IDs") + number_of_issues += number_of_issues(build_paths, "Build Paths") + + if(number_of_issues) + fail("[number_of_issues] issues with research designs found.") + else + pass("All research designs are unique.") + + return 1 + +/datum/unit_test/research_designs_shall_be_unique/proc/group_by(var/list/entries, var/datum/design/entry, var/value) + var/designs = entries[value] + if(!designs) + designs = list() + entries[value] = designs + + designs += entry + +/datum/unit_test/research_designs_shall_be_unique/proc/number_of_issues(var/list/entries, var/type) + var/issues = 0 + for(var/value in entries) + var/list/list_of_designs = entries[value] + if(list_of_designs.len > 1) + log_unit_test("[type] - The following entries have the same value - [value]: " + english_list(list_of_designs)) + issues++ + + return issues diff --git a/code/unit_tests/unit_test.dm b/code/unit_tests/unit_test.dm new file mode 100644 index 00000000000..b8acf60c218 --- /dev/null +++ b/code/unit_tests/unit_test.dm @@ -0,0 +1,99 @@ +var/all_unit_tests_passed = 1 +var/failed_unit_tests = 0 +var/total_unit_tests = 0 + +/datum/unit_test + var/name = "template" + var/disabled = "" + var/async = 0 + var/reported = 0 + +/datum/unit_test/proc/fail(var/message) + all_unit_tests_passed = 0 + failed_unit_tests++ + reported = 1 + log_unit_test("[ASCII_RED]!! FAILURE !! \[[name]\]: [message][ASCII_RESET]") + +/datum/unit_test/proc/pass(var/message) + reported = 1 + log_unit_test("[ASCII_GREEN]** SUCCESS ** \[[name]\]: [message][ASCII_RESET]") + +/datum/unit_test/proc/start_test() + fail("No test proc.") + +/datum/unit_test/proc/check_result() + fail("No check results proc.") + return 1 + + +/proc/initialize_unit_tests() + log_unit_test("Initializing Unit Testing") + + if(!ticker) + crash_with("No Ticker") + world.Del() + + var/said_msg = 0 + while(ticker.pregame_timeleft && ticker.pregame_timeleft > 160) // Make sure the initial startup is complete. + if(ticker.pregame_timeleft < 175 && !said_msg) + said_msg = 1 + log_unit_test("Pregame Count down has started, giving it 20 seconds to finish.") + sleep(1) + + world.save_mode("extended") + + sleep(1) + + ticker.current_state = GAME_STATE_SETTING_UP + + log_unit_test("Round has been started. Waiting 10 seconds to start tests.") + sleep(100) + + var/list/test_datums = typesof(/datum/unit_test) + + var/list/async_test = list() + var/list/started_tests = list() + + log_unit_test("Testing Started.") + + for(var/test in test_datums) + var/datum/unit_test/d = new test() + + if(d.disabled) + d.pass("[ASCII_RED]Check Disabled: [d.disabled][ASCII_RESET]") + continue + + if(findtext(d.name, "template")) + continue + + if(isnull(d.start_test())) // Start the test. + d.fail("Test Runtimed") + + if(d.async) // If it's async then we'll need to check back on it later. + async_test.Add(d) + total_unit_tests++ + + // + // Check the async tests to see if they are finished. + // + + while(async_test.len) + for(var/datum/unit_test/test in async_test) + if(test.check_result()) + async_test.Remove(test) + sleep(1) + + // + // Make sure all Unit Tests reported a result + // + + for(var/datum/unit_test/test in started_tests) + if(!test.reported) + test.fail("Test failed to report a result.") + + if(all_unit_tests_passed) + log_unit_test("[ASCII_GREEN]*** All Unit Tests Passed \[[total_unit_tests]\] ***[ASCII_RESET]") + world.Del() + else + log_unit_test("[ASCII_RED]!!! \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed !!![ASCII_RESET]") + world.Del() \ No newline at end of file diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm new file mode 100644 index 00000000000..a28abaa8817 --- /dev/null +++ b/code/unit_tests/zas_tests.dm @@ -0,0 +1,119 @@ +#define UT_NORMAL 1 +#define UT_VACUUM 2 +#define UT_NORMAL_COLD 3 + +/datum/unit_test/zas_area_test + name = "ZAS: Area Test Template" + var/area_path = null + var/expectation = UT_NORMAL + +/datum/unit_test/zas_area_test/proc/test_air_in_area(var/test_area, var/expectation = UT_NORMAL) + var/test_result = list("result" = 0, "msg" = "") + + var/area/A = locate(test_area) + + if(!istype(A, test_area)) + test_result["msg"] = "Unable to get [test_area]" + return test_result + + var/list/GM_checked = list() + + for(var/turf/simulated/T in A) + if(!istype(T) || isnull(T.zone) || istype(T, /turf/simulated/floor/airless)) + continue + if(T.zone.air in GM_checked) + continue + + var/t_msg = "Turf: [T] | Location: [T.x] // [T.y] // [T.z]" + + var/datum/gas_mixture/GM = T.return_air() + var/pressure = GM.return_pressure() + var/temp = GM.temperature + + switch(expectation) + + if(UT_VACUUM) + if(pressure > 10) + test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" + return test_result + + + if(UT_NORMAL || UT_NORMAL_COLD) + if(abs(pressure - ONE_ATMOSPHERE) > 10) + test_result["msg"] = "Pressure out of bounds: [pressure] | [t_msg]" + return test_result + + if(expectation == UT_NORMAL) + + if(abs(temp - T20C) > 10) + test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]" + return test_result + + if(expectation == UT_NORMAL_COLD) + + if(temp > 120) + test_result["msg"] = "Temperature out of bounds: [temp] | [t_msg]" + return test_result + + GM_checked.Add(GM) + + if(GM_checked.len) + test_result["result"] = 1 + test_result["msg"] = "Checked [GM_checked.len] zones" + else + test_result["msg"] = "No zones checked." + + return test_result + +/datum/unit_test/zas_area_test/start_test() + var/list/test = test_air_in_area(area_path, expectation) + + if(isnull(test)) + fail("Check Runtimed") + + if(test["result"] == 1) + pass(test["msg"]) + else + fail(test["msg"]) + return 1 + +/datum/unit_test/zas_area_test/supply_centcomm + name = "ZAS: Supply Shuttle (CentComm)" + area_path = /area/supply/dock + +/datum/unit_test/zas_area_test/emergency_shuttle + name = "ZAS: Emergency Shuttle" + area_path = /area/shuttle/escape/centcom + +/datum/unit_test/zas_area_test/ai_chamber + name = "ZAS: AI Chamber" + area_path = /area/ai + +/datum/unit_test/zas_area_test/mining_shuttle_at_station + name = "ZAS: Mining Shuttle (Station)" + area_path = /area/shuttle/mining/station + +/datum/unit_test/zas_area_test/cargo_maint + name = "ZAS: Cargo Maintenance" + area_path = /area/maintenance/cargo + +/datum/unit_test/zas_area_test/eng_shuttle + name = "ZAS: Construction Site Shuttle (Station)" + area_path = /area/shuttle/constructionsite/station + +/datum/unit_test/zas_area_test/virology + name = "ZAS: Virology" + area_path = /area/medical/virology + +/datum/unit_test/zas_area_test/xenobio + name = "ZAS: Xenobiology" + area_path = /area/rnd/xenobiology + +/datum/unit_test/zas_area_test/mining_area + name = "ZAS: Mining Area (Vacuum)" + area_path = /area/mine/explored + expectation = UT_VACUUM + +/datum/unit_test/zas_area_test/cargo_bay + name = "ZAS: Cargo Bay" + area_path = /area/quartermaster/storage diff --git a/code/world.dm b/code/world.dm index 136228ccfc6..b81c0f7c3a5 100644 --- a/code/world.dm +++ b/code/world.dm @@ -64,7 +64,12 @@ var/global/datum/global_init/init = new () . = ..() +#if UNIT_TEST + log_unit_test("Unit Tests Enabled. This will destroy the world when testing is complete.") + log_unit_test("If you did not intend to enable this please check code/__defines/unit_testing.dm") +#else sleep_offline = 1 +#endif // Set up roundstart seed list. plant_controller = new() @@ -105,6 +110,9 @@ var/global/datum/global_init/init = new () processScheduler.deferSetupFor(/datum/controller/process/ticker) processScheduler.setup() master_controller.setup() +#if UNIT_TEST + initialize_unit_tests() +#endif spawn(3000) //so we aren't adding to the round-start lag if(config.ToRban) @@ -147,7 +155,7 @@ var/world_topic_spam_protect_time = world.timeofday // This is dumb, but spacestation13.com's banners break if player count isn't the 8th field of the reply, so... this has to go here. s["players"] = 0 s["stationtime"] = worldtime2text() - s["roundduration"] = round_duration() + s["roundduration"] = round_duration_as_text() if(input["status"] == "2") var/list/players = list() @@ -414,6 +422,10 @@ var/world_topic_spam_protect_time = world.timeofday return 1 /world/proc/load_mode() + if(!fexists("data/mode.txt")) + return + + var/list/Lines = file2list("data/mode.txt") if(Lines.len) if(Lines[1]) diff --git a/config/example/config.txt b/config/example/config.txt index c04d1819908..b38bfd73546 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -103,6 +103,9 @@ PROBABILITY WIZARD 1 PROBABILITY CHANGELING 1 PROBABILITY CULT 1 PROBABILITY EXTEND-A-TRAITORMONGOUS 6 +PROBABILITY LIZARD 1 +PROBABILITY INTRIGUE 1 +PROBABILITY VISITORS 1 ## Hash out to disable random events during the round. ALLOW_RANDOM_EVENTS diff --git a/config/names/last.txt b/config/names/last.txt index 5b41e53aae8..6080967e2da 100644 --- a/config/names/last.txt +++ b/config/names/last.txt @@ -502,7 +502,6 @@ Stamos Sagan Hawking Dawkins -Goebbles McShain McDonohugh Power diff --git a/html/changelog.html b/html/changelog.html index 0c56f2860a5..c743aadeefa 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,73 @@ -->
+

17 April 2016

+

Datraen updated:

+
    +
  • Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272 by Razharas.
  • +
  • Teshari smocks now spawn as smocks, and not aqua jumpsuits.
  • +
  • Checks to see if new a two-handed weapon can be wielded when dropped.
  • +
+

EmperorJon updated:

+
    +
  • Robotics Console now correctly shows the operational/lockdown state and button based off if it thinks the synthetic is locked down or not.
  • +
  • Autotraitor synths now behave the same as Traitor synths - they are not locked down.
  • +
+

Kelenius updated:

+
    +
  • Solars now start wired.
  • +
+

Neerti updated:

+
    +
  • Ports Bay's volume-based inventory system. It works off by weight classes instead of just slots, allowing you to hold more light items than you could previously.
  • +
  • Bulky items can now go in your backpack, however it will require twice the space of a normal sized item.
  • +
  • Spacesuits, RIGs, and sniper rifles made heavier.
  • +
+ +

07 April 2016

+

Datraen updated:

+
    +
  • If a slice of an item is spawned independently, it will get generic settings.
  • +
+

Kelenius updated:

+
    +
  • Changelings will now change appearance and species together when transforming.
  • +
  • Changelings no longer have gender honorifics in lingchat.
  • +
  • Absorbing the DNA from any source will allow you to use its name, species, and languages.
  • +
  • DNA extract sting won't produce a strange message if there's no target.
  • +
  • Cultists no longer need to research words.
  • +
+ +

04 April 2016

+

Kelenius updated:

+
    +
  • Monkeys can ventcrawl once again.
  • +
+

Yoshax updated:

+
    +
  • Tasks that take time to perform now have a progress bar.
  • +
  • Visibility of progress bars can be toggled in preferences. Default is on.
  • +
+ +

29 March 2016

+

Datraen updated:

+
    +
  • Added Three New Mixed Gamemodes: Lizard, Changeling + Wizard; Intrigue, Traitors + Ninja; Visitors, Ninja + Wizard.
  • +
  • Created a variable for latespawning antagonist templates, for customization of autospawning antagonists in mixed game modes.
  • +
  • Fixes the buckled check limiting whether or not someone can interact while sitting.
  • +
  • Resisting while buckled and cuffed will process the hand and leg cuffs before unbuckling.
  • +
  • Removed JSON encoding of the PDA Manifest list.
  • +
  • Microwaves no longer try cooking their components while cooking.
  • +
  • Adds a check to prison breaks that makes sure the APC is on before continuing.
  • +
  • Artifacts will no longer spawn on floor turfs.
  • +
  • Stops traitorborgs from being able to hack other borgs.
  • +
  • Stops traitorAIs from being able to hack unlinked borgs.
  • +
+

Yoshax updated:

+
    +
  • Player preferences has been overhauled. Please update your preferences, found at "Character Setup" > "Global" > "Preferences", as they have been reset.
  • +
+

16 March 2016

Datraen updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 01df44e3c49..5a36a0a5b7c 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2182,3 +2182,59 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Harmbaton no longer causes halloss while inactive. Kelenius: - bugfix: Potassium and nitroglycerin explosive grenades now work. +2016-03-29: + Datraen: + - rscadd: 'Added Three New Mixed Gamemodes: Lizard, Changeling + Wizard; Intrigue, + Traitors + Ninja; Visitors, Ninja + Wizard.' + - tweak: Created a variable for latespawning antagonist templates, for customization + of autospawning antagonists in mixed game modes. + - bugfix: Fixes the buckled check limiting whether or not someone can interact while + sitting. + - bugfix: Resisting while buckled and cuffed will process the hand and leg cuffs + before unbuckling. + - tweak: Removed JSON encoding of the PDA Manifest list. + - bugfix: Microwaves no longer try cooking their components while cooking. + - bugfix: Adds a check to prison breaks that makes sure the APC is on before continuing. + - bugfix: Artifacts will no longer spawn on floor turfs. + - bugfix: Stops traitorborgs from being able to hack other borgs. + - bugfix: Stops traitorAIs from being able to hack unlinked borgs. + Yoshax: + - tweak: Player preferences has been overhauled. Please update your preferences, + found at "Character Setup" > "Global" > "Preferences", as they have been reset. +2016-04-04: + Kelenius: + - bugfix: Monkeys can ventcrawl once again. + Yoshax: + - rscadd: Tasks that take time to perform now have a progress bar. + - rscadd: Visibility of progress bars can be toggled in preferences. Default is + on. +2016-04-07: + Datraen: + - bugfix: If a slice of an item is spawned independently, it will get generic settings. + Kelenius: + - tweak: Changelings will now change appearance and species together when transforming. + - tweak: Changelings no longer have gender honorifics in lingchat. + - rscadd: Absorbing the DNA from any source will allow you to use its name, species, + and languages. + - bugfix: DNA extract sting won't produce a strange message if there's no target. + - tweak: Cultists no longer need to research words. +2016-04-17: + Datraen: + - rscadd: Manually ports /tg/station's dark click code https://github.com/tgstation/-tg-station/pull/10272 + by Razharas. + - bugfix: Teshari smocks now spawn as smocks, and not aqua jumpsuits. + - bugfix: Checks to see if new a two-handed weapon can be wielded when dropped. + EmperorJon: + - bugfix: Robotics Console now correctly shows the operational/lockdown state and + button based off if it thinks the synthetic is locked down or not. + - bugfix: Autotraitor synths now behave the same as Traitor synths - they are not + locked down. + Kelenius: + - rscadd: Solars now start wired. + Neerti: + - rscadd: Ports Bay's volume-based inventory system. It works off by weight classes + instead of just slots, allowing you to hold more light items than you could + previously. + - rscadd: Bulky items can now go in your backpack, however it will require twice + the space of a normal sized item. + - rscdel: Spacesuits, RIGs, and sniper rifles made heavier. diff --git a/html/changelogs/Dat-MoreMixedModes.yml b/html/changelogs/Dat-MoreMixedModes.yml new file mode 100644 index 00000000000..2be981df6a8 --- /dev/null +++ b/html/changelogs/Dat-MoreMixedModes.yml @@ -0,0 +1,4 @@ +author: Datraen +delete-after: True +changes: + - rscadd: "Added three mixed modes, 'Mercenaries & Wizard', 'Mercenaries & Renegades', and 'Traitors & Renegades'." diff --git a/html/changelogs/Datraen-AdditionalModes.yml b/html/changelogs/Datraen-AdditionalModes.yml deleted file mode 100644 index d9fa39439ea..00000000000 --- a/html/changelogs/Datraen-AdditionalModes.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - rscadd: "Added Three New Mixed Gamemodes: Lizard, Changeling + Wizard; Intrigue, Traitors + Ninja; Visitors, Ninja + Wizard." - - tweak: "Created a variable for latespawning antagonist templates, for customization of autospawning antagonists in mixed game modes." diff --git a/html/changelogs/Datraen-PBAPCCheck.yml b/html/changelogs/Datraen-PBAPCCheck.yml deleted file mode 100644 index 03e3702eba4..00000000000 --- a/html/changelogs/Datraen-PBAPCCheck.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - bugfix: "Adds a check to prison breaks that makes sure the APC is on before continuing." diff --git a/html/changelogs/Datraen-SpawnTurf.yml b/html/changelogs/Datraen-SpawnTurf.yml deleted file mode 100644 index ab5d705c177..00000000000 --- a/html/changelogs/Datraen-SpawnTurf.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - bugfix: "Artifacts will no longer spawn on floor turfs." diff --git a/html/changelogs/Hubblenaut-hydro.yml b/html/changelogs/Hubblenaut-hydro.yml new file mode 100644 index 00000000000..dd0bb9fac6f --- /dev/null +++ b/html/changelogs/Hubblenaut-hydro.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Hubblenaut + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Hydroponics vendor and biogenerator offer full bottles of fertilizer. Prices and amount available adjusted to accomodate." \ No newline at end of file diff --git a/html/changelogs/PsiOmegaDelta-LoadoutDrinks.yml b/html/changelogs/PsiOmegaDelta-LoadoutDrinks.yml new file mode 100644 index 00000000000..50927ecb26f --- /dev/null +++ b/html/changelogs/PsiOmegaDelta-LoadoutDrinks.yml @@ -0,0 +1,4 @@ +author: PsiOmegaDelta +delete-after: True +changes: + - rscadd: "Can now prefill the loadout flask and vacuum-flask with a relevant liquid of your choice." diff --git a/html/changelogs/datraen-TraitorHackCheckFix.yml b/html/changelogs/datraen-TraitorHackCheckFix.yml deleted file mode 100644 index 4acd2abee1e..00000000000 --- a/html/changelogs/datraen-TraitorHackCheckFix.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - bugfix: "Stops traitorborgs from being able to hack other borgs." - - bugfix: "Stops traitorAIs from being able to hack unlinked borgs." diff --git a/icons/effects/progessbar.dmi b/icons/effects/progessbar.dmi new file mode 100644 index 00000000000..99284060aa6 Binary files /dev/null and b/icons/effects/progessbar.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index a8497c0c01e..154dc56390b 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index af2de326ab0..88976b245db 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index e548ba4afdb..930b8aea706 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 3ea8a3254c5..628f549548f 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index e7d69759aa7..a70edbe3c3a 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 8082f74e484..ec10e508c73 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/veymed.dmi b/icons/mob/human_races/cyberlimbs/veymed.dmi new file mode 100644 index 00000000000..f84744fc895 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/veymed.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/zenghu.dmi b/icons/mob/human_races/cyberlimbs/zenghu.dmi index bf508782770..8694f1b16fa 100644 Binary files a/icons/mob/human_races/cyberlimbs/zenghu.dmi and b/icons/mob/human_races/cyberlimbs/zenghu.dmi differ diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 728255c8417..f8d3c1c23fb 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index a47ee5d686b..265df7a2ad3 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index f8ce4080412..6e5777e4bfe 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/screen/minimalist.dmi b/icons/mob/screen/minimalist.dmi new file mode 100644 index 00000000000..18dbd358fa7 Binary files /dev/null and b/icons/mob/screen/minimalist.dmi differ diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi index d72a362422d..077b0e80403 100644 Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 3635ab9ac18..168bcdc99e8 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 2222f74a781..0d8a4129d71 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 69ed74959fd..ee54d17c87a 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 1d3d0f0296d..7fa721499b3 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 32b620c75c1..26a6110e38c 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 4dea6388b15..f97c5dd6583 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index cc09803419f..084392801db 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 1d7ddbf51f9..e6094f3bb08 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index d8bcc7d184b..f492aab6880 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi index a817a42648c..940051fea10 100644 Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index 75196e856d0..e5cd99b2071 100644 Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 920114b5500..58cf8bcff7e 100644 Binary files a/icons/obj/stock_parts.dmi and b/icons/obj/stock_parts.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 5dff42780f7..07e424112fb 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 3cf5a6eabcc..fa4ef129a6e 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index 89d382c824d..0a5aeb5b446 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index f3d2b6916cf..137d43935f4 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 726b9744f3a..46a14253bd2 100755 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/maps/RandomZLevels/stationCollision.dm b/maps/RandomZLevels/stationCollision.dm index 3bc32eab3b0..6d87f401864 100644 --- a/maps/RandomZLevels/stationCollision.dm +++ b/maps/RandomZLevels/stationCollision.dm @@ -17,24 +17,24 @@ /* * Areas - */ - //Gateroom gets its own APC specifically for the gate - /area/awaymission/gateroom +*/ +//Gateroom gets its own APC specifically for the gate +/area/awaymission/gateroom - //Library, medbay, storage room - /area/awaymission/southblock +//Library, medbay, storage room +/area/awaymission/southblock - //Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas) - /area/awaymission/arrivalblock +//Arrivals, security, hydroponics, shuttles (since they dont move, they dont need specific areas) +/area/awaymission/arrivalblock - //Crew quarters, cafeteria, chapel - /area/awaymission/midblock +//Crew quarters, cafeteria, chapel +/area/awaymission/midblock - //engineering, bridge (not really north but it doesnt really need its own APC) - /area/awaymission/northblock +//engineering, bridge (not really north but it doesnt really need its own APC) +/area/awaymission/northblock - //That massive research room - /area/awaymission/research +//That massive research room +/area/awaymission/research //Syndicate shuttle /area/awaymission/syndishuttle diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index a712597e8c6..48f81ffa1da 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -191,7 +191,7 @@ "adI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "adJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "adK" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/crew_quarters/locker) -"adL" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxstarboard) +"adL" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/starboard) "adM" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/maintenance/library) "adN" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "library_maint_outer"; locked = 1; name = "Library Maintenance EVA External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/library) "adO" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "library_maint_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/maintenance/library) @@ -215,7 +215,7 @@ "aeg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aeh" = (/obj/machinery/vending/coffee,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aei" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard) -"aej" = (/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aej" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/solar/starboard) "aek" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "library_maint_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/maintenance/library) "ael" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "library_maint_pump"},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor,/area/maintenance/library) "aem" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/camera/network/civilian{c_tag = "CIV - Library EVA"; dir = 1},/turf/simulated/floor,/area/maintenance/library) @@ -237,8 +237,8 @@ "aeC" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "aeD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) -"aeF" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) -"aeG" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aeF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aeG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "aeJ" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor,/area/maintenance/library) @@ -435,7 +435,7 @@ "ais" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "ait" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "aiu" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) -"aiv" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard) +"aiv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/auxport) "aiw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library) "aix" = (/obj/machinery/door/window/northleft{name = "Library Desk Door"; req_access = list(37)},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/library) "aiy" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/wood,/area/library) @@ -694,7 +694,7 @@ "anr" = (/turf/simulated/wall,/area/hallway/secondary/escape/fore_escape_pod_hallway) "ans" = (/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) "ant" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) -"anu" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/turf/simulated/floor,/area/maintenance/library) +"anu" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/turf/simulated/floor,/area/maintenance/library) "anv" = (/obj/item/stack/material/glass,/turf/simulated/floor,/area/vacant/vacant_site) "anw" = (/turf/simulated/floor,/area/vacant/vacant_site) "anx" = (/obj/structure/table/reinforced,/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/vacant/vacant_site) @@ -828,9 +828,9 @@ "apV" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel EVA"; dir = 1},/turf/simulated/floor,/area/maintenance/chapel) "apW" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "chapel_maint_pump"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/chapel) "apX" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "chapel_maint_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = -25; req_access = list(13)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/maintenance/chapel) -"apY" = (/obj/structure/closet/secure_closet/detective,/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/turf/simulated/floor/lino,/area/security/detectives_office) +"apY" = (/obj/structure/closet/secure_closet/detective,/turf/simulated/floor/lino,/area/security/detectives_office) "apZ" = (/turf/simulated/floor/carpet,/area/security/detectives_office) -"aqa" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/sunglasses,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/security/detectives_office) +"aqa" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/carpet,/area/security/detectives_office) "aqb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet,/area/security/detectives_office) "aqc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/carpet,/area/security/detectives_office) "aqd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/microscope,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) @@ -937,7 +937,7 @@ "asa" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/evidence,/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "asb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "asc" = (/obj/machinery/light,/obj/machinery/chem_master,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) -"asd" = (/obj/machinery/camera/network/security{c_tag = "EVA Northeast"; dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) +"asd" = (/obj/machinery/camera/network/security{c_tag = "SEC - Forensic Office"; dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "ase" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) "asf" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) "asg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_escape_pod_hallway) @@ -1010,7 +1010,7 @@ "atv" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main) "atw" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/red{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main) "atx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/security/main) -"aty" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled,/area/security/main) +"aty" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/item/weapon/storage/box/drinkingglasses,/turf/simulated/floor/tiled,/area/security/main) "atz" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/tiled,/area/security/main) "atA" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/red{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/item/weapon/storage/box/donut,/turf/simulated/floor/tiled,/area/security/main) "atB" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/machinery/photocopier,/turf/simulated/floor/tiled,/area/security/main) @@ -1035,7 +1035,7 @@ "atU" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/vacant/vacant_site) "atV" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/wood,/area/vacant/vacant_site) "atW" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/vacant/vacant_site) -"atX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/frame/fire_alarm,/turf/simulated/floor/wood,/area/vacant/vacant_site) +"atX" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/item/frame,/turf/simulated/floor/wood,/area/vacant/vacant_site) "atY" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site) "atZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/vacant/vacant_site) "aua" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/storage/primary) @@ -1176,7 +1176,7 @@ "awF" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) "awG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) "awH" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) -"awI" = (/obj/machinery/newscaster/security_unit{pixel_x = -30},/obj/machinery/camera/network/security{c_tag = "SEC - HoS' Office"; dir = 4},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/red,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"awI" = (/obj/machinery/newscaster/security_unit{pixel_x = -30},/obj/machinery/camera/network/security{c_tag = "SEC - HoS' Office"; dir = 4},/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/red_hos,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "awJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "awK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) "awL" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) @@ -1264,10 +1264,10 @@ "ayp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/chapel_hallway) "ayq" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/item/weapon/stool/padded,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel) "ayr" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) -"ays" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Armor"; dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ays" = (/obj/structure/table/reinforced,/obj/machinery/door/window{name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/window/westleft,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 8; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "ayt" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 28},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "ayu" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) -"ayv" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/rack,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"ayv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "ayw" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled/white,/area/crew_quarters/locker) "ayx" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/interrogation) "ayy" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/interrogation) @@ -1288,9 +1288,9 @@ "ayN" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/security/main) "ayO" = (/obj/effect/floor_decal/corner/red{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled,/area/security/main) "ayP" = (/turf/simulated/wall/r_wall,/area/security/security_cell_hallway) -"ayQ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/security/security_cell_hallway) -"ayR" = (/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/paper,/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 1"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/security/security_cell_hallway) -"ayS" = (/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/paper,/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 2"; dir = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/security/security_cell_hallway) +"ayQ" = (/obj/machinery/cryopod,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway) +"ayR" = (/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 1"},/obj/structure/cryofeed,/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway) +"ayS" = (/obj/machinery/cryopod{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway) "ayT" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor,/area/security/riot_control) "ayU" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/meter,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/security/riot_control) "ayV" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor,/area/security/riot_control) @@ -1347,13 +1347,13 @@ "azU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/main) "azV" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/security/main) "azW" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/tiled,/area/security/main) -"azX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/security/security_cell_hallway) -"azY" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/security_cell_hallway) +"azX" = (/obj/machinery/camera/network/security{c_tag = "SEC - Solitary Confinement 2"; dir = 2},/obj/structure/cryofeed{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/security/security_cell_hallway) +"azY" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "azZ" = (/obj/item/weapon/stool,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/security{c_tag = "SEC - Riot Control"; dir = 4},/turf/simulated/floor,/area/security/riot_control) "aAa" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor,/area/security/riot_control) "aAb" = (/turf/simulated/floor,/area/security/riot_control) "aAc" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor,/area/security/riot_control) -"aAd" = (/obj/machinery/door/airlock/atmos{name = "Riot Control Maintenance"; req_access = list(2,12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/riot_control) +"aAd" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aAe" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/maintenance/security_starboard) "aAf" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/maintenance/security_starboard) "aAg" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/maintenance/security_starboard) @@ -1410,7 +1410,7 @@ "aBf" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/tiled,/area/security/main) "aBg" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/red{dir = 10},/turf/simulated/floor/tiled,/area/security/main) "aBh" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/simulated/floor/tiled,/area/security/main) -"aBi" = (/obj/structure/bed/padded,/turf/simulated/floor,/area/security/security_cell_hallway) +"aBi" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/table/standard,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aBj" = (/obj/machinery/computer/area_atmos/area,/turf/simulated/floor,/area/security/riot_control) "aBk" = (/obj/machinery/atmospherics/binary/pump,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/riot_control) "aBl" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/wrench,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/security/riot_control) @@ -1456,8 +1456,8 @@ "aBZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/main) "aCa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/main) "aCb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/main) -"aCc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/security/security_cell_hallway) -"aCd" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor,/area/security/security_cell_hallway) +"aCc" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"aCd" = (/obj/machinery/light/small{dir = 8},/obj/structure/table/standard,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aCe" = (/obj/machinery/door/airlock/security{name = "Riot Control"; req_access = list(2)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/riot_control) "aCf" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/plushie/beepsky,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard) "aCg" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass{name = "Civilian Hallway Access"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) @@ -1509,10 +1509,10 @@ "aDa" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aDb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aDc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"aDd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"aDe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/security_cell_hallway) +"aDd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/red{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"aDe" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aDf" = (/obj/effect/floor_decal/corner/red{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"aDg" = (/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"aDg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/corner/red{dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aDh" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aDi" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/westright{name = "Security Delivery"; req_access = list(1)},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aDj" = (/obj/structure/plasticflaps{opacity = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; dir = 1; freq = 1400; location = "Security"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/plating,/area/security/security_cell_hallway) @@ -1593,7 +1593,7 @@ "aEG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) "aEH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/machinery/door/window/brigdoor/northleft{name = "Weapons locker"; req_access = list(2)},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/projectile/colt/detective,/obj/item/weapon/gun/projectile/colt/detective,/obj/item/weapon/gun/projectile/colt/detective,/obj/item/weapon/gun/projectile/colt/detective,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "aEI" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden) -"aEJ" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aEJ" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/button/remote/blast_door{id = "port_first_aid"; name = "Security Shutters"; pixel_y = 25},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aEK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/security_equiptment_storage) "aEL" = (/obj/machinery/computer/security{pixel_y = 0},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden) "aEM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) @@ -1646,14 +1646,17 @@ "aFH" = (/obj/item/weapon/stool/padded,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aFI" = (/obj/structure/table/glass,/obj/item/inflatable{pixel_x = 6; pixel_y = 6},/obj/item/inflatable{pixel_x = 2; pixel_y = 2},/obj/item/inflatable{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aFJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) +"aFK" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) +"aFL" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled,/area/medical/surgeryobs) +"aFM" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) "aFN" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/armoury) "aFO" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/turf/simulated/floor/tiled,/area/security/armoury) "aFP" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/security/brig) "aFQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/brig) -"aFR" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/janitor) +"aFR" = (/obj/structure/mopbucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/obj/item/weapon/mop,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/janitor) "aFS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/security/warden) "aFT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) -"aFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden) +"aFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Warden's Office"; req_access = list(3)},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/security/warden) "aFV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) "aFW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/warden) "aFX" = (/turf/simulated/wall,/area/security/warden) @@ -1680,9 +1683,9 @@ "aGs" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor,/area/maintenance/security_starboard) "aGt" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor,/area/maintenance/security_starboard) "aGu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard) -"aGv" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/janitor) +"aGv" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/janitor) "aGw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/brig) -"aGx" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/janitor) +"aGx" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled,/area/janitor) "aGy" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aGz" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aGA" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -1697,7 +1700,7 @@ "aGJ" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aGK" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aGL" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aGM" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) +"aGM" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/reception) "aGN" = (/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) "aGO" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) "aGP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) @@ -1705,7 +1708,11 @@ "aGR" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aGS" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aGT" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aGU" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/tiled,/area/bridge_hallway) "aGV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aGW" = (/obj/machinery/door/airlock/atmos{name = "Riot Control Maintenance"; req_access = newlist(); req_one_access = list(2,12,24)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/security/riot_control) +"aGX" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stamp/qm,/turf/simulated/floor/tiled,/area/quartermaster/qm) +"aGY" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "aGZ" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury) "aHa" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/armoury) "aHb" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/brig) @@ -1747,8 +1754,8 @@ "aHL" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/maintenance/security_starboard) "aHM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/maintenance/security_starboard) "aHN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/security_starboard) -"aHO" = (/obj/structure/closet/l3closet/janitor,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/janitor) -"aHP" = (/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/janitor) +"aHO" = (/obj/structure/closet/jcloset,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/janitor) +"aHP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/janitor) "aHQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/janitor) "aHR" = (/obj/machinery/light_switch{pixel_x = 34; pixel_y = 1},/obj/machinery/button/remote/blast_door{id = "janitor_blast"; name = "Privacy Shutters"; pixel_x = 26; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Custodial Closet"; dir = 9},/turf/simulated/floor/tiled,/area/janitor) "aHS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Aft 2"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) @@ -1771,6 +1778,11 @@ "aIj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aIk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aIl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aIm" = (/obj/structure/frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"aIn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/frame,/turf/simulated/floor/tiled,/area/engineering/workshop) +"aIo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"aIp" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"aIq" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aIr" = (/obj/machinery/door/blast/regular{id = "Armoury"; name = "Emergency Access"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/armoury) "aIs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Emergency Access"; pixel_x = 0; pixel_y = -28; req_access = list(3)},/turf/simulated/floor/tiled,/area/security/brig) "aIt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled,/area/security/brig) @@ -1806,7 +1818,7 @@ "aIX" = (/obj/machinery/door/blast/regular{dir = 1; id = "Cell 3"; name = "Cell Door"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/prison) "aIY" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/security_starboard) "aIZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/security_starboard) -"aJa" = (/obj/structure/closet/jcloset,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor) +"aJa" = (/obj/structure/closet/jcloset,/turf/simulated/floor/tiled,/area/janitor) "aJb" = (/turf/simulated/floor/tiled,/area/janitor) "aJc" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/janitor) "aJd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/janitor) @@ -1837,7 +1849,10 @@ "aJC" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool) "aJD" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool) "aJE" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aJF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/computer/cryopod{density = 0; layer = 3.3; pixel_y = 32},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "aJG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aJH" = (/obj/effect/floor_decal/corner/red{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway) +"aJI" = (/obj/machinery/sleeper,/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aJJ" = (/turf/simulated/wall/r_wall,/area/security/range) "aJK" = (/turf/simulated/wall,/area/security/range) "aJL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/range) @@ -1856,7 +1871,7 @@ "aJY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "visitdoor"; name = "Visitation Area"; req_access = list(63)},/turf/simulated/floor/tiled,/area/security/prison) "aJZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/prison) "aKa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/prison) -"aKb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access = list(2)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/security/prison) +"aKb" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/sign/poster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aKc" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/computer/arcade,/turf/simulated/floor/tiled,/area/security/prison) "aKd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/prison) "aKe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/prison) @@ -1869,8 +1884,8 @@ "aKl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/security_starboard) "aKm" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/janitor) "aKn" = (/obj/structure/window/reinforced,/obj/machinery/door/window/eastleft{name = "Janitorial Delivery"; req_access = list(26)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/janitor) -"aKo" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor) -"aKp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/janitor) +"aKo" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/janitor) +"aKp" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/janitor) "aKq" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/janitor) "aKr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/lawoffice) "aKs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -1886,6 +1901,9 @@ "aKC" = (/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool) "aKD" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/beach/water{icon_state = "seadeep"},/area/crew_quarters/pool) "aKE" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aKF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/sign/redcross{name = "FirstAid"},/obj/machinery/door/blast/shutters{dir = 8; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) +"aKG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aKH" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aKI" = (/turf/simulated/floor/tiled,/area/security/range) "aKJ" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/security/range) "aKK" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/range) @@ -1924,9 +1942,9 @@ "aLr" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Custodial Maintenance"; req_access = list(26)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/janitor) "aLs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor) "aLt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled,/area/janitor) -"aLu" = (/obj/structure/janitorialcart,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor) +"aLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor) "aLv" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/steel,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/janitor) -"aLw" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -32},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/janitor) +"aLw" = (/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Janitor"},/turf/simulated/floor/tiled,/area/janitor) "aLx" = (/obj/machinery/disposal,/obj/machinery/light,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/janitor) "aLy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aLz" = (/obj/machinery/button/remote/blast_door{id = "lawyer_blast"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -34; pixel_y = 0},/obj/machinery/camera/network/civilian{c_tag = "CIV - Internal Affairs"; dir = 5},/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -1948,6 +1966,8 @@ "aLP" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area) "aLQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/pool) "aLR" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aLS" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/machinery/sleep_console{tag = "icon-sleeperconsole (NORTH)"; icon_state = "sleeperconsole"; dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aLT" = (/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aLU" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/target_stake,/turf/simulated/floor/tiled,/area/security/range) "aLV" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range) "aLW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/range) @@ -1967,6 +1987,7 @@ "aMk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/flasher{id = "permentryflash"; name = "Floor mounted flash"; pixel_x = 0},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/security/prison) "aMl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/prison{c_tag = "SEC - Common Brig Enterance"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/prison) "aMm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Communal Brig Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison) +"aMn" = (/obj/machinery/door/airlock/medical{name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aMo" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table/steel,/obj/machinery/camera/network/prison{c_tag = "SEC - Brig Observation"; dir = 1},/turf/simulated/floor/tiled,/area/security/prison) "aMp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Communal Brig Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison) "aMq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison) @@ -2001,6 +2022,12 @@ "aMT" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aMU" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aMV" = (/obj/structure/table/glass,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) +"aMW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aMX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aMY" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aMZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aNa" = (/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aNb" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aNc" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/security/range) "aNd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/range) "aNe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/range) @@ -2066,6 +2093,12 @@ "aOm" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aOn" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aOo" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) +"aOp" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aOq" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aOr" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aOs" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Starboard"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aOt" = (/obj/structure/table/glass,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Medical Emergency Phone"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"aOu" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) "aOv" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range) "aOw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/range) "aOx" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/range) @@ -2117,6 +2150,9 @@ "aPr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/pool) "aPs" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool) "aPt" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) +"aPu" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"aPv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) +"aPw" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced,/obj/random/energy,/obj/random/energy,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "aPx" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/range) "aPy" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/security/range) "aPz" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/security/range) @@ -2225,7 +2261,7 @@ "aRy" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled,/area/storage/art) "aRz" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aRA" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/lawoffice) -"aRB" = (/obj/structure/closet/lawcloset,/obj/item/clothing/glasses/sunglasses/big,/obj/item/clothing/under/lawyer/black,/obj/item/clothing/under/lawyer/blue,/obj/item/clothing/under/lawyer/bluesuit,/obj/item/clothing/under/lawyer/female,/obj/item/clothing/under/lawyer/red,/turf/simulated/floor/tiled/dark,/area/lawoffice) +"aRB" = (/obj/structure/closet/lawcloset,/turf/simulated/floor/tiled/dark,/area/lawoffice) "aRC" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aRD" = (/obj/machinery/light/small{dir = 8},/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom) "aRE" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom) @@ -2486,13 +2522,13 @@ "aWz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aWA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aWB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aWC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aWD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aWE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway) -"aWF" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) +"aWC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aWD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aWE" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) +"aWF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/recreation_area_hallway) "aWG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) -"aWH" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) -"aWI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/pool) +"aWH" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) +"aWI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) "aWJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/pool) "aWK" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway) "aWL" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/fore_port_escape_pod_hallway) @@ -2695,7 +2731,7 @@ "baA" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/machinery/atm{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "baB" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/flora/pottedplant,/obj/effect/floor_decal/corner/brown/full{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "baC" = (/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/grass,/area/hydroponics/garden) -"baD" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/tiled,/area/hydroponics/garden) +"baD" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle{pixel_x = -2; pixel_y = -2},/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "baE" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hydroponics/garden) "baF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) "baG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hydroponics/garden) @@ -2927,7 +2963,7 @@ "beY" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "beZ" = (/turf/simulated/wall,/area/medical/surgeryobs) "bfa" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/surgeryobs) -"bfb" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled,/area/medical/surgeryobs) +"bfb" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "bfc" = (/obj/structure/table/standard,/obj/item/weapon/hemostat,/obj/item/weapon/cautery,/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/button/remote/blast_door{id = "surgeryobs2"; name = "Privacy Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "bfd" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "bfe" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/pink{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/surgery2) @@ -3381,7 +3417,7 @@ "bnK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) "bnL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/virology) "bnM" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/lime{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bnN" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/lime/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) +"bnN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access = list(1)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/security/prison) "bnO" = (/obj/structure/lattice,/obj/machinery/light{dir = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/rnd/docking) "bnP" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 1},/area/shuttle/research/station) "bnQ" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor,/area/shuttle/research/station) @@ -3512,7 +3548,8 @@ "bql" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqm" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqn" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bqo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bqo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bqp" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Armor"; dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/armoury) "bqq" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bqr" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/medbay{c_tag = "MED - Cloning"; dir = 2},/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bqs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) @@ -3604,6 +3641,7 @@ "bsa" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bsb" = (/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "bsc" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bsd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/simulated/floor/tiled/dark,/area/security/armoury) "bse" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bsf" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bsg" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) @@ -3666,7 +3704,10 @@ "btl" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "btm" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "btn" = (/obj/effect/floor_decal/corner/mauve{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "GeneticsDoor"; name = "Door Control"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bto" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"btp" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(1)},/obj/machinery/light,/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) "btq" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"btr" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) "bts" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "btt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "btu" = (/obj/machinery/door/window/westright{name = "Virology Isolation Room One"; req_access = list(39)},/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3724,7 +3765,7 @@ "buu" = (/obj/structure/filingcabinet/chestdrawer{name = "Medical Forms"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) "buv" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled/white,/area/medical/reception) "buw" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bux" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bux" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buz" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buA" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) @@ -3796,7 +3837,7 @@ "bvO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/reception) "bvP" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "bvQ" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/reception) -"bvR" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; listening = 1; name = "Captain's Intercom"; pixel_x = 21; pixel_y = 0},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bvR" = (/obj/structure/closet/secure_closet/CMO,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bvS" = (/turf/simulated/floor/tiled/white,/area/medical/reception) "bvT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/reception) "bvU" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/surgery) @@ -3881,8 +3922,8 @@ "bxv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bxw" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bxx" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bxy" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/item/clothing/mask/gas,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bxz" = (/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bxy" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/stamp/cmo,/obj/item/weapon/pen,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/folder/white_cmo,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bxz" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bxA" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) "bxB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology) "bxC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology) @@ -3949,7 +3990,7 @@ "byL" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/command{id_tag = "cmodoor"; name = "CMO's Office"; req_access = list(40)},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "byM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "byN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"byO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/folder/white{pixel_y = 0},/obj/item/weapon/stamp/cmo,/obj/item/weapon/pen,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"byO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = 30},/obj/item/weapon/folder/blue_hop,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "byP" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "medbayquar"; name = "Medbay Emergency Lockdown Control"; pixel_x = -28; pixel_y = 36; req_access = list(5)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = -28; pixel_y = 28; req_access = list(5)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "cmooffice"; name = "CMO Privacy Shutters"; pixel_x = -38; pixel_y = 28},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the CMO's office."; id = "cmodoor"; name = "CMO Office Door Control"; pixel_x = -38; pixel_y = 36},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark/start{name = "Chief Medical Officer"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "byQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "byR" = (/obj/structure/table/reinforced,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/obj/item/device/megaphone,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) @@ -3972,7 +4013,7 @@ "bzi" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Console"; pixel_x = 22; pixel_y = 0; tag_exterior_door = "virologyq_airlock_exterior"; tag_interior_door = "virologyq_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology) "bzj" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Button"; pixel_x = -28; pixel_y = 0; req_access = list(39)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bzk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bzl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) +"bzl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/l3closet/virology,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Quarantine Airlock"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology) "bzm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bzn" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport) "bzo" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "arrivals_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/turf/simulated/floor,/area/maintenance/research) @@ -4063,7 +4104,7 @@ "bAV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bAW" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/virology) "bAX" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/white,/area/medical/virology) -"bAY" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/auxport) +"bAY" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/auxport) "bAZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bBa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bBb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -4161,13 +4202,12 @@ "bCP" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/medical/morgue) "bCQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/lime/full,/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) "bCR" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/wall/r_wall,/area/medical/virology) -"bCS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/simulated/floor/tiled/white,/area/medical/virology) +"bCS" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/virology,/turf/simulated/floor/tiled/white,/area/medical/virology) "bCT" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) "bCU" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxport) "bCV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/auxport) -"bCW" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/auxport) -"bCX" = (/turf/simulated/floor/airless,/area/solar/auxport) -"bCY" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/auxport) +"bCW" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/port) +"bCX" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/solar/port) "bCZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = 26; pixel_y = -26; req_access = list(11,13)},/turf/simulated/floor/airless,/area/solar/auxport) "bDa" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/auxsolarport) "bDb" = (/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_tool_airlock"; pixel_x = 0; pixel_y = 28; req_access = list(13); tag_airpump = "solar_tool_pump"; tag_chamber_sensor = "solar_tool_sensor"; tag_exterior_door = "solar_tool_outer"; tag_interior_door = "solar_tool_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 0; pixel_y = -26},/turf/simulated/floor,/area/maintenance/auxsolarport) @@ -4259,7 +4299,6 @@ "bEJ" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/wardrobe/virology_white,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 8; pixel_y = 28; req_access = list(39)},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "bEK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bEL" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/steel,/area/medical/virology) -"bEM" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/auxport) "bEN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "bEO" = (/obj/structure/cable/yellow,/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Port Solar Control"; track = 0},/turf/simulated/floor,/area/maintenance/auxsolarport) "bEP" = (/obj/item/weapon/stool,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/maintenance/auxsolarport) @@ -4381,7 +4420,7 @@ "bHb" = (/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bHc" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bHd" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) -"bHe" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) +"bHe" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/l3closet/virology,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) "bHf" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "bHg" = (/obj/machinery/account_database,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "bHh" = (/turf/simulated/wall,/area/bridge_hallway) @@ -4432,7 +4471,7 @@ "bIa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/morgue) "bIb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bIc" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bId" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) +"bId" = (/obj/structure/table/standard,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/food/drinks/jar,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/weapon/folder/white_rd,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bIe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/virology) "bIf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/medical/virology) "bIg" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/turf/simulated/floor/plating,/area/maintenance/research) @@ -4526,7 +4565,7 @@ "bJQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research) "bJR" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/rnd/rdoffice) "bJS" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/device/megaphone,/obj/item/weapon/pen,/obj/item/weapon/paper/monitorkey,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) -"bJT" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/food/drinks/jar,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bJT" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/structure/door_assembly/door_assembly_com,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) "bJU" = (/obj/structure/table/standard,/obj/machinery/computer/skills,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bJV" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bJW" = (/obj/effect/floor_decal/corner/pink{dir = 4},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor/tiled/white,/area/assembly/robotics) @@ -4571,7 +4610,7 @@ "bKJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/chemistry) "bKK" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/newscaster{pixel_y = -30},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) "bKL" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Aft"; dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bKM" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bKM" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled,/area/hydroponics/garden) "bKN" = (/turf/simulated/wall,/area/medical/medbay_emt_bay) "bKO" = (/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; req_access = list(5)},/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bKP" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) @@ -4716,7 +4755,7 @@ "bNy" = (/obj/effect/floor_decal/corner/blue,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "bNz" = (/obj/effect/floor_decal/corner/blue{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway) "bNA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/bridge_hallway) -"bNB" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/tiled,/area/bridge_hallway) +"bNB" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/closet/secure_closet/paramedic,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bNC" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bND" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bNE" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -4741,7 +4780,7 @@ "bNX" = (/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bNY" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/beige{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bNZ" = (/obj/effect/floor_decal/corner/green{dir = 9},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora) -"bOa" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"bOa" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/closet/l3closet/medical,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bOb" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/tiled,/area/quartermaster/foyer) "bOc" = (/obj/machinery/smartfridge/secure/medbay{req_one_access = list(33,66)},/turf/simulated/wall/r_wall,/area/medical/chemistry) "bOd" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) @@ -4819,7 +4858,7 @@ "bPx" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bPy" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bPz" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bPA" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bPA" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/closet/wardrobe/captain,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bPB" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/shower{pixel_y = 2},/obj/machinery/door/window/southright{name = "Shower"},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "bPC" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Port"; dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bPD" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -5001,7 +5040,7 @@ "bSX" = (/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway) "bSY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/blue,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/bridge_hallway) "bSZ" = (/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/bridge_hallway) -"bTa" = (/obj/structure/closet/secure_closet/captains,/obj/item/clothing/head/beret/centcom/captain{desc = "A white captain's beret"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) +"bTa" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bTb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bTc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/command{c_tag = "COM - Captain's Bedroom"; dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bTd" = (/obj/structure/displaycase,/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -5050,8 +5089,8 @@ "bTU" = (/obj/structure/bed/chair/wheelchair,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bTV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bTW" = (/obj/machinery/iv_drip,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) -"bTX" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) -"bTY" = (/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"bTX" = (/obj/structure/closet/l3closet/medical,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"bTY" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; listening = 1; name = "Captain's Intercom"; pixel_x = 21; pixel_y = 0},/obj/structure/table/woodentable,/obj/item/weapon/folder/blue_captain,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bTZ" = (/obj/structure/bedsheetbin,/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bUa" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/floodlight,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor,/area/maintenance/medbay_aft) "bUb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_aft) @@ -5202,7 +5241,7 @@ "bWQ" = (/obj/structure/bed/chair,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "bWR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chemwindow"; name = "Chemistry Window Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry) "bWS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chemwindow"; name = "Chemistry Window Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry) -"bWT" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"bWT" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "bWU" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bWV" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bWW" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled,/area/medical/virologyaccess) @@ -5329,7 +5368,7 @@ "bZn" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/device/taperecorder,/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bZo" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bZp" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bZq" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bZq" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/captain,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bZr" = (/obj/structure/table/woodentable,/obj/machinery/computer/skills,/obj/item/weapon/hand_tele,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bZs" = (/obj/machinery/door/window/southright{name = "Captain's Desk Door"; req_access = list(20)},/turf/simulated/floor/wood,/area/crew_quarters/captain) "bZt" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/blue,/obj/item/weapon/pen,/obj/item/device/megaphone,/obj/machinery/requests_console{announcementConsole = 1; department = "Captain's Desk"; departmentType = 5; name = "Captain RC"; pixel_x = 30; pixel_y = 0},/obj/structure/window/reinforced,/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -5485,6 +5524,7 @@ "ccn" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_d) "cco" = (/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/machinery/light,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/white,/area/medical/patient_d) "ccp" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) +"ccq" = (/obj/machinery/sleeper{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "ccr" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) "ccs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/medical_escape_pod_hallway) "cct" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored/upper_level) @@ -5919,7 +5959,7 @@ "ckG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech) "ckH" = (/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/storage/tech) "ckI" = (/turf/simulated/floor,/area/storage/tech) -"ckJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station) +"ckJ" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "ckK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech) "ckL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three) "ckM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three) @@ -5959,7 +5999,7 @@ "clu" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/tech) "clv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/storage/tech) "clw" = (/obj/machinery/requests_console{department = "Tech storage"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor,/area/storage/tech) -"clx" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"clx" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "cly" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "clz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "clA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) @@ -6012,7 +6052,7 @@ "cmv" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/storage/tech) "cmw" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/storage/tech) "cmx" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/storage/tech) -"cmy" = (/obj/structure/table/glass,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Medical Emergency Phone"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"cmy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "cmz" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "cmA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/central_three) "cmB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_three) @@ -6259,12 +6299,13 @@ "cri" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/primary/port) "crj" = (/obj/structure/sign/directions/engineering{dir = 2; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/security{dir = 4; pixel_y = 32},/obj/structure/sign/directions/cargo{dir = 8; pixel_y = 32; pixel_z = 8},/turf/simulated/floor/tiled,/area/hallway/primary/port) "crk" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_four) +"crl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "crm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port) "crn" = (/obj/structure/sign/directions/science{dir = 4; pixel_y = 32; pixel_z = -8},/obj/structure/sign/directions/medical{dir = 4; pixel_y = 32},/obj/structure/sign/directions/evac{dir = 4; pixel_y = 32; pixel_z = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port) "cro" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port) "crp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port) -"crq" = (/obj/machinery/sleeper{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"crr" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"crq" = (/obj/structure/bed/chair/office/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"crr" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "crs" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/port) "crt" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Port Primary 2"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/primary/port) "cru" = (/turf/simulated/floor/tiled,/area/hallway/primary/port) @@ -6425,7 +6466,7 @@ "cut" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cuu" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cuv" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) -"cuw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) +"cuw" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (NORTH)"; icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cux" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) "cuy" = (/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor/tiled,/area/hydroponics) "cuz" = (/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) @@ -6437,7 +6478,7 @@ "cuF" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) "cuG" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) "cuH" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) -"cuI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11) +"cuI" = (/obj/item/frame/light,/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cuJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11) "cuK" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) "cuL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/white{dir = 8},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) @@ -6502,8 +6543,8 @@ "cvS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/quartermaster/storage) "cvT" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/quartermaster/storage) "cvU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) -"cvV" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light,/obj/structure/bed/roller,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"cvW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cvV" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Port"; dir = 1},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"cvW" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "cvX" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/quartermaster/qm) "cvY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cvZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/qm) @@ -6605,9 +6646,9 @@ "cxR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar) "cxS" = (/obj/structure/table/woodentable,/obj/item/clothing/head/cakehat,/obj/machinery/atm{pixel_y = 30},/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cxT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"cxU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cxU" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cxV" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) -"cxW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cxW" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,10,63)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) "cxX" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 5"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cxY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cxZ" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) @@ -6620,10 +6661,10 @@ "cyg" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) "cyh" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) "cyi" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 6"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) -"cyj" = (/obj/structure/bed/chair/office/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cyj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station) "cyk" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) "cyl" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) -"cym" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cym" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/checkpoint2) "cyn" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 11"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) "cyo" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) "cyp" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) @@ -6636,7 +6677,7 @@ "cyw" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12) "cyx" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12) "cyy" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 12"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12) -"cyz" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera/network/medbay{c_tag = "MED - FA Station Port"; dir = 1},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cyz" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/ce,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/flame/lighter/zippo,/obj/item/device/megaphone,/obj/item/weapon/folder/yellow_ce,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cyA" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12) "cyB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/sign/securearea,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cyC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage) @@ -6650,7 +6691,7 @@ "cyK" = (/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access = list(41)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyL" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyM" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cyN" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm) +"cyN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/tiled,/area/engineering/workshop) "cyO" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyP" = (/obj/machinery/computer/security/mining,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cyQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/maintenance/apmaint) @@ -6809,7 +6850,7 @@ "cBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) "cBO" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva) "cBP" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/camera/network/engineering{c_tag = "ENG - Solar Aft Port"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) -"cBQ" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/secure_closet/security,/obj/item/device/flashlight/flare,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/checkpoint2) +"cBQ" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cBR" = (/obj/effect/floor_decal/corner/red{dir = 5},/obj/structure/closet/wardrobe/red,/turf/simulated/floor/tiled,/area/security/checkpoint2) "cBS" = (/turf/simulated/floor/tiled/dark,/area/hallway/secondary/docking_hallway) "cBT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/quartermaster/qm) @@ -6848,9 +6889,9 @@ "cCA" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/apmaint) "cCB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/meter,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) "cCC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor,/area/maintenance/apmaint) -"cCD" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cCD" = (/obj/structure/closet/secure_closet/atmos_personal,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cCE" = (/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) -"cCF" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cCF" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cCG" = (/turf/simulated/wall,/area/crew_quarters/sleep/engi_wash) "cCH" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) "cCI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/engineering_hallway) @@ -6884,7 +6925,7 @@ "cDk" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/bar) "cDl" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/bar) "cDm" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/bar) -"cDn" = (/obj/item/stack/tile/floor,/turf/simulated/floor,/area/vacant/vacant_shop) +"cDn" = (/obj/item/weapon/crowbar,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cDo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cDp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar) "cDq" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -6979,9 +7020,9 @@ "cFb" = (/obj/machinery/floor_light{anchored = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/crew_quarters/bar) "cFc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cFd" = (/obj/machinery/floor_light{anchored = 1},/turf/simulated/floor,/area/crew_quarters/bar) -"cFe" = (/obj/item/stack/tile/floor,/obj/item/frame/light,/turf/simulated/floor,/area/vacant/vacant_shop) +"cFe" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cFf" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) -"cFg" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cFg" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Locker Room"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cFh" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 3"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) "cFi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) "cFj" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) @@ -7006,7 +7047,7 @@ "cFC" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cFD" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cFE" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 10"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) -"cFF" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,10,63)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"cFF" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cFG" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) "cFH" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cFI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/storage) @@ -7022,7 +7063,7 @@ "cFS" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cFT" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/apmaint) -"cFV" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cFV" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/weapon/storage/secure/safe{pixel_z = 30},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cFW" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) "cFX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/checkpoint2) "cFY" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) @@ -7067,7 +7108,7 @@ "cGL" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/closet/crate,/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cGM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) "cGN" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/maintenance/apmaint) -"cGO" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "ENG - Locker Room"; dir = 4},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cGO" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cGP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) "cGQ" = (/obj/structure/table/standard,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/circular_saw,/obj/item/weapon/hemostat,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "cGR" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/sleep/engi_wash) @@ -7183,7 +7224,7 @@ "cIX" = (/obj/machinery/status_display/supply_display,/turf/simulated/wall,/area/quartermaster/warehouse) "cIY" = (/obj/structure/closet/crate/medical,/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cIZ" = (/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) -"cJa" = (/turf/simulated/floor,/area/vacant/vacant_shop) +"cJa" = (/obj/random/tech_supply,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cJb" = (/obj/structure/closet/crate/freezer,/obj/effect/floor_decal/corner/brown/full{dir = 4},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cJc" = (/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) "cJd" = (/obj/machinery/camera/network/engineering{c_tag = "Atmos Tank - Gas Mixing"; dir = 2},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) @@ -7308,7 +7349,7 @@ "cLs" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "waste_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/reinforced/airless,/area/engineering/atmos) "cLt" = (/obj/machinery/power/smes/buildable{charge = 2e+006; RCon_tag = "Substation - Atmospherics"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/engineering/atmos/storage) "cLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engineering/atmos/storage) -"cLv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) +"cLv" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cLw" = (/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Engine Waste")},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "cLx" = (/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) "cLy" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/blast_door{id = "atmoslockdown"; name = "Atmospherics Lockdown"; pixel_x = 0; pixel_y = 24; req_access = newlist(); req_one_access = list(10,24)},/turf/simulated/floor/tiled,/area/engineering/atmos/monitoring) @@ -7396,7 +7437,7 @@ "cNc" = (/turf/simulated/floor/tiled,/area/engineering/foyer) "cNd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/foyer) "cNe" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) -"cNf" = (/obj/item/weapon/crowbar,/turf/simulated/floor,/area/vacant/vacant_shop) +"cNf" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_5) "cNg" = (/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cNh" = (/obj/machinery/computer/atmos_alert,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cNi" = (/obj/machinery/computer/station_alert/all,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) @@ -7463,7 +7504,7 @@ "cOr" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/effect/floor_decal/corner/yellow,/turf/simulated/floor/tiled,/area/engineering/foyer) "cOs" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) "cOt" = (/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) -"cOu" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/flame/lighter/zippo,/obj/item/device/megaphone,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cOu" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -32},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/steel,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/janitor) "cOv" = (/obj/machinery/computer/security/telescreen{desc = "Used to monitor the engine room."; layer = 3.3; name = "Engine Monitor"; network = list("Engine"); pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cOw" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts."; id = "engine_access_hatch"; name = "Engine Hatch Bolt Control"; pixel_x = -6; pixel_y = 32; req_access = newlist(); specialfunctions = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = 6; pixel_y = 32; req_access = newlist()},/obj/structure/table/reinforced,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cOx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/meter,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/engineering) @@ -7478,7 +7519,7 @@ "cOG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/maintenance/evahallway) "cOH" = (/obj/structure/closet,/obj/item/clothing/glasses/welding,/obj/item/weapon/weldingtool,/obj/effect/decal/cleanable/dirt,/obj/item/clothing/shoes/workboots,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cOI" = (/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/ai_monitored/storage/eva) -"cOJ" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cOJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled,/area/janitor) "cOK" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cOL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cOM" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) @@ -7487,7 +7528,7 @@ "cOP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/docking_lounge) "cOQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/docking_lounge) "cOR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) -"cOS" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled/yellow,/area/engineering/locker_room) +"cOS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/sleep/vistor_room_11) "cOT" = (/obj/effect/decal/cleanable/blood/oil,/obj/effect/decal/remains/robot,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/bar) "cOU" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Bar"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/bar) "cOV" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/bar) @@ -7503,25 +7544,26 @@ "cPf" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPg" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPh" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) -"cPi" = (/obj/structure/reagent_dispensers/water_cooler,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) +"cPi" = (/obj/item/frame,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cPj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPk" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_dinning) "cPl" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPm" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPn" = (/turf/simulated/wall,/area/crew_quarters/visitor_lodging) -"cPo" = (/obj/random/tech_supply,/turf/simulated/floor,/area/vacant/vacant_shop) +"cPo" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cPp" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPq" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPr" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Lodging"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPs" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPt" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPu" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/blue{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) -"cPv" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor,/area/vacant/vacant_shop) +"cPv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) "cPw" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging) "cPx" = (/turf/simulated/wall,/area/crew_quarters/visitor_laundry) "cPy" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPz" = (/obj/machinery/washing_machine,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPA" = (/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) +"cPB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) "cPC" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPD" = (/obj/structure/closet/wardrobe/pjs,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "cPE" = (/obj/structure/closet/wardrobe/pjs,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/white{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) @@ -7559,7 +7601,7 @@ "cQk" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce/equipped,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cQl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/engineering) "cQm" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor,/area/maintenance/evahallway) -"cQn" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/item/clothing/shoes/workboots,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cQn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cQo" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge) "cQp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cQq" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/carpet,/area/hallway/secondary/entry/docking_lounge) @@ -7705,7 +7747,7 @@ "cTa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) "cTb" = (/obj/structure/flora/pottedplant{icon_state = "plant-20"; tag = "icon-plant-22"},/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cTc" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) -"cTd" = (/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/camera/network/engineering{c_tag = "ENG - CE's Office"; dir = 1},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) +"cTd" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cTe" = (/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/structure/cable/green,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cTf" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "cTg" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) @@ -7767,7 +7809,7 @@ "cUk" = (/turf/simulated/wall,/area/crew_quarters/heads/chief) "cUl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos/monitoring) "cUm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) -"cUn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) +"cUn" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cUo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ceoffice"; name = "CE Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief) "cUp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/engineering) "cUq" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/maintenance/evahallway) @@ -7900,7 +7942,7 @@ "cWN" = (/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/machinery/power/apc/super{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos) "cWO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/escape/dock_escape_pod_hallway_port) "cWP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/break_room) -"cWQ" = (/obj/item/frame/light,/turf/simulated/floor,/area/vacant/vacant_shop) +"cWQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/bar) "cWR" = (/obj/item/frame/light,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "cWS" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/engineering/break_room) "cWT" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/corner/red{dir = 9},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled,/area/engineering/foyer) @@ -8052,7 +8094,7 @@ "cZJ" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) "cZL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/window/westleft{name = "Engineering Reception Desk"; req_access = list(10); req_one_access = newlist()},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/foyer) -"cZM" = (/obj/item/frame/fire_alarm,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/vacant/vacant_shop) +"cZM" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/bar) "cZN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering/foyer) "cZO" = (/obj/machinery/door/airlock/glass_engineeringatmos{name = "Engineering Monitoring Room"; req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) "cZP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/engineering/engineering_monitoring) @@ -8106,7 +8148,7 @@ "daL" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "daM" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) "daN" = (/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) -"daO" = (/obj/machinery/constructable_frame/machine_frame,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos) +"daO" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "ENG - CE's Office"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "daP" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos) "daQ" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Waste"},/turf/simulated/floor/tiled,/area/engineering/atmos) "daR" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8200,14 +8242,14 @@ "dcB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/engineering) "dcC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering) "dcD" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored/upper_level) -"dcE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/vacant/vacant_shop) +"dcE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "dcF" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcG" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dcJ" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/workshop) "dcK" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/machinery/door/window/southright{name = "Jetpack Storage"; req_one_access = list(11,24)},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/engineering/engine_eva) -"dcL" = (/obj/item/stack/cable_coil/green,/turf/simulated/floor,/area/vacant/vacant_shop) +"dcL" = (/obj/machinery/door/airlock/command{name = "Chief Engineer"; req_access = list(56)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/crew_quarters/heads/chief) "dcM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,47)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/maintenance/engineering) "dcN" = (/obj/structure/closet,/obj/item/weapon/lipstick/purple,/turf/simulated/floor/plating,/area/maintenance/engineering) "dcO" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engineering) @@ -8220,7 +8262,7 @@ "dcV" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/port) "dcW" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D1) "dcX" = (/turf/simulated/wall,/area/hallway/secondary/entry/D1) -"dcY" = (/obj/item/frame/apc,/turf/simulated/floor,/area/vacant/vacant_shop) +"dcY" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dcZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) "dda" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled,/area/vacant/vacant_shop) "ddb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/workshop) @@ -8239,7 +8281,7 @@ "ddo" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D4) "ddp" = (/obj/structure/table/steel,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor,/area/construction) "ddq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/maintenance/bar) -"ddr" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/bar) +"ddr" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dds" = (/turf/simulated/wall,/area/hallway/secondary/entry/D4) "ddt" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/machinery/door/window/southleft{name = "Jetpack Storage"; req_access = newlist(); req_one_access = list(11,24)},/turf/simulated/floor/tiled,/area/engineering/engine_eva) "ddu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Connector"},/turf/simulated/floor/tiled,/area/engineering/atmos) @@ -8368,7 +8410,7 @@ "dfN" = (/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/engineering,/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/clothing/suit/space/void/engineering,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/northright{name = "Engineering Hardsuits"; req_access = list(11)},/obj/machinery/light,/turf/simulated/floor/tiled,/area/engineering/engine_eva) "dfO" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_6"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_6_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod6/station) "dfP" = (/obj/structure/bed/chair,/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 25; pixel_y = 0; tag_door = "escape_pod_5_hatch"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station) -"dfQ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/tiled,/area/engineering/workshop) +"dfQ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dfR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dfS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) "dfT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1) @@ -8594,9 +8636,9 @@ "dkf" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "co2_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "dkg" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "dkh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) -"dki" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) -"dkj" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) -"dkk" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"dki" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"dkj" = (/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) +"dkk" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Phoron"; dir = 1},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos) "dkl" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "n2o_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dkm" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dkn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "n2o_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) @@ -8647,7 +8689,7 @@ "dlg" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port) "dlh" = (/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "dli" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) -"dlj" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"dlj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/turf/simulated/floor,/area/maintenance/pool) "dlk" = (/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dll" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dlm" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) @@ -8704,7 +8746,7 @@ "dml" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D4) "dmm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/port) "dmn" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Carbon Dioxide"; dir = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) -"dmo" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Phoron"; dir = 1},/turf/simulated/floor/reinforced/airmix,/area/engineering/atmos) +"dmo" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 10},/turf/simulated/floor,/area/maintenance/pool) "dmp" = (/obj/machinery/light/small,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Nitrous Oxide"; dir = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos) "dmq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor,/area/engineering/drone_fabrication) "dmr" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication) @@ -8822,7 +8864,6 @@ "doz" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3) "doA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "doB" = (/turf/space,/area/syndicate_station/southeast) -"doC" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/port) "doD" = (/obj/structure/lattice,/obj/item/stack/cable_coil/yellow{pixel_x = 2; pixel_y = 2},/obj/item/stack/cable_coil/yellow,/turf/space,/area/space) "doE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3) "doF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/maintenance/portsolar) @@ -8879,9 +8920,6 @@ "dpE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dpF" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) "dpG" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port) -"dpH" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/port) -"dpI" = (/turf/simulated/floor/airless,/area/solar/port) -"dpJ" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/port) "dpK" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/solar/port) "dpL" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dpM" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access = list(13); tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -8929,7 +8967,6 @@ "dqC" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dqD" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D4) "dqE" = (/turf/simulated/wall,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard) -"dqF" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/port) "dqG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/maintenance/portsolar) "dqH" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable/yellow,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) "dqI" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass{name = "Dock"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1) @@ -9457,7 +9494,6 @@ "dAK" = (/obj/machinery/power/generator{anchored = 1; dir = 4},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room) "dAL" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 6},/turf/simulated/floor/plating,/area/engineering/engine_room) "dAM" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dAN" = (/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard) "dAO" = (/obj/machinery/atmospherics/pipe/manifold/visible/black{dir = 8},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/engine_room) "dAP" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 10},/turf/simulated/floor,/area/engineering/engine_room) "dAQ" = (/obj/structure/grille,/obj/structure/window/phoronreinforced,/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (EAST)"; icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced{tag = "icon-phoronrwindow (WEST)"; icon_state = "phoronrwindow"; dir = 8},/obj/machinery/door/blast/regular{dir = 1; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9470,7 +9506,6 @@ "dAX" = (/obj/machinery/atmospherics/valve/digital{dir = 4; name = "Emergency Cooling Valve 2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dAY" = (/obj/machinery/atmospherics/pipe/manifold/visible/black,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) "dAZ" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room) -"dBa" = (/turf/simulated/floor/airless,/area/solar/starboard) "dBb" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/turf/simulated/wall/r_wall,/area/engineering/engine_room) "dBc" = (/obj/machinery/atmospherics/pipe/simple/visible/black,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_room) "dBd" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "EngineVent"; name = "Reactor Vent"; p_open = 0},/turf/simulated/floor/reinforced,/area/engineering/engine_room) @@ -9480,8 +9515,6 @@ "dBh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EJECTION/VENTING PORT'."; name = "\improper EJECTION/VENTING PORT"; pixel_y = 32},/turf/space,/area/space) "dBi" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard) "dBj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/solar/starboard) -"dBk" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless,/area/solar/starboard) -"dBl" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless,/area/solar/starboard) "dBm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard) "dBn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/solar/starboard) "dBo" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/structure/lattice,/turf/space,/area/space) @@ -9489,7 +9522,6 @@ "dBq" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard) "dBr" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/skipjack_station/southwest_solars) "dBs" = (/turf/space,/area/skipjack_station/southeast_solars) -"dBt" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless,/area/solar/starboard) "dBu" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless,/area/solar/starboard) "dBv" = (/turf/space,/area/syndicate_station/south) "dBw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutter"; opacity = 0},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering/engine_room) @@ -9515,7 +9547,7 @@ "dBQ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "dBR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "dBS" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/bar) -"dBT" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"dBT" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"},/turf/simulated/floor,/area/maintenance/pool) "dBU" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dBV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "dBW" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) @@ -9626,41 +9658,41 @@ "dDX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/item/clothing/glasses/sunglasses,/obj/structure/closet/crate,/turf/simulated/floor,/area/maintenance/engineering) "dDY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard) "dDZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/starboard) -"dEa" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/secure_closet/engineering_welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled,/area/engineering/workshop) +"dEa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/storage) "dEc" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 28},/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/storage) "dEd" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor,/area/engineering/storage) "dEe" = (/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/deck/cards,/obj/machinery/light_switch{pixel_x = 28; pixel_y = 0},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/engineering/drone_fabrication) -"dEf" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/security_cell_hallway) -"dEg" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 2"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/security_cell_hallway) +"dEf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEg" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 10},/obj/machinery/camera/network/engineering{c_tag = "ENG - Pump Station"; dir = 2},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEh" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) "dEi" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/security/security_cell_hallway) -"dEj" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEk" = (/obj/structure/table/glass,/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"dEj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEl" = (/turf/simulated/wall,/area/medical/first_aid_station) -"dEm" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEn" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEo" = (/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEp" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEq" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"dEm" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEn" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEo" = (/turf/simulated/wall,/area/maintenance/engineering/pumpstation) +"dEp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEq" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid) "dEs" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid) -"dEt" = (/obj/machinery/door/airlock/medical{name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"dEt" = (/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_mid) -"dEv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEx" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEz" = (/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEA" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/machinery/sleep_console{tag = "icon-sleeperconsole (NORTH)"; icon_state = "sleeperconsole"; dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEC" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dED" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/sign/redcross{name = "FirstAid"},/obj/machinery/door/blast/shutters{dir = 8; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station) -"dEE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEF" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/button/remote/blast_door{id = "port_first_aid"; name = "Security Shutters"; pixel_y = 25},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEG" = (/obj/machinery/sleeper,/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEH" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/sign/poster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) -"dEI" = (/obj/structure/table/reinforced,/obj/machinery/door/window{name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/window/westleft,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 8; id = "port_first_aid"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station) +"dEv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEw" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEy" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/empty,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEz" = (/obj/machinery/atmospherics/binary/pump/high_power/on{name = "Pump station in"; target_pressure = 4500},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/red,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEB" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEC" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dED" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEE" = (/obj/machinery/atmospherics/tvalve/mirrored/digital/bypass{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 1},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEG" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEH" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dEI" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dEJ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/storage) "dEK" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/effect/floor_decal/industrial/outline/yellow,/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/storage) "dEL" = (/turf/simulated/mineral,/area/mine/explored/upper_level) @@ -9683,10 +9715,17 @@ "dFc" = (/obj/structure/table/reinforced,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (WEST)"; icon_state = "register_idle"; dir = 8},/obj/machinery/door/blast/shutters{dir = 4; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "dFd" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/glass_jar,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/turf/simulated/floor/wood,/area/crew_quarters/bar) "dFe" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) -"dFf" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) +"dFf" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFh" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFi" = (/obj/structure/table/steel_reinforced,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/red{dir = 5; icon_state = "intact"; tag = "icon-intact (SOUTHEAST)"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFl" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dFm" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFn" = (/obj/machinery/flasher/portable,/obj/machinery/camera/network/security{c_tag = "Armoury"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFo" = (/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"dFp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dFq" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFr" = (/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "dFs" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) @@ -9720,9 +9759,9 @@ "dFU" = (/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dFW" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/northleft{name = "Weapons locker"; req_access = list(2)},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/item/clothing/suit/storage/vest/heavy/officer,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) -"dFX" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced,/obj/random/energy,/obj/random/energy,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"dFY" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/gun/energy/ionrifle{pixel_x = -2; pixel_y = -2},/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"dFZ" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/obj/machinery/door/window/brigdoor/northleft{name = "Energy"; req_access = list(2)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFY" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dFZ" = (/obj/machinery/atmospherics/binary/passive_gate{dir = 8; target_pressure = 4500},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dGa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGb" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/armoury) @@ -9734,9 +9773,11 @@ "dGi" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGk" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Riot Armor"},/obj/item/clothing/gloves/arm_guard/riot,/obj/item/clothing/shoes/leg_guard/riot,/obj/item/clothing/suit/armor/riot/alt,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGl" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dGm" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red{dir = 9},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/eastright{name = "Riot Armor"},/obj/item/clothing/gloves/arm_guard/riot,/obj/item/clothing/shoes/leg_guard/riot,/obj/item/clothing/suit/armor/riot/alt,/obj/item/clothing/head/helmet/riot,/obj/item/weapon/shield/riot,/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGn" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full,/obj/machinery/door/window/brigdoor/northleft{name = "Combat Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGo" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/yellow/full{tag = "icon-corner_white_full (EAST)"; icon_state = "corner_white_full"; dir = 4},/obj/machinery/door/window/brigdoor/northright{name = "Combat Armor"},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGp" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) "dGq" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/yellow/full{tag = "icon-corner_white_full (WEST)"; icon_state = "corner_white_full"; dir = 8},/obj/machinery/door/window/brigdoor/southleft{name = "Combat Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGr" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/yellow/full{dir = 1},/obj/machinery/door/window/brigdoor/southright{name = "Combat Armor"},/obj/item/clothing/gloves/arm_guard/combat,/obj/item/clothing/shoes/leg_guard/combat,/obj/item/clothing/suit/armor/combat,/obj/item/clothing/head/helmet/combat,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGs" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 1},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/door/window/brigdoor/westright{name = "Bullet Armor"},/obj/item/clothing/gloves/arm_guard/bulletproof,/obj/item/clothing/shoes/leg_guard/bulletproof,/obj/item/clothing/suit/armor/bulletproof/alt,/obj/item/clothing/head/helmet/bulletproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) @@ -9744,9 +9785,16 @@ "dGu" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/door/window/brigdoor/westleft{name = "Bullet Armor"; req_access = list(1)},/obj/item/clothing/gloves/arm_guard/bulletproof,/obj/item/clothing/shoes/leg_guard/bulletproof,/obj/item/clothing/suit/armor/bulletproof/alt,/obj/item/clothing/head/helmet/bulletproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) "dGw" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"dGx" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"dGy" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(2)},/obj/machinery/light,/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"dGz" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/suit/armor/laserproof{pixel_x = 0; pixel_y = 0},/obj/machinery/door/window/brigdoor/northleft{name = "Laser Armor"; req_access = list(2)},/obj/item/clothing/gloves/arm_guard/laserproof,/obj/item/clothing/shoes/leg_guard/laserproof,/obj/item/clothing/head/helmet/laserproof,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGx" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGy" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGz" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGB" = (/obj/machinery/door/airlock/atmos{name = "Pump Station Atmospherics"},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGC" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"},/turf/simulated/floor,/area/maintenance/medbay_fore) +"dGE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGF" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 15000},/turf/simulated/floor/tiled/hydro,/area/maintenance/engineering/pumpstation) +"dGG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/medbay_fore) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9804,23 +9852,23 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaadaaaacOaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahabXacPacCacCacQacCacRacSacSacSacTabmacUacVabCabCacWacXacuacYacZacuayEacuadaacwaaSabtadbaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadadcaadacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaddaddaddabXaclacmadeacoadfadgacladhadiabXadjabYadkabmadladmadnadoadpadqadoadradoadsadtaduadvadwaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczacAacAaaaaaaaaaadxaaaaaaaaaacAacAaczaczaczaaaaaaadyaddaddaddaddaddaddadzadzabXabXabXabXabXabXabXabXabXabXabXaaeabYadAadBadBadCadDadEadFadGadHadIacuadJadKaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadLaadaadaaaaadaaaaaaaaaaczaaaaaaadMadNadOadPadQadRadSadTadUadVadWadXadYadZaeaadVadVaebaecaddaboaedaeeabcaboabTacuacuaefacJacuaegacuadJaehaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaaaaekadNaelaemaenaeoaepaeqaeqaeraesaeraetaeraeraeraeraeraeraeuaevaewaexaeyaboabTaezacuaeAacuacuaegacuaeBaeCaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaaaaddaddaddaddaddaeJaeKaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePaddaeQabYaeRaeSaeTabTaeUacuaeVacuaeWaegacuaeXaeYaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaaaaahaahaahaahaddaddaeKaeMaeMafaafbafcafdafeafbaffaeMaeMaddaddaaNafgafhafiaaNabTafjacuafkaflaflafmaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaacOaaaaaaaahaahaahaahaahaddafnaeMafoafcafpafqafrafsaftaftafuaeMaahaahaaNabYafvafwaaNafxafyafyafzaflafAafBafCafDafEaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyaywaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahaahaahaahaahaddaddafnaeMafSafTafUafVafWafXafYafcafZaeMaahaahaaNagaafvagbaaNafxagcagdageaflagfaggaggaghafEaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaahaahaahaahaahaddagiagjaeMafcafcagkaglaglaglagmafcafcaeMaahaahaaNagnagoagpaaNabTabTabTabTaflaflagqaflaflaflaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahaahaahaahaahaddagragsaeMagtaguagkafcagvafcagwaguagxaeMaahaahaaNabYafvafwaaNaahaahaahaahaflagyaggagzaflagAagBaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaddafnaddaeMaeMaeMagCagDagEagFagGaeMaeMaeMagHaahaaNagIagJagKaaNaahaahaahaahaflagyagLagzaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahagMagMagMagMagMafnaddagNagNagOagPagQagRagSagTagUagVagVagHaahaaNabYafvafwaaNaahaahaahaahaflaflaflaflaflaahaahaaSagWaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaaaacAaaaaahagMagXagYagZahaagjaddahbahcahcahdahcahcahcaheahfahfahgagHaahaaNahhahiahjaaNaahaahaahaahaahaahaahaahaahaahaahaaSahkaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahagMahlahmahnahoahpaddahqahqagUagPagQahrahsagTagUahtahtagHaahahuahvahwahxahuaahahyaahaahaahaahaahaahaahaahaahaaSahzaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahagMahAahBagMagMahCaddahDahfahfahEahFahGahHahIahcahcahJagHaahahuahKahLahMahNahyahyahOahOahOahOahOahOahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahagMahoahPagMahQahRaddahSahSagUagPahTahUahVagTagUagUahWagHaahahuahXahYahMahZahyahyahOaiaaibaicaidaieahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaaaacAaaaaahaddaifaigaihaihagsaddaiiagUagUagPaijaikailagTagUagUaimagHaahahuainahYahMaioaipaiqairaisaitaieaieaiuahOaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaaaaaaaaaaaaaaaaaaaivaaaaaaaaaaaaaaaaaaaaaacAaaaaahaddaiwaddaddaddaddaddaixaiyaizagPagQahragSagTagUaiAaiBagHaahahuaiCaiDaiEaiFaiFaiFaiGaiHaiIaiJaiKaiLahOaahaahaaSabtabvaaSaaSaahaahaaSaaSaaSaaSaaSaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaadaadaaaaadaaaaaaaaaaczaaaaaaadMadNadOadPadQadRadSadTadUadVadWadXadYadZaeaadVadVaebaecaddaboaedaeeabcaboabTacuacuaefacJacuaegacuadJaehaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaaaaekadNaelaemaenaeoaepaeqaeqaeraesaeraetaeraeraeraeraeraeraeuaevaewaexaeyaboabTaezacuaeAacuacuaegacuaeBaeCaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaaaaddaddaddaddaddaeJaeKaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePaddaeQabYaeRaeSaeTabTaeUacuaeVacuaeWaegacuaeXaeYaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaadacAaaaaaaaahaahaahaahaddaddaeKaeMaeMafaafbafcafdafeafbaffaeMaeMaddaddaaNafgafhafiaaNabTafjacuafkaflaflafmaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaaaaaaaaaaadaaaaaaaaaacOaaaaaaaahaahaahaahaahaddafnaeMafoafcafpafqafrafsaftaftafuaeMaahaahaaNabYafvafwaaNafxafyafyafzaflafAafBafCafDafEaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyaywaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaahaahaahaahaahaddaddafnaeMafSafTafUafVafWafXafYafcafZaeMaahaahaaNagaafvagbaaNafxagcagdageaflagfaggaggaghafEaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaadacAaaaaahaahaahaahaahaddagiagjaeMafcafcagkaglaglaglagmafcafcaeMaahaahaaNagnagoagpaaNabTabTabTabTaflaflagqaflaflaflaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaaaaaaaaaaadaaaaaaaaaaczaaaaahaahaahaahaahaddagragsaeMagtaguagkafcagvafcagwaguagxaeMaahaahaaNabYafvafwaaNaahaahaahaahaflagyaggagzaflagAagBaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaddafnaddaeMaeMaeMagCagDagEagFagGaeMaeMaeMagHaahaaNagIagJagKaaNaahaahaahaahaflagyagLagzaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaahagMagMagMagMagMafnaddagNagNagOagPagQagRagSagTagUagVagVagHaahaaNabYafvafwaaNaahaahaahaahaflaflaflaflaflaahaahaaSagWaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaaaacAaaaaahagMagXagYagZahaagjaddahbahcahcahdahcahcahcaheahfahfahgagHaahaaNahhahiahjaaNaahaahaahaahaahaahaahaahaahaahaahaaSahkaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadxaaaaaaaaaaadaaaaaaaaaaczaaaaahagMahlahmahnahoahpaddahqahqagUagPagQahrahsagTagUahtahtagHaahahuahvahwahxahuaahahyaahaahaahaahaahaahaahaahaahaaSahzaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadadxaadaeiaeiaeiaeiaeiaadacAaaaaahagMahAahBagMagMahCaddahDahfahfahEahFahGahHahIahcahcahJagHaahahuahKahLahMahNahyahyahOahOahOahOahOahOahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaeGaeFaeHaeHaeHaeHaeIaadacAaaaaahagMahoahPagMahQahRaddahSahSagUagPahTahUahVagTagUagUahWagHaahahuahXahYahMahZahyahyahOaiaaibaicaidaieahOaahaahaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaaaeZaeZaeZaeZaeZaadadxaadaeZaeZaeZaeZaeZaaaacAaaaaahaddaifaigaihaihagsaddaiiagUagUagPaijaikailagTagUagUaimagHaahahuainahYahMaioaipaiqairaisaitaieaieaiuahOaahaahaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaaaaaaaaaaaaaaaaaaadxaaaaaaaaaaaaaaaaaaaaaacAaaaaahaddaiwaddaddaddaddaddaixaiyaizagPagQahragSagTagUaiAaiBagHaahahuaiCaiDaiEaiFaiFaiFaiGaiHaiIaiJaiKaiLahOaahaahaaSabtabvaaSaaSaahaahaaSaaSaaSaaSaaSaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAaadaadaadadxaadaadaadacAacAacAacAacAaaaaahaddaiwaddaiMaiMaiNaiOagUagUaiPagPagUagUagUagTagUaiQaiRagHaahahuaiSahYahMaiTaipaiqairaieaiUaieaiVaiWahOaahaahaaSabtabtaiXaaSaaSaaSaaSaiYabtabHaiZaiZaiZaiZaiZaiZaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaadxaaaaaaaaaaaaaaaaadaadaaaaaaaahaddaiwaddajaajbajcajdajeajeajfajgajeajeajeajhagUajiajiagHaahahuahvahYahMahZahyahyahOajjajkajlaieajmahOaahaahaaSaaSabtajnajoajoajoajoajoajpabIaiZajqajrajsajsaiZaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaadxaaaaaaaaaaaaaadaadaaaaaaaaaaahaddaiwaddajtajuajvaiOagUagUajwajxajyajzajzajAajzajzajBagHaahahuajCahwajDajEahyahyahOahOahOahOahOahOahOaahaahaahaaSaaSaaSaaSaaSaaSaaSaaSajFaiZaiZajGajHajsajsaiZaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9837,31 +9885,31 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyamuapeapfapgaphapiaphapjapkapeaplapmapmapmapnapoamuappapqapramxapsapqaptamxanranranraahaahaahanrapuantanrapvapwapxapyapzapzapzapzapzapAapBapCapCapDanzapEaoAaoAanzamYapFaoDaoDapGaoDaoDapHamYaoGahuahvameapIahuaahaahaahaahaahaahaahaahakzapJamfamfapKapLapMapNamfamfapOakzapPanTapQapRapSanTapTapUapVapWapcapXahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyamuapYapZaqaapZaqbaqcaqaapZapYaqdapnaqeapmaqfaqgamuanraqhaqiamxanraqjaqiamxaqkaqkanranranranranransaqlaqmaqnaqoaqpapwapzaqqaqraqsaqtanzanzaquaquaquanzapEapEanzanzamYaqvaoDaqwaqxaqwaqyaqzaqAaqBakvaqCaqDaqEahuaahaahaahaahaahaahaahaahakzaqFaqGaqHaqIaqJaqKaqGaqHaqFakzakzanZanZanZanZaqLanZanZanZanZanZanZanZahyahyaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyamuaqMapZapZaqNaqOaqPaqQaqQaqRaqSaqTaqUaqVaqWaqXaqYaqZaraarbarcardarearfargarharhariarharharharharharjarharkarlarmarnaroarparqarrapzarsanzanzanzanzanzanzanzanzarsamYartaoDaqwaruarvarwarxaryarzarAarBarCarDahuaahaahaahaahaahaahaahaahakzarEarFarGarHarIarJarKarLarMakzaahaahaahaahanZarNarOanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyahyamuarParQarRarSarTarUarVarWarXarYarZasaasbascasdamuansaseasfasgashasiashashasjaskaslaskasmaskasnaskasoashaspasqasrapwapzassastasuapzasvaswasxasyaszasAanzanzanzasvamYasBaoDaoDasCaoDasDasEamYaoGahuahvameatfahudEldEldEldEldElaahaahaahakzaqFaqFaqFaqIaqJaqKaqFaqFaqFakzaahaahaahaahanZasFarOanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyasGasGasGasHasIasJasIasKasGasGamuasLasLasMasNasOasPasNasLasLamuamuamuamuamuamuasLasQasRasRasRasRasRanrapwasSapwanranranranranranranranrasTasUasVasWapzapzapzapzapzasXanzasYasZanzanzanzanzasYataamYaoBaoDaoDatbaoDasDatcaoGahyalAatdateahMdEIdEFdEEdEHdEGdElaahaahaahakzamfatganQaqIaqJaqKatganQathakzaahaahaahaahanZarNanZanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiatiatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatIasQatJatKatLatMasRanratNatOatNanraahaahaahaahaahaahanratPatQatRanranraahaahaahamXamXatSatTatUanzatVatWatXatYatZamYauaaubaoDaoDaucaudamYamYaahahuahvahwauedEDdECdEBdEodEAdEldElaahaahakzaqFaufaugaqIaqJaqKauhaugaqFakzaahaahaahaahanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiauiaujaukaulaumaunauoaupauqaurausautauuauvauwauxauyauzauAauBauCauBauDauEauFauGauHauGauIasQauJauKauLauMasRaahatNauNatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahamXamXamXauPamXamXamXamXamXamXamYamYamYauQauRamYamYamYaahaahahudEsdErdEudEtdEwdEvdEydExdEzdElaahaahakzauSauTakzauUauVauWakzauSauTakzahyaahaahanZanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahyahyahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahaahavCavDavEavFavCaahaahaahaahaahahyahyahyahyaahaahaahaahaahahuahvameahMahudEqdEpdEodEndEmdElaahaahahyahyahyavGavHavIavJavGahyahyahyahyahyanZanZarOarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsclxdEjcmydEkdElaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahaahaahaahaahaxsdFmdFnazHdFoaytayuaxsaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCaxiawnavEawnaxjavCavCavCavCavCavCaxfaxgaxhavCavCavCavCavCaxkaxlaxmaxdaxnawsawsckJawsawsawsawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsanZanZaxrarNanZanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyahyahyahyahyahyahyahyamuarParQarRarSarTarUarVarWarXarYarZasaasbascasdamuansaseasfasgashasiashashasjaskaslaskasmaskasnaskasoashaspasqasrapwapzassastasuapzasvaswasxasyaszasAanzanzanzasvamYasBaoDaoDasCaoDasDasEamYaoGahuahvameatfahudEOdEOdEOdEOdEOaahaahaahakzaqFaqFaqFaqIaqJaqKaqFaqFaqFakzaahaahaahaahanZasFarOanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyasGasGasGasHasIasJasIasKasGasGamuasLasLasMasNasOasPasNasLasLamuamuamuamuamuamuasLasQasRasRasRasRasRanrapwasSapwanranranranranranranranrasTasUasVasWapzapzapzapzapzasXanzasYasZanzanzanzanzasYataamYaoBaoDaoDatbaoDasDatcaoGahyalAatdateahMaysaEJayvaKbaJIdEOaahaahaahakzamfatganQaqIaqJaqKatganQathakzaahaahaahaahanZarNanZanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiatiatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatIasQatJatKatLatMasRanratNatOatNanraahaahaahaahaahaahanratPatQatRanranraahaahaahamXamXatSatTatUanzatVatWatXatYatZamYauaaubaoDaoDaucaudamYamYaahahuahvahwaueaKFaKHaKGaLTaLSdEOdEOaahaahakzaqFaufaugaqIaqJaqKauhaugaqFakzaahaahaahaahanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiauiaujaukaulaumaunauoaupauqaurausautauuauvauwauxauyauzauAauBauCauBauDauEauFauGauHauGauIasQauJauKauLauMasRaahatNauNatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahamXamXamXauPamXamXamXamXamXamXamYamYamYauQauRamYamYamYaahaahahudEsdErdEuaMnaMXaMWaMZaMYaNadEOaahaahakzauSauTakzauUauVauWakzauSauTakzahyaahaahanZanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahyahyahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahaahavCavDavEavFavCaahaahaahaahaahahyahyahyahyaahaahaahaahaahahuahvameahMahuaOpaNbaLTaOqaOrdEOaahaahahyahyahyavGavHavIavJavGahyahyahyahyahyanZanZarOarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsaOsaOuaOtaAddEOaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahaahaahaahaahaxsdFmdFnazHdFoaytayuaxsaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCaxiawnavEawnaxjavCavCavCavCavCavCaxfaxgaxhavCavCavCavCavCaxkaxlaxmaxdaxnawsawsaPvawsawsawsawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsanZanZaxrarNanZanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaALaALaALaALaALaALaALaxsdFqdFqazHazHdFrdFraxsaahatiaxtaxuaxvaxwaxxaxyavdavQaxzaxAavfaxBaxCaxDaxEaxFaxGavfawPaxHaxIawQawRaxJaxKaxKaxKaxKaxKaxKaxKaxLaxLaxLaxLaxLaahatNauNatNatNatNatNatNatNatNaxMawnaxNaxOaxPaxQaxRaxSaxTaxQaxQaxUaxVaxQaxWaxQaxQaxRaxQaxQaxXaxYaxQaxQaxZaxQaxTayaaxQaxQaxRaxQaybaycaxPaydayeayfayfaygayhayiayfayjayfayfaykayfaylaxqavJaymaynayoaymaypanZarOarOayqanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaxsdFsdFsazHazHdFtdFuaxsaahatiayxayyayzatiayAavbavdayBayCayDavfaEqayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPaySayQayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazhaziazjazjazgazkaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvazxazyazvazvazvazvazzazAazvazvazBaymazCazDarOazEazFanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazXazYayPaCdaCcayPazZaAaaAbaAcaAdaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALdFAaDxaDxaDxdFBdFDdFCaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDeaBiayPaBiaDeayPaBjaBkaBlayXayXaBmaBnaBoatNatNaahatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsanZanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALdFEaDxdFGdFFdFHdFFdFJdFIaALaBAaBBazHazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPdEfayPayPayPdEgayPayXaCeayXayXaAeaCfayZauNatNaahaahaahaahaahaahavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaDddEiaDfaDgaDhaDiaDjaAeaDkaDlauNatNaahaahaahaahaahaahaahavCaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaahaahaahaahaahavCaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaahaahaFmaFmaFmaFmaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALdFYdFXdFZaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaGMaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaFmaHOaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFaaKbaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaKoaKpaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPaysaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGndGoaDxdFPayvaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaEAaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaxsdFsdFsazHazHdFtdFuaxsaahatiayxayyayzatiayAavbavdayBayCayDavfaEqayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPazXaySayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazhaziazjazjazgazkaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvazxazyazvazvazvazvazzazAazvazvazBaymazCazDarOazEazFanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazYaBiayPaCdaCcayPazZaAaaAbaAcaGWaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALdFAaDxaDxaDxdFBdFDdFCaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDdaDeayPaIoaDgayPaBjaBkaBlayXayXaBmaBnaBoatNatNaahatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsanZanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALdFEaDxdFGdFFdFHdFFdFJdFIaALaBAaBBazHazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPaIpayPayPayPaIqayPayXaCeayXayXaAeaCfayZauNatNaahaahaahaahaahaahavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaJFdEiaDfaJHaDhaDiaDjaAeaDkaDlauNatNaahaahaahaFmaFmaFmaFmaFmaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaFmaFmaGvaFRaGxaFmaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaFmaFmaHOaHPaHQaJbaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALbaDaPwbfbaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaFmaJaaJbaHPaHQaJbaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaFKaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaKoaJbaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaKpaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFabnNaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaLwaLuaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPbqpaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtcOJaLvcOuaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGndGoaDxdFPbsdaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaEAaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGqdGraDxdFPdGsaALaJJaNcaNdaNeaNeaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraNsaFaaNtaNuaFaaNvaNwaFaaNxaNyaFaaLmaNzaNAaNBaNCaNDaNEaNFaNEaLmaNGaFhaFhaahaahatNaNHaNIatNaahaNJaNKaNLaNMaNNaNOaNPaxlaxmawnaFoaNQaNRaJkaJkaNSaFoahyaCjaNTaNUaNVaNWaNXaNYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaNZaOaaObaOcaOdaOdaOdaOeaOdaOfaOdaOgaOdaOhaOiaOjaKBaKCaKCaOkaOlaOmaKCaKCaKDaGRaOnaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGtaDxaJGaDxaDxaDxdGvdGuaALaJJaLUaOvaOwaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaMdaOGaOHaKSaOIaOJaOKaOLaOMaFaaONaOOaOPaLmaLmaOQaLmaORaFhaOSaOTaOTaOUaFaaFaaOVaFaaFaaahaahaahatNatNaNIatNaahaNJaOWaOXaOYaOZaOXaPaaxlaxmawnaJjaJkaPbaPcaJkaKuaFoahyaCjaPdaPeaGDaPfaPgaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaPhaLIaIcaPiaPjaPlaPlaPlaPmaPnaPoaPlaPpaPlaPraPsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaPtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGwaDxaDxaDxaDxaDxaALaALaJJaKIaPxaKIaKIaKIaPyaPzaPAaPBaPCaPDaJQaKVaPEaPFaPFaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPNaPPaPQaPNaPRaPSaKxaPUaPTaPWaFaaPXaPYaPZaFaaahaahaahaahatNaHNatNaahaNJaQaaOXaQbaQcaQdaQeaQfaQgaQhaKraJkaQiaJmaJnaQjaFoahyaCjaPdaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaLIaIcaQmaQlaLPaQnaQnaQoaQnaQnaQpaQqaPkaLQaQsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGydGxdGxdGzaALaALaahaJJaJJaPxaKIaQtaQuaQvaLXaQwaQxaQyaQzaJQaQAaQBaQCaKSaQCaQDaQEaFhaFhaFhaFhaQFboJaQGaQHaQHaMtaLmaQIaQJaPNaPPaQKaQLaFaaQMaPYaQNaFaaahaahaahaahatNaHNatNaahaNJaNJaQOaOXaQPaQQaNPawnaxmaQRaFoaJkaJkaHVaQSaFoaFoahyaCjaPdaCjaahaahaGDaQTaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaQUaQVaDraQWaClaQnaQnaQXaQYaQZaQnaQnaRaaQnaQnaRbaJAaRcaRdaRdaRdaRdaRdaRdaRdaReaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALbtpbtobtobtraALaALaahaJJaJJaPxaKIaQtaQuaQvaLXaQwaQxaQyaQzaJQaQAaQBaQCaKSaQCaQDaQEaFhaFhaFhaFhaQFboJaQGaQHaQHaMtaLmaQIaQJaPNaPPaQKaQLaFaaQMaPYaQNaFaaahaahaahaahatNaHNatNaahaNJaNJaQOaOXaQPaQQaNPawnaxmaQRaFoaJkaJkaHVaQSaFoaFoahyaCjaPdaCjaahaahaGDaQTaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaQUaQVaDraQWaClaQnaQnaQXaQYaQZaQnaQnaRaaQnaQnaRbaJAaRcaRdaRdaRdaRdaRdaRdaRdaReaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahahyaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaahaahaahaALaALaALaALaALaALaALaALaahaahaRgaRhaRgaRgaJJaJJaJJaJJaJJaJJaJJaRiaRiaRiaPqaRkaPqaRiaRiaRiaahaahaFhaFhaRlaRmaPVaRoaRpaRqaRraPSaKxaRsaRnaRuaFhaFaaFaaRvaFaaahaahaahatNatNaHNatNaahaahaNJaNJaRwaRxaRyaPaawnaxmaRzaFoaRAaRBaGCaFoaFoahyahyaCjaPdaCjaahaahaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaIaaLIaIcaRCaClbZuaREaRFaRGaQZaQnaRHaRGaRIaQnaRbaRJaRKaRKaRKaRKaRKaRKaRKaRKaRKaRLaGRaRMaRNaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaRPaRPaRPaRPaRPaRPaRPaRPaRQaRfaahaahaahaahaALaALaALaALaALaALaahaahaahaRgaRRaRSaRTahyahyahyahyahyahyahyahyahyaRUaRVaRVaRVaRUahyahyaahaahaahaFhaFhaRWaRXaRXaRYaFhaFhaFhaFhaFhaFhaFhaFhaahaFaaRZaFaaahaahaahatNaSaaSbatNaahaahahyaNJaNJaNJaNJaNJaScaSdawnaFoaFoaFoaFoaFoahyahyahyaCjaPdaCjaCjaahaGDaGDaGEaGFaGFaGFaSeaGFaGFaGFaGFaGHaGDaGIaSfaGKaGLaClaQnaQnaSgaShaSiaSjaSkaSlaSmaSjaRbaSnaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaSoaSpaSqaSraSsaStaSoaSuaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSxaSxaSxaSxaSyaSzaRTahyahyahyahyahyahyahyahyahyaSAaSBaSCaSDaSAahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaFaaFaaFaaahaahaahatNaSEaSFatNaahaahahyahyahyahyahyaSGawnaxmawnaSGahyahyahyahyahyahyahyaCjaSHaSIaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaDoaFqaSJaFsaFtaClaRDaSKaSLaSMaSNaQnaRHaSOaRIaQnaSPaGRaFCaSQaSRaFFaSSaFFaSTaSQaFCaSUaEvaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9869,49 +9917,49 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaTvaTwaTwaSXaTxaTyaTzaTAaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaTBaTCaTDaTEaTFaTGaRTahyahyaTfaTfaQraTIaQraTfaTfaTfaTJaTKaTJaTfaTfahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyaTfaTfaTfaTfaTfaahaahaahaahaTfatNaTLatNaTfaahaahaahahyahyahyavCavCaTMaTNaTMavCaToaToaTOaTPaTQaToaToaCjaTRaCjaCjaahaahaahaahahyahyahyahyahyahyahyahyahyaFpaDpaQVaDraQkaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaTSaTTaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUeaTfaUfaTkaUgaTkaUhaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaUsaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaRfaRfaRfaRfaUHaUHaRfaRfaRfaRfaRfaRfaUIaUIaUIaUIaUIaUIaUJaUKaULaSxaTcaUMaSxaSxaUNaUOaUPaUNaUNaUQaTkaURaUSaUTaUTaUUaUVaUTaUWaUTaUTaUUaUTaUTaUTaUXaUYaUTaUZaUTaUTaUTaUTaUSaUTaUTaUTaUUaUTaVaaUSaUUaUTaUTaVbaVcaVdaUTaVeaTkaTJaTkaVfaTkaVgaTkaTkaVhaTkaTkaTlaTkaTkaViaVjaUvaUvaVkaVlaVmaVnaVoaVnaVpaVqaVraZQaVsaVtaVnaVnaVuaVvaVnaVnaVwaVxaVyaVnaVnaVzaVAaLIaUAaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaVBaVCaFJaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWEaWFaWGaWHaWIaWIaWIaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaYbaLIaLIaUyaDtaYcaYdaYeaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaRfaYfaYgaYhaYiaYjaRfaRfaRfaRfaYkaYlaYmaRfaUIaUIaUIaUIaUIaUIaUbaYnaYnaYnaUcaUIaUIaYhaTfaYoaYpaYqaYraYsaTfaYtaTkaTkaTkaYuaTfaTfaTfaTfaTfaTfaYvaYwaUgaYxaYvaTfaTfaTfaTfaTfaTfaYyaYzaYAaTfaUqaYBaUraTfaTfaUqaYBaUraTfaYCaYDaYEaTfaUqaYBaUraTfaTfaUqaYBaUraToaRjaYGaYHaUwaYIaToaClaYJaYKaYLaClaYJaYKaYLaClaClaClaYMaUAaClaClaClaClaClaClaUAaYNaUAaClaClaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaRfaRfaRfaRfaRfaRfaRfaahaahaRfaYOaYOaYOaRfaahaahaahaahaYPaYQaYRaYRaYRaYRaYRaYSaYPahyaTfaTfaYTaYUaYVaTfaTfaTfaYWaYXaYYaTfaTfaahaahaahaahaahaYZaZaaZbaZcaYZaahaahaahaahaahaTfaZdaZeaZdaTfahyahyahyahyahyahyahyahyaZfaZgaZhaZiaZfahyahyahyahyahyahyahyahyaToaToaZjaZkaZlaToaToahyahyahyahyahyahyahyahyahyahyaClaYMaUAaClaahaahaahaahaZmaZmaZnaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpaZqaZraZoaahaahaahaahaYPaZsaZtaZuaZvaZwaZxaYRaYPahyahyaZyaZzaZAaZBaZyahyaTfaUiaThaTiaTfaahaahaZCaZCaZCaZCaZDaZDaZEaZDaZDaZFaZFaZFaZFaahaZdaZGaZHaZdahyahyahyahyaZIaZJaZKaZLaZIaZIaZMaZNaZOaZIaZIaZJaZKaZLaZIahyahyahyahyaZPaYGaYHaUwbaAaZRaZRaZSaZTaZUaZRaZSaZTaZUaZRaZRaZRaZVaZRaZRaahaahaahaahaahaZmaZWaZXaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbaDbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfbbgaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCbbGbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdObdObdObezbeAaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfabfbbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWFaWEaWIaWHdljdljdmoaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaWKaWLaWMaWNaWLaWOaWPaUNaWQaUNaWRaUNaWSaUNaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXjaXkaXlaXmaXnaXmaXmaXmaXmaXoaXnaXmaXmaXpaXmaXqaXmaXmaXraXmaXmaXsaXtaXuaXmaXvaXnaXwaXxaXyaXzaXyaXyaXyaXAaXBaXCaXDaXEaXFaXGaXHaXmaXIaXtaXJaXKaTkaXLaTkaTkaTkaViaUvaXMaXNaXOaXPaXQaXRaXSaLIaLIaXTaLIaLIaXVaSfaXWaLIaLJaLIaXXaLIaXYaXZaXVaXUaYaaYbaLIaLIaUyaDtaYcaYdaYeaDtdBTaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaazGazGazGazGazGaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaRfaYfaYgaYhaYiaYjaRfaRfaRfaRfaYkaYlaYmaRfaUIaUIaUIaUIaUIaUIaUbaYnaYnaYnaUcaUIaUIaYhaTfaYoaYpaYqaYraYsaTfaYtaTkaTkaTkaYuaTfaTfaTfaTfaTfaTfaYvaYwaUgaYxaYvaTfaTfaTfaTfaTfaTfaYyaYzaYAaTfaUqaYBaUraTfaTfaUqaYBaUraTfaYCaYDaYEaTfaUqaYBaUraTfaTfaUqaYBaUraToaRjaYGaYHaUwaYIaToaClaYJaYKaYLaClaYJaYKaYLaClaClaClaYMaUAaClaClaClaClaClaClaUAaYNaUAaClaClaDtaDtaDtaDtaDtdEfdEadEjdEgdEmdEkdEkdEndEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaRfaRfaRfaRfaRfaRfaRfaahaahaRfaYOaYOaYOaRfaahaahaahaahaYPaYQaYRaYRaYRaYRaYRaYSaYPahyaTfaTfaYTaYUaYVaTfaTfaTfaYWaYXaYYaTfaTfaahaahaahaahaahaYZaZaaZbaZcaYZaahaahaahaahaahaTfaZdaZeaZdaTfahyahyahyahyahyahyahyahyaZfaZgaZhaZiaZfahyahyahyahyahyahyahyahyaToaToaZjaZkaZlaToaToahyahyahyahyahyahyahyahyahyahyaClaYMaUAaClaahaahaahaahaZmaZmaZnaZmaZmaahaahaahdEodEqdEpdEvdEtdExdEwdEtdEydEydEzdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpaZqaZraZoaahaahaahaahaYPaZsaZtaZuaZvaZwaZxaYRaYPahyahyaZyaZzaZAaZBaZyahyaTfaUiaThaTiaTfaahaahaZCaZCaZCaZCaZDaZDaZEaZDaZDaZFaZFaZFaZFaahaZdaZGaZHaZdahyahyahyahyaZIaZJaZKaZLaZIaZIaZMaZNaZOaZIaZIaZJaZKaZLaZIahyahyahyahyaZPaYGaYHaUwbaAaZRaZRaZSaZTaZUaZRaZSaZTaZUaZRaZRaZRaZVaZRaZRaahaahaahaahaahaZmaZWaZXaZmaahaahaahdEodEBdEAdEDdECdEFdEEdEHdEGdFfdEIdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbKMbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahaahdEodFhdFgdFjdFidFkdEvdEtdEtdFpdFldEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfbbgaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCdCqbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahaahdEodFYdFXdGldFZdGpdEkdEkdEkdEkdGxdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahdEodGzdGydGAdEtdGBdEtdEtdEtdEtdGCdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmdGDaZmaZmaZmaZmdEtdGEdFldEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdOaZWbdObezbeAaZmaZmdGFdGFdEoaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfaaFLbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfodGGbfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbfqbfrbfsbdPbftbfubfvbdTaahaahaahaahaahaYPaYPbfwbfxbfyaYPaYPahyahyahybfzbfAbcnbfBbeebfCbfDbfEbfFbefbefaahaahaahaahbdlbfGbeTbfHbfIbfJbeTbfKbdlaahaahaahaahaZdaZHaZdahyaZIbfLdCybbJbbGbeVbfNbfObbGdCzdCzdCzbbGbjlbfPbfQbbGbbGdCAbfSaZIahybbNaYGbetaUwaToaahaahbeZbfTbfUbfVbfWbfXbfYbfZbfZbgabgbbgcbgdbgebgfbggbghbcRbdMbgibfobfobfobfobgjbgkbgkbgkbgkbgkbgkbgkbglbfobfobfobfobfobfpaZmaZmaahaahaahaahaahaahbgmbgmbgmbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbgnbfrbgobdPbgpbgqbgrbdTaahaahaahaahahyahyahyahyahyahyahyahyahyahybbobbobgsbcnbgtbeebefbgubgvbgwbgxbefaahaahaahaahbdlbgybeTbeibgzbeibeTbgAbdlaahaahaahaZdaZdaZHaZdahyaZIbgBdCBbfRbbGbgCbbGbbGdCCbgDbgEbgFdCDbbGbbGbgCbbGbgGbgHdCEaZIaZfaTobgIbgJbgKaToaToaahbeZbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgVbgWbgXbgYbgYbgYbgYbgYbgYbgZbgZbgZbgZbgZbgkbhabhbbmzbhdbhebgkbhfbhfbhfbhfbhfbhfbglbfpaZmaahaahaahaahaahbgmbgmbhgbhhbhibhhbhjbgmbgmaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbhkbhlbhkbdPbhmbfubhnbhobhobhobhoaahaahaahahyahyahyahyahyahyahyahyaZybhpbajbhqbhrbhsbefbhtbgvbgwbhubefaahaahaahaahbdlbhvbeTbhwbhxbhwbeTbhybdlaahaahaahaZdaZGaZHaZdahybdqbaUdCFbbGbbGbbGbbGdCGbgDbhAbhAbhAbgFdCFbbGbbGbbGbhBbbGbhCbhDbhEbhFbhGbetaUwbhHaToaahbeZbhIbhJbgNbhKbhLbhLbhLbhLbhMbhNbgVbhObhPbgYbhQbhRbhSbhTbgYbhUbhVbhVbhWbgZbhXbhYbhYbhZbhZbhYbiabhfbibbicbidbiebhfbdOaZWaZmaahaahaahaahaahbgmbifbigbihbiibijbikbifbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahbilbilbilbilbilbilbilbilbilbimbinbiobipbeEbfubinbhobiqbirbhobhobhoaahaahahyahyahyahyahyahyahybambisaZzbitbiubdebivbiwbixbgwbhubefaahaahaahaahbdlbiybeTbizbiAbiBbeTbiCbdlaahaahaahaZdbiDaZHaZdahybejbdrdCFbbGbbGbbGbbGdCGbiFbhAbdtbhAbiHdCFbbGbbGbbGbiIbiJbiJbiKbiLbiMbiNbiObiPbiQaToaahbeZbfTbiRbiSbeZbiTbiUblObiWbiXbfhbgVbhObiYbgYbiZbjabjbbjcbgYbSjbjebjfbjgbgZbjhbjibjjbjkbpybjmbjnbhfbibbjobjpbjqbhfbjrbjsaZmaahaahaahaahaahbgmbjtbjubjvbjwbjvbjubjxbgmaahaahbgmbgmbgmbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahbilbjybjzbjAbjBbjCbjDbjEbilbjFbjGbjHbjIbjJbjKbjLbhobjMbjNbjObjPbhoaahaahaahahyahyahyahyahyahybaibjQbjRbjSbhrbecbjTbjUbjVbgwbhubefaahaahaahaahbjWbjWbjWbjWbjXbjWbjWbjWbjWaahaahaahaZdbjYaZHaZdahybcybaUdCFbbGbbGbbGbbGdCGbjZbhAbhAbhAbkadCFbbGbbGbbGbkbbbGbbGbkcaZibkdaYGbetaUwbkeaToaahbeZbkfbkgblRbeZbfhbfhbfhbfhbkibfhbkjbkkbklbgYbkmbknbkobkpbgYbkqbkrbksbktbgZbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbhfbdObkGaZmaahaahbgmbgmbgmbgmbkHbkIbkHbkJbkHbkKbkHbgmbgmbgmbgmbkLbkMbkNbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkObkPbkRbkQbkSbkPbkPahyaahaahaahaahaahaahaahaahaahbilbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhbhoblibljblkblkbhobllbllbllbllahyahyahyahyahybbobboblmblnblobeebefblpbjVbgwblqbefaahaahaahaahbjWblrblsbltblublvblwblxbjWaahaahaahaZdaZdaZHaZdahyaZIblydCwbeqbbGblzbbGbbGdCrbjZblAbkabfMbbGbbGblzbbGblBdCHdCIaZIaZfaToaZjblDaZlaToaToaahbeZblEblFblGbeZblHblIblJblKblLblMblNbhOblWbgYbgYblPblQbpabgYblSblTblUblVbgZbrKbhZbhYblXbhYbhYblYbhfblZbmabhfbmbbhfbmcaZWaZmaahbgmbgmbifbmdbkHbmebmfbmgbmhbmibmfbmgbmjbkJbmkbmlbmibmmbmgbmnbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMbnNbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMaFMbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnObnPbnQbnRbnRbnPbnSbnTbkPbkPbkPbnUbnVbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbftbfubnWbdTbnXbnYbnZblkblkboabobbocblkbodboeboebofbogbohboibllahyahybamaZzbcnbojbeebmKbmKbokbolbefaahaahaahaahbjWbjWbombonboobopboqbonborbjWbjWaahaahaahaZdaZHaZdahybdqbiHdCBbfRbbGbbGbfPbfQbbGbbGbbGbbGbbGbembeWbbGbbGbbGdCxbdxbdqahybaNbbObotbouaToaahaahbeZbgLbovbgNbowboxboybozboAboBboCbgVbhOboDboEbgYboFboGboFbgYboHboIbTzboKbgZbgkboLboMbdAboLboMboOboOboOboOboOboOboOboOaZWaZmaahbgmboPboQboRbkHboSbmfboTboUboVboWbmmbmgbkHbmibmmboXboYboSboZbuPbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQbmqbpbbpcbpcbmqbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpqbprbprbpsbprbptbpubpvbpwbpxbMKbpzbpzbpzbpAblkblkbpBblkblkbpCbpDbpEbpEbpEbpFbpGbllahyahybamaZzbcnbfBbeebefbefbefbefbefaahaahaahaahbjWbpHbpIbpJbpKbpLbpKbpMbpNbpObjWaahaahaahaZdaZHaZdahybejbiHdCDdCLbbGbelbbGbfPbenbbGbbGbbGbeobeWbbGbelbbGdCHdCMbdxbejahybbNaYGaYHaUwbpPahyaahbeZbpQbpRbgNbpSbpTbpUbpVbpVbpWbpXbpYbpZbqabqabqbbqcbqdbqcbqebqcbqfbqgbqhbqibqjbqkbqhbqlbqmbqnboObqoaCqbqqbqrbqsbqtboOaZWaZmaahbgmbqubqvbqwbkJbqxbqybqzbgmbqAbqBbqCbqCbqDbsnbqCbqEbqFbqGboZbqHbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahaahbjWbjWbrwbrxbpKbpKbpKbrybrzbjWbjWaahaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbvUbrLbrMblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscaCrbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahaahaahbjWbsQbrxbsRbsSbsTbsUbsQbjWaahaahaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkbtlbtmboObtnaCsaCuaCtaCuaDwboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbyTbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbMKbtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahaahaahbjWbujbukbulbumbukbukbujbjWaahaahaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzbuAbuBbuCbuDbuEbuFbuGbuHbuIbtfbuJbuKbuLbuMbuNbuObuLbuNboObwxbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbCQbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhbvibvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTbxbbsXbvVbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbxzboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbvRboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbxybyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsbztbtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahaahbxaaahaahaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmbALbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCWbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCYbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxybGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbHebHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbIdbIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxzbGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbyObHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbHebIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubLzbIybIzbIAbGYahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHbKMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkbOabMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAbNBbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobWTbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbIdbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHaGMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkaPubMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAaGUbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobNBbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbPkbPlbPmbNpbNpbSzcpCcpubRlcGibGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvbQwbMPbMQbQxbQybQzbMUbMVbWWbQBbOJbQCbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbRfbRgbRhbNpbNpcGQbRgcIgbRlcNkbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgbRFbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbXibQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbOLbSAbQGbQHbQHbSBbOLbORahyahyaahaahbtHbSCbIibSDbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbSEbSEbSFbSGbSEbSHbSIbSJbSKbSLbSMbSNbSObSPbSLbSLbSLbSLbSLbSLbSQbSRbSQbSSbSSbSQbSTbSQbSUbSQbGYahyahybKdbecbcnbSVbbobbobFubFubFubFubFubFubSWbFubFubSXbSYbSZbNCbTabTbbTcbTdbNCbTebTfbNCaahaZdaZHbEgbFLbvJbEgbEgbThbTibTibTibTibEgbEgbTjbTkbTlbTmbTnbTkbTlbTkbTobTpaUvaUvaUvaUvbTqbTrbTsaToahybMkbGxbTubTvbTubTtbScbTxbTybVhbTAbTBbTCbTDbTEbKSbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbTTbSpbTUbTVbTWbTXbTYbTZbSqbUabUbbSubUcbUdbUebSuaahaahbSxbUfbUgbSxaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbOLbSAbQGbQHbQHbSBbOLbORahyahyaahaahbtHbSCbIibSDbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbSEbSEbSFbSGbSEbSHbSIbSJbSKbSLbSMbSNbSObSPbSLbSLbSLbSLbSLbSLbSQbSRbSQbSSbSSbSQbSTbSQbSUbSQbGYahyahybKdbecbcnbSVbbobbobFubFubFubFubFubFubSWbFubFubSXbSYbSZbNCbTabTbbTcbTdbNCbTebTfbNCaahaZdaZHbEgbFLbvJbEgbEgbThbTibTibTibTibEgbEgbTjbTkbTlbTmbTnbTkbTlbTkbTobTpaUvaUvaUvaUvbTqbTrbTsaToahybMkbGxbTubTvbTubTtbScbTxbTybVhbTAbTBbTCbTDbTEbKSbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbTTbSpbTUbTVbTWbOabTXbTZbSqbUabUbbSubUcbUdbUebSuaahaahbSxbUfbUgbSxaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbNebNfbNgbUhbNgbNfbNebLkahyahyaahaahbtHbtHbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbUibUjbUkbUlbSEbUmbUnbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbSLbUybUzbUAbUBbUBbUybUzbUybUCbUDbUEahyahybKdbecbcnaZzbUFahybUGbUHbUIbUJbUKbULbULbUMbUGbUNbUObUPbNCbNCbUQbNCbNCbNCbNCbNCbNCaahaZdaZHbURbvMbUTbUUbUVbUWbUWbUWbUWbUWbYobUYbTkbTlbUZbVabVbbVcbTkbTlbVdbVeaUvaUvbVfbVgbdvaUvbvPaToahybMkbVibVjbVkbVlbVmbVnbVobVpbVqbVrbVsbMpbKNbKNbKSbKSbKSbKSbKSbTJbVtbVubVvbVwbVxbVybVzbVAbVBbVCbSpbVDbVEbVFbVGbVGbVHbSqbVIbVJbSubVKbVLbVMbSuaahaahbSxbVNcAhbSxaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbLlbVPbVQbVRbVSbVTbLmbLkahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfbWgbWhbWibWibWjbWkbSLbWlbWmbWlbWnbUBbWlbWmbWlbUCbUDbUEahyahybKdbWobcnaZzbamahybWpbWqbULbWrbWsbWsbWtbWubUGbWvbWwbUPbWxbWybWzbWAbWBbWCbWDbWEbNCaahaZdbWFbWGbWHbWIbWJclZbWLbWKbTwbWKbWLbWKbWJbTlbTkbWNdBObVabWPbTlbTkbWQbURbPObPPaTobHCblDbHCaToaToahybMkbWRbWSbMkbWRbWSbMkbMkbMkbYAbWUbWVbCAbKNaahaahaahaahaahaahbTJbWXbWYbWZbTNbXabXbbTQbXcbXdbXebSpbXfbXgbXhcccbXjbXkbSqbXlbXmbXnbXobXpbSubSuaahaahbSxbXqbXrbSxbSxaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbSLbXObUBbUBbXPbXQbXRbXRbXRbXSbXTbUEahyahybXUbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkcqEbYmbYnbYnbvRbNCaahaZdbYpbURbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTlcgwbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzciWbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbSLbXObUBbUBbXPbXQbXRbXRbXRbXSbXTbUEahyahybXUbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkcqEbYmbYnbYnbTYbNCaahaZdbYpbURbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTlcgwbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzciWbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybYFbYGbYHbYIbYFahyahyahyaahaahaahaahbtHbYJbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbYKbYLbYMbYNbYObYPbXMbYQbYRbYSbYTbYUbYRbYQbXMbXMbXMbYVbSLbWlbWmbWlbYWbUBbWlbWmbWlbYXbYYbUEbYZbZabeebecbDMbZbbamahybZcbZdbZebZfbZgbZhbZibZjbUGbWvbZkbZlbZmbZnbZobZpbZqbZrbZsbZtbNCaahaZdbYpbURcaAbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbZvbTjbZwbTlbTkbTjbZybZxahybJeaUvbetaUvbJeahyahyahyahyahyahyahyahyahyahyahybZzbZAbZBbZzaahaahaahaahaahaahaahbZCbZDbZEbZFbZGbTObTPbZHbZIbZJbZKbZLaahaahaahaahaahaahbZMbZNbZObZPbZQbZMaahaahaahaahbSxbZRbZSbZTbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZdFfcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZbJTcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahycbgcbhcbicbjcbgahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEcbkcblcbmcbnbSEbNZcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAbSLcbBcbCbUBbUBbUBbUBcbDbUBcbEcbFcamcancbGcbHbecbcnaZzcbIahybUGcbJcbKcbLcbMbULcbNbUGcbOcbPcbQcbObNCcbRcbScbTcbUcbVcbWcbXbNCaahaZdbYpaZdcDsbTlbTkbYsbTmbTnbTkbTlbTkcbZbTmbTlbTkbTlccabTnccbbTlbTkdBQcaIahyahybrGccdbgJaUvbrGahyahyahyahyahyahyahyahyahyahyahyccBccfccgcaNaahaahaahaahaahaahaahbZCcchcciccjbZGcckcclbZHccmccnccobZLaahaahaahaahaahaahbZMbZNbZMbZMbZMbZMaahaahaahaahcbcccpaEGccrccscctccuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsccvccwccxbXsahyahyaahaahaahbZXbZXbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEccycczbSEbSEbSLbSLbSLbSLbSLccAbSLbSLbSLccEccCccDbSLbSLbUEbUEcdPccFccFccGbUEbUEbUEbUEbUEbYZbZabeeccHblnblmbeeahybUGbUGbUGbUGbUGbUGbUGbUGccIccJccKccLbNCbNCccMbNCbNCbNCccNccObNCccPaZdccQaZdbURbwQbTlbUZdBRbVbbVcccTccUbVbbVaccVccWbUZbVadBOccXbTkbTlcbYcaIahyahybrGaUvbetaUvbvNahyahyahyahyahyahyahyahyahyahyahyccBccYccZcaNaahaahaahaahaahaahaahbZCbZCbZCbZCbZCcdacdbbZLbZLbZLbZLbZLaahaahaahaahaahaahbZMbZNbZMaahaahaahaahaahaahaahcbccdccddcdecdfcdgcdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybYFcdiccwcdjbYFahyahyaahaahaahbZXcdkcdlcdmbZXbZXbZXbZXaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEbSEbSEaahaahaahaahbZXcdncdobZXahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZybecbcnaZzcbOcbOcbOcbOcdpcdqcdrcdscdtbFpcdvcdwcdxcdycdzcdAcdBcdCcdDcbOcbOcbOcbOcbOcdEcdFcdGbURbURbTkccUbVbbYtccVcdHbUZbYtdBObVccdIccUcdJcdKcdLcdMcdNcdOcdSahyahybrGcdQbetcdRaTocaNahyahyahyahyahyahyahyahyahyahycelcdTcdUcaNaahaahaahaahaahaahaahaahaahaahaahbZMcdVcdWbZMaahaahaahaahaahaahaahaahaahaahbZMbZNbZMaahaahcbccbccbccbccbccbccdXcdXcbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9923,60 +9971,60 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYcjScjTchYcjUchYcjVcjWcjXcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXbZXcjucjYbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxckyckzchYckAchYckBckCckDcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahyahyahyahybbobbodETcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRckQciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahaahaahaahaahaahaahaahcllcllcllcllcllcllcllaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahyahyahyahyaZycrkbecclyclzclAclAclBclCclCclCclDclCclEclCclCclFcfRcfRcfRcfRclGclHclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclQclIclIclIclIclIclQclRclIclSclIclTclIclQclIclKclIclUclUclVclWbKGcmpahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahaahaahaahcmjcmjcmjcmjcllcmkcmlcmmcmncmocllaahaahbZXbZXcjubZXdEOdEOdEOdEOahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahaahaahaahcmjcnicnjcnkcllcnlcnlcnmcnlcnncllaahaahbZXcnocjubZXaEJcrrcrqdEOdEOahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahaahaahaahcmjcogcohcoicllcojcokcolcnlcomcllaahaahbZXconcjubZXcvVcxWcvWcyjdEOahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjcyzcymcFgdEOahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcDncDncDncEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcFucFrcqdcpjdEOcFFcLvdEOcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcFecEVcEVcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcJacJacEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcJacJacNfcEVcEVcEVcEVcEVcrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcPocJacPvcJacQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcuwcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacuIcuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcZMcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMcyNcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcQzcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacBQcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcCDcCEcCFcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcQzcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcCDcCEcCFcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQeddrcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcFVcCEcCFcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcGOcGPcOJcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBSdBTcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTcHBcHycHCcHDcHEcKXcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgcHLcHIcHMcLhcHOcHPcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcCDcIfcOScBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpcMocHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrcMscHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcCDcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahaahaahaahcmjcmjcmjcmjcllcmkcmlcmmcmncmocllaahaahbZXbZXcjubZXdEldEldEldElahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahaahaahaahcmjcnicnjcnkcllcnlcnlcnmcnlcnncllaahaahbZXcnocjubZXbWTckJccqdEldElahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahaahaahaahcmjcogcohcoicllcojcokcolcnlcomcllaahaahbZXconcjubZXclxcrlcmycrqdElahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjcvVcrrcvWdElahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcEVcEVcEVcEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcFucFrcqdcpjdElcxWcyjdElcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcuIcuwcxUcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcEVcEVcEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcEVcEVcDncEVcEVcEVcEVcFecrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcJacEVcLvcEVcQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcNfcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacOScuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWRcEVcEVcEVcEVcEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcPicEVcEVcEvcPocEVcEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcPvcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScPBcwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZcEVcTdcQncUncEVcEVddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMaGXcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcWQcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcWQcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacymcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcWQcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcBQcCEcCDcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcWQcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcBQcCEcCDcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQecZMcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcCFcCEcCDcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcFgcGPcFFcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBScFVcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTcHBcHycHCcHDcHEcKXcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgcHLcHIcHMcLhcHOcHPcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcBQcIfcGOcBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpcMocHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrcMscHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcBQcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIcKmcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcQAcQBcQCcrQcQDcQEdDydDxcsYcsYcQGdDzcQGdDAcQGaahaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLudEXcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMidEYcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdEZdCedCddCgdFadCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHdFbcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcQncLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOudDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhcPicPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQccxUdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjdaOcLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcyzdDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhaGYcPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQcdcEdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTadDQcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRdCScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCdCTcSccBgahyahyahyahyahyaahaahaahaahaahahydDRdbMdDScWuaahaahaahaahaahaahaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStcSkcSucSucSvcSwcSxcSycSycSzcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccTdcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcTZcSBcTPcTQcTRcTScTTcTUcTVcTWcPMcPMcTXcSIcTYcKjcUvcUacUvcMTcUbcUccUdcUecUecUfcPXcPFcUgcUhcUicUjcRIcUkcUycUmcUncUocUkcUkcUkcLGahyahycwhcUpcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahahyczidCVcRScKCcUrcLPcORcLPcLPcLPcUHcONcOOcOPcOQcONcUHcLPcLPcOLcLPcLPcUtcKCcSbdCWcBgahyahyahyahyahyahyahyahyahyahyahycWudDWdDVcWuaahaahaahaahaahaahaahaahcPdcUIcUwcUwcUwcUxcPdcPdaahaahcPncPncUYcUzcUzcUAcPncUBcUCcUDcPncPncPncPncPncPncPnaahaahcPxcPxcPxcPxcPxcPxcPxcPxaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccOtcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcTZcSBcTPcTQcTRcTScTTcTUcTVcTWcPMcPMcTXcSIcTYcKjcUvcUacUvcMTcUbcUccUdcUecUecUfcPXcPFcUgcUhcUicUjcRIcUkcUycUmcUodcLcUkcUkcUkcLGahyahycwhcUpcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahahyczidCVcRScKCcUrcLPcORcLPcLPcLPcUHcONcOOcOPcOQcONcUHcLPcLPcOLcLPcLPcUtcKCcSbdCWcBgahyahyahyahyahyahyahyahyahyahyahycWudDWdDVcWuaahaahaahaahaahaahaahaahcPdcUIcUwcUwcUwcUxcPdcPdaahaahcPncPncUYcUzcUzcUAcPncUBcUCcUDcPncPncPncPncPncPncPnaahaahcPxcPxcPxcPxcPxcPxcPxcPxaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccUEcUEcUFcUGcVucVgcUJcUKcULcUMcPMcUMcUNcUOcUPcUQcURcUScUTcUUcUVcRqcUWcUXcVQcUZcOocOocOocOocOocVacRucVbcUhcVccNecVdcVecVfcWicVhcVicVjcVkcVlcVmahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahahyahyahyahyahyahyczicVncEDcKCcLPcLPcVocNEcNEcNEcNDcNCcVpcVqcVrcNycNxcNwcNwcVscLPcLPcLPcKCcGxcVtcBgahyahyahyahyahyahyahyahyahyahyahydDRdbMdbScWuaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyaahaahaahaahahyahyahyahyahycWvcVvcVwcVxcPnaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccVycVzcVAcNZahycTZcVBcVCcVDcVEcVFcUMcVGcVHcVIcVJcVKcVKcVLcVMcVNcPMcVOcVPcWBcVRcVScVScVTcOocVUcVVcMTcVWcVXcVYcNecVZcWacWbcWicWccWdcWecWfcWgcVmcwhcwhcwhcRQcwhcWhcWhcWOcWjcWkcWhcWhcWOcWjcWkcWhcWhahyahyahyahyahyahyahyahyahyahyahyahycziczicWlczicKCcWmcWncWocWpcvtcLPcLRcONcOOcOOcOQcONcLRcLPcvtcWpcWqcWrcWscKCcBgcWtcBgcBgahyahyahyahyahyahyahyahyahyahydDTdbMdbScWuaahcWucWucWucWucWuaahaahahyahyahyahyahyaahaahaahaahaahaahaahahyahyahyahycXncWwcWxcWycWuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccUEcUEcWzcWAcVucXucWCcWDcWEcWFcWGcWHcWIcWJcWJcWJcWFcWFcWFcWKcWLcPMcWMcWNcMTcMTcXycWPcwAcvvcXycWPcWScWTcWUcVYcNecWVcWWcWXcWicWYcWZcXacXbcXccVmdDXcXecXecXfczQcWhcXgcXhcXicXjcXkcXlcXhcXmcXhcXhcWhcWhcXHcXocXocXocXocXocXpcXqcXHcXpcXqcXqcXrcXscXtcKCcKCcNYcKEcKFcKCcKCcKCcYfcXvcXvcKIcYfcKCcKCcKCcNYcKEcKFcKCcKCcXtcXwdCXcXqcXqcZncXzcXzcXzcXAcWucWucWudDYcWucWwdDZcWucWucWucXBcXCcXCcWucWucWucWucZncXzcXzcXAcWucWucWucWucWucWucWucZncXzcXzcXAcWucXDcXEcXFcWucXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcZocXIcXJcVDcXKcXLcUMcUNcXMcXMcXNcUOcVEcXOcXPcWFcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYacYccYdcNecYecWacNcdaTcYgcYhcYicYjcYkcVmcRQczQcYlczQczQcYmcYncYocYpcYqcYncYrcYpcYscYtcYucYvcYwcYxcYycYxcYxcYzcYxcYAcYBcYxcYxcYCcYDcYEcYFcYGcYHcYCcYxcYIcYxcYycYJcYKcYxcYxcYxcYLcYxcYMcYNcYycYxcYxcYxcYCcYxcYGcYOcYPcYPcYQcYRcYScYRcYTcYRcYUcYVdCYcYRcYScYWcYRcYRcYXcYScYYcYRcYZdCYcYXcYRcZacYRcYRcZbcYRcYRcZccYUdCYcYRcYRcZdcYRcYRcYScYRcYXcZecZfcXFdCZcXGcZhcZicZjcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkcZlcZmdbDdbdcZpcZqcVMcZrcPMcUMcUNcZscZtcZucVGcVHcZvcZqcZwcZxcZycZqcZzcZAcZBcZCcZDcZEcZFcZGcZHcZGcZIcZJcZKcZLdmbcZNcZOcZPcZQcZRcZScZTcVmcRQcwhcwhcZUcwhcZVcZWcZXcWhcZVcZWcZYcWhcZVcZZdaadabdacdaddaddaddaedaddaddafdaddaddaddagdaedahdaidajdakdagdaddajdaddaddaddaedaddaddaddaddaddafdaddaddaddaddaddagdakdajdaldaddaedagdamdamdamdandamdamdaodamdamdamdapdamdamdaqdaodardasdatdaudaqdamdandamdamdaodamdamdamdamdamdamdamdavdamdamdaudamdaqdawdaxdaydazdaAdaBdaCdaDcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNdaOcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYcXGdbZdcadcbcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNaImcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYcXGdbZdcadcbcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkdccdcddcDdczdcgdchdcidaPcPMcUMdcjdckdcldcmdcndcodcpcTQdcpdcmdcodcqdcJdcsdctdcudcvdcwdcxdcydcxddbdcAdcBdcCddndmkdcFdcGdcHdcIddtdcKczfdbcdcMcwhdcNdbidcOcZVdcPdcQdcRcWhdcSdcTdcUcZVcWhcWhcWhcWhcXHcXocXocXocXocXocXpdcVcXHcXpdcWdcXdpPdqIdpQdcXdcWddDdcVcXHcXocXocXocXocXpdcVcXHcXocXocXocXocXpdcVddDddcddddskdtrdstddddddcZncXAddhcZncXzcXAddhcZncXzcXAddhcZncXAddiddjdBAdBCdBBddjddiddPddhcZncXzcXzcXzcXzcXAddhcZncXzcXzcXzcXzcXAddhddPddodBEdBDdBFddscXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdducXJddvddwcTSddxcPMcUOcVFcVEcPMcPMddyddzcWLddAddBddCdeedcsdcudcudcvdcwddEddEddFddGddHddIdcCddJddKddKddKddLddMddNddNdBGdbccRQcwhdekddQddRcZVddSddTddScWhddUddVddUcZVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqddXddYddZdeadebdeqaaaaaaaaaaaaaaadeddeddeddeddeddeddedaaaaaaaaaaaaaaadeWdefdegdehdeidejdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdeldemdendeodepdfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdetdeuddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahbkQcIcdevdevdewcZmdbDdbddexcZqdeydezcVNcUMcPMdcjdclcVHcSHcPMcWLcWLcVIcVJdeAdeBdeCdeDdcudeEdeFdeGdeHdeIdeJdeKdeLdeMdeNddJddKddKdeOdePdeQdeRddKdeSdbccRQcwhahyahyahycZVddSdeTddScWhddUdeUddUcZVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfhdeXdeYdeZdeadfadfmaaaaaaaaaaaadeddeddeddeddeddeddeddeddedaaaaaaaaaaaadfBdfddegdfedffdfgdfBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfIdfidfjdfkdeodfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdfndfoddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahycIcdfpdfqdfrcNZahycTZdfscPMcUMcWLcVIdeydftcZqdfucZqdftcZqdfvcWLcPMcPMdfwdfxdfydfzdcudcudfAdfQdfCdfDdfEddbdfFdfGdfHddndfXdfJdfKdfYdfMdfYdfNdbcdbccRQcwhahyahyahyahyddSdfOddScZVddUdfPddUdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgwdfRdfSdfTdfUdfVdfWdhgdcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdhudfZdgadgbdgcddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidgddemdgedgfdggddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodghdgidgjdgkddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahahycIcdfpdfqdfrcNZahycTZdfscPMcUMcWLcVIdeydftcZqdfucZqdftcZqdfvcWLcPMcPMdfwdfxdfydfzdcudcudfAaIndfCdfDdfEddbdfFdfGdfHddndfXdfJdfKdfYdfMdfYdfNdbcdbccRQcwhahyahyahyahyddSdfOddScZVddUdfPddUdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgwdfRdfSdfTdfUdfVdfWdhgdcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdhudfZdgadgbdgcddcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddidgddemdgedgfdggddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodghdgidgjdgkddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahahycIcdevdevdgldcddcDdczdgmcTSdgncWLcPMdgocTTcTSdgpcTScTScTSdgpdgpdgqcPMdgrdgsdaSdgtdcudgudgvdhzdgxdfDdgydgzdgAddIdgBdgCdgCdgCdgCdgCdgCdgCdgCdbcdgDdgEcwhcwhahyahyahydgFdgGdgHaaadgIdgJdgKdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdgLdgMdgNdgOdgPdgQdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdgTdeidfgdeWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfbdfidemdgUdgVdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdgWdgjdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdgYcXJcPMcWLcPMcPMdgZdhacWLcPMcPMdhacWLcWLdhbdhadhcdhddaSdhedcudcudEadhEdfCdhhdhidgzdhjdfGdhkdhldhmdhndhodhpdhqdhrdhsczQczQdhtczQcwhahyahyaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdhIdfRdhvdfTdhwdhxdgRdhydfhaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadhMdhAdhBdgadhCdhDdhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadifdhFdemdgedhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdhKdhLddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQdiLdhNdhOdhPcVIdhQdhRdhSdhTdhUdhVdhWdhXdhYdhZdiadibdicdiddaSdiedcudcudEadiYdfCdfDdigdgzdfFdihdgBdiidijdikdildimdindiodipcXecXediqdircwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfmdeXddYddZdgRdfadfmaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadfBdfddgSdehdeidfgdfBaaaaaaaaadisditdiudiudiudivdiwaaaaaaaaadfIdfidemdendhGdfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQddWdgYcXJcPMcWLcPMcPMdgZdhacWLcPMcPMdhacWLcWLdhbdhadhcdhddaSdhedcudcucyNdhEdfCdhhdhidgzdhjdfGdhkdhldhmdhndhodhpdhqdhrdhsczQczQdhtczQcwhahyahyaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdhIdfRdhvdfTdhwdhxdgRdhydfhaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadhMdhAdhBdgadhCdhDdhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadifdhFdemdgedhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdhKdhLddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQdiLdhNdhOdhPcVIdhQdhRdhSdhTdhUdhVdhWdhXdhYdhZdiadibdicdiddaSdiedcudcucyNdiYdfCdfDdigdgzdfFdihdgBdiidijdikdildimdindiodipcXecXediqdircwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVdeVaaaaaadfmdeXddYddZdgRdfadfmaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadfBdfddgSdehdeidfgdfBaaaaaaaaadisditdiudiudiudivdiwaaaaaaaaadfIdfidemdendhGdfldfIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfLderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahahyahyahyahyahydjtdizdiAdiBdiCdiBdiDdiEdiCdiBdiFdiEdiCdiCdiDdiGcMNcMNdaSdiHdiIdiJdiKdjudiMdiNdiOdgzdfFdihdgBdiidijdiPdiQdiRdijdhrdiSdiTdiUdiVdiWcwhahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjwddYdjcdjddjedcWaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaaddcdjfdjgdjhdeidjiddcaaaaaaaaadjjdjkdjkdjkdjkdjkdjjaaaaaaaaaddidjldemdjmdjndjoddiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddodjpdjqdjrdjsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaaaaaaaaaahydkCdjxdbDdbDdkJdjxdkLdbDdkJdjxdkLdbDdkJdkUcOsbkQbkQahydaSdgzdgzdgzdgzdgzdjydgzdgzdgzdjzdjAdjBdjCdjCdjCdjCdjCdjCdjCdjCdjCcxxdhtcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdgRdfadeqaaaaaaaaadeddeddeddeddeddeddeddeddeddeddedaaaaaaaaadeWdfddgSdehdeidfgdeWaaaaaaaaadjjdjDdjEdjkdjEdjDdjjaaaaaaaaadfbdfidemdendhGdfldfbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfcderdesdixdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAacAaaadjFaaabkQcIcdjGcNZcMKcIcdjGcNZcMKcIcdjGcNZcMKcIcbkQaahdjHdjHdjIdjJdjKdjLdjMdjNdjOdjPdjQdjRdjSdjCdjTdjUdjVdjWdjXdjYdjZdjCdjCdhtcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadfUddZdgRdebdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdejdgSdehdeidgSdhMaaaaaadisdkbdkcdkcdkddkcdkcdkbdiwaaaaaadifdhGdemdendhGdepdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiyderdesdixdgXddsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaacAaaddkeaadbkQcIcdkfdkgdkhcIcdkidkjdkkcIcdkldkmdkncIcaahaahdjHdkodkpdkqdkrdksdktdkqdkudjPdkvdkwdkxdjCdkydkydkzdjXdjXdkAdkAdEbdjCdhtcwhdkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHddZdkIdlEdfSdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdkNdkOdkPdehdeidfgdhMaaaaaadjjdjkdkQdjkdjkdjkdkRdkSdjjaaaaaadifdfidemdendkTdlYdkVdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdladlbdlcdixdgXdldddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledlfdlgaaadledlfdlgaaadledlfdlgaaadledlfdlgaaaacAaadaadaaaaaacIcdlhdlidlhcIccUEdljcUEcIcdlkdlldlkcIcaahaahdjHdlmdlndkqdlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlzdlzdlBdlzdEcdjCdhtdDadoidlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadlGdlHdlIdlJdlKdlLdlMdeddeddeddeddeddeddeddeddeddeddeddeddeddlNdlOdlPdlQdlRdlSdlTdokdkNdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdkVdkXdlZdmadDbdmcdmddmedmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmgdmhdmidmjdDcdixdgXdmlddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledmmdlgaaddledmmdlgaaddledmmdlgaaddledmmdlgaadacOaaaaadaadaaacIcdlhdmndlhcIccUEdmocUEcIcdlkdmpdlkcIcaahaahdjHdlmdmqdkqdlpdlpdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmCdmDdlzdEddjCdhtczQdmFdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfmdeXddYddZdmHdmIdmJdmKdmLdeddeddeddeddeddeddeddeddeddeddeddeddeddmMdmNdmOdmPdmQdehdmRdmSdmTdgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdmWdmVdmXdendmYdmZdnadnbdncaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnddnednfdngdnhdixdgXdniddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaaadaadaadaaaacAaaddkeaadbkQcIcdkfdkgdkhcIcddrdcYdfQcIcdkldkmdkncIcaahaahdjHdkodkpdkqdkrdksdktdkqdkudjPdkvdkwdkxdjCdkydkydkzdjXdjXdkAdkAdEbdjCdhtcwhdkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkDdkEdkFdkGdkHddZdkIdlEdfSdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdkNdkOdkPdehdeidfgdhMaaaaaadjjdjkdkQdjkdjkdjkdkRdkSdjjaaaaaadifdfidemdendkTdlYdkVdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdladlbdlcdixdgXdldddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledlfdlgaaadledlfdlgaaadledlfdlgaaadledlfdlgaaaacAaadaadaaaaaacIcdlhdlidlhcIcdkjdkidkjcIcdlkdlldlkcIcaahaahdjHdlmdlndkqdlodlpdlqdlrdlsdltdludlvdlwdlxdlydlzdlAdlzdlzdlBdlzdEcdjCdhtdDadoidlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhIdfRdhvdkadlGdlHdlIdlJdlKdlLdlMdeddeddeddeddeddeddeddeddeddeddeddeddeddlNdlOdlPdlQdlRdlSdlTdokdkNdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdkVdkXdlZdmadDbdmcdmddmedmfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmgdmhdmidmjdDcdixdgXdmlddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddledmmdlgaaddledmmdlgaaddledmmdlgaaddledmmdlgaadacOaaaaadaadaaacIcdlhdmndlhcIcdkjdkkdkjcIcdlkdmpdlkcIcaahaahdjHdlmdmqdkqdlpdlpdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmCdmDdlzdEddjCdhtczQdmFdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfmdeXddYddZdmHdmIdmJdmKdmLdeddeddeddeddeddeddeddeddeddeddeddeddeddmMdmNdmOdmPdmQdehdmRdmSdmTdgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdmWdmVdmXdendmYdmZdnadnbdncaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnddnednfdngdnhdixdgXdniddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaadaadcIccIccIccIccIccIccIccIccIccIccIccIccIcaahaahdjHdkodkpdkqdlodlpdktdkqdEedjPdfFdihdnkdjCdnldnmdnndnodnpdnqdnrdnsdjCdntczQdnudppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdnvddYddZdnwdlEdhvdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdnxdkOdnydehdnzdokdnxdkMdkOdjjdjkdjkdjkdjkdjkdjkdjkdjjdlYdkWdnAdkXdnBdendnCdlYdnAdkWdkXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmGdkZdnDdlbdnEdixdgXdnFddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaaaaadaadaadaadaaaaaaaadaadaadaaabkQdnGdnGdnGdnGdnGdjHdjHdnHdnIdnJdnKdnLdnMdjHdjHdnNdnOdnPdjCdjCdnQdnodnRdnSdnTdnrdjCdjCdhtczQdnudppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadeqdeXdnVdnWdgRdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdgSdnYdnZdnXdhMaaaaaadoadjkdmUdmUdobdmUdmUdjkdoaaaaaaadifdocdoddoedhGdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdesdogdohddsddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaadledmmdlgaaadledmmdlgaaadledmmdlgaaadledmmdlgaaaaadaaaaaaaaaaaaaaddqrdojdojdojdojdnGdqLdoldnGdnGdomdomdondoodopdjHdjHdjHdjHdjHdjHdjHdjHdoqdordosdotdoudjCdjCdjCdjCdjCdjCdjCdjCdjCdhtczQdovdppaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdgwdfRdfSdkadfUddZdgRdhydfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdhAdgSdehdeidowdhMaaaaaadoxdjkdjkdjkdoydjkdjkdjkdoxaaaaaadifdozdemdendhGdhHdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydhJdesdixdoAddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaddoCaadaaaaaddoCaadaaaaaddoCaadaaaaaddoCaadaaadoDaaaaaaaaadqNdoFdoGdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoQdoRdoSdoTdoUdoVdoWdoRdoOdoXdoYdoZdpadpbdpcdpddpedpfdpgdphdpidpjdpkdpldpmdpndhtdpodqTdpqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdprdpsdptdpudpvdpwdpxdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdpydpzdeidnXdhMaaaaaadpAdjkdmUdmUdjkdmUdmUdjkdpAaaaaaadifdocdemdpBdpCdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdpDdpEdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddpFdpGdpHdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpIdpJdpGdpGdpGdpKdpLdpMdpNdpOcBhcAMdpRdpSdpTdpUdpVdpWdpXdpYdpZdqadqbdqcdqddqedoudoudqfdoudqgdoudqhdqidoudoudqjdoudqfdqkdqldqmdqndqodqpdqqcwhdqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdhIdfRdhvdkadqsdcZdqtdlEdfSdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdkNdkOdquddfdqvdokdkNdkMdkOdjjdqwdjkdjkdjkdjkdjkdqxdjjdlYdkWdkVdkXdqyddldqzdlYdkVdkWdkXaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaadmGdkZdladlbdqBdqCdqDddsaahaahaahdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaddqFaadaaaaaddqFaadaaaaaddqFaadaaaaaddqFaadaaaaadaaaaaaaaadqNdoFdqGdqHcBPcBldojdnGdqJdqKdnGdnGdrxdoldqMdnGdrAdqOdqOdqPdqOdqQdqRdqQdqSdrBdqUdqVdrBdqUdqSdqWdqXdsLdnGdqZdqZdnGdnGcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadfmdeXddYddZdmHdradrbdrcdrddeddeddeddeddeddeddeddeddeddeddeddeddeddredrfdrgdrhdmQdehdmRdmSdridgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdrjdmVdmXdendmYdrkdrldrmdrnaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadrodrpdrqdrrdnhdixdgXddsdqEdqEdqEdqEdrsdrtdrudrvdrsdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaadoDaaaaaaaaadqNdoFdoGdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoQdoRdoSdoTdoUdoVdoWdoRdoOdoXdoYdoZdpadpbdpcdpddpedpfdpgdphdpidpjdpkdpldpmdpndhtdpodqTdpqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdprdpsdptdpudpvdpwdpxdeXdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMdnXdpydpzdeidnXdhMaaaaaadpAdjkdmUdmUdjkdmUdmUdjkdpAaaaaaadifdocdemdpBdpCdocdifaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiydofdpDdpEdgXddsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaddpFdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGbCXdpGdpGdpGdpGdpGdpKdpLdpMdpNdpOcBhcAMdpRdpSdpTdpUdpVdpWdpXdpYdpZdqadqbdqcdqddqedoudoudqfdoudqgdoudqhdqidoudoudqjdoudqfdqkdqldqmdqndqodqpdqqcwhdqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdhIdfRdhvdkadqsdcZdqtdlEdfSdfRdfTdeddeddeddeddeddeddeddeddeddeddeddeddeddokdkMdkNdkOdquddfdqvdokdkNdkMdkOdjjdqwdjkdjkdjkdjkdjkdqxdjjdlYdkWdkVdkXdqyddldqzdlYdkVdkWdkXaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAaaaaaadmGdkZdladlbdqBdqCdqDddsaahaahaahdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadbCWaadaaaaadaaaaaaaaadqNdoFdqGdqHcBPcBldojdnGdqJdqKdnGdnGdrxdoldqMdnGdrAdqOdqOdqPdqOdqQdqRdqQdqSdrBdqUdqVdrBdqUdqSdqWdqXdsLdnGdqZdqZdnGdnGcwhcwhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnUdnUdnUdnUdnUdnUdnUdnUdnUdnUdnUaaaaaaaaadfmdeXddYddZdmHdradrbdrcdrddeddeddeddeddeddeddeddeddeddeddeddeddeddredrfdrgdrhdmQdehdmRdmSdridgSdmSdkddjkdmUdmUdjkdmUdmUdjkdkddmVdhGdrjdmVdmXdendmYdrkdrldrmdrnaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadrodrpdrqdrrdnhdixdgXddsdqEdqEdqEdqEdrsdrtdrudrvdrsdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEdqEaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaddledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaaaaaddtkdojdojdojdojdnGdrydrzdtIaaadtXdrCdrDdrEdrFdqOdrGdrHdrIdqQdrJdrKdrLdrMdrNdrOdrPdrQdrLdrRdrSdrTdnGdrUdrVdrWdtIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadiXdcWdjvdiZdjadcXdcXdcXdcXdcXdcWdjbdrXdlHdrYdrZdsadsbdscdeddeddeddeddeddeddeddeddeddeddeddeddeddsddsedsfdsgdshdlSdsidokdnxdkMdlVdjjdlWdjkdjkdjkdjkdjkdlXdjjdoEdkWdnAdkXdsjdmadDddsldsmdsndsoaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadspdsqdsrdssdDedsudsvdswdBLdsydsydsydszdsAdszdsBdszdsydsxdsydsydsydsCdsDdsEdsFdsGdsHdqEdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaaadaaaaaaaaaaadaadaaaaaaaaaaaaaaadnGdsJdsKdtZaaddtXdsMdsNdsOdsPdqOdsQdsRdsSdqQdsTdsUdrLdsVdsWdsXdsYdsZdrLdtadtbdtcdnGdtddtedtfdtZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeqdeXddYddZdtgdlEdhvdfRdkKdeddeddeddeddeddeddeddeddeddeddeddeddeddlUdkMdnxdkOdthdehdeidfgdhMaaaaaadjjdtidtjdjkdjkdjkdtjdwfdjjaaaaaadifdfidemdendtldlYdnAdkWdkXaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaadmGdkZdtmdtndtodtpdtqdtqdBMdtsdttdtudtvdtwdtxdtydtzdtwdtAdtBdtCdtDdtEdtBdtBdtBdtBdtFdtGdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadledrwdlgaaadledrwdlgaaadledrwdlgaaadledrwdlgaaaacAaaaaaaaadaadaaaaaaaaaaaaaaaaaadnGdtHdtHdnGahydxKdoldtJdqLdoldqOdtKdtLdtMdtNdtOdtPdtQdtRdtSdtTdtUdtVdtWdxNdtYdxOduadubducdnGdnGaaddudduedueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgwdfRdfSdkadufddZdgRdugdfhaaaaaadeddeddeddeddeddeddeddeddeddeddeddeddedaaaaaadhMduhdgSdehdeiduidhMaaaaaadujdukduldumdumdumduldukdunaaaaaadifduodemdendhGdupdifaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaadiyduqdixdurddsdqEdqEdusdutduudqEdusdutduvdqEdusdqEdqEdqEdqEdqEdqEdqEdtBdtFdtBdqEaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9990,24 +10038,24 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIds aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzvdnGdzNbkQdzNdnGduadzwdxzdzxdzydzzdwUdzAdzBdzCdzDdzEdzFdzGdzHdzIdzJdzKdzLdzMdBwdzhdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBxdfTdzPdzQdfmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadfBdzRdzSdokdzTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBydkXdzVdzWdfIaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdmGdkZdzXdkZdkZdzYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaadzZaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahydBzahyahyduadAbdyTdAcdAddAedwUdAfduadAgdAhdAiduadAjdAkdAldAmdAndAodApduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaadaadaaaaaaaaaaaadAraaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaadyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaahyduadAsdwUdAtdAudAudwUdAvdAwdAxdAydAzdAwdAAdABdzbdzcdACdADdAEduadwWdwmdwXdwYdwmdwZdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaadAraaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduadwUdwUdzydAFdAFdwUdAvdAGdAHdAIdAJdAGdAAdAvdzIdAKdzKdALdAMduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedudaadaadaadaaddANaadaadaadaadaadacOduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduaduadwUdAOdAddAddAPdAvdAQdARdASdATdAQdAUdAVdAWdAXdAYdAZduaduadytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaaaaaaaaadBaaaaaadaadaaaaaaaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaaaaaduaduadBbdBcdBbdBbduaduaduadBdduaduaduaduaduadBeduaduaduaaaddwYdwmdwZdwWdwmdwXdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaaaaadBgdBgdBgdBgaadaaddBhaaadBhaadaaaaadaaaaaaaadaaaaaaaaddytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaadBodBpdBpdBoaaadudaaaaaaaaaaaddwkdwXdwkdwndwYdwndwkdwXdwkdwndBodBodwkdwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaadBqdBqdBqdBqdBqaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdBrdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaadaaddBodBodBodBoaaddueaaaaaaaaaduddBpdBodBpdBpdBodBpdBpdBodBpdBpdBodBodBpdBpaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaadaadaaadBaaaaaadaaaaadaaaaadaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaadueaaaaaadBodBpdBpdBoaaadueaaaaaaaaaduedBodwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdBoaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaadaaddBodBodBodBoaaddueaaaaaaaaaduedBodwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdBodudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaadwWdyudytdwZaaadueaaaaaaaaaduedBpdBodBpdBpdBodBpdBpdBodBpdBpdBpdBpdBpdBpdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaddBqdBqdBqdBqdBqaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaadaaaaaaaadaaadueaaaaaaaaaduedytdwZdytdyudwWdyudytdwZdytdyudytdyudytdyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadBaaaaaadaaaaadaadaadaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedueduedueaaddueaaaaaaaaadudduedueduedueaadduedueduedueduedueduddueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaddBqdBqdBqdBqdBqaaadueaaadBsaaaaaadBsaaaaaaaaadBsaaaaaaaaaaaaaaadBsaaaaaaaaadBsaaaaaadBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadBaaaaaadaaaaadaadaadaaddueaaadBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddBaaaddBfdBfdBfdBfdBfaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjdBkdBadBldBmdBmdBmdBmdBnaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadBaaaadBqdBqdBqdBqdBqaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadueaaaaaaaadaadaadaaaaaadBtaadaaaaaaaadaadaaaaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduadwUdwUdzydAFdAFdwUdAvdAGdAHdAIdAJdAGdAAdAvdzIdAKdzKdALdAMduadwkdwldwZdwWdwldwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedudaadaadaadaaddAraadaadaadaadaadacOduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaaaduaduadwUdAOdAddAddAPdAvdAQdARdASdATdAQdAUdAVdAWdAXdAYdAZduaduadytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaaaaaaaaadAraaaaadaadaaaaaaaaaaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaaaaaduaduadBbdBcdBbdBbduaduaduadBdduaduaduaduaduadBeduaduaduaaaddwYdwmdwZdwWdwmdwXdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaaaaadBgdBgdBgdBgaadaaddBhaaadBhaadaaaaadaaaaaaaadaaaaaaaaddytdwldwXdwYdwldyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaaaaaadBodBpdBpdBoaaadudaaaaaaaaaaaddwkdwXdwkdwndwYdwndwkdwXdwkdwndBodBodwkdwndueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaadBqdBqdBqdBqdBqaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdBrdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaadaaddBodBodBodBoaaddueaaaaaaaaaduddBpdBodBpdBpdBodBpdBpdBodBpdBpdBodBodBpdBpaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaaaadaadaadaaadAraaaaadaaaaadaaaaadaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaadueaaaaaadBodBpdBpdBoaaadueaaaaaaaaaduedBodwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdwWdwZdBoaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaadaaddBodBodBodBoaaddueaaaaaaaaaduedBodwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdwYdwXdBodudaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaaadwWdyudytdwZaaadueaaaaaaaaaduedBpdBodBpdBpdBodBpdBpdBodBpdBpdBpdBpdBpdBpdueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaddBqdBqdBqdBqdBqaaadueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueaaaaadaaaaaaaadaaadueaaaaaaaaaduedytdwZdytdyudwWdyudytdwZdytdyudytdyudytdyudueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadAraaaaadaaaaadaadaadaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaadoBdoBdoBdoBdoBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaduedueduedueduedueaaddueaaaaaaaaadudduedueduedueaadduedueduedueduedueduddueduedueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaadqAdqAdqAdqAdqAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqdAqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaddBqdBqdBqdBqdBqaaadueaaadBsaaaaaadBsaaaaaaaaadBsaaaaaaaaaaaaaaadBsaaaaaaaaadBsaaaaaadBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadudaaaaadaaaaadaaaaadaaadAraaaaadaaaaadaadaadaaddueaaadBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsdBsdBsdBsaaaaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaadsIdsIdsIdsIdsIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyRdyRdyRdyRdyRdyRdyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaadBfdBfdBfdBfdBfaaddAraaddBfdBfdBfdBfdBfaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBidBjdBjdBjdBjadLaejadLdBmdBmdBmdBmdBnaaddueaaadBsdBsdBsdBsaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaadBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBqdBqdBqdBqdBqaaadAraaadBqdBqdBqdBqdBqaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaadueaaaaaaaadaadaadaaaaaadAraadaaaaaaaadaadaaaaaadueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueduedueduedueaaaaaaaaadAraaaaaaaaadueduedueduddueaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaddBuaaddueaaaaaaaaaaaaaaaaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBvdBvdBvdBvdBvdBvdBvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadueaaaaadaaadueaaaaaaaaaaaaaaaaaaaaadBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsdBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm index 9a3b1721e5e..7f7311bfc15 100644 --- a/maps/polaris-2.dmm +++ b/maps/polaris-2.dmm @@ -681,7 +681,7 @@ "ne" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/a556,/obj/item/ammo_magazine/a556,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "nf" = (/obj/machinery/deployable/barrier,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ng" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"nh" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"nh" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "ni" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "nj" = (/turf/unsimulated/wall{icon = 'icons/misc/title.dmi'; icon_state = "title"},/area) "nk" = (/turf/unsimulated/wall,/area/centcom/specops) @@ -731,7 +731,7 @@ "oc" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "od" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "oe" = (/obj/item/weapon/bikehorn/rubberducky,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) -"of" = (/turf/simulated/shuttle/wall{dir = 6; icon_state = "wall3_wall"; tag = "icon-swall (NORTHWEST)"},/area/space) +"of" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "og" = (/obj/structure/table/standard,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oh" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oi" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -760,7 +760,7 @@ "oF" = (/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oG" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT2"; name = "Launch Bay #2"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "oH" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT2"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) -"oI" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"oI" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "oJ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "oK" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops) "oL" = (/obj/mecha/working/ripley/firefighter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -786,7 +786,7 @@ "pf" = (/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) "pg" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "ph" = (/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) -"pi" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pi" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pj" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pk" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pl" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -805,8 +805,8 @@ "py" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pz" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pA" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pB" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pC" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pD" = (/turf/simulated/shuttle/wall{icon_state = "wall3_wall15"},/area/centcom/specops) "pE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership) "pF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership) @@ -817,9 +817,9 @@ "pK" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pL" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pM" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pN" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pO" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"pP" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pN" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) +"pP" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "pR" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "pS" = (/obj/structure/reagent_dispensers/beerkeg,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) @@ -843,7 +843,7 @@ "qk" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "ql" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "qm" = (/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) -"qn" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) +"qn" = (/turf/simulated/mineral,/area/syndicate_mothership) "qo" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) "qp" = (/obj/machinery/camera/network/ert{c_tag = "Assault Armor South"; dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "qq" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) @@ -861,7 +861,7 @@ "qC" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qD" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qE" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"qF" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"qF" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qG" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "qH" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "qI" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) @@ -891,7 +891,7 @@ "rg" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rh" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "ri" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"rj" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"rj" = (/turf/unsimulated/floor{icon_state = "dark"},/area/space) "rk" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "rl" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "rm" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -910,14 +910,14 @@ "rz" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/red/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "rA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "rB" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"rC" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"rC" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "rD" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rE" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rF" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "rG" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "rH" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "rI" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"rJ" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"rJ" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/space) "rK" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "rL" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/shuttle/specops/centcom) "rM" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) @@ -929,7 +929,7 @@ "rS" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "rT" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership) "rU" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"rV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"rV" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/space) "rW" = (/obj/machinery/computer/communications,/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1443; listening = 1; name = "Spec Ops Intercom"; pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "rX" = (/obj/machinery/computer/prisoner{name = "Implant Management"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "rY" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) @@ -947,7 +947,7 @@ "sk" = (/obj/machinery/shower{pixel_y = 32},/obj/structure/window/basic{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "sl" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership) "sm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"sn" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall3_straight"; tag = "icon-swall_straight (EAST)"},/area/space) +"sn" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "so" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "sp" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "sq" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -967,7 +967,7 @@ "sE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "sF" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "sG" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command) -"sH" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"sH" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "sI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "sJ" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "sK" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -998,7 +998,7 @@ "tj" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space) "tk" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tl" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tm" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tm" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "tn" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "to" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom) "tp" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1014,7 +1014,7 @@ "tz" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1331; id_tag = "merc_base"; pixel_x = -25; pixel_y = -5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_mothership) "tA" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tB" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tC" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tC" = (/obj/structure/table/rack,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "tD" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "tE" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom) "tF" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1032,7 +1032,7 @@ "tR" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tS" = (/obj/machinery/door/airlock/vault{name = "Armory"; req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "tT" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"tU" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"tU" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "tV" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "tW" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) "tX" = (/obj/item/weapon/flame/lighter/zippo,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1045,13 +1045,13 @@ "ue" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) "uf" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start) "ug" = (/obj/machinery/door/window{dir = 2; name = "Seating"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"uh" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"uh" = (/obj/structure/table/rack,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ui" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "uj" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "uk" = (/obj/structure/table/rack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/material/hatchet/tacknife/combatknife,/obj/item/weapon/material/hatchet/tacknife/combatknife,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "ul" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "um" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"un" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"un" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uo" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/shuttle/administration/centcom) "up" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom) "uq" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom) @@ -1072,7 +1072,7 @@ "uF" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uG" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uH" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"uI" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"uI" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "uJ" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (WEST)"; icon_state = "propulsion_r"; dir = 8},/turf/space,/area/shuttle/administration/centcom) "uK" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom) "uL" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1113,7 +1113,7 @@ "vu" = (/turf/simulated/shuttle/floor,/area/supply/dock) "vv" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "vw" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"vx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"vx" = (/obj/structure/table/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/obj/item/weapon/crowbar/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "vy" = (/obj/structure/table/standard,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "vz" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "vA" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1138,8 +1138,8 @@ "vT" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "vU" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "vV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start) -"vW" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"vX" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"vW" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/ammo_magazine/a10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/space) +"vX" = (/obj/structure/table/rack,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/ammo_magazine/c762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "vY" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/terminal) "vZ" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/terminal) "wa" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) @@ -1176,7 +1176,7 @@ "wF" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "wG" = (/obj/machinery/chemical_dispenser/ert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom) "wH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "supply_shuttle"; pixel_x = 25; pixel_y = 0; req_one_access = list(13,31); tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock) -"wI" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"wI" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "wJ" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "wK" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "wL" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1184,35 +1184,35 @@ "wN" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_telebay"; name = "remote shutter control"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "wO" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_workshop"; name = "remote shutter control"; pixel_x = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "wP" = (/turf/unsimulated/wall,/area/centcom/security) -"wQ" = (/obj/machinery/door/airlock/centcom{name = "Creed's Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"wQ" = (/obj/structure/closet/secure_closet/medical_wall{pixel_x = -32; pixel_y = 0; req_access = list(150)},/obj/item/stack/medical/splint,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "wR" = (/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "wS" = (/obj/structure/table/standard,/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "wT" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "wU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "wV" = (/obj/machinery/door/window{dir = 1; name = "Surgery"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"wW" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"wX" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"wY" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"wW" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/space) +"wX" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"wY" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "wZ" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"xa" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"xa" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xb" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xc" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) -"xd" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"xd" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xe" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xf" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"xf" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xg" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/security) "xh" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xi" = (/obj/structure/closet{name = "Prisoner's Locker"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"xj" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) -"xk" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) -"xl" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"xi" = (/obj/structure/closet{name = "Prisoner's Locker"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"xj" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"xk" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"xl" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) "xm" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "xn" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "xo" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xp" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock) "xq" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock) "xr" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"xs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"xs" = (/obj/machinery/door/window{tag = "icon-right"; name = "Seating"; icon_state = "right"; dir = 2; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xt" = (/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xu" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xv" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) @@ -1221,9 +1221,9 @@ "xy" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "xz" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xA" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xB" = (/obj/structure/bed/chair,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"xB" = (/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command) "xC" = (/obj/machinery/door/airlock/glass{name = "Brig Dormitories"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xD" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"xD" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) "xE" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "xF" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "xG" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) @@ -1231,16 +1231,16 @@ "xI" = (/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xJ" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "xK" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) -"xL" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"xL" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xM" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_station/start) "xN" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "xO" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) -"xP" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"xP" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "xQ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xR" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"xR" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) "xS" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"xT" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"xU" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"xT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"xU" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) "xV" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "xW" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "xX" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) @@ -1254,31 +1254,31 @@ "yf" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/space,/area/syndicate_station/start) "yg" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/syndicate_station/start) "yh" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/space,/area/syndicate_station/start) -"yi" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"yi" = (/obj/structure/table/reinforced,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "yj" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "yk" = (/obj/structure/bed/chair/comfy/teal{dir = 4},/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "yl" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"ym" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"ym" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/button/remote/blast_door{name = "Spec Ops Ready Room"; pixel_y = 15; req_access = list(11); id = "CREED"},/obj/machinery/button/remote/blast_door{name = "Mech Storage"; icon_state = "doorctrl0"; pixel_y = 0; req_access = list(11); id = "ASSAULT"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) "yn" = (/obj/structure/device/piano{dir = 4},/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "yo" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command) "yp" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/supply/dock) "yq" = (/turf/simulated/shuttle/wall{icon_state = "swall15"; dir = 2},/area/supply/dock) "yr" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/supply/dock) "ys" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/supply/dock) -"yt" = (/obj/structure/table/reinforced,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"yu" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"yt" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"yu" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) "yv" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yw" = (/obj/structure/table/woodentable{dir = 10},/obj/machinery/button/remote/blast_door{name = "Spec Ops Ready Room"; pixel_y = 15; req_access = list(11); id = "CREED"},/obj/machinery/button/remote/blast_door{name = "Mech Storage"; icon_state = "doorctrl0"; pixel_y = 0; req_access = list(11); id = "ASSAULT"},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) -"yx" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) -"yy" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) -"yz" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"yw" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command) +"yx" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"yy" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"yz" = (/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "yA" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/space,/area/supply/dock) "yB" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/supply/dock) "yC" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/space,/area/supply/dock) "yD" = (/obj/structure/table/reinforced,/obj/item/clothing/head/greenbandana,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"yE" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/command) +"yE" = (/obj/structure/table/steel,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "yF" = (/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) -"yG" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"yG" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "yH" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "yI" = (/turf/unsimulated/wall,/area/centcom/restaurant) "yJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/storage/briefcase,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) @@ -1305,19 +1305,19 @@ "ze" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1443; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zf" = (/obj/machinery/door/window{dir = 2; name = "AI Core Door"; req_access = list(109)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) -"zh" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"zh" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zi" = (/obj/structure/closet/wardrobe/orange,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zj" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zk" = (/obj/structure/table/steel,/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"zl" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"zm" = (/obj/structure/table/steel,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"zj" = (/obj/machinery/computer/card/centcom,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) +"zk" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zl" = (/obj/structure/table/steel,/obj/item/weapon/folder/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zm" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zn" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -5},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant) "zo" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "zp" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "zq" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "zr" = (/obj/machinery/door/airlock/glass_security{name = "Spaceport Security Airlock"; req_access = list(63)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zs" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"zt" = (/obj/structure/table/steel,/obj/item/weapon/folder/red,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"zs" = (/obj/structure/table/steel,/obj/item/device/taperecorder,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zt" = (/obj/machinery/computer/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zu" = (/obj/machinery/door/airlock/freezer,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant) "zv" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "zw" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) @@ -1337,10 +1337,10 @@ "zK" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/shuttle/transport1/centcom) "zL" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/shuttle/transport1/centcom) "zM" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle_bay"; name = "shuttle bay controller"; pixel_x = -24; pixel_y = 0; tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"zN" = (/obj/machinery/door/airlock/glass_security{name = "Spaceport Security Airlock"; req_access = list(63)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) -"zO" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"zN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"zO" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zP" = (/obj/structure/table/reinforced,/obj/machinery/newscaster{layer = 3.3; pixel_x = 27; pixel_y = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"zQ" = (/obj/structure/table/steel,/obj/item/device/taperecorder,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"zQ" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "zR" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant) "zS" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "zT" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) @@ -1354,7 +1354,7 @@ "Ab" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "Ac" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/shuttle/transport1/centcom) "Ad" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/space,/area/shuttle/transport1/centcom) -"Ae" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/shuttle/plating,/area/centcom/security) +"Ae" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "Af" = (/obj/structure/closet{name = "Evidence Closet"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "Ag" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/evidence,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "Ah" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant) @@ -1382,7 +1382,7 @@ "AD" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "AE" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/shuttle/transport1/centcom) "AF" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/shuttle/transport1/centcom) -"AG" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"AG" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "AH" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "AI" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "AJ" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) @@ -1404,13 +1404,13 @@ "AZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/shuttle/transport1/centcom) "Ba" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/shuttle/transport1/centcom) "Bb" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-burst_l (EAST)"; icon_state = "burst_l"; dir = 4},/turf/space,/area/shuttle/transport1/centcom) -"Bc" = (/obj/machinery/computer/security,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"Bc" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "Bd" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "Be" = (/obj/machinery/gateway{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/main_hall) "Bf" = (/obj/machinery/gateway/centerstation,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/main_hall) "Bg" = (/obj/machinery/gateway{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/main_hall) "Bh" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space) -"Bi" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"Bi" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "Bj" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "Bk" = (/obj/machinery/door/airlock/centcom{name = "Arrivals Processing"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "Bl" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) @@ -1435,7 +1435,7 @@ "BE" = (/obj/machinery/door/airlock/external,/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) "BF" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "BG" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"BH" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"BH" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "BI" = (/obj/machinery/account_database{name = "CentComm Accounts database"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command) "BJ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) "BK" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHEAST)"; icon_state = "swall"; dir = 6},/area/centcom/tram) @@ -1450,9 +1450,9 @@ "BT" = (/obj/effect/floor_decal/corner/white,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "BU" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "BV" = (/obj/effect/floor_decal/corner/white{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"BW" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"BW" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "BX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"BY" = (/obj/structure/closet/secure_closet/security,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"BY" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "BZ" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHWEST)"; icon_state = "swall"; dir = 9},/area/centcom/tram) "Ca" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram) "Cb" = (/obj/structure/bed/chair,/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = 28},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram) @@ -1463,7 +1463,7 @@ "Cg" = (/obj/effect/floor_decal/corner/white{dir = 6; icon_state = "corner_white"; tag = "icon-corner_white (NORTHWEST)"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Ch" = (/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Ci" = (/obj/effect/floor_decal/corner/white{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"Cj" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"Cj" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram) "Ck" = (/obj/structure/closet/secure_closet/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "Cl" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "Cm" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) @@ -1472,11 +1472,11 @@ "Cp" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram) "Cq" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram) "Cr" = (/obj/effect/floor_decal/corner/white{tag = "icon-corner_white (NORTH)"; icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"Cs" = (/obj/machinery/computer/card,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"Cs" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram) "Ct" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"Cu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) -"Cv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) -"Cw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) +"Cu" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) +"Cv" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) +"Cw" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "Cx" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "Cy" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "Cz" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 4},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1491,13 +1491,13 @@ "CI" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "CJ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "CK" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{icon_state = "plant-06"; pixel_y = 8; tag = "icon-plant-06"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"CL" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"CL" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram) "CM" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "CN" = (/obj/structure/flora/ausbushes/fernybush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CO" = (/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CP" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) -"CQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"CR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"CQ" = (/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"CR" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "CS" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CT" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "CU" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1512,17 +1512,17 @@ "Dd" = (/obj/structure/bed/chair{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = -30},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram) "De" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -30},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram) "Df" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) -"Dg" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"Dg" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram) "Dh" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access = list(101)},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) -"Di" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"Dm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"Di" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command) +"Dj" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"Dk" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"Dl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) +"Dm" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant) "Dn" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "Do" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "Dp" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) -"Dq" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"Dq" = (/obj/machinery/porta_turret/crescent,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/tram) "Dr" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPortEast"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) "Ds" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) "Dt" = (/obj/machinery/door/window/northright,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) @@ -1581,28 +1581,28 @@ "Eu" = (/obj/structure/window/reinforced,/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/main_hall) "Ev" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/main_hall) "Ew" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 1},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) -"Ex" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) +"Ex" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ey" = (/turf/unsimulated/wall,/area/centcom/medical) "Ez" = (/obj/machinery/door/airlock/glass_medical{name = "Arrivals Medbay"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "EA" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/medical) -"EB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) -"EC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"EB" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) +"EC" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "ED" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EE" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EF" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (NORTHWEST)"; icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EG" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) -"EH" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) -"EI" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) -"EJ" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) -"EK" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) +"EH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"EI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"EJ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"EK" = (/obj/item/weapon/bedsheet/rd,/obj/structure/bed/padded,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) "EL" = (/obj/machinery/camera/network/ert{c_tag = "Assault Armor North"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "EM" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "EN" = (/obj/mecha/combat/gygax/dark,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "EO" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/sunglasses/prescription,/obj/item/clothing/glasses/sunglasses/prescription,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) -"EP" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) -"EQ" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"EP" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"EQ" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "ER" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/obj/effect/floor_decal/corner/green{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"ES" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall) +"ES" = (/obj/effect/floor_decal/corner/green{dir = 5},/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "ET" = (/obj/structure/flora/ausbushes,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EU" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{tag = "icon-spline_fancy (SOUTHWEST)"; icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EV" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) @@ -1612,9 +1612,9 @@ "EZ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Fa" = (/obj/effect/floor_decal/corner/green{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Fb" = (/turf/unsimulated/wall,/area/centcom/bar) -"Fc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) -"Fd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) -"Fe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar) +"Fc" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Fd" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) +"Fe" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "Ff" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "Fg" = (/obj/effect/floor_decal/spline/plain,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) "Fh" = (/turf/unsimulated/wall,/area/centcom/bathroom) @@ -1633,7 +1633,7 @@ "Fu" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) "Fv" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) "Fw" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) -"Fx" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram) +"Fx" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "Fy" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHWEST)"; icon_state = "swall"; dir = 9},/area/shuttle/escape/centcom) "Fz" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "FA" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) @@ -1662,9 +1662,9 @@ "FX" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "FY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "FZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) -"Ga" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"Ga" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "Gb" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) -"Gc" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"Gc" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "Gd" = (/turf/simulated/shuttle/wall{tag = "icon-swall_straight"; icon_state = "swall_straight"},/area/shuttle/escape/centcom) "Ge" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "Gf" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) @@ -1758,7 +1758,7 @@ "HP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "shuttle_dock_north_mech"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "HQ" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "HR" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"HS" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) +"HS" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "HT" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "HU" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "HV" = (/obj/structure/curtain/open/shower,/obj/machinery/shower,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) @@ -1902,14 +1902,14 @@ "KD" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KE" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KF" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/glass,/obj/item/weapon/storage/box/monkeycubes,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KG" = (/obj/structure/table/rack,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "KH" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2) "KI" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) "KJ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KK" = (/obj/structure/bed/roller,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = -32},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KL" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KN" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KM" = (/obj/structure/table/rack,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"KN" = (/obj/structure/table/rack,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "KO" = (/obj/effect/floor_decal/corner/blue{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KP" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KQ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -1919,7 +1919,7 @@ "KU" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KV" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KW" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KX" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/green/full{dir = 4},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KX" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/space) "KY" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "KZ" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "La" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -1975,7 +1975,7 @@ "LY" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/centcom/evac) "LZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/centcom/evac) "Ma" = (/obj/structure/table/standard,/obj,/obj,/obj,/obj,/obj,/obj,/obj,/turf/unsimulated/beach/sand,/area/beach) -"Mb" = (/obj/structure/table/standard,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach) +"Mb" = (/obj/structure/table/standard,/obj/item/clothing/under/color/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach) "Mc" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s (EAST)"; icon_state = "swall_s"; dir = 4},/area/centcom/evac) "Md" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/centcom/evac) "Me" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/centcom/evac) @@ -2024,7 +2024,7 @@ "MV" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "MW" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "MX" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) -"MY" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) +"MY" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "MZ" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac) "Na" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/obj/item/toy/plushie/mouse{desc = "A plushie of a small fuzzy rodent."; name = "Woodrat"},/turf/unsimulated/beach/sand,/area/beach) "Nb" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach) @@ -2225,9 +2225,9 @@ "QO" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "QP" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start) "QQ" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"QR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"QS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"QT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"QR" = (/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) +"QS" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/space) +"QT" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "QU" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "QV" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "QW" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2237,7 +2237,7 @@ "Ra" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Rb" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Rc" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"Rd" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Rd" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/space) "Re" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "Rf" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Rg" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2301,7 +2301,7 @@ "Sm" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/obj/item/weapon/FixOVein,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) "Sn" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/bag/cash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "So" = (/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) -"Sp" = (/obj/structure/bed,/obj/item/weapon/bedsheet/rd,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) +"Sp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/retractor,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "Sq" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) "Sr" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) "Ss" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station) @@ -2332,7 +2332,7 @@ "SR" = (/obj/item/target,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "SS" = (/obj/item/target/syndicate,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "ST" = (/obj/item/target/alien,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) -"SU" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/wizard_station) +"SU" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "SV" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "SW" = (/obj/structure/kitchenspike,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) "SX" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/milosoup,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) @@ -2372,9 +2372,9 @@ "TF" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "TG" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "TH" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "\[center]\[b]LIST OF SPELLS AVAILABLE\[/b]\[/center]\[br]\[br]Magic Missile:\[br]This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.\[br]\[br]Fireball:\[br]This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.\[br]\[br]Disintegrate:\[br]This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.\[br]\[br]Disable Technology:\[br]This spell disables all weapons, cameras and most other technology in range.\[br]\[br]Smoke:\[br]This spell spawns a cloud of choking smoke at your location and does not require wizard garb.\[br]\[br]Blind:\[br]This spell temporarly blinds a single person and does not require wizard garb.\[br]Forcewall:\[br]This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.\[br]\[br]Blink:\[br]This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.\[br]\[br]Teleport:\[br]This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.\[br]\[br]Mutate:\[br]This spell causes you to turn into a hulk, and gain telekinesis for a short while.\[br]\[br]Ethereal Jaunt:\[br]This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.\[br]\[br]Knock:\[br]This spell opens nearby doors and does not require wizard garb.\[br]"; name = "List of Available Spells (READ)"},/obj/item/clothing/glasses/regular,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) -"TI" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/obj/effect/floor_decal/corner/red{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"TJ" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) -"TK" = (/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/security) +"TI" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"TJ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) +"TK" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start) "TL" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "TM" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "TN" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) @@ -2407,7 +2407,6 @@ "Uo" = (/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/structure/table/glass,/obj/structure/reagent_dispensers/virusfood{pixel_x = 0; pixel_y = 28},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Up" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Uq" = (/obj/machinery/disease2/isolator,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ur" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Us" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ut" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Uu" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) @@ -2525,98 +2524,98 @@ mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmmmmmmmmmmmmqmmmmmmmrmpmpmpmoaPaPaPaPmompmpmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPmjmjmjmjmjmjmjmjmjaPmjmjmjmjmjmjmjmj mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmqmmmmmqmmmmmrmsmtmumvmwmxmymzmAmomJmKmLnJnPmVnRnKmmmmmmmqmCmDmDmWmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPozmEmFozmGmGozmHmIozmpmpmpmpmpmpmpmpmpmompmpmpmMmNmpmOmMmPmQoYmompmpmpmpmBmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPofsnsnsnsnsnmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpmpmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPoznnnnELnonnpbmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpmpmpmpmppimpmpngmompmpmpmpnhmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmnPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpnhmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPoznnnnELnonnpbmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpnhmpmpmppimpmpngmompmpmpmpFdmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj njmamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlENnnnnnnmompmpmpmpmpmpmpmpmVmpmpnpnqnrnsmpmpnfmontnunvmMmpmpmpmMnwnxnymompmpmpmppbnznAnBmoaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnCmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnnEnnnnnnnnnnnEnFnnnnnnnGozmpmpmpmpmpmpmpmpmVmpmpmpmpmpmpmpmpnHnJnPmMmMmUmpmpmpmUmMmMnRmrmpmpmpmpmBmmmmmmnKmmmqmmmmmrnLnMnNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnOaPmTmjmjjwjwjwjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUmmnPnQnRmmmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVnWmpmpmpnWnXnYnYoympmpmpmpoznZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwEOogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnRnPnQnRnPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVnWmpmpmpnWnXnYnYoympmpmpmpoznZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwEOogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloinnnnojpbokolpbomonpboooppboqorosotouovmpmpowmMoxmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoAoAoAmYoznMnMozoBnMoCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPlwoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnImMmMmMmMmMmUTITJnRnPoImpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnImMmMmMmMmMmUFeFenRnPofmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloLnnnnnnoMmpmpmpmpmpmpmpmpmpmpmpmpmpmpoNmpmpoNoOmpmpmpoPoQoYoSoTmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPkToDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoUnnnnnnnnnnoUoVnnnnnnnnoMmpmpoWmpmpoWmpmpmpmpmpmpmpmpoXmpmpoXmpmpmpmpoPpjoYoYoTmpmpmpmpmpmpmpmpmYmYoAoAoAmYpbpcnMpbpdpbpemoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjwoFoFpfjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphpbmMmMmUnTnTmUmMmMpbmMmMmMmMmMmUTLTLnRnPmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoFoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpnJmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpOpPpQmpmpmppPpOpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqmioqnqojwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpbnnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlmmmmmMmMmUqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpmUqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwriioiorjjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwrIioiorJjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwrUioiorVjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwsmioioEPjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsHsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwsmioioEQjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnIsRsRsRsRsRsRsRsRsRsRsRsRozmUsSsSmUnJmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwsYsZsZsYjwjwjwjwmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwuktkioioioiotltltmjwjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptqtrtetstttetutvtetetetgsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwtAtBioioioioioioioioiotCjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDtFtGtetetgsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBrbtKrbtLqBqBtMtNtOtPtQtRtQqoqoqoqotSioioioioioiotTioioioiotUjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBqBugqBqBuhtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioiounjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuuuvuwuxtesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwuFuGioioioiouHuHuIjwjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBrbuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwsYuSuSsYjwjwjwjwmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtetetetetetetetZtDvdtDuWsGsGsGsGsGsGsGuXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPqBvgrbrbrbvhrbrbrbvirbrbrbvjqBaPaPaPaPaPaPaPaPaPmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtevkvlvmvkvntetDtDtDvouWsGsGsGsGsGsGsGuXvevpvqvqvqvqvqvrvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPpYqBqBqBqBqBqBrbrbrbqBqBqBqBqBqBqcaPaPaPaPaPmSaPmTmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsdsdsdsdsGsGuoupvsvsvsvsvsuatDtDtetetetetetetetgsGsGuXvevtvuvuvuvuvuvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBvvvwvxvyvzqBvArbvBqBvCvDvDvEvFqBaPaPaPaPaPmSmTmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHvIvIvHsdvJvJsdsdvJvJsdsdvJvJvJvJsdsdsdsdvJvJvJvJsdsdsdsdvJvJsdsdsdsdsdsdvKvKvLsdsGsGuJupvMvsvsvsvstetDtDtDtDtDtetDvNvOtesGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPvRvSvSvSvSvSqBrbrbrbqBvTrbrbrbvUvVaPaPaPaPaPnOaPmjmjmjjwjwvWvXjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwawbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvJvKvKvKvKvKvKvJvKvKvKvKvKvKwdvKvKvKvKvKvKvKvKwdvKvKvKwevKvKvKvKvKvKvKvKwfsGsGuTtetewgwhwiwjtetZwkwkwktDuatDtDtDtesGsGuXvevtvuvuwlwlwlwmvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPwnwowpvSvSvSwqrbrbrbwrrbrbrbwswtwuaPaPaPaPaPmSmTmTmjmjmjjwjwjwjwmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphpbmMmMmUnTnTmUmMmMpbmMmMmMmMmMmUTLTLnRnPmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoIoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpnJmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwqnqnqnjwjwaRaRaRaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpPpOpQmpmpmppOpPpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqnqnqnjwqmrjrVrJaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpbnnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlmmnPmMmMmUqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwqnqnqnjwjwaRaRaRaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpmUqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwqnqnqnjwrirjrjsnaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwqnqnqnjwrIrjrjsHaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwqnqnqnjwrUrjrjtmaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwqnqnqnjwsmrjrjtCaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwQsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwqnqnqnjwsmrjrjtUaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnIsRsRsRsRsRsRsRsRsRsRsRsRozmUsSsSmUnJmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwjwjwjwjwsYsZsZsYaRaRaRaRmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdsdsdsdsdsdsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwuktkvxuhuIunioioioiotlvWvXaRaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptqtrtetstttetutvtetetetgsGsGsGsdwIxdxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwuFuGioioioioioioioioioioiorjrjwWaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDtFtGtetetgsGsGsdzjxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBtKrbrbtLqBqBwXtNtOtPtQtRtQqoqoqoqotSioioioioioioqoiotTioioioiorjrjwYaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGCuxaxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBugxsqBqBxLtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioioioiorjrjHSaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuuuvuwuxtesGsGsdxaxaxaxaxasdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwtAtBFxKGKNKMioioioiouHKXMYaRaRmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdCvxXxaxXCwsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBQRuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwjwjwjwjwsYuSuSsYaRaRaRaRmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtetetetetetetetZtDvdtDuWsGsGsGsGsGsGsGuXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPqBvgrbrbrbvhrbrbrbvirbrbrbvjqBaPaPaPaPaPaPaPaPaPmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtevkvlvmvkvntetDtDtDvouWsGsGsGsGsGsGsGuXvevpvqvqvqvqvqvrvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPpYqBqBqBqBqBqBrbrbrbqBqBqBqBqBqBqcaPaPaPaPaPmSaPmTmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsdsdsdsdsGsGuoupvsvsvsvsvsuatDtDtetetetetetetetgsGsGuXvevtvuvuvuvuvuvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBvvvwCQvyvzqBvArbvBqBvCvDvDvEvFqBaPaPaPaPaPmSmTmjmjmjqnqnqnqnjwvcrjrjQSaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGvHvHvHvHvGvGvGvGvHvIvIvHsdvJvJsdsdvJvJsdsdvJvJvJvJsdsdsdsdvJvJvJvJsdsdsdsdvJvJsdsdsdsdsdsdvKvKvLsdsGsGuJupvMvsvsvsvstetDtDtDtDtDtetDvNvOtesGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPvRvSvSvSvSvSqBrbrbrbqBvTrbrbrbvUvVaPaPaPaPaPnOaPmjmjmjqnqnqnqnjwjwQTRdaRaRmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwawbwbwbwbwbwbwbwbwbwbwbwbwbwbwcvJvKvKvKvKvKvKvJvKvKvKvKvKvKwdvKvKvKvKvKvKvKvKwdvKvKvKwevKvKvKvKvKvKvKvKwfsGsGuTtetewgwhwiwjtetZwkwkwktDuatDtDtDtesGsGuXvevtvuvuwlwlwlwmvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPwnwowpvSvSvSwqrbrbrbwrrbrbrbwswtwuaPaPaPaPaPmSmTmTmjmjmjqnqnqnqnaRaRaRaRmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKwevKvKvKvKvKvKvKvKwfsGsGsGuTtevsvsvsvstetDwkwkwktDtewxteteuKsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwzvSvSvSvSvSwArbrbrbwBrbrbrbrbwCwDaPaPaPaPaPmSaPaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKsdsdsdsdsdsdsdsdsdsdsGsGsGsGuTtewEwFwGtetDtDtDtDtDteteteuKsGsGsGuXvevtvuvuvuvuwHvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwIvSvSvSwJqBuBwKuBqBwLwMwNrbwOqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPvJvJwQvJvJsdvJvJvJvJvJwRwRvJvJsdsdvJvJvJvJsdsdvKvKsdoRwSsdoRwSsdoRwSsdsGsGsGsGsGuTteteteteteteteteteteuKsGsGsGsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwUwVwWwXwYqBwZrbxaqBxbqBqBxcqBqBaPaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxdxexfxexfxexfxexfxexgxhxixhwPxjxjxjxkxlsdwRwRwRwRwRwRwRxmxnsdxjxjxjxjxjxjsdvKvKsdwTxosdwTxosdwTxosdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvuvuxpxpxpxqvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxrvSxsqBqBqBrbrbxtqBqBqBxurbxvqBaPaPaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbwPxzxfxexfxAxBxexfxexfxCxfxexfwPxDxjxjxjxjsdwRxExFxGxEwRwRwRwRsdxjxIxHxHxWxjvJvKvKsdxZyasdxZyasdxZyasdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxJxKxLqBaPqBxMxMxMqBaPqBqFxNxOqBaPaPaPaPaPaPaPmSaPmTaPmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxywbwbwbwPxPxexfxQxRxSxTxexfxexgxhxixhwPxUxjxjxjxjsdwRxExVxVxEwRwRwRwRsdxjykxXxYyTxjvJvKvKsdzbsdsdzbsdsdzbsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsduXveybycvuvuvuydyevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxMxMxMqBaPsfyfygyhshaPqBxMxMxMqBaPaPaPaPaPaPaPmSmTmTmTmTmTmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxzxfxeyiyjDqylxfxexfwPwPwPwPwPymymymxjxjsdwRwRwRwRwRwRwRynxEsdxjykxXxXyTxjsdvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveypyqyryryryqysvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPsfyfygyhshaPaPaPaPaPaPaPsfyfygyhshaPaPaPaPaPaPaPmSaPmTaPmTaPaPmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPytxexfxeyuyvxfxexfxexgxhxixhwPywyxyyxjxjsdwRxExVxGxEwRwRwRwRsdxjykxXxXyTxjyzvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveveyAyByByByCvevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPyDxfxexfxexfxexfxexfxCxfxexfwPyExjxjxjxjsdwRxExVyFxEwRwRwRwRsdxjykxXxXyTxjsdvKvKsdvJvJvJvJvJvJvJvJvJsdsdsdsdsdsdsdsdsdsdsdsdvKvKsdsdsdsdsdsdsdsduXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPyGyHxfxexfxexfxexfxexgxhxixhyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIsdxjykxXyJyTxjvJvKvKsdvKyKyLyMyNvKyOyPyQsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbwPwPwPwPxfxexfySTKwPwPwPwPwPwPyIyUyVyWyIyXyYyYyYyYyYyYyYyYyZzasdxjxZTOTOTPxjvJvKvKvJvKyKzczdyNvKzezfzgsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzhzixgxexfxexfzjwPzkzlzmzmzmyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxjxjxjxjxjxjsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexfzrxfxexfySzswPztxexexexeyIyVyVyVzuyYyYzvyYzozpyYzwzxzyyYsdsdvJvJvJvJsdsdvKvKzzvKvKvKvKzAzBzCvKvKsdvKvKvKvKvKvKzDsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPzEzFzGzEzFzFzHzIzJzFzKzLmTmTvHzMwbwbwPxfxezNxexfTQzOzPwPzQxexAxexeyIyVyVzRyIzSyYzTyYzozpyYzwzxzyyYyIvKvKvKvKvKvKvKvKvKvJvKvKvKvKzCzCzDvKvKzUvKzVvKvKzVvKzCsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzNxgxgxgxgxgxgwPAeAfxexeAgyIAhyVzRyIzSyYyYyYTezpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPAnAoApAoAqAoAoAoAoAoAoAoArAsxxAswbwbwbwPxfxexfxexfxexfxexfAeAeAtAeAeyIyIyIyIyIzozozozozozpyYzwRBzyyYyIvJvJAuvJvJsdwdvKvKsdAvyNvKvKvKvKvKsdsdsdsdvJvJvJvJvJsdsdAwAwsdvKvKsdaPaPaPaPAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvGaPaPAyAzAAABzZACADACACACADAEAFvGvGvGwbwbwbwPxexfxexfxexfxexfxexfxexfxeAGAHyIyYyYyYzpzpzpzpzpyYyYyYyYyYyYyIAIAJvKAKALsdAMANAOAwAwBkAwsdvJAPvJsdAQAQAQARASATAUAVAQAQAQAwwdvKvKsdaPaPaPAxAxAWAWAWAWAWAWAXAXAXAWAWAWAWAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPAyzFAZAyzFzFzHzIzJzFBaBbmTmTvHwbwbwbwPxfxexfySAGySAGySxfxexfxexfySBcyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIvKvKvKvKvKsdvKvKvKEaAQAQBlsdvKvKvKsdAQAQAQARBeBfBgAVAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPBhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexfxeBiBjBiBjBixexfxexfxexfxeyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIvKvKvKvKvKsdvKvKvKEaBmBzBysdvKvKvKsdAQAQAQBnBoBpBqBrAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPxfxexfyjxfxexfxSxfxexfxexfxexfyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIvKBtBuBvBwsdvJBxvJAwTzTAAwsdBABBBCsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHBFBFBFwPxexfxexfxexfxexfxexfwPwPBGBHwPyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIBIsdsdsdsdsdAQAQAQAwEaEaAwsdsdsdsdsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBSwbwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbBTBUBVwbvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHwbwbBUBVwPxfxexfwPBWAtwPwPxfxewPBXxfxeBYyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIsdsdAQAQAQAQAQAQAQAQAQAQAQAwAwsdsdAwAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbCgwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbChwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbCiBVzNxexfxewPxexfxewPxexfwPCjxexfCkyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIsdClAQAQAQAQAQAQAQAQAQAQAQClAwAwsdAwCmAQAQAQAQAQAQAQAQAQCmAwwdvKvKAxAxAxAxAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbCiwbwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCiBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbwbBUwbzrxfxexfwPxfxeCswPxfxewPCtxfxeBYyIyICuCvCvCwyICxCxyICuCvCvCwyIyIAQAQAQAQCyCzCACACACBCCAQAQAQAQAwAwAwAwAwAwAwAQAQAQAwAwAwAwAwsdvKvKCDAWAWAWAxBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwPCKxfxexgxeCLCMxgxexfwPCjxexfCkwPCNCOCPCOCPCQAQAQCRCOCSCOCOCTAwAQAQAQCUCVCWCWCWCWCWCXCYAQAQAQAwCOCPCOCNCPCQAQAQAQCRCPCOCOCZsdvKvKAxDaAWDbAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwPwPzrzNxgDgDhxgxgzNzrwPwPwPwPwPwPDiDjDjDjDjDkAQAQDlDjDjDjDjDmAwAQAQDnDoCWCWCWCWCWCWCWDpCCAQAQAwDiDjDjDjDjDkAQAQAQDlDjDjDjDmAwTRTRAxAWDrDsAYBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwwvKvKvKvKvKvKwwvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKsdsdsdsdsdsdsdsdsdsdsGsGsGsGuTtewEwFwGtetDtDtDtDtDteteteuKsGsGsGuXvevtvuvuvuvuwHvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBCRvSvSvSwJqBuBwKuBqBwLwMwNrbwOqBaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPwPvJvJDivJvJsdvJvJvJvJvJwRwRvJvJsdsdvJvJvJvJsdsdvKvKsdoRwSsdoRwSsdoRwSsdsGsGsGsGsGuTteteteteteteteteteteuKsGsGsGsGsGuXvevtvuvuvuvuvuwyvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBwUwVSpTISUqBwZrbDjqBxbqBqBxcqBqBaPaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxfxexexexexexexexexexgxhxixhwPxjxjxjxlxksdwRwRwRwRwRwRwRxmxnsdxBxBxBxBxBxBsdvKvKsdwTxosdwTxosdwTxosdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvuvuxpxpxpxqvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxrvSTJqBqBqBDkrbxtqBqBqBxurbxvqBaPaPaPaPaPaPaPmSmTmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbwPxzxexexexAxAxexexexexCxexexewPxDxjxjxjxjsdwRxExFxGxEwRwRwRwRsdxBxIxHxHxWxBvJvKvKsdxZyasdxZyasdxZyasdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGuXvevtvPvuvuvuvQvtvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxJxKTKqBaPqBxMxMxMqBaPqBqFxNxOqBaPaPaPaPaPaPaPmSaPmTaPmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxywbwbwbwPxzxexexQxPxSylxexexexgxhxixhwPxRxjxjxjxjsdwRxExVxVxEwRwRwRwRsdxBykxXxYyTxBvJvKvKsdzbsdsdzbsdsdzbsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsdsduXveybycvuvuvuydyevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBxMxMxMqBaPsfyfygyhshaPqBxMxMxMqBaPaPaPaPaPaPaPmSmTmTmTmTmTmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbwPxzxexexQyjxTylxexexewPwPwPwPwPxUxUxUxjxjsdwRwRwRwRwRwRwRynxEsdxBykxXxXyTxBsdvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveypyqyryryryqysvevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPsfyfygyhshaPaPaPaPaPaPaPsfyfygyhshaPaPaPaPaPaPaPmSaPmTaPmTaPaPmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPmTmTvHwbwbwbwPyixexexeyvyvxexexexexgxhxixhwPymyuytxjxjsdwRxExVxGxEwRwRwRwRsdxBykxXxXyTxBywvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKvKyosGsGyovfveveyAyByByByCvevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPyDxexexexexexexexexexCxexexewPyxxjxjxjxjsdwRxExVyFxEwRwRwRwRsdxBykxXxXyTxBsdvKvKsdvJvJvJvJvJvJvJvJvJsdsdsdsdsdsdsdsdsdsdsdsdvKvKsdsdsdsdsdsdsdsduXvevevevevevevevevevfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHvHvHvHvHwvaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPyyyHxexexexexexexexexgxhxixhyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIyIsdxBykxXyJyTxBvJvKvKsdvKyKyLyMyNvKyOyPyQsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbwPwPwPwPxexexeySyzwPwPwPwPwPwPyIyUyVyWyIyXyYyYyYyYyYyYyYyYyZzasdxBxZTOTOTPxBvJvKvKvJvKyKzczdyNvKzezfzgsdyRyRyRyRyRyRyRyRyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzizixgxexexexeDlwPyEzhyGyGyGyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxBxBxBxBxBxBsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexezrxexexeySzkwPzlxexexexeyIyVyVyVzuyYyYzvyYzozpyYzwzxzyyYsdsdvJvJvJvJsdsdvKvKzzvKvKvKvKzAzBzCvKvKsdvKvKvKvKvKvKzDsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPzEzFzGzEzFzFzHzIzJzFzKzLmTmTvHzMwbwbwPxexezrxexeTQzmzPwPzsxexAxexeyIyVyVzRyIzSyYzTyYzozpyYzwzxzyyYyIvKvKvKvKvKvKvKvKvKvJvKvKvKvKzCzCzDvKvKzUvKzVvKvKzVvKzCsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzrxgxgxgxgxgxgwPxgAfxexeAgyIAhyVzRyIzSyYyYyYTezpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPAnAoApAoAqAoAoAoAoAoAoAoArAsxxAswbwbwbwPxexexexexexexexexexgxgAtxgxgyIyIyIyIyIzozozozozozpyYzwRBzyyYyIvJvJAuvJvJsdwdvKvKsdAvyNvKvKvKvKvKsdsdsdsdvJvJvJvJvJsdsdAwAwsdvKvKsdaPaPaPaPAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvGaPaPAyAzAAABzZACADACACACADAEAFvGvGvGwbwbwbwPxexexexexexexexexexexexexeySAHyIyYyYyYzpzpzpzpzpyYyYyYyYyYyYyIAIAJvKAKALsdAMANAOAwAwBkAwsdvJAPvJsdAQAQAQARASATAUAVAQAQAQAwwdvKvKsdaPaPaPAxAxAWAWAWAWAWAWAXAXAXAWAWAWAWAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPAyzFAZAyzFzFzHzIzJzFBaBbmTmTvHwbwbwbwPxexexeySySySySySxexexexexeySztyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIvKvKvKvKvKsdvKvKvKEaAQAQBlsdvKvKvKsdAQAQAQARBeBfBgAVAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPBhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexexeBjBjBjBjBjxexexexexexexeyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIvKvKvKvKvKsdvKvKvKEaBmBzBysdvKvKvKsdAQAQAQBnBoBpBqBrAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPxexexeyjxexexexSxexexexexexexeyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIvKBtBuBvBwsdvJBxvJAwTzTAAwsdBABBBCsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHBFBFBFwPxexexexexexexexexexewPwPBGBGwPyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIBIsdsdsdsdsdAQAQAQAwEaEaAwsdsdsdsdsdAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBSwbwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbBTBUBVwbvHvHaPaPaPaPaPaPaPaPaPaPaPaPaPvHvHwbwbBUBVwPxexexewPAtAtwPwPxexewPBXxexeCkyIzxyYzwzxzxzyyYyYzwzxzxzyyYzxyIsdsdAQAQAQAQAQAQAQAQAQAQAQAwAwsdsdAwAQAQAQAQAQAQAQAQAQAQAQAwvKvKvKsdaPaPaPAxBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbCgwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbChwbwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbwbCiBVzrxexexewPxexexewPxexewPzNxexeCkyIBsyYzwRBRpzyyYyYzwRBRpzyyYBsyIsdClAQAQAQAQAQAQAQAQAQAQAQClAwAwsdAwCmAQAQAQAQAQAQAQAQAQCmAwwdvKvKAxAxAxAxAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbCiwbwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCiBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbwbBUwbzrxexexewPxexezOwPxexewPCtxexeCkyIyIDmDmDmDmyICxCxyIDmDmDmDmyIyIAQAQAQAQCyCzCACACACBCCAQAQAQAQAwAwAwAwAwAwAwAQAQAQAwAwAwAwAwsdvKvKCDAWAWAWAxBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwPCKxexexgxezQCMxgxexewPzNxexeCkwPCNCOCPCOCPEaAQAQEaCOCSCOCOCTAwAQAQAQCUCVCWCWCWCWCWCXCYAQAQAQAwCOCPCOCNCPEaAQAQAQEaCPCOCOCZsdvKvKAxDaAWDbAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwPwPzrzrxgAeDhxgxgzrzrwPwPwPwPwPwPEaEaEaEaEaEaAQAQEaEaEaEaEaEaAwAQAQDnDoCWCWCWCWCWCWCWDpCCAQAQAwEaEaEaEaEaEaAQAQAQEaEaEaEaEaAwTRTRAxAWDrDsAYBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGDtDuvGwbwbwbwbDvDwDxDvDwDyDzDADwDxDvDwDxwbwbvGDBDtDuvGwbwbDvDwDxDvDwDyDzDADwDxDvDwDxwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQDDCWCWCWDEDFDGCWCWCWDDAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAwAQAQAYDHDIAYAxAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGDKxxDLwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbDMDNDKxxDOwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWDEDRDRDRDGCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPDVmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdBhmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmd aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGxxxxDWwbwbwbwbwbwbwbwbwbwbDXwbwbwbwbwbwbwbwbDYDZvHxxDWwbwbwbwbwbwbwbwbDXwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEaAQAQAQAwAQAQAwAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEbDREcDREdCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAYAWAWAWAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEgxxEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEhDRDRDREiCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEjEkvGwbwbwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbvGErEjEsvGwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQEtCWCWCWEhEuEvCWCWCWEwAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAxExExAxAxAxAxAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyDiDjDjDjDjEBAQAQECDjDjDjDjDmAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwDiDjDjDjDjEBAQAQECDjDjDjDjDmAxAWAWEHEIEJEKAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyEREMEMFaFpFoFoFqEMFrEyFFGnGmGuEyCSCNCOCPCPESAQAQESCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPESAQAQESCOCPCOEXETAxAWAWAWAWAWAWAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMGvEyGwEMEZGxEyFbFcFdFdFeFbFfFfFbFcFdFdFeFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWAWAWAWAWAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMGIGyEMEMGIGyEMGvEyGKEMEMGLEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyEMEMGIGyEMEMGIGyEMGvEyHaEMEZGxEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyHEEMGIGyEMEMGIGyEMGvEyHFHZHGIaEyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxAWAWFxBJAWFxAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyHEEMEMEMEMEMEMEMEMGvEyEyGwIjFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyHEEMEMFrImImImImImIpEyIrFqEMIsEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyIxIuIzIyIuIDEyHEEMEMIKEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWFxBJAWFxAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyHEEMEMILFqGJEMEMGJFaIVFqEMEMIWEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxAWAWFxBJAWFxAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIZEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxAWAWAWAWAWAWAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIWEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyHEEMFrImImImJkFrImImJkEMEMEMIZEyHsHtHtFtFtHuHvHvHvTSHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxAWAWGVGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMGvEAEAEAHEGvHDFVHEFrJmJlJnEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxAWAWAXAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyJoEMFaJpJrJqFqEMJHEyJPJOEyEyEyEyHSHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyJoEMEMEMEMEMEMEMJQEyJPJRKeKeKfEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBDAWAWAWAWAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEjEkvGwbwbwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbvGErEjEsvGwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQEtCWCWCWEhEuEvCWCWCWEwAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAxAGAGAxAxAxAxAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyEaEaEaEaEaEaAQAQEaEaEaEaEaEaAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwEaEaEaEaEaEaAQAQEaEaEaEaEaEaAxBcBcBHBiBYBWAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyEREMEMFaFpFoFoFqEMFrEyFFGnGmGuEyCSCNCOCPCPEaAQAQEaCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPEaAQAQEaCOCPCOEXETAxBcBcBcBcBcBcAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMGvEyGwEMEZGxEyFbEBEBEBEBFbFfFfFbEBEBEBEBFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxBcBcBcBcBcBcAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMGIGyEMEMGIGyEMGvEyGKEMEMGLEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxBcBcCsCjBcCsAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyJkEMGIGyEMEMGIGyEMGvEyHaEMEZGxEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxBcBcCsCjBcCsAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyHEEMGIGyEMEMGIGyEMGvEyHFHZHGIaEyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxBcBcCsCjBcCsAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyHEEMEMEMEMEMEMEMEMGvEyEyGwIjFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxBcBcCsCjBcCsAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyHEEMEMFrImImImImImIpEyIrFqEMIsEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxBcBcCsCjBcCsAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyIxIuIzIyIuIDEyHEEMEMIKEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxBcBcCsCjBcCsAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyHEEMEMILFqGJEMEMGJFaIVFqEMEMIWEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxBcBcCsCjBcCsAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIZEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwECGbAQAQCWAQAQGbEPAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBcBcBcBcBcBcAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIWEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxBcBcBcBcBcBcAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyHEEMFrImImImJkFrImImJkEMEMEMIZEyHsHtHtFtFtHuHvHvHvTSHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxBcBcCLCLCLCLAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMGvEAEAEAHEGvHDFVHEFrJmJlJnEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxBcBcDgDgDgDgAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyJoEMFaJpJrJqFqFaJHEyJPJOEyEyEyEyEQHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxBcBcBcBcBcBcAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyJoEMEMEMEMEMEMEMJQEyJPJRKeKeKfEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxDqBcBcBcBcAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPGWGfFIGkIiGfFIGkIiGfFIGkGWaPaPvHwbwbwbEyJoEMEMEMHQHREMEMKgEyJPEMIkIlKqEyFbFbFbFbFbFbFbFbFbFbFbFbFbFbFbHeHeHeHxHxHxHxHxHxHxHxHxHeHeHeFhInGQInGQInGSGQGQHWInGQInGQInAxAYAYAYAYAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbIovHaPaPIiGfFIGkIiGfFTGkIiGfFIGkIiaPaPvHwbwbwbEyKCEMEMEMEMEMEMEMKDEyJPEMEMIqKqEyKFKEKEKEKJHeHxHxHxHxHxHxHxHxHxHxHxHeHeItHeHeHxHeHeItHeHeHxHxHeHeHeFhFhFhFhFhFhFhFhFhFhFhFhFhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPHbGfFIGkIiGfFIGkIiGfFIGkHbaPaPvHwbwbwbEyKKEMEMEMIvIwEMEMKLEyKPKOEMKQKUEyKVEMEMEMKWHeHxHeHeHeHeIAHeHeHeHxHxHxHxHxHxHeHxHeHxHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnIBFIGkHbGfFIGkHbGfFIICHnvGvGvGwbwbwbEyHEEMEMEMFrImJkEMKXEyEyEyIEEyEyEyKVEMEMEMKWHeHxHeIFIGIGIGIGIHHeHeHeHeHeHeHeHeIIHeHeHeHeHeHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnIBFIGkHbGfFIGkHbGfFIICHnvGvGvGwbwbwbEyHEEMEMEMFrImJkEMExEyEyEyIEEyEyEyKVEMEMEMKWHeHxHeIFIGIGIGIGIHHeHeHeHeHeHeHeHeIIHeHeHeHeHeHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIFIFIFIFIFIFIFIFIHAHzxxHzwbwbwbEyHEEMFrImKYEyEyIJEyEyLaKZEMJRLbEyKZEMEMEMOQHeHxHeIFIGIGIGIGIHHeIMINIOINIPIQIQIQIQIQIPIQIPIQIRHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIISFIFIFIFIFIISFIFIITHzxxHzwbwbwbEyEyIUEyHDEyEyOTEMPiEyJPEMEMEMEMIXEMEMIYEMRWHeHxHeJaIGIGIGIGJbHeIQJcJcJcJcJcIQIQIQJcJcJcJcJdJeHeHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGJfFRJgJhFkFmJiFkFmJhJgFRJjvGvGvGwbwbwbEyTVEMTXTWTYEyTZEMUaEyUcUbUeUdUfEyUhUgUgUgUiHeHxHeJaJsJtJtIGIGJuIQIQJvJwJvIQIQIQIQIQJvJwJvJxIQHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHaPaPHnJyJzHnJAJBJCJDJEHnJFJGHnaPaPvHvIvIvIEyTVEMUkUjUlEyUmEMUnEyEyEyEyEyEyEyEyEyEyEyHeHeHxHeHeHeHeHeHeHeHeIQJcJcJcJcJcIQIQIQJcJcJcJcJIIQHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyUpUoUqEAUrJpJpUsUsUtHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKcKdHnaPaPwvwbwbwbEyUuEMTXUvUwEyHEEMFaJpFqEMFaEAFqEMEMEMEMEMHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnisKnJCKoKpHnKlKlJjaPaPvGwbwbwbEyUxEMEMEMUyEyHEEMEMFrImEMEMKrEMEMEMEMEMEMHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyUzEMEMIYUAEyUBEMEMGvUCEMKGEAJkEMEZEMEMEMHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPKyKzKzKzKBaPaPaPaPaPaPvHwbwbwbEyTVEMEMEMUDEyUEEMEMUFKMEMKNEAUHUGUJUIUIUKHeHxHeKsKtKuKuKRKuKuKvKjKjKjKjKjKjKjKSKjKjKjKjKjKkKjKvKwKwKTKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyUMULUOUNUPEyURUQUTUSUUEMKYEyEyEyEyEyEyEyHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjLcLdLcKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyUpUoUqEAFcESJpUsUsUtHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKcKdHnaPaPwvwbwbwbEyUuEMTXUvUwEyHEEMFaJpFqEMFaEAFqEMEMEMEMGvHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnisKnJCKoKpHnKlKlJjaPaPvGwbwbwbEyUxEMEMEMUyEyHEEMEMFrImEMEMKrEMEMEMEMEMGvHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyUzEMEMIYUAEyUBEMEMGvUCEMEHEAJkEMEZEMEMGvHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPKyKzKzKzKBaPaPaPaPaPaPvHwbwbwbEyTVEMEMEMUDEyUEEMEMUFEIEMEJEAUHUGUJUIUIUKHeHxHeKsKtKuKuKRKuKuKvKjKjKjKjKjKjKjKSKjKjKjKjKjKkKjKvKwKwKTKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyUMULUOUNUPEyURUQUTUSUUImKYEyEyEyEyEyEyEyHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjLcLdLcKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyEyEyEyEyEyEyEyEyEyEyEyEyEyEyaPaPaPaPaPaPHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjLeLfLgKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbvHaPaPaPaPaPaPHeHxHeHxKtKuKuKuKuKuKvKjKjKjKjKjKjKjLhKjKjKjKjKjKkKjKvKwKwKwKwKwKtHxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbvHaPaPaPaPaPaPHeHxHeLiHeLjLjLjLjLjHeKiKjKjKjKjKjKjLhKjKjKjKjKjKkKiHeLjLjLjLjLjHeLiHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2636,7 +2635,7 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMtMuMgMvMwMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMAMBMCMCMBMDMEMEMEMFMGMHMEMEMIMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLVLVLNLNLNLNLNLNLNLNLNLNLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMKMLMLMKMfMMMNMEMEMEMEMEMEMOMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLSLNLNLNLNLNLNLNLNLNLNLNLNLNLQLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMhMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMEMEMEMQMRMSMEMEMTMBLZLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLULSLNLNLNLNLNLNLNLNLNLNLNLNLSLNLNLMaR -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMUMVMEMWMXMYMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNNaLNNbLNNbLNNcLNLNLNLNLNLMaR +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMfMgMhMhMhMhMhMhMhMhMhMhMhMfMLMPMPMLMfMUMVMEMWMXGaMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNLNLNLNLNNaLNNbLNNbLNNcLNLNLNLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNdMuMgMgMgMfMxMxMxMfMyMyMyMfMeMzMzMzMzMzMzMzMzMzMeMALZLZLZLZMBNeNeMBLZLZLZLZMDMLMPMPMLMfNfMEMEMEMEMEMEMEMEMEMEMZMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMLNLNLNNgLNLNLNLNLNLNLNLNLNLNLNLNLNLNLNLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPMcLZLZMBNhMBNiMBNjMBNiMBNkMBNiMBMeMBNiMBNlMBNiMBMeMBMDNmMLMLMLMLNnMLMLMLMLMLMKMfMLMPMPMLMfMUMVMEMENoNoNpNqNqNrMBLZNsLZLYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRLMNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtLMaR aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPNuMKMLMLMLMLMLMLNvMLMLMLNwMLMLMLMLMLMLMLNxMLMLNyNzNAMBMLMPMPMPMPMPMPMPMPMPMPMLMBMLMPMPMLMBNBNCNDNDNBNENCMBLZLZMDNFMPNGNHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNINJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNJNIaR @@ -2656,8 +2655,8 @@ aRmjmjmjOvOPOvOvOvmjmjOvOgOgOgOgPgOxOwOgPgOwOgOxOxOxOgPbPbPbPhOgmjmjaRmjmjmjaPmd aRmjmjmjOvOPOPOvmjmjmjOvPjPkPkOgOgOgOgOgOgOgOgOxOxOxOgPbPbPbPlOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjOvOPOPOPOPOvOvmjmjOvPmPnPmOMOxOxOxOxOxOxOxOxOxOxOgPoPpPqOgOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRaR aRmjPrOPOPOPOPOPOvmjmjOgPsPmPmOMOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR -aRmjPuPvPtOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjPAOPPwOPPtOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjPuPvPwOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjPAOPPwOPPwOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvOPPwOPPxOPOPmjmjaPaPmjOgOxOwOxOxOxOxOgPDPDPHPDPDOgOxOxOxOxOwOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvPIOPOPOPPKOPmjmjaPaPmjOgOxOxOxOxOxOxOMPDPDPLPDPDOMOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvOvOPOPOPOPOvmjmjmSaPaPOgOxOxOgPMPNPOOgPDPPPBPDKmOgPMPNPOOgOxOxOgaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2671,25 +2670,25 @@ aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQiQjPFaPaPPYPFPFQkPQQmQaPFPZaPaPPFQoQpPFaPaPaPaPmd aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQqQrPFaPaPPFPFQsQtQuQtQvPFPFaPaPPFQwQxPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQyPFPFPFPFPFQzQAQAQAQAQAQBPFPFPFPFPFQCPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQDQEQFQGQHPFQIQAQAQAQAQAQIPFQJQKQLQMQNPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQRQSQTQUQRQSQTPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQdQeQfQUQdQeQfPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjaPaPaPaPaPaPaPaPaPaPaPQXQOQPQPQPQPQUQAQAQAQAQAQAQAQUQPQPQYQPQOQXaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcRdQAQAQAQARePFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcGcQAQAQAQARePFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPaPaPRhRaQPQPPFRiPFPFPFRjTERlPFPFPFRiPFRmRnRoRhaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPaPPYPFTFRqRqPFRrRsRrQXRtQlRvQXRwRxRyPFRzRATGPFPZaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRDRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPmjmjaPaPaPREPFRFRFPFPFRrRrRrQZRtRkRvQZRyRyRGPFPFRFRFPFRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRTRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPmjmjaPaPaPaPRERURURHPFRVQnRrRhRXQARXRhRyRyRYPFRERURURHaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKRZSaSbSaScRSRSSdRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPmjmjaPaPaPREPFRFRFPFPFRrRrRrQZRtRkRvQZRyRyRGPFPFRFRFPFRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRSRTRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPmjmjaPaPaPaPRERURURHPFRVQnRrRhRXQARXRhRyRyRYPFRERURURHaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKRZSaSbSaScRSRSRSSdRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPPFRrRrRrPFPFQUPFPFSeRySfPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSgSgRKRKRKShRCSaSaSiRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPPFRrRrSjPFSkQASlPFRyRySmPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSnRCSoSoSpRCSqSrSsStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPPFRrRrSjPFSkQASlPFRyRySmPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSnRCSoSoEKRCSqSrSsStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPPFPFSuRrPFSvQASwPFSxSyPFPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSzSzRKRKRKSARCSoSoSoSBSoSoSoSCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPREPFPFPFPFSDSESFPFPFPFPFRHaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSGRCSHSISJRCSKSLSMStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPREPFRFRFRFRFRFPFRHaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKShRCRCRCRCRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPRERURURURURURHaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSOSPSQRKSRSSSTSRSUSVSWSWSVRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPRERURURURURURHaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSOSPSQRKSRSSSTSRTkSVSWSWSVRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSXSYSQRKSZSZSZSZTaSaSaSaSaRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTbTcSQRKSZSZSZSZSZSZSZSZSZRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTdTTSQRKSZSZSZSZSZSZTfTgThRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKSZSZSZSZSZSZSZSZSZRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTiTjTjTkTjTjTjTkTjTjTjTkTjTjTlRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTmTnTnSUToTpToSUTqTqTrSUTsTtRSRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTiTjTjTjTjTjTjTjTjTjTjTjTjTjTlRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTmTnTnTkToTpToTkTqTqTrTkTsTtRSRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTnTuTmTaToToToTaTvTwTqTaTxRSTyRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP mdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm index 850b38a5053..c24b4c0edba 100644 --- a/maps/polaris-3.dmm +++ b/maps/polaris-3.dmm @@ -20,7 +20,7 @@ "at" = (/obj/item/weapon/scalpel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "au" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/derelict/ship) "av" = (/turf/simulated/shuttle/plating,/area/derelict/ship) -"aw" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"aw" = (/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship) "ay" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship) "az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/derelict/ship) @@ -80,8 +80,8 @@ "bB" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bC" = (/obj/item/weapon/material/shard,/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bD" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bE" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bF" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bE" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/obj/item/stack/cable_coil/cut,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bF" = (/obj/structure/cable,/obj/structure/frame{anchored = 1; frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bG" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bH" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/head/helmet/space/syndicate,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bI" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) @@ -197,6 +197,7 @@ "dO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/tcomsat) "dP" = (/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/camera/network/telecom{c_tag = "Telecoms - Solar South"},/turf/simulated/floor/airless,/area/tcomsat) "dQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat) +"dR" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele) "dS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "dT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/tcomsat) "dU" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/tcomsat) @@ -219,6 +220,7 @@ "el" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1381; icon_state = "door_locked"; id_tag = "server_access_inner"; locked = 1; name = "Telecoms Server Access"; req_access = list(61)},/turf/simulated/floor/plating,/area/tcommsat/chamber) "em" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/tcomsat) "en" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/tcomsat) +"eo" = (/obj/machinery/exonet_node{anchored = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ep" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "eq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/space,/area/tcomsat) "er" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -251,7 +253,6 @@ "eV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "eW" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/tcomsat) "eX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/camera/network/telecom{c_tag = "Telecoms Storage"},/turf/simulated/floor,/area/tcomsat) -"eY" = (/obj/machinery/exonet_node,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eZ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/camera/network/telecom{c_tag = "Telecoms West Wing Central"; dir = 8},/turf/space,/area/tcomsat) "fa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat) "fb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/space,/area/tcomsat) @@ -387,7 +388,6 @@ "hJ" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) "hM" = (/turf/space,/area/syndicate_station/commssat) "hN" = (/turf/simulated/wall/r_wall,/area/AIsattele) -"hO" = (/obj/structure/computerframe,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele) "hP" = (/obj/machinery/teleport/station,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/airless,/area/AIsattele) "hQ" = (/turf/simulated/floor/airless,/area/AIsattele) "hR" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless,/area/AIsattele) @@ -453,7 +453,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaiacacaMafagagaBagagagaLaobraabsajacacacacacacacajbraaaaaTauasagagagagbcagagaLalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwagagagagbxauasagagagagagagagagaBagaLadajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaabsajacacacacacacacajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBbBbCbDagaLaoajacacadasagagagagauacaobraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbEbFaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbFbEaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacadacaoafagagagagagaBagagaLadalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObPbQagagagagagagbRbSaLaobrbsbTavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacalbUagagagagagauadaobraaaabsbTaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -537,7 +537,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacaaaaabqclclcocncocRepeqdGererereseteueverewexeyezeAdGefemcXcocncoclclblbvaaaacacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbbvaTbqclclcocncocReCeDdGerezezezeEezezezeEezezezerdGefemcXeGeFeHclclclbqaTbtccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdbqaabqclclcocncocReIeMdGereOeNePeEezerezeEezeReSerdGeTeUcXeLeWeXeQclclbqaabqcdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocReVeZdGerezezezeEezeYezeEezezezerdGfbfcfdfafffgfeclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocReVeZdGerezezezeEezeoezeEezezezerdGfbfcfdfafffgfeclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTcecgcfclclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclclchcgciaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacabqaabqclclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclclbqaabqcacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -599,7 +599,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahNhNhNhNhNaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaThNhNhOhPilhNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaThNhNdRhPilhNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaTaThNhNhRhQhShQhThNhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahUhVhQhWhXhQhQhYhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahMhMhMhMhMhMhMhMhMhMhMhMhMhMhMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhQhQhZhZhZhQhQhNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-4.dmm b/maps/polaris-4.dmm index 5b7187b4393..10afa2acc50 100644 --- a/maps/polaris-4.dmm +++ b/maps/polaris-4.dmm @@ -8,7 +8,7 @@ "ah" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "ai" = (/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/airless,/area/mine/explored) "aj" = (/obj/structure/girder,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) -"ak" = (/obj/structure/computerframe,/turf/simulated/floor/airless,/area/mine/explored) +"ak" = (/obj/structure/frame{frame_type = "computer"; icon_state = "computer_0"},/turf/simulated/floor/airless,/area/mine/explored) "al" = (/obj/machinery/teleport/station,/turf/simulated/floor/airless,/area/mine/explored) "am" = (/obj/machinery/teleport/hub,/turf/simulated/floor/airless,/area/mine/explored) "an" = (/turf/simulated/floor/tiled/white/airless,/area/mine/explored) @@ -29,7 +29,6 @@ "aC" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/storage) "aD" = (/obj/machinery/cell_charger,/obj/structure/table/steel,/obj/structure/cable,/obj/item/frame/apc,/obj/item/weapon/module/power_control,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "aE" = (/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/structure/table/steel,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) -"aF" = (/turf/simulated/floor/tiled/white/airless,/area/outpost/engineering/hallway) "aG" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/hallway) "aH" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "eoutpost_main_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eoutpost_main_sensor"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) "aI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) @@ -290,7 +289,6 @@ "fE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft) "fF" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/outpost/engineering/solarsoutside/aft) "fG" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft) -"fH" = (/turf/space,/area/mine/explored) "fI" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "fL" = (/obj/structure/grille,/turf/space,/area/space) "fM" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) @@ -487,11 +485,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababahahahahahahabababababababahahahahahananananananananacahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababaqarasasasataqahahahabababababahahahahajanananahahahananananahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababauaqavaqauaqawaqaqahahahababababahahahahahananananananananananahahahahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaGayazaAaBaCaDaEaqaqahahahahajajahahanahananaFananananananananahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaGayazaAaBaCaDaEaqaqahahahahajajahahanahanananananananananananahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaGaGaGaGaHaIaJaKaCaCaCaqaqaqaqahahananananahanahananananananananananacahahahahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaLaLaGaMaNaGaOaPaQaKaRaSaCaTaCaqaqaqahaUananahananananananahahanananananajahahahabababahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaLaLaLaVaWaXaGayaYaAaZbababbbcaCaCaqaqaqbdananananananananananahanananananajahahahabababahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababaLaLbeaLaGbfaGaGbgbhbiaCbjbkbabablaCaCaqahajajacahanahananaFananananananananacahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababaLaLbeaLaGbfaGaGbgbhbiaCbjbkbabablaCaCaqahajajacahanahanananananananananananacahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababaLbPbnbobpbqbrbsbtbubvbwbxbybabababzaCaqabababahahahahacananananananananahahahahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLaLbAbBbmbnbCbDaLbEbFbGaCbHbIbJbKbabLaCaCabababahahahahacajajahahahahahahahahahahababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLbMbNbOcKbQbQbQaLbRbSbTaCbUbabababababVaCabababahahahahahahahahahahahahahahabababababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -514,8 +512,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahaheRfvfvfvfvfveRahahadahfxfxfxfxfxahfwahfxfxfxfxfxahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahaqfvfvfvfvfvaqahahadfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahaqfvfvfvfvfvaqahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahfHfvfvfvfvfvaqahahadahahahahahahahfGahahahahfyahahfIahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahfHfHfvfvfvfvfvaqahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahaafvfvfvfvfvaqahahadahahahahahahahfGahahahahfyahahfIahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahaaaafvfvfvfvfvaqahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfracfvfvfvfvfvacfsahfyfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfyacaqaqaqacfyahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahadahahahahahahahfGahahahahfyahahfyahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-5.dmm b/maps/polaris-5.dmm index c8ca0f7c697..cd9003f6981 100644 --- a/maps/polaris-5.dmm +++ b/maps/polaris-5.dmm @@ -115,14 +115,14 @@ "ck" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/airlock_sensor{pixel_y = 25},/turf/simulated/floor/airless,/area/outpost/research/toxins_launch) "cl" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/airless,/area/outpost/research/toxins_launch) "cm" = (/obj/machinery/door/blast/regular{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/airless,/area/outpost/research/toxins_launch) -"cn" = (/turf/simulated/floor/airless,/area/mine/explored) +"cn" = (/turf/simulated/floor/airless,/area/outpost/research/toxins_launch) "co" = (/obj/machinery/door/blast/regular{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/airless,/area/outpost/research/test_area) "cp" = (/turf/simulated/floor/airless,/area/outpost/research/test_area) "cq" = (/obj/machinery/light{dir = 4},/obj/machinery/camera/network/research{c_tag = "Research Toxins Test Chamber East"; dir = 8; network = list("Research","Toxins Test Area")},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) "cr" = (/obj/machinery/door/blast/regular{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"cs" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"ct" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"cu" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) +"cs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"ct" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"cu" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) "cv" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing) "cw" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "cx" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing) @@ -144,8 +144,8 @@ "cN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/research/toxins_launch) "cO" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) "cP" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/airless,/area/outpost/research/test_area) -"cQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"cR" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) +"cQ" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"cR" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) "cS" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access = list(7)},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "cT" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2; frequency = 1379; id = "tox_airlock_pump"},/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_interior"; output = 63; pixel_x = -8; pixel_y = -18},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "cU" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access = list(7)},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) @@ -168,9 +168,9 @@ "dl" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "dm" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space) "dn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/outpost/research/test_area) -"do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) -"dq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) +"do" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"dp" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) +"dq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; icon_state = "map_vent_in"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/reinforced/airless,/area/outpost/research/mixing) "dr" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/reinforced,/area/outpost/research/mixing) "ds" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/mixing) "dt" = (/obj/machinery/button/remote/blast_door{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access = list(7)},/obj/machinery/button/ignition{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/outpost/research/mixing) @@ -602,7 +602,7 @@ "lD" = (/obj/structure/sign/greencross,/turf/simulated/wall/r_wall,/area/outpost/research/medical) "lE" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/outpost/research/dock) "lF" = (/obj/effect/floor_decal/corner/purple,/turf/simulated/floor/tiled/white,/area/outpost/research/dock) -"lG" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/outpost/research/dorms) +"lG" = (/obj/structure/reagent_dispensers/water_cooler{bottle = 1},/turf/simulated/floor/wood,/area/outpost/research/dorms) "lH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/outpost/research/dorms) "lI" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/outpost/research/dorms) "lJ" = (/obj/structure/table/glass,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/outpost/research/dorms) @@ -1046,6 +1046,7 @@ "uf" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "ug" = (/turf/simulated/wall,/area/outpost/mining_main/north_hall) "uh" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/outpost/mining_main/north_hall) +"ui" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTH)"; icon_state = "warning_dust"; dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "uj" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/shuttle/mining/outpost) "uk" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 6; icon_state = "intact-scrubbers"; tag = "icon-intact-scrubbers (NORTHWEST)"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "ul" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact-supply (NORTHWEST)"; icon_state = "intact-supply"; dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 9; icon_state = "intact-scrubbers"; tag = "icon-intact-scrubbers (NORTHWEST)"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) @@ -1224,7 +1225,7 @@ "xC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/outpost/mining_main/maintenance) "xD" = (/obj/machinery/light/small,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance) "xE" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance) -"xF" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTH)"; icon_state = "warning_dust"; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"xF" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTH)"; icon_state = "warning_dust"; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "xG" = (/obj/machinery/floodlight,/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/unexplored) "xH" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled,/area/outpost/engineering/mining/hallway) "xI" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/outpost/research/anomaly) @@ -1324,8 +1325,8 @@ "zy" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "zz" = (/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "zA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) -"zB" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) -"zC" = (/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"zB" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)"; icon_state = "warning_dust"; dir = 5},/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"zC" = (/obj/effect/floor_decal/industrial/warning/dust,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "zD" = (/obj/machinery/conveyor_switch{id = "mining_external"},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "zE" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/dark,/area/outpost/engineering/mining/telecomms) "zF" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/outpost/engineering/mining/telecomms) @@ -1382,7 +1383,7 @@ "AE" = (/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "AF" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery) "AG" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) -"AH" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (EAST)"; icon_state = "warning_dust"; dir = 4},/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"AH" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (SOUTHEAST)"; icon_state = "warning_dust"; dir = 6},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "AI" = (/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/wood,/area/outpost/mining_main/break_room) "AJ" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "AK" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) @@ -1403,7 +1404,7 @@ "AZ" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "Ba" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/refinery) "Bb" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) -"Bc" = (/obj/structure/table/steel,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"Bc" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)"; icon_state = "warning_dust"; dir = 5},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "Bd" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "Be" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/sensor{long_range = 1; name_tag = "Asteroid Main Grid"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "Bf" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) @@ -1418,7 +1419,7 @@ "Bo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) "Bp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery) "Bq" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery) -"Br" = (/obj/structure/table/steel,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"Br" = (/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "Bs" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "Bt" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 1"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "Bu" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) @@ -1432,8 +1433,8 @@ "BC" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) "BD" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) "BE" = (/obj/machinery/conveyor{dir = 5; icon_state = "conveyor0"; id = "mining_internal"},/obj/machinery/mineral/input,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) -"BF" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) -"BG" = (/obj/effect/floor_decal/industrial/warning/dust/corner,/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"BF" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"BG" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (EAST)"; icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "BH" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "BI" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 2"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) "BJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/outpost/engineering/mining/power) @@ -1542,7 +1543,7 @@ "DI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled,/area/outpost/mining_main/north_hall) "DJ" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva) "DK" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall) -"DL" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (NORTHEAST)"; icon_state = "warning_dust"; dir = 5},/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/mine/explored) +"DL" = (/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) "DM" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms) "DN" = (/obj/machinery/alarm{pixel_y = 24},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery) "DO" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/outpost/engineering/mining/hallway) @@ -1578,6 +1579,13 @@ "Es" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/outpost/research/dorms) "Et" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/outpost/research/dorms) "Eu" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/machinery/computer/crew,/turf/simulated/floor/tiled/white,/area/outpost/mining_main/medbay) +"Ev" = (/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"Ew" = (/obj/effect/floor_decal/industrial/warning/dust{tag = "icon-warning_dust (EAST)"; icon_state = "warning_dust"; dir = 4},/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"Ex" = (/obj/machinery/mining/drill,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"Ey" = (/obj/structure/table/steel,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"Ez" = (/obj/structure/table/steel,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"EA" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) +"EB" = (/obj/effect/floor_decal/industrial/warning/dust/corner,/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel/airless,/area/outpost/mining_main/refinery) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1656,9 +1664,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadbubvbwbxbybzbAadbBbCbDafbEbFbGbHbIbgakafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalatatatatbsatatatbtatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbJbKbLbMbNbObPadadbQbRbSafafbFbTbHbUbUbUbUbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbVbVbVbVatbsbWbtatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXbYbZcaadadadcbcccKadcecfcgchciafafafakbUcjckclcmcncnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacocpcpcpcpcpcpcpcpauatatatatcqauamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHdJcJdQbUcLcMcNbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbWbWbWbWatcObVcPatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrctcscucvcwcxcyczcAcBcCcDcEcFcGcHdJcJdQbUcLcMcNbUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalatbWbWbWbWatcObVcPatatatatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcQcQcRcScTcUcVcWcWcXcYcZaedadbdcdddedfdgdhdidjdkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldHdnalalatatatatcOatatatcPatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdodpdqcvdrdsdtczducBdvdwdxdydzcHdAdBdCbUdDdEdFdGdldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlDDcpcpdIatatatcOatatatatatcPatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdpdodqcvdrdsdtczducBdvdwdxdydzcHdAdBdCbUdDdEdFdGdldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlDDcpcpdIatatatcOatatatatatcPatatatalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXadadadadadadewdKdLaddMdNdOdPfjdRdRdRdSbUdTdUdVdWdXdYdlaaaaaadldZdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeaebcpalalatatatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadecedeeefegeheiadadbQejekdRdRelemenbUbUbUbUbUffeodXdXdXdXdXepacacacacacacacacacacacacacacacaceqeqereqalalatatatatatatatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadedeeeseseseeetadbBeuevdRfnexeyezeADXpEDZDYEaoVacacacacacacacacacacacacacacacacacacacacacacacacacacacalalatatateDatatatalalacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1729,16 +1737,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlumumvIvJvKvLvMEu aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlumwbwbwbwcwdwewfwgwhvbvbvbwiununvSvTwjwkwkwkwldldluedloVoVdldldldldlvVvXwmwnwmvXwowpwowqwrmbdlwsdldlxGacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlvtwtwuugwvwwwxwxwyvbwzwAwBwCwCwDwEwFwGwkwHwIwldldluedloVoVdldldldlvWvWvWwJwKwLwMwMwMwMwMwMwMwMwMwMwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlugwNwOwPwQwRwSwSwTwSwUvtwVwSwWwXwYwZxaxbxcxdxeuououldloVoVdldldlvWvWxfvWvXxgvXwMxhxixjxkxlxmxnxoxowMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlvtxpxqugxrxsxtxtxuvbxvxwxxvbxyxzxAxAxBxCxDxEwlxFktktDLoVoVdlDAvWvWxHEkxJxKxLxMwMxNxOxPxQxRxRxRxSxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxUxVxVxVxVxVxUxUxUBvxXDIxZyaybybybycycybycycybycqiqiqjoVoVdldlvWydEmElEoEnEpyhyiyjykylymynyoypyqxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlvtxpxqugxrxsxtxtxuvbxvxwxxvbxyxzxAxAxBxCxDxEwlxFuiuizBoVoVdlDAvWvWxHEkxJxKxLxMwMxNxOxPxQxRxRxRxSxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxUxVxVxVxVxVxUxUxUBvxXDIxZyaybybybycycybycycybyczCzCAHoVoVdldlvWydEmElEoEnEpyhyiyjykylymynyoypyqxTwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxUyrysxVytCgxVyvxUxUywyxyyybybyzyAyByCyDyEyFyGyHyIyIyIoVoVdlyJyJyJyJyKyfyLyMCUwMEqyPDeyRySyTyRyUyUwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxVyVDixVyXyYxVyZzazbzczdDMybDNzgycycyczhziybybycktktkvoVoVdlyJzjzkyJzlyfyfwnzmwMwMwMwMwMwMwMwMwMwMwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlxVxVznxVxVzoxVzpzqzrzsztzuzvzwzwzxzyzzzAziybzCzBzCzDmboVoVDAyJzEzFzGzHzIzJzKDOzMzNzOzPzQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlacxVzRzSzTzUzVzWzXzYzZAaAbAcAdAdAeAdAfAgAhybzCkZkZkZmboVoVdlyJDPAjyJzMzMAkAlAkzMAmAnAozQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacacxVApAqArAsDQAuAvAwAxAsAyAzAAABACADAEAFAGybzCkZwowpAHoVoVdlyJyJyJyJDRAJAKALAMANAOAPAQzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacxVxVARxVxVASxVATyZzbAUAVAWzvAXAXAYAZBazhBbybBckZkZkZmboVoVdlaczMBdBdAoAoAoBeBfBfBfBgBhzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxVBiBjxVBiBkxVyZBlzrzczUBmybBnzgBoBpBqAgziybBrkZwowpAHoVoVdlaczMzMBsAoAoBtBJBIAoAoBuzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxUytDSxVytDSxVBwxUxUBxzUByybybBzBABBBCBDBEycBFBGqiqiqjoVoVdlacaczMzMBHAoBKDFDEAoBLzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlxVyVDixVyXyYxVyZzazbzczdDMybDNzgycycyczhziybybycuiuiBcoVoVdlyJzjzkyJzlyfyfwnzmwMwMwMwMwMwMwMwMwMwMwMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlxVxVznxVxVzoxVzpzqzrzsztzuzvzwzwzxzyzzzAziybBrBFBrzDBGoVoVDAyJzEzFzGzHzIzJzKDOzMzNzOzPzQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldlacxVzRzSzTzUzVzWzXzYzZAaAbAcAdAdAeAdAfAgAhybBrDLDLDLBGoVoVdlyJDPAjyJzMzMAkAlAkzMAmAnAozQzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacacxVApAqArAsDQAuAvAwAxAsAyAzAAABACADAEAFAGybBrDLEvExEwoVoVdlyJyJyJyJDRAJAKALAMANAOAPAQzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlacxVxVARxVxVASxVATyZzbAUAVAWzvAXAXAYAZBazhBbybEyDLDLDLBGoVoVdlaczMBdBdAoAoAoBeBfBfBfBgBhzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxVBiBjxVBiBkxVyZBlzrzczUBmybBnzgBoBpBqAgziybEzDLEvExEwoVoVdlaczMzMBsAoAoBtBJBIAoAoBuzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxUytDSxVytDSxVBwxUxUBxzUByybybBzBABBBCBDBEycEAEBzCzCAHoVoVdlacaczMzMBHAoBKDFDEAoBLzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacxUxVxVxVxVxVxUxUxUBMzczdzeBNBOBOBOBPBPBPBPBPBOBPtWdloVoVoVdldlacaczMzMzMBQBRBQzMzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaadmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBSBSBTBTBTBUBVBUBSBSBWBXBYBOBOBZCaBZCbCbCcCdCeCckvoVoVoVdldldlacacacaczMzMzMzMzMacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacBSCfCfCfCfCfCfDTChCiCjCkClCmEeCoEgEfCpCqCrCsCtCuoVoVdldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/images/nanomap_z1.png b/nano/images/nanomap_z1.png index f67a0fad682..a77de6e1d83 100644 Binary files a/nano/images/nanomap_z1.png and b/nano/images/nanomap_z1.png differ diff --git a/nano/mapbase1024.png b/nano/mapbase1024.png deleted file mode 100644 index a927a71b6e7..00000000000 Binary files a/nano/mapbase1024.png and /dev/null differ diff --git a/nano/mapbase1200.png b/nano/mapbase1200.png new file mode 100644 index 00000000000..868adfe0d5a Binary files /dev/null and b/nano/mapbase1200.png differ diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 756f6edce0c..396cf8e34f4 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -775,14 +775,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
    Status:
    - {{if value.mode == 0}} - Idle - {{else value.mode == 1}} - Moving - {{else value.mode == 2}} - Unloading - {{else}} - Calculating path + {{if value.paused == 0}} + Nominal + {{else value.paused == 1}} + Paused {{/if}}
    diff --git a/polaris.dme b/polaris.dme index 4a0c3ad836c..82459576ff9 100644 --- a/polaris.dme +++ b/polaris.dme @@ -11,6 +11,7 @@ // END_PREFERENCES // BEGIN_INCLUDE #include "code\_macros.dm" +#include "code\_unit_tests.dm" #include "code\global.dm" #include "code\hub.dm" #include "code\names.dm" @@ -18,6 +19,7 @@ #include "code\world.dm" #include "code\__defines\_compile_options.dm" #include "code\__defines\admin.dm" +#include "code\__defines\appearance.dm" #include "code\__defines\atmos.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\damage_organs.dm" @@ -33,6 +35,7 @@ #include "code\__defines\species_languages.dm" #include "code\__defines\targeting.dm" #include "code\__defines\turfs.dm" +#include "code\__defines\unit_tests.dm" #include "code\_compatibility\509\_JSON.dm" #include "code\_compatibility\509\JSON Reader.dm" #include "code\_compatibility\509\JSON Writer.dm" @@ -160,6 +163,7 @@ #include "code\datums\mixed.dm" #include "code\datums\modules.dm" #include "code\datums\organs.dm" +#include "code\datums\progressbar.dm" #include "code\datums\recipe.dm" #include "code\datums\sun.dm" #include "code\datums\supplypacks.dm" @@ -259,6 +263,7 @@ #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\setupgame.dm" #include "code\game\gamemodes\calamity\calamity.dm" +#include "code\game\gamemodes\changeling\absorbed_dna.dm" #include "code\game\gamemodes\changeling\changeling.dm" #include "code\game\gamemodes\changeling\changeling_powers.dm" #include "code\game\gamemodes\changeling\generic_equip_procs.dm" @@ -334,8 +339,11 @@ #include "code\game\gamemodes\mixed\infestation.dm" #include "code\game\gamemodes\mixed\intrigue.dm" #include "code\game\gamemodes\mixed\lizard.dm" +#include "code\game\gamemodes\mixed\mercrenegade.dm" +#include "code\game\gamemodes\mixed\mercwiz.dm" #include "code\game\gamemodes\mixed\paranoia.dm" #include "code\game\gamemodes\mixed\traitorling.dm" +#include "code\game\gamemodes\mixed\traitorrenegade.dm" #include "code\game\gamemodes\mixed\uprising.dm" #include "code\game\gamemodes\mixed\visitors.dm" #include "code\game\gamemodes\ninja\ninja.dm" @@ -373,7 +381,6 @@ #include "code\game\machinery\CableLayer.dm" #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\cloning.dm" -#include "code\game\machinery\constructable_frame.dm" #include "code\game\machinery\cryo.dm" #include "code\game\machinery\cryopod.dm" #include "code\game\machinery\deployable.dm" @@ -384,6 +391,7 @@ #include "code\game\machinery\floodlight.dm" #include "code\game\machinery\floor_light.dm" #include "code\game\machinery\floorlayer.dm" +#include "code\game\machinery\frame.dm" #include "code\game\machinery\hologram.dm" #include "code\game\machinery\holosign.dm" #include "code\game\machinery\igniter.dm" @@ -434,7 +442,6 @@ #include "code\game\machinery\computer\arcade.dm" #include "code\game\machinery\computer\atmos_alert.dm" #include "code\game\machinery\computer\atmos_control.dm" -#include "code\game\machinery\computer\buildandrepair.dm" #include "code\game\machinery\computer\camera.dm" #include "code\game\machinery\computer\card.dm" #include "code\game\machinery\computer\cloning.dm" @@ -683,9 +690,9 @@ #include "code\game\objects\items\weapons\trays.dm" #include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\weldbackpack.dm" -#include "code\game\objects\items\weapons\wires.dm" #include "code\game\objects\items\weapons\circuitboards\broken.dm" #include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" +#include "code\game\objects\items\weapons\circuitboards\frame.dm" #include "code\game\objects\items\weapons\circuitboards\mecha.dm" #include "code\game\objects\items\weapons\circuitboards\other.dm" #include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm" @@ -922,6 +929,7 @@ #include "code\modules\admin\verbs\diagnostics.dm" #include "code\modules\admin\verbs\dice.dm" #include "code\modules\admin\verbs\getlogs.dm" +#include "code\modules\admin\verbs\grief_fixers.dm" #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\massmodvar.dm" #include "code\modules\admin\verbs\modifyvariables.dm" @@ -973,7 +981,7 @@ #include "code\modules\client\preferences_factions.dm" #include "code\modules\client\preferences_savefile.dm" #include "code\modules\client\preferences_spawnpoints.dm" -#include "code\modules\client\preferences_toggles.dm" +#include "code\modules\client\preferences_toggle_procs.dm" #include "code\modules\client\ui_style.dm" #include "code\modules\client\preference_setup\preference_setup.dm" #include "code\modules\client\preference_setup\antagonism\01_basic.dm" @@ -988,6 +996,8 @@ #include "code\modules\client\preference_setup\global\02_settings.dm" #include "code\modules\client\preference_setup\global\03_pai.dm" #include "code\modules\client\preference_setup\global\04_communicators.dm" +#include "code\modules\client\preference_setup\global\setting_datums.dm" +#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm" #include "code\modules\client\preference_setup\loadout\loadout.dm" #include "code\modules\client\preference_setup\loadout\loadout_accessories.dm" #include "code\modules\client\preference_setup\loadout\loadout_cosmetics.dm" @@ -1672,6 +1682,7 @@ #include "code\modules\reagents\reagent_containers\food\cans.dm" #include "code\modules\reagents\reagent_containers\food\condiment.dm" #include "code\modules\reagents\reagent_containers\food\drinks.dm" +#include "code\modules\reagents\reagent_containers\food\lunch.dm" #include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" @@ -1859,6 +1870,12 @@ #include "code\modules\virus2\items_devices.dm" #include "code\modules\xgm\xgm_gas_data.dm" #include "code\modules\xgm\xgm_gas_mixture.dm" +#include "code\unit_tests\loadout_tests.dm" +#include "code\unit_tests\map_tests.dm" +#include "code\unit_tests\mob_tests.dm" +#include "code\unit_tests\research_tests.dm" +#include "code\unit_tests\unit_test.dm" +#include "code\unit_tests\zas_tests.dm" #include "code\ZAS\_docs.dm" #include "code\ZAS\Airflow.dm" #include "code\ZAS\Atom.dm" diff --git a/tools/TagMatcher/tag-matcher.py b/tools/TagMatcher/tag-matcher.py index 91ad5efb043..78797a4d93d 100644 --- a/tools/TagMatcher/tag-matcher.py +++ b/tools/TagMatcher/tag-matcher.py @@ -18,6 +18,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ''' import argparse, re, sys +from collections import defaultdict from os import path, walk opt = argparse.ArgumentParser() @@ -37,66 +38,83 @@ tag_tuples = [ ('', re.compile('', re.IGNORECASE), re.compile(' ('', re.compile('', re.IGNORECASE), re.compile('', re.IGNORECASE))] # The keys of this dictionary will be the file path of each parsed *.dm file -# The values of this dictionary will be in the format provided by populate_match_list(). -matches = { } +# The values of this dictionary is a another dictionary with the key/value pair: tag/list of unmatched lines +mismatches_by_file = { } -# Support def for setting up a dictionary, populating it with all defined tuple names as key with each being assigned the value 0. -# One such dictionary is created for each parsed file. -def populate_match_list(): - match_list = { } +# Loops over all defined tag tuples and returns a dictionary with the key/value pair: tag/mismatch_count (positive means excess of opening tag, negative means excess of closing tags) +def get_tag_matches(line): + mismatch_count_by_tag = { } for tag_tuple in tag_tuples: - match_list[tag_tuple[0]] = 0 - return match_list + mismatch_count = 0 + mismatch_count += len(tag_tuple[1].findall(line)) + mismatch_count -= len(tag_tuple[2].findall(line)) + if mismatch_count != 0: + mismatch_count_by_tag[tag_tuple[0]] = mismatch_count + return mismatch_count_by_tag -# This def shall be provided by a dictionary in the format given by populate_match_list() and a line of text. -# It loops over all defined tag tuples, adding the number of open tags found and subtracting the number of close tag found to the corresponding tuple name in the match list. -# This def is currently run with the same match_list for a given file and for all lines of that file. -def get_tag_matches(match_list, line): - for tag_tuple in tag_tuples: - match_list[tag_tuple[0]] += len(tag_tuple[1].findall(line)) - match_list[tag_tuple[0]] -= len(tag_tuple[2].findall(line)) - return - -# Support def that simply checks if a given dictionary in the format given by populate_match_list() contains any value that is non-zero. -# That is, a tag which had a non-equal amount of open/closing tags. +# Support def that simply checks if a given dictionary in the format tag/list of unmatched lines has mismatch entries. def has_mismatch(match_list): - for tag, match_number in match_list.iteritems(): - if(match_number != 0): + for tag, list_of_mismatched_lines in match_list.iteritems(): + if(len(list_of_mismatched_lines) > 0): return 1 return 0 + +def arrange_mismatches(mismatches_by_tag, mismatch_line, mismatch_counts): + for tag, mismatch_count in mismatch_counts.iteritems(): + stack_of_existing_mismatches = mismatches_by_tag[tag] + for i in range(0, abs(mismatch_count)): + if len(stack_of_existing_mismatches) == 0: + if(mismatch_count > 0): + stack_of_existing_mismatches.append(mismatch_line) + else: + stack_of_existing_mismatches.append(-mismatch_line) + else: + if stack_of_existing_mismatches[0] > 0: + if mismatch_count > 0: + stack_of_existing_mismatches.append(mismatch_line) + else: + stack_of_existing_mismatches.pop() + else: + if mismatch_count < 0: + stack_of_existing_mismatches.append(-mismatch_line) + else: + stack_of_existing_mismatches.pop() + # This section parses all *.dm files in the given directory, recursively. for root, subdirs, files in walk(args.dir): for filename in files: if filename.endswith('.dm'): file_path = path.join(root, filename) - with open(file_path, 'r') as f: - # For each file, generate the match dictionary. - matches[file_path] = populate_match_list() - for x in f: + with open(file_path, 'r') as file: + mismatches_by_file[file_path] = defaultdict(list) + for line_number, line in enumerate(file, 1): # Then for each line in the file, conduct the tuple open/close matching. - get_tag_matches(matches[file_path], x) + mismatches_by_tag = get_tag_matches(line) + arrange_mismatches(mismatches_by_file[file_path], line_number, mismatches_by_tag) # Pretty printing section. # Loops over all matches and checks if there is a mismatch of tags. # If so, then and only then is the corresponding file path printed along with the number of unmatched open/close tags. -total_mismatch = 0 -for file, match_list in matches.iteritems(): - if(has_mismatch(match_list)): +total_mismatches = 0 +for file, mismatches_by_tag in mismatches_by_file.iteritems(): + if has_mismatch(mismatches_by_tag): print(file) - for tag, match_number in match_list.iteritems(): + for tag, mismatch_list in mismatches_by_tag.iteritems(): # A positive number means an excess of opening tag, a negative number means an excess of closing tags. - if(match_number > 0): - total_mismatch += match_number - print('\t{0} - Excess of {1} opening tag(s)'.format(tag, match_number)) - elif (match_number < 0): - total_mismatch -= match_number - print('\t{0} - Excess of {1} closing tag(s)'.format(tag, -match_number)) + total_mismatches += len(mismatch_list) + if len(mismatch_list) > 0: + if mismatch_list[0] > 0: + print('\t{0} - Excess of {1} opening tag(s)'.format(tag, len(mismatch_list))) + elif mismatch_list[0] < 0: + print('\t{0} - Excess of {1} closing tag(s)'.format(tag, len(mismatch_list))) + for mismatch_line in sorted(set(mismatch_list)): + print('\t\tLine {0}'.format(abs(mismatch_line))) # Simply prints the total number of mismatches found and if so returns 1 to, for example, fail Travis builds. -if(total_mismatch == 0): +if(total_mismatches == 0): print('No mismatches found.') else: print('') - print('Total number of mismatches: {0}'.format(total_mismatch)) + print('Total number of mismatches: {0}'.format(total_mismatches)) sys.exit(1) diff --git a/tools/indentation.awk b/tools/indentation.awk new file mode 100644 index 00000000000..e4742bf2f99 --- /dev/null +++ b/tools/indentation.awk @@ -0,0 +1,32 @@ +#! /usr/bin/awk -f + +# Finds incorrect indentation of absolute path definitions in DM code +# For example, the following fails on the indicated line: + +#/datum/path/foo +# x = "foo" +# /datum/path/bar // FAIL +# x = "bar" + +{ + if ( comma != 1 ) { # No comma/'list('/etc at the end of the previous line + if ( $0 ~ /^[\t ]+\/[^/*]/ ) { # Current line's first non-whitespace character is a slash, followed by something that is not another slash or an asterisk + print FILENAME, ":", $0 + fail = 1 + } + } + + if ($0 ~ /,[\t ]*\\?\r?$/ || # comma at EOL + $0 ~ /list[\t ]*\([\t ]*\\?\r?$/ || # start of a list() + $0 ~ /pick[\t ]*\([\t ]*\\?\r?$/ ) { # start of a pick() + comma = 1 + } else { + comma = 0 + } +} + +END { + if ( fail ) { + exit 1 + } +}