diff --git a/code/ATMOSPHERICS/mainspipe.dm b/code/ATMOSPHERICS/mainspipe.dm index 520d7a55b2e..a2976974bfc 100644 --- a/code/ATMOSPHERICS/mainspipe.dm +++ b/code/ATMOSPHERICS/mainspipe.dm @@ -36,8 +36,6 @@ obj/machinery/atmospherics/mains_pipe icon = 'icons/obj/atmospherics/mainspipe.dmi' layer = 2.4 //under wires with their 2.5 - force = 20 - var/volume = 0 var/alert_pressure = 80*ONE_ATMOSPHERE diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 6f70f822ad8..c445988c53f 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -3,7 +3,6 @@ var/datum/gas_mixture/air_temporary // used when reconstructing a pipeline that broke var/datum/pipeline/parent var/volume = 0 - force = 20 layer = 2.4 //under wires with their 2.44 use_power = 0 diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index 8831f8aa401..01a84fdf5d9 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -43,7 +43,7 @@ mob/check_airflow_movable(n) return 0 return 1 -mob/dead/observer/check_airflow_movable() +mob/observer/check_airflow_movable() return 0 mob/living/silicon/check_airflow_movable() @@ -247,6 +247,6 @@ zone/proc/movables() . = list() for(var/turf/T in contents) for(var/atom/movable/A in T) - if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/eye)) + if(!A.simulated || A.anchored || istype(A, /obj/effect) || istype(A, /mob/observer)) continue . += A diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index 7e91a26b3f2..2bfbed9681c 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -348,7 +348,7 @@ var/global/vs_control/vsc = new else if(istext(vars["[V]_RANDOM"])) var/txt = vars["[V]_RANDOM"] if(findtextEx(txt,"PROB")) - txt = text2list(txt,"/") + txt = splittext(txt,"/") txt[1] = replacetext(txt[1],"PROB","") var/p = text2num(txt[1]) var/r = txt[2] @@ -358,7 +358,7 @@ var/global/vs_control/vsc = new newvalue = vars[V] else if(findtextEx(txt,"PICK")) txt = replacetext(txt,"PICK","") - txt = text2list(txt,",") + txt = splittext(txt,",") newvalue = pick(txt) else newvalue = roll(txt) diff --git a/code/__defines/gamemode.dm b/code/__defines/gamemode.dm index 827737cf92a..815c55b2ecc 100644 --- a/code/__defines/gamemode.dm +++ b/code/__defines/gamemode.dm @@ -63,7 +63,6 @@ var/list/be_special_flags = list( // Mode/antag template macros. #define MODE_BORER "borer" -#define MODE_XENOMORPH "xeno" #define MODE_LOYALIST "loyalist" #define MODE_MUTINEER "mutineer" #define MODE_COMMANDO "commando" @@ -82,6 +81,7 @@ var/list/be_special_flags = list( #define MODE_LOYALIST "loyalist" #define MODE_MALFUNCTION "malf" #define MODE_TRAITOR "traitor" +#define MODE_AUTOTRAITOR "autotraitor" #define DEFAULT_TELECRYSTAL_AMOUNT 12 diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 9dc9ecd0fd7..2dec4406a46 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -1,5 +1,5 @@ // Species flags. -#define NO_MINOR_CUT 0x1 // Can step on broken glass with no ill-effects. Either thick skin (diona/vox), cut resistant (slimes) or incorporeal (shadows) +#define NO_MINOR_CUT 0x1 // Can step on broken glass with no ill-effects. Either thick skin (diona), cut resistant (slimes) or incorporeal (shadows) #define IS_PLANT 0x2 // Is a treeperson. #define NO_SCAN 0x4 // Cannot be scanned in a DNA machine/genome-stolen. #define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator. diff --git a/code/modules/nano/JSON Reader.dm b/code/_compatibility/509/JSON Reader.dm similarity index 98% rename from code/modules/nano/JSON Reader.dm rename to code/_compatibility/509/JSON Reader.dm index 12edf1dd5c0..544d197ccd3 100644 --- a/code/modules/nano/JSON Reader.dm +++ b/code/_compatibility/509/JSON Reader.dm @@ -1,3 +1,5 @@ +#if DM_VERSION < 510 + json_token var value @@ -202,4 +204,6 @@ json_reader die(json_token/T) if(!T) T = get_token() - CRASH("Unexpected token: [T.value].") \ No newline at end of file + CRASH("Unexpected token: [T.value].") + +#endif \ No newline at end of file diff --git a/code/modules/nano/JSON Writer.dm b/code/_compatibility/509/JSON Writer.dm similarity index 97% rename from code/modules/nano/JSON Writer.dm rename to code/_compatibility/509/JSON Writer.dm index 97acc0b2ccb..de3bb54a3e2 100644 --- a/code/modules/nano/JSON Writer.dm +++ b/code/_compatibility/509/JSON Writer.dm @@ -1,3 +1,5 @@ +#if DM_VERSION < 510 + json_writer var use_cache = 0 @@ -48,7 +50,7 @@ json_writer var/lrep = length(json_escape[targ]) txt = copytext(txt, 1, i) + json_escape[targ] + copytext(txt, i + length(targ)) start = i + lrep - + return {""[txt]""} is_associative(list/L) @@ -56,3 +58,5 @@ json_writer // if the key is a list that means it's actually an array of lists (stupid Byond...) if(!isnum(key) && !isnull(L[key]) && !istype(key, /list)) return TRUE + +#endif \ No newline at end of file diff --git a/code/modules/nano/_JSON.dm b/code/_compatibility/509/_JSON.dm similarity index 54% rename from code/modules/nano/_JSON.dm rename to code/_compatibility/509/_JSON.dm index 95791899817..46f488ac568 100644 --- a/code/modules/nano/_JSON.dm +++ b/code/_compatibility/509/_JSON.dm @@ -1,17 +1,14 @@ +#if DM_VERSION < 510 /* n_Json v11.3.21 */ proc - json2list(json) + json_decode(json) var/static/json_reader/_jsonr = new() return _jsonr.ReadObject(_jsonr.ScanJson(json)) - list2json(list/L) + json_encode(list/L) var/static/json_writer/_jsonw = new() return _jsonw.write(L) - - list2json_usecache(list/L) - var/static/json_writer/_jsonw = new() - _jsonw.use_cache = 1 - return _jsonw.write(L) +#endif \ No newline at end of file diff --git a/code/_compatibility/509/text.dm b/code/_compatibility/509/text.dm new file mode 100644 index 00000000000..c22790ccb87 --- /dev/null +++ b/code/_compatibility/509/text.dm @@ -0,0 +1,6 @@ +#if DM_VERSION < 510 + +/proc/replacetext(text, find, replacement) + return jointext(splittext(text, find), replacement) + +#endif \ No newline at end of file diff --git a/code/_compatibility/509/type2type.dm b/code/_compatibility/509/type2type.dm new file mode 100644 index 00000000000..62d7a5e5c79 --- /dev/null +++ b/code/_compatibility/509/type2type.dm @@ -0,0 +1,102 @@ +#if DM_VERSION < 510 +// Concatenates a list of strings into a single string. A seperator may optionally be provided. +/proc/jointext(list/ls, sep) + if (ls.len <= 1) // Early-out code for empty or singleton lists. + return ls.len ? ls[1] : "" + + var/l = ls.len // Made local for sanic speed. + var/i = 0 // Incremented every time a list index is accessed. + + if (sep <> null) + // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... + #define S1 sep, ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. + if (l-1 & 0x01) // 'i' will always be 1 here. + . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][][][][][]", ., S4) // And so on.... + if (l-i & 0x08) + . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + else + // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... + #define S1 ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + if (l-1 & 0x01) // 'i' will always be 1 here. + . += S1 // Append 1 element if the remaining elements are not a multiple of 2. + if (l-i & 0x02) + . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if (l-i & 0x04) + . = text("[][][][][]", ., S4) // And so on... + if (l-i & 0x08) + . = text("[][][][][][][][][]", ., S4, S4) + if (l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][]", ., S16) + if (l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if (l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while (l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + +// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) +/proc/splittext(text, delimiter="\n") + var/delim_len = length(delimiter) + if (delim_len < 1) + return list(text) + + . = list() + var/last_found = 1 + var/found + + do + found = findtext(text, delimiter, last_found, 0) + . += copytext(text, last_found, found) + last_found = found + delim_len + while (found) +#endif \ No newline at end of file diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 79b3aa65407..3964ddeebaa 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/dead/observer) && (M.client) && (M.client.prefs.toggles & CHAT_GHOSTRADIO))) + if(speaker_coverage[ear] || (istype(M, /mob/observer/dead) && (M.client) && (M.client.prefs.toggles & CHAT_GHOSTRADIO))) . |= M // Since we're already looping through mobs, why bother using |= ? This only slows things down. return . @@ -323,7 +323,7 @@ proc/isInSight(var/atom/A, var/atom/B) var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn var/i = 0 while(candidates.len <= 0 && i < 5) - for(var/mob/dead/observer/G in player_list) + for(var/mob/observer/dead/G in player_list) if(((G.client.inactivity/10)/60) <= buffer + i) // the most active players are more likely to become an alien if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) candidates += G.key @@ -337,7 +337,7 @@ proc/isInSight(var/atom/A, var/atom/B) var/list/candidates = list() //List of candidate KEYS to assume control of the new larva ~Carn var/i = 0 while(candidates.len <= 0 && i < 5) - for(var/mob/dead/observer/G in player_list) + for(var/mob/observer/dead/G in player_list) if(G.client.prefs.be_special & BE_ALIEN) if(((G.client.inactivity/10)/60) <= ALIEN_SELECT_AFK_BUFFER + i) // the most active players are more likely to become an alien if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index abb5bd4de6b..57527aab429 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -46,13 +46,18 @@ var/global/list/facial_hair_styles_male_list = list() var/global/list/facial_hair_styles_female_list = list() var/global/list/skin_styles_female_list = list() //unused //Underwear -var/global/list/underwear_m = list( - "White" = "m1", "Grey" = "m2", "Green" = "m3", "Blue" = "m4", "Black" = "m5", "Mankini" = "m6", - "Boxers Heart" = "m7", "Boxers Black" = "m8", "Boxers Grey" = "m9", "Boxers Stripe" = "m10", "None") //Curse whoever made male/female underwear diffrent colours -var/global/list/underwear_f = list( - "Red" = "f1", "White" = "f2", "Yellow" = "f3", "Blue" = "f4", "Black" = "f5", "Thong" = "f6", - "Black Sports" = "f7","White Sports" = "f8", "Black Sports Alt" = "f9", "White Sports Alt" = "f10", "Baby Blue" = "f11", "Green" = "f12", "Pink" = "f13", - "Violet" = "f14", "Thong Alt" = "f15", "Thong Alt Violet" = "f16", "None") +var/global/list/underwear_top_t = list( + "Bra, Red" = "t1", "Bra, White" = "t2", "Bra, Yellow" = "t3", "Bra, Blue" = "t4", "Bra, Black" = "t5", "Lacy Bra" = "t6", "Sports Bra, Black" = "t7", "Sports Bra, White" = "t8", + "Sports Bra Alt, Black" = "t9", "Sporta Bra Alt, White" = "t10", "Bra, Baby-Blue" = "t11", "Bra, Green" = "t12", "Bra, Pink" = "t13", "Bra, Violet" = "t14", + "Lacy Bra Alt" = "t15", "Lacy Bra Alt, Violet" = "t16", "Halterneck Bra, Black" = "t17", "Halterneck Bra, Blue" = "t18", "Halterneck Bra, Green" = "t19", "Halterneck Bra, Purple" = "t20", + "Halterneck Bra, Red" = "t21", "Halterneck Bra, Teal" = "t22", "Halterneck Bra, Violet" = "t23", "Halterneck Bra, White" = "t24", "None") +var/global/list/underwear_bottom_t = list( + "Briefs, White" = "b1", "Briefs, Grey" = "b2", "Briefs, Green" = "b3", "Briefs, Blue" = "b4", "Briefs, Black" = "b5", "Boxers, Loveheart" = "b7", "Boxers, Black" = "b8", + "Boxers, Grey" = "b9", "Boxers, Green & Blue Striped" = "b10", "Panties, Red" = "b11", "Panties, White" = "b12", "Panties, Yellow" = "b13", "Panties, Blue" = "b14", + "Panties, Light-Black" = "b15", "Thong" = "b16", "Panties, Black" = "b17", "Panties Alt, White" = "b18", "Compression Shorts, Black" = "b19", "Compression Shorts, White" = "b20", + "Compression Shorts, Baby-Blue" = "b21", "Panties, Green" = "b22", "Compression Shorts, Pink" = "b23", "Thong, Violet" = "b24", "Thong Alt" = "b25", "Thong Alt, Violet" = "b26", + "Alt Thong, Black" = "b27", "Alt Thong, Blue" = "b28", "Alt Thong, Green" = "b29", "Alt Thong, Purple" = "b30", "Alt Thong, Red" = "b31", "Alt Thong, Teal" = "b32", + "Alt Thong, Violet" = "b33", "Alt Thong, White" = "b34", "None") //undershirt var/global/list/undershirt_t = list( "White tank top" = "u1", "Black tank top" = "u2", "Black shirt" = "u3", diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm index f8a4b12b96d..a6d5ea89afe 100644 --- a/code/_helpers/lists.dm +++ b/code/_helpers/lists.dm @@ -48,9 +48,7 @@ proc/listgetindex(var/list/list,index) return proc/islist(list/list) - if(istype(list)) - return 1 - return 0 + return(istype(list)) //Return either pick(list) or null if list is not of type /list or is empty proc/safepick(list/list) diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm index 5bb4c93bbcf..9213765bbc2 100644 --- a/code/_helpers/mobs.dm +++ b/code/_helpers/mobs.dm @@ -1,10 +1,6 @@ /atom/movable/proc/get_mob() return -/obj/machinery/bot/mulebot/get_mob() - if(load && istype(load,/mob/living)) - return load - /obj/mecha/get_mob() return occupant @@ -14,6 +10,11 @@ /mob/get_mob() return src +/mob/living/bot/mulebot/get_mob() + if(load && istype(load, /mob/living)) + return list(src, load) + return src + /proc/mobs_in_view(var/range, var/source) var/list/mobs = list() for(var/atom/movable/AM in view(range, source)) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 549060b0af0..224301a8983 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -175,13 +175,6 @@ /* * Text modification */ - -/proc/replacetext(text, find, replacement) - return list2text(text2list(text, find), replacement) - -/proc/replacetextEx(text, find, replacement) - return list2text(text2listEx(text, find), replacement) - /proc/replace_characters(var/t,var/list/repl_chars) for(var/char in repl_chars) t = replacetext(t, char, repl_chars[char]) diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 4a6958aaad0..ebdee3c6593 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -50,141 +50,15 @@ while (left-- > 0) . = "0[.]" -// Concatenates a list of strings into a single string. A seperator may optionally be provided. -/proc/list2text(list/ls, sep) - if (ls.len <= 1) // Early-out code for empty or singleton lists. - return ls.len ? ls[1] : "" - - var/l = ls.len // Made local for sanic speed. - var/i = 0 // Incremented every time a list index is accessed. - - if (sep <> null) - // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... - #define S1 sep, ls[++i] - #define S4 S1, S1, S1, S1 - #define S16 S4, S4, S4, S4 - #define S64 S16, S16, S16, S16 - - . = "[ls[++i]]" // Make sure the initial element is converted to text. - - // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. - if (l-1 & 0x01) // 'i' will always be 1 here. - . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. - if (l-i & 0x02) - . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. - if (l-i & 0x04) - . = text("[][][][][][][][][]", ., S4) // And so on.... - if (l-i & 0x08) - . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) - if (l-i & 0x10) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) - if (l-i & 0x20) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) - if (l-i & 0x40) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) - while (l > i) // Chomp through the rest of the list, 128 elements at a time. - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) - - #undef S64 - #undef S16 - #undef S4 - #undef S1 - else - // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... - #define S1 ls[++i] - #define S4 S1, S1, S1, S1 - #define S16 S4, S4, S4, S4 - #define S64 S16, S16, S16, S16 - - . = "[ls[++i]]" // Make sure the initial element is converted to text. - - if (l-1 & 0x01) // 'i' will always be 1 here. - . += S1 // Append 1 element if the remaining elements are not a multiple of 2. - if (l-i & 0x02) - . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. - if (l-i & 0x04) - . = text("[][][][][]", ., S4) // And so on... - if (l-i & 0x08) - . = text("[][][][][][][][][]", ., S4, S4) - if (l-i & 0x10) - . = text("[][][][][][][][][][][][][][][][][]", ., S16) - if (l-i & 0x20) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) - if (l-i & 0x40) - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) - while (l > i) // Chomp through the rest of the list, 128 elements at a time. - . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ - [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) - - #undef S64 - #undef S16 - #undef S4 - #undef S1 - -// Slower then list2text, but correctly processes associative lists. -proc/tg_list2text(list/list, glue=",") - if (!istype(list) || !list.len) - return - var/output - for(var/i=1 to list.len) - output += (i!=1? glue : null)+(!isnull(list["[list[i]]"])?"[list["[list[i]]"]]":"[list[i]]") - return output - -// Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) -/proc/text2list(text, delimiter="\n") - var/delim_len = length(delimiter) - if (delim_len < 1) - return list(text) - - . = list() - var/last_found = 1 - var/found - - do - found = findtext(text, delimiter, last_found, 0) - . += copytext(text, last_found, found) - last_found = found + delim_len - while (found) - -// Case sensitive version of /proc/text2list(). -/proc/text2listEx(text, delimiter="\n") - var/delim_len = length(delimiter) - if (delim_len < 1) - return list(text) - - . = list() - var/last_found = 1 - var/found - - do - found = findtextEx(text, delimiter, last_found, 0) - . += copytext(text, last_found, found) - last_found = found + delim_len - while (found) - /proc/text2numlist(text, delimiter="\n") var/list/num_list = list() - for(var/x in text2list(text, delimiter)) + for(var/x in splittext(text, delimiter)) num_list += text2num(x) return num_list // Splits the text of a file at seperator and returns them in a list. /proc/file2list(filename, seperator="\n") - return text2list(return_file_text(filename),seperator) + return splittext(return_file_text(filename),seperator) // Turns a direction into text /proc/num2dir(direction) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index bd6f014e0b5..8057d65f969 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -462,7 +462,7 @@ Turf and target are seperate in case you want to teleport some distance from a t if (M.real_name && M.real_name != M.name) name += " \[[M.real_name]\]" if (M.stat == 2) - if(istype(M, /mob/dead/observer/)) + if(istype(M, /mob/observer/dead/)) name += " \[ghost\]" else name += " \[dead\]" @@ -474,7 +474,7 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/sortmobs() var/list/moblist = list() var/list/sortmob = sortAtom(mob_list) - for(var/mob/eye/M in sortmob) + for(var/mob/observer/eye/M in sortmob) moblist.Add(M) for(var/mob/living/silicon/ai/M in sortmob) moblist.Add(M) @@ -488,7 +488,7 @@ Turf and target are seperate in case you want to teleport some distance from a t moblist.Add(M) for(var/mob/living/carbon/alien/M in sortmob) moblist.Add(M) - for(var/mob/dead/observer/M in sortmob) + for(var/mob/observer/dead/M in sortmob) moblist.Add(M) for(var/mob/new_player/M in sortmob) moblist.Add(M) @@ -861,7 +861,7 @@ proc/GaussRandRound(var/sigma,var/roundto) if(!istype(O,/obj)) continue O.loc = X for(var/mob/M in T) - if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable + if(!istype(M,/mob) || istype(M, /mob/observer/eye)) continue // If we need to check for more mobs, I'll add a variable M.loc = X // var/area/AR = X.loc @@ -995,7 +995,7 @@ proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0) for(var/mob/M in T) - if(!istype(M,/mob) || istype(M, /mob/eye)) continue // If we need to check for more mobs, I'll add a variable + if(!istype(M,/mob) || istype(M, /mob/observer/eye)) continue // If we need to check for more mobs, I'll add a variable mobs += M for(var/mob/M in mobs) diff --git a/code/_macros.dm b/code/_macros.dm index b6ddf4f12ca..7e8d581b90f 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -13,7 +13,7 @@ #define iscorgi(A) istype(A, /mob/living/simple_animal/corgi) -#define isEye(A) istype(A, /mob/eye) +#define isEye(A) istype(A, /mob/observer/eye) #define ishuman(A) istype(A, /mob/living/carbon/human) @@ -23,7 +23,7 @@ #define isnewplayer(A) istype(A, /mob/new_player) -#define isobserver(A) istype(A, /mob/dead/observer) +#define isobserver(A) istype(A, /mob/observer/dead) #define isorgan(A) istype(A, /obj/item/organ/external) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 414071a964a..e64d4f946f5 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -32,7 +32,7 @@ CtrlClickOn(A) return - if(stat || lockcharge || weakened || stunned || paralysis) + if(stat || lockdown || weakened || stunned || paralysis) return if(!canClick()) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 96aef5b32f6..a66957254f6 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -61,6 +61,21 @@ #define ui_borg_module "EAST-2:26,SOUTH+1:7" #define ui_borg_panel "EAST-1:28,SOUTH+1:7" +#define ui_ai_core "SOUTH:6,WEST:16" +#define ui_ai_camera_list "SOUTH:6,WEST+1:16" +#define ui_ai_track_with_camera "SOUTH:6,WEST+2:16" +#define ui_ai_camera_light "SOUTH:6,WEST+3:16" +#define ui_ai_crew_monitor "SOUTH:6,WEST+4:16" +#define ui_ai_crew_manifest "SOUTH:6,WEST+5:16" +#define ui_ai_alerts "SOUTH:6,WEST+6:16" +#define ui_ai_announcement "SOUTH:6,WEST+7:16" +#define ui_ai_shuttle "SOUTH:6,WEST+8:16" +#define ui_ai_state_laws "SOUTH:6,WEST+9:16" +#define ui_ai_pda_send "SOUTH:6,WEST+10:16" +#define ui_ai_pda_log "SOUTH:6,WEST+11:16" +#define ui_ai_take_picture "SOUTH:6,WEST+12:16" +#define ui_ai_view_images "SOUTH:6,WEST+13:16" + //Gun buttons #define ui_gun1 "EAST-2:26,SOUTH+2:7" #define ui_gun2 "EAST-1:28, SOUTH+3:7" diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm new file mode 100644 index 00000000000..ab959eae53e --- /dev/null +++ b/code/_onclick/hud/ai.dm @@ -0,0 +1,135 @@ +/datum/hud/proc/ai_hud() + adding = list() + other = list() + + var/obj/screen/using + +//AI core + using = new /obj/screen() + using.name = "AI Core" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "ai_core" + using.screen_loc = ui_ai_core + using.layer = SCREEN_LAYER + adding += using + +//Camera list + using = new /obj/screen() + using.name = "Show Camera List" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "camera" + using.screen_loc = ui_ai_camera_list + using.layer = SCREEN_LAYER + adding += using + +//Track + using = new /obj/screen() + using.name = "Track With Camera" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "track" + using.screen_loc = ui_ai_track_with_camera + using.layer = SCREEN_LAYER + adding += using + +//Camera light + using = new /obj/screen() + using.name = "Toggle Camera Light" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "camera_light" + using.screen_loc = ui_ai_camera_light + using.layer = SCREEN_LAYER + adding += using + +//Crew Monitorting + using = new /obj/screen() + using.name = "Crew Monitorting" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "crew_monitor" + using.screen_loc = ui_ai_crew_monitor + using.layer = SCREEN_LAYER + adding += using + +//Crew Manifest + using = new /obj/screen() + using.name = "Show Crew Manifest" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "manifest" + using.screen_loc = ui_ai_crew_manifest + using.layer = SCREEN_LAYER + adding += using + +//Alerts + using = new /obj/screen() + using.name = "Show Alerts" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "alerts" + using.screen_loc = ui_ai_alerts + using.layer = SCREEN_LAYER + adding += using + +//Announcement + using = new /obj/screen() + using.name = "Announcement" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "announcement" + using.screen_loc = ui_ai_announcement + using.layer = SCREEN_LAYER + adding += using + +//Shuttle + using = new /obj/screen() + using.name = "Call Emergency Shuttle" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "call_shuttle" + using.screen_loc = ui_ai_shuttle + using.layer = SCREEN_LAYER + adding += using + +//Laws + using = new /obj/screen() + using.name = "State Laws" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "state_laws" + using.screen_loc = ui_ai_state_laws + using.layer = SCREEN_LAYER + adding += using + +//PDA message + using = new /obj/screen() + using.name = "PDA - Send Message" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "pda_send" + using.screen_loc = ui_ai_pda_send + using.layer = SCREEN_LAYER + adding += using + +//PDA log + using = new /obj/screen() + using.name = "PDA - Show Message Log" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "pda_receive" + using.screen_loc = ui_ai_pda_log + using.layer = SCREEN_LAYER + adding += using + +//Take image + using = new /obj/screen() + using.name = "Take Image" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "take_picture" + using.screen_loc = ui_ai_take_picture + using.layer = SCREEN_LAYER + adding += using + +//View images + using = new /obj/screen() + using.name = "View Images" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "view_images" + using.screen_loc = ui_ai_view_images + using.layer = SCREEN_LAYER + adding += using + + mymob.client.screen += adding + other + + return \ No newline at end of file diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 2ee17dedced..751021892c8 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -388,7 +388,8 @@ if(dna.species == "Human") //no more xenos losing ears/tentacles h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") undershirt = null - underwear = null + underwear_top = null + underwear_bottom = null socks = null regenerate_icons() diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index d543b8b12a4..71eff4a3920 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -27,13 +27,13 @@ return //Split screen-loc up into X+Pixel_X and Y+Pixel_Y - var/list/screen_loc_params = text2list(PM["screen-loc"], ",") + var/list/screen_loc_params = splittext(PM["screen-loc"], ",") //Split X+Pixel_X up into list(X, Pixel_X) - var/list/screen_loc_X = text2list(screen_loc_params[1],":") + var/list/screen_loc_X = splittext(screen_loc_params[1],":") screen_loc_X[1] = encode_screen_X(text2num(screen_loc_X[1])) //Split Y+Pixel_Y up into list(Y, Pixel_Y) - var/list/screen_loc_Y = text2list(screen_loc_params[2],":") + var/list/screen_loc_Y = splittext(screen_loc_params[2],":") screen_loc_Y[1] = encode_screen_Y(text2num(screen_loc_Y[1])) if(snap2grid) //Discard Pixel Values diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index cbc72202000..69896b163aa 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -13,9 +13,6 @@ mymob.blind.screen_loc = "1,1" mymob.blind.layer = 0 -/datum/hud/proc/ai_hud() - return - /datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen1_Midnight.dmi') blobpwrdisplay = new /obj/screen() diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index b066e431ce9..cbb49166c0f 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -397,6 +397,78 @@ if("module3") if(istype(usr, /mob/living/silicon/robot)) usr:toggle_module(3) + + if("AI Core") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.view_core() + + if("Show Camera List") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + var/camera = input(AI) in AI.get_camera_list() + AI.ai_camera_list(camera) + + if("Track With Camera") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + var/target_name = input(AI) in AI.trackable_mobs() + AI.ai_camera_track(target_name) + + if("Toggle Camera Light") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.toggle_camera_light() + + if("Crew Monitorting") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.subsystem_crew_monitor() + + if("Show Crew Manifest") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_roster() + + if("Show Alerts") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.subsystem_alarm_monitor() + + if("Announcement") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_announcement() + + if("Call Emergency Shuttle") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_call_shuttle() + + if("State Laws") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_checklaws() + + if("PDA - Send Message") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.aiPDA.cmd_send_pdamesg(usr) + + if("PDA - Show Message Log") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.aiPDA.cmd_show_message_log(usr) + + if("Take Image") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.take_image() + + if("View Images") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.view_images() else return 0 return 1 diff --git a/code/_onclick/hud/spell_screen_objects.dm b/code/_onclick/hud/spell_screen_objects.dm index a59474749a1..3365a4384d5 100644 --- a/code/_onclick/hud/spell_screen_objects.dm +++ b/code/_onclick/hud/spell_screen_objects.dm @@ -57,15 +57,15 @@ overlays.Add(open_state) /obj/screen/movable/spell_master/proc/open_spellmaster() - var/list/screen_loc_xy = text2list(screen_loc,",") + var/list/screen_loc_xy = splittext(screen_loc,",") //Create list of X offsets - var/list/screen_loc_X = text2list(screen_loc_xy[1],":") + var/list/screen_loc_X = splittext(screen_loc_xy[1],":") var/x_position = decode_screen_X(screen_loc_X[1]) var/x_pix = screen_loc_X[2] //Create list of Y offsets - var/list/screen_loc_Y = text2list(screen_loc_xy[2],":") + var/list/screen_loc_Y = splittext(screen_loc_xy[2],":") var/y_position = decode_screen_Y(screen_loc_Y[1]) var/y_pix = screen_loc_Y[2] diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 55fe373301e..5f18c2d9b87 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -1,5 +1,5 @@ /client/var/inquisitive_ghost = 1 -/mob/dead/observer/verb/toggle_inquisition() // warning: unexpected inquisition +/mob/observer/dead/verb/toggle_inquisition() // warning: unexpected inquisition set name = "Toggle Inquisitiveness" set desc = "Sets whether your ghost examines everything on click by default" set category = "Ghost" @@ -10,7 +10,7 @@ else src << "You will no longer examine things you click on." -/mob/dead/observer/DblClickOn(var/atom/A, var/params) +/mob/observer/dead/DblClickOn(var/atom/A, var/params) if(client.buildmode) build_click(src, client.buildmode, params, A) return @@ -20,7 +20,7 @@ return // seems legit. // Things you might plausibly want to follow - if((ismob(A) && A != src) || istype(A,/obj/machinery/bot) || istype(A,/obj/singularity)) + if((ismob(A) && A != src) || istype(A,/obj/singularity)) ManualFollow(A) // Otherwise jump @@ -28,7 +28,7 @@ following = null forceMove(get_turf(A)) -/mob/dead/observer/ClickOn(var/atom/A, var/params) +/mob/observer/dead/ClickOn(var/atom/A, var/params) if(client.buildmode) build_click(src, client.buildmode, params, A) return @@ -39,7 +39,7 @@ A.attack_ghost(src) // Oh by the way this didn't work with old click code which is why clicking shit didn't spam you -/atom/proc/attack_ghost(mob/dead/observer/user as mob) +/atom/proc/attack_ghost(mob/observer/dead/user as mob) if(user.client && user.client.inquisitive_ghost) user.examinate(src) return diff --git a/code/controllers/Processes/garbage.dm b/code/controllers/Processes/garbage.dm index 20e866c315d..f306d496833 100644 --- a/code/controllers/Processes/garbage.dm +++ b/code/controllers/Processes/garbage.dm @@ -58,7 +58,7 @@ world/loop_checks = 0 if(A.loc != null) testing("GC: [A] | [A.type] is located in [A.loc] instead of null") if(A.contents.len) - testing("GC: [A] | [A.type] has contents: [list2text(A.contents)]") + testing("GC: [A] | [A.type] has contents: [jointext(A.contents)]") if(searching.len) for(var/atom/D in world) LookForRefs(D, searching) diff --git a/code/controllers/Processes/inactivity.dm b/code/controllers/Processes/inactivity.dm index cd01e24829a..e61c2d4dc11 100644 --- a/code/controllers/Processes/inactivity.dm +++ b/code/controllers/Processes/inactivity.dm @@ -6,7 +6,7 @@ if(config.kick_inactive) for(var/client/C in clients) if(!C.holder && C.is_afk(config.kick_inactive MINUTES)) - if(!istype(C.mob, /mob/dead)) + if(!istype(C.mob, /mob/observer/dead)) log_access("AFK: [key_name(C)]") C << "You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected." del(C) // Don't qdel, cannot override finalize_qdel behaviour for clients. diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 28dadc5adbf..bd817baf419 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -265,7 +265,7 @@ var/list/gamemode_cache = list() if(type == "config") switch (name) if ("resource_urls") - config.resource_urls = text2list(value, " ") + config.resource_urls = splittext(value, " ") if ("admin_legacy_system") config.admin_legacy_system = 1 @@ -337,7 +337,7 @@ var/list/gamemode_cache = list() config.generate_asteroid = 1 if ("asteroid_z_levels") - config.asteroid_z_levels = text2list(value, ";") + config.asteroid_z_levels = splittext(value, ";") //Numbers get stored as strings, so we'll fix that right now. for(var/z_level in config.asteroid_z_levels) z_level = text2num(z_level) @@ -696,7 +696,7 @@ var/list/gamemode_cache = list() config.starlight = value >= 0 ? value : 0 if("ert_species") - config.ert_species = text2list(value, ";") + config.ert_species = splittext(value, ";") if(!config.ert_species.len) config.ert_species += "Human" @@ -707,7 +707,7 @@ var/list/gamemode_cache = list() config.aggressive_changelog = 1 if("default_language_prefixes") - var/list/values = text2list(value, " ") + var/list/values = splittext(value, " ") if(values.len > 0) language_prefixes = values diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 5d6400886ec..34082d12bab 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -14,7 +14,7 @@ var/global/datum/getrev/revdata = new() var/list/head_log = file2list(".git/logs/HEAD", "\n") for(var/line=head_log.len, line>=1, line--) if(head_log[line]) - var/list/last_entry = text2list(head_log[line], " ") + var/list/last_entry = splittext(head_log[line], " ") if(last_entry.len < 2) continue revision = last_entry[2] // Get date/time diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index fa6513635d4..1bf774c8500 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -50,7 +50,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/storage/box/swabs, /obj/item/weapon/storage/box/swabs, /obj/item/weapon/storage/box/swabs, - /obj/item/weapon/storage/box/slides, /obj/item/device/uv_light, /obj/item/weapon/reagent_containers/spray/luminol) cost = 30 @@ -278,11 +277,11 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee group = "Miscellaneous" /datum/supply_packs/mule - name = "MULEbot Crate" - contains = list(/obj/machinery/bot/mulebot) + name = "Mulebot Crate" + contains = list() cost = 20 - containertype = /obj/structure/largecrate/mule - containername = "MULEbot Crate" + containertype = /obj/structure/largecrate/animal/mulebot + containername = "Mulebot Crate" group = "Operations" /datum/supply_packs/cargotrain @@ -771,13 +770,11 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee contains = list(/obj/item/weapon/gun/energy/xray, /obj/item/weapon/gun/energy/xray, /obj/item/weapon/shield/energy, - /obj/item/weapon/shield/energy, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof) + /obj/item/weapon/shield/energy) cost = 125 containertype = /obj/structure/closet/crate/secure/weapon containername = "Experimental weapons crate" - access = access_heads + access = access_armory group = "Security" /datum/supply_packs/randomised/armor @@ -801,8 +798,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee access = access_security group = "Security" - -/datum/supply_packs/riot +/datum/supply_packs/riot_gear name = "Riot gear crate" contains = list(/obj/item/weapon/melee/baton, /obj/item/weapon/melee/baton, @@ -813,21 +809,87 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs, /obj/item/weapon/handcuffs, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, /obj/item/weapon/storage/box/flashbangs, /obj/item/weapon/storage/box/beanbags, /obj/item/weapon/storage/box/handcuffs) - cost = 60 + cost = 40 containertype = /obj/structure/closet/crate/secure - containername = "Riot gear crate" + containername = "riot gear crate" access = access_armory group = "Security" +/datum/supply_packs/riot_armor + name = "Riot armor set crate" + contains = list(/obj/item/clothing/head/helmet/riot, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/gloves/arm_guard/riot, + /obj/item/clothing/shoes/leg_guard/riot) + cost = 30 + containertype = /obj/structure/closet/crate/secure + containername = "riot armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/ablative_armor + name = "Ablative armor set crate" + contains = list(/obj/item/clothing/head/helmet/laserproof, + /obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/gloves/arm_guard/laserproof, + /obj/item/clothing/shoes/leg_guard/laserproof) + cost = 40 + containertype = /obj/structure/closet/crate/secure + containername = "ablative armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/bullet_resistant_armor + name = "Bullet resistant armor set crate" + contains = list(/obj/item/clothing/head/helmet/bulletproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/gloves/arm_guard/bulletproof, + /obj/item/clothing/shoes/leg_guard/bulletproof) + cost = 35 + containertype = /obj/structure/closet/crate/secure + containername = "bullet resistant armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/combat_armor + name = "Combat armor set crate" + contains = list(/obj/item/clothing/head/helmet/combat, + /obj/item/clothing/suit/armor/combat, + /obj/item/clothing/gloves/arm_guard/combat, + /obj/item/clothing/shoes/leg_guard/combat) + cost = 40 + containertype = /obj/structure/closet/crate/secure + containername = "combat armor set crate" + access = access_armory + group = "Security" + +/datum/supply_packs/tactical + name = "Tactical suits" + containertype = /obj/structure/closet/crate/secure + containername = "Tactical Suit Locker" + cost = 60 + group = "Security" + access = access_armory + contains = list(/obj/item/clothing/under/tactical, + /obj/item/clothing/suit/armor/tactical, + /obj/item/clothing/head/helmet/tactical, + /obj/item/clothing/mask/balaclava/tactical, + /obj/item/clothing/glasses/sunglasses/sechud/tactical, + /obj/item/weapon/storage/belt/security/tactical, + /obj/item/clothing/shoes/jackboots, + /obj/item/clothing/gloves/black, + /obj/item/clothing/under/tactical, + /obj/item/clothing/suit/armor/tactical, + /obj/item/clothing/head/helmet/tactical, + /obj/item/clothing/mask/balaclava/tactical, + /obj/item/clothing/glasses/sunglasses/sechud/tactical, + /obj/item/weapon/storage/belt/security/tactical, + /obj/item/clothing/shoes/jackboots, + /obj/item/clothing/gloves/black) + /datum/supply_packs/energyweapons name = "Energy weapons crate" contains = list(/obj/item/weapon/gun/energy/laser, @@ -841,9 +903,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/shotgun name = "Shotgun crate" - contains = list(/obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/weapon/storage/box/shotgunammo, + contains = list(/obj/item/weapon/storage/box/shotgunammo, /obj/item/weapon/storage/box/shotgunshells, /obj/item/weapon/gun/projectile/shotgun/pump/combat, /obj/item/weapon/gun/projectile/shotgun/pump/combat) @@ -855,9 +915,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/erifle name = "Energy marksman crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/weapon/gun/energy/sniperrifle, + contains = list(/obj/item/weapon/gun/energy/sniperrifle, /obj/item/weapon/gun/energy/sniperrifle) cost = 90 containertype = /obj/structure/closet/crate/secure @@ -922,27 +980,13 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee group = "Security" */ -/datum/supply_packs/expenergy - name = "Experimental energy gear crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/weapon/gun/energy/gun, +/datum/supply_packs/energy_guns + name = "energy guns crate" + contains = list(/obj/item/weapon/gun/energy/gun, /obj/item/weapon/gun/energy/gun) cost = 50 containertype = /obj/structure/closet/crate/secure - containername = "Experimental energy gear crate" - access = access_armory - group = "Security" - -/datum/supply_packs/exparmor - name = "Experimental armor crate" - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot) - cost = 35 - containertype = /obj/structure/closet/crate/secure - containername = "Experimental armor crate" + containername = "energy guns crate" access = access_armory group = "Security" @@ -1320,30 +1364,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Radiation suit locker" group = "Engineering" -/datum/supply_packs/tactical - name = "Tactical suits" - containertype = /obj/structure/closet/crate/secure - containername = "Tactical Suit Locker" - cost = 45 - group = "Security" - access = access_armory - contains = list(/obj/item/clothing/under/tactical, - /obj/item/clothing/suit/armor/tactical, - /obj/item/clothing/head/helmet/tactical, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/glasses/sunglasses/sechud/tactical, - /obj/item/weapon/storage/belt/security/tactical, - /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/gloves/black, - /obj/item/clothing/under/tactical, - /obj/item/clothing/suit/armor/tactical, - /obj/item/clothing/head/helmet/tactical, - /obj/item/clothing/mask/balaclava/tactical, - /obj/item/clothing/glasses/sunglasses/sechud/tactical, - /obj/item/weapon/storage/belt/security/tactical, - /obj/item/clothing/shoes/jackboots, - /obj/item/clothing/gloves/black) - /datum/supply_packs/carpet name = "Imported carpet" containertype = /obj/structure/closet diff --git a/code/datums/wires/mulebot.dm b/code/datums/wires/mulebot.dm deleted file mode 100644 index 312e6dd7d9a..00000000000 --- a/code/datums/wires/mulebot.dm +++ /dev/null @@ -1,65 +0,0 @@ -/datum/wires/mulebot - random = 1 - holder_type = /obj/machinery/bot/mulebot - wire_count = 10 - -var/const/WIRE_POWER1 = 1 // power connections -var/const/WIRE_POWER2 = 2 -var/const/WIRE_AVOIDANCE = 4 // mob avoidance -var/const/WIRE_LOADCHECK = 8 // load checking (non-crate) -var/const/WIRE_MOTOR1 = 16 // motor wires -var/const/WIRE_MOTOR2 = 32 // -var/const/WIRE_REMOTE_RX = 64 // remote recv functions -var/const/WIRE_REMOTE_TX = 128 // remote trans status -var/const/WIRE_BEACON_RX = 256 // beacon ping recv - -/datum/wires/mulebot/CanUse(var/mob/living/L) - var/obj/machinery/bot/mulebot/M = holder - if(M.open) - return 1 - return 0 - -// So the wires do not open a new window, handle the interaction ourselves. -/datum/wires/mulebot/Interact(var/mob/living/user) - if(CanUse(user)) - var/obj/machinery/bot/mulebot/M = holder - M.interact(user) - -/datum/wires/mulebot/UpdatePulsed(var/index) - switch(index) - if(WIRE_POWER1, WIRE_POWER2) - holder.visible_message("\icon[holder] The charge light flickers.") - if(WIRE_AVOIDANCE) - holder.visible_message("\icon[holder] The external warning lights flash briefly.") - if(WIRE_LOADCHECK) - holder.visible_message("\icon[holder] The load platform clunks.") - if(WIRE_MOTOR1, WIRE_MOTOR2) - holder.visible_message("\icon[holder] The drive motor whines briefly.") - else - holder.visible_message("\icon[holder] You hear a radio crackle.") - -// HELPER PROCS - -/datum/wires/mulebot/proc/Motor1() - return !(wires_status & WIRE_MOTOR1) - -/datum/wires/mulebot/proc/Motor2() - return !(wires_status & WIRE_MOTOR2) - -/datum/wires/mulebot/proc/HasPower() - return !(wires_status & WIRE_POWER1) && !(wires_status & WIRE_POWER2) - -/datum/wires/mulebot/proc/LoadCheck() - return !(wires_status & WIRE_LOADCHECK) - -/datum/wires/mulebot/proc/MobAvoid() - return !(wires_status & WIRE_AVOIDANCE) - -/datum/wires/mulebot/proc/RemoteTX() - return !(wires_status & WIRE_REMOTE_TX) - -/datum/wires/mulebot/proc/RemoteRX() - return !(wires_status & WIRE_REMOTE_RX) - -/datum/wires/mulebot/proc/BeaconRX() - return !(wires_status & WIRE_BEACON_RX) diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index da20f1bd054..6a1e96e18a4 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -16,7 +16,7 @@ var/const/BORG_WIRE_CAMERA = 16 . += text("
\n[(R.lawupdate ? "The LawSync light is on." : "The LawSync light is off.")]") . += text("
\n[(R.connected_ai ? "The AI link light is on." : "The AI link light is off.")]") . += text("
\n[((!isnull(R.camera) && R.camera.status == 1) ? "The Camera light is on." : "The Camera light is off.")]") - . += text("
\n[(R.lockcharge ? "The lockdown light is on." : "The lockdown light is off.")]") + . += text("
\n[(R.lockdown ? "The lockdown light is on." : "The lockdown light is off.")]") return . /datum/wires/robot/UpdateCut(var/index, var/mended) @@ -64,7 +64,7 @@ var/const/BORG_WIRE_CAMERA = 16 R << "Your camera lense focuses loudly." if(BORG_WIRE_LOCKED_DOWN) - R.SetLockdown(!R.lockcharge) // Toggle + R.SetLockdown(!R.lockdown) // Toggle /datum/wires/robot/CanUse(var/mob/living/L) var/mob/living/silicon/robot/R = holder diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 602008ccd75..7babc9c4c1a 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -114,7 +114,7 @@ var/global/ManifestJSON department = 1 if(depthead && sci.len != 1) sci.Swap(1,sci.len) - + if(real_rank in cargo_positions) car[++car.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 @@ -146,7 +146,7 @@ var/global/ManifestJSON "bot" = bot,\ "misc" = misc\ ) - ManifestJSON = list2json(PDA_Manifest) + ManifestJSON = json_encode(PDA_Manifest) return diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm index e5560e5ce05..78fdb6dc7bb 100644 --- a/code/defines/procs/hud.dm +++ b/code/defines/procs/hud.dm @@ -72,7 +72,7 @@ mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use mob/proc/in_view(var/turf/T) return view(T) -/mob/eye/in_view(var/turf/T) +/mob/observer/eye/in_view(var/turf/T) var/list/viewed = new for(var/mob/living/carbon/human/H in mob_list) if(get_dist(H, T) <= 7) diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm index d0d1183a0d9..783055381c3 100644 --- a/code/game/antagonist/alien/borer.dm +++ b/code/game/antagonist/alien/borer.dm @@ -1,7 +1,8 @@ -var/datum/antagonist/xenos/borer/borers +var/datum/antagonist/borer/borers -/datum/antagonist/xenos/borer +/datum/antagonist/borer id = MODE_BORER + role_type = BE_ALIEN role_text = "Cortical Borer" role_text_plural = "Cortical Borers" mob_path = /mob/living/simple_animal/borer @@ -10,6 +11,8 @@ var/datum/antagonist/xenos/borer/borers antag_indicator = "brainworm" antaghud_indicator = "hudborer" + flags = ANTAG_OVERRIDE_MOB | ANTAG_RANDSPAWN | ANTAG_OVERRIDE_JOB | ANTAG_VOTABLE + faction_role_text = "Borer Thrall" faction_descriptor = "Unity" faction_welcome = "You are now a thrall to a cortical borer. Please listen to what they have to say; they're in your head." @@ -17,21 +20,26 @@ var/datum/antagonist/xenos/borer/borers initial_spawn_req = 3 initial_spawn_target = 5 -/datum/antagonist/xenos/borer/New() + spawn_announcement = "Unidentified lifesigns detected coming aboard the station. Secure any exterior access, including ducting and ventilation." + spawn_announcement_title = "Lifesign Alert" + spawn_announcement_sound = 'sound/AI/aliens.ogg' + spawn_announcement_delay = 5000 + +/datum/antagonist/borer/New() ..(1) borers = src /datum/antagonist/xenos/borer/get_extra_panel_options(var/datum/mind/player) return "\[put in host\]" -/datum/antagonist/xenos/borer/create_objectives(var/datum/mind/player) +/datum/antagonist/borer/create_objectives(var/datum/mind/player) if(!..()) return player.objectives += new /datum/objective/borer_survive() player.objectives += new /datum/objective/borer_reproduce() player.objectives += new /datum/objective/escape() -/datum/antagonist/xenos/borer/place_mob(var/mob/living/mob) +/datum/antagonist/borer/place_mob(var/mob/living/mob) var/mob/living/simple_animal/borer/borer = mob if(istype(borer)) var/mob/living/carbon/human/host @@ -51,4 +59,16 @@ var/datum/antagonist/xenos/borer/borers borer.host_brain.name = host.name borer.host_brain.real_name = host.real_name return - ..() // Place them at a vent if they can't get a host. + // Place them at a vent if they can't get a host. + borer.forceMove(get_turf(pick(get_vents()))) + +/datum/antagonist/borer/attempt_random_spawn() + if(config.aliens_allowed) ..() + +/datum/antagonist/borer/proc/get_vents() + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) + if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in config.station_levels) + if(temp_vent.network.normal_members.len > 50) + vents += temp_vent + return vents \ No newline at end of file diff --git a/code/game/antagonist/alien/xenomorph.dm b/code/game/antagonist/alien/xenomorph.dm deleted file mode 100644 index 08cbeebca9e..00000000000 --- a/code/game/antagonist/alien/xenomorph.dm +++ /dev/null @@ -1,47 +0,0 @@ -var/datum/antagonist/xenos/xenomorphs - -/datum/antagonist/xenos - id = MODE_XENOMORPH - role_type = BE_ALIEN - role_text = "Xenomorph" - role_text_plural = "Xenomorphs" - mob_path = /mob/living/carbon/alien/larva - bantype = "Xenomorph" - flags = ANTAG_OVERRIDE_MOB | ANTAG_RANDSPAWN | ANTAG_OVERRIDE_JOB | ANTAG_VOTABLE - welcome_text = "Hiss! You are a larval alien. Hide and bide your time until you are ready to evolve." - antaghud_indicator = "hudalien" - - hard_cap = 5 - hard_cap_round = 8 - initial_spawn_req = 4 - initial_spawn_target = 6 - - spawn_announcement = "Unidentified lifesigns detected coming aboard the station. Secure any exterior access, including ducting and ventilation." - spawn_announcement_title = "Lifesign Alert" - spawn_announcement_sound = 'sound/AI/aliens.ogg' - spawn_announcement_delay = 5000 - -/datum/antagonist/xenos/New(var/no_reference) - ..() - if(!no_reference) - xenomorphs = src - -/datum/antagonist/xenos/attempt_random_spawn() - if(config.aliens_allowed) ..() - -/datum/antagonist/xenos/proc/get_vents() - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines) - if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in config.station_levels) - if(temp_vent.network.normal_members.len > 50) - vents += temp_vent - return vents - -/datum/antagonist/xenos/create_objectives(var/datum/mind/player) - if(!..()) - return - player.objectives += new /datum/objective/survive() - player.objectives += new /datum/objective/escape() - -/datum/antagonist/xenos/place_mob(var/mob/living/player) - player.forceMove(get_turf(pick(get_vents()))) diff --git a/code/game/antagonist/antagonist.dm b/code/game/antagonist/antagonist.dm index 6d3e7d0b287..e9d5ef71b5e 100644 --- a/code/game/antagonist/antagonist.dm +++ b/code/game/antagonist/antagonist.dm @@ -63,6 +63,8 @@ var/list/global_objectives = list() // Universal objectives if any. var/list/candidates = list() // Potential candidates. var/list/faction_members = list() // Semi-antags (in-round revs, borer thralls) + + var/allow_latejoin = 0 //Determines whether or not the game mode will allow for the template to spawn try_latespawn // ID card stuff. var/default_access = list() @@ -92,7 +94,7 @@ // Prune restricted status. Broke it up for readability. // Note that this is done before jobs are handed out. for(var/datum/mind/player in ticker.mode.get_players_for_role(role_type, id)) - if(ghosts_only && !istype(player.current, /mob/dead)) + if(ghosts_only && !istype(player.current, /mob/observer/dead)) log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!") else if(player.special_role) log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])!") @@ -124,7 +126,7 @@ return 0 player.current << "You have been selected this round as an antagonist!" message_admins("[uppertext(ticker.mode.name)]: Selected [player] as a [role_text].") - if(istype(player.current, /mob/dead)) + if(istype(player.current, /mob/observer/dead)) create_default(player.current) else add_antagonist(player,0,0,0,1,1) diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index 1598aacfe80..9f594f9b637 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -8,7 +8,7 @@ player.assigned_role = role_text player.special_role = role_text - if(istype(player.current, /mob/dead)) + if(istype(player.current, /mob/observer/dead)) create_default(player.current) else create_antagonist(player, move_to_spawn, do_not_announce, preserve_appearance) diff --git a/code/game/antagonist/antagonist_helpers.dm b/code/game/antagonist/antagonist_helpers.dm index 056fbd18651..0cc28d5ad27 100644 --- a/code/game/antagonist/antagonist_helpers.dm +++ b/code/game/antagonist/antagonist_helpers.dm @@ -33,6 +33,8 @@ return (flags & ANTAG_VOTABLE) /datum/antagonist/proc/can_late_spawn() + if(!(allow_latejoin)) + return 0 update_current_antag_max() if(get_antag_count() >= cur_max) return 0 diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index 8da368f8482..bcc89a02956 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -161,7 +161,7 @@ var/datum/antagonist/raider/raiders else win_type = "Minor" win_group = "Crew" - //Now we modify that result by the state of the vox crew. + //Now we modify that result by the state of the crew. if(antags_are_dead()) win_type = "Major" win_group = "Crew" @@ -198,26 +198,23 @@ var/datum/antagonist/raider/raiders if(!..()) return 0 - if(player.species && player.species.get_bodytype() == "Vox") - equip_vox(player) - else - var/new_shoes = pick(raider_shoes) - var/new_uniform = pick(raider_uniforms) - var/new_glasses = pick(raider_glasses) - var/new_helmet = pick(raider_helmets) - var/new_suit = pick(raider_suits) + var/new_shoes = pick(raider_shoes) + var/new_uniform = pick(raider_uniforms) + var/new_glasses = pick(raider_glasses) + var/new_helmet = pick(raider_helmets) + var/new_suit = pick(raider_suits) - player.equip_to_slot_or_del(new new_shoes(player),slot_shoes) - if(!player.shoes) - //If equipping shoes failed, fall back to equipping sandals - var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/unathi) - player.equip_to_slot_or_del(new fallback_type(player), slot_shoes) + player.equip_to_slot_or_del(new new_shoes(player),slot_shoes) + if(!player.shoes) + //If equipping shoes failed, fall back to equipping sandals + var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/unathi) + player.equip_to_slot_or_del(new fallback_type(player), slot_shoes) - player.equip_to_slot_or_del(new new_uniform(player),slot_w_uniform) - player.equip_to_slot_or_del(new new_glasses(player),slot_glasses) - player.equip_to_slot_or_del(new new_helmet(player),slot_head) - player.equip_to_slot_or_del(new new_suit(player),slot_wear_suit) - equip_weapons(player) + player.equip_to_slot_or_del(new new_uniform(player),slot_w_uniform) + player.equip_to_slot_or_del(new new_glasses(player),slot_glasses) + player.equip_to_slot_or_del(new new_helmet(player),slot_head) + player.equip_to_slot_or_del(new new_suit(player),slot_wear_suit) + equip_weapons(player) var/obj/item/weapon/card/id/id = create_id("Visitor", player, equip = 0) id.name = "[player.real_name]'s Passport" @@ -293,21 +290,3 @@ var/datum/antagonist/raider/raiders var/grenade_type = pick(grenades) new grenade_type(ammobox) player.put_in_any_hand_if_possible(ammobox) - -/datum/antagonist/raider/proc/equip_vox(var/mob/living/carbon/human/player) - - var/uniform_type = pick(list(/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/under/vox/vox_casual)) - - player.equip_to_slot_or_del(new uniform_type(player), slot_w_uniform) - player.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(player), slot_shoes) // REPLACE THESE WITH CODED VOX ALTERNATIVES. - player.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow/vox(player), slot_gloves) // AS ABOVE. - player.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat/vox(player), slot_wear_mask) - player.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(player), slot_back) - player.equip_to_slot_or_del(new /obj/item/device/flashlight(player), slot_r_store) - - player.internal = locate(/obj/item/weapon/tank) in player.contents - if(istype(player.internal,/obj/item/weapon/tank) && player.internals) - player.internals.icon_state = "internal1" - - return 1 - diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index dcc7fa9df95..acc0bd3d8d1 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -5,6 +5,10 @@ var/datum/antagonist/traitor/traitors id = MODE_TRAITOR protected_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "Head of Security", "Captain") flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE + +/datum/antagonist/traitor/auto + id = MODE_AUTOTRAITOR + allow_latejoin = 1 /datum/antagonist/traitor/New() ..() diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 29d519355e8..b37342ced52 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -159,7 +159,7 @@ || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) if(!M.client && M.mind) - for(var/mob/dead/observer/ghost in player_list) + for(var/mob/observer/dead/ghost in player_list) if(ghost.mind == M.mind) ghost << "Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)" break diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm index 154078de3d6..14bb380a194 100644 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ b/code/game/gamemodes/cult/cultify/mob.dm @@ -6,7 +6,7 @@ /mob/proc/cultify() return -/mob/dead/cultify() +/mob/observer/dead/cultify() if(icon_state != "ghost-narsie") icon = 'icons/mob/mob.dmi' icon_state = "ghost-narsie" @@ -21,7 +21,7 @@ C << "The Geometer of Blood is overjoyed to be reunited with its followers, and accepts your body in sacrifice. As reward, you have been gifted with the shell of an Harvester.
Your tendrils can use and draw runes without need for a tome, your eyes can see beings through walls, and your mind can open any door. Use these assets to serve Nar-Sie and bring him any remaining living human in the world.
You can teleport yourself back to Nar-Sie along with any being under yourself at any time using your \"Harvest\" spell.
" dust() else if(client) - var/mob/dead/G = (ghostize()) + var/mob/observer/dead/G = (ghostize()) G.icon = 'icons/mob/mob.dmi' G.icon_state = "ghost-narsie" G.overlays = 0 diff --git a/code/game/gamemodes/cult/narsie.dm b/code/game/gamemodes/cult/narsie.dm index a3248a07e5b..f746e702977 100644 --- a/code/game/gamemodes/cult/narsie.dm +++ b/code/game/gamemodes/cult/narsie.dm @@ -298,7 +298,7 @@ var/global/list/narsie_list = list() acquire(pick(cultists)) return //no living cultists, pick a living human instead. - for(var/mob/dead/observer/ghost in player_list) + for(var/mob/observer/dead/ghost in player_list) if(!ghost.client) continue var/turf/pos = get_turf(ghost) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index d8c41eea427..569d034cade 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -343,8 +343,8 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa"," user.attack_log += text("\[[time_stamp()]\] Used [name] on [M.name] ([M.ckey])") msg_admin_attack("[user.name] ([user.ckey]) used [name] on [M.name] ([M.ckey]) (JMP)") - if(istype(M,/mob/dead)) - var/mob/dead/D = M + if(istype(M,/mob/observer/dead)) + var/mob/observer/dead/D = M D.manifest(user) return if(!istype(M)) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 06eb8fd7c29..88d850283cd 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -342,8 +342,8 @@ var/list/sacrificed = list() usr << "The sacrifical corpse is not dead. You must free it from this world of illusions before it may be used." return fizzle() - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in loc) + var/mob/observer/dead/ghost + for(var/mob/observer/dead/O in loc) if(!O.client) continue if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue ghost = O @@ -437,8 +437,8 @@ var/list/sacrificed = list() src = null if(usr.loc!=this_rune.loc) return this_rune.fizzle() - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in this_rune.loc) + var/mob/observer/dead/ghost + for(var/mob/observer/dead/O in this_rune.loc) if(!O.client) continue if(!O.MayRespawn()) continue if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue @@ -468,7 +468,8 @@ var/list/sacrificed = list() D.r_eyes = 200 D.g_eyes = 200 D.update_eyes() - D.underwear = 0 + D.underwear_top = 0 + D.underwear_bottom = 0 D.key = ghost.key cult.add_antagonist(D.mind) diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm index 2f12370f586..c25e3c55674 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm @@ -112,7 +112,7 @@ /turf/unsimulated/wall/supermatter/proc/Consume(var/mob/living/user) - if(istype(user,/mob/dead/observer)) + if(istype(user,/mob/observer)) return qdel(user) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 9f655c33f5a..4bf9e808ddc 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -350,11 +350,6 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is M << "
" M.add_ion_law("THE STATION IS [who2pref] [who2]") - if(botEmagChance) - for(var/obj/machinery/bot/bot in machines) - if(prob(botEmagChance)) - bot.emag_act(1) - /* var/apcnum = 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 2eb359da875..59327bd65e0 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -254,13 +254,13 @@ var/global/list/additional_antag_types = list() "suspected criminal operatives", "malfunctioning von Neumann probe swarms", "shadowy interlopers", - "a stranded Vox arkship", + "a stranded alien arkship", "haywire IPC constructs", "rogue Unathi exiles", "artifacts of eldritch horror", "a brain slug infestation", "killer bugs that lay eggs in the husks of the living", - "a deserted transport carrying xenomorph specimens", + "a deserted transport carrying alien specimens", "an emissary for the gestalt requesting a security detail", "a Tajaran slave rebellion", "radical Skrellian transevolutionaries", @@ -537,7 +537,7 @@ proc/display_roundstart_logout_report() continue //Dead continue //Happy connected client - for(var/mob/dead/observer/D in mob_list) + for(var/mob/observer/dead/D in mob_list) if(D.mind && (D.mind.original == L || D.mind.current == L)) if(L.stat == DEAD) if(L.suiciding) //Suicider diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index ea15bb327d3..54524e3cf8d 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -387,8 +387,8 @@ var/global/datum/controller/gameticker/ticker else Player << "You missed the crew transfer after the events on [station_name()] as [Player.real_name]." else - if(istype(Player,/mob/dead/observer)) - var/mob/dead/observer/O = Player + if(istype(Player,/mob/observer/dead)) + var/mob/observer/dead/O = Player if(!O.started_as_observer) Player << "You did not survive the events on [station_name()]..." else @@ -418,9 +418,9 @@ var/global/datum/controller/gameticker/ticker if (!robo.connected_ai) if (robo.stat != 2) - world << "[robo.name] (Played by: [robo.key]) survived as an AI-less borg! Its laws were:" + world << "[robo.name] (Played by: [robo.key]) survived as an AI-less synthetic! Its laws were:" else - world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a cyborg without an AI. Its laws were:" + world << "[robo.name] (Played by: [robo.key]) was unable to survive the rigors of being a synthetic without an AI. Its laws were:" if(robo) //How the hell do we lose robo between here and the world messages directly above this? robo.laws.show_laws(world) diff --git a/code/game/gamemodes/mixed/bughunt.dm b/code/game/gamemodes/mixed/bughunt.dm deleted file mode 100644 index 2accc6a9660..00000000000 --- a/code/game/gamemodes/mixed/bughunt.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/game_mode/bughunt - name = "Bughunt" - round_description = "A mercenary strike force is approaching the station to eradicate a xenomorph infestation!" - extended_round_description = "Mercenaries and xenomorphs spawn in this game mode." - config_tag = "bughunt" - required_players = 15 - required_players_secret = 25 - required_enemies = 1 - end_on_antag_death = 1 - antag_tags = list(MODE_XENOMORPH, MODE_DEATHSQUAD) - auto_recall_shuttle = 1 - ert_disabled = 1 - require_all_templates = 1 - votable = 0 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/infestation.dm b/code/game/gamemodes/mixed/infestation.dm index 71e9ebe180b..346f51967c8 100644 --- a/code/game/gamemodes/mixed/infestation.dm +++ b/code/game/gamemodes/mixed/infestation.dm @@ -1,12 +1,12 @@ /datum/game_mode/infestation name = "infestation" round_description = "There's something in the walls!" - extended_round_description = "Two alien antagonists (Xenomorphs, Cortical Borers or Changelings) may spawn during this round." + extended_round_description = "Two alien antagonists (Cortical Borers or Changelings) spawn during this round." config_tag = "infestation" required_players = 15 required_enemies = 5 end_on_antag_death = 1 - antag_tags = list(MODE_BORER, MODE_XENOMORPH, MODE_CHANGELING) + antag_tags = list(MODE_BORER, MODE_CHANGELING) require_all_templates = 1 votable = 0 diff --git a/code/game/gamemodes/mixed/intrigue.dm b/code/game/gamemodes/mixed/intrigue.dm new file mode 100644 index 00000000000..d08452e6dde --- /dev/null +++ b/code/game/gamemodes/mixed/intrigue.dm @@ -0,0 +1,12 @@ +/datum/game_mode/intrigue + name = "Intrigue" + 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 + end_on_antag_death = 0 + antag_tags = list(MODE_NINJA, MODE_AUTOTRAITOR) + round_autoantag = 1 + require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/mixed/lizard.dm b/code/game/gamemodes/mixed/lizard.dm new file mode 100644 index 00000000000..c61b9e60942 --- /dev/null +++ b/code/game/gamemodes/mixed/lizard.dm @@ -0,0 +1,11 @@ +/datum/game_mode/lizard + name = "lizard" + 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 + 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/visitors.dm b/code/game/gamemodes/mixed/visitors.dm new file mode 100644 index 00000000000..89099c98782 --- /dev/null +++ b/code/game/gamemodes/mixed/visitors.dm @@ -0,0 +1,11 @@ +/datum/game_mode/visitors + name = "Visitors" + 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_enemies = 2 + end_on_antag_death = 0 + antag_tags = list(MODE_WIZARD, MODE_NINJA) + require_all_templates = 1 \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index fb2979e4277..3393373d7bd 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -34,6 +34,7 @@ var/list/nuke_disks = list() /datum/game_mode/nuclear/declare_completion() if(config.objectives_disabled) + ..() return var/disk_rescued = 1 for(var/obj/item/weapon/disk/nuclear/D in world) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index ee56b9070a3..5a389e68f1f 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -21,6 +21,7 @@ /datum/game_mode/traitor/auto name = "autotraitor" config_tag = "autotraitor" + antag_tags = list(MODE_AUTOTRAITOR) round_autoantag = 1 required_players_secret = 3 antag_scaling_coeff = 5 diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index f1dc546aeaf..440cf2e22e8 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -28,7 +28,7 @@ var/list/whitelist = list() if (!text) log_misc("Failed to load config/alienwhitelist.txt") else - alien_whitelist = text2list(text, "\n") + alien_whitelist = splittext(text, "\n") //todo: admin aliens /proc/is_alien_whitelisted(mob/M, var/species) diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index e2a0aed826a..5f0860606b6 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -68,7 +68,7 @@ /obj/machinery/meter/examine(mob/user) var/t = "A gas flow meter. " - if(get_dist(user, src) > 3 && !(istype(user, /mob/living/silicon/ai) || istype(user, /mob/dead))) + if(get_dist(user, src) > 3 && !(istype(user, /mob/living/silicon/ai) || istype(user, /mob/observer/dead))) t += "You are too far away to read it." else if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm deleted file mode 100644 index 7e03826f055..00000000000 --- a/code/game/machinery/bots/bots.dm +++ /dev/null @@ -1,209 +0,0 @@ -// AI (i.e. game AI, not the AI player) controlled bots - -/obj/machinery/bot - icon = 'icons/obj/aibots.dmi' - layer = MOB_LAYER - light_range = 3 - use_power = 0 - var/obj/item/weapon/card/id/botcard // the ID card that the bot "holds" - var/on = 1 - var/health = 0 //do not forget to set health for your bot! - var/maxhealth = 0 - var/fire_dam_coeff = 1.0 - var/brute_dam_coeff = 1.0 - var/open = 0//Maint panel - var/locked = 1 - //var/emagged = 0 //Urist: Moving that var to the general /bot tree as it's used by most bots - -/obj/machinery/bot/proc/turn_on() - if(stat) return 0 - on = 1 - set_light(initial(light_range)) - return 1 - -/obj/machinery/bot/proc/turn_off() - on = 0 - set_light(0) - -/obj/machinery/bot/proc/explode() - qdel(src) - -/obj/machinery/bot/proc/healthcheck() - if (src.health <= 0) - src.explode() - -/obj/machinery/bot/emag_act(var/remaining_charges, var/user) - if(locked && !emagged) - locked = 0 - emagged = 1 - user << "You short out [src]'s maintenance hatch lock." - log_and_message_admins("emagged [src]'s maintenance hatch lock") - return 1 - - if(!locked && open && emagged == 1) - emagged = 2 - log_and_message_admins("emagged [src]'s inner circuits") - return 1 - -/obj/machinery/bot/examine(mob/user) - ..(user) - if (src.health < maxhealth) - if (src.health > maxhealth/3) - user << "[src]'s parts look loose." - else - user << "[src]'s parts look very loose!" - return - -/obj/machinery/bot/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/screwdriver)) - if(!locked) - open = !open - user << "Maintenance panel is now [src.open ? "opened" : "closed"]." - else if(istype(W, /obj/item/weapon/weldingtool)) - if(health < maxhealth) - if(open) - health = min(maxhealth, health+10) - user.visible_message("[user] repairs [src]!","You repair [src]!") - else - user << "Unable to repair with the maintenance panel closed." - else - user << "[src] does not need a repair." - else - if(hasvar(W,"force") && hasvar(W,"damtype")) - switch(W.damtype) - if("fire") - src.health -= W.force * fire_dam_coeff - if("brute") - src.health -= W.force * brute_dam_coeff - ..() - healthcheck() - else - ..() - -/obj/machinery/bot/bullet_act(var/obj/item/projectile/Proj) - if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - return - health -= Proj.damage - ..() - healthcheck() - -/obj/machinery/bot/ex_act(severity) - switch(severity) - if(1.0) - src.explode() - return - if(2.0) - src.health -= rand(5,10)*fire_dam_coeff - src.health -= rand(10,20)*brute_dam_coeff - healthcheck() - return - if(3.0) - if (prob(50)) - src.health -= rand(1,5)*fire_dam_coeff - src.health -= rand(1,5)*brute_dam_coeff - healthcheck() - return - return - -/obj/machinery/bot/emp_act(severity) - var/was_on = on - stat |= EMPED - var/obj/effect/overlay/pulse2 = PoolOrNew(/obj/effect/overlay, src.loc ) - pulse2.icon = 'icons/effects/effects.dmi' - pulse2.icon_state = "empdisable" - pulse2.name = "emp sparks" - pulse2.anchored = 1 - pulse2.set_dir(pick(cardinal)) - - spawn(10) - qdel(pulse2) - if (on) - turn_off() - spawn(severity*300) - stat &= ~EMPED - if (was_on) - turn_on() - - -/obj/machinery/bot/attack_ai(mob/user as mob) - src.attack_hand(user) - -/obj/machinery/bot/attack_hand(var/mob/living/carbon/human/user) - - if(!istype(user)) - return ..() - - if(user.species.can_shred(user)) - src.health -= rand(15,30)*brute_dam_coeff - src.visible_message("[user] has slashed [src]!") - playsound(src.loc, 'sound/weapons/slice.ogg', 25, 1, -1) - if(prob(10)) - new /obj/effect/decal/cleanable/blood/oil(src.loc) - healthcheck() - -/******************************************************************/ -// Navigation procs -// Used for A-star pathfinding - - -// Returns the surrounding cardinal turfs with open links -// Including through doors openable with the ID -/turf/proc/CardinalTurfsWithAccess(var/obj/item/weapon/card/id/ID) - var/L[] = new() - - // for(var/turf/simulated/t in oview(src,1)) - - for(var/d in cardinal) - var/turf/simulated/T = get_step(src, d) - if(istype(T) && !T.density) - if(!LinkBlockedWithAccess(src, T, ID)) - L.Add(T) - return L - - -// Returns true if a link between A and B is blocked -// Movement through doors allowed if ID has access -/proc/LinkBlockedWithAccess(turf/A, turf/B, obj/item/weapon/card/id/ID) - - if(A == null || B == null) return 1 - var/adir = get_dir(A,B) - var/rdir = get_dir(B,A) - if((adir & (NORTH|SOUTH)) && (adir & (EAST|WEST))) // diagonal - var/iStep = get_step(A,adir&(NORTH|SOUTH)) - if(!LinkBlockedWithAccess(A,iStep, ID) && !LinkBlockedWithAccess(iStep,B,ID)) - return 0 - - var/pStep = get_step(A,adir&(EAST|WEST)) - if(!LinkBlockedWithAccess(A,pStep,ID) && !LinkBlockedWithAccess(pStep,B,ID)) - return 0 - return 1 - - if(DirBlockedWithAccess(A,adir, ID)) - return 1 - - if(DirBlockedWithAccess(B,rdir, ID)) - return 1 - - for(var/obj/O in B) - if(O.density && !istype(O, /obj/machinery/door) && !(O.flags & ON_BORDER)) - return 1 - - return 0 - -// Returns true if direction is blocked from loc -// Checks doors against access with given ID -/proc/DirBlockedWithAccess(turf/loc,var/dir,var/obj/item/weapon/card/id/ID) - for(var/obj/structure/window/D in loc) - if(!D.density) continue - if(D.dir == SOUTHWEST) return 1 - if(D.dir == dir) return 1 - - for(var/obj/machinery/door/D in loc) - if(!D.density) continue - if(istype(D, /obj/machinery/door/window)) - if( dir & D.dir ) return !D.check_access(ID) - - //if((dir & SOUTH) && (D.dir & (EAST|WEST))) return !D.check_access(ID) - //if((dir & EAST ) && (D.dir & (NORTH|SOUTH))) return !D.check_access(ID) - else return !D.check_access(ID) // it's a real, air blocking door - return 0 diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm deleted file mode 100644 index 27e6cb1a9da..00000000000 --- a/code/game/machinery/bots/mulebot.dm +++ /dev/null @@ -1,887 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -// Mulebot - carries crates around for Quartermaster -// Navigates via floor navbeacons -// Remote Controlled from QM's PDA - - -/obj/machinery/bot/mulebot - name = "Mulebot" - desc = "A Multiple Utility Load Effector bot." - icon_state = "mulebot0" - layer = MOB_LAYER - density = 1 - anchored = 1 - animate_movement=1 - health = 150 //yeah, it's tougher than ed209 because it is a big metal box with wheels --rastaf0 - maxhealth = 150 - fire_dam_coeff = 0.7 - brute_dam_coeff = 0.5 - var/atom/movable/load = null // the loaded crate (usually) - var/beacon_freq = 1400 - var/control_freq = BOT_FREQ - - suffix = "" - - var/turf/target // this is turf to navigate to (location of beacon) - var/loaddir = 0 // this the direction to unload onto/load from - var/new_destination = "" // pending new destination (waiting for beacon response) - var/destination = "" // destination description - var/home_destination = "" // tag of home beacon - req_access = list(access_cargo) // added robotics access so assembly line drop-off works properly -veyveyr //I don't think so, Tim. You need to add it to the MULE's hidden robot ID card. -NEO - var/path[] = new() - - var/mode = 0 //0 = idle/ready - //1 = loading/unloading - //2 = moving to deliver - //3 = returning to home - //4 = blocked - //5 = computing navigation - //6 = waiting for nav computation - //7 = no destination beacon found (or no route) - - var/blockcount = 0 //number of times retried a blocked path - var/reached_target = 1 //true if already reached the target - - var/refresh = 1 // true to refresh dialogue - var/auto_return = 1 // true if auto return to home beacon after unload - var/auto_pickup = 1 // true if auto-pickup at beacon - - var/obj/item/weapon/cell/cell - // the installed power cell - - // constants for internal wiring bitflags - var/datum/wires/mulebot/wires = null - - var/bloodiness = 0 // count of bloodiness - -/obj/machinery/bot/mulebot/New() - ..() - wires = new(src) - botcard = new(src) - botcard.access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_qm, access_mining, access_mining_station) - cell = new(src) - cell.charge = 2000 - cell.maxcharge = 2000 - - spawn(5) // must wait for map loading to finish - if(radio_controller) - radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT) - radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) - - var/count = 0 - for(var/obj/machinery/bot/mulebot/other in world) - count++ - if(!suffix) - suffix = "#[count]" - name = "Mulebot ([suffix])" - -/obj/machinery/bot/mulebot/Destroy() - unload(0) - qdel(wires) - wires = null - if(radio_controller) - radio_controller.remove_object(src,beacon_freq) - radio_controller.remove_object(src,control_freq) - return ..() - -// attack by item -// emag : lock/unlock, -// screwdriver: open/close hatch -// cell: insert it -// other: chance to knock rider off bot -/obj/machinery/bot/mulebot/attackby(var/obj/item/I, var/mob/user) - if(istype(I,/obj/item/weapon/cell) && open && !cell) - var/obj/item/weapon/cell/C = I - user.drop_item() - C.loc = src - cell = C - updateDialog() - else if(istype(I,/obj/item/weapon/screwdriver)) - if(locked) - user << "The maintenance hatch cannot be opened or closed while the controls are locked." - return - - open = !open - if(open) - src.visible_message("[user] opens the maintenance hatch of [src]", "You open [src]'s maintenance hatch.") - on = 0 - icon_state="mulebot-hatch" - else - src.visible_message("[user] closes the maintenance hatch of [src]", "You close [src]'s maintenance hatch.") - icon_state = "mulebot0" - - updateDialog() - else if (istype(I, /obj/item/weapon/wrench)) - if (src.health < maxhealth) - src.health = min(maxhealth, src.health+25) - user.visible_message( - "\The [user] repairs \the [src]!", - "You repair \the [src]!" - ) - else - user << "[src] does not need a repair!" - else if(load && ismob(load)) // chance to knock off rider - if(prob(1+I.force * 2)) - unload(0) - user.visible_message("[user] knocks [load] off [src] with \the [I]!", "You knock [load] off [src] with \the [I]!") - else - user << "You hit [src] with \the [I] but to no effect." - else - ..() - return - -/obj/machinery/bot/mulebot/emag_act(var/remaining_charges, var/user) - locked = !locked - user << "You [locked ? "lock" : "unlock"] the mulebot's controls!" - flick("mulebot-emagged", src) - playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 0) - return 1 - -/obj/machinery/bot/mulebot/ex_act(var/severity) - unload(0) - switch(severity) - if(2) - BITRESET(wires, rand(0,9)) - BITRESET(wires, rand(0,9)) - BITRESET(wires, rand(0,9)) - if(3) - BITRESET(wires, rand(0,9)) - ..() - return - -/obj/machinery/bot/mulebot/bullet_act() - if(prob(50) && !isnull(load)) - unload(0) - if(prob(25)) - src.visible_message("Something shorts out inside [src]!") - var/index = 1<< (rand(0,9)) - if(wires & index) - wires &= ~index - else - wires |= index - ..() - - -/obj/machinery/bot/mulebot/attack_ai(var/mob/user) - user.set_machine(src) - interact(user, 1) - -/obj/machinery/bot/mulebot/attack_hand(var/mob/user) - . = ..() - if (.) - return - user.set_machine(src) - interact(user, 0) - -/obj/machinery/bot/mulebot/interact(var/mob/user, var/ai=0) - var/dat - dat += "Multiple Utility Load Effector Mk. III

" - dat += "ID: [suffix]
" - dat += "Power: [on ? "On" : "Off"]
" - - if(!open) - - dat += "Status: " - switch(mode) - if(0) - dat += "Ready" - if(1) - dat += "Loading/Unloading" - if(2) - dat += "Navigating to Delivery Location" - if(3) - dat += "Navigating to Home" - if(4) - dat += "Waiting for clear path" - if(5,6) - dat += "Calculating navigation path" - if(7) - dat += "Unable to locate destination" - - - dat += "
Current Load: [load ? load.name : "none"]
" - dat += "Destination: [!destination ? "none" : destination]
" - dat += "Power level: [cell ? cell.percent() : 0]%
" - - if(locked && !ai) - dat += "
Controls are locked (unlock)" - else - dat += "
Controls are unlocked (lock)

" - - dat += "Toggle Power
" - dat += "Stop
" - dat += "Proceed
" - dat += "Return to Home
" - dat += "Set Destination
" - dat += "Set Bot ID
" - dat += "Set Home
" - dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
" - dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
" - - if(load) - dat += "Unload Now
" - dat += "
The maintenance hatch is closed.
" - - else - if(!ai) - dat += "The maintenance hatch is open.

" - dat += "Power cell: " - if(cell) - dat += "Installed
" - else - dat += "Removed
" - - dat += wires.GetInteractWindow() - else - dat += "The bot is in maintenance mode and cannot be controlled.
" - - user << browse("Mulebot [suffix ? "([suffix])" : ""][dat]", "window=mulebot;size=350x500") - onclose(user, "mulebot") - return - -/obj/machinery/bot/mulebot/Topic(href, href_list) - if(..()) - return - if (usr.stat) - return - if ((in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - - switch(href_list["op"]) - if("lock", "unlock") - if(src.allowed(usr)) - locked = !locked - updateDialog() - else - usr << "Access denied." - return - if("power") - if (src.on) - turn_off() - else if (cell && !open) - if (!turn_on()) - usr << "You can't switch on [src]." - return - else - return - visible_message("[usr] switches [on ? "on" : "off"] [src].") - updateDialog() - - - if("cellremove") - if(open && cell && !usr.get_active_hand()) - cell.update_icon() - usr.put_in_active_hand(cell) - cell.add_fingerprint(usr) - cell = null - - usr.visible_message("[usr] removes the power cell from [src].", "You remove the power cell from [src].") - updateDialog() - - if("cellinsert") - if(open && !cell) - var/obj/item/weapon/cell/C = usr.get_active_hand() - if(istype(C)) - usr.drop_item() - cell = C - C.loc = src - C.add_fingerprint(usr) - - usr.visible_message("[usr] inserts a power cell into [src].", "You insert the power cell into [src].") - updateDialog() - - - if("stop") - if(mode >=2) - mode = 0 - updateDialog() - - if("go") - if(mode == 0) - start() - updateDialog() - - if("home") - if(mode == 0 || mode == 2) - start_home() - updateDialog() - - if("destination") - refresh=0 - var/new_dest - var/list/beaconlist = new() - for(var/obj/machinery/navbeacon/N in navbeacons) - beaconlist.Add(N.location) - if(beaconlist.len) - new_dest = input("Select new destination tag", "Mulebot [suffix ? "([suffix])" : ""]", destination) in beaconlist - else - alert("No destination beacons available.") - refresh=1 - if(new_dest) - set_destination(new_dest) - - - if("setid") - refresh=0 - var/new_id = sanitize(input("Enter new bot ID", "Mulebot [suffix ? "([suffix])" : ""]", suffix) as text|null, MAX_NAME_LEN) - refresh=1 - if(new_id) - suffix = new_id - name = "Mulebot ([suffix])" - updateDialog() - - if("sethome") - refresh=0 - var/new_home = input("Enter new home tag", "Mulebot [suffix ? "([suffix])" : ""]", home_destination) as text|null - refresh=1 - if(new_home) - home_destination = new_home - updateDialog() - - if("unload") - if(load && mode !=1) - if(loc == target) - unload(loaddir) - else - unload(0) - - if("autoret") - auto_return = !auto_return - - if("autopick") - auto_pickup = !auto_pickup - - if("close") - usr.unset_machine() - usr << browse(null,"window=mulebot") - - updateDialog() - //src.updateUsrDialog() - else - usr << browse(null, "window=mulebot") - usr.unset_machine() - return - - - -// returns true if the bot has power -/obj/machinery/bot/mulebot/proc/has_power() - return !open && cell && cell.charge>0 && wires.HasPower() - -// mousedrop a crate to load the bot -// can load anything if emagged - -/obj/machinery/bot/mulebot/MouseDrop_T(var/atom/movable/C, mob/user) - - if(user.stat) - return - - if (!on || !istype(C)|| C.anchored || get_dist(user, src) > 1 || get_dist(src,C) > 1 ) - return - - if(load) - return - - load(C) - - -// called to load a crate -/obj/machinery/bot/mulebot/proc/load(var/atom/movable/C) - if(wires.LoadCheck() && !istype(C,/obj/structure/closet/crate)) - src.visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - return // if not emagged, only allow crates to be loaded - - //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 - if(!isturf(C.loc)) //To prevent the loading from stuff from someone's inventory, which wouldn't get handled properly. - return - - if(get_dist(C, src) > 1 || load || !on) - return - for(var/obj/structure/plasticflaps/P in src.loc)//Takes flaps into account - if(!CanPass(C,P)) - return - mode = 1 - - // if a create, close before loading - var/obj/structure/closet/crate/crate = C - if(istype(crate)) - crate.close() - - C.loc = src.loc - sleep(2) - if(C.loc != src.loc) //To prevent you from going onto more thano ne bot. - return - C.loc = src - load = C - - C.pixel_y += 9 - if(C.layer < layer) - C.layer = layer + 0.1 - overlays += C - - if(ismob(C)) - var/mob/M = C - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - - mode = 0 - send_status() - -// called to unload the bot -// argument is optional direction to unload -// if zero, unload at bot's location -/obj/machinery/bot/mulebot/proc/unload(var/dirn = 0) - if(!load) - return - - mode = 1 - overlays.Cut() - - load.loc = src.loc - load.pixel_y -= 9 - load.layer = initial(load.layer) - if(ismob(load)) - var/mob/M = load - if(M.client) - M.client.perspective = MOB_PERSPECTIVE - M.client.eye = src - - - if(dirn) - var/turf/T = src.loc - T = get_step(T,dirn) - if(CanPass(load,T))//Can't get off onto anything that wouldn't let you pass normally - step(load, dirn) - else - load.loc = src.loc//Drops you right there, so you shouldn't be able to get yourself stuck - - load = null - - // in case non-load items end up in contents, dump every else too - // this seems to happen sometimes due to race conditions - // with items dropping as mobs are loaded - - for(var/atom/movable/AM in src) - if(AM == cell || AM == botcard) continue - - AM.loc = src.loc - AM.layer = initial(AM.layer) - AM.pixel_y = initial(AM.pixel_y) - if(ismob(AM)) - var/mob/M = AM - if(M.client) - M.client.perspective = MOB_PERSPECTIVE - M.client.eye = src - mode = 0 - - -/obj/machinery/bot/mulebot/process() - if(!has_power()) - on = 0 - return - if(on) - var/speed = (wires.Motor1() ? 1:0) + (wires.Motor2() ? 2:0) - //world << "speed: [speed]" - switch(speed) - if(0) - // do nothing - if(1) - process_bot() - spawn(2) - process_bot() - sleep(2) - process_bot() - sleep(2) - process_bot() - sleep(2) - process_bot() - if(2) - process_bot() - spawn(4) - process_bot() - if(3) - process_bot() - - if(refresh) updateDialog() - -/obj/machinery/bot/mulebot/proc/process_bot() - //if(mode) world << "Mode: [mode]" - switch(mode) - if(0) // idle - icon_state = "mulebot0" - return - if(1) // loading/unloading - return - if(2,3,4) // navigating to deliver,home, or blocked - - if(loc == target) // reached target - at_target() - return - - else if(path.len > 0 && target) // valid path - - var/turf/next = path[1] - reached_target = 0 - if(next == loc) - path -= next - return - - - if(istype( next, /turf/simulated)) - //world << "at ([x],[y]) moving to ([next.x],[next.y])" - - - if(bloodiness) - var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - var/newdir = get_dir(next, loc) - if(newdir == dir) - B.set_dir(newdir) - else - newdir = newdir | dir - if(newdir == 3) - newdir = 1 - else if(newdir == 12) - newdir = 4 - B.set_dir(newdir) - bloodiness-- - - - - var/moved = step_towards(src, next) // attempt to move - if(cell) cell.use(1) - if(moved) // successful move - //world << "Successful move." - blockcount = 0 - path -= loc - - - if(mode==4) - spawn(1) - send_status() - - if(destination == home_destination) - mode = 3 - else - mode = 2 - - else // failed to move - - //world << "Unable to move." - - - - blockcount++ - mode = 4 - if(blockcount == 3) - src.visible_message("[src] makes an annoyed buzzing sound", "You hear an electronic buzzing sound.") - playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) - - if(blockcount > 5) // attempt 5 times before recomputing - // find new path excluding blocked turf - src.visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - - spawn(2) - calc_path(next) - if(path.len > 0) - src.visible_message("[src] makes a delighted ping!", "You hear a ping.") - playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - mode = 4 - mode =6 - return - return - else - src.visible_message("[src] makes an annoyed buzzing sound", "You hear an electronic buzzing sound.") - playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) - //world << "Bad turf." - mode = 5 - return - else - //world << "No path." - mode = 5 - return - - if(5) // calculate new path - //world << "Calc new path." - mode = 6 - spawn(0) - - calc_path() - - if(path.len > 0) - blockcount = 0 - mode = 4 - src.visible_message("[src] makes a delighted ping!", "You hear a ping.") - playsound(src.loc, 'sound/machines/ping.ogg', 50, 0) - - else - src.visible_message("[src] makes a sighing buzz.", "You hear an electronic buzzing sound.") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) - - mode = 7 - //if(6) - //world << "Pending path calc." - //if(7) - //world << "No dest / no route." - return - - -// calculates a path to the current destination -// given an optional turf to avoid -/obj/machinery/bot/mulebot/proc/calc_path(var/turf/avoid = null) - src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, id=botcard, exclude=avoid) - if(!src.path) - src.path = list() - - -// sets the current destination -// signals all beacons matching the delivery code -// beacons will return a signal giving their locations -/obj/machinery/bot/mulebot/proc/set_destination(var/new_dest) - spawn(0) - new_destination = new_dest - post_signal(beacon_freq, "findbeacon", "delivery") - updateDialog() - -// starts bot moving to current destination -/obj/machinery/bot/mulebot/proc/start() - if(destination == home_destination) - mode = 3 - else - mode = 2 - icon_state = "mulebot[wires.MobAvoid()]" - -// starts bot moving to home -// sends a beacon query to find -/obj/machinery/bot/mulebot/proc/start_home() - spawn(0) - set_destination(home_destination) - mode = 4 - icon_state = "mulebot[wires.MobAvoid()]" - -// called when bot reaches current target -/obj/machinery/bot/mulebot/proc/at_target() - if(!reached_target) - src.visible_message("[src] makes a chiming sound!", "You hear a chime.") - playsound(src.loc, 'sound/machines/chime.ogg', 50, 0) - reached_target = 1 - - if(load) // if loaded, unload at target - unload(loaddir) - else - // not loaded - if(auto_pickup) // find a crate - var/atom/movable/AM - if(!wires.LoadCheck()) // if emagged, load first unanchored thing we find - for(var/atom/movable/A in get_step(loc, loaddir)) - if(!A.anchored) - AM = A - break - else // otherwise, look for crates only - AM = locate(/obj/structure/closet/crate) in get_step(loc,loaddir) - if(AM) - load(AM) - // whatever happened, check to see if we return home - - if(auto_return && destination != home_destination) - // auto return set and not at home already - start_home() - mode = 4 - else - mode = 0 // otherwise go idle - - send_status() // report status to anyone listening - - return - -// called when bot bumps into anything -/obj/machinery/bot/mulebot/Bump(var/atom/obs) - if(!wires.MobAvoid()) //usually just bumps, but if avoidance disabled knock over mobs - var/mob/M = obs - if(ismob(M)) - if(istype(M,/mob/living/silicon/robot)) - src.visible_message("[src] bumps into [M]!") - else - src.visible_message("[src] knocks over [M]!") - M.stop_pulling() - M.Stun(8) - M.Weaken(5) - M.lying = 1 - ..() - -// called from mob/living/carbon/human/Crossed() -// when mulebot is in the same loc -/obj/machinery/bot/mulebot/proc/RunOver(var/mob/living/carbon/human/H) - src.visible_message("[src] drives over [H]!") - playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - - var/damage = rand(5,15) - H.apply_damage(2*damage, BRUTE, BP_HEAD) - H.apply_damage(2*damage, BRUTE, BP_TORSO) - H.apply_damage(0.5*damage, BRUTE, BP_L_LEG) - H.apply_damage(0.5*damage, BRUTE, BP_R_LEG) - H.apply_damage(0.5*damage, BRUTE, BP_L_ARM) - H.apply_damage(0.5*damage, BRUTE, BP_R_ARM) - - blood_splatter(src,H,1) - bloodiness += 4 - -// player on mulebot attempted to move -/obj/machinery/bot/mulebot/relaymove(var/mob/user) - if(user.stat) - return - if(load == user) - unload(0) - return - -// receive a radio signal -// used for control and beacon reception - -/obj/machinery/bot/mulebot/receive_signal(datum/signal/signal) - - if(!on) - return - - var/recv = signal.data["command"] - // process all-bot input - if(recv=="bot_status" && wires.RemoteRX()) - send_status() - - - recv = signal.data["command [suffix]"] - if(wires.RemoteRX()) - // process control input - switch(recv) - if("stop") - mode = 0 - return - - if("go") - start() - return - - if("target") - set_destination(signal.data["destination"] ) - return - - if("unload") - if(loc == target) - unload(loaddir) - else - unload(0) - return - - if("home") - start_home() - return - - if("bot_status") - send_status() - return - - if("autoret") - auto_return = text2num(signal.data["value"]) - return - - if("autopick") - auto_pickup = text2num(signal.data["value"]) - return - - // receive response from beacon - recv = signal.data["beacon"] - if(wires.BeaconRX()) - if(recv == new_destination) // if the recvd beacon location matches the set destination - // the we will navigate there - destination = new_destination - target = signal.source.loc - var/direction = signal.data["dir"] // this will be the load/unload dir - if(direction) - loaddir = text2num(direction) - else - loaddir = 0 - icon_state = "mulebot[wires.MobAvoid()]" - calc_path() - updateDialog() - -// send a radio signal with a single data key/value pair -/obj/machinery/bot/mulebot/proc/post_signal(var/freq, var/key, var/value) - post_signal_multiple(freq, list("[key]" = value) ) - -// send a radio signal with multiple data key/values -/obj/machinery/bot/mulebot/proc/post_signal_multiple(var/freq, var/list/keyval) - - if(freq == beacon_freq && !wires.BeaconRX()) - return - if(freq == control_freq && !wires.RemoteTX()) - return - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(freq) - - if(!frequency) return - - - - var/datum/signal/signal = new() - signal.source = src - signal.transmission_method = 1 - //for(var/key in keyval) - // signal.data[key] = keyval[key] - signal.data = keyval - //world << "sent [key],[keyval[key]] on [freq]" - if (signal.data["findbeacon"]) - frequency.post_signal(src, signal, filter = RADIO_NAVBEACONS) - else if (signal.data["type"] == "mulebot") - frequency.post_signal(src, signal, filter = RADIO_MULEBOT) - else - frequency.post_signal(src, signal) - -// signals bot status etc. to controller -/obj/machinery/bot/mulebot/proc/send_status() - var/list/kv = list( - "type" = "mulebot", - "name" = suffix, - "loca" = (loc ? loc.loc : "Unknown"), // somehow loc can be null and cause a runtime - Quarxink - "mode" = mode, - "powr" = (cell ? cell.percent() : 0), - "dest" = destination, - "home" = home_destination, - "load" = load, - "retn" = auto_return, - "pick" = auto_pickup, - ) - post_signal_multiple(control_freq, kv) - -/obj/machinery/bot/mulebot/emp_act(severity) - if (cell) - cell.emp_act(severity) - if(load) - load.emp_act(severity) - ..() - - -/obj/machinery/bot/mulebot/explode() - src.visible_message("[src] blows apart!", 1) - var/turf/Tsec = get_turf(src) - - new /obj/item/device/assembly/prox_sensor(Tsec) - PoolOrNew(/obj/item/stack/rods, Tsec) - PoolOrNew(/obj/item/stack/rods, Tsec) - new /obj/item/stack/cable_coil/cut(Tsec) - if (cell) - cell.loc = Tsec - cell.update_icon() - cell = null - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - new /obj/effect/decal/cleanable/blood/oil(src.loc) - unload(0) - qdel(src) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index dd88be221d4..cb0d95c1df2 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -118,7 +118,7 @@ add_hiddenprint(user) destroy() -/obj/machinery/camera/attackby(obj/W as obj, mob/living/user as mob) +/obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) update_coverage() // DECONSTRUCTION if(isscrewdriver(W)) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 087d4a9025f..e35b0953fec 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -85,7 +85,7 @@ usr << "No input found please hang up and try your call again." return - var/list/tempnetwork = text2list(input, ",") + var/list/tempnetwork = splittext(input, ",") if(tempnetwork.len < 1) usr << "No network found please hang up and try your call again." return diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 7d77de761f8..a06b22927db 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -87,7 +87,7 @@ if(ckey(clonemind.key) != R.ckey) return 0 else - for(var/mob/dead/observer/G in player_list) + for(var/mob/observer/dead/G in player_list) if(G.ckey == R.ckey) if(G.can_reenter_corpse) break diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 3090e7ab7af..e1c6658ab44 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -58,7 +58,7 @@ var/cam = C.nano_structure() cameras[++cameras.len] = cam - camera_cache=list2json(cameras) + camera_cache=json_encode(cameras) if(current) data["current"] = current.nano_structure() diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index b949e284b87..3bc9a17fce0 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -41,13 +41,13 @@ if(scan) usr << "You remove \the [scan] from \the [src]." - scan.loc = get_turf(src) + scan.forceMove(get_turf(src)) if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) usr.put_in_hands(scan) scan = null else if(modify) usr << "You remove \the [modify] from \the [src]." - modify.loc = get_turf(src) + modify.forceMove(get_turf(src)) if(!usr.get_active_hand() && istype(usr,/mob/living/carbon/human)) usr.put_in_hands(modify) modify = null @@ -60,10 +60,12 @@ return ..() if(!scan && (access_change_ids in id_card.access) && user.unEquip(id_card)) - id_card.loc = src + user.drop_item() + id_card.forceMove(src) scan = id_card else if(!modify) - id_card.loc = src + user.drop_item() + id_card.forceMove(src) modify = id_card nanomanager.update_uis(src) @@ -146,34 +148,34 @@ data_core.manifest_modify(modify.registered_name, modify.assignment) modify.name = text("[modify.registered_name]'s ID Card ([modify.assignment])") if(ishuman(usr)) - modify.loc = usr.loc + modify.forceMove(get_turf(src)) if(!usr.get_active_hand()) usr.put_in_hands(modify) modify = null else - modify.loc = loc + modify.forceMove(get_turf(src)) modify = null else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id) && usr.unEquip(I)) - I.loc = src + I.forceMove(src) modify = I if ("scan") if (scan) if(ishuman(usr)) - scan.loc = usr.loc + scan.forceMove(get_turf(src)) if(!usr.get_active_hand()) usr.put_in_hands(scan) scan = null else - scan.loc = src.loc + scan.forceMove(get_turf(src)) scan = null else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) usr.drop_item() - I.loc = src + I.forceMove(src) scan = I if("access") diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index c8492bcbbae..a657d881a8b 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -78,34 +78,23 @@ crew_announcement.announcer = "" if("swipeidseclevel") - var/mob/M = usr - var/obj/item/weapon/card/id/I = M.get_active_hand() - if (istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/pda = I - I = pda.id - if (I && istype(I)) - if(access_captain in I.access || access_heads in I.access) //Let heads change the alert level. - var/old_level = security_level - if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this - set_security_level(tmp_alertlevel) - if(security_level != old_level) - //Only notify the admins if an actual change happened - log_game("[key_name(usr)] has changed the security level to [get_security_level()].") - message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") - switch(security_level) - if(SEC_LEVEL_GREEN) - feedback_inc("alert_comms_green",1) - if(SEC_LEVEL_BLUE) - feedback_inc("alert_comms_blue",1) - tmp_alertlevel = 0 - else: - usr << "You are not authorized to do this." - tmp_alertlevel = 0 + if(src.authenticated) //Let heads change the alert level. + var/old_level = security_level + if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN + if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN + if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this + set_security_level(tmp_alertlevel) + if(security_level != old_level) + //Only notify the admins if an actual change happened + log_game("[key_name(usr)] has changed the security level to [get_security_level()].") + message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") + switch(security_level) + if(SEC_LEVEL_GREEN) + feedback_inc("alert_comms_green",1) + if(SEC_LEVEL_BLUE) + feedback_inc("alert_comms_blue",1) + tmp_alertlevel = 0 state = STATE_DEFAULT - else - usr << "You need to swipe your ID." if("announce") if(src.authenticated==2) @@ -368,7 +357,7 @@ if(STATE_CONFIRM_LEVEL) dat += "Current alert level: [get_security_level()]
" dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]
" - dat += "Swipe ID to confirm change.
" + dat += "OK to confirm change.
" dat += "
\[ [(src.state != STATE_DEFAULT) ? "Main Menu | " : ""]Close \]" user << browse(dat, "window=communications;size=400x500") diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 149c9c62540..132f6625674 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -58,7 +58,7 @@ return // Antagonistic cyborgs? Left here for downstream - if(target.mind && target.mind.special_role && target.emagged) + if(target.mind && (target.mind.special_role || target.emagged)) target << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered." target.ResetSecurityCodes() else @@ -101,6 +101,7 @@ else target.canmove = !target.canmove target.lockcharge = !target.canmove //when canmove is 1, lockcharge should be 0 + target.lockdown = !target.canmove if (target.lockcharge) target << "You have been locked down!" else @@ -115,8 +116,8 @@ if(!target || !istype(target)) return - // Antag AI checks - if(!istype(user, /mob/living/silicon/ai) || !(user.mind.special_role && user.mind.original == user)) + // Antag synthetic checks + if(!istype(user, /mob/living/silicon) || !(user.mind.special_role && user.mind.original == user)) user << "Access Denied" return @@ -131,7 +132,7 @@ if(!target || !istype(target)) return - message_admins("[key_name_admin(usr)] emagged [target.name] using robotic console!") + message_admins("[key_name_admin(usr)] emagged [target.name] using the robotic console!") log_game("[key_name(usr)] emagged [target.name] using robotic console!") target.emagged = 1 target << "Failsafe protocols overriden. New tools available." @@ -202,8 +203,12 @@ robot["module"] = R.module ? R.module.name : "None" robot["master_ai"] = R.connected_ai ? R.connected_ai.name : "None" robot["hackable"] = 0 + //Antag synths should be able to hack themselves and see their hacked status. + if(operator && isrobot(operator) && (operator.mind.special_role && operator.mind.original == operator) && (operator == R)) + robot["hacked"] = R.emagged ? 1 : 0 + robot["hackable"] = R.emagged? 0 : 1 // Antag AIs know whether linked cyborgs are hacked or not. - if(operator && istype(operator, /mob/living/silicon/ai) && (R.connected_ai == operator) && (operator.mind.special_role && operator.mind.original == operator)) + if(operator && isAI(operator) && (R.connected_ai == operator) && (operator.mind.special_role && operator.mind.original == operator)) robot["hacked"] = R.emagged ? 1 : 0 robot["hackable"] = R.emagged? 0 : 1 robots.Add(list(robot)) diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 8747f7750cc..2624c4ff287 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -286,7 +286,7 @@ What a mess.*/ return Perp = new/list() t1 = lowertext(t1) - var/list/components = text2list(t1, " ") + var/list/components = splittext(t1, " ") if(components.len > 5) return //Lets not let them search too greedily. for(var/datum/data/record/R in data_core.general) diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 8e57548d6e2..1fa38c4a719 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -219,7 +219,7 @@ What a mess.*/ return Perp = new/list() t1 = lowertext(t1) - var/list/components = text2list(t1, " ") + var/list/components = splittext(t1, " ") if(components.len > 5) return //Lets not let them search too greedily. for(var/datum/data/record/R in data_core.general) diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm index a8a4591ee28..224e2016280 100644 --- a/code/game/machinery/computer/supply.dm +++ b/code/game/machinery/computer/supply.dm @@ -109,7 +109,7 @@ reqform.info += "RANK: [idrank]
" reqform.info += "REASON: [reason]
" reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
" + reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)]
" reqform.info += "CONTENTS:
" reqform.info += P.manifest reqform.info += "
" @@ -310,7 +310,7 @@ reqform.info += "RANK: [idrank]
" reqform.info += "REASON: [reason]
" reqform.info += "SUPPLY CRATE TYPE: [P.name]
" - reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
" + reqform.info += "ACCESS RESTRICTION: [get_access_desc(P.access)]
" reqform.info += "CONTENTS:
" reqform.info += P.manifest reqform.info += "
" diff --git a/code/game/machinery/computer3/computers/security.dm b/code/game/machinery/computer3/computers/security.dm index 0c58ea67284..59bb46fd696 100644 --- a/code/game/machinery/computer3/computers/security.dm +++ b/code/game/machinery/computer3/computers/security.dm @@ -305,7 +305,7 @@ What a mess.*/ return Perp = new/list() t1 = lowertext(t1) - var/list/components = text2list(t1, " ") + var/list/components = splittext(t1, " ") if(components.len > 5) return //Lets not let them search too greedily. for(var/datum/data/record/R in data_core.general) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 70dad044a20..ac2c156fa40 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -103,13 +103,6 @@ bumpopen(M) return - if(istype(AM, /obj/machinery/bot)) - var/obj/machinery/bot/bot = AM - if(src.check_access(bot.botcard)) - if(density) - open() - return - if(istype(AM, /mob/living/bot)) var/mob/living/bot/bot = AM if(src.check_access(bot.botcard)) diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm index d03bffcbae5..0cffb34dc6f 100644 --- a/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm +++ b/code/game/machinery/embedded_controller/airlock_docking_controller_multi.dm @@ -2,21 +2,21 @@ //this is the master controller, that things will try to dock with. /obj/machinery/embedded_controller/radio/docking_port_multi name = "docking port controller" - + var/child_tags_txt var/child_names_txt var/list/child_names = list() - + var/datum/computer/file/embedded_program/docking/multi/docking_program /obj/machinery/embedded_controller/radio/docking_port_multi/initialize() ..() docking_program = new/datum/computer/file/embedded_program/docking/multi(src) program = docking_program - - var/list/names = text2list(child_names_txt, ";") - var/list/tags = text2list(child_tags_txt, ";") - + + var/list/names = splittext(child_names_txt, ";") + var/list/tags = splittext(child_tags_txt, ";") + if (names.len == tags.len) for (var/i = 1; i <= tags.len; i++) child_names[tags[i]] = names[i] @@ -84,10 +84,10 @@ /obj/machinery/embedded_controller/radio/airlock/docking_port_multi/Topic(href, href_list) if(..()) return - + usr.set_machine(src) src.add_fingerprint(usr) - + var/clean = 0 switch(href_list["command"]) //anti-HTML-hacking checks if("cycle_ext") diff --git a/code/game/machinery/embedded_controller/docking_program_multi.dm b/code/game/machinery/embedded_controller/docking_program_multi.dm index 3901591720c..a4ad7d2985a 100644 --- a/code/game/machinery/embedded_controller/docking_program_multi.dm +++ b/code/game/machinery/embedded_controller/docking_program_multi.dm @@ -17,7 +17,7 @@ if (istype(M,/obj/machinery/embedded_controller/radio/docking_port_multi)) //if our parent controller is the right type, then we can auto-init stuff at construction var/obj/machinery/embedded_controller/radio/docking_port_multi/controller = M //parse child_tags_txt and create child tags - children_tags = text2list(controller.child_tags_txt, ";") + children_tags = splittext(controller.child_tags_txt, ";") children_ready = list() children_override = list() diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 443a7049341..0c14c66990e 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -49,7 +49,7 @@ var/global/list/navbeacons // no I don't like putting this in, but it will do codes = new() - var/list/entries = text2list(codes_txt, ";") // entries are separated by semicolons + var/list/entries = splittext(codes_txt, ";") // entries are separated by semicolons for(var/e in entries) var/index = findtext(e, "=") // format is "key=value" diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 355ee4b02d9..6e20801680c 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -502,7 +502,7 @@ var/list/turret_icons if(isanimal(L) || issmall(L)) // Animals are not so dangerous return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET - if(isxenomorph(L) || isalien(L)) // Xenos are dangerous + if(isalien(L)) // Xenos are dangerous return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET if(ishuman(L)) //if the target is a human, analyze threat level diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 6a61a082b98..b64f5923c83 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -298,7 +298,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept continue // Ghosts hearing all radio chat don't want to hear syndicate intercepts, they're duplicates - if(data == 3 && istype(R, /mob/dead/observer) && R.client && R.client.prefs && (R.client.prefs.toggles & CHAT_GHOSTRADIO)) + if(data == 3 && istype(R, /mob/observer/dead) && R.client && R.client.prefs && (R.client.prefs.toggles & CHAT_GHOSTRADIO)) continue // --- Check for compression --- diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index d5d03749bee..b107dcc42d9 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -85,7 +85,7 @@ if(..()) return /* Ghosts can't use this one because it's a direct selection */ - if(istype(user, /mob/dead/observer)) return + if(istype(user, /mob/observer/dead)) return var/list/L = list() var/list/areaindex = list() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 19651f99898..b1b8d497b33 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -96,7 +96,7 @@ wires = new(src) spawn(4) if(src.product_slogans) - src.slogan_list += text2list(src.product_slogans, ";") + src.slogan_list += splittext(src.product_slogans, ";") // So not all machines speak at the exact same time. // The first time this machine says something will be at slogantime + this random value, @@ -104,7 +104,7 @@ src.last_slogan = world.time + rand(0, slogan_delay) if(src.product_ads) - src.ads_list += text2list(src.product_ads, ";") + src.ads_list += splittext(src.product_ads, ";") src.build_inventory() power_change() @@ -255,31 +255,16 @@ usr << "\icon[cashmoney] That is not enough money." return 0 - if(istype(cashmoney, /obj/item/weapon/spacecash/bundle)) - // Bundles can just have money subtracted, and will work + if(istype(cashmoney, /obj/item/weapon/spacecash)) visible_message("\The [usr] inserts some cash into \the [src].") - var/obj/item/weapon/spacecash/bundle/cashmoney_bundle = cashmoney - cashmoney_bundle.worth -= currently_vending.price + cashmoney.worth -= currently_vending.price - if(cashmoney_bundle.worth <= 0) - usr.drop_from_inventory(cashmoney_bundle) - qdel(cashmoney_bundle) + if(cashmoney.worth <= 0) + usr.drop_from_inventory(cashmoney) + qdel(cashmoney) else - cashmoney_bundle.update_icon() - else - // Bills (banknotes) cannot really have worth different than face value, - // so we have to eat the bill and spit out change in a bundle - // This is really dirty, but there's no superclass for all bills, so we - // just assume that all spacecash that's not something else is a bill - - visible_message("\The [usr] inserts a bill into \the [src].") - var/left = cashmoney.worth - currently_vending.price - usr.drop_from_inventory(cashmoney) - qdel(cashmoney) - - if(left) - spawn_money(left, src.loc, user) + cashmoney.update_icon() // Vending machines have no idea who paid with cash credit_purchase("(cash)") diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 03234e968ee..4721e844406 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -218,6 +218,24 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/Fire(atom/movable/AM, atom/target, turf/aimloc) AM.throw_at(target,missile_range, missile_speed, chassis) + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare + name = "\improper BNI Flare Launcher" + icon_state = "mecha_flaregun" + projectile = /obj/item/device/flashlight/flare + fire_sound = 'sound/weapons/tablehit1.ogg' + auto_rearm = 1 + fire_cooldown = 20 + projectiles_per_shot = 1 + projectile_energy_cost = 20 + missile_speed = 1 + missile_range = 15 + required_type = /obj/mecha //Why restrict it to just mining or combat mechs? + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare/Fire(atom/movable/AM, atom/target, turf/aimloc) + var/obj/item/device/flashlight/flare/fired = AM + fired.ignite() + ..() /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive name = "\improper SRM-8 missile rack" diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3c35ece9d24..b742b8a14b2 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -39,6 +39,7 @@ var/datum/effect/effect/system/spark_spread/spark_system = new var/lights = 0 var/lights_power = 6 + var/force = 0 //inner atmos var/use_internal_tank = 0 diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm deleted file mode 100644 index 598b8ad5d37..00000000000 --- a/code/game/objects/effects/aliens.dm +++ /dev/null @@ -1,440 +0,0 @@ -/* Alien Effects! - * Contains: - * effect/alien - * Resin - * Weeds - * Acid - * Egg - */ - -/* - * effect/alien - */ -/obj/effect/alien - name = "alien thing" - desc = "theres something alien about this" - icon = 'icons/mob/alien.dmi' - -/* - * Resin - */ -/obj/effect/alien/resin - name = "resin" - desc = "Looks like some kind of slimy growth." - icon_state = "resin" - - density = 1 - opacity = 1 - anchored = 1 - var/health = 200 - //var/mob/living/affecting = null - -/obj/effect/alien/resin/wall - name = "resin wall" - desc = "Purple slime solidified into a wall." - icon_state = "resinwall" //same as resin, but consistency ho! - -/obj/effect/alien/resin/membrane - name = "resin membrane" - desc = "Purple slime just thin enough to let light pass through." - icon_state = "resinmembrane" - opacity = 0 - health = 120 - -/obj/effect/alien/resin/New() - ..() - var/turf/T = get_turf(src) - T.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT - -/obj/effect/alien/resin/Destroy() - var/turf/T = get_turf(src) - T.thermal_conductivity = initial(T.thermal_conductivity) - ..() - -/obj/effect/alien/resin/proc/healthcheck() - if(health <=0) - density = 0 - qdel(src) - return - -/obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - -/obj/effect/alien/resin/ex_act(severity) - switch(severity) - if(1.0) - health-=50 - if(2.0) - health-=50 - if(3.0) - if (prob(50)) - health-=50 - else - health-=25 - healthcheck() - return - -/obj/effect/alien/resin/hitby(AM as mob|obj) - ..() - for(var/mob/O in viewers(src, null)) - O.show_message("[src] was hit by [AM].", 1) - var/tforce = 0 - if(ismob(AM)) - tforce = 10 - else - tforce = AM:throwforce - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - health = max(0, health - tforce) - healthcheck() - ..() - return - -/obj/effect/alien/resin/attack_hand() - usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if (HULK in usr.mutations) - usr << "You easily destroy the [name]." - for(var/mob/O in oviewers(src)) - O.show_message("[usr] destroys the [name]!", 1) - health = 0 - else - - // Aliens can get straight through these. - if(istype(usr,/mob/living/carbon)) - var/mob/living/carbon/M = usr - if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - for(var/mob/O in oviewers(src)) - O.show_message("[usr] strokes the [name] and it melts away!", 1) - health = 0 - healthcheck() - return - - usr << "You claw at the [name]." - for(var/mob/O in oviewers(src)) - O.show_message("[usr] claws at the [name]!", 1) - health -= rand(5,10) - healthcheck() - return - -/obj/effect/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - var/aforce = W.force - health = max(0, health - aforce) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - healthcheck() - ..() - return - -/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if(air_group) return 0 - if(istype(mover) && mover.checkpass(PASSGLASS)) - return !opacity - return !density - - -/* - * Weeds - */ -#define NODERANGE 3 - -/obj/effect/alien/weeds - name = "weeds" - desc = "Weird purple weeds." - icon_state = "weeds" - - anchored = 1 - density = 0 - layer = 2 - var/health = 15 - var/obj/effect/alien/weeds/node/linked_node = null - -/obj/effect/alien/weeds/node - icon_state = "weednode" - name = "purple sac" - desc = "Weird purple octopus-like thing." - layer = 3 - light_range = NODERANGE - var/node_range = NODERANGE - -/obj/effect/alien/weeds/node/New() - ..(src.loc, src) - - -/obj/effect/alien/weeds/New(pos, node) - ..() - if(istype(loc, /turf/space)) - qdel(src) - return - linked_node = node - if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2") - spawn(rand(150, 200)) - if(src) - Life() - return - -/obj/effect/alien/weeds/proc/Life() - set background = 1 - var/turf/U = get_turf(src) -/* - if (locate(/obj/movable, U)) - U = locate(/obj/movable, U) - if(U.density == 1) - qdel(src) - return - -Alien plants should do something if theres a lot of poison - if(U.poison> 200000) - health -= round(U.poison/200000) - update() - return -*/ - if (istype(U, /turf/space)) - qdel(src) - return - - if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) ) - return - - direction_loop: - for(var/dirn in cardinal) - var/turf/T = get_step(src, dirn) - - if (!istype(T) || T.density || locate(/obj/effect/alien/weeds) in T || istype(T.loc, /area/arrival) || istype(T, /turf/space)) - continue - - // if (locate(/obj/movable, T)) // don't propogate into movables - // continue - - for(var/obj/O in T) - if(O.density) - continue direction_loop - - PoolOrNew(/obj/effect/alien/weeds, T, linked_node) - - -/obj/effect/alien/weeds/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - if(2.0) - if (prob(50)) - qdel(src) - if(3.0) - if (prob(5)) - qdel(src) - return - -/obj/effect/alien/weeds/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 - visible_message("\The [src] have been attacked with \the [W][(user ? " by [user]." : ".")]") - - var/damage = W.force / 4.0 - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(loc, 'sound/items/Welder.ogg', 100, 1) - - health -= damage - healthcheck() - -/obj/effect/alien/weeds/proc/healthcheck() - if(health <= 0) - qdel(src) - - -/obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300 + T0C) - health -= 5 - healthcheck() - -#undef NODERANGE - - -/* - * Acid - */ -/obj/effect/alien/acid - name = "acid" - desc = "Burbling corrossive stuff. I wouldn't want to touch it." - icon_state = "acid" - - density = 0 - opacity = 0 - anchored = 1 - - var/atom/target - var/ticks = 0 - var/target_strength = 0 - -/obj/effect/alien/acid/New(loc, target) - ..(loc) - src.target = target - - if(isturf(target)) // Turf take twice as long to take down. - target_strength = 8 - else - target_strength = 4 - tick() - -/obj/effect/alien/acid/proc/tick() - if(!target) - qdel(src) - - ticks += 1 - - if(ticks >= target_strength) - - for(var/mob/O in hearers(src, null)) - O.show_message("[src.target] collapses under its own weight into a puddle of goop and undigested debris!", 1) - - if(istype(target, /turf/simulated/wall)) // I hate turf code. - var/turf/simulated/wall/W = target - W.dismantle_wall(1) - else - qdel(target) - qdel(src) - return - - switch(target_strength - ticks) - if(6) - visible_message("[src.target] is holding up against the acid!") - if(4) - visible_message("[src.target]\s structure is being melted by the acid!") - if(2) - visible_message("[src.target] is struggling to withstand the acid!") - if(0 to 1) - visible_message("[src.target] begins to crumble under the acid!") - spawn(rand(150, 200)) tick() - -/* - * Egg - */ -/var/const //for the status var - BURST = 0 - BURSTING = 1 - GROWING = 2 - GROWN = 3 - - MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger - MAX_GROWTH_TIME = 3000 - -/obj/effect/alien/egg - desc = "It looks like a weird egg" - name = "egg" - icon_state = "egg_growing" - density = 0 - anchored = 1 - - var/health = 100 - var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive - flags = PROXMOVE - -/obj/effect/alien/egg/New() - if(config.aliens_allowed) - ..() - spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME)) - Grow() - else - qdel(src) - -/obj/effect/alien/egg/attack_hand(user as mob) - - var/mob/living/carbon/M = user - if(!istype(M) || !(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs)) - return attack_hand(user) - - switch(status) - if(BURST) - user << "You clear the hatched egg." - qdel(src) - return - if(GROWING) - user << "The child is not developed yet." - return - if(GROWN) - user << "You retrieve the child." - Burst(0) - return - -/obj/effect/alien/egg/proc/GetFacehugger() - return locate(/obj/item/clothing/mask/facehugger) in contents - -/obj/effect/alien/egg/proc/Grow() - icon_state = "egg" - status = GROWN - new /obj/item/clothing/mask/facehugger(src) - return - -/obj/effect/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining - if(status == GROWN || status == GROWING) - var/obj/item/clothing/mask/facehugger/child = GetFacehugger() - icon_state = "egg_hatched" - flick("egg_opening", src) - status = BURSTING - spawn(15) - status = BURST - child.loc = get_turf(src) - - if(kill && istype(child)) - child.Die() - else - for(var/mob/M in range(1,src)) - if(CanHug(M)) - child.Attach(M) - break - -/obj/effect/alien/egg/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - healthcheck() - return - - -/obj/effect/alien/egg/attackby(var/obj/item/weapon/W, var/mob/user) - if(health <= 0) - return - if(W.attack_verb.len) - src.visible_message("\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]") - else - src.visible_message("\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]") - var/damage = W.force / 4.0 - - if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - - if(WT.remove_fuel(0, user)) - damage = 15 - playsound(src.loc, 'sound/items/Welder.ogg', 100, 1) - - src.health -= damage - src.healthcheck() - - -/obj/effect/alien/egg/proc/healthcheck() - if(health <= 0) - Burst() - -/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 500 + T0C) - health -= 5 - healthcheck() - -/obj/effect/alien/egg/HasProximity(atom/movable/AM as mob|obj) - if(status == GROWN) - if(!CanHug(AM)) - return - - var/mob/living/carbon/C = AM - if(C.stat == CONSCIOUS && C.status_flags & XENO_HOST) - return - - Burst(0) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index cc1508d2112..586ba9b721e 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -513,16 +513,3 @@ steam.start() -- spawns the effect round(min(light, BOMBCAP_LIGHT_RADIUS)), round(min(flash, BOMBCAP_FLASH_RADIUS)) ) - - proc/holder_damage(var/atom/holder) - if(holder) - var/dmglevel = 4 - - if (round(amount/8) > 0) - dmglevel = 1 - else if (round(amount/4) > 0) - dmglevel = 2 - else if (round(amount/2) > 0) - dmglevel = 3 - - if(dmglevel<4) holder.ex_act(dmglevel) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 59a71ddaa82..fa521c104a1 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -13,7 +13,7 @@ ..() if(!H) return - if(istype(H, /mob/dead/observer) && !affect_ghosts) + if(istype(H, /mob/observer) && !affect_ghosts) return Trigger(H) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a07b82cd177..6961e957ffe 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -16,6 +16,9 @@ pressure_resistance = 5 // causeerrorheresoifixthis var/obj/item/master = null + var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants. + var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" + var/force = 0 var/heat_protection = 0 //flags which determine which body parts are protected from heat. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm var/cold_protection = 0 //flags which determine which body parts are protected from cold. Use the HEAD, UPPER_TORSO, LOWER_TORSO, etc. flags. See setup.dm diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 11fc4b8d017..ed2e1341543 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -235,7 +235,6 @@ var/global/list/obj/item/device/pda/PDAs = list() ownrank = ownjob name = newname + " (" + ownjob + ")" - //AI verb and proc for sending PDA messages. /obj/item/device/pda/ai/verb/cmd_send_pdamesg() set category = "AI IM" @@ -252,7 +251,6 @@ var/global/list/obj/item/device/pda/PDAs = list() var/selected = plist[c] create_message(usr, selected, 0) - /obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver() set category = "AI IM" set name = "Toggle Sender/Receiver" @@ -263,7 +261,6 @@ var/global/list/obj/item/device/pda/PDAs = list() toff = !toff usr << "PDA sender/receiver toggled [(toff ? "Off" : "On")]!" - /obj/item/device/pda/ai/verb/cmd_toggle_pda_silent() set category = "AI IM" set name = "Toggle Ringer" @@ -420,8 +417,8 @@ var/global/list/obj/item/device/pda/PDAs = list() cartdata["radio"] = 1 if(istype(cartridge.radio, /obj/item/radio/integrated/signal)) cartdata["radio"] = 2 - if(istype(cartridge.radio, /obj/item/radio/integrated/mule)) - cartdata["radio"] = 3 + //if(istype(cartridge.radio, /obj/item/radio/integrated/mule)) + // cartdata["radio"] = 3 if(mode == 2) cartdata["charges"] = cartridge.charges ? cartridge.charges : 0 diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 2c91285e084..24a2db67d73 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -124,10 +124,6 @@ icon_state = "cart-q" access_quartermaster = 1 -/obj/item/weapon/cartridge/quartermaster/initialize() - radio = new /obj/item/radio/integrated/mule(src) - ..() - /obj/item/weapon/cartridge/head name = "\improper Easy-Record DELUXE" icon_state = "cart-h" @@ -141,9 +137,6 @@ access_janitor = 1 access_security = 1 -/obj/item/weapon/cartridge/hop/initialize() - radio = new /obj/item/radio/integrated/mule(src) - /obj/item/weapon/cartridge/hos name = "\improper R.O.B.U.S.T. DELUXE" icon_state = "cart-hos" @@ -351,40 +344,26 @@ /* MULEBOT Control (Mode: 48) */ if(mode==48) - var/muleData[0] var/mulebotsData[0] - if(istype(radio,/obj/item/radio/integrated/mule)) - var/obj/item/radio/integrated/mule/QC = radio - muleData["active"] = QC.active - if(QC.active && !isnull(QC.botstatus)) - var/area/loca = QC.botstatus["loca"] - var/loca_name = sanitize(loca.name) - muleData["botstatus"] = list("loca" = loca_name, "mode" = QC.botstatus["mode"],"home"=QC.botstatus["home"],"powr" = QC.botstatus["powr"],"retn" =QC.botstatus["retn"], "pick"=QC.botstatus["pick"], "load" = QC.botstatus["load"], "dest" = sanitize(QC.botstatus["dest"])) + var/count = 0 - else - muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) + for(var/mob/living/bot/mulebot/M in living_mob_list) + if(!M.on) + continue + ++count + var/muleData[0] + muleData["name"] = M.suffix + muleData["location"] = get_area(M) + muleData["mode"] = M.mode + 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() - - var/mulebotsCount=0 - for(var/obj/machinery/bot/B in QC.botlist) - mulebotsCount++ - if(B.loc) - mulebotsData[++mulebotsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") - - if(!mulebotsData.len) - mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) - - muleData["bots"] = mulebotsData - muleData["count"] = mulebotsCount - - else - muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) - muleData["active"] = 0 - mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) - muleData["bots"] = mulebotsData - muleData["count"] = 0 - - values["mulebot"] = muleData + values["mulebotcount"] = count + values["mulebots"] = mulebotsData @@ -575,5 +554,9 @@ loc:mode = 43 mode = 43 + if("MULEbot") + var/mob/living/bot/mulebot/M = locate(href_list["ref"]) + if(istype(M)) + M.obeyCommand(href_list["command"]) return 1 diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 7ad2b002009..5e7d63e1e9b 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -105,107 +105,6 @@ radio_controller.remove_object(src, control_freq) ..() -/obj/item/radio/integrated/mule - var/list/botlist = null // list of bots - var/obj/machinery/bot/mulebot/active // the active bot; if null, show bot list - var/list/botstatus // the status signal sent by the bot - var/list/beacons - - var/beacon_freq = 1400 - var/control_freq = BOT_FREQ - - // create a new QM cartridge, and register to receive bot control & beacon message - New() - ..() - spawn(5) - if(radio_controller) - radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT) - radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS) - spawn(10) - post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS) - - // receive radio signals - // can detect bot status signals - // and beacon locations - // create/populate lists as they are recvd - - receive_signal(datum/signal/signal) -// var/obj/item/device/pda/P = src.loc - - /* - world << "recvd:[P] : [signal.source]" - for(var/d in signal.data) - world << "- [d] = [signal.data[d]]" - */ - if(signal.data["type"] == "mulebot") - if(!botlist) - botlist = new() - - if(!(signal.source in botlist)) - botlist += signal.source - - if(active == signal.source) - var/list/b = signal.data - botstatus = b.Copy() - - else if(signal.data["beacon"]) - if(!beacons) - beacons = new() - - beacons[signal.data["beacon"] ] = signal.source - - -// if(istype(P)) P.updateSelfDialog() - - Topic(href, href_list) - ..() - var/cmd = "command" - if(active) cmd = "command [active.suffix]" - - switch(href_list["op"]) - - if("control") - active = locate(href_list["bot"]) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - - if("scanbots") // find all bots - botlist = null - post_signal(control_freq, "command", "bot_status", s_filter = RADIO_MULEBOT) - - if("botlist") - active = null - - - if("unload") - post_signal(control_freq, cmd, "unload", s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("setdest") - if(beacons) - var/dest = input("Select Bot Destination", "Mulebot [active.suffix] Interlink", active.destination) as null|anything in beacons - if(dest) - post_signal(control_freq, cmd, "target", "destination", dest, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - - if("retoff") - post_signal(control_freq, cmd, "autoret", "value", 0, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("reton") - post_signal(control_freq, cmd, "autoret", "value", 1, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - - if("pickoff") - post_signal(control_freq, cmd, "autopick", "value", 0, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - if("pickon") - post_signal(control_freq, cmd, "autopick", "value", 1, s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - - if("stop", "go", "home") - post_signal(control_freq, cmd, href_list["op"], s_filter = RADIO_MULEBOT) - post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - - - /* * Radio Cartridge, essentially a signaler. */ diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 29c8377d430..e06e28f3c7f 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -5,7 +5,7 @@ item_state = "electronic" w_class = 2.0 slot_flags = SLOT_BELT - show_messages = 1 + show_messages = 0 var/flush = null origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) @@ -100,31 +100,31 @@ user << "Transfer failed: Existing AI found on remote terminal. Remove existing AI to install a new one." return 0 - if(ai.is_malf()) - user << "ERROR: Remote transfer interface disabled." - return 0 + user.visible_message("\The [user] starts downloading \the [ai] into \the [src]...", "You start downloading \the [ai] into \the [src]...") + ai << "\The [user] is downloading you into \the [src]!" - if(istype(ai.loc, /turf/)) - new /obj/structure/AIcore/deactivated(get_turf(ai)) + if(do_after(user, 100)) + if(istype(ai.loc, /turf/)) + new /obj/structure/AIcore/deactivated(get_turf(ai)) - ai.carded = 1 - admin_attack_log(user, ai, "Carded with [src.name]", "Was carded with [src.name]", "used the [src.name] to card") - src.name = "[initial(name)] - [ai.name]" + ai.carded = 1 + admin_attack_log(user, ai, "Carded with [src.name]", "Was carded with [src.name]", "used the [src.name] to card") + src.name = "[initial(name)] - [ai.name]" - ai.loc = src - ai.destroy_eyeobj(src) - ai.cancel_camera() - ai.control_disabled = 1 - ai.aiRestorePowerRoutine = 0 - carded_ai = ai + ai.loc = src + ai.destroy_eyeobj(src) + ai.cancel_camera() + ai.control_disabled = 1 + ai.aiRestorePowerRoutine = 0 + carded_ai = ai - if(ai.client) - ai << "You have been downloaded to a mobile storage device. Remote access lost." - if(user.client) - user << "Transfer successful: [ai.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." + if(ai.client) + ai << "You have been downloaded to a mobile storage device. Remote access lost." + if(user.client) + user << "Transfer successful: [ai.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." - ai.canmove = 1 - update_icon() + ai.canmove = 1 + update_icon() return 1 /obj/item/device/aicard/proc/clear() diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 4e552cc513e..2906cb756df 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -109,7 +109,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() if(!comm || !comm.exonet || !comm.exonet.address || comm.exonet.address == src.exonet.address) //Don't add addressless devices, and don't add ourselves. continue src.known_devices |= comm - for(var/mob/dead/observer/O in dead_mob_list) + for(var/mob/observer/dead/O in dead_mob_list) if(!O.client || O.client.prefs.communicator_visibility == 0) continue src.known_devices |= O @@ -157,13 +157,13 @@ var/global/list/obj/item/device/communicator/all_communicators = list() populate_known_devices() //Update the devices so ghosts can see the list on NanoUI. ..() -/mob/dead/observer +/mob/observer/dead var/datum/exonet_protocol/exonet = null // Proc: New() // Parameters: None // Description: Gives ghosts an exonet address based on their key and ghost name. -/mob/dead/observer/New() +/mob/observer/dead/New() . = ..() spawn(20) exonet = new(src) @@ -175,7 +175,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Proc: Destroy() // Parameters: None // Description: Removes the ghost's address and nulls the exonet datum, to allow qdel()ing. -/mob/dead/observer/Destroy() +/mob/observer/dead/Destroy() . = ..() if(exonet) exonet.remove_address() @@ -200,7 +200,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() communicators[++communicators.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address) //Now for ghosts who we pretend have communicators. - for(var/mob/dead/observer/O in known_devices) + for(var/mob/observer/dead/O in known_devices) if(O.client && O.client.prefs.communicator_visibility == 1 && O.exonet) communicators[++communicators.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address) @@ -210,7 +210,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() invites[++invites.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address) //Ghosts we invited. - for(var/mob/dead/observer/O in voice_invites) + for(var/mob/observer/dead/O in voice_invites) if(O.exonet && O.client) invites[++invites.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address) @@ -220,7 +220,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() requests[++requests.len] = list("name" = sanitize(comm.name), "address" = comm.exonet.address) //Ghosts that want to talk to us. - for(var/mob/dead/observer/O in voice_requests) + for(var/mob/observer/dead/O in voice_requests) if(O.exonet && O.client) requests[++requests.len] = list("name" = sanitize("[O.client.prefs.real_name]'s communicator"), "address" = O.exonet.address) @@ -342,7 +342,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Proc: receive_exonet_message() // Parameters: 3 (origin atom - the source of the message's holder, origin_address - where the message came from, message - the message received) // Description: Handles voice requests and invite messages originating from both real communicators and ghosts. Also includes a ping response. -/mob/dead/observer/receive_exonet_message(origin_atom, origin_address, message) +/mob/observer/dead/receive_exonet_message(origin_atom, origin_address, message) if(message == "voice") if(istype(origin_atom, /obj/item/device/communicator)) var/obj/item/device/communicator/comm = origin_atom @@ -600,7 +600,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Verb: join_as_voice() // Parameters: None // Description: Allows ghosts to call communicators, if they meet all the requirements. -/mob/dead/verb/join_as_voice() +/mob/observer/dead/verb/join_as_voice() set category = "Ghost" set name = "Call Communicator" set desc = "If there is a communicator available, send a request to speak through it. This will reset your respawn timer, if someone picks up." @@ -643,7 +643,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() var/choice = input(src,"Send a voice request to whom?") as null|anything in choices if(choice) var/obj/item/device/communicator/chosen_communicator = choice - var/mob/dead/observer/O = src + var/mob/observer/dead/O = src if(O.exonet) O.exonet.send_message(chosen_communicator.exonet.address, "voice") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index b0e3d60f962..c7f90e97468 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -199,6 +199,14 @@ src.force = on_damage src.damtype = "fire" processing_objects += src + +/obj/item/device/flashlight/flare/proc/ignite() //Used for flare launchers. + on = !on + update_icon() + force = on_damage + damtype = "fire" + processing_objects += src + return 1 /obj/item/device/flashlight/slime gender = PLURAL diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 2ea254febda..89042464b31 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -6,7 +6,7 @@ w_class = 2.0 slot_flags = SLOT_BELT origin_tech = list(TECH_DATA = 2) - show_messages = 1 + show_messages = 0 var/obj/item/device/radio/radio var/looking_for_personality = 0 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index da191370438..e1332dda1e2 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -156,7 +156,7 @@ var/global/list/default_medbay_channels = list( var/obj/item/weapon/card/id/I = GetIdCard() return has_access(list(), req_one_accesses, I ? I.GetAccess() : list()) -/mob/dead/observer/has_internal_radio_channel_access(var/list/req_one_accesses) +/mob/observer/dead/has_internal_radio_channel_access(var/list/req_one_accesses) return can_admin_interact() /obj/item/device/radio/proc/text_wires() diff --git a/code/game/objects/items/devices/uplink_categories.dm b/code/game/objects/items/devices/uplink_categories.dm index ae005022be0..68ed72a6fb9 100644 --- a/code/game/objects/items/devices/uplink_categories.dm +++ b/code/game/objects/items/devices/uplink_categories.dm @@ -27,6 +27,9 @@ /datum/uplink_category/stealth_items name = "Stealth and Camouflage Items" +/datum/uplink_category/armor + name = "Armor" + /datum/uplink_category/tools name = "Devices and Tools" diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm index 38811833cde..3c4ecc3e19d 100644 --- a/code/game/objects/items/devices/uplink_items.dm +++ b/code/game/objects/items/devices/uplink_items.dm @@ -305,6 +305,22 @@ datum/uplink_item/dd_SortValue() item_cost = 6 path = /obj/item/weapon/disk/file/cameras/syndicate +/******** +* Armor * +********/ +/datum/uplink_item/item/armor + category = /datum/uplink_category/armor + +/datum/uplink_item/item/armor/combat + name = "Combat Armor Set" + item_cost = 5 + path = /obj/item/weapon/storage/box/syndie_kit/combat_armor + +/datum/uplink_item/item/armor/heavy_vest + name = "Heavy Armor Vest" + item_cost = 4 + path = /obj/item/clothing/suit/storage/vest/heavy/merc + /******************** * Devices and Tools * ********************/ @@ -351,11 +367,6 @@ datum/uplink_item/dd_SortValue() item_cost = 3 path = /obj/item/clothing/glasses/thermal/syndi -/datum/uplink_item/item/tools/heavy_vest - name = "Heavy Armor Vest" - item_cost = 4 - path = /obj/item/clothing/suit/storage/vest/heavy/merc - /datum/uplink_item/item/tools/powersink name = "Powersink (DANGER!)" item_cost = 5 @@ -385,7 +396,7 @@ datum/uplink_item/dd_SortValue() item_cost = 3 path = /obj/item/weapon/storage/secure/briefcase/money desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities." - + /datum/uplink_item/item/tools/crystal name = "Tradable Crystal" item_cost = 1 diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index 8889a52d91c..4359918ceea 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -61,6 +61,9 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/voice) items += new/datum/uplink_random_item(/datum/uplink_item/item/stealth_items/camera_floppy, 10, 0) + items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/heavy_vest) + items += new/datum/uplink_random_item(/datum/uplink_item/item/armor/combat) + items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/toolbox, reselect_propbability = 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/plastique) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/encryptionkey_radio) @@ -69,7 +72,6 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/clerical) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/space_suit, 50, 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/thermal) - items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/heavy_vest) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/powersink, 10, 10) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/ai_module, 25, 0) items += new/datum/uplink_random_item(/datum/uplink_item/item/tools/teleporter, 10, 0) diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm index 2286f787145..6d195bd2bd7 100644 --- a/code/game/objects/items/devices/violin.dm +++ b/code/game/objects/items/devices/violin.dm @@ -202,10 +202,10 @@ for(var/line in song.lines) //world << line - for(var/beat in text2list(lowertext(line), ",")) + for(var/beat in splittext(lowertext(line), ",")) //world << "beat: [beat]" - var/list/notes = text2list(beat, "/") - for(var/note in text2list(notes[1], "-")) + var/list/notes = splittext(beat, "/") + for(var/note in splittext(notes[1], "-")) //world << "note: [note]" if(!playing || !isliving(loc))//If the violin is playing, or isn't held by a person playing = 0 @@ -367,7 +367,7 @@ //split into lines spawn() - var/list/lines = text2list(t, "\n") + var/list/lines = splittext(t, "\n") var/tempo = 5 if(copytext(lines[1],1,6) == "BPM: ") tempo = 600 / text2num(copytext(lines[1],6)) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 7cccb0eb106..11c312048db 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -185,7 +185,7 @@ if(!M.brainmob.key) var/ghost_can_reenter = 0 if(M.brainmob.mind) - for(var/mob/dead/observer/G in player_list) + for(var/mob/observer/dead/G in player_list) if(G.can_reenter_corpse && G.mind == M.brainmob.mind) ghost_can_reenter = 1 break diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index ccd6ab0adb4..a13df854cbd 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -67,7 +67,7 @@ return 0 if(!R.key) - for(var/mob/dead/observer/ghost in player_list) + for(var/mob/observer/dead/ghost in player_list) if(ghost.mind && ghost.mind.current == R) R.key = ghost.key 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 ef6b4c4d57c..61de25f44c7 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -9,7 +9,7 @@ var/list/network var/locked = 1 var/emagged = 0 - + /obj/item/weapon/circuitboard/security/New() ..() network = station_networks @@ -18,7 +18,7 @@ name = T_BOARD("engineering camera monitor") build_path = /obj/machinery/computer/security/engineering req_access = list() - + /obj/item/weapon/circuitboard/security/engineering/New() ..() network = engineering_networks @@ -36,7 +36,7 @@ /obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C) if (..(C)) network = C.network - + /obj/item/weapon/circuitboard/security/emag_act(var/remaining_charges, var/mob/user) if(emagged) user << "Circuit lock is already removed." @@ -60,12 +60,12 @@ if(locked) user << "Circuit controls are locked." return - var/existing_networks = list2text(network,",") + var/existing_networks = jointext(network,",") var/input = sanitize(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks)) if(!input) usr << "No input found please hang up and try your call again." return - var/list/tempnetwork = text2list(input, ",") + var/list/tempnetwork = splittext(input, ",") tempnetwork = difflist(tempnetwork,restricted_camera_networks,1) if(tempnetwork.len < 1) usr << "No network found please hang up and try your call again." diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm index 426ced89da6..a31a73684a4 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm @@ -11,4 +11,11 @@ "/obj/item/weapon/stock_parts/capacitor" = 1, "/obj/item/weapon/cell" = 1, "/obj/item/weapon/stock_parts/matter_bin" = 1, - "/obj/item/weapon/stock_parts/micro_laser" = 1) \ No newline at end of file + "/obj/item/weapon/stock_parts/micro_laser" = 1) + +/obj/item/weapon/circuitboard/miningdrillbrace + name = T_BOARD("mining drill brace") + build_path = "/obj/machinery/mining/brace" + board_type = "machine" + origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + req_components = list() diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index eadb5b08485..f87f0fa8305 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -17,9 +17,7 @@ var/affected_area = 3 New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) attack_self(mob/user as mob) if(!stage || stage==1) diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index bb4b80c1b80..e708cc0765f 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -68,7 +68,6 @@ if(M.buckled) //wheelchairs, office chairs, rollerbeds return - M << "You step on \the [src]!" playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -79,6 +78,8 @@ if( H.shoes || ( H.wear_suit && (H.wear_suit.body_parts_covered & FEET) ) ) return + M << "You step on \the [src]!" + var/list/check = list("l_foot", "r_foot") while(check.len) var/picked = pick(check) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index fe6cd98e71d..7f7c75e8177 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -50,7 +50,7 @@ /obj/item/weapon/shield/riot name = "riot shield" - desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." + desc = "A shield adept for close quarters engagement. It's also capable of protecting from less powerful projectiles." icon = 'icons/obj/weapons.dmi' icon_state = "riot" flags = CONDUCT @@ -65,17 +65,31 @@ attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time -/obj/item/weapon/shield/riot/handle_shield(mob/user) - . = ..() - if(.) playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) +/obj/item/weapon/shield/riot/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") + if(user.incapacitated()) + return 0 -/obj/item/weapon/shield/riot/get_block_chance(mob/user, var/damage, atom/damage_source = null, mob/attacker = null) - if(istype(damage_source, /obj/item/projectile)) - var/obj/item/projectile/P = damage_source - //plastic shields do not stop bullets or lasers, even in space. Will block beanbags, rubber bullets, and stunshots just fine though. - if((is_sharp(P) && damage > 10) || istype(P, /obj/item/projectile/beam)) - return 0 - return base_block_chance + //block as long as they are not directly behind us + var/bad_arc = reverse_direction(user.dir) //arc of directions from which we cannot block + if(check_shield_arc(user, bad_arc, damage_source, attacker)) + if(prob(get_block_chance(user, damage, damage_source, attacker))) + //At this point, we succeeded in our roll for a block attempt, however these kinds of shields struggle to stand up + //to strong bullets and lasers. They still do fine to pistol rounds of all kinds, however. + if(istype(damage_source, /obj/item/projectile)) + var/obj/item/projectile/P = damage_source + if((is_sharp(P) && P.armor_penetration >= 10) || istype(P, /obj/item/projectile/beam)) + //If we're at this point, the bullet/beam is going to go through the shield, however it will hit for less damage. + //Bullets get slowed down, while beams are diffused as they hit the shield, so these shields are not /completely/ + //useless. Extremely penetrating projectiles will go through the shield without less damage. + user.visible_message("\The [user]'s [src.name] is pierced by [attack_text]!") + if(P.armor_penetration < 30) //PTR bullets and x-rays will bypass this entirely. + P.damage = P.damage / 2 + return 0 + //Otherwise, if we're here, we're gonna stop the attack entirely. + user.visible_message("\The [user] blocks [attack_text] with \the [src]!") + playsound(user.loc, 'sound/weapons/Genhit.ogg', 50, 1) + return 1 + return 0 /obj/item/weapon/shield/riot/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/melee/baton)) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index f977830ef35..6f93f03df2f 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -136,7 +136,6 @@ /obj/item/weapon/melee/baton, /obj/item/weapon/gun/energy/taser, /obj/item/weapon/flame/lighter, - /obj/item/clothing/glasses/hud/security, /obj/item/device/flashlight, /obj/item/device/pda, /obj/item/device/radio/headset, @@ -166,7 +165,6 @@ /obj/item/weapon/forensics/sample_kit/powder, /obj/item/weapon/forensics/swab, /obj/item/device/uv_light, - /obj/item/weapon/forensics/slide, /obj/item/weapon/forensics/sample_kit, /obj/item/weapon/photo, /obj/item/device/camera_film, diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index d09c20c2a9c..62a9117de12 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -56,12 +56,6 @@ new /obj/item/clothing/mask/breath( src ) new /obj/item/weapon/tank/emergency_oxygen( src ) -/obj/item/weapon/storage/box/vox/ - New() - ..() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/weapon/tank/emergency_nitrogen( src ) - /obj/item/weapon/storage/box/engineer/ New() ..() diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index c23dfcdb516..dad95da904a 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -132,6 +132,7 @@ name = "surgery kit" desc = "Contains tools for surgery." storage_slots = 10 + max_storage_space = 23 /obj/item/weapon/storage/firstaid/surgery/New() ..() @@ -302,4 +303,4 @@ new /obj/item/weapon/reagent_containers/pill/citalopram( src ) new /obj/item/weapon/reagent_containers/pill/citalopram( src ) new /obj/item/weapon/reagent_containers/pill/citalopram( src ) - new /obj/item/weapon/reagent_containers/pill/citalopram( src ) \ No newline at end of file + new /obj/item/weapon/reagent_containers/pill/citalopram( src ) diff --git a/code/game/objects/items/weapons/storage/laundry_basket.dm b/code/game/objects/items/weapons/storage/laundry_basket.dm new file mode 100644 index 00000000000..92dd28c61a5 --- /dev/null +++ b/code/game/objects/items/weapons/storage/laundry_basket.dm @@ -0,0 +1,87 @@ +// ----------------------------- +// Laundry Basket +// ----------------------------- +// An item designed for hauling the belongings of a character. +// So this cannot be abused for other uses, we make it two-handed and inable to have its storage looked into. +/obj/item/weapon/storage/laundry_basket + name = "laundry basket" + icon = 'icons/obj/janitor.dmi' + icon_state = "laundry-empty" + item_state = "laundry" + desc = "The peak of thousands of years of laundry evolution." + + w_class = 5 + max_w_class = 4 + max_storage_space = 25 //20 for clothes + a bit of additional space for non-clothing items that were worn on body + storage_slots = 14 + use_to_pickup = 1 + allow_quick_empty = 1 + allow_quick_gather = 1 + collection_mode = 1 + var/linked + + +/obj/item/weapon/storage/laundry_basket/attack_hand(mob/user as mob) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + var/obj/item/organ/external/temp = H.get_organ("r_hand") + if (user.hand) + temp = H.get_organ("l_hand") + if(!temp) + user << "You need two hands to pick this up!" + return + + if(user.get_inactive_hand()) + user << "You need your other hand to be empty" + return + return ..() + +/obj/item/weapon/storage/laundry_basket/attack_self(mob/user as mob) + var/turf/T = get_turf(user) + user << "You dump the [src]'s contents onto \the [T]." + return ..() + +/obj/item/weapon/storage/laundry_basket/pickup(mob/user) + var/obj/item/weapon/storage/laundry_basket/offhand/O = new(user) + O.name = "[name] - second hand" + O.desc = "Your second grip on the [name]." + O.linked = src + user.put_in_inactive_hand(O) + linked = O + return + +/obj/item/weapon/storage/laundry_basket/update_icon() + if(contents.len) + icon_state = "laundry-full" + else + icon_state = "laundry-empty" + return + + +/obj/item/weapon/storage/laundry_basket/MouseDrop(obj/over_object as obj) + if(over_object == usr) + return + else + return ..() + +/obj/item/weapon/storage/laundry_basket/dropped(mob/user as mob) + qdel(linked) + return ..() + +/obj/item/weapon/storage/laundry_basket/show_to(mob/user as mob) + return + +/obj/item/weapon/storage/laundry_basket/open(mob/user as mob) + + +//Offhand +/obj/item/weapon/storage/laundry_basket/offhand + icon = 'icons/obj/weapons.dmi' + icon_state = "offhand" + name = "second hand" + use_to_pickup = 0 + +/obj/item/weapon/storage/laundry_basket/offhand/dropped(mob/user as mob) + user.drop_from_inventory(linked) + return + diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index a01722f9e94..4f80e85a529 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -245,15 +245,25 @@ /obj/item/weapon/storage/secure/briefcase/money/New() ..() - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) - new /obj/item/weapon/spacecash/bundle/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) +/obj/item/weapon/storage/box/syndie_kit/combat_armor + name = "combat armor kit" + desc = "Contains a full set of combat armor." +/obj/item/weapon/storage/box/syndie_kit/combat_armor/New() + ..() + new /obj/item/clothing/head/helmet/combat(src) + new /obj/item/clothing/suit/armor/combat(src) + new /obj/item/clothing/gloves/arm_guard/combat(src) + new /obj/item/clothing/shoes/leg_guard/combat(src) + return \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index e9ef52fc114..9b4f9271a24 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -75,10 +75,10 @@ /obj/item/weapon/storage/wallet/random/New() ..() - var/item1_type = pick( /obj/item/weapon/spacecash/bundle/c10,/obj/item/weapon/spacecash/bundle/c100,/obj/item/weapon/spacecash/bundle/c1000,/obj/item/weapon/spacecash/bundle/c20,/obj/item/weapon/spacecash/bundle/c200,/obj/item/weapon/spacecash/bundle/c50, /obj/item/weapon/spacecash/bundle/c500) + 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/bundle/c10,/obj/item/weapon/spacecash/bundle/c100,/obj/item/weapon/spacecash/bundle/c1000,/obj/item/weapon/spacecash/bundle/c20,/obj/item/weapon/spacecash/bundle/c200,/obj/item/weapon/spacecash/bundle/c50, /obj/item/weapon/spacecash/bundle/c500) + 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) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 7a128d7cfa0..a4d771aa81e 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -122,8 +122,11 @@ if(user.a_intent == I_HURT) if (!..()) //item/attack() does it's own messaging and logs return 0 // item/attack() will return 1 if they hit, 0 if they missed. - agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. stun *= 0.5 + if(status) //Checks to see if the stunbaton is on. + agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. + else + agony = 0 //Shouldn't really stun if it's off, should it? //we can't really extract the actual hit zone from ..(), unfortunately. Just act like they attacked the area they intended to. else //copied from human_defense.dm - human defence code should really be refactored some time. diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 2940ef02689..c10e83511f8 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -148,31 +148,6 @@ gauge_icon = "indicator_emergency_double" volume = 10 -/obj/item/weapon/tank/emergency_nitrogen - name = "emergency nitrogen tank" - desc = "An emergency air tank hastily painted red and issued to Vox crewmembers." - icon_state = "emergency_nitro" - gauge_icon = "indicator_emergency" - gauge_cap = 4 - flags = CONDUCT - slot_flags = SLOT_BELT - w_class = 2.0 - force = 4.0 - distribute_pressure = ONE_ATMOSPHERE*O2STANDARD - volume = 2 - - New() - ..() - src.air_contents.adjust_gas("nitrogen", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - - return - - - examine(mob/user) - if(..(user, 0) && air_contents.gas["nitrogen"] < 0.2 && loc==user) - user << text("The meter on \the [src] indicates you are almost out of air!") - user << sound('sound/effects/alert.ogg') - /* * Nitrogen */ diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index b8bd8d95e1a..fa4fa27f758 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -2,16 +2,13 @@ //Used to store information about the contents of the object. var/list/matter var/w_class // Size of the object. - var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj. animate_movement = 2 var/throwforce = 1 - var/list/attack_verb = list() //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" var/sharp = 0 // whether this object cuts var/edge = 0 // whether this object is more likely to dismember var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/damtype = "brute" - var/force = 0 var/armor_penetration = 0 var/show_messages diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 546621024eb..5029e166d21 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -217,6 +217,15 @@ M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2) qdel(src) return + if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len) + var/obj/item/weapon/storage/laundry_basket/LB = W + var/turf/T = get_turf(src) + for(var/obj/item/I in LB.contents) + LB.remove_from_storage(I, T) + user.visible_message("[user] empties \the [LB] into \the [src].", \ + "You empty \the [LB] into \the [src].", \ + "You hear rustling of clothes.") + return if(isrobot(user)) return if(W.loc != user) // This should stop mounted modules ending up outside the module. diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index f7d50ad0285..0722b5b0771 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -85,9 +85,9 @@ New() ..() for(var/i = 0, i < 3, i++) - new /obj/item/weapon/spacecash/bundle/c1000(src) + new /obj/item/weapon/spacecash/c1000(src) for(var/i = 0, i < 5, i++) - new /obj/item/weapon/spacecash/bundle/c500(src) + new /obj/item/weapon/spacecash/c500(src) for(var/i = 0, i < 6, i++) - new /obj/item/weapon/spacecash/bundle/c200(src) + new /obj/item/weapon/spacecash/c200(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index e3ea31375e2..1ce97a64a79 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -65,6 +65,8 @@ /obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob) if(src.opened) + if(istype(W, /obj/item/weapon/storage/laundry_basket)) + return ..(W,user) if(istype(W, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = W if(src.large) 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 78ddef7438f..fcbe9e90605 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -181,6 +181,7 @@ new /obj/item/clothing/head/beret/sec/corporate/warden(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src) new /obj/item/device/flashlight/maglight(src) + new /obj/item/device/megaphone(src) return diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 27ab1518b48..aa820a48fa1 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -202,8 +202,8 @@ /obj/structure/closet/wardrobe/yellow name = "yellow wardrobe" - icon_state = "wardrobe-y" - icon_closed = "wardrobe-y" + icon_state = "yellow" + icon_closed = "yellow" /obj/structure/closet/wardrobe/yellow/New() ..() @@ -342,27 +342,12 @@ new /obj/item/clothing/shoes/slippers(src) new /obj/item/clothing/shoes/slippers(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/science(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) return -/obj/structure/closet/wardrobe/toxins_white/New() - ..() - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist(src) - new /obj/item/clothing/under/rank/scientist/skirt(src) - new /obj/item/clothing/under/rank/scientist/skirt(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/suit/storage/toggle/labcoat(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/shoes/slippers(src) - new /obj/item/clothing/shoes/slippers(src) - new /obj/item/clothing/shoes/slippers(src) - return - - /obj/structure/closet/wardrobe/robotics_black name = "robotics wardrobe" icon_state = "black" @@ -378,6 +363,10 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/gloves/black(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/toxins(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) + new /obj/item/weapon/storage/backpack/satchel_tox(src) return @@ -396,6 +385,10 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(src) + new /obj/item/weapon/storage/backpack/chemistry(src) + new /obj/item/weapon/storage/backpack/chemistry(src) + new /obj/item/weapon/storage/backpack/satchel_chem(src) + new /obj/item/weapon/storage/backpack/satchel_chem(src) return @@ -414,6 +407,10 @@ new /obj/item/clothing/shoes/white(src) new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(src) + new /obj/item/weapon/storage/backpack/genetics(src) + new /obj/item/weapon/storage/backpack/genetics(src) + new /obj/item/weapon/storage/backpack/satchel_gen(src) + new /obj/item/weapon/storage/backpack/satchel_gen(src) return @@ -434,6 +431,10 @@ new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(src) new /obj/item/clothing/mask/surgical(src) new /obj/item/clothing/mask/surgical(src) + new /obj/item/weapon/storage/backpack/virology(src) + new /obj/item/weapon/storage/backpack/virology(src) + new /obj/item/weapon/storage/backpack/satchel_vir(src) + new /obj/item/weapon/storage/backpack/satchel_vir(src) return @@ -586,3 +587,5 @@ new /obj/item/clothing/under/suit_jacket/really_black(src) new /obj/item/clothing/under/suit_jacket/red(src) new /obj/item/clothing/under/scratch(src) + new /obj/item/weapon/storage/backpack/satchel(src) + new /obj/item/weapon/storage/backpack/satchel(src) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 17204e77c8d..b9c9a1b797e 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -51,6 +51,10 @@ for(var/i = 1;i<=held_count;i++) new held_type(src) +/obj/structure/largecrate/animal/mulebot + name = "Mulebot crate" + held_type = /mob/living/bot/mulebot + /obj/structure/largecrate/animal/corgi name = "corgi carrier" held_type = /mob/living/simple_animal/corgi diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm deleted file mode 100644 index 7d0bc76b180..00000000000 --- a/code/game/objects/structures/lamarr_cage.dm +++ /dev/null @@ -1,87 +0,0 @@ -/obj/structure/lamarr - name = "lab cage" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "labcage1" - desc = "A glass lab container for storing interesting creatures." - density = 1 - anchored = 1 - unacidable = 1//Dissolving the case would also delete Lamarr - var/health = 30 - var/occupied = 1 - var/destroyed = 0 - -/obj/structure/lamarr/ex_act(severity) - switch(severity) - if (1) - new /obj/item/weapon/material/shard( src.loc ) - Break() - qdel(src) - if (2) - if (prob(50)) - src.health -= 15 - src.healthcheck() - if (3) - if (prob(50)) - src.health -= 5 - src.healthcheck() - - -/obj/structure/lamarr/bullet_act(var/obj/item/projectile/Proj) - health -= Proj.damage - ..() - src.healthcheck() - return - -/obj/structure/lamarr/proc/healthcheck() - if (src.health <= 0) - if (!( src.destroyed )) - src.density = 0 - src.destroyed = 1 - new /obj/item/weapon/material/shard( src.loc ) - playsound(src, "shatter", 70, 1) - Break() - else - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - return - -/obj/structure/lamarr/update_icon() - if(src.destroyed) - src.icon_state = "labcageb[src.occupied]" - else - src.icon_state = "labcage[src.occupied]" - return - - -/obj/structure/lamarr/attackby(obj/item/weapon/W as obj, mob/user as mob) - src.health -= W.force - src.healthcheck() - ..() - return - -/obj/structure/lamarr/attack_hand(mob/user as mob) - if (src.destroyed) - return - else - usr << "You kick the lab cage." - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - O << "[usr] kicks the lab cage." - src.health -= 2 - healthcheck() - return - -/obj/structure/lamarr/proc/Break() - if(occupied) - new /obj/item/clothing/mask/facehugger/lamarr(src.loc) - occupied = 0 - update_icon() - return - -/obj/item/clothing/mask/facehugger/lamarr - name = "Lamarr" - desc = "The worst she might do is attempt to... couple with your head."//hope we don't get sued over a harmless reference, rite? - sterile = 1 - gender = FEMALE - -/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled - return diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index aced90f9bb6..88e771f8edd 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -30,7 +30,7 @@ /obj/structure/mirror/bullet_act(var/obj/item/projectile/Proj) - + if(prob(Proj.get_structure_damage() * 2)) if(!shattered) shatter() @@ -63,31 +63,3 @@ else user.visible_message("[user] hits [src] and bounces off!") return 1 - -// The following mirror is ~special~. -/obj/structure/mirror/raider - name = "cracked mirror" - desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it." - icon_state = "mirror_broke" - shattered = 1 - -/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user) - if(istype(get_area(src),/area/syndicate_mothership)) - if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != "Vox" && is_alien_whitelisted(user, "Vox")) - var/choice = input("Do you wish to become a true Vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes") - if(choice && choice == "Yes") - var/mob/living/carbon/human/vox/vox = new(get_turf(src),"Vox") - vox.gender = user.gender - raiders.equip(vox) - if(user.mind) - user.mind.transfer_to(vox) - spawn(1) - var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN) - if(!newname || newname == "") - var/datum/language/L = all_languages[vox.species.default_language] - newname = L.get_random_name() - vox.real_name = newname - vox.name = vox.real_name - raiders.update_access(vox) - qdel(user) - ..() diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm index fa53637f880..a39e9658dd9 100644 --- a/code/game/objects/structures/musician.dm +++ b/code/game/objects/structures/musician.dm @@ -220,10 +220,10 @@ for(var/line in song.lines) //world << line - for(var/beat in text2list(lowertext(line), ",")) + for(var/beat in splittext(lowertext(line), ",")) //world << "beat: [beat]" - var/list/notes = text2list(beat, "/") - for(var/note in text2list(notes[1], "-")) + var/list/notes = splittext(beat, "/") + for(var/note in splittext(notes[1], "-")) //world << "note: [note]" if(!playing || !anchored)//If the piano is playing, or is loose playing = 0 @@ -387,7 +387,7 @@ //split into lines spawn() - var/list/lines = text2list(t, "\n") + var/list/lines = splittext(t, "\n") var/tempo = 5 if(copytext(lines[1],1,6) == "BPM: ") tempo = 600 / text2num(copytext(lines[1],6)) diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm deleted file mode 100644 index cbe89ec86f0..00000000000 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ /dev/null @@ -1,86 +0,0 @@ -//Alium nests. Essentially beds with an unbuckle delay that only aliums can buckle mobs to. -#define NEST_RESIST_TIME 1200 - -/obj/structure/bed/nest - name = "alien nest" - desc = "It's a gruesome pile of thick, sticky resin shaped like a nest." - icon = 'icons/mob/alien.dmi' - icon_state = "nest" - var/health = 100 - -/obj/structure/bed/nest/update_icon() - return - -/obj/structure/bed/nest/user_unbuckle_mob(mob/user as mob) - if(buckled_mob) - if(buckled_mob.buckled == src) - if(buckled_mob != user) - buckled_mob.visible_message(\ - "[user.name] pulls [buckled_mob.name] free from the sticky nest!",\ - "[user.name] pulls you free from the gelatinous resin.",\ - "You hear squelching...") - buckled_mob.pixel_y = 0 - buckled_mob.old_y = 0 - unbuckle_mob() - else - if(world.time <= buckled_mob.last_special+NEST_RESIST_TIME) - return - buckled_mob.last_special = world.time - buckled_mob.visible_message(\ - "[buckled_mob.name] struggles to break free of the gelatinous resin...",\ - "You struggle to break free from the gelatinous resin...",\ - "You hear squelching...") - spawn(NEST_RESIST_TIME) - if(user && buckled_mob && user.buckled == src) - buckled_mob.last_special = world.time - buckled_mob.pixel_y = 0 - buckled_mob.old_y = 0 - unbuckle_mob() - src.add_fingerprint(user) - return - -/obj/structure/bed/nest/user_buckle_mob(mob/M as mob, mob/user as mob) - if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) - return - - unbuckle_mob() - - var/mob/living/carbon/xenos = user - var/mob/living/carbon/victim = M - - if(istype(victim) && locate(/obj/item/organ/internal/xenos/hivenode) in victim.internal_organs) - return - - if(istype(xenos) && !(locate(/obj/item/organ/internal/xenos/hivenode) in xenos.internal_organs)) - return - - if(M == usr) - return - else - M.visible_message(\ - "[user.name] secretes a thick vile goo, securing [M.name] into [src]!",\ - "[user.name] drenches you in a foul-smelling resin, trapping you in the [src]!",\ - "You hear squelching...") - M.buckled = src - M.loc = src.loc - M.set_dir(src.dir) - M.update_canmove() - M.pixel_y = 6 - M.old_y = 6 - src.buckled_mob = M - src.add_fingerprint(user) - return - -/obj/structure/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob) - var/aforce = W.force - health = max(0, health - aforce) - playsound(loc, 'sound/effects/attackblob.ogg', 100, 1) - for(var/mob/M in viewers(src, 7)) - M.show_message("[user] hits [src] with [W]!", 1) - healthcheck() - -/obj/structure/bed/nest/proc/healthcheck() - if(health <=0) - density = 0 - qdel(src) - return diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 47a2f53fb3f..0f9b4a603a8 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -367,7 +367,7 @@ obj/structure/ex_act(severity) // currently on. /obj/structure/transit_tube_pod/proc/mix_air() var/datum/gas_mixture/environment = loc.return_air() - + //note that share_ratio assumes both gas mixes have the same volume, //so if the volume is changed this may need to be changed as well. air_contents.share_ratio(environment, 1) @@ -539,7 +539,7 @@ obj/structure/ex_act(severity) if(text in direction_table) return direction_table[text] - var/list/split_text = text2list(text, "-") + var/list/split_text = splittext(text, "-") // If the first token is D, the icon_state represents // a purely decorative tube, and doesn't actually diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index 655eb5c5109..a02c67c968b 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -16,12 +16,12 @@ var/list/selection switch(utype) if("Underwear") - var/utype2 = alert("Which section do you want to pick from?",,"Male", "Female") - switch(utype2) - if("Male") - selection = underwear_m - if("Female") - selection = underwear_f + utype = alert("Which section do you want to pick from?",, "Top", "Bottom",) + switch(utype) + if("Top") + selection = underwear_top_t + if("Bottom") + selection = underwear_bottom_t if("Undershirts") selection = undershirt_t if("Socks") @@ -34,8 +34,10 @@ H.undershirt = selection[pick] else if(utype == "Socks") H.socks = selection[pick] + else if(utype == "Top") + H.underwear_top = selection[pick] else - H.underwear = selection[pick] + H.underwear_bottom = selection[pick] H.update_body(1) return 1 \ No newline at end of file diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 64129a80f7d..3c39c382fa2 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -246,11 +246,13 @@ else if(reinf && state == 0) anchored = !anchored update_nearby_icons() + update_verbs() playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) user << (anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.") else if(!reinf) anchored = !anchored update_nearby_icons() + update_verbs() playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) user << (anchored ? "You have fastened the window to the floor." : "You have unfastened the window.") else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <= 1) @@ -261,6 +263,7 @@ if(!glasstype) user << "You're not sure how to dismantle \the [src] properly." else + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) visible_message("[user] dismantles \the [src].") if(dir == SOUTHWEST) var/obj/item/stack/material/mats = new glasstype(loc) @@ -288,7 +291,7 @@ return -/obj/structure/window/verb/rotate() +/obj/structure/window/proc/rotate() set name = "Rotate Window Counter-Clockwise" set category = "Object" set src in oview(1) @@ -307,7 +310,7 @@ return -/obj/structure/window/verb/revrotate() +/obj/structure/window/proc/revrotate() set name = "Rotate Window Clockwise" set category = "Object" set src in oview(1) @@ -331,6 +334,7 @@ //player-constructed windows if (constructed) anchored = 0 + update_verbs() if (start_dir) set_dir(start_dir) @@ -373,6 +377,15 @@ for(var/obj/structure/window/W in orange(src, 1)) W.update_icon() +//Updates the availabiliy of the rotation verbs +/obj/structure/window/proc/update_verbs() + if(anchored) + verbs -= /obj/structure/window/proc/rotate + verbs -= /obj/structure/window/proc/revrotate + else + verbs += /obj/structure/window/proc/rotate + verbs += /obj/structure/window/proc/revrotate + //merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm) /obj/structure/window/update_icon() //A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong. diff --git a/code/game/response_team.dm b/code/game/response_team.dm index 7a536cd6cac..fd7fbe1b9b2 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -46,7 +46,7 @@ client/verb/JoinResponseTeam() usr << "You cannot join the response team at this time." return - if(istype(usr,/mob/dead/observer) || istype(usr,/mob/new_player)) + if(istype(usr,/mob/observer/dead) || istype(usr,/mob/new_player)) if(!send_emergency_team) usr << "No emergency response team is currently being sent." return diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index e98d59528ff..cc91ee49a20 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -49,6 +49,7 @@ var/list/mechtoys = list( layer = 4 explosion_resistance = 5 var/list/mobs_can_pass = list( + /mob/living/bot, /mob/living/carbon/slime, /mob/living/simple_animal/mouse, /mob/living/silicon/robot/drone diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index 484491e7d68..66434456f92 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -21,7 +21,7 @@ var/list/floor_decals = list() var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]" if(!floor_decals[cache_key]) var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir) - I.layer = T.layer + 0.01 + I.layer = T.layer I.color = src.color I.alpha = src.alpha floor_decals[cache_key] = I diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index f1db688d0a7..e5341c77199 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -28,7 +28,7 @@ icon = 'icons/turf/floors.dmi' icon_state = "plating" -/turf/simulated/shuttle/plating/vox //Skipjack plating +/turf/simulated/shuttle/plating/skipjack //Skipjack plating oxygen = 0 nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD @@ -36,7 +36,7 @@ name = "Brig floor" // Also added it into the 2x3 brig area of the shuttle. icon_state = "floor4" -/turf/simulated/shuttle/floor4/vox //skipjack floors +/turf/simulated/shuttle/floor4/skipjack //skipjack floors name = "skipjack floor" oxygen = 0 nitrogen = MOLES_N2STANDARD + MOLES_O2STANDARD diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm index 46498d9be56..9866e26087d 100644 --- a/code/game/turfs/simulated/wall_types.dm +++ b/code/game/turfs/simulated/wall_types.dm @@ -37,9 +37,9 @@ ..(newloc,"sandstone","diamond") // Kind of wondering if this is going to bite me in the butt. -/turf/simulated/wall/voxshuttle/New(var/newloc) - ..(newloc,"voxalloy") -/turf/simulated/wall/voxshuttle/attackby() +/turf/simulated/wall/skipjack/New(var/newloc) + ..(newloc,"alienalloy") +/turf/simulated/wall/skipjack/attackby() return /turf/simulated/wall/titanium/New(var/newloc) ..(newloc,"titanium") diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index f12d7741378..c8dfc8deddc 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -18,7 +18,7 @@ entry += " - Unconscious" if(DEAD) if(isobserver(C.mob)) - var/mob/dead/observer/O = C.mob + var/mob/observer/dead/O = C.mob if(O.started_as_observer) entry += " - Observing" else @@ -41,6 +41,13 @@ if(is_special_character(C.mob)) entry += " - Antagonist" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + entry += " (AFK - " + entry += "[round(seconds / 60)] minutes, " + entry += "[seconds % 60] seconds)" + entry += " (?)" Lines += entry else @@ -86,7 +93,10 @@ msg += " - Playing" if(C.is_afk()) - msg += " (AFK)" + var/seconds = C.last_activity_seconds() + msg += " (AFK - " + msg += "[round(seconds / 60)] minutes, " + msg += "[seconds % 60] seconds)" msg += "\n" num_admins_online++ @@ -101,7 +111,10 @@ modmsg += " - Playing" if(C.is_afk()) - modmsg += " (AFK)" + var/seconds = C.last_activity_seconds() + modmsg += " (AFK - " + modmsg += "[round(seconds / 60)] minutes, " + modmsg += "[seconds % 60] seconds)" modmsg += "\n" num_mods_online++ @@ -115,7 +128,10 @@ mentmsg += " - Playing" if(C.is_afk()) - mentmsg += " (AFK)" + var/seconds = C.last_activity_seconds() + mentmsg += " (AFK - " + mentmsg += "[round(seconds / 60)] minutes, " + mentmsg += "[seconds % 60] seconds)" mentmsg += "\n" num_mentors_online++ diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index c4729f4a644..a3e6a5032d3 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -145,16 +145,10 @@ proc/admin_notice(var/message, var/rights) body += {"

Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.

Observer | - \[ Xenos: Larva - Drone - Hunter - Sentinel - Queen \] | \[ Crew: Human Unathi Tajaran - Skrell - Vox \] | \[ + Skrell \] | \[ Nymph Diona \] | \[ slime: Baby, @@ -1257,7 +1251,7 @@ proc/admin_notice(var/message, var/rights) //Returns 1 to let the dragdrop code know we are trapping this event //Returns 0 if we don't plan to trap the event -/datum/admins/proc/cmd_ghost_drag(var/mob/dead/observer/frommob, var/mob/living/tomob) +/datum/admins/proc/cmd_ghost_drag(var/mob/observer/dead/frommob, var/mob/living/tomob) if(!istype(frommob)) return //Extra sanity check to make sure only observers are shoved into things @@ -1356,7 +1350,7 @@ proc/admin_notice(var/message, var/rights) message_admins(msg) else usr << "You do not have access to this command." - + /datum/admins/proc/add_tcrystals(mob/living/carbon/human/H as mob) set category = "Debug" set name = "Add Telecrystals" diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 5d1f5db452e..3652237454c 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -14,7 +14,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights if(!length(line)) continue if(copytext(line,1,2) == "#") continue - var/list/List = text2list(line,"+") + var/list/List = splittext(line,"+") if(!List.len) continue var/rank = ckeyEx(List[1]) @@ -77,7 +77,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights if(copytext(line,1,2) == "#") continue //Split the line at every "-" - var/list/List = text2list(line, "-") + var/list/List = splittext(line, "-") if(!List.len) continue //ckey is before the first "-" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d1c61998330..228030f157c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -400,9 +400,9 @@ var/list/admin_verbs_mentor = list( set category = "Admin" set name = "Aghost" if(!holder) return - if(istype(mob,/mob/dead/observer)) + if(istype(mob,/mob/observer/dead)) //re-enter - var/mob/dead/observer/ghost = mob + var/mob/observer/dead/ghost = mob if(!is_mentor(usr.client)) ghost.can_reenter_corpse = 1 if(ghost.can_reenter_corpse) @@ -418,7 +418,7 @@ var/list/admin_verbs_mentor = list( else //ghostize var/mob/body = mob - var/mob/dead/observer/ghost = body.ghostize(1) + var/mob/observer/dead/ghost = body.ghostize(1) ghost.admin_ghosted = 1 if(body) body.teleop = ghost @@ -822,7 +822,7 @@ var/list/admin_verbs_mentor = list( if(!istype(M, /mob/living/carbon/human)) usr << "\red You can only do this to humans!" return - switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No")) + switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Tajaran can result in unintended consequences.",,"Yes","No")) if("No") return var/new_facial = input("Please select facial hair color.", "Character Generation") as color diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index a723fe37956..4a892d893da 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -2,7 +2,7 @@ /datum/admins/proc/create_mob(var/mob/user) if (!create_mob_html) var/mobjs = null - mobjs = list2text(typesof(/mob), ";") + mobjs = jointext(typesof(/mob), ";") create_mob_html = file2text('html/create_object.html') create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 779cb7bc90a..3778441b1dc 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -3,7 +3,7 @@ /datum/admins/proc/create_object(var/mob/user) if (!create_object_html) var/objectjs = null - objectjs = list2text(typesof(/obj), ";") + objectjs = jointext(typesof(/obj), ";") create_object_html = file2text('html/create_object.html') create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") @@ -22,7 +22,7 @@ if (!quick_create_object_html) var/objectjs = null - objectjs = list2text(typesof(path), ";") + objectjs = jointext(typesof(path), ";") quick_create_object_html = file2text('html/create_object.html') quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index 0938b7bd33d..fdaa103b5d5 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -2,7 +2,7 @@ /datum/admins/proc/create_turf(var/mob/user) if (!create_turf_html) var/turfjs = null - turfjs = list2text(typesof(/turf), ";") + turfjs = jointext(typesof(/turf), ";") create_turf_html = file2text('html/create_object.html') create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"") diff --git a/code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm b/code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm deleted file mode 100644 index 11dad2e84c6..00000000000 --- a/code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/random_event/trigger_xenomorph_infestation - name = "Trigger a Xenomorph Infestation" - -/datum/admin_secret_item/random_event/trigger_xenomorph_infestation/execute(var/mob/user) - . = ..() - if(.) - return xenomorphs.attempt_random_spawn() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 40f10e3f440..99b3f7a2f43 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -262,7 +262,7 @@ message_admins("\blue [key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]]; deletemob=[delmob]", 1) switch(href_list["simplemake"]) - if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob ) + if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob ) if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob ) if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"]) @@ -769,7 +769,7 @@ message_admins("\blue [key_name_admin(usr)] removed [t]", 1) jobban_remove(t) href_list["ban"] = 1 // lets it fall through and refresh - var/t_split = text2list(t, " - ") + var/t_split = splittext(t, " - ") var/key = t_split[1] var/job = t_split[2] DB_ban_unban(ckey(key), BANTYPE_JOB_PERMA, job) @@ -1119,16 +1119,6 @@ log_admin("[key_name(usr)] AIized [key_name(H)]") H.AIize() - else if(href_list["makealien"]) - if(!check_rights(R_SPAWN)) return - - var/mob/living/carbon/human/H = locate(href_list["makealien"]) - if(!istype(H)) - usr << "This can only be used on instances of type /mob/living/carbon/human" - return - - usr.client.cmd_admin_alienize(H) - else if(href_list["makeslime"]) if(!check_rights(R_SPAWN)) return @@ -1584,9 +1574,9 @@ alert("Select fewer object types, (max 5)") return else if(length(removed_paths)) - alert("Removed:\n" + list2text(removed_paths, "\n")) + alert("Removed:\n" + jointext(removed_paths, "\n")) - var/list/offset = text2list(href_list["offset"],",") + var/list/offset = splittext(href_list["offset"],",") var/number = dd_range(1, 100, text2num(href_list["object_count"])) var/X = offset.len > 0 ? text2num(offset[1]) : 0 var/Y = offset.len > 1 ? text2num(offset[2]) : 0 @@ -1927,7 +1917,7 @@ mob/living/silicon/ai/can_centcom_reply() if(client && eyeobj) return "|EYE" -/mob/dead/observer/extra_admin_link(var/source) +/mob/observer/dead/extra_admin_link(var/source) if(mind && mind.current) return "|BDY" diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 5f4595e026c..f4ce67aa2c9 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -29,7 +29,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," var/original_msg = msg //explode the input msg into a list - var/list/msglist = text2list(msg, " ") + var/list/msglist = splittext(msg, " ") //generate keywords lookup var/list/surnames = list() @@ -40,7 +40,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(M.mind) indexing += M.mind.name for(var/string in indexing) - var/list/L = text2list(string, " ") + var/list/L = splittext(string, " ") var/surname_found = 0 //surnames for(var/i=L.len, i>=1, i--) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index e579ca15444..e57720bb62d 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,7 +1,7 @@ /mob/proc/on_mob_jump() return -/mob/dead/observer/on_mob_jump() +/mob/observer/dead/on_mob_jump() following = null /client/proc/Jump(var/area/A in return_sorted_areas()) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 61050526d51..f031bc2835c 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -21,7 +21,7 @@ if(T.mob) if(istype(T.mob, /mob/new_player)) targets["(New Player) - [T]"] = T - else if(istype(T.mob, /mob/dead/observer)) + else if(istype(T.mob, /mob/observer/dead)) targets["[T.mob.name](Ghost) - [T]"] = T else targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T diff --git a/code/modules/admin/verbs/check_customitem_activity.dm b/code/modules/admin/verbs/check_customitem_activity.dm index 1bda56c6e58..80bbfccc120 100644 --- a/code/modules/admin/verbs/check_customitem_activity.dm +++ b/code/modules/admin/verbs/check_customitem_activity.dm @@ -37,11 +37,11 @@ var/inactive_keys = "None
" var/list/ckeys_with_customitems = list() var/file = file2text("config/custom_items.txt") - var/lines = text2list(file, "\n") + var/lines = splittext(file, "\n") for(var/line in lines) // split & clean up - var/list/Entry = text2list(line, ":") + var/list/Entry = splittext(line, ":") for(var/i = 1 to Entry.len) Entry[i] = trim(Entry[i]) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 94f13c9a1b2..57deed42a25 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -85,7 +85,7 @@ var/mob/choice = input("Choose a player to play the pAI", "Spawn pAI") in available if(!choice) return 0 - if(!istype(choice, /mob/dead/observer)) + if(!istype(choice, /mob/observer/dead)) var/confirm = input("[choice.key] isn't ghosting right now. Are you sure you want to yank them out of them out of their body and place them in this pAI?", "Spawn pAI Confirmation", "No") in list("Yes", "No") if(confirm != "Yes") return 0 @@ -100,23 +100,6 @@ paiController.pai_candidates.Remove(candidate) feedback_add_details("admin_verb","MPAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_alienize(var/mob/M in mob_list) - set category = "Fun" - set name = "Make Alien" - - if(!ticker) - alert("Wait until the game starts") - return - if(ishuman(M)) - log_admin("[key_name(src)] has alienized [M.key].") - spawn(10) - M:Alienize() - feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - log_admin("[key_name(usr)] made [key_name(M)] into an alien.") - message_admins("\blue [key_name_admin(usr)] made [key_name(M)] into an alien.", 1) - else - alert("Invalid mob") - /client/proc/cmd_admin_slimeize(var/mob/M in mob_list) set category = "Fun" set name = "Make slime" @@ -231,7 +214,7 @@ set name = "Del-All" // to prevent REALLY stupid deletions - var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/dead, /mob/dead/observer, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai) + var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/observer/dead, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai) var/hsbitem = input(usr, "Choose an object to delete.", "Delete:") as null|anything in typesof(/obj) + typesof(/mob) - blocked if(hsbitem) for(var/atom/O in world) @@ -299,7 +282,7 @@ if(alert("This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.",,"Yes","No") != "Yes") return else - var/mob/dead/observer/ghost = new/mob/dead/observer(M,1) + var/mob/observer/dead/ghost = new/mob/observer/dead(M,1) ghost.ckey = M.ckey message_admins("\blue [key_name_admin(usr)] assumed direct control of [M].", 1) log_admin("[key_name(usr)] assumed direct control of [M].") @@ -607,7 +590,7 @@ for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) for(var/i=3, i>0, i--) - sec_briefcase.contents += new /obj/item/weapon/spacecash/bundle/c1000 + sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000 sec_briefcase.contents += new /obj/item/weapon/gun/energy/crossbow sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba sec_briefcase.contents += new /obj/item/ammo_magazine/a357 @@ -949,17 +932,17 @@ switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients")) if("Players") - usr << list2text(player_list,",") + usr << jointext(player_list,",") if("Admins") - usr << list2text(admins,",") + usr << jointext(admins,",") if("Mobs") - usr << list2text(mob_list,",") + usr << jointext(mob_list,",") if("Living Mobs") - usr << list2text(living_mob_list,",") + usr << jointext(living_mob_list,",") if("Dead Mobs") - usr << list2text(dead_mob_list,",") + usr << jointext(dead_mob_list,",") if("Clients") - usr << list2text(clients,",") + usr << jointext(clients,",") // DNA2 - Admin Hax /client/proc/cmd_admin_toggle_block(var/mob/M,var/block) diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 29d2b95d88e..5661097aab7 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -140,7 +140,6 @@ var/list/debug_verbs = list ( ,/client/proc/ticklag ,/client/proc/cmd_admin_grantfullaccess ,/client/proc/kaboom - ,/client/proc/splash ,/client/proc/cmd_admin_areatest ,/client/proc/cmd_admin_rejuvenate ,/datum/admins/proc/show_traitor_panel diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index c1cde11dadb..0c6a0f16078 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -189,7 +189,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) M.client.prefs.muted |= mute_type log_admin("SPAM AUTOMUTE: [muteunmute] [key_name(M)] from [mute_string]") message_admins("SPAM AUTOMUTE: [muteunmute] [key_name_admin(M)] from [mute_string].", 1) - M << "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin." + M << "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin." feedback_add_details("admin_verb","AUTOMUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return @@ -202,7 +202,7 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]") message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1) - M << "You have been [muteunmute] from [mute_string]." + M << "You have been [muteunmute] from [mute_string]." feedback_add_details("admin_verb","MUTE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_add_random_ai_law() @@ -236,7 +236,7 @@ Ccomp's first proc. var/list/ghosts = list() var/list/sortmob = sortAtom(mob_list) // get the mob list. /var/any=0 - for(var/mob/dead/observer/M in sortmob) + 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) @@ -266,7 +266,7 @@ Ccomp's first proc. src << "Hrm, appears you didn't select a ghost" // Sanity check, if no ghosts in the list we don't want to edit a null variable and cause a runtime error. return - var/mob/dead/observer/G = ghosts[target] + var/mob/observer/dead/G = ghosts[target] if(G.has_enabled_antagHUD && config.antag_hud_restricted) var/response = alert(src, "Are you sure you wish to allow this individual to play?","Ghost has used AntagHUD","Yes","No") if(response == "No") return @@ -291,9 +291,9 @@ Ccomp's first proc. src << "Only administrators may use this command." var/action="" if(config.antag_hud_allowed) - for(var/mob/dead/observer/g in get_ghosts()) + for(var/mob/observer/dead/g in get_ghosts()) if(!g.client.holder) //Remove the verb from non-admin ghosts - g.verbs -= /mob/dead/observer/verb/toggle_antagHUD + g.verbs -= /mob/observer/dead/verb/toggle_antagHUD if(g.antagHUD) g.antagHUD = 0 // Disable it on those that have it enabled g.has_enabled_antagHUD = 2 // We'll allow them to respawn @@ -302,9 +302,9 @@ Ccomp's first proc. src << "\red AntagHUD usage has been disabled" action = "disabled" else - for(var/mob/dead/observer/g in get_ghosts()) + for(var/mob/observer/dead/g in get_ghosts()) if(!g.client.holder) // Add the verb back for all non-admin ghosts - g.verbs += /mob/dead/observer/verb/toggle_antagHUD + g.verbs += /mob/observer/dead/verb/toggle_antagHUD g << "\blue The Administrator has enabled AntagHUD " // Notify all observers they can now use AntagHUD config.antag_hud_allowed = 1 action = "enabled" @@ -324,13 +324,13 @@ Ccomp's first proc. src << "Only administrators may use this command." var/action="" if(config.antag_hud_restricted) - for(var/mob/dead/observer/g in get_ghosts()) + for(var/mob/observer/dead/g in get_ghosts()) g << "\blue The administrator has lifted restrictions on joining the round if you use AntagHUD" action = "lifted restrictions" config.antag_hud_restricted = 0 src << "\blue AntagHUD restrictions have been lifted" else - for(var/mob/dead/observer/g in get_ghosts()) + for(var/mob/observer/dead/g in get_ghosts()) g << "\red The administrator has placed restrictions on joining the round if you use AntagHUD" g << "\red Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions " g.antagHUD = 0 @@ -358,8 +358,8 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!input) return - var/mob/dead/observer/G_found - for(var/mob/dead/observer/G in player_list) + var/mob/observer/dead/G_found + for(var/mob/observer/dead/G in player_list) if(G.ckey == input) G_found = G break @@ -627,7 +627,7 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[key_name(usr)] has gibbed [key_name(M)]") message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1) - if(istype(M, /mob/dead/observer)) + if(istype(M, /mob/observer/dead)) gibs(M.loc) return @@ -640,7 +640,7 @@ Traitors and the like can also be revived with the previous role mostly intact. var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") if(confirm == "Yes") - if (istype(mob, /mob/dead/observer)) // so they don't spam gibs everywhere + if (istype(mob, /mob/observer/dead)) // so they don't spam gibs everywhere return else mob.gib() diff --git a/code/modules/admin/view_variables/helpers.dm b/code/modules/admin/view_variables/helpers.dm index 44d524e06d3..67eefc018de 100644 --- a/code/modules/admin/view_variables/helpers.dm +++ b/code/modules/admin/view_variables/helpers.dm @@ -75,7 +75,6 @@ - "} diff --git a/code/modules/blob/blob.dm b/code/modules/blob/blob.dm index 7db20fe1ce5..88f04e1924a 100644 --- a/code/modules/blob/blob.dm +++ b/code/modules/blob/blob.dm @@ -90,10 +90,6 @@ if(V) V.ex_act(2) return - var/obj/machinery/bot/B = locate() in T - if(B) - B.ex_act(2) - return var/obj/mecha/M = locate() in T if(M) M.visible_message("The blob attacks \the [M]!") diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 0d34aa76599..aa1cf3b1ad3 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -281,6 +281,9 @@ if(inactivity > duration) return inactivity return 0 +/client/proc/last_activity_seconds() + return inactivity / 10 + //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 516dd33cdd1..e3565515070 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -3,14 +3,16 @@ sort_order = 4 /datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S) - S["underwear"] >> pref.underwear + S["underwear_top"] >> pref.underwear_top + S["underwear_bottom"] >> pref.underwear_bottom S["undershirt"] >> pref.undershirt S["socks"] >> pref.socks S["backbag"] >> pref.backbag S["pdachoice"] >> pref.pdachoice /datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) - S["underwear"] << pref.underwear + S["underwear_top"] << pref.underwear_top + S["underwear_bottom"] << pref.underwear_bottom S["undershirt"] << pref.undershirt S["socks"] << pref.socks S["backbag"] << pref.backbag @@ -22,9 +24,12 @@ if(!islist(pref.gear)) pref.gear = list() - var/undies = get_undies() - if(!get_key_by_value(undies, pref.underwear)) - pref.underwear = undies[1] + var/undies_top = get_undies_top() + var/undies_bottom = get_undies_bottom() + if(!get_key_by_value(undies_top, pref.underwear_top)) + pref.underwear_top = undies_top[1] + if(!get_key_by_value(undies_bottom, pref.underwear_bottom)) + pref.underwear_bottom = undies_bottom[1] if(!get_key_by_value(undershirt_t, pref.undershirt)) pref.undershirt = undershirt_t[1] if(!get_key_by_value(socks_t, pref.socks)) @@ -32,21 +37,31 @@ /datum/category_item/player_setup_item/general/equipment/content() . += "Equipment:
" - . += "Underwear: [get_key_by_value(get_undies(),pref.underwear)]
" + . += "Underwear Top: [get_key_by_value(get_undies_top(),pref.underwear_top)]
" + . += "Underwear Bottom: [get_key_by_value(get_undies_bottom(),pref.underwear_bottom)]
" . += "Undershirt: [get_key_by_value(undershirt_t,pref.undershirt)]
" . += "Socks: [get_key_by_value(socks_t,pref.socks)]
" . += "Backpack Type: [backbaglist[pref.backbag]]
" . += "PDA Type: [pdachoicelist[pref.pdachoice]]
" -/datum/category_item/player_setup_item/general/equipment/proc/get_undies() - return pref.gender == MALE ? underwear_m : underwear_f +/datum/category_item/player_setup_item/general/equipment/proc/get_undies_top() + return underwear_top_t +/datum/category_item/player_setup_item/general/equipment/proc/get_undies_bottom() + return underwear_bottom_t /datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) - if(href_list["change_underwear"]) - var/underwear_options = get_undies() - var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference", get_key_by_value(get_undies(),pref.underwear)) as null|anything in underwear_options - if(!isnull(new_underwear) && CanUseTopic(user)) - pref.underwear = underwear_options[new_underwear] + if(href_list["change_underwear_top"]) + var/underwear_top_options = get_undies_top() + var/new_underwear_top = input(user, "Choose your character's top underwear:", "Character Preference", get_key_by_value(get_undies_top(),pref.underwear_top)) as null|anything in underwear_top_options + if(!isnull(new_underwear_top) && CanUseTopic(user)) + pref.underwear_top = underwear_top_options[new_underwear_top] + return TOPIC_REFRESH + + else if(href_list["change_underwear_bottom"]) + var/underwear_bottom_options = get_undies_bottom() + var/new_underwear_bottom = input(user, "Choose your character's bottom underwear:", "Character Preference", get_key_by_value(get_undies_bottom(),pref.underwear_bottom)) as null|anything in underwear_bottom_options + if(!isnull(new_underwear_bottom) && CanUseTopic(user)) + pref.underwear_bottom = underwear_bottom_options[new_underwear_bottom] return TOPIC_REFRESH else if(href_list["change_undershirt"]) diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 36fd2fc140a..a58f3a450a0 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -184,4 +184,256 @@ /datum/gear/head/zhan_scarf display_name = "Zhan headscarf" path = /obj/item/clothing/head/tajaran/scarf - whitelisted = "Tajara" \ No newline at end of file + whitelisted = "Tajara" + +/datum/gear/head/hijab + display_name = "hijab, black" + 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/kippa + display_name = "kippa, black" + 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/turban + display_name = "turban, black" + 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 diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 6d9a253398f..997520a1c7a 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -98,6 +98,10 @@ 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/labcoat display_name = "labcoat" path = /obj/item/clothing/suit/storage/toggle/labcoat @@ -161,6 +165,10 @@ display_name = "poncho, red" path = /obj/item/clothing/suit/poncho/red +/datum/gear/suit/poncho/security + display_name = "poncho, security" + path = /obj/item/clothing/suit/poncho/security + /datum/gear/suit/unathi_robe display_name = "roughspun robe" path = /obj/item/clothing/suit/unathi/robe diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 682e7629374..927ed31743f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -192,6 +192,21 @@ path = /obj/item/clothing/under/rank/cargo/skirt allowed_roles = list("Quartermaster") +/datum/gear/uniform/skirt/warden + display_name = "skirt, warden" + path = /obj/item/clothing/under/rank/warden/skirt + allowed_roles = list("Head of Security", "Warden") + +/datum/gear/uniform/skirt/security + display_name = "skirt, security" + path = /obj/item/clothing/under/rank/security/skirt + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") + +/datum/gear/uniform/skirt/head_of_security + display_name = "skirt, hos" + path = /obj/item/clothing/under/rank/head_of_security/skirt + allowed_roles = list("Head of Security") + /datum/gear/uniform/jeans_qm display_name = "jeans, QM" path = /obj/item/clothing/under/rank/cargo/jeans @@ -383,7 +398,7 @@ /datum/gear/uniform/scrubs display_name = "scrubs, black" path = /obj/item/clothing/under/rank/medical/black - allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Roboticist") /datum/gear/uniform/scrubs/blue display_name = "scrubs, blue" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 73531b82e25..313e507498a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -30,7 +30,8 @@ datum/preferences var/age = 30 //age of character var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). var/b_type = "A+" //blood type (not-chooseable) - var/underwear //underwear type + var/underwear_top + var/underwear_bottom var/undershirt //undershirt type var/socks //socks type var/backbag = 2 //backpack type @@ -333,7 +334,8 @@ datum/preferences else if(status == "mechanical") I.robotize() - character.underwear = underwear + character.underwear_bottom = underwear_bottom + character.underwear_top = underwear_top character.undershirt = undershirt character.socks = socks diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 84b5a027980..88ef03dda2d 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -8,7 +8,7 @@ Sprites used when the clothing item is refit. This is done by setting icon_override. For best results, if this is set then sprite_sheets should be null and vice versa, but that is by no means necessary. Ideally, sprite_sheets_refit should be used for "hard" clothing items that can't change shape very well to fit the wearer (e.g. helmets, hardsuits), - while sprite_sheets should be used for "flexible" clothing items that do not need to be refitted (e.g. vox wearing jumpsuits). + while sprite_sheets should be used for "flexible" clothing items that do not need to be refitted (e.g. aliens wearing jumpsuits). */ var/list/sprite_sheets_refit = null var/ear_protection = 0 @@ -204,9 +204,8 @@ body_parts_covered = HANDS slot_flags = SLOT_GLOVES attack_verb = list("challenged") - species_restricted = list("exclude","Unathi","Tajara", "Vox") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/gloves.dmi', "Teshari" = 'icons/mob/species/seromi/gloves.dmi', ) @@ -264,7 +263,6 @@ var/on = 0 sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi', "Teshari" = 'icons/mob/species/seromi/head.dmi' ) @@ -363,7 +361,6 @@ slot_flags = SLOT_MASK body_parts_covered = FACE|EYES sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/masks.dmi', "Teshari" = 'icons/mob/species/seromi/masks.dmi', ) @@ -397,9 +394,8 @@ slowdown = SHOES_SLOWDOWN force = 2 var/overshoes = 0 - species_restricted = list("exclude","Teshari", "Unathi","Tajara","Vox") + species_restricted = list("exclude","Teshari", "Unathi","Tajara") sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/shoes.dmi', "Teshari" = 'icons/mob/species/seromi/shoes.dmi', ) @@ -474,7 +470,6 @@ w_class = 3 sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/suit.dmi', "Teshari" = 'icons/mob/species/seromi/suit.dmi' ) @@ -511,7 +506,6 @@ var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/uniform.dmi', "Teshari" = 'icons/mob/species/seromi/uniform.dmi' ) @@ -665,7 +659,7 @@ /obj/item/clothing/under/proc/set_sensors(mob/usr as mob) var/mob/M = usr - if (istype(M, /mob/dead/)) return + if (istype(M, /mob/observer)) return if (usr.stat || usr.restrained()) return if(has_sensor >= 2) usr << "The controls are locked." diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index dd8cc8d462a..8692fc9bc7e 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -27,7 +27,6 @@ BLIND // can't see anything var/obj/screen/overlay = null sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/eyes.dmi', "Teshari" = 'icons/mob/species/seromi/eyes.dmi' ) diff --git a/code/modules/clothing/gloves/arm_guards.dm b/code/modules/clothing/gloves/arm_guards.dm new file mode 100644 index 00000000000..ada10f274af --- /dev/null +++ b/code/modules/clothing/gloves/arm_guards.dm @@ -0,0 +1,42 @@ +/obj/item/clothing/gloves/arm_guard + name = "arm guards" + desc = "These arm guards will protect your hands and arms." + body_parts_covered = HANDS|ARMS + slowdown = 1 + w_class = 3 + +/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) //This will only run if no other problems occured when equiping. + if(H.wear_suit) + if(H.wear_suit.body_parts_covered & ARMS) + H << "You can't wear \the [src] with \the [H.wear_suit], it's in the way." + return 0 + return 1 + +/obj/item/clothing/gloves/arm_guard/laserproof + name = "ablative arm guards" + desc = "These arm guards will protect your hands and arms from energy weapons." + icon_state = "arm_guards_laser" + siemens_coefficient = 0.4 //This is worse than the other ablative pieces, to avoid this from becoming the poor warden's insulated gloves. + armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/arm_guard/bulletproof + name = "bullet resistant arm guards" + desc = "These arm guards will protect your hands and arms from ballistic weapons." + icon_state = "arm_guards_bullet" + siemens_coefficient = 0.7 + armor = list(melee = 10, bullet = 80, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/arm_guard/riot + name = "riot arm guards" + desc = "These arm guards will protect your hands and arms from close combat weapons." + icon_state = "arm_guards_riot" + siemens_coefficient = 0.5 + armor = list(melee = 80, bullet = 10, laser = 10, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/gloves/arm_guard/combat + name = "combat arm guards" + desc = "These arm guards will protect your hands and arms from a variety of weapons." + icon_state = "arm_guards_combat" + siemens_coefficient = 0.6 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0) \ No newline at end of file diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 2d9d718587d..680250c7c78 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -10,7 +10,6 @@ desc = "an ultra rare hat. It commands a certain respect." icon_state = "petehat" sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi', "Teshari" = 'icons/mob/species/seromi/head.dmi' ) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 5eec53ebcef..8d1614301f5 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -7,7 +7,7 @@ slot_r_hand_str = "helmet", ) flags = THICKMATERIAL - armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE @@ -21,7 +21,7 @@ name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks." icon_state = "riot" - armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0) + armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEEARS siemens_coefficient = 0.7 action_button_name = "Toggle Visor" @@ -42,9 +42,33 @@ user << "You flip the visor down." update_clothing_icon() //so our mob-overlays update +/obj/item/clothing/head/helmet/laserproof + name = "ablative helmet" + desc = "It's a helmet specifically designed to protect against energy projectiles." + icon_state = "helmet_reflec" + armor = list(melee = 10, bullet = 10, laser = 80 ,energy = 50, bomb = 0, bio = 0, rad = 0) + flags_inv = HIDEEARS + siemens_coefficient = 0.1 + +/obj/item/clothing/head/helmet/bulletproof + name = "bullet-resistant helmet" + desc = "It's a helmet specifically designed to protect against ballistic projectiles." + icon_state = "helmet_bulletproof" + armor = list(melee = 10, bullet = 80, laser = 10 ,energy = 10, bomb = 0, bio = 0, rad = 0) + flags_inv = HIDEEARS + siemens_coefficient = 0.7 + +/obj/item/clothing/head/helmet/combat + name = "combat helmet" + desc = "It's a general purpose combat helmet, designed to protect against typical dangers to your head." + icon_state = "helmet_combat" + armor = list(melee = 50, bullet = 50, laser = 50 ,energy = 30, bomb = 30, bio = 0, rad = 0) + flags_inv = HIDEEARS + siemens_coefficient = 0.6 + /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" - desc = "They're often used by highly trained SWAT Members." + desc = "They're often used by highly trained SWAT Officers." icon_state = "swat" armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) flags_inv = HIDEEARS|HIDEEYES @@ -78,7 +102,7 @@ "Unathi" = 'icons/mob/species/unathi/helmet.dmi', ) - armor = list(melee = 62, bullet = 50, laser = 50,energy = 35, bomb = 10, bio = 2, rad = 0) + armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) flags_inv = HIDEEARS siemens_coefficient = 0.7 diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index fa4446d97c3..17c7cd0666a 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -272,3 +272,330 @@ desc = "An orange piece of cloth, worn on the head." 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" + 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" + 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" + 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/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 1e9b70377d3..7ea68f0a8df 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -43,12 +43,6 @@ siemens_coefficient = 0.7 body_parts_covered = FACE|EYES -/obj/item/clothing/mask/gas/swat/vox - name = "\improper alien mask" - desc = "Clearly not designed for a human face." - body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask. - species_restricted = list("Vox") - /obj/item/clothing/mask/gas/syndicate name = "tactical mask" desc = "A close-fitting tactical mask that can be connected to an air supply." diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index f4cd0dbbc87..214f63c2237 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -129,7 +129,7 @@ item_state = "s-ninja" flags_inv = HIDEFACE body_parts_covered = 0 - var/mob/eye/aiEye/eye + var/mob/observer/eye/aiEye/eye /obj/item/clothing/mask/ai/New() eye = new(src) diff --git a/code/modules/clothing/shoes/leg_guards.dm b/code/modules/clothing/shoes/leg_guards.dm new file mode 100644 index 00000000000..2467b2eec62 --- /dev/null +++ b/code/modules/clothing/shoes/leg_guards.dm @@ -0,0 +1,42 @@ +/obj/item/clothing/shoes/leg_guard + name = "leg guards" + 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. + w_class = 3 + +/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) //This will only run if no other problems occured when equiping. + if(H.wear_suit) + if(H.wear_suit.body_parts_covered & LEGS) + H << "You can't wear \the [src] with \the [H.wear_suit], it's in the way." + return 0 + return 1 + +/obj/item/clothing/shoes/leg_guard/laserproof + name = "ablative leg guards" + desc = "These will protect your legs and feet from energy weapons." + icon_state = "leg_guards_laser" + siemens_coefficient = 0.1 + armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/shoes/leg_guard/bulletproof + name = "bullet resistant leg guards" + 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) + +/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) + +/obj/item/clothing/shoes/leg_guard/combat + name = "combat leg guards" + desc = "These will protect your legs and feet from a variety of weapons." + icon_state = "leg_guards_combat" + siemens_coefficient = 0.6 + armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0) diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 9dfa5418e52..d5c49babfff 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -28,141 +28,3 @@ /obj/item/clothing/suit/space/skrell/black icon_state = "skrell_suit_black" item_state = "skrell_suit_black" - -// Vox space gear (vaccuum suit, low pressure armour) -// Can't be equipped by any other species due to bone structure and vox cybernetics. -/obj/item/clothing/suit/space/vox - w_class = 3 - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank) - slowdown = 2 - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.6 - heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list("Vox") - -/obj/item/clothing/head/helmet/space/vox - armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) - siemens_coefficient = 0.6 - item_flags = STOPPRESSUREDAMAGE - species_restricted = list("Vox") - -/obj/item/clothing/head/helmet/space/vox/pressure - name = "alien helmet" - icon_state = "vox-pressure" - item_state = "vox-pressure" - desc = "Hey, wasn't this a prop in \'The Abyss\'?" - -/obj/item/clothing/suit/space/vox/pressure - name = "alien pressure suit" - icon_state = "vox-pressure" - item_state = "vox-pressure" - desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions." - -/obj/item/clothing/head/helmet/space/vox/carapace - name = "alien visor" - icon_state = "vox-carapace" - item_state = "vox-carapace" - desc = "A glowing visor, perhaps stolen from a depressed Cylon." - -/obj/item/clothing/suit/space/vox/carapace - name = "alien carapace armour" - icon_state = "vox-carapace" - item_state = "vox-carapace" - desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down." - -/obj/item/clothing/head/helmet/space/vox/stealth - name = "alien stealth helmet" - icon_state = "vox-stealth" - item_state = "vox-stealth" - desc = "A smoothly contoured, matte-black alien helmet." - -/obj/item/clothing/suit/space/vox/stealth - name = "alien stealth suit" - icon_state = "vox-stealth" - item_state = "vox-stealth" - desc = "A sleek black suit. It seems to have a tail, and is very heavy." - -/obj/item/clothing/head/helmet/space/vox/medic - name = "alien goggled helmet" - icon_state = "vox-medic" - item_state = "vox-medic" - desc = "An alien helmet with enormous goggled lenses." - -/obj/item/clothing/suit/space/vox/medic - name = "alien armour" - icon_state = "vox-medic" - item_state = "vox-medic" - desc = "An almost organic looking nonhuman pressure suit." - -/obj/item/clothing/under/vox - has_sensor = 0 - species_restricted = list("Vox") - -/obj/item/clothing/under/vox/vox_casual - name = "alien clothing" - desc = "This doesn't look very comfortable." - icon_state = "vox-casual-1" - item_state = "vox-casual-1" - body_parts_covered = LEGS - -/obj/item/clothing/under/vox/vox_robes - name = "alien robes" - desc = "Weird and flowing!" - icon_state = "vox-casual-2" - item_state = "vox-casual-2" - -/obj/item/clothing/gloves/yellow/vox - desc = "These bizarre gauntlets seem to be fitted for... bird claws?" - name = "insulated gauntlets" - icon_state = "gloves-vox" - item_state = "gloves-vox" - siemens_coefficient = 0 - permeability_coefficient = 0.05 - species_restricted = list("Vox") - -/obj/item/clothing/shoes/magboots/vox - - desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." - name = "vox magclaws" - item_state = "boots-vox" - icon_state = "boots-vox" - species_restricted = list("Vox") - - action_button_name = "Toggle the magclaws" - -/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) - if(src.magpulse) - item_flags &= ~NOSLIP - magpulse = 0 - canremove = 1 - user << "You relax your deathgrip on the flooring." - else - //make sure these can only be used when equipped. - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if (H.shoes != src) - user << "You will have to put on the [src] before you can do that." - return - - item_flags |= NOSLIP - magpulse = 1 - canremove = 0 //kinda hard to take off magclaws when you are gripping them tightly. - user << "You dig your claws deeply into the flooring, bracing yourself." - user << "It would be hard to take off the [src] without relaxing your grip first." - user.update_action_buttons() - -//In case they somehow come off while enabled. -/obj/item/clothing/shoes/magboots/vox/dropped(mob/user as mob) - ..() - if(src.magpulse) - user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.") - item_flags &= ~NOSLIP - magpulse = 0 - canremove = 1 - -/obj/item/clothing/shoes/magboots/vox/examine(mob/user) - ..(user) - if (magpulse) - user << "It would be hard to take these off without relaxing your grip first." //theoretically this message should only be seen by the wearer when the claws are equipped. diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 0e4d122bd22..7014e9cf418 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -18,7 +18,7 @@ cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - species_restricted = list("exclude","Diona", "Xenomorph") + species_restricted = list("exclude","Diona") var/obj/machinery/camera/camera var/list/camera_networks @@ -63,7 +63,7 @@ cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.9 - species_restricted = list("exclude","Diona", "Xenomorph") + species_restricted = list("exclude","Diona") var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit. diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 76e1a4b8f71..41b0209e4d0 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -10,6 +10,16 @@ max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE siemens_coefficient = 0.6 +/obj/item/clothing/suit/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) + if(..()) //This will only run if no other problems occured when equiping. + for(var/obj/item/clothing/I in list(H.gloves, H.shoes)) + if(I && (src.body_parts_covered & ARMS && I.body_parts_covered & ARMS) ) + H << "You can't wear \the [src] with \the [I], it's in the way." + return 0 + if(I && (src.body_parts_covered & LEGS && I.body_parts_covered & LEGS) ) + H << "You can't wear \the [src] with \the [I], it's in the way." + return 0 + return 1 /obj/item/clothing/suit/armor/vest name = "armor" @@ -17,7 +27,7 @@ icon_state = "armor" item_state = "armor" blood_overlay_type = "armor" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) /obj/item/clothing/suit/armor/vest/alt name = "security armor" @@ -47,24 +57,21 @@ /obj/item/clothing/suit/armor/riot - name = "Riot Suit" - desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." + name = "riot vest" + desc = "A vest with heavy padding to protect against melee attacks." icon_state = "riot" item_state = "swat_suit" - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS slowdown = 1 armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0) flags_inv = HIDEJUMPSUIT siemens_coefficient = 0.5 /obj/item/clothing/suit/armor/riot/alt - name = "Riot Suit" - desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." icon_state = "riot_new" item_state = "riot_new" /obj/item/clothing/suit/armor/bulletproof - name = "Bulletproof Vest" + name = "bullet resistant vest" desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles." icon_state = "bulletproof" item_state = "armor" @@ -73,20 +80,18 @@ siemens_coefficient = 0.7 /obj/item/clothing/suit/armor/bulletproof/alt - name = "Bulletproof Vest" - desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles." icon_state = "bulletproof_new" item_state = "bulletproof_new" blood_overlay_type = "armor" /obj/item/clothing/suit/armor/laserproof - name = "Ablative Armor Vest" + name = "ablative armor vest" desc = "A vest that excels in protecting the wearer against energy projectiles." icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" armor = list(melee = 10, bullet = 10, laser = 80, energy = 50, bomb = 0, bio = 0, rad = 0) - siemens_coefficient = 0 + siemens_coefficient = 0.1 /obj/item/clothing/suit/armor/laserproof/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") if(istype(damage_source, /obj/item/projectile/energy) || istype(damage_source, /obj/item/projectile/beam)) @@ -108,6 +113,25 @@ return PROJECTILE_CONTINUE // complete projectile permutation +/obj/item/clothing/suit/armor/combat + name = "combat vest" + desc = "A vest that protects the wearer from several common types of weaponry." + icon_state = "combat" + item_state = "combat" + blood_overlay_type = "armor" + armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 30, bio = 0, rad = 0) + siemens_coefficient = 0.6 + +/obj/item/clothing/suit/armor/tactical + name = "tactical armor" + desc = "A suit of armor most often used by Special Weapons and Tactics squads. Includes padded vest with pockets along with shoulder and kneeguards." + icon_state = "swatarmor" + item_state = "armor" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS + slowdown = 1 + armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0) + siemens_coefficient = 0.7 + /obj/item/clothing/suit/armor/swat name = "swat suit" desc = "A heavily armored suit that protects against moderate damage. Used in special operations." @@ -143,7 +167,7 @@ item_state = "armor" blood_overlay_type = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) //Reactive armor @@ -200,42 +224,6 @@ src.item_state = "reactiveoff" ..() -/obj/item/clothing/suit/armor/tactical - name = "tactical armor" - desc = "A suit of armor most often used by Special Weapons and Tactics squads. Includes padded vest with pockets along with shoulder and kneeguards." - icon_state = "swatarmor" - item_state = "armor" - var/obj/item/weapon/gun/holstered = null - body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - slowdown = 1 - armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 20, bio = 0, rad = 0) - siemens_coefficient = 0.7 - var/obj/item/clothing/accessory/holster/holster - -/obj/item/clothing/suit/armor/tactical/New() - ..() - holster = new(src) - -/obj/item/clothing/suit/armor/tactical/attackby(obj/item/W as obj, mob/user as mob) - ..() - holster.attackby(W, user) - -/obj/item/clothing/suit/armor/tactical/verb/holster() - set name = "Holster" - set category = "Object" - set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - - if(!holster.holstered) - var/obj/item/W = usr.get_active_hand() - if(!istype(W, /obj/item)) - usr << "You need your gun equiped to holster it." - return - holster.holster(W, usr) - else - holster.unholster(usr) - //Non-hardsuit ERT armor. /obj/item/clothing/suit/armor/vest/ert name = "emergency response team armor" @@ -274,7 +262,7 @@ desc = "A simple kevlar plate carrier." icon_state = "kvest" item_state = "kvest" - armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + 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) body_parts_covered = UPPER_TORSO|LOWER_TORSO @@ -331,7 +319,7 @@ desc = "A heavy kevlar plate carrier with webbing attached." icon_state = "webvest" item_state = "webvest" - armor = list(melee = 50, bullet = 40, laser = 50, energy = 25, bomb = 30, bio = 0, rad = 0) + armor = list(melee = 50, bullet = 40, laser = 40, energy = 25, bomb = 25, bio = 0, rad = 0) slowdown = 1 /obj/item/clothing/suit/storage/vest/heavy/officer diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 4a1a0c72eb3..9456a2cbdef 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -343,6 +343,12 @@ icon_state = "blueponcho" item_state = "blueponcho" +/obj/item/clothing/suit/poncho/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/jacket/puffer name = "puffer jacket" desc = "A thick jacket with a rubbery, water-resistant shell." @@ -502,6 +508,14 @@ icon_open = "nt_hoodie_open" icon_closed = "nt_hoodie" +/obj/item/clothing/suit/storage/toggle/hoodie/smw + name = "Space Mountain Wind hoodie" + desc = "A warm, black sweatshirt. It has the logo for the popular softdrink Space Mountain Wind on both the front and the back." + icon_state = "smw_hoodie" + item_state = "smw_hoodie" + icon_open = "smw_hoodie_open" + icon_closed = "smw_hoodie" + // FUN! /obj/item/clothing/suit/whitedress diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index c13629fe9af..c439308a0da 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -18,6 +18,13 @@ siemens_coefficient = 0.9 rolled_sleeves = 0 +/obj/item/clothing/under/rank/warden/skirt + desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." + name = "warden's jumpskirt" + icon_state = "wardenf" + item_state = "r_suit" + worn_state = "wardenf" + /obj/item/clothing/head/helmet/warden name = "warden's hat" desc = "It's a special helmet issued to the Warden of a securiy force." @@ -34,6 +41,13 @@ siemens_coefficient = 0.9 rolled_sleeves = 0 +/obj/item/clothing/under/rank/security/skirt + name = "security officer's jumpskirt" + desc = "Standard feminine fashion for Security Officers. It's made of sturdier material than the standard jumpskirts." + icon_state = "secredf" + item_state = "r_suit" + worn_state = "secredf" + /obj/item/clothing/under/rank/dispatch name = "dispatcher's uniform" desc = "A dress shirt and khakis with a security patch sewn on." @@ -127,7 +141,7 @@ icon_state = "detective2_waistcoat" worn_state = "detective2_waistcoat" desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat." - + /obj/item/clothing/head/det name = "fedora" @@ -160,6 +174,13 @@ siemens_coefficient = 0.8 rolled_sleeves = 0 +/obj/item/clothing/under/rank/head_of_security/skirt + desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." + name = "head of security's jumpskirt" + icon_state = "hosredf" + item_state = "r_suit" + worn_state = "hosredf" + /obj/item/clothing/under/rank/head_of_security/corp icon_state = "hos_corporate" //item_state = "hos_corporate" diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index 729c204f8b3..4e25a6be8f8 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -75,7 +75,7 @@ K.new_icon_file = CUSTOM_ITEM_OBJ if(istype(item, /obj/item/device/kit/paint)) var/obj/item/device/kit/paint/kit = item - kit.allowed_types = text2list(additional_data, ", ") + kit.allowed_types = splittext(additional_data, ", ") else if(istype(item, /obj/item/device/kit/suit)) var/obj/item/device/kit/suit/kit = item kit.new_light_overlay = additional_data @@ -130,7 +130,7 @@ /hook/startup/proc/load_custom_items() var/datum/custom_item/current_data - for(var/line in text2list(file2text("config/custom_items.txt"), "\n")) + for(var/line in splittext(file2text("config/custom_items.txt"), "\n")) line = trim(line) if(line == "" || !line || findtext(line, "#", 1, 2)) @@ -173,7 +173,7 @@ if("req_access") current_data.req_access = text2num(field_data) if("req_titles") - current_data.req_titles = text2list(field_data,", ") + current_data.req_titles = splittext(field_data,", ") if("kit_name") current_data.kit_name = field_data if("kit_desc") diff --git a/code/modules/detectivework/microscope/microscope.dm b/code/modules/detectivework/microscope/microscope.dm index 5fd31a555c8..3bc596fb576 100644 --- a/code/modules/detectivework/microscope/microscope.dm +++ b/code/modules/detectivework/microscope/microscope.dm @@ -16,7 +16,7 @@ user << "There is already a slide in the microscope." return - if(istype(W, /obj/item/weapon/forensics/slide) || istype(W, /obj/item/weapon/sample/print)) + if(istype(W, /obj/item/weapon/forensics/swab)|| istype(W, /obj/item/weapon/sample/fibers) || istype(W, /obj/item/weapon/sample/print)) user << "You insert \the [W] into the microscope." user.unEquip(W) W.forceMove(src) @@ -33,6 +33,7 @@ user << "The microscope whirrs as you examine \the [sample]." if(!do_after(user, 25) || !sample) + user << "You stop examining \the [sample]." return user << "Printing findings now..." @@ -41,32 +42,27 @@ report.overlays = list("paper_stamped") report_num++ - if(istype(sample, /obj/item/weapon/forensics/slide)) - var/obj/item/weapon/forensics/slide/slide = sample - if(slide.has_swab) - var/obj/item/weapon/forensics/swab/swab = slide.has_swab + if(istype(sample, /obj/item/weapon/forensics/swab)) + var/obj/item/weapon/forensics/swab/swab = sample - report.name = "GSR report #[++report_num]: [swab.name]" - report.info = "Scanned item:
[swab.name]

" + report.name = "GSR report #[++report_num]: [swab.name]" + report.info = "Scanned item:
[swab.name]

" - if(swab.gsr) - report.info += "Residue from a [swab.gsr] bullet detected." - else - report.info += "No gunpowder residue found." - - else if(slide.has_sample) - var/obj/item/weapon/sample/fibers/fibers = slide.has_sample - report.name = "Fiber report #[++report_num]: [fibers.name]" - report.info = "Scanned item:
[fibers.name]

" - if(fibers.evidence) - report.info = "Molecular analysis on provided sample has determined the presence of unique fiber strings.

" - for(var/fiber in fibers.evidence) - report.info += "Most likely match for fibers: [fiber]

" - else - report.info += "No fibers found." + if(swab.gsr) + report.info += "Residue from a [swab.gsr] bullet detected." else - report.name = "Empty slide report #[report_num]" - report.info = "Evidence suggests that there's nothing in this slide." + report.info += "No gunpowder residue found." + + else if(istype(sample, /obj/item/weapon/sample/fibers)) + var/obj/item/weapon/sample/fibers/fibers = sample + report.name = "Fiber report #[++report_num]: [fibers.name]" + report.info = "Scanned item:
[fibers.name]

" + if(fibers.evidence) + report.info = "Molecular analysis on provided sample has determined the presence of unique fiber strings.

" + for(var/fiber in fibers.evidence) + report.info += "Most likely match for fibers: [fiber]

" + else + report.info += "No fibers found." else if(istype(sample, /obj/item/weapon/sample/print)) report.name = "Fingerprint report #[report_num]: [sample.name]" report.info = "Fingerprint analysis report #[report_num]: [sample.name]
" diff --git a/code/modules/detectivework/microscope/slides.dm b/code/modules/detectivework/microscope/slides.dm deleted file mode 100644 index 8226e6a51e5..00000000000 --- a/code/modules/detectivework/microscope/slides.dm +++ /dev/null @@ -1,42 +0,0 @@ -/obj/item/weapon/forensics/slide - name = "microscope slide" - desc = "A pair of thin glass panes used in the examination of samples beneath a microscope." - icon_state = "slide" - var/obj/item/weapon/forensics/swab/has_swab - var/obj/item/weapon/sample/fibers/has_sample - -/obj/item/weapon/forensics/slide/attackby(var/obj/item/weapon/W, var/mob/user) - if(has_swab || has_sample) - user << "There is already a sample in the slide." - return - if(istype (W, /obj/item/weapon/forensics/swab)) - has_swab = W - else if(istype(W, /obj/item/weapon/sample/fibers)) - has_sample = W - else - user << "You don't think this will fit." - return - user << "You insert the sample into the slide." - user.unEquip(W) - W.forceMove(src) - update_icon() - -/obj/item/weapon/forensics/slide/attack_self(var/mob/user) - if(has_swab || has_sample) - user << "You remove \the sample from \the [src]." - if(has_swab) - has_swab.loc = get_turf(src) - has_swab = null - if(has_sample) - has_sample.forceMove(get_turf(src)) - has_sample = null - update_icon() - return - -/obj/item/weapon/forensics/slide/update_icon() - if(!has_swab && !has_sample) - icon_state = "slide" - else if(has_swab) - icon_state = "slideswab" - else if(has_sample) - icon_state = "slidefiber" diff --git a/code/modules/detectivework/tools/storage.dm b/code/modules/detectivework/tools/storage.dm index 58cbcbf5949..e0cdabaafdd 100644 --- a/code/modules/detectivework/tools/storage.dm +++ b/code/modules/detectivework/tools/storage.dm @@ -11,16 +11,6 @@ for(var/i=0;iYou add [src.worth] Thalers worth of money to the bundles.
It holds [bundle.worth] Thalers now." + h_user.drop_from_inventory(SC) + h_user.put_in_hands(SC) + user << "You combine the Thalers to a bundle of [SC.worth] Thalers." qdel(src) -/obj/item/weapon/spacecash/bundle - name = "pile of thalers" - icon_state = "" - desc = "They are worth 0 Thalers." - worth = 0 - -/obj/item/weapon/spacecash/bundle/update_icon() +/obj/item/weapon/spacecash/update_icon() overlays.Cut() + name = "[worth] Thaler\s" + if(worth in list(1000,500,200,100,50,20,10,1)) + icon_state = "spacecash[worth]" + desc = "It's worth [worth] Thalers." + return var/sum = src.worth var/num = 0 for(var/i in list(1000,500,200,100,50,20,10,1)) @@ -68,7 +59,7 @@ src.overlays += banknote src.desc = "They are worth [worth] Thalers." -/obj/item/weapon/spacecash/bundle/attack_self() +/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 @@ -78,77 +69,71 @@ if(!worth) usr.drop_from_inventory(src) if(amount in list(1000,500,200,100,50,20,1)) - var/cashtype = text2path("/obj/item/weapon/spacecash/bundle/c[amount]") + 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/bundle/bundle = new (usr.loc) - bundle.worth = amount - bundle.update_icon() - usr.put_in_hands(bundle) + var/obj/item/weapon/spacecash/SC = new (usr.loc) + SC.worth = amount + SC.update_icon() + usr.put_in_hands(SC) if(!worth) qdel(src) -/obj/item/weapon/spacecash/bundle/c1 +/obj/item/weapon/spacecash/c1 name = "1 Thaler" icon_state = "spacecash1" desc = "It's worth 1 credit." worth = 1 -/obj/item/weapon/spacecash/bundle/c10 +/obj/item/weapon/spacecash/c10 name = "10 Thaler" icon_state = "spacecash10" desc = "It's worth 10 Thalers." worth = 10 -/obj/item/weapon/spacecash/bundle/c20 +/obj/item/weapon/spacecash/c20 name = "20 Thaler" icon_state = "spacecash20" desc = "It's worth 20 Thalers." worth = 20 -/obj/item/weapon/spacecash/bundle/c50 +/obj/item/weapon/spacecash/c50 name = "50 Thaler" icon_state = "spacecash50" desc = "It's worth 50 Thalers." worth = 50 -/obj/item/weapon/spacecash/bundle/c100 +/obj/item/weapon/spacecash/c100 name = "100 Thaler" icon_state = "spacecash100" desc = "It's worth 100 Thalers." worth = 100 -/obj/item/weapon/spacecash/bundle/c200 +/obj/item/weapon/spacecash/c200 name = "200 Thaler" icon_state = "spacecash200" desc = "It's worth 200 Thalers." worth = 200 -/obj/item/weapon/spacecash/bundle/c500 +/obj/item/weapon/spacecash/c500 name = "500 Thaler" icon_state = "spacecash500" desc = "It's worth 500 Thalers." worth = 500 -/obj/item/weapon/spacecash/bundle/c1000 +/obj/item/weapon/spacecash/c1000 name = "1000 Thaler" icon_state = "spacecash1000" desc = "It's worth 1000 Thalers." worth = 1000 proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) - if(sum in list(1000,500,200,100,50,20,10,1)) - var/cash_type = text2path("/obj/item/weapon/spacecash/bundle/c[sum]") - var/obj/cash = new cash_type (usr.loc) - if(ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(cash) - else - var/obj/item/weapon/spacecash/bundle/bundle = new (spawnloc) - bundle.worth = sum - bundle.update_icon() - if (ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(bundle) + var/obj/item/weapon/spacecash/SC = new (spawnloc) + SC.worth = sum + SC.update_icon() + if (ishuman(human_user) && !human_user.get_active_hand()) + human_user.put_in_hands(SC) return /obj/item/weapon/spacecash/ewallet @@ -156,6 +141,9 @@ proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) icon_state = "efundcard" desc = "A card that holds an amount of money." var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions. + attack_self() return //Don't act + attackby() return //like actual + update_icon() return //space cash /obj/item/weapon/spacecash/ewallet/examine(mob/user) ..(user) diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm new file mode 100644 index 00000000000..109572ffc0a --- /dev/null +++ b/code/modules/economy/cash_register.dm @@ -0,0 +1,546 @@ +/obj/machinery/cash_register + name = "cash register" + desc = "Swipe your ID card to make purchases electronically." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "register_idle" + flags = NOBLUDGEON + req_access = list(access_heads) + anchored = 1 + + var/locked = 1 + var/cash_locked = 1 + var/cash_open = 0 + var/machine_id = "" + var/transaction_amount = 0 // cumulatd amount of money to pay in a single purchase + var/transaction_purpose = null // text that gets used in ATM transaction logs + var/list/transaction_logs = list() // list of strings using html code to visualise data + var/list/item_list = list() // entities and according + var/list/price_list = list() // prices for each purchase + var/manipulating = 0 + + var/cash_stored = 0 + var/obj/item/confirm_item + var/datum/money_account/linked_account + var/account_to_connect = null + + +// Claim machine ID +/obj/machinery/cash_register/New() + machine_id = "[station_name()] RETAIL #[num_financial_terminals++]" + cash_stored = rand(10, 70)*10 + transaction_devices += src // Global reference list to be properly set up by /proc/setup_economy() + + +/obj/machinery/cash_register/examine(mob/user as mob) + ..(user) + if(cash_open) + if(cash_stored) + user << "It holds [cash_stored] Thaler\s of money." + else + user << "It's completely empty." + + +/obj/machinery/cash_register/attack_hand(mob/user as mob) + // Don't be accessible from the wrong side of the machine + if(get_dir(src, user) & reverse_dir[src.dir]) return + + if(cash_open) + if(cash_stored) + spawn_money(cash_stored, loc, user) + cash_stored = 0 + overlays -= "register_cash" + else + open_cash_box() + else + user.set_machine(src) + interact(user) + + +/obj/machinery/cash_register/AltClick(mob/user) + if(Adjacent(user)) + open_cash_box() + + +/obj/machinery/cash_register/interact(mob/user as mob) + var/dat = "

Cash Register

" + if (locked) + dat += "Unlock
" + dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
" + dat += "[cash_locked? "Unlock" : "Lock"] Cash Box | " + else + dat += "Lock
" + dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
" + dat += "[cash_locked? "Unlock" : "Lock"] Cash Box | " + dat += "Custom Order
" + + if(item_list.len) + dat += get_current_transaction() + dat += "
" + + for(var/i=transaction_logs.len, i>=1, i--) + dat += "[transaction_logs[i]]
" + + if(transaction_logs.len) + dat += locked ? "
" : "Reset Log
" + dat += "
" + dat += "Device ID: [machine_id]" + user << browse(dat, "window=cash_register;size=350x500") + onclose(user, "cash_register") + + +/obj/machinery/cash_register/Topic(var/href, var/href_list) + if(..()) + return + + usr.set_machine(src) + add_fingerprint(usr) + + if(href_list["choice"]) + switch(href_list["choice"]) + if("toggle_lock") + if(allowed(usr)) + locked = !locked + else + usr << "\icon[src]Insufficient access." + if("toggle_cash_lock") + cash_locked = !cash_locked + if("link_account") + var/attempt_account_num = input("Enter account number", "New account number") as num + var/attempt_pin = input("Enter PIN", "Account PIN") as num + linked_account = attempt_account_access(attempt_account_num, attempt_pin, 1) + if(linked_account) + if(linked_account.suspended) + linked_account = null + src.visible_message("\icon[src]Account has been suspended.") + else + usr << "\icon[src]Account not found." + if("custom_order") + var/t_purpose = sanitize(input("Enter purpose", "New purpose") as text) + if (!t_purpose || !Adjacent(usr)) return + transaction_purpose = t_purpose + item_list += t_purpose + var/t_amount = round(input("Enter price", "New price") as num) + if (!t_amount || !Adjacent(usr)) return + transaction_amount += t_amount + price_list += t_amount + playsound(src, 'sound/machines/twobeep.ogg', 25) + src.visible_message("\icon[src][transaction_purpose]: [t_amount] Thaler\s.") + if("set_amount") + var/item_name = locate(href_list["item"]) + var/n_amount = round(input("Enter amount", "New amount") as num) + n_amount = Clamp(n_amount, 0, 20) + if (!item_list[item_name] || !Adjacent(usr)) return + transaction_amount += (n_amount - item_list[item_name]) * price_list[item_name] + if(!n_amount) + item_list -= item_name + price_list -= item_name + else + item_list[item_name] = n_amount + if("subtract") + var/item_name = locate(href_list["item"]) + if(item_name) + transaction_amount -= price_list[item_name] + item_list[item_name]-- + if(item_list[item_name] <= 0) + item_list -= item_name + price_list -= item_name + if("add") + var/item_name = locate(href_list["item"]) + if(item_list[item_name] >= 20) return + transaction_amount += price_list[item_name] + item_list[item_name]++ + if("clear") + var/item_name = locate(href_list["item"]) + if(item_name) + transaction_amount -= price_list[item_name] * item_list[item_name] + item_list -= item_name + price_list -= item_name + else + transaction_amount = 0 + item_list.Cut() + price_list.Cut() + if("reset_log") + transaction_logs.Cut() + usr << "\icon[src]Transaction log reset." + updateDialog() + + + +/obj/machinery/cash_register/attackby(obj/O as obj, user as mob) + // Check for a method of paying (ID, PDA, e-wallet, cash, ect.) + var/obj/item/weapon/card/id/I = O.GetID() + if(I) + scan_card(I, O) + else if (istype(O, /obj/item/weapon/spacecash/ewallet)) + var/obj/item/weapon/spacecash/ewallet/E = O + scan_wallet(E) + else if (istype(O, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/SC = O + if(cash_open) + user << "You neatly sort the cash into the box." + cash_stored += SC.worth + overlays |= "register_cash" + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.drop_from_inventory(SC) + qdel(SC) + else + scan_cash(SC) + else if(istype(O, /obj/item/weapon/card/emag)) + return ..() + else if(istype(O, /obj/item/weapon/wrench)) + var/obj/item/weapon/wrench/W = O + toggle_anchors(W, user) + // Not paying: Look up price and add it to transaction_amount + else + scan_item_price(O) + + +/obj/machinery/cash_register/MouseDrop_T(atom/dropping, mob/user) + if(Adjacent(dropping) && Adjacent(user) && !user.stat) + attackby(dropping, user) + + +/obj/machinery/cash_register/proc/confirm(obj/item/I) + if(confirm_item == I) + return 1 + else + confirm_item = I + src.visible_message("\icon[src]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + playsound(src, 'sound/machines/twobeep.ogg', 25) + return 0 + + +/obj/machinery/cash_register/proc/scan_card(obj/item/weapon/card/id/I, obj/item/ID_container) + if (!transaction_amount) + return + + if (cash_open) + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + usr << "\icon[src]The cash box is open." + return + + if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(I)) + return + + if (!linked_account) + usr.visible_message("\icon[src]Unable to connect to linked account.") + return + + // Access account for transaction + if(check_account()) + var/datum/money_account/D = get_account(I.associated_account_number) + var/attempt_pin = "" + if(D && D.security_level) + attempt_pin = input("Enter PIN", "Transaction") as num + D = null + D = attempt_account_access(I.associated_account_number, attempt_pin, 2) + + if(!D) + src.visible_message("\icon[src]Unable to access account. Check security settings and try again.") + else + if(D.suspended) + src.visible_message("\icon[src]Your account has been suspended.") + else + if(transaction_amount > D.money) + src.visible_message("\icon[src]Not enough funds.") + else + // Transfer the money + D.money -= transaction_amount + linked_account.money += transaction_amount + + // Create log entry in client's account + var/datum/transaction/T = new() + T.target_name = "[linked_account.owner_name]" + T.purpose = transaction_purpose + T.amount = "([transaction_amount])" + T.source_terminal = machine_id + T.date = current_date_string + T.time = worldtime2text() + D.transaction_log.Add(T) + + // Create log entry in owner's account + T = new() + T.target_name = D.owner_name + T.purpose = transaction_purpose + T.amount = "[transaction_amount]" + T.source_terminal = machine_id + T.date = current_date_string + T.time = worldtime2text() + linked_account.transaction_log.Add(T) + + // Save log + add_transaction_log(I.registered_name ? I.registered_name : "n/A", "ID Card", transaction_amount) + + // Confirm and reset + transaction_complete() + + +/obj/machinery/cash_register/proc/scan_wallet(obj/item/weapon/spacecash/ewallet/E) + if (!transaction_amount) + return + + if (cash_open) + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + usr << "\icon[src]The cash box is open." + return + + if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(E)) + return + + // Access account for transaction + if(check_account()) + if(transaction_amount > E.worth) + src.visible_message("\icon[src]Not enough funds.") + else + // Transfer the money + E.worth -= transaction_amount + linked_account.money += transaction_amount + + // Create log entry in owner's account + var/datum/transaction/T = new() + T.target_name = E.owner_name + T.purpose = transaction_purpose + T.amount = "[transaction_amount]" + T.source_terminal = machine_id + T.date = current_date_string + T.time = worldtime2text() + linked_account.transaction_log.Add(T) + + // Save log + add_transaction_log(E.owner_name, "E-Wallet", transaction_amount) + + // Confirm and reset + transaction_complete() + + +/obj/machinery/cash_register/proc/scan_cash(obj/item/weapon/spacecash/SC) + if (!transaction_amount) + return + + if (cash_open) + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + usr << "\icon[src]The cash box is open." + return + + if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(SC)) + return + + if(transaction_amount > SC.worth) + src.visible_message("\icon[src]Not enough money.") + else + // Insert cash into magical slot + SC.worth -= transaction_amount + SC.update_icon() + if(!SC.worth) + if(ishuman(SC.loc)) + var/mob/living/carbon/human/H = SC.loc + H.drop_from_inventory(SC) + qdel(SC) + cash_stored += transaction_amount + + // Save log + add_transaction_log("n/A", "Cash", transaction_amount) + + // Confirm and reset + transaction_complete() + + +/obj/machinery/cash_register/proc/scan_item_price(obj/O) + if(!istype(O)) return + if(item_list.len > 10) + src.visible_message("\icon[src]Only up to ten different items allowed per purchase.") + return + if (cash_open) + playsound(src, 'sound/machines/buzz-sigh.ogg', 25) + usr << "\icon[src]The cash box is open." + return + + // First check if item has a valid price + var/price = O.get_item_cost() + if(isnull(price)) + src.visible_message("\icon[src]Unable to find item in database.") + return + // Call out item cost + src.visible_message("\icon[src]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") + // Note the transaction purpose for later use + if(transaction_purpose) + transaction_purpose += "
" + transaction_purpose += "[O]: [price] Thaler\s" + transaction_amount += price + for(var/previously_scanned in item_list) + if(price == price_list[previously_scanned] && O.name == previously_scanned) + . = item_list[previously_scanned]++ + if(!.) + item_list[O.name] = 1 + price_list[O.name] = price + . = 1 + // Animation and sound + playsound(src, 'sound/machines/twobeep.ogg', 25) + // Reset confirmation + confirm_item = null + updateDialog() + + +/obj/machinery/cash_register/proc/get_current_transaction() + var/dat = {" + + + + "} + var/item_name + for(var/i=1, i<=item_list.len, i++) + item_name = item_list[i] + dat += "" + dat += "
New Entry
[item_list[item_name] ? "- Set + [item_list[item_name]] x " : ""][item_name] Remove[price_list[item_name] * item_list[item_name]] þ
" + dat += "" + dat += "
Clear EntryTotal Amount: [transaction_amount] þ
" + return dat + + +/obj/machinery/cash_register/proc/add_transaction_log(var/c_name, var/p_method, var/t_amount) + var/dat = {" + + + + + + + +
Transaction #[transaction_logs.len+1]
Customer[c_name]
Pay Method[p_method]
Station Time[worldtime2text()]
+ + "} + var/item_name + for(var/i=1, i<=item_list.len, i++) + item_name = item_list[i] + dat += "" + dat += "" + dat += "
[item_list[item_name] ? "[item_list[item_name]] x " : ""][item_name][price_list[item_name] * item_list[item_name]] þ
Total Amount: [transaction_amount] þ
" + + transaction_logs += dat + + +/obj/machinery/cash_register/proc/check_account() + if (!linked_account) + usr.visible_message("\icon[src]Unable to connect to linked account.") + return 0 + + if(linked_account.suspended) + src.visible_message("\icon[src]Connected account has been suspended.") + return 0 + return 1 + + +/obj/machinery/cash_register/proc/transaction_complete() + /// Visible confirmation + playsound(src, 'sound/machines/chime.ogg', 25) + src.visible_message("\icon[src]Transaction complete.") + flick("register_approve", src) + reset_memory() + updateDialog() + + +/obj/machinery/cash_register/proc/reset_memory() + transaction_amount = null + transaction_purpose = "" + item_list.Cut() + price_list.Cut() + confirm_item = null + + +/obj/machinery/cash_register/verb/open_cash_box() + set category = "Object" + set name = "Open Cash Box" + set desc = "Open/closes the register's cash box." + set src in view(1) + + if(usr.stat) return + + if(cash_open) + cash_open = 0 + overlays -= "register_approve" + overlays -= "register_open" + overlays -= "register_cash" + else if(!cash_locked) + cash_open = 1 + overlays += "register_approve" + overlays += "register_open" + if(cash_stored) + overlays += "register_cash" + else + usr << "The cash box is locked." + + +/obj/machinery/cash_register/proc/toggle_anchors(obj/item/weapon/wrench/W, mob/user) + if(manipulating) return + manipulating = 1 + if(!anchored) + user.visible_message("\The [user] begins securing \the [src] to the floor.", + "You begin securing \the [src] to the floor.") + else + user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", + "You begin unsecuring \the [src] from the floor.") + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(!do_after(user, 20)) + manipulating = 0 + return + if(!anchored) + user.visible_message("\The [user] has secured \the [src] to the floor.", + "You have secured \the [src] to the floor.") + else + user.visible_message("\The [user] has unsecured \the [src] from the floor.", + "You have unsecured \the [src] from the floor.") + anchored = !anchored + manipulating = 0 + return + + + +/obj/machinery/cash_register/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + src.visible_message("The [src]'s cash box springs open as [user] swipes the card through the scanner!") + playsound(src, "sparks", 50, 1) + req_access = list() + emagged = 1 + locked = 0 + cash_locked = 0 + open_cash_box() + + +//--Premades--// + +/obj/machinery/cash_register/command + account_to_connect = "Command" + ..() + +/obj/machinery/cash_register/medical + account_to_connect = "Medical" + ..() + +/obj/machinery/cash_register/engineering + account_to_connect = "Engineering" + ..() + +/obj/machinery/cash_register/science + account_to_connect = "Science" + ..() + +/obj/machinery/cash_register/security + account_to_connect = "Security" + ..() + +/obj/machinery/cash_register/cargo + account_to_connect = "Cargo" + ..() + +/obj/machinery/cash_register/civilian + account_to_connect = "Civilian" + ..() \ No newline at end of file diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index 7b82c1662ca..b296ac3e0bf 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -52,8 +52,7 @@ /datum/species/skrell = 12, /datum/species/teshari = 9, // Skrell sponsored! /datum/species/tajaran = 7, - /datum/species/unathi = 7, - /datum/species/vox = 1 + /datum/species/unathi = 7 ) //---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel: @@ -81,6 +80,7 @@ var/global/list/datum/money_account/department_accounts = list() var/global/num_financial_terminals = 1 var/global/next_account_number = 0 var/global/list/all_money_accounts = list() +var/global/list/transaction_devices = list() var/global/economy_init = 0 /proc/setup_economy() @@ -102,6 +102,13 @@ var/global/economy_init = 0 create_department_account("Vendor") vendor_account = department_accounts["Vendor"] + for(var/obj/item/device/retail_scanner/RS in transaction_devices) + if(RS.account_to_connect) + RS.linked_account = department_accounts[RS.account_to_connect] + for(var/obj/machinery/cash_register/CR in transaction_devices) + if(CR.account_to_connect) + CR.linked_account = department_accounts[CR.account_to_connect] + current_date_string = "[num2text(rand(1,31))] [pick("January","February","March","April","May","June","July","August","September","October","November","December")], [game_year]" economy_init = 1 diff --git a/code/modules/economy/price_list.dm b/code/modules/economy/price_list.dm new file mode 100644 index 00000000000..df6bc8e8f92 --- /dev/null +++ b/code/modules/economy/price_list.dm @@ -0,0 +1,956 @@ +// For convenience and easier comparing and maintaining of item prices, +// all these will be defined here and sorted in different sections. + +// The item price in thalers. atom/movable so we can also assign a price to animals and other things. +/atom/movable/var/price_tag = null + +// The proc that is called when the price is being asked for. Use this to refer to another object if necessary. +/atom/movable/proc/get_item_cost() + return price_tag + + +//***************// +//---Beverages---// +//***************// + +/datum/reagent/var/price_tag = null + + +// Juices, soda and similar // + +/datum/reagent/water + price_tag = 2 + +/datum/reagent/drink/juice + price_tag = 2 + +/datum/reagent/toxin/poisonberryjuice + price_tag = 2 + +/datum/reagent/drink/milk + price_tag = 2 + +/datum/reagent/drink/soda + price_tag = 2 + +/datum/reagent/drink/doctor_delight + price_tag = 2 + +/datum/reagent/drink/nothing + price_tag = 2 + +/datum/reagent/drink/milkshake + price_tag = 2 + + +// Beer // + +/datum/reagent/ethanol/ale + price_tag = 2 + +/datum/reagent/ethanol/beer + price_tag = 2 + + +// Hot Drinks // + +/datum/reagent/drink/rewriter + price_tag = 3 + +/datum/reagent/drink/tea + price_tag = 3 + +/datum/reagent/drink/coffee + price_tag = 3 + +/datum/reagent/drink/hot_coco + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/drinks/coffee + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/drinks/tea + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/drinks/h_chocolate + price_tag = 3 + + +// Spirituous liquors // + +/datum/reagent/ethanol/irish_cream + price_tag = 5 + +/datum/reagent/ethanol/absinthe + price_tag = 5 + +/datum/reagent/ethanol/bluecuracao + price_tag = 5 + +/datum/reagent/ethanol/deadrum + price_tag = 5 + +/datum/reagent/ethanol/gin + price_tag = 5 + +/datum/reagent/ethanol/coffee/kahlua + price_tag = 5 + +/datum/reagent/ethanol/melonliquor + price_tag = 5 + +/datum/reagent/ethanol/rum + price_tag = 5 + +/datum/reagent/ethanol/tequilla + price_tag = 5 + +/datum/reagent/ethanol/thirteenloko + price_tag = 5 + +/datum/reagent/ethanol/vodka + price_tag = 5 + +/datum/reagent/ethanol/whiskey + price_tag = 5 + +/datum/reagent/ethanol/specialwhiskey + price_tag = 5 + +/datum/reagent/ethanol/patron + price_tag = 5 + +/datum/reagent/ethanol/goldschlager + price_tag = 5 + +/datum/reagent/ethanol/coffee/brave_bull // Not an original liquor in its own. But since it's a mix of purely Tequila + price_tag = 5 // and Kahlua, it's basically just another one and gets the same price. + + +// Wines // + +/datum/reagent/ethanol/wine + price_tag = 8 + +/datum/reagent/ethanol/cognac + price_tag = 8 + +/datum/reagent/ethanol/sake + price_tag = 8 + +/datum/reagent/ethanol/vermouth + price_tag = 8 + +/datum/reagent/ethanol/pwine + price_tag = 8 + + +// Cocktails // + +/datum/reagent/ethanol/acid_spit + price_tag = 4 + +/datum/reagent/ethanol/alliescocktail + price_tag = 4 + +/datum/reagent/ethanol/aloe + price_tag = 4 + +/datum/reagent/ethanol/amasec + price_tag = 4 + +/datum/reagent/ethanol/andalusia + price_tag = 4 + +/datum/reagent/ethanol/antifreeze + price_tag = 4 + +/datum/reagent/ethanol/atomicbomb + price_tag = 4 + +/datum/reagent/ethanol/coffee/b52 + price_tag = 4 + +/datum/reagent/ethanol/bahama_mama + price_tag = 4 + +/datum/reagent/ethanol/barefoot + price_tag = 4 + +/datum/reagent/ethanol/beepsky_smash + price_tag = 4 + +/datum/reagent/ethanol/bilk + price_tag = 4 + +/datum/reagent/ethanol/black_russian + price_tag = 4 + +/datum/reagent/ethanol/bloody_mary + price_tag = 4 + +/datum/reagent/ethanol/booger + price_tag = 4 + +/datum/reagent/ethanol/brave_bull + price_tag = 4 + +/datum/reagent/ethanol/changeling_sting + price_tag = 4 + +/datum/reagent/ethanol/martini + price_tag = 4 + +/datum/reagent/ethanol/cuba_libre + price_tag = 4 + +/datum/reagent/ethanol/demonsblood + price_tag = 4 + +/datum/reagent/ethanol/devilskiss + price_tag = 4 + +/datum/reagent/ethanol/driestmartini + price_tag = 4 + +/datum/reagent/ethanol/ginfizz + price_tag = 4 + +/datum/reagent/ethanol/grog + price_tag = 4 + +/datum/reagent/ethanol/erikasurprise + price_tag = 4 + +/datum/reagent/ethanol/gargle_blaster + price_tag = 4 + +/datum/reagent/ethanol/gintonic + price_tag = 4 + +/datum/reagent/ethanol/hippies_delight + price_tag = 4 + +/datum/reagent/ethanol/hooch + price_tag = 4 + +/datum/reagent/ethanol/iced_beer + price_tag = 4 + +/datum/reagent/ethanol/irishcarbomb + price_tag = 4 + +/datum/reagent/ethanol/coffee/irishcoffee + price_tag = 4 + +/datum/reagent/ethanol/longislandicedtea + price_tag = 4 + +/datum/reagent/ethanol/manhattan + price_tag = 4 + +/datum/reagent/ethanol/manhattan_proj + price_tag = 4 + +/datum/reagent/ethanol/manly_dorf + price_tag = 4 + +/datum/reagent/ethanol/margarita + price_tag = 4 + +/datum/reagent/ethanol/mead + price_tag = 4 + +/datum/reagent/ethanol/moonshine + price_tag = 4 + +/datum/reagent/ethanol/neurotoxin + price_tag = 4 + +/datum/reagent/ethanol/red_mead + price_tag = 4 + +/datum/reagent/ethanol/sbiten + price_tag = 4 + +/datum/reagent/ethanol/screwdrivercocktail + price_tag = 4 + +/datum/reagent/ethanol/silencer + price_tag = 4 + +/datum/reagent/ethanol/singulo + price_tag = 4 + +/datum/reagent/ethanol/snowwhite + price_tag = 4 + +/datum/reagent/ethanol/suidream + price_tag = 4 + +/datum/reagent/ethanol/syndicatebomb + price_tag = 4 + +/datum/reagent/ethanol/tequillasunrise + price_tag = 4 + +/datum/reagent/ethanol/threemileisland + price_tag = 4 + +/datum/reagent/ethanol/toxins_special + price_tag = 4 + +/datum/reagent/ethanol/vodkamartini + price_tag = 4 + +/datum/reagent/ethanol/vodkatonic + price_tag = 4 + +/datum/reagent/ethanol/white_russian + price_tag = 4 + +/datum/reagent/ethanol/whiskey_cola + price_tag = 4 + +/datum/reagent/ethanol/whiskeysoda + price_tag = 4 + + +// Cocktails without alcohol // + +/datum/reagent/ethanol/bananahonk + price_tag = 3 + + +// From the machine // + +/obj/item/weapon/reagent_containers/food/drinks/cans/cola + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/cans/starkist + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/drinks/cans/space_up + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice + price_tag = 1 + + +//***************// +//----Bottles----// +//***************// + +// Juices, soda and similar // + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cola + price_tag = 6 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up + price_tag = 6 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind + price_tag = 6 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice + price_tag = 6 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream + price_tag = 6 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice + price_tag = 6 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice + price_tag = 6 + + +// Beer // + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale + price_tag = 3 + + +// Spirituous Liquors // + +/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/gin + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/rum + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/patron + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing + price_tag = 15 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine + price_tag = 15 + + +// Wines // + +/obj/item/weapon/reagent_containers/food/drinks/bottle/wine + price_tag = 25 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac + price_tag = 25 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth + price_tag = 25 + +/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine + price_tag = 25 + + +//***************// +//---Foodstuff---// +//***************// + +// Snacks // + +/obj/item/weapon/reagent_containers/food/snacks/candy + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sosjerky + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/tastybread + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/no_raisin + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/chips + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/drinks/dry_ramen + price_tag = 5 + + +// Burger // + +/obj/item/weapon/reagent_containers/food/snacks/brainburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/ghostburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/human/burger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cheeseburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/monkeyburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/fishburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/tofuburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/roburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/roburgerbig + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/xenoburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/clownburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/mimeburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spellburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/jellyburger + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger + price_tag = 8 + + +// Sandwiches // + +/obj/item/weapon/reagent_containers/food/snacks/sandwich + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/grilledcheese + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/jellysandwich + price_tag = 3 + + +// Cookies and Candies // + +/obj/item/weapon/reagent_containers/food/snacks/cookie + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/chocolatebar + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/candy_corn + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/donut + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/donut/chaos + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/popcorn + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/fortunecookie + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/candiedapple + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/chawanmushi + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/cracker + price_tag = 1 + + +// Full meals // + +/obj/item/weapon/reagent_containers/food/snacks/friedegg + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/tofurkey + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/carpmeat + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/fishfingers + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/omelette + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/waffles + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/eggplantparm + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/soylentgreen + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/soylenviridians + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/wingfangchu + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/kabob + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/monkeykabob + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/tofukabob + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/cubancarp + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/fries + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/spagetti + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/cheesyfries + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/enchiladas + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/fishandchips + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/stew + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/boiledrice + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/ricepudding + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/pastatomato + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/spesslaw + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/carrotfries + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/appletart + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/margheritaslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/meatpizzaslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/mushroompizzaslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/vegetablepizzaslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/ + + +// Baked Goods // + +/obj/item/weapon/reagent_containers/food/snacks/poppypretzel + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/baguette + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/twobread + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/bananabreadslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/breadslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice + price_tag = 1 + + +// Soups // + +/obj/item/weapon/reagent_containers/food/snacks/meatballsoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/slimesoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/bloodsoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/clownstears + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/nettlesoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/mysterysoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/wishsoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/hotchili + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/coldchili + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/tomatosoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/milosoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup + price_tag = 3 + +/obj/item/weapon/reagent_containers/food/snacks/beetsoup + price_tag = 3 + + +// Pies // + +/obj/item/weapon/reagent_containers/food/snacks/pie + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/meatpie + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/tofupie + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/plump_pie + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/xemeatpie + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/applepie + price_tag = 4 + +/obj/item/weapon/reagent_containers/food/snacks/cherrypie + price_tag = 4 + + +// Cakes // + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/braincakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/plaincakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/limecakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/applecakeslice + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie + price_tag = 5 + +/obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice + price_tag = 1 + + +// Misc // + +/obj/item/weapon/reagent_containers/food/snacks/boiledegg + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/donkpocket + price_tag = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sausage + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/muffin + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/tossedsalad + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/validsalad + price_tag = 2 + +/obj/item/weapon/reagent_containers/food/snacks/dionaroast + price_tag = 25 + +/obj/item/pizzabox + get_item_cost() + return get_item_cost(pizza) + + +//***************// +//----Smokes-----// +//***************// + +/obj/item/weapon/storage/fancy/cigarettes + price_tag = 15 + +/obj/item/weapon/storage/fancy/cigarettes/luckystars + price_tag = 17 + +/obj/item/weapon/storage/fancy/cigarettes/jerichos + price_tag = 22 + +/obj/item/weapon/storage/fancy/cigarettes/menthols + price_tag = 18 + +/obj/item/weapon/storage/fancy/cigar + price_tag = 27 + +/obj/item/weapon/storage/fancy/cigarettes/carcinomas + price_tag = 23 + +/obj/item/weapon/storage/fancy/cigarettes/professionals + price_tag = 25 + +/obj/item/weapon/storage/box/matches + price_tag = 1 + +/obj/item/weapon/flame/lighter + price_tag = 2 + +/obj/item/weapon/flame/lighter/zippo + price_tag = 5 \ No newline at end of file diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm new file mode 100644 index 00000000000..0a79ad5018e --- /dev/null +++ b/code/modules/economy/retail_scanner.dm @@ -0,0 +1,428 @@ +/obj/item/device/retail_scanner + name = "retail scanner" + desc = "Swipe your ID card to make purchases electronically." + icon = 'icons/obj/device.dmi' + icon_state = "retail_idle" + flags = NOBLUDGEON|CONDUCT + slot_flags = SLOT_BELT + req_access = list(access_heads) + w_class = 2.0 + origin_tech = list(TECH_MATERIAL = 1) + + var/locked = 1 + var/emagged = 0 + var/machine_id = "" + var/transaction_amount = 0 // cumulatd amount of money to pay in a single purchase + var/transaction_purpose = null // text that gets used in ATM transaction logs + var/list/transaction_logs = list() // list of strings using html code to visualise data + var/list/item_list = list() // entities and according + var/list/price_list = list() // prices for each purchase + + var/obj/item/confirm_item + var/datum/money_account/linked_account + var/account_to_connect = null + + +// Claim machine ID +/obj/item/device/retail_scanner/New() + machine_id = "[station_name()] RETAIL #[num_financial_terminals++]" + if(locate(/obj/structure/table) in loc) + pixel_y = 3 + transaction_devices += src // Global reference list to be properly set up by /proc/setup_economy() + + +// Always face the user when put on a table +/obj/item/device/retail_scanner/afterattack(atom/movable/AM, mob/user, proximity) + if(!proximity) return + if(istype(AM, /obj/structure/table)) + src.pixel_y = 3 // Shift it up slightly to look better on table + src.dir = get_dir(src, user) + else + scan_item_price(AM) + +// Reset dir when picked back up +/obj/item/device/retail_scanner/pickup(mob/user) + src.dir = SOUTH + src.pixel_y = 0 + + +/obj/item/device/retail_scanner/attack_self(mob/user as mob) + user.set_machine(src) + interact(user) + + +/obj/item/device/retail_scanner/AltClick(var/mob/user) + if(Adjacent(user)) + user.set_machine(src) + interact(user) + + +/obj/item/device/retail_scanner/interact(mob/user as mob) + var/dat = "

Retail Scanner

" + if (locked) + dat += "Unlock
" + dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
" + else + dat += "Lock
" + dat += "Linked account: [linked_account ? linked_account.owner_name : "None"]
" + dat += "Custom Order
" + + if(item_list.len) + dat += get_current_transaction() + dat += "
" + + for(var/i=transaction_logs.len, i>=1, i--) + dat += "[transaction_logs[i]]
" + + if(transaction_logs.len) + dat += locked ? "
" : "Reset Log
" + dat += "
" + dat += "Device ID: [machine_id]" + user << browse(dat, "window=retail;size=350x500") + onclose(user, "retail") + + +/obj/item/device/retail_scanner/Topic(var/href, var/href_list) + if(..()) + return + + usr.set_machine(src) + add_fingerprint(usr) + + if(href_list["choice"]) + switch(href_list["choice"]) + if("toggle_lock") + if(allowed(usr)) + locked = !locked + else + usr << "\icon[src]Insufficient access." + if("link_account") + var/attempt_account_num = input("Enter account number", "New account number") as num + var/attempt_pin = input("Enter PIN", "Account PIN") as num + linked_account = attempt_account_access(attempt_account_num, attempt_pin, 1) + if(linked_account) + if(linked_account.suspended) + linked_account = null + src.visible_message("\icon[src]Account has been suspended.") + else + usr << "\icon[src]Account not found." + if("custom_order") + var/t_purpose = sanitize(input("Enter purpose", "New purpose") as text) + if (!t_purpose || !Adjacent(usr)) return + transaction_purpose = t_purpose + item_list += t_purpose + var/t_amount = round(input("Enter price", "New price") as num) + if (!t_amount || !Adjacent(usr)) return + transaction_amount += t_amount + price_list += t_amount + playsound(src, 'sound/machines/twobeep.ogg', 25) + src.visible_message("\icon[src][transaction_purpose]: [t_amount] Thaler\s.") + if("set_amount") + var/item_name = locate(href_list["item"]) + var/n_amount = round(input("Enter amount", "New amount") as num) + n_amount = Clamp(n_amount, 0, 20) + if (!item_list[item_name] || !Adjacent(usr)) return + transaction_amount += (n_amount - item_list[item_name]) * price_list[item_name] + if(!n_amount) + item_list -= item_name + price_list -= item_name + else + item_list[item_name] = n_amount + if("subtract") + var/item_name = locate(href_list["item"]) + if(item_name) + transaction_amount -= price_list[item_name] + item_list[item_name]-- + if(item_list[item_name] <= 0) + item_list -= item_name + price_list -= item_name + if("add") + var/item_name = locate(href_list["item"]) + if(item_list[item_name] >= 20) return + transaction_amount += price_list[item_name] + item_list[item_name]++ + if("clear") + var/item_name = locate(href_list["item"]) + if(item_name) + transaction_amount -= price_list[item_name] * item_list[item_name] + item_list -= item_name + price_list -= item_name + else + transaction_amount = 0 + item_list.Cut() + price_list.Cut() + if("reset_log") + transaction_logs.Cut() + usr << "\icon[src]Transaction log reset." + updateDialog() + + + +/obj/item/device/retail_scanner/attackby(obj/O as obj, user as mob) + // Check for a method of paying (ID, PDA, e-wallet, cash, ect.) + var/obj/item/weapon/card/id/I = O.GetID() + if(I) + scan_card(I, O) + else if (istype(O, /obj/item/weapon/spacecash/ewallet)) + var/obj/item/weapon/spacecash/ewallet/E = O + scan_wallet(E) + else if (istype(O, /obj/item/weapon/spacecash)) + usr << "This device does not accept cash." + + else if(istype(O, /obj/item/weapon/card/emag)) + return ..() + // Not paying: Look up price and add it to transaction_amount + else + scan_item_price(O) + + +/obj/item/device/retail_scanner/showoff(mob/user) + for (var/mob/M in view(user)) + M.show_message("[user] holds up [src]. Swipe card or item.",1) + + +/obj/item/device/retail_scanner/proc/confirm(var/obj/item/I) + if(confirm_item == I) + return 1 + else + confirm_item = I + src.visible_message("\icon[src]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + playsound(src, 'sound/machines/twobeep.ogg', 25) + return 0 + + +/obj/item/device/retail_scanner/proc/scan_card(var/obj/item/weapon/card/id/I, var/obj/item/ID_container) + if (!transaction_amount) + return + + if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(I)) + return + + if (!linked_account) + usr.visible_message("\icon[src]Unable to connect to linked account.") + return + + // Access account for transaction + if(check_account()) + var/datum/money_account/D = get_account(I.associated_account_number) + var/attempt_pin = "" + if(D && D.security_level) + attempt_pin = input("Enter PIN", "Transaction") as num + D = null + D = attempt_account_access(I.associated_account_number, attempt_pin, 2) + + if(!D) + src.visible_message("\icon[src]Unable to access account. Check security settings and try again.") + else + if(D.suspended) + src.visible_message("\icon[src]Your account has been suspended.") + else + if(transaction_amount > D.money) + src.visible_message("\icon[src]Not enough funds.") + else + // Transfer the money + D.money -= transaction_amount + linked_account.money += transaction_amount + + // Create log entry in client's account + var/datum/transaction/T = new() + T.target_name = "[linked_account.owner_name]" + T.purpose = transaction_purpose + T.amount = "([transaction_amount])" + T.source_terminal = machine_id + T.date = current_date_string + T.time = worldtime2text() + D.transaction_log.Add(T) + + // Create log entry in owner's account + T = new() + T.target_name = D.owner_name + T.purpose = transaction_purpose + T.amount = "[transaction_amount]" + T.source_terminal = machine_id + T.date = current_date_string + T.time = worldtime2text() + linked_account.transaction_log.Add(T) + + // Save log + add_transaction_log(I.registered_name ? I.registered_name : "n/A", "ID Card", transaction_amount) + + // Confirm and reset + transaction_complete() + + +/obj/item/device/retail_scanner/proc/scan_wallet(var/obj/item/weapon/spacecash/ewallet/E) + if (!transaction_amount) + return + + if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(E)) + return + + // Access account for transaction + if(check_account()) + if(transaction_amount > E.worth) + src.visible_message("\icon[src]Not enough funds.") + else + // Transfer the money + E.worth -= transaction_amount + linked_account.money += transaction_amount + + // Create log entry in owner's account + var/datum/transaction/T = new() + T.target_name = E.owner_name + T.purpose = transaction_purpose + T.amount = "[transaction_amount]" + T.source_terminal = machine_id + T.date = current_date_string + T.time = worldtime2text() + linked_account.transaction_log.Add(T) + + // Save log + add_transaction_log(E.owner_name, "E-Wallet", transaction_amount) + + // Confirm and reset + transaction_complete() + + +/obj/item/device/retail_scanner/proc/scan_item_price(var/obj/O) + if(!istype(O)) return + if(item_list.len > 10) + src.visible_message("\icon[src]Only up to ten different items allowed per purchase.") + return + + // First check if item has a valid price + var/price = O.get_item_cost() + if(isnull(price)) + src.visible_message("\icon[src]Unable to find item in database.") + return + // Call out item cost + src.visible_message("\icon[src]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") + // Note the transaction purpose for later use + if(transaction_purpose) + transaction_purpose += "
" + transaction_purpose += "[O]: [price] Thaler\s" + transaction_amount += price + for(var/previously_scanned in item_list) + if(price == price_list[previously_scanned] && O.name == previously_scanned) + . = item_list[previously_scanned]++ + if(!.) + item_list[O.name] = 1 + price_list[O.name] = price + . = 1 + // Animation and sound + flick("retail_scan", src) + playsound(src, 'sound/machines/twobeep.ogg', 25) + // Reset confirmation + confirm_item = null + + +/obj/item/device/retail_scanner/proc/get_current_transaction() + var/dat = {" + + + + "} + var/item_name + for(var/i=1, i<=item_list.len, i++) + item_name = item_list[i] + dat += "" + dat += "
New Entry
[item_list[item_name] ? "- Set + [item_list[item_name]] x " : ""][item_name] Remove[price_list[item_name] * item_list[item_name]] þ
" + dat += "" + dat += "
Clear EntryTotal Amount: [transaction_amount] þ
" + return dat + + +/obj/item/device/retail_scanner/proc/add_transaction_log(var/c_name, var/p_method, var/t_amount) + var/dat = {" + + + + + + + +
Transaction #[transaction_logs.len+1]
Customer[c_name]
Pay Method[p_method]
Station Time[worldtime2text()]
+ + "} + var/item_name + for(var/i=1, i<=item_list.len, i++) + item_name = item_list[i] + dat += "" + dat += "" + dat += "
[item_list[item_name] ? "[item_list[item_name]] x " : ""][item_name][price_list[item_name] * item_list[item_name]] þ
Total Amount: [transaction_amount] þ
" + + transaction_logs += dat + + +/obj/item/device/retail_scanner/proc/check_account() + if (!linked_account) + usr.visible_message("\icon[src]Unable to connect to linked account.") + return 0 + + if(linked_account.suspended) + src.visible_message("\icon[src]Connected account has been suspended.") + return 0 + return 1 + + +/obj/item/device/retail_scanner/proc/transaction_complete() + /// Visible confirmation + playsound(src, 'sound/machines/chime.ogg', 25) + src.visible_message("\icon[src]Transaction complete.") + flick("retail_approve", src) + reset_memory() + updateDialog() + + +/obj/item/device/retail_scanner/proc/reset_memory() + transaction_amount = null + transaction_purpose = "" + item_list.Cut() + price_list.Cut() + confirm_item = null + + +/obj/item/device/retail_scanner/emag_act(var/remaining_charges, var/mob/user) + if(!emagged) + user << "You stealthily swipe the cryptographic sequencer through \the [src]." + playsound(src, "sparks", 50, 1) + req_access = list() + emagged = 1 + +//--Premades--// + +/obj/item/device/retail_scanner/command + account_to_connect = "Command" + ..() + +/obj/item/device/retail_scanner/medical + account_to_connect = "Medical" + ..() + +/obj/item/device/retail_scanner/engineering + account_to_connect = "Engineering" + ..() + +/obj/item/device/retail_scanner/science + account_to_connect = "Science" + ..() + +/obj/item/device/retail_scanner/security + account_to_connect = "Security" + ..() + +/obj/item/device/retail_scanner/cargo + account_to_connect = "Cargo" + ..() + +/obj/item/device/retail_scanner/civilian + account_to_connect = "Civilian" + ..() \ No newline at end of file diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index cf6318638fa..f8334dacb0c 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -86,12 +86,6 @@ "admin","ponies","heresy","meow","Pun Pun","monkey","Ian","moron","pizza","message","spam",\ "director", "Hello", "Hi!"," ","nuke","crate","dwarf","xeno") -/datum/event/ionstorm/tick() - if(botEmagChance) - for(var/obj/machinery/bot/bot in world) - if(prob(botEmagChance)) - bot.emag_act(1) - /datum/event/ionstorm/end() spawn(rand(5000,8000)) if(prob(50)) diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm index 44cc91a8e45..5a40ea1934a 100644 --- a/code/modules/flufftext/TextFilters.dm +++ b/code/modules/flufftext/TextFilters.dm @@ -26,7 +26,7 @@ proc/Intoxicated(phrase) proc/NewStutter(phrase,stunned) phrase = html_decode(phrase) - var/list/split_phrase = text2list(phrase," ") //Split it up into words. + var/list/split_phrase = splittext(phrase," ") //Split it up into words. var/list/unstuttered_words = split_phrase.Copy() var/i = rand(1,3) @@ -57,7 +57,7 @@ proc/NewStutter(phrase,stunned) split_phrase[index] = word - return sanitize(list2text(split_phrase," ")) + return sanitize(jointext(split_phrase," ")) proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness. step(M, pick(d,turn(d,90),turn(d,-90))) @@ -67,7 +67,7 @@ proc/Ellipsis(original_msg, chance = 50) if(chance >= 100) return original_msg var/list - words = text2list(original_msg," ") + words = splittext(original_msg," ") new_words = list() var/new_msg = "" @@ -78,6 +78,6 @@ proc/Ellipsis(original_msg, chance = 50) else new_words += w - new_msg = list2text(new_words," ") + new_msg = jointext(new_words," ") return new_msg diff --git a/code/modules/games/cah.dm b/code/modules/games/cah.dm new file mode 100644 index 00000000000..dc7e1dddaea --- /dev/null +++ b/code/modules/games/cah.dm @@ -0,0 +1,32 @@ +// This is a parody of Cards Against Humanity (https://en.wikipedia.org/wiki/Cards_Against_Humanity) +// which is licensed under CC BY-NC-SA 2.0, the full text of which can be found at the following URL: +// https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode + +/obj/item/weapon/deck/cah + name = "\improper CAG deck (white)" + desc = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the white deck." + icon_state = "cag_white" + var/blanks = 5 + +/obj/item/weapon/deck/cah/black + name = "\improper CAG deck (black)" + desc = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the black deck." + icon_state = "cag_black" + blanks = 0 + +/obj/item/weapon/deck/cah/New() + ..() + var/datum/playingcard/P + for(var/cardtext in card_text_list) + P = new() + P.name = "[cardtext]" + P.card_icon = "[icon_state]_card" + P.back_icon = "[icon_state]_card_back" + cards += P + if(!blanks) + return + for(var/x=1 to blanks) + P = new() + P.name = "Blank Card" + P.card_icon = "[icon_state]_card_back" + P.back_icon = "[icon_state]_card_back" \ No newline at end of file diff --git a/code/modules/games/cah_black_cards.dm b/code/modules/games/cah_black_cards.dm new file mode 100644 index 00000000000..ec27fa12700 --- /dev/null +++ b/code/modules/games/cah_black_cards.dm @@ -0,0 +1,37 @@ +// Black cards. +/obj/item/weapon/deck/cah/black/card_text_list = list( + "Why am I itchy?", + "Today, Security shot ____.", + "The Chaplain this shift is worshiping _____.", + "Cargo ordered a crate full of _____.", + "An ERT was called due to ______.", + "Alert! The Captain has armed themselves with _____.", + "Current Laws: ________ is your master.", + "Current Laws: ________ is the enemy.", + "_____ vented the entirety of Cargo.", + "Today, science found an anomaly that made people ____ and ____.", + "There was a rap battle between ____ and ____.", + "Caution, ______ have been detected in collision course with the station.", + "Today's kitchen menu includes _______.", + "What did the mercenaries want when they attacked the station?", + "I think the Captain is insane. He just demanded ______ in his office.", + "Fuckin' scientists, they just turned Misc. Research into _______ .", + "What's my fetish?", + "Hello, _______ here with _______", + "No one else was at _______, they wouldn't understand the ______", + "Why am I shivering?", + "What is this world coming to? First, ________, now _______", + "NanoTrasen's labor union decided to use _______ to raise employee morale.", + "The Chemist's drug of choice is ______", + "It is common practice for _______ to ______ on Moghes.", + "Mercurial Colonies are _____.", + "The Skrell are celebrating _____ today.", + "_____ is/are why I'm afraid of the maintenance tunnels.", + "_____ used ____ to create their newest invention, _____!", + "Scientists are not allowed to make Gatling _____.", + "It's not a party until the ____ arrive.", + "No matter how many Tajara you have, _____ is never acceptable.", + "No, the AI's first law is NOT to serve _____.", + "The robots are not disposal bins for your _____.", + "You can never have too many _____ on shift.", + ) \ No newline at end of file diff --git a/code/modules/games/cah_white_cards.dm b/code/modules/games/cah_white_cards.dm new file mode 100644 index 00000000000..2ed8a494db9 --- /dev/null +++ b/code/modules/games/cah_white_cards.dm @@ -0,0 +1,75 @@ +// White cards. +/obj/item/weapon/deck/cah/var/list/card_text_list = list( + "Those motherfucking carp", + "Having sex in the maintenance tunnels", + "Space 'Nam", + "Space lesbians", + "The Gardener getting SUPER high", + "The Captain thinking they're a badass", + "Being in a cult", + "Racially biased lawsets", + "An Unathi who WON'T STOP FIGHTING", + "Tajara fetishists", + "Bald thirty-year-olds", + "A Chief Engineer who can't setup the engine", + "Being sucked out into space", + "Officer Beepsky", + "Engineering", + "The grey tide.", + "The Research Director", + "Fucking synths", + "Man-eating purple pod plants", + "Chemical sprayers filled with lube", + "Librarians", + "Squids", + "Cats", + "Lizards", + "Apes", + "Trees", + "Supermatter undergarments", + "Bluespace", + "Five hundred rabid spiders", + "Five hundred rabid diona nymphs", + "Cable ties", + "Rampant vending machines", + "Positronic drink coasters", + "Kitchen utensil anomalies", + "Locked lockers", + "Energy spatulas", + "Flashbang gauntlets", + "Carp", + "Space whales", + "Blu-sharks", + "Fax machines", + "Exquisite Pens", + "Dr. Maxman's male enhancements", + "Gyrating slimes", + "Forehead-mounted laser weaponry", + "Pelvis-mounted laser weaponry", + "Cardboard cutouts", + "An obscene amount of rubber ducks", + "Brain cakes", + "A drone's game of life.", + "Anomaly suits", + "A gardener smoking reishi", + "Military-grade baseball bats", + "Barricading the bar", + "An irritatingly chipper robot", + "Androids hanging out in the bar drinking beer", + "Gear harnesses", + "A seventeen-year-old Captain", + "The throbbing erection that the HoS gets at the thought of shooting something", + "Trying to stab someone and hugging them instead", + "Waking up naked in the maintenance tunnels", + "Horrible cloning accidents", + "Licking the supermatter due to a dare", + "A Quartermaster who WON'T STOP ordering guns", + "Teaching a synthetic the Birds and the Bees", + "Unnecessary surgery", + "My addiction to spiders", + "wetskrell.nt", + "DOCTOR MAXMAN!", + "A group of Skrell getting their squish on", + "Enough soporific to put the entire station down", + "Delicious Vietnamese cuisine" + ) diff --git a/code/modules/games/cardemon.dm b/code/modules/games/cardemon.dm index 647b1ff8c7e..23e8d6e2517 100644 --- a/code/modules/games/cardemon.dm +++ b/code/modules/games/cardemon.dm @@ -4,6 +4,7 @@ icon_state = "card_pack_cardemon" /obj/item/weapon/pack/cardemon/New() + ..() var/datum/playingcard/P var/i for(i=0; i<5; i++) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 368bfdd9a5f..1ea1a9a3563 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -20,7 +20,6 @@ /obj/item/weapon/deck/cards/New() ..() - var/datum/playingcard/P for(var/suit in list("spades","clubs","diamonds","hearts")) @@ -44,7 +43,6 @@ P.back_icon = "card_back" cards += P - for(var/i = 0,i<2,i++) P = new() P.name = "joker" @@ -135,7 +133,19 @@ H.throw_at(get_step(target,target.dir),10,1,H) /obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) - if(istype(O,/obj/item/weapon/hand)) + if(cards.len == 1 && istype(O, /obj/item/weapon/pen)) + var/datum/playingcard/P = cards[1] + if(P.name != "Blank Card") + user << "You cannot write on that card." + return + var/cardtext = sanitize(input(user, "What do you wish to write on the card?", "Card Editing") as text|null, MAX_BOOK_MESSAGE_LEN) + if(!cardtext) + return + P.name = cardtext + // SNOWFLAKE FOR CAG, REMOVE IF OTHER CARDS ARE ADDED THAT USE THIS. + P.card_icon = "cag_white_card" + update_icon() + else if(istype(O,/obj/item/weapon/hand)) var/obj/item/weapon/hand/H = O for(var/datum/playingcard/P in cards) H.cards += P @@ -214,7 +224,7 @@ if(!discarding || !to_discard[discarding] || !usr || !src) return var/datum/playingcard/card = to_discard[discarding] - qdel(to_discard) + to_discard.Cut() var/obj/item/weapon/hand/H = new(src.loc) H.cards += card @@ -238,7 +248,7 @@ if((!concealed || src.loc == user) && cards.len) user << "It contains: " for(var/datum/playingcard/P in cards) - user << "The [P.name]." + user << "\The [P.name]." /obj/item/weapon/hand/update_icon(var/direction = 0) diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm index 7e289ad270e..9e0bacd2be4 100644 --- a/code/modules/games/spaceball_cards.dm +++ b/code/modules/games/spaceball_cards.dm @@ -4,6 +4,7 @@ icon_state = "card_pack_spaceball" /obj/item/weapon/pack/spaceball/New() + ..() var/datum/playingcard/P var/i var/year = 554 + text2num(time2text(world.timeofday, "YYYY")) diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm index b8e8618af02..f5727a0c432 100644 --- a/code/modules/games/tarot.dm +++ b/code/modules/games/tarot.dm @@ -17,8 +17,6 @@ P.back_icon = "card_back_tarot" cards += P for(var/suit in list("wands","pentacles","cups","swords")) - - for(var/number in list("ace","two","three","four","five","six","seven","eight","nine","ten","page","knight","queen","king")) P = new() P.name = "[number] of [suit]" diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm index 97fa843ce1f..a3de9fe1450 100644 --- a/code/modules/ghosttrap/trap.dm +++ b/code/modules/ghosttrap/trap.dm @@ -22,7 +22,7 @@ proc/populate_ghost_traps() var/ghost_trap_role = "Positronic Brain" // Check for bans, proper atom types, etc. -/datum/ghosttrap/proc/assess_candidate(var/mob/dead/observer/candidate) +/datum/ghosttrap/proc/assess_candidate(var/mob/observer/dead/candidate) if(!istype(candidate) || !candidate.client || !candidate.ckey) return 0 if(!candidate.MayRespawn()) @@ -39,7 +39,7 @@ proc/populate_ghost_traps() /datum/ghosttrap/proc/request_player(var/mob/target, var/request_string) if(!target) return - for(var/mob/dead/observer/O in player_list) + for(var/mob/observer/dead/O in player_list) if(!O.MayRespawn()) continue if(islist(ban_checks)) @@ -56,7 +56,7 @@ proc/populate_ghost_traps() if(..()) return 1 if(href_list["candidate"] && href_list["target"]) - var/mob/dead/observer/candidate = locate(href_list["candidate"]) // BYOND magic. + var/mob/observer/dead/candidate = locate(href_list["candidate"]) // BYOND magic. var/mob/target = locate(href_list["target"]) // So much BYOND magic. if(!target || !candidate) return diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 79a1f25bcaa..157d4acbd3b 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -1151,23 +1151,3 @@ set_trait(TRAIT_PRODUCTION,7) set_trait(TRAIT_YIELD,3) set_trait(TRAIT_POTENCY,3) - -// Alien weeds. -/datum/seed/xenomorph - name = "xenomorph" - seed_name = "alien weed" - display_name = "alien weeds" - force_layer = 3 - chems = list("phoron" = list(1,3)) - -/datum/seed/xenomorph/New() - ..() - set_trait(TRAIT_PLANT_ICON,"vine2") - set_trait(TRAIT_IMMUTABLE,1) - set_trait(TRAIT_PRODUCT_COLOUR,"#3D1934") - set_trait(TRAIT_FLESH_COLOUR,"#3D1934") - set_trait(TRAIT_PLANT_COLOUR,"#3D1934") - set_trait(TRAIT_PRODUCTION,1) - set_trait(TRAIT_YIELD,-1) - set_trait(TRAIT_SPREAD,2) - set_trait(TRAIT_POTENCY,50) \ No newline at end of file diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 36d0101e1eb..d49680bd416 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -129,7 +129,7 @@ return 1 return ..() -/obj/machinery/portable_atmospherics/hydroponics/attack_ghost(var/mob/dead/observer/user) +/obj/machinery/portable_atmospherics/hydroponics/attack_ghost(var/mob/observer/dead/user) if(!(harvest && seed && seed.has_mob_product)) return diff --git a/code/modules/liquid/splash_simulation.dm b/code/modules/liquid/splash_simulation.dm deleted file mode 100644 index 983f46603df..00000000000 --- a/code/modules/liquid/splash_simulation.dm +++ /dev/null @@ -1,202 +0,0 @@ -#define LIQUID_TRANSFER_THRESHOLD 0.05 - -var/liquid_delay = 4 - -var/list/datum/puddle/puddles = list() - -datum/puddle - var/list/obj/effect/liquid/liquid_objects = list() - -datum/puddle/proc/process() - //world << "DEBUG: Puddle process!" - for(var/obj/effect/liquid/L in liquid_objects) - L.spread() - - for(var/obj/effect/liquid/L in liquid_objects) - L.apply_calculated_effect() - - if(liquid_objects.len == 0) - qdel(src) - -datum/puddle/New() - ..() - puddles += src - -datum/puddle/Destroy() - puddles -= src - for(var/obj/O in liquid_objects) - qdel(O) - ..() - -client/proc/splash() - var/volume = input("Volume?","Volume?", 0 ) as num - if(!isnum(volume)) return - if(volume <= LIQUID_TRANSFER_THRESHOLD) return - var/turf/T = get_turf(src.mob) - if(!isturf(T)) return - trigger_splash(T, volume) - -proc/trigger_splash(turf/epicenter as turf, volume as num) - if(!epicenter) - return - if(volume <= 0) - return - - var/obj/effect/liquid/L = new/obj/effect/liquid(epicenter) - L.volume = volume - L.update_icon2() - var/datum/puddle/P = new/datum/puddle() - P.liquid_objects.Add(L) - L.controller = P - - - - -obj/effect/liquid - icon = 'icons/effects/liquid.dmi' - icon_state = "0" - name = "liquid" - var/volume = 0 - var/new_volume = 0 - var/datum/puddle/controller - -obj/effect/liquid/New() - ..() - if( !isturf(loc) ) - qdel(src) - - for( var/obj/effect/liquid/L in loc ) - if(L != src) - qdel(L) - -obj/effect/liquid/proc/spread() - - //world << "DEBUG: liquid spread!" - var/surrounding_volume = 0 - var/list/spread_directions = list(1,2,4,8) - var/turf/loc_turf = loc - for(var/direction in spread_directions) - var/turf/T = get_step(src,direction) - if(!T) - spread_directions.Remove(direction) - //world << "ERROR: Map edge!" - continue //Map edge - if(!loc_turf.can_leave_liquid(direction)) //Check if this liquid can leave the tile in the direction - spread_directions.Remove(direction) - continue - if(!T.can_accept_liquid(turn(direction,180))) //Check if this liquid can enter the tile - spread_directions.Remove(direction) - continue - var/obj/effect/liquid/L = locate(/obj/effect/liquid) in T - if(L) - if(L.volume >= src.volume) - spread_directions.Remove(direction) - continue - surrounding_volume += L.volume //If liquid already exists, add it's volume to our sum - else - var/obj/effect/liquid/NL = new(T) //Otherwise create a new object which we'll spread to. - NL.controller = src.controller - controller.liquid_objects.Add(NL) - - if(!spread_directions.len) - //world << "ERROR: No candidate to spread to." - return //No suitable candidate to spread to - - var/average_volume = (src.volume + surrounding_volume) / (spread_directions.len + 1) //Average amount of volume on this and the surrounding tiles. - var/volume_difference = src.volume - average_volume //How much more/less volume this tile has than the surrounding tiles. - if(volume_difference <= (spread_directions.len*LIQUID_TRANSFER_THRESHOLD)) //If we have less than the threshold excess liquid - then there is nothing to do as other tiles will be giving us volume.or the liquid is just still. - //world << "ERROR: transfer volume lower than THRESHOLD!" - return - - var/volume_per_tile = volume_difference / spread_directions.len - - for(var/direction in spread_directions) - var/turf/T = get_step(src,direction) - if(!T) - //world << "ERROR: Map edge 2!" - continue //Map edge - var/obj/effect/liquid/L = locate(/obj/effect/liquid) in T - if(L) - src.volume -= volume_per_tile //Remove the volume from this tile - L.new_volume = L.new_volume + volume_per_tile //Add it to the volume to the other tile - -obj/effect/liquid/proc/apply_calculated_effect() - volume += new_volume - - if(volume < LIQUID_TRANSFER_THRESHOLD) - qdel(src) - new_volume = 0 - update_icon2() - -obj/effect/liquid/Move() - return 0 - -obj/effect/liquid/Destroy() - src.controller.liquid_objects.Remove(src) - ..() - -obj/effect/liquid/proc/update_icon2() - //icon_state = num2text( max(1,min(7,(floor(volume),10)/10)) ) - - switch(volume) - if(0 to 0.1) - qdel(src) - if(0.1 to 5) - icon_state = "1" - if(5 to 10) - icon_state = "2" - if(10 to 20) - icon_state = "3" - if(20 to 30) - icon_state = "4" - if(30 to 40) - icon_state = "5" - if(40 to 50) - icon_state = "6" - if(50 to INFINITY) - icon_state = "7" - -turf/proc/can_accept_liquid(from_direction) - return 0 -turf/proc/can_leave_liquid(from_direction) - return 0 - -turf/space/can_accept_liquid(from_direction) - return 1 -turf/space/can_leave_liquid(from_direction) - return 1 - -turf/simulated/floor/can_accept_liquid(from_direction) - for(var/obj/structure/window/W in src) - if(W.dir in list(5,6,9,10)) - return 0 - if(W.dir & from_direction) - return 0 - for(var/obj/O in src) - if(!O.liquid_pass()) - return 0 - return 1 - -turf/simulated/floor/can_leave_liquid(to_direction) - for(var/obj/structure/window/W in src) - if(W.dir in list(5,6,9,10)) - return 0 - if(W.dir & to_direction) - return 0 - for(var/obj/O in src) - if(!O.liquid_pass()) - return 0 - return 1 - -turf/simulated/wall/can_accept_liquid(from_direction) - return 0 -turf/simulated/wall/can_leave_liquid(from_direction) - return 0 - -obj/proc/liquid_pass() - return 1 - -obj/machinery/door/liquid_pass() - return !density - -#undef LIQUID_TRANSFER_THRESHOLD \ No newline at end of file diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 490513431b7..760303ac238 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -556,8 +556,8 @@ var/list/name_to_material sheet_plural_name = "ingots" // Adminspawn only, do not let anyone get this. -/material/voxalloy - name = "voxalloy" +/material/alienalloy + name = "alienalloy" display_name = "durable alloy" stack_type = null icon_colour = "#6C7364" @@ -640,21 +640,6 @@ var/list/name_to_material /material/cult/reinf/place_dismantled_product(var/turf/target) new /obj/effect/decal/remains/human(target) -/material/resin - name = "resin" - icon_colour = "#E85DD8" - dooropen_noise = 'sound/effects/attackblob.ogg' - door_icon_base = "resin" - melting_point = T0C+300 - sheet_singular_name = "blob" - sheet_plural_name = "blobs" - -/material/resin/can_open_material_door(var/mob/living/user) - var/mob/living/carbon/M = user - if(istype(M) && locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - return 1 - return 0 - //TODO PLACEHOLDERS: /material/leather name = "leather" diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 1f6a663620d..9585a4965bc 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -21,7 +21,7 @@ generate_loot() /obj/structure/closet/crate/secure/loot/proc/generate_loot() - var/loot = rand(1, 100) + var/loot = rand(1, 99) switch(loot) if(1 to 5) // Common things go, 5% new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src) @@ -104,7 +104,7 @@ if(88) new/obj/item/xenos_claw(src) if(89) - new/obj/item/organ/internal/xenos/plasmavessel(src) + new/obj/item/clothing/head/bearpelt(src) if(90) new/obj/item/organ/internal/heart(src) if(91) @@ -142,8 +142,6 @@ if(99) new/obj/item/weapon/storage/belt/champion(src) new/obj/item/clothing/mask/luchador(src) - if(100) - new/obj/item/clothing/head/bearpelt(src) /obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob) if(!locked) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 353c3669396..381072871f0 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -288,17 +288,28 @@ icon_state = "mining_brace" var/obj/machinery/mining/drill/connected +/obj/machinery/mining/brace/New() + ..() + + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/miningdrillbrace(src) + /obj/machinery/mining/brace/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(connected && connected.active) + user << "You can't work with the brace of a running drill!" + return + + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + if(istype(W,/obj/item/weapon/wrench)) if(istype(get_turf(src), /turf/space)) user << "You can't anchor something to empty space. Idiot." return - if(connected && connected.active) - user << "You can't unanchor the brace of a running drill!" - return - playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) user << "You [anchored ? "un" : ""]anchor the brace." diff --git a/code/modules/mob/dead/death.dm b/code/modules/mob/dead/death.dm index 48a04a834c7..1be552886b0 100644 --- a/code/modules/mob/dead/death.dm +++ b/code/modules/mob/dead/death.dm @@ -1,5 +1,5 @@ -/mob/dead/dust() //ghosts can't be vaporised. +/mob/observer/dust() //ghosts can't be vaporised. return -/mob/dead/gib() //ghosts can't be gibbed. +/mob/observer/gib() //ghosts can't be gibbed. return diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index bf9b607a38d..73605d1328d 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -1,4 +1,4 @@ -/mob/dead/observer/Login() +/mob/observer/dead/Login() ..() if (ghostimage) ghostimage.icon_state = src.icon_state diff --git a/code/modules/mob/dead/observer/logout.dm b/code/modules/mob/dead/observer/logout.dm index 11c6c3c834c..573c44f4684 100644 --- a/code/modules/mob/dead/observer/logout.dm +++ b/code/modules/mob/dead/observer/logout.dm @@ -1,4 +1,4 @@ -/mob/dead/observer/Logout() +/mob/observer/dead/Logout() ..() spawn(0) if(src && !key) //we've transferred to another mob. This ghost should be deleted. diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 714b001f691..68c631101d3 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1,14 +1,18 @@ var/global/list/image/ghost_darkness_images = list() //this is a list of images for things ghosts should still be able to see when they toggle darkness var/global/list/image/ghost_sightless_images = list() //this is a list of images for things ghosts should still be able to see even without ghost sight -/mob/dead/observer +/mob/observer + name = "observer" + desc = "This shouldn't appear" + density = 0 + +/mob/observer/dead name = "ghost" desc = "It's a g-g-g-g-ghooooost!" //jinkies! icon = 'icons/mob/mob.dmi' icon_state = "ghost" layer = 4 stat = DEAD - density = 0 canmove = 0 blinded = 0 anchored = 1 // don't get pushed around @@ -31,11 +35,11 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images var/seedarkness = 1 incorporeal_move = 1 -/mob/dead/observer/New(mob/body) +/mob/observer/dead/New(mob/body) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF see_invisible = SEE_INVISIBLE_OBSERVER see_in_dark = 100 - verbs += /mob/dead/observer/proc/dead_tele + verbs += /mob/observer/dead/proc/dead_tele stat = DEAD @@ -81,7 +85,7 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images real_name = name ..() -/mob/dead/observer/Destroy() +/mob/observer/dead/Destroy() if (ghostimage) ghost_darkness_images -= ghostimage qdel(ghostimage) @@ -89,7 +93,7 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images updateallghostimages() ..() -/mob/dead/observer/Topic(href, href_list) +/mob/observer/dead/Topic(href, href_list) if (href_list["track"]) var/mob/target = locate(href_list["track"]) in mob_list if(target) @@ -97,19 +101,19 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images -/mob/dead/attackby(obj/item/W, mob/user) +/mob/observer/dead/attackby(obj/item/W, mob/user) if(istype(W,/obj/item/weapon/book/tome)) - var/mob/dead/M = src + var/mob/observer/dead/M = src M.manifest(user) -/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) +/mob/observer/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) return 1 /* Transfer_mind is there to check if mob is being deleted/not going to have a body. Works together with spawning an observer, noted above. */ -/mob/dead/observer/Life() +/mob/observer/dead/Life() ..() if(!loc) return if(!client) return 0 @@ -131,13 +135,13 @@ Works together with spawning an observer, noted above. process_medHUD(src) -/mob/dead/proc/process_medHUD(var/mob/M) +/mob/observer/dead/proc/process_medHUD(var/mob/M) var/client/C = M.client for(var/mob/living/carbon/human/patient in oview(M, 14)) C.images += patient.hud_list[HEALTH_HUD] C.images += patient.hud_list[STATUS_HUD_OOC] -/mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U) +/mob/observer/dead/proc/assess_targets(list/target_list, mob/observer/dead/U) var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] @@ -147,14 +151,14 @@ Works together with spawning an observer, noted above. /mob/proc/ghostize(var/can_reenter_corpse = 1) if(key) - var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc. + var/mob/observer/dead/ghost = new(src) //Transfer safety to observer spawning proc. ghost.can_reenter_corpse = can_reenter_corpse ghost.timeofdeath = src.timeofdeath //BS12 EDIT ghost.key = key if(ghost.client) ghost.client.time_died_as_mouse = ghost.timeofdeath if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + ghost.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! return ghost /* @@ -183,14 +187,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/turf/location = get_turf(src) message_admins("[key_name_admin(usr)] has ghosted. (JMP)") log_game("[key_name_admin(usr)] has ghosted.") - var/mob/dead/observer/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 + var/mob/observer/dead/ghost = ghostize(0) //0 parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. announce_ghost_joinleave(ghost) -/mob/dead/observer/can_use_hands() return 0 -/mob/dead/observer/is_active() return 0 +/mob/observer/dead/can_use_hands() return 0 +/mob/observer/dead/is_active() return 0 -/mob/dead/observer/Stat() +/mob/observer/dead/Stat() ..() if(statpanel("Status")) if(emergency_shuttle) @@ -198,7 +202,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(eta_status) stat(null, eta_status) -/mob/dead/observer/verb/reenter_corpse() +/mob/observer/dead/verb/reenter_corpse() set category = "Ghost" set name = "Re-enter Corpse" if(!client) return @@ -224,7 +228,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp announce_ghost_joinleave(mind, 0, "They now occupy their body again.") return 1 -/mob/dead/observer/verb/toggle_medHUD() +/mob/observer/dead/verb/toggle_medHUD() set category = "Ghost" set name = "Toggle MedicHUD" set desc = "Toggles Medical HUD allowing you to see how everyone is doing" @@ -237,7 +241,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp medHUD = 1 src << "\blue Medical HUD Enabled" -/mob/dead/observer/verb/toggle_antagHUD() +/mob/observer/dead/verb/toggle_antagHUD() set category = "Ghost" set name = "Toggle AntagHUD" set desc = "Toggles AntagHUD allowing you to see who is the antagonist" @@ -248,7 +252,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!config.antag_hud_allowed && (!client.holder || mentor)) src << "\red Admins have disabled this for this round." return - var/mob/dead/observer/M = src + var/mob/observer/dead/M = src if(jobban_isbanned(M, "AntagHUD")) src << "\red You have been banned from using this feature" return @@ -265,16 +269,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp M.antagHUD = 1 src << "\blue AntagHUD Enabled" -/mob/dead/observer/proc/dead_tele(A in ghostteleportlocs) +/mob/observer/dead/proc/dead_tele(A in ghostteleportlocs) set category = "Ghost" set name = "Teleport" set desc= "Teleport to a location" - if(!istype(usr, /mob/dead/observer)) + if(!istype(usr, /mob/observer/dead)) usr << "Not when you're not dead!" return - usr.verbs -= /mob/dead/observer/proc/dead_tele + usr.verbs -= /mob/observer/dead/proc/dead_tele spawn(30) - usr.verbs += /mob/dead/observer/proc/dead_tele + usr.verbs += /mob/observer/dead/proc/dead_tele var/area/thearea = ghostteleportlocs[A] if(!thearea) return @@ -300,7 +304,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp usr.forceMove(pick(L)) following = null -/mob/dead/observer/verb/follow(input in getmobs()) +/mob/observer/dead/verb/follow(input in getmobs()) set category = "Ghost" set name = "Follow" // "Haunt" set desc = "Follow and haunt a mob." @@ -310,7 +314,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp ManualFollow(target) // This is the ghost's follow verb with an argument -/mob/dead/observer/proc/ManualFollow(var/atom/movable/target) +/mob/observer/dead/proc/ManualFollow(var/atom/movable/target) if(!target) return @@ -340,7 +344,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/proc/update_following() . = get_turf(src) - for(var/mob/dead/observer/M in following_mobs) + for(var/mob/observer/dead/M in following_mobs) if(M.following != src) following_mobs -= M else @@ -351,12 +355,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/list/following_mobs = list() /mob/Destroy() - for(var/mob/dead/observer/M in following_mobs) + for(var/mob/observer/dead/M in following_mobs) M.following = null following_mobs = null return ..() -/mob/dead/observer/Destroy() +/mob/observer/dead/Destroy() if(ismob(following)) var/mob/M = following M.following_mobs -= src @@ -376,18 +380,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/proc/check_holy(var/turf/T) return 0 -/mob/dead/observer/check_holy(var/turf/T) +/mob/observer/dead/check_holy(var/turf/T) if(check_rights(R_ADMIN|R_FUN, 0, src)) return 0 return (T && T.holy) && (invisibility <= SEE_INVISIBLE_LIVING || (mind in cult.current_antagonists)) -/mob/dead/observer/verb/jumptomob(target in getmobs()) //Moves the ghost instead of just changing the ghosts's eye -Nodrak +/mob/observer/dead/verb/jumptomob(target in getmobs()) //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" set name = "Jump to Mob" set desc = "Teleport to a mob" - if(istype(usr, /mob/dead/observer)) //Make sure they're an observer! + if(istype(usr, /mob/observer/dead)) //Make sure they're an observer! if (!target)//Make sure we actually have a target return @@ -401,7 +405,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else src << "This mob is not located in the game world." /* -/mob/dead/observer/verb/boo() +/mob/observer/dead/verb/boo() set category = "Ghost" set name = "Boo!" set desc= "Scare your crew members because of boredom!" @@ -416,22 +420,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return */ -/mob/dead/observer/memory() +/mob/observer/dead/memory() set hidden = 1 src << "\red You are dead! You have no mind to store memory!" -/mob/dead/observer/add_memory() +/mob/observer/dead/add_memory() set hidden = 1 src << "\red You are dead! You have no mind to store memory!" -/mob/dead/observer/Post_Incorpmove() +/mob/observer/dead/Post_Incorpmove() following = null -/mob/dead/observer/verb/analyze_air() +/mob/observer/dead/verb/analyze_air() set name = "Analyze Air" set category = "Ghost" - if(!istype(usr, /mob/dead/observer)) return + if(!istype(usr, /mob/observer/dead)) return // Shamelessly copied from the Gas Analyzers if (!( istype(usr.loc, /turf) )) @@ -453,7 +457,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp src << "\blue Temperature: [round(environment.temperature-T0C,0.1)]°C ([round(environment.temperature,0.1)]K)" src << "\blue Heat Capacity: [round(environment.heat_capacity(),0.1)]" -/mob/dead/observer/verb/become_mouse() +/mob/observer/dead/verb/become_mouse() set name = "Become mouse" set category = "Ghost" @@ -500,7 +504,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp host.ckey = src.ckey host << "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent." -/mob/dead/observer/verb/view_manfiest() +/mob/observer/dead/verb/view_manfiest() set name = "Show Crew Manifest" set category = "Ghost" @@ -511,7 +515,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp src << browse(dat, "window=manifest;size=370x420;can_close=1") //This is called when a ghost is drag clicked to something. -/mob/dead/observer/MouseDrop(atom/over) +/mob/observer/dead/MouseDrop(atom/over) if(!usr || !over) return if (isobserver(usr) && usr.client && usr.client.holder && isliving(over)) if (usr.client.holder.cmd_ghost_drag(src,over)) @@ -520,7 +524,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return ..() //Used for drawing on walls with blood puddles as a spooky ghost. -/mob/dead/verb/bloody_doodle() +/mob/observer/dead/verb/bloody_doodle() set category = "Ghost" set name = "Write in blood" @@ -594,17 +598,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp W.add_hiddenprint(src) W.visible_message("\red Invisible fingers crudely paint something in blood on [T]...") -/mob/dead/observer/pointed(atom/A as mob|obj|turf in view()) +/mob/observer/dead/pointed(atom/A as mob|obj|turf in view()) if(!..()) return 0 usr.visible_message("[src] points to [A]") return 1 -/mob/dead/proc/manifest(mob/user) +/mob/observer/dead/proc/manifest(mob/user) var/is_manifest = 0 if(!is_manifest) is_manifest = 1 - verbs += /mob/dead/proc/toggle_visibility + verbs += /mob/observer/dead/proc/toggle_visibility if(src.invisibility != 0) user.visible_message( \ @@ -618,7 +622,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp "You get the feeling that the ghost can't become any more visible." \ ) -/mob/dead/proc/toggle_icon(var/icon) +/mob/observer/dead/proc/toggle_icon(var/icon) if(!client) return @@ -632,7 +636,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon) client.images += J -/mob/dead/proc/toggle_visibility(var/forced = 0) +/mob/observer/dead/proc/toggle_visibility(var/forced = 0) set category = "Ghost" set name = "Toggle Visibility" set desc = "Allows you to turn (in)visible (almost) at will." @@ -652,7 +656,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp // Give the ghost a cult icon which should be visible only to itself toggle_icon("cult") -/mob/dead/observer/verb/toggle_anonsay() +/mob/observer/dead/verb/toggle_anonsay() set category = "Ghost" set name = "Toggle Anonymous Chat" set desc = "Toggles showing your key in dead chat." @@ -663,13 +667,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp else src << "Your key will be publicly visible again." -/mob/dead/observer/canface() +/mob/observer/dead/canface() return 1 -/mob/dead/observer/proc/can_admin_interact() +/mob/observer/dead/proc/can_admin_interact() return check_rights(R_ADMIN, 0, src) -/mob/dead/observer/verb/toggle_ghostsee() +/mob/observer/dead/verb/toggle_ghostsee() set name = "Toggle Ghost Vision" set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" set category = "Ghost" @@ -677,13 +681,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp updateghostsight() usr << "You [(ghostvision?"now":"no longer")] have ghost vision." -/mob/dead/observer/verb/toggle_darkness() +/mob/observer/dead/verb/toggle_darkness() set name = "Toggle Darkness" set category = "Ghost" seedarkness = !(seedarkness) updateghostsight() -/mob/dead/observer/proc/updateghostsight() +/mob/observer/dead/proc/updateghostsight() if (!seedarkness) see_invisible = SEE_INVISIBLE_NOLIGHTING else @@ -693,10 +697,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp updateghostimages() /proc/updateallghostimages() - for (var/mob/dead/observer/O in player_list) + for (var/mob/observer/dead/O in player_list) O.updateghostimages() -/mob/dead/observer/proc/updateghostimages() +/mob/observer/dead/proc/updateghostimages() if (!client) return if (seedarkness || !ghostvision) @@ -709,7 +713,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if (ghostimage) client.images -= ghostimage //remove ourself -mob/dead/observer/MayRespawn(var/feedback = 0) +mob/observer/dead/MayRespawn(var/feedback = 0) if(!client) return 0 if(mind && mind.current && mind.current.stat != DEAD && can_reenter_corpse) @@ -729,7 +733,7 @@ mob/dead/observer/MayRespawn(var/feedback = 0) if(client && eyeobj) return "|eye" -/mob/dead/observer/extra_ghost_link(var/atom/ghost) +/mob/observer/dead/extra_ghost_link(var/atom/ghost) if(mind && mind.current) return "|body" diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 6f7d99c6160..9dfd3deb44c 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -1,4 +1,4 @@ -/mob/dead/observer/say(var/message) +/mob/observer/dead/say(var/message) message = sanitize(message) if (!message) @@ -17,7 +17,7 @@ . = src.say_dead(message) -/mob/dead/observer/emote(var/act, var/type, var/message) +/mob/observer/dead/emote(var/act, var/type, var/message) //message = sanitize(message) - already sanitized in verb/me_verb() if(!message) diff --git a/code/modules/mob/freelook/ai/eye.dm b/code/modules/mob/freelook/ai/eye.dm index dce53bb3ca4..7b0cbde24e0 100644 --- a/code/modules/mob/freelook/ai/eye.dm +++ b/code/modules/mob/freelook/ai/eye.dm @@ -3,15 +3,15 @@ // A mob that the AI controls to look around the station with. // It streams chunks as it moves around, which will show it what the AI can and cannot see. -/mob/eye/aiEye +/mob/observer/eye/aiEye name = "Inactive AI Eye" icon_state = "AI-eye" -/mob/eye/aiEye/New() +/mob/observer/eye/aiEye/New() ..() visualnet = cameranet -/mob/eye/aiEye/setLoc(var/T, var/cancel_tracking = 1) +/mob/observer/eye/aiEye/setLoc(var/T, var/cancel_tracking = 1) if(..()) var/mob/living/silicon/ai/ai = owner if(cancel_tracking) @@ -43,7 +43,7 @@ /mob/living/silicon/ai/proc/create_eyeobj(var/newloc) if(eyeobj) destroy_eyeobj() if(!newloc) newloc = src.loc - eyeobj = PoolOrNew(/mob/eye/aiEye, newloc) + eyeobj = PoolOrNew(/mob/observer/eye/aiEye, newloc) eyeobj.owner = src eyeobj.name = "[src.name] (AI Eye)" // Give it a name if(client) client.eye = eyeobj @@ -65,14 +65,9 @@ if(istype(usr, /mob/living/silicon/ai)) var/mob/living/silicon/ai/AI = usr if(AI.eyeobj && AI.client.eye == AI.eyeobj) - AI.eyeobj.setLoc(src) - -// Return to the Core. -/mob/living/silicon/ai/proc/core() - set category = "AI Commands" - set name = "AI Core" - - view_core() + var/turf/T = get_turf(src) + if(T) + AI.eyeobj.setLoc(T) /mob/living/silicon/ai/proc/view_core() camera = null @@ -88,7 +83,7 @@ src.eyeobj.setLoc(src) /mob/living/silicon/ai/proc/toggle_acceleration() - set category = "AI Commands" + set category = "AI Settings" set name = "Toggle Camera Acceleration" if(!eyeobj) diff --git a/code/modules/mob/freelook/chunk.dm b/code/modules/mob/freelook/chunk.dm index 9b6b562df33..626a79e28fb 100644 --- a/code/modules/mob/freelook/chunk.dm +++ b/code/modules/mob/freelook/chunk.dm @@ -25,7 +25,7 @@ // Add an eye to the chunk, then update if changed. -/datum/chunk/proc/add(mob/eye/eye) +/datum/chunk/proc/add(mob/observer/eye/eye) if(!eye.owner) return eye.visibleChunks += src @@ -38,7 +38,7 @@ // Remove an eye from the chunk, then update if changed. -/datum/chunk/proc/remove(mob/eye/eye) +/datum/chunk/proc/remove(mob/observer/eye/eye) if(!eye.owner) return eye.visibleChunks -= src @@ -91,7 +91,7 @@ if(t.obfuscations[obfuscation.type]) obscured -= t.obfuscations[obfuscation.type] for(var/eye in seenby) - var/mob/eye/m = eye + var/mob/observer/eye/m = eye if(!m || !m.owner) continue if(m.owner.client) @@ -105,7 +105,7 @@ obscured += t.obfuscations[obfuscation.type] for(var/eye in seenby) - var/mob/eye/m = eye + var/mob/observer/eye/m = eye if(!m || !m.owner) seenby -= m continue diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm index 437b2979dcc..0c38ad8033c 100644 --- a/code/modules/mob/freelook/eye.dm +++ b/code/modules/mob/freelook/eye.dm @@ -3,12 +3,11 @@ // A mob that another mob controls to look around the station with. // It streams chunks as it moves around, which will show it what the controller can and cannot see. -/mob/eye +/mob/observer/eye name = "Eye" icon = 'icons/mob/eye.dmi' icon_state = "default-eye" alpha = 127 - density = 0 var/sprint = 10 var/cooldown = 0 @@ -25,14 +24,14 @@ var/ghostimage = null var/datum/visualnet/visualnet -/mob/eye/New() +/mob/observer/eye/New() ghostimage = image(src.icon,src,src.icon_state) ghost_darkness_images |= ghostimage //so ghosts can see the eye when they disable darkness ghost_sightless_images |= ghostimage //so ghosts can see the eye when they disable ghost sight updateallghostimages() ..() -mob/eye/Destroy() +mob/observer/eye/Destroy() if (ghostimage) ghost_darkness_images -= ghostimage ghost_sightless_images -= ghostimage @@ -41,30 +40,30 @@ mob/eye/Destroy() updateallghostimages() ..() -/mob/eye/Move(n, direct) +/mob/observer/eye/Move(n, direct) if(owner == src) return EyeMove(n, direct) return 0 -/mob/eye/airflow_hit(atom/A) +/mob/observer/eye/airflow_hit(atom/A) airflow_speed = 0 airflow_dest = null -/mob/eye/examinate() +/mob/observer/eye/examinate() set popup_menu = 0 set src = usr.contents return 0 -/mob/eye/pointed() +/mob/observer/eye/pointed() set popup_menu = 0 set src = usr.contents return 0 -/mob/eye/examine(mob/user) +/mob/observer/eye/examine(mob/user) // Use this when setting the eye's location. // It will also stream the chunk that the new loc is in. -/mob/eye/proc/setLoc(var/T) +/mob/observer/eye/proc/setLoc(var/T) if(owner) T = get_turf(T) if(T != loc) @@ -82,13 +81,13 @@ mob/eye/Destroy() return 1 return 0 -/mob/eye/proc/getLoc() +/mob/observer/eye/proc/getLoc() if(owner) if(!isturf(owner.loc) || !owner.client) return return loc /mob - var/mob/eye/eyeobj + var/mob/observer/eye/eyeobj /mob/proc/EyeMove(n, direct) if(!eyeobj) @@ -96,7 +95,7 @@ mob/eye/Destroy() return eyeobj.EyeMove(n, direct) -/mob/eye/EyeMove(n, direct) +/mob/observer/eye/EyeMove(n, direct) var/initial = initial(sprint) var/max_sprint = 50 diff --git a/code/modules/mob/freelook/life.dm b/code/modules/mob/freelook/life.dm index 1d1248e872e..f3994f9a7e6 100644 --- a/code/modules/mob/freelook/life.dm +++ b/code/modules/mob/freelook/life.dm @@ -1,4 +1,4 @@ -/mob/eye/Life() +/mob/observer/eye/Life() ..() // If we lost our client, reset the list of visible chunks so they update properly on return if(owner == src && !client) diff --git a/code/modules/mob/freelook/mask/eye.dm b/code/modules/mob/freelook/mask/eye.dm index a0a99603223..b3abb922abd 100644 --- a/code/modules/mob/freelook/mask/eye.dm +++ b/code/modules/mob/freelook/mask/eye.dm @@ -3,11 +3,11 @@ // A mob that a cultists controls to look around the station with. // It streams chunks as it moves around, which will show it what the cultist can and cannot see. -/mob/eye/maskEye +/mob/observer/eye/maskEye name = "Eye of Nar-Sie" acceleration = 0 owner_follows_eye = 1 -/mob/eye/maskEye/New() +/mob/observer/eye/maskEye/New() ..() visualnet = cultnet diff --git a/code/modules/mob/freelook/update_triggers.dm b/code/modules/mob/freelook/update_triggers.dm index 405e4bdd9e5..8408083ba8b 100644 --- a/code/modules/mob/freelook/update_triggers.dm +++ b/code/modules/mob/freelook/update_triggers.dm @@ -29,6 +29,7 @@ ..() /obj/structure/New() + ..() updateVisibility(src) // EFFECTS diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 38cb5bb3d2a..24ad252eda1 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -36,7 +36,7 @@ // Updates what the aiEye can see. It is recommended you use this when the aiEye moves or it's location is set. -/datum/visualnet/proc/visibility(mob/eye/eye) +/datum/visualnet/proc/visibility(mob/observer/eye/eye) // 0xf = 15 var/x1 = max(0, eye.x - 16) & ~0xf var/y1 = max(0, eye.y - 16) & ~0xf diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index f925c32b790..fabca030494 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -4,14 +4,14 @@ if(!client) return - if(speaker && !speaker.client && istype(src,/mob/dead/observer) && client.prefs.toggles & CHAT_GHOSTEARS && !speaker in view(src)) + if(speaker && !speaker.client && istype(src,/mob/observer/dead) && client.prefs.toggles & CHAT_GHOSTEARS && !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 //make sure the air can transmit speech - hearer's side var/turf/T = get_turf(src) - if ((T) && (!(istype(src, /mob/dead/observer)))) //Ghosts can hear even in vacuum. + if ((T) && (!(istype(src, /mob/observer/dead)))) //Ghosts can hear even in vacuum. var/datum/gas_mixture/environment = T.return_air() var/pressure = (environment)? environment.return_pressure() : 0 if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1) @@ -50,7 +50,7 @@ message = "[message]" var/track = null - if(istype(src, /mob/dead/observer)) + if(istype(src, /mob/observer/dead)) if(italics && client.prefs.toggles & CHAT_GHOSTRADIO) return if(speaker_name != speaker.real_name && speaker.real_name) @@ -177,7 +177,7 @@ else track = "[speaker_name] ([jobname])" - if(istype(src, /mob/dead/observer)) + if(istype(src, /mob/observer/dead)) if(speaker_name != speaker.real_name && !isAI(speaker)) //Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs. speaker_name = "[speaker.real_name] ([speaker_name])" track = "[speaker_name] ([ghost_follow_link(speaker, src)])" @@ -199,7 +199,7 @@ /mob/proc/on_hear_radio(part_a, speaker_name, track, part_b, formatted) src << "[part_a][speaker_name][part_b][formatted]" -/mob/dead/observer/on_hear_radio(part_a, speaker_name, track, part_b, formatted) +/mob/observer/dead/on_hear_radio(part_a, speaker_name, track, part_b, formatted) src << "[part_a][track][part_b][formatted]" /mob/living/silicon/on_hear_radio(part_a, speaker_name, track, part_b, formatted) @@ -230,7 +230,7 @@ var/heard = "" if(prob(15)) var/list/punctuation = list(",", "!", ".", ";", "?") - var/list/messages = text2list(message, " ") + var/list/messages = splittext(message, " ") var/R = rand(1, messages.len) var/heardword = messages[R] if(copytext(heardword,1, 1) in punctuation) diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index a0f655d2a68..ac63e4e5825 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -9,7 +9,6 @@ var/list/holder_mob_icon_cache = list() show_messages = 1 sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi', "Teshari" = 'icons/mob/species/seromi/head.dmi' ) diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index c8474871a75..cc0a1d2016e 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -114,7 +114,7 @@ /mob/new_player/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) return -/mob/dead/observer/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) +/mob/observer/dead/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) if(speaker.name == speaker_name || antagHUD) src << "[language.name], [speaker_name] ([ghost_follow_link(speaker, src)]) [message]" else diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm index 308bf0a7c8c..562c5789865 100644 --- a/code/modules/mob/language/outsider.dm +++ b/code/modules/mob/language/outsider.dm @@ -1,34 +1,3 @@ -/datum/language/xenocommon - name = "Xenomorph" - colour = "alien" - desc = "The common tongue of the xenomorphs." - speech_verb = "hisses" - ask_verb = "hisses" - exclaim_verb = "hisses" - key = "4" - flags = RESTRICTED - syllables = list("sss","sSs","SSS") - -/datum/language/xenos - name = "Hivemind" - desc = "Xenomorphs have the strange ability to commune over a psychic hivemind." - speech_verb = "hisses" - ask_verb = "hisses" - exclaim_verb = "hisses" - colour = "alien" - key = "a" - flags = RESTRICTED | HIVEMIND - -/datum/language/xenos/check_special_condition(var/mob/other) - - var/mob/living/carbon/M = other - if(!istype(M)) - return 1 - if(locate(/obj/item/organ/internal/xenos/hivenode) in M.internal_organs) - return 1 - - return 0 - /datum/language/ling name = "Changeling" desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance." @@ -68,21 +37,6 @@ speaker_mask = B.truename ..(speaker,message,speaker_mask) -/datum/language/vox - name = "Vox-pidgin" - desc = "The common tongue of the various Vox ships making up the Shoal. It sounds like chaotic shrieking to everyone else." - speech_verb = "shrieks" - ask_verb = "creels" - exclaim_verb = "SHRIEKS" - colour = "vox" - key = "5" - flags = WHITELISTED - syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","chi","cha","kah", \ - "SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") - -/datum/language/vox/get_random_name() - return ..(FEMALE,1,6) - /datum/language/cultcommon name = "Cult" desc = "The chants of the occult, the incomprehensible." diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 196d48a9449..7f9c832e849 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -92,7 +92,7 @@ . += pick(map[min_char]) message = copytext(message, min_index + 1) - return list2text(.) + return jointext(., null) #undef AUTOHISS_OFF #undef AUTOHISS_BASIC diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 4505c666fdd..cd2dbb8642d 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -29,6 +29,8 @@ access_scanner.req_access = req_access.Copy() access_scanner.req_one_access = req_one_access.Copy() + turn_on() + /mob/living/bot/Life() ..() if(health <= 0) @@ -125,3 +127,70 @@ /mob/living/bot/attack_throat() return + +/******************************************************************/ +// Navigation procs +// Used for A-star pathfinding + + +// Returns the surrounding cardinal turfs with open links +// Including through doors openable with the ID +/turf/proc/CardinalTurfsWithAccess(var/obj/item/weapon/card/id/ID) + var/L[] = new() + + // for(var/turf/simulated/t in oview(src,1)) + + for(var/d in cardinal) + var/turf/simulated/T = get_step(src, d) + if(istype(T) && !T.density) + if(!LinkBlockedWithAccess(src, T, ID)) + L.Add(T) + return L + + +// Returns true if a link between A and B is blocked +// Movement through doors allowed if ID has access +/proc/LinkBlockedWithAccess(turf/A, turf/B, obj/item/weapon/card/id/ID) + + if(A == null || B == null) return 1 + var/adir = get_dir(A,B) + var/rdir = get_dir(B,A) + if((adir & (NORTH|SOUTH)) && (adir & (EAST|WEST))) // diagonal + var/iStep = get_step(A,adir&(NORTH|SOUTH)) + if(!LinkBlockedWithAccess(A,iStep, ID) && !LinkBlockedWithAccess(iStep,B,ID)) + return 0 + + var/pStep = get_step(A,adir&(EAST|WEST)) + if(!LinkBlockedWithAccess(A,pStep,ID) && !LinkBlockedWithAccess(pStep,B,ID)) + return 0 + return 1 + + if(DirBlockedWithAccess(A,adir, ID)) + return 1 + + if(DirBlockedWithAccess(B,rdir, ID)) + return 1 + + for(var/obj/O in B) + if(O.density && !istype(O, /obj/machinery/door) && !(O.flags & ON_BORDER)) + return 1 + + return 0 + +// Returns true if direction is blocked from loc +// Checks doors against access with given ID +/proc/DirBlockedWithAccess(turf/loc,var/dir,var/obj/item/weapon/card/id/ID) + for(var/obj/structure/window/D in loc) + if(!D.density) continue + if(D.dir == SOUTHWEST) return 1 + if(D.dir == dir) return 1 + + for(var/obj/machinery/door/D in loc) + if(!D.density) continue + if(istype(D, /obj/machinery/door/window)) + if( dir & D.dir ) return !D.check_access(ID) + + //if((dir & SOUTH) && (D.dir & (EAST|WEST))) return !D.check_access(ID) + //if((dir & EAST ) && (D.dir & (NORTH|SOUTH))) return !D.check_access(ID) + else return !D.check_access(ID) // it's a real, air blocking door + return 0 diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm new file mode 100644 index 00000000000..a4ede33ab14 --- /dev/null +++ b/code/modules/mob/living/bot/mulebot.dm @@ -0,0 +1,438 @@ +#define MULE_IDLE 0 +#define MULE_MOVING 1 +#define MULE_UNLOAD 2 +#define MULE_LOST 3 +#define MULE_CALC_MIN 4 +#define MULE_CALC_MAX 10 +#define MULE_PATH_DONE 11 +// IF YOU CHANGE THOSE, UPDATE THEM IN pda.tmpl TOO + +/mob/living/bot/mulebot + name = "Mulebot" + desc = "A Multiple Utility Load Effector bot." + icon_state = "mulebot0" + anchored = 1 + density = 1 + health = 150 + maxHealth = 150 + mob_bump_flag = HEAVY + + 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/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 + +/mob/living/bot/mulebot/New() + ..() + + var/turf/T = get_turf(loc) + var/obj/machinery/navbeacon/N = locate() in T + if(N) + home = T + homeName = N.location + else + homeName = "Unset" + + suffix = num2text(++amount) // Starts from 1 + + name = "Mulebot #[suffix]" + +/mob/living/bot/mulebot/MouseDrop_T(var/atom/movable/C, var/mob/user) + if(user.stat) + return + + if(!istype(C) || C.anchored || get_dist(user, src) > 1 || get_dist(src, C) > 1 ) + return + + load(C) + +/mob/living/bot/mulebot/attack_hand(var/mob/user) + interact(user) + +/mob/living/bot/mulebot/proc/interact(var/mob/user) + var/dat + dat += "Multiple Utility Load Effector Mk. III

" + dat += "ID: [suffix]
" + 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) + dat += "
Controls are locked" + else + dat += "
Controls are unlocked

" + + if(!locked || issilicon(user)) + dat += "Toggle power
" + dat += "Stop
" + dat += "Proceed
" + dat += "Return to home
" + dat += "Set destination
" + dat += "Set home
" + dat += "Toggle auto return home ([auto_return ? "On" : "Off"])
" + dat += "Toggle non-standard cargo ([crates_only ? "Off" : "On"])
" + + if(load) + dat += "Unload now
" + dat += "
The maintenance hatch is closed.
" + + else + if(!issilicon(user)) + dat += "The maintenance hatch is open.

" + + dat += "Toggle safety ([safety ? "On" : "Off - DANGER"])
" + else + dat += "The bot is in maintenance mode and cannot be controlled.
" + + user << browse("Mulebot [suffix ? "([suffix])" : ""][dat]", "window=mulebot;size=350x500") + onclose(user, "mulebot") + return + +/mob/living/bot/mulebot/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + add_fingerprint(usr) + switch(href_list["op"]) + if("power") + if(on) + turn_off() + else + turn_on() + visible_message("[usr] switches [on ? "on" : "off"] [src].") + + if("stop") + obeyCommand("Stop") + + if("go") + obeyCommand("GoTD") + + if("home") + obeyCommand("Home") + + if("destination") + obeyCommand("SetD") + + if("sethome") + var/new_dest + var/list/beaconlist = new() + for(var/obj/machinery/navbeacon/N in navbeacons) + beaconlist.Add(N.location) + beaconlist[N.location] = N + if(beaconlist.len) + new_dest = input("Select new home tag", "Mulebot [suffix ? "([suffix])" : ""]", null) in null|beaconlist + else + alert("No destination beacons available.") + if(new_dest) + home = get_turf(beaconlist[new_dest]) + homeName = new_dest + + if("unload") + unload() + + if("autoret") + auto_return = !auto_return + + if("cargotypes") + crates_only = !crates_only + + if("safety") + safety = !safety + + interact(usr) + +/mob/living/bot/mulebot/attackby(var/obj/item/O, var/mob/user) + ..() + update_icons() + +/mob/living/bot/mulebot/proc/obeyCommand(var/command) + switch(command) + if("Home") + mode = MULE_IDLE + target = home + targetName = "Home" + mode = MULE_LOST + if("SetD") + var/new_dest + var/list/beaconlist = new() + for(var/obj/machinery/navbeacon/N in navbeacons) + beaconlist.Add(N.location) + beaconlist[N.location] = N + if(beaconlist.len) + new_dest = input("Select new destination tag", "Mulebot [suffix ? "([suffix])" : ""]") in null|beaconlist + else + alert("No destination beacons available.") + if(new_dest) + target = get_turf(beaconlist[new_dest]) + targetName = new_dest + if("GoTD") + if(mode == MULE_IDLE) + mode = MULE_LOST + if("Stop") + mode = MULE_IDLE + +/mob/living/bot/mulebot/emag_act(var/remaining_charges, var/user) + locked = !locked + user << "You [locked ? "lock" : "unlock"] the mulebot's controls!" + flick("mulebot-emagged", src) + playsound(loc, 'sound/effects/sparks1.ogg', 100, 0) + return 1 + +/mob/living/bot/mulebot/update_icons() + if(open) + icon_state = "mulebot-hatch" + return + if(mode == MULE_MOVING || mode == MULE_UNLOAD) + icon_state = "mulebot1" + return + icon_state = "mulebot0" + +/mob/living/bot/mulebot/Life() + ..() + + if(busy) + return + + if(!safety && prob(1)) + flick("mulebot-emagged", src) + + 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 + + update_icons() + return + if(MULE_UNLOAD) + unload(dir) + + 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/Bump(var/mob/living/M) + if(!safety && istype(M)) + visible_message("[src] knocks over [M]!") + M.Stun(8) + 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]!") + playsound(loc, 'sound/effects/splat.ogg', 50, 1) + + var/damage = rand(5, 7) + H.apply_damage(2 * damage, BRUTE, BP_HEAD) + H.apply_damage(2 * damage, BRUTE, BP_TORSO) + H.apply_damage(0.5 * damage, BRUTE, BP_L_LEG) + H.apply_damage(0.5 * damage, BRUTE, BP_R_LEG) + H.apply_damage(0.5 * damage, BRUTE, BP_L_ARM) + H.apply_damage(0.5 * damage, BRUTE, BP_R_ARM) + + blood_splatter(src, H, 1) + ..() + +/mob/living/bot/mulebot/relaymove(var/mob/user, var/direction) + if(load == user) + unload(direction) + +/mob/living/bot/mulebot/explode() + unload(pick(0, 1, 2, 4, 8)) + + visible_message("[src] blows apart!") + + var/turf/Tsec = get_turf(src) + new /obj/item/device/assembly/prox_sensor(Tsec) + PoolOrNew(/obj/item/stack/rods, Tsec) + PoolOrNew(/obj/item/stack/rods, Tsec) + new /obj/item/stack/cable_coil/cut(Tsec) + + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(3, 1, src) + s.start() + + 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 + + for(var/obj/structure/plasticflaps/P in src.loc)//Takes flaps into account + if(!CanPass(C,P)) + return + + if(crates_only && !istype(C,/obj/structure/closet/crate)) + custom_emote(2, "makes a sighing buzz.") + playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0) + return + + var/obj/structure/closet/crate/crate = C + 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 + sleep(2) + if(C.loc != loc) //To prevent you from going onto more than one bot. + return + C.loc = src + load = C + + C.pixel_y += 9 + if(C.layer < layer) + C.layer = layer + 0.1 + overlays += C + + busy = 0 + +/mob/living/bot/mulebot/proc/unload(var/dirn = 0) + if(!load || busy) + return + + busy = 1 + overlays.Cut() + + load.loc = loc + load.pixel_y -= 9 + load.layer = initial(load.layer) + + if(dirn) + step(load, dirn) + + load = null + + for(var/atom/movable/AM in src) + if(AM == botcard || AM == access_scanner) + continue + + AM.loc = loc + 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/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm deleted file mode 100644 index 4ebf7986b6c..00000000000 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ /dev/null @@ -1,14 +0,0 @@ -/mob/living/carbon/alien/larva - name = "alien larva" - real_name = "alien larva" - adult_form = /mob/living/carbon/human - speak_emote = list("hisses") - icon_state = "larva" - language = "Hivemind" - maxHealth = 25 - health = 25 - -/mob/living/carbon/alien/larva/New() - ..() - add_language("Xenomorph") //Bonus language. - internal_organs |= new /obj/item/organ/internal/xenos/hivenode(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm deleted file mode 100644 index 8d40ef9d5a5..00000000000 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ /dev/null @@ -1,12 +0,0 @@ -//Larvae regenerate health and nutrition from plasma and alien weeds. -/mob/living/carbon/alien/larva/handle_environment(var/datum/gas_mixture/environment) - - if(!environment) return - - var/turf/T = get_turf(src) - if(environment.gas["phoron"] > 0 || (T && locate(/obj/effect/alien/weeds) in T.contents)) - update_progression() - adjustBruteLoss(-1) - adjustFireLoss(-1) - adjustToxLoss(-1) - adjustOxyLoss(-1) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/progression.dm b/code/modules/mob/living/carbon/alien/larva/progression.dm deleted file mode 100644 index 05bab1bfde6..00000000000 --- a/code/modules/mob/living/carbon/alien/larva/progression.dm +++ /dev/null @@ -1,12 +0,0 @@ -/mob/living/carbon/alien/larva/confirm_evolution() - - src << "\blue You are growing into a beautiful alien! It is time to choose a caste." - src << "\blue There are three to choose from:" - src << "Hunters \blue are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves." - src << "Sentinels \blue are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters." - src << "Drones \blue are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen." - var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone") - return alien_caste ? "Xenomorph [alien_caste]" : null - -/mob/living/carbon/alien/larva/show_evolution_blurb() - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index ada10417536..c065cbdc54d 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -23,7 +23,7 @@ spawn(600) reset_search() /obj/item/device/mmi/digital/posibrain/proc/request_player() - for(var/mob/dead/observer/O in player_list) + for(var/mob/observer/dead/O in player_list) if(!O.MayRespawn()) continue if(jobban_isbanned(O, "AI") && jobban_isbanned(O, "Cyborg")) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f22aecce453..0abdc6ef9ad 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -210,7 +210,7 @@ msg += "[T.He] [T.is] small halfling!\n" var/distance = get_dist(usr,src) - if(istype(usr, /mob/dead/observer) || usr.stat == 2) // ghosts can see anything + if(istype(usr, /mob/observer/dead) || usr.stat == 2) // ghosts can see anything distance = 1 if (src.stat) msg += "[T.He] [T.is]n't responding to anything around [T.him] and seems to be asleep.\n" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e3588be99b8..37034b29ca1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -71,10 +71,6 @@ stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) - var/obj/item/organ/internal/xenos/plasmavessel/P = internal_organs_by_name[O_PLASMA] - if(P) - stat(null, "Phoron Stored: [P.stored_plasma]/[P.max_plasma]") - if(back && istype(back,/obj/item/weapon/rig)) var/obj/item/weapon/rig/suit = back var/cell_status = "ERROR" @@ -235,9 +231,9 @@ // called when something steps onto a human // this handles mulebots and vehicles /mob/living/carbon/human/Crossed(var/atom/movable/AM) - if(istype(AM, /obj/machinery/bot/mulebot)) - var/obj/machinery/bot/mulebot/MB = AM - MB.RunOver(src) + if(istype(AM, /mob/living/bot/mulebot)) + var/mob/living/bot/mulebot/MB = AM + MB.runOver(src) if(istype(AM, /obj/vehicle)) var/obj/vehicle/V = AM @@ -620,6 +616,11 @@ var/mob/M = locate(href_list["lookmob"]) src.examinate(M) + if (href_list["clickitem"]) + var/obj/item/I = locate(href_list["clickitem"]) + if(src.client) + src.ClickOn(I) + if (href_list["flavor_change"]) switch(href_list["flavor_change"]) if("done") @@ -841,7 +842,7 @@ target.show_message("\blue You hear a voice that seems to echo around the room: [say]") usr.show_message("\blue You project your mind into [target.real_name]: [say]") log_say("[key_name(usr)] sent a telepathic message to [key_name(target)]: [say]") - for(var/mob/dead/observer/G in world) + for(var/mob/observer/dead/G in world) G.show_message("Telepathic message from [src] to [target]: [say]") /mob/living/carbon/human/proc/remoteobserve() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 22acad9445d..2cb4ad5abf0 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -32,7 +32,8 @@ var/age = 30 //Player's age (pure fluff) var/b_type = "A+" //Player's bloodtype - var/underwear = 1 //Which underwear the player wants + var/underwear_top = 1 //Which underwear the player wants + var/underwear_bottom = 1 var/undershirt = 0 //Which undershirt the player wants. var/socks = 0 //Which socks the player wants. var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 50f46b4bb41..48b668a5015 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -49,116 +49,6 @@ if ((O.client && !( O.blinded ))) O.show_message(text("\red [] [failed ? "tried to tackle" : "has tackled"] down []!", src, T), 1) -/mob/living/carbon/human/proc/leap() - set category = "Abilities" - set name = "Leap" - set desc = "Leap at a target and grab them aggressively." - - if(last_special > world.time) - return - - if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - src << "You cannot leap in your current state." - return - - var/list/choices = list() - for(var/mob/living/M in view(6,src)) - if(!istype(M,/mob/living/silicon)) - choices += M - choices -= src - - var/mob/living/T = input(src,"Who do you wish to leap at?") as null|anything in choices - - if(!T || !src || src.stat) return - - if(get_dist(get_turf(T), get_turf(src)) > 4) return - - if(last_special > world.time) - return - - if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - src << "You cannot leap in your current state." - return - - last_special = world.time + 75 - status_flags |= LEAPING - - src.visible_message("\The [src] leaps at [T]!") - src.throw_at(get_step(get_turf(T),get_turf(src)), 4, 1, src) - playsound(src.loc, 'sound/voice/shriek1.ogg', 50, 1) - - sleep(5) - - if(status_flags & LEAPING) status_flags &= ~LEAPING - - if(!src.Adjacent(T)) - src << "You miss!" - return - - T.Weaken(3) - - // Pariahs are not good at leaping. This is snowflakey, pls fix. - if(species.name == "Vox Pariah") - src.Weaken(5) - return - - var/use_hand = "left" - if(l_hand) - if(r_hand) - src << "You need to have one hand free to grab someone." - return - else - use_hand = "right" - - src.visible_message("\The [src] seizes [T] aggressively!") - - var/obj/item/weapon/grab/G = new(src,T) - if(use_hand == "left") - l_hand = G - else - r_hand = G - - G.state = GRAB_PASSIVE - G.icon_state = "grabbed1" - G.synch() - -/mob/living/carbon/human/proc/gut() - set category = "Abilities" - set name = "Gut" - set desc = "While grabbing someone aggressively, rip their guts out or tear them apart." - - if(last_special > world.time) - return - - if(stat || paralysis || stunned || weakened || lying) - src << "\red You cannot do that in your current state." - return - - var/obj/item/weapon/grab/G = locate() in src - if(!G || !istype(G)) - src << "\red You are not grabbing anyone." - return - - if(G.state < GRAB_AGGRESSIVE) - src << "\red You must have an aggressive grab to gut your prey!" - return - - last_special = world.time + 50 - - visible_message("\The [src] rips viciously at \the [G.affecting]'s body with its claws!") - - if(istype(G.affecting,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = G.affecting - H.apply_damage(50,BRUTE) - if(H.stat == 2) - H.gib() - else - var/mob/living/M = G.affecting - if(!istype(M)) return //wut - M.apply_damage(50,BRUTE) - if(M.stat == 2) - M.gib() - /mob/living/carbon/human/proc/commune() set category = "Abilities" set name = "Commune with creature" @@ -181,7 +71,7 @@ var/mob/M = targets[target] - if(istype(M, /mob/dead/observer) || M.stat == DEAD) + if(istype(M, /mob/observer/dead) || M.stat == DEAD) src << "Not even a [src.species.name] can speak to the dead." return diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index f4172060f97..113377b9332 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -14,10 +14,6 @@ h_style = "Unathi Horns" ..(new_loc, "Unathi") -/mob/living/carbon/human/vox/New(var/new_loc) - h_style = "Short Vox Quills" - ..(new_loc, "Vox") - /mob/living/carbon/human/diona/New(var/new_loc) ..(new_loc, "Diona") diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 614ebe9e92e..47cca0e5cff 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -960,7 +960,7 @@ src << "You're in too much pain to keep going..." src.visible_message("[src] slumps to the ground, too weak to continue fighting.") Paralyse(10) - setHalLoss(99) + setHalLoss(species.total_health - 1) if(paralysis || sleeping) blinded = 1 diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm deleted file mode 100644 index 94da4151016..00000000000 --- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm +++ /dev/null @@ -1,142 +0,0 @@ -/datum/species/vox - name = "Vox" - name_plural = "Vox" - icobase = 'icons/mob/human_races/r_vox.dmi' - deform = 'icons/mob/human_races/r_def_vox.dmi' - default_language = "Vox-pidgin" - language = "Galactic Common" - num_alternate_languages = 1 - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) - rarity_value = 4 - blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \ - scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \ - alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \ - refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \ - smell.

Most humans will never meet a Vox raider, instead learning of this insular species through \ - dealing with their traders and merchants; those that do rarely enjoy the experience." - - speech_sounds = list('sound/voice/shriek1.ogg') - speech_chance = 20 - - warning_low_pressure = 50 - hazard_low_pressure = 0 - - cold_level_1 = 80 - cold_level_2 = 50 - cold_level_3 = 0 - - gluttonous = 2 - - breath_type = "nitrogen" - poison_type = "oxygen" - siemens_coefficient = 0.2 - - flags = NO_SCAN | NO_MINOR_CUT - spawn_flags = CAN_JOIN | IS_WHITELISTED - appearance_flags = HAS_EYE_COLOR - - blood_color = "#2299FC" - flesh_color = "#808D11" - - reagent_tag = IS_VOX - - inherent_verbs = list( - /mob/living/carbon/human/proc/leap - ) - - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/vox), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - - - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_LUNGS = /obj/item/organ/internal/lungs, - O_LIVER = /obj/item/organ/internal/liver, - O_KIDNEYS = /obj/item/organ/internal/kidneys, - O_BRAIN = /obj/item/organ/internal/brain, - O_EYES = /obj/item/organ/internal/eyes, - "stack" = /obj/item/organ/internal/stack/vox - ) - -/datum/species/vox/get_random_name(var/gender) - var/datum/language/species_language = all_languages[default_language] - return species_language.get_random_name(gender) - -/datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H), slot_r_hand) - H.internal = H.back - else - H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_r_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H.back), slot_in_backpack) - H.internal = H.r_hand - H.internals.icon_state = "internal1" - - -/datum/species/vox/get_station_variant() - return "Vox Pariah" - -// Joining as a station vox will give you this template, hence IS_RESTRICTED flag. -/datum/species/vox/pariah - name = "Vox Pariah" - rarity_value = 0.1 - speech_chance = 60 // No volume control. - siemens_coefficient = 0.5 // Ragged scaleless patches. - - warning_low_pressure = (WARNING_LOW_PRESSURE-20) - hazard_low_pressure = (HAZARD_LOW_PRESSURE-10) - total_health = 80 - - cold_level_1 = 130 - cold_level_2 = 100 - cold_level_3 = 60 - - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite) - - // Pariahs have no stack. - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_LUNGS = /obj/item/organ/internal/lungs, - O_LIVER = /obj/item/organ/internal/liver, - O_KIDNEYS = /obj/item/organ/internal/kidneys, - O_BRAIN = /obj/item/organ/internal/pariah_brain, - O_EYES = /obj/item/organ/internal/eyes - ) - flags = IS_RESTRICTED | NO_SCAN | HAS_EYE_COLOR - -// No combat skills for you. -/datum/species/vox/pariah/can_shred(var/mob/living/carbon/human/H, var/ignore_intent) - return 0 - -// Pariahs are really gross. -/datum/species/vox/pariah/handle_environment_special(var/mob/living/carbon/human/H) - if(prob(5)) - var/stink_range = rand(3,5) - for(var/mob/living/M in range(H,stink_range)) - if(M.stat || M == H) - continue - var/mob/living/carbon/human/target = M - if(istype(target)) - if(target.internals) - continue - if(target.head && (target.head.body_parts_covered & FACE) && (target.head.flags & AIRTIGHT)) - continue - if(target.wear_mask && (target.wear_mask.body_parts_covered & FACE) && (target.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)) - continue - M << "A terrible stench emanates from \the [H]." - -/datum/species/vox/pariah/get_bodytype() - return "Vox" diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_embryo.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_embryo.dm deleted file mode 100644 index de601b25924..00000000000 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_embryo.dm +++ /dev/null @@ -1,159 +0,0 @@ -// This is to replace the previous datum/disease/alien_embryo for slightly improved handling and maintainability -// It functions almost identically (see code/datums/diseases/alien_embryo.dm) - -/obj/item/alien_embryo - name = "alien embryo" - desc = "All slimy and yuck." - icon = 'icons/mob/alien.dmi' - icon_state = "larva0_dead" - var/mob/living/affected_mob - var/stage = 0 - -/obj/item/alien_embryo/New() - if(istype(loc, /mob/living)) - affected_mob = loc - processing_objects.Add(src) - spawn(0) - AddInfectionImages(affected_mob) - else - qdel(src) - -/obj/item/alien_embryo/Destroy() - if(affected_mob) - affected_mob.status_flags &= ~(XENO_HOST) - spawn(0) - RemoveInfectionImages(affected_mob) - ..() - -/obj/item/alien_embryo/process() - if(!affected_mob) return - if(loc != affected_mob) - affected_mob.status_flags &= ~(XENO_HOST) - processing_objects.Remove(src) - spawn(0) - RemoveInfectionImages(affected_mob) - affected_mob = null - return - - if(stage < 5 && prob(3)) - stage++ - spawn(0) - RefreshInfectionImage(affected_mob) - - switch(stage) - if(2, 3) - if(prob(1)) - affected_mob.emote("sneeze") - if(prob(1)) - affected_mob.emote("cough") - if(prob(1)) - affected_mob << "\red Your throat feels sore." - if(prob(1)) - affected_mob << "\red Mucous runs down the back of your throat." - if(4) - if(prob(1)) - affected_mob.emote("sneeze") - if(prob(1)) - affected_mob.emote("cough") - if(prob(2)) - affected_mob << "\red Your muscles ache." - if(prob(20)) - affected_mob.take_organ_damage(1) - if(prob(2)) - affected_mob << "\red Your stomach hurts." - if(prob(20)) - affected_mob.adjustToxLoss(1) - affected_mob.updatehealth() - if(5) - affected_mob << "\red You feel something tearing its way out of your stomach..." - affected_mob.adjustToxLoss(10) - affected_mob.updatehealth() - if(prob(50)) - AttemptGrow() - -/obj/item/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1) - var/list/candidates = get_alien_candidates() - var/picked = null - - // To stop clientless larva, we will check that our host has a client - // if we find no ghosts to become the alien. If the host has a client - // he will become the alien but if he doesn't then we will set the stage - // to 2, so we don't do a process heavy check everytime. - - if(candidates.len) - picked = pick(candidates) - else if(affected_mob.client) - picked = affected_mob.key - else - stage = 4 // Let's try again later. - return - - if(affected_mob.lying) - affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_lie") - else - affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_stand") - spawn(6) - var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc) - new_xeno.key = picked - new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention - if(gib_on_success) - affected_mob.gib() - qdel(src) - -/*---------------------------------------- -Proc: RefreshInfectionImage() -Des: Removes all infection images from aliens and places an infection image on all infected mobs for aliens. -----------------------------------------*/ -/obj/item/alien_embryo/proc/RefreshInfectionImage() - - for(var/mob/living/carbon/alien in player_list) - - if(!locate(/obj/item/organ/internal/xenos/hivenode) in alien.internal_organs) - continue - - if(alien.client) - for(var/image/I in alien.client.images) - if(dd_hasprefix_case(I.icon_state, "infected")) - qdel(I) - for(var/mob/living/L in mob_list) - if(iscorgi(L) || iscarbon(L)) - if(L.status_flags & XENO_HOST) - var/I = image('icons/mob/alien.dmi', loc = L, icon_state = "infected[stage]") - alien.client.images += I - -/*---------------------------------------- -Proc: AddInfectionImages(C) -Des: Checks if the passed mob (C) is infected with the alien egg, then gives each alien client an infected image at C. -----------------------------------------*/ -/obj/item/alien_embryo/proc/AddInfectionImages(var/mob/living/C) - if(C) - - for(var/mob/living/carbon/alien in player_list) - - if(!locate(/obj/item/organ/internal/xenos/hivenode) in alien.internal_organs) - continue - - if(alien.client) - if(C.status_flags & XENO_HOST) - var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[stage]") - alien.client.images += I - -/*---------------------------------------- -Proc: RemoveInfectionImage(C) -Des: Removes the alien infection image from all aliens in the world located in passed mob (C). -----------------------------------------*/ - -/obj/item/alien_embryo/proc/RemoveInfectionImages(var/mob/living/C) - - if(C) - - for(var/mob/living/carbon/alien in player_list) - - if(!locate(/obj/item/organ/internal/xenos/hivenode) in alien.internal_organs) - continue - - if(alien.client) - for(var/image/I in alien.client.images) - if(I.loc == C) - if(dd_hasprefix_case(I.icon_state, "infected")) - qdel(I) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm deleted file mode 100644 index 774075f7adc..00000000000 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm +++ /dev/null @@ -1,231 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 - -//TODO: Make these simple_animals - -var/const/MIN_IMPREGNATION_TIME = 100 //time it takes to impregnate someone -var/const/MAX_IMPREGNATION_TIME = 150 - -var/const/MIN_ACTIVE_TIME = 200 //time between being dropped and going idle -var/const/MAX_ACTIVE_TIME = 400 - -/obj/item/clothing/mask/facehugger - name = "alien" - desc = "It has some sort of a tube at the end of its tail." - icon = 'icons/mob/alien.dmi' - icon_state = "facehugger" - item_state = "facehugger" - w_class = 3 //note: can be picked up by aliens unlike most other items of w_class below 4 - flags = PROXMOVE - body_parts_covered = FACE|EYES - throw_range = 5 - - var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case - var/sterile = 0 - var/strength = 5 - var/attached = 0 - -/obj/item/clothing/mask/facehugger/attack_hand(user as mob) - - if((stat == CONSCIOUS && !sterile)) - if(Attach(user)) - return - - ..() - -/obj/item/clothing/mask/facehugger/attack(mob/living/M as mob, mob/user as mob) - ..() - user.drop_from_inventory(src) - Attach(M) - -/obj/item/clothing/mask/facehugger/New() - if(config.aliens_allowed) - ..() - else - qdel(src) - -/obj/item/clothing/mask/facehugger/examine(mob/user) - ..(user) - switch(stat) - if(DEAD,UNCONSCIOUS) - user << "\red \b [src] is not moving." - if(CONSCIOUS) - user << "\red \b [src] seems to be active." - if (sterile) - user << "\red \b It looks like the proboscis has been removed." - return - -/obj/item/clothing/mask/facehugger/attackby(obj/item/I, mob/user) - if(I.force) - user.do_attack_animation(src) - Die() - return - -/obj/item/clothing/mask/facehugger/bullet_act() - Die() - return - -/obj/item/clothing/mask/facehugger/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C+80) - Die() - return - -/obj/item/clothing/mask/facehugger/equipped(mob/M) - ..() - Attach(M) - -/obj/item/clothing/mask/facehugger/Crossed(atom/target) - HasProximity(target) - return - -/obj/item/clothing/mask/facehugger/on_found(mob/finder as mob) - if(stat == CONSCIOUS) - HasProximity(finder) - return 1 - return - -/obj/item/clothing/mask/facehugger/HasProximity(atom/movable/AM as mob|obj) - if(CanHug(AM)) - Attach(AM) - -/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed) - ..() - if(stat == CONSCIOUS) - icon_state = "[initial(icon_state)]_thrown" - spawn(15) - if(icon_state == "[initial(icon_state)]_thrown") - icon_state = "[initial(icon_state)]" - -/obj/item/clothing/mask/facehugger/throw_impact(atom/hit_atom) - ..() - if(stat == CONSCIOUS) - icon_state = "[initial(icon_state)]" - throwing = 0 - GoIdle(30,100) //stunned for a few seconds - allows throwing them to be useful for positioning but not as an offensive action (unless you're setting up a trap) - -/obj/item/clothing/mask/facehugger/proc/Attach(M as mob) - - if((!iscorgi(M) && !iscarbon(M))) - return - - if(attached) - return - - var/mob/living/carbon/C = M - if(istype(C) && locate(/obj/item/organ/internal/xenos/hivenode) in C.internal_organs) - return - - - attached++ - spawn(MAX_IMPREGNATION_TIME) - attached = 0 - - var/mob/living/L = M //just so I don't need to use : - - if(loc == L) return - if(stat != CONSCIOUS) return - if(!sterile) L.take_organ_damage(strength,0) //done here so that even borgs and humans in helmets take damage - - L.visible_message("\red \b [src] leaps at [L]'s face!") - - if(iscarbon(M)) - var/mob/living/carbon/target = L - - if(target.wear_mask) - if(prob(20)) return - var/obj/item/clothing/W = target.wear_mask - if(!W.canremove) return - target.drop_from_inventory(W) - - target.visible_message("\red \b [src] tears [W] off of [target]'s face!") - - target.equip_to_slot(src, slot_wear_mask) - target.contents += src // Monkey sanity check - Snapshot - - if(!sterile) L.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings - else if (iscorgi(M)) - var/mob/living/simple_animal/corgi/corgi = M - src.loc = corgi - corgi.facehugger = src - corgi.wear_mask = src - //C.regenerate_icons() - - GoIdle() //so it doesn't jump the people that tear it off - - spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME)) - Impregnate(L) - - return - -/obj/item/clothing/mask/facehugger/proc/Impregnate(mob/living/target as mob) - if(!target || target.wear_mask != src || target.stat == DEAD) //was taken off or something - return - - if(!sterile) - new /obj/item/alien_embryo(target) - target.status_flags |= XENO_HOST - - target.visible_message("\red \b [src] falls limp after violating [target]'s face!") - - Die() - icon_state = "[initial(icon_state)]_impregnated" - - if(iscorgi(target)) - var/mob/living/simple_animal/corgi/C = target - src.loc = get_turf(C) - C.facehugger = null - else - target.visible_message("\red \b [src] violates [target]'s face!") - return - -/obj/item/clothing/mask/facehugger/proc/GoActive() - if(stat == DEAD || stat == CONSCIOUS) - return - - stat = CONSCIOUS - icon_state = "[initial(icon_state)]" - - return - -/obj/item/clothing/mask/facehugger/proc/GoIdle(var/min_time=MIN_ACTIVE_TIME, var/max_time=MAX_ACTIVE_TIME) - if(stat == DEAD || stat == UNCONSCIOUS) - return - -/* RemoveActiveIndicators() */ - - stat = UNCONSCIOUS - icon_state = "[initial(icon_state)]_inactive" - - spawn(rand(min_time,max_time)) - GoActive() - return - -/obj/item/clothing/mask/facehugger/proc/Die() - if(stat == DEAD) - return - -/* RemoveActiveIndicators() */ - - icon_state = "[initial(icon_state)]_dead" - stat = DEAD - - src.visible_message("\red \b[src] curls up into a ball!") - - return - -/proc/CanHug(var/mob/M) - - if(iscorgi(M)) - return 1 - - if(!iscarbon(M)) - return 0 - - var/mob/living/carbon/C = M - if(istype(C) && locate(/obj/item/organ/internal/xenos/hivenode) in C.internal_organs) - return 0 - - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(H.head && (H.head.body_parts_covered & FACE) && !(H.head.item_flags & FLEXIBLEMATERIAL)) - return 0 - return 1 diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm deleted file mode 100644 index c046c0d8574..00000000000 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ /dev/null @@ -1,222 +0,0 @@ -/proc/alien_queen_exists(var/ignore_self,var/mob/living/carbon/human/self) - for(var/mob/living/carbon/human/Q in living_mob_list) - if(self && ignore_self && self == Q) - continue - if(Q.species.name != "Xenomorph Queen") - continue - if(!Q.key || !Q.client || Q.stat) - continue - return 1 - return 0 - -/mob/living/carbon/human/proc/gain_plasma(var/amount) - - var/obj/item/organ/internal/xenos/plasmavessel/I = internal_organs_by_name[O_PLASMA] - if(!istype(I)) return - - if(amount) - I.stored_plasma += amount - I.stored_plasma = max(0,min(I.stored_plasma,I.max_plasma)) - -/mob/living/carbon/human/proc/check_alien_ability(var/cost,var/needs_foundation,var/needs_organ) - - var/obj/item/organ/internal/xenos/plasmavessel/P = internal_organs_by_name[O_PLASMA] - if(!istype(P)) - src << "Your plasma vessel has been removed!" - return - - if(needs_organ) - var/obj/item/organ/internal/I = internal_organs_by_name[needs_organ] - if(!I) - src << "Your [needs_organ] has been removed!" - return - else if((I.status & ORGAN_CUT_AWAY) || I.is_broken()) - src << "Your [needs_organ] is too damaged to function!" - return - - if(P.stored_plasma < cost) - src << "\red You don't have enough phoron stored to do that." - return 0 - - if(needs_foundation) - var/turf/T = get_turf(src) - var/has_foundation - if(T) - //TODO: Work out the actual conditions this needs. - if(!(istype(T,/turf/space))) - has_foundation = 1 - if(!has_foundation) - src << "\red You need a solid foundation to do that on." - return 0 - - P.stored_plasma -= cost - return 1 - -// Free abilities. -/mob/living/carbon/human/proc/transfer_plasma(mob/living/carbon/human/M as mob in oview()) - set name = "Transfer Plasma" - set desc = "Transfer Plasma to another alien" - set category = "Abilities" - - if (get_dist(src,M) <= 1) - src << "You need to be closer." - return - - var/obj/item/organ/internal/xenos/plasmavessel/I = M.internal_organs_by_name[O_PLASMA] - if(!istype(I)) - src << "Their plasma vessel is missing." - return - - var/amount = input("Amount:", "Transfer Plasma to [M]") as num - if (amount) - amount = abs(round(amount)) - if(check_alien_ability(amount,0,O_PLASMA)) - M.gain_plasma(amount) - M << "[src] has transfered [amount] plasma to you." - src << "You have transferred [amount] plasma to [M]." - return - -// Queen verbs. -/mob/living/carbon/human/proc/lay_egg() - - set name = "Lay Egg (75)" - set desc = "Lay an egg to produce huggers to impregnate prey with." - set category = "Abilities" - - if(!config.aliens_allowed) - src << "You begin to lay an egg, but hesitate. You suspect it isn't allowed." - verbs -= /mob/living/carbon/human/proc/lay_egg - return - - if(locate(/obj/effect/alien/egg) in get_turf(src)) - src << "There's already an egg here." - return - - if(check_alien_ability(75,1,O_EGG)) - visible_message("[src] has laid an egg!") - new /obj/effect/alien/egg(loc) - - return - -// Drone verbs. -/mob/living/carbon/human/proc/evolve() - set name = "Evolve (500)" - set desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time." - set category = "Abilities" - - if(alien_queen_exists()) - src << "We already have an active queen." - return - - if(check_alien_ability(500)) - visible_message("[src] begins to twist and contort!", "You begin to evolve!") - src.set_species("Xenomorph Queen") - - return - -/mob/living/carbon/human/proc/plant() - set name = "Plant Weeds (50)" - set desc = "Plants some alien weeds" - set category = "Abilities" - - if(check_alien_ability(50,1,O_RESIN)) - visible_message("[src] has planted some alien weeds!") - new /obj/effect/alien/weeds/node(loc) - return - -/mob/living/carbon/human/proc/corrosive_acid(O as obj|turf in oview(1)) //If they right click to corrode, an error will flash if its an invalid target./N - set name = "Corrosive Acid (200)" - set desc = "Drench an object in acid, destroying it over time." - set category = "Abilities" - - if(!O in oview(1)) - src << "[O] is too far away." - return - - // OBJ CHECK - var/cannot_melt - if(isobj(O)) - var/obj/I = O - if(I.unacidable) - cannot_melt = 1 - else - if(istype(O, /turf/simulated/wall)) - var/turf/simulated/wall/W = O - if(W.material.flags & MATERIAL_UNMELTABLE) - cannot_melt = 1 - else if(istype(O, /turf/simulated/floor)) - var/turf/simulated/floor/F = O - if(F.flooring && (F.flooring.flags & TURF_ACID_IMMUNE)) - cannot_melt = 1 - - if(cannot_melt) - src << "You cannot dissolve this object." - return - - if(check_alien_ability(200,0,O_ACID)) - new /obj/effect/alien/acid(get_turf(O), O) - visible_message("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!") - - return - -/mob/living/carbon/human/proc/neurotoxin(mob/target as mob in oview()) - set name = "Spit Neurotoxin (50)" - set desc = "Spits neurotoxin at someone, paralyzing them for a short time if they are not wearing protective gear." - set category = "Abilities" - - if(!check_alien_ability(50,0,O_ACID)) - return - - if(stat || paralysis || stunned || weakened || lying || restrained() || buckled) - src << "You cannot spit neurotoxin in your current state." - return - - visible_message("[src] spits neurotoxin at [target]!", "You spit neurotoxin at [target].") - - //I'm not motivated enough to revise this. Prjectile code in general needs update. - // Maybe change this to use throw_at? ~ Z - var/turf/T = loc - var/turf/U = (istype(target, /atom/movable) ? target.loc : target) - - if(!U || !T) - return - while(U && !istype(U,/turf)) - U = U.loc - if(!istype(T, /turf)) - return - if (U == T) - usr.bullet_act(new /obj/item/projectile/energy/neurotoxin(usr.loc), get_organ_target()) - return - if(!istype(U, /turf)) - return - - var/obj/item/projectile/energy/neurotoxin/A = new /obj/item/projectile/energy/neurotoxin(usr.loc) - A.current = U - A.yo = U.y - T.y - A.xo = U.x - T.x - A.process() - return - -/mob/living/carbon/human/proc/resin() // -- TLE - set name = "Secrete Resin (75)" - set desc = "Secrete tough malleable resin." - set category = "Abilities" - - var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin door","resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist - if(!choice) - return - - if(!check_alien_ability(75,1,O_RESIN)) - return - - visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].") - switch(choice) - if("resin door") - new /obj/structure/simple_door/resin(loc) - if("resin wall") - new /obj/effect/alien/resin/wall(loc) - if("resin membrane") - new /obj/effect/alien/resin/membrane(loc) - if("resin nest") - new /obj/structure/bed/nest(loc) - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm deleted file mode 100644 index 4425d23b7bc..00000000000 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ /dev/null @@ -1,326 +0,0 @@ -//Stand-in until this is made more lore-friendly. -/datum/species/xenos - name = "Xenomorph" - name_plural = "Xenomorphs" - - default_language = "Xenomorph" - language = "Hivemind" - unarmed_types = list(/datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong) - hud_type = /datum/hud_data/alien - rarity_value = 3 - - has_fine_manipulation = 0 - siemens_coefficient = 0 - gluttonous = 3 - - brute_mod = 0.5 // Hardened carapace. - burn_mod = 2 // Weak to fire. - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - flags = NO_SCAN | NO_PAIN | NO_SLIP | NO_POISON | NO_MINOR_CUT - spawn_flags = IS_RESTRICTED - - reagent_tag = IS_XENOS - - blood_color = "#05EE05" - flesh_color = "#282846" - gibbed_anim = "gibbed-a" - dusted_anim = "dust-a" - death_message = "lets out a waning guttural screech, green blood bubbling from its maw." - death_sound = 'sound/voice/hiss6.ogg' - - speech_sounds = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') - speech_chance = 100 - - breath_type = null - poison_type = null - - vision_flags = SEE_SELF|SEE_MOBS - - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_BRAIN = /obj/item/organ/internal/brain/xeno, - O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel, - O_HIVE = /obj/item/organ/internal/xenos/hivenode, - O_NUTRIENT = /obj/item/organ/internal/diona/nutrients - ) - - bump_flag = ALIEN - swap_flags = ~HEAVY - push_flags = (~HEAVY) ^ ROBOT - - var/alien_number = 0 - var/caste_name = "creature" // Used to update alien name. - var/weeds_heal_rate = 1 // Health regen on weeds. - var/weeds_plasma_rate = 5 // Plasma regen on weeds. - - has_limbs = list( - BP_TORSO = list("path" = /obj/item/organ/external/chest), - BP_GROIN = list("path" = /obj/item/organ/external/groin), - BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes), - BP_L_ARM = list("path" = /obj/item/organ/external/arm), - BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), - BP_L_LEG = list("path" = /obj/item/organ/external/leg), - BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), - BP_L_HAND = list("path" = /obj/item/organ/external/hand), - BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), - BP_L_FOOT = list("path" = /obj/item/organ/external/foot), - BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) - ) - -/datum/species/xenos/get_bodytype() - return "Xenomorph" - -/datum/species/xenos/get_random_name() - return "alien [caste_name] ([alien_number])" - -/datum/species/xenos/can_understand(var/mob/other) - - if(istype(other,/mob/living/carbon/alien/larva)) - return 1 - - return 0 - -/datum/species/xenos/hug(var/mob/living/carbon/human/H,var/mob/living/target) - H.visible_message("[H] caresses [target] with its scythe-like arm.", \ - "You caress [target] with your scythe-like arm.") - -/datum/species/xenos/handle_post_spawn(var/mob/living/carbon/human/H) - - if(H.mind) - H.mind.assigned_role = "Alien" - H.mind.special_role = "Alien" - - alien_number++ //Keep track of how many aliens we've had so far. - H.real_name = "alien [caste_name] ([alien_number])" - H.name = H.real_name - - ..() - -/datum/species/xenos/handle_environment_special(var/mob/living/carbon/human/H) - - var/turf/T = H.loc - if(!T) return - var/datum/gas_mixture/environment = T.return_air() - if(!environment) return - - if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T) - if(!regenerate(H)) - var/obj/item/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name[O_PLASMA] - P.stored_plasma += weeds_plasma_rate - P.stored_plasma = min(max(P.stored_plasma,0),P.max_plasma) - ..() - -/datum/species/xenos/proc/regenerate(var/mob/living/carbon/human/H) - var/heal_rate = weeds_heal_rate - var/mend_prob = 10 - if (!H.resting) - heal_rate = weeds_heal_rate / 3 - mend_prob = 1 - - //first heal damages - if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) - H.adjustBruteLoss(-heal_rate) - H.adjustFireLoss(-heal_rate) - H.adjustOxyLoss(-heal_rate) - H.adjustToxLoss(-heal_rate) - if (prob(5)) - H << "You feel a soothing sensation come over you..." - return 1 - - //next internal organs - for(var/obj/item/organ/I in H.internal_organs) - if(I.damage > 0) - I.damage = max(I.damage - heal_rate, 0) - if (prob(5)) - H << "You feel a soothing sensation within your [I.parent_organ]..." - return 1 - - //next mend broken bones, approx 10 ticks each - for(var/obj/item/organ/external/E in H.bad_external_organs) - if (E.status & ORGAN_BROKEN) - if (prob(mend_prob)) - if (E.mend_fracture()) - H << "You feel something mend itself inside your [E.name]." - return 1 - - return 0 - -/datum/species/xenos/handle_login_special(var/mob/living/carbon/human/H) - H.AddInfectionImages() - ..() - -/datum/species/xenos/handle_logout_special(var/mob/living/carbon/human/H) - H.RemoveInfectionImages() - ..() - -/datum/species/xenos/drone - name = "Xenomorph Drone" - caste_name = "drone" - weeds_plasma_rate = 15 - slowdown = 1 - tail = "xenos_drone_tail" - rarity_value = 5 - - icobase = 'icons/mob/human_races/xenos/r_xenos_drone.dmi' - deform = 'icons/mob/human_races/xenos/r_xenos_drone.dmi' - - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_BRAIN = /obj/item/organ/internal/brain/xeno, - O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/queen, - O_ACID = /obj/item/organ/internal/xenos/acidgland, - O_HIVE = /obj/item/organ/internal/xenos/hivenode, - O_RESIN = /obj/item/organ/internal/xenos/resinspinner, - O_NUTRIENT = /obj/item/organ/internal/diona/nutrients - ) - - inherent_verbs = list( - /mob/living/proc/ventcrawl, - /mob/living/carbon/human/proc/regurgitate, - /mob/living/carbon/human/proc/plant, - /mob/living/carbon/human/proc/transfer_plasma, - /mob/living/carbon/human/proc/evolve, - /mob/living/carbon/human/proc/resin, - /mob/living/carbon/human/proc/corrosive_acid - ) - -/datum/species/xenos/drone/handle_post_spawn(var/mob/living/carbon/human/H) - - var/mob/living/carbon/human/A = H - if(!istype(A)) - return ..() - ..() - -/datum/species/xenos/hunter - - name = "Xenomorph Hunter" - weeds_plasma_rate = 5 - caste_name = "hunter" - slowdown = -2 - total_health = 150 - tail = "xenos_hunter_tail" - - icobase = 'icons/mob/human_races/xenos/r_xenos_hunter.dmi' - deform = 'icons/mob/human_races/xenos/r_xenos_hunter.dmi' - - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_BRAIN = /obj/item/organ/internal/brain/xeno, - O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/hunter, - O_HIVE = /obj/item/organ/internal/xenos/hivenode, - O_NUTRIENT = /obj/item/organ/internal/diona/nutrients - ) - - inherent_verbs = list( - /mob/living/proc/ventcrawl, - /mob/living/carbon/human/proc/tackle, - /mob/living/carbon/human/proc/gut, - /mob/living/carbon/human/proc/leap, - /mob/living/carbon/human/proc/psychic_whisper, - /mob/living/carbon/human/proc/regurgitate - ) - -/datum/species/xenos/sentinel - name = "Xenomorph Sentinel" - weeds_plasma_rate = 10 - caste_name = "sentinel" - slowdown = 0 - total_health = 125 - tail = "xenos_sentinel_tail" - - icobase = 'icons/mob/human_races/xenos/r_xenos_sentinel.dmi' - deform = 'icons/mob/human_races/xenos/r_xenos_sentinel.dmi' - - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_BRAIN = /obj/item/organ/internal/brain/xeno, - O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/sentinel, - O_ACID = /obj/item/organ/internal/xenos/acidgland, - O_HIVE = /obj/item/organ/internal/xenos/hivenode, - O_NUTRIENT = /obj/item/organ/internal/diona/nutrients - ) - - inherent_verbs = list( - /mob/living/proc/ventcrawl, - /mob/living/carbon/human/proc/tackle, - /mob/living/carbon/human/proc/regurgitate, - /mob/living/carbon/human/proc/transfer_plasma, - /mob/living/carbon/human/proc/corrosive_acid, - /mob/living/carbon/human/proc/neurotoxin - ) - -/datum/species/xenos/queen - - name = "Xenomorph Queen" - total_health = 250 - weeds_heal_rate = 5 - weeds_plasma_rate = 20 - caste_name = "queen" - slowdown = 4 - tail = "xenos_queen_tail" - rarity_value = 10 - - icobase = 'icons/mob/human_races/xenos/r_xenos_queen.dmi' - deform = 'icons/mob/human_races/xenos/r_xenos_queen.dmi' - - has_organ = list( - O_HEART = /obj/item/organ/internal/heart, - O_BRAIN = /obj/item/organ/internal/brain/xeno, - O_EGG = /obj/item/organ/internal/xenos/eggsac, - O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/queen, - O_ACID = /obj/item/organ/internal/xenos/acidgland, - O_HIVE = /obj/item/organ/internal/xenos/hivenode, - O_RESIN = /obj/item/organ/internal/xenos/resinspinner, - O_NUTRIENT = /obj/item/organ/internal/diona/nutrients - ) - - inherent_verbs = list( - /mob/living/proc/ventcrawl, - /mob/living/carbon/human/proc/psychic_whisper, - /mob/living/carbon/human/proc/regurgitate, - /mob/living/carbon/human/proc/lay_egg, - /mob/living/carbon/human/proc/plant, - /mob/living/carbon/human/proc/transfer_plasma, - /mob/living/carbon/human/proc/corrosive_acid, - /mob/living/carbon/human/proc/neurotoxin, - /mob/living/carbon/human/proc/resin - ) - -/datum/species/xenos/queen/handle_login_special(var/mob/living/carbon/human/H) - ..() - // Make sure only one official queen exists at any point. - if(!alien_queen_exists(1,H)) - H.real_name = "alien queen ([alien_number])" - H.name = H.real_name - else - H.real_name = "alien princess ([alien_number])" - H.name = H.real_name - -/datum/hud_data/alien - - icon = 'icons/mob/screen1_alien.dmi' - has_a_intent = 1 - has_m_intent = 1 - has_warnings = 1 - has_hands = 1 - has_drop = 1 - has_throw = 1 - has_resist = 1 - has_pressure = 0 - has_nutrition = 0 - has_bodytemp = 0 - has_internals = 0 - - gear = list( - "o_clothing" = list("loc" = ui_belt, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "dir" = SOUTH), - "head" = list("loc" = ui_id, "name" = "Hat", "slot" = slot_head, "state" = "hair"), - "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"), - "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"), - ) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm deleted file mode 100644 index 6cb8a464756..00000000000 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm +++ /dev/null @@ -1,49 +0,0 @@ -proc/create_new_xenomorph(var/alien_caste,var/target) - - target = get_turf(target) - if(!target || !alien_caste) return - - var/mob/living/carbon/human/new_alien = new(target) - new_alien.set_species("Xenomorph [alien_caste]") - return new_alien - -/mob/living/carbon/human/xdrone/New(var/new_loc) - h_style = "Bald" - ..(new_loc, "Xenomorph Drone") - -/mob/living/carbon/human/xsentinel/New(var/new_loc) - h_style = "Bald" - ..(new_loc, "Xenomorph Sentinel") - -/mob/living/carbon/human/xhunter/New(var/new_loc) - h_style = "Bald" - ..(new_loc, "Xenomorph Hunter") - -/mob/living/carbon/human/xqueen/New(var/new_loc) - h_style = "Bald" - ..(new_loc, "Xenomorph Queen") - -// I feel like we should generalize/condense down all the various icon-rendering antag procs. -/*---------------------------------------- -Proc: AddInfectionImages() -Des: Gives the client of the alien an image on each infected mob. -----------------------------------------*/ -/mob/living/carbon/human/proc/AddInfectionImages() - if (client) - for (var/mob/living/C in mob_list) - if(C.status_flags & XENO_HOST) - var/obj/item/alien_embryo/A = locate() in C - var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]") - client.images += I - return - -/*---------------------------------------- -Proc: RemoveInfectionImages() -Des: Removes all infected images from the alien. -----------------------------------------*/ -/mob/living/carbon/human/proc/RemoveInfectionImages() - if (client) - for(var/image/I in client.images) - if(dd_hasprefix_case(I.icon_state, "infected")) - qdel(I) - return diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 998b7db9780..6d5c3a56234 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -320,8 +320,10 @@ var/global/list/damage_icon_parts = list() stand_icon.Blend(base_icon,ICON_OVERLAY) //Underwear - if(underwear && species.appearance_flags & HAS_UNDERWEAR) - stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear), ICON_OVERLAY) + if(underwear_top && species.appearance_flags & HAS_UNDERWEAR) + stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear_top), ICON_OVERLAY) + if(underwear_bottom && species.appearance_flags & HAS_UNDERWEAR) + stand_icon.Blend(new /icon('icons/mob/human.dmi', underwear_bottom), ICON_OVERLAY) if(undershirt && species.appearance_flags & HAS_UNDERWEAR) stand_icon.Blend(new /icon('icons/mob/human.dmi', undershirt), ICON_OVERLAY) diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 4d59841cd68..8817c435288 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -92,7 +92,7 @@ if(voice_sub == "Unknown") if(copytext(message, 1, 2) != "*") - var/list/temp_message = text2list(message, " ") + var/list/temp_message = splittext(message, " ") var/list/pick_list = list() for(var/i = 1, i <= temp_message.len, i++) pick_list += i @@ -101,7 +101,7 @@ if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue temp_message[H] = ninjaspeak(temp_message[H]) pick_list -= H - message = list2text(temp_message, " ") + message = jointext(temp_message, " ") message = replacetext(message, "o", "¤") message = replacetext(message, "p", "þ") message = replacetext(message, "l", "£") diff --git a/code/modules/mob/living/carbon/metroid/items.dm b/code/modules/mob/living/carbon/metroid/items.dm index 0080e0a0fc4..15455f375e8 100644 --- a/code/modules/mob/living/carbon/metroid/items.dm +++ b/code/modules/mob/living/carbon/metroid/items.dm @@ -244,8 +244,8 @@ processing_objects.Add(src) process() - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in src.loc) + var/mob/observer/dead/ghost + for(var/mob/observer/dead/O in src.loc) if(!O.client) continue if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue ghost = O @@ -256,8 +256,8 @@ icon_state = "golem" attack_hand(mob/living/user as mob) - var/mob/dead/observer/ghost - for(var/mob/dead/observer/O in src.loc) + var/mob/observer/dead/ghost + for(var/mob/observer/dead/O in src.loc) if(!O.client) continue if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue ghost = O @@ -273,7 +273,7 @@ proc/announce_to_ghosts() - for(var/mob/dead/observer/G in player_list) + for(var/mob/observer/dead/G in player_list) if(G.client) var/area/A = get_area(src) if(A) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 96f649b1ff1..761ef5110dc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -3,28 +3,33 @@ var/list/ai_list = list() var/list/ai_verbs_default = list( - /mob/living/silicon/ai/proc/ai_announcement, - /mob/living/silicon/ai/proc/ai_call_shuttle, // /mob/living/silicon/ai/proc/ai_recall_shuttle, /mob/living/silicon/ai/proc/ai_emergency_message, - /mob/living/silicon/ai/proc/ai_camera_track, - /mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_goto_location, /mob/living/silicon/ai/proc/ai_remove_location, /mob/living/silicon/ai/proc/ai_hologram_change, /mob/living/silicon/ai/proc/ai_network_change, - /mob/living/silicon/ai/proc/ai_roster, /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_store_location, - /mob/living/silicon/ai/proc/ai_checklaws, /mob/living/silicon/ai/proc/control_integrated_radio, - /mob/living/silicon/ai/proc/core, /mob/living/silicon/ai/proc/pick_icon, /mob/living/silicon/ai/proc/sensor_mode, /mob/living/silicon/ai/proc/show_laws_verb, /mob/living/silicon/ai/proc/toggle_acceleration, + /mob/living/silicon/ai/proc/toggle_hologram_movement, + /mob/living/silicon/ai/proc/toggle_hidden_verbs, +) + +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, + /mob/living/silicon/ai/proc/ai_camera_list, + /mob/living/silicon/ai/proc/ai_roster, + /mob/living/silicon/ai/proc/ai_checklaws, /mob/living/silicon/ai/proc/toggle_camera_light, - /mob/living/silicon/ai/proc/toggle_hologram_movement + /mob/living/silicon/ai/proc/take_image, + /mob/living/silicon/ai/proc/view_images ) //Not sure why this is necessary... @@ -227,11 +232,11 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/setup_icon() var/file = file2text("config/custom_sprites.txt") - var/lines = text2list(file, "\n") + var/lines = splittext(file, "\n") for(var/line in lines) // split & clean up - var/list/Entry = text2list(line, ":") + var/list/Entry = splittext(line, ":") for(var/i = 1 to Entry.len) Entry[i] = trim(Entry[i]) @@ -308,7 +313,7 @@ var/list/ai_verbs_default = list( use_power = 2 /mob/living/silicon/ai/proc/pick_icon() - set category = "AI Commands" + set category = "AI Settings" set name = "Set AI Core Display" if(stat || aiRestorePowerRoutine) return @@ -328,7 +333,6 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/ai_announcement() set category = "AI Commands" set name = "Make Station Announcement" - if(check_unable(AI_CHECK_WIRELESS | AI_CHECK_RADIO)) return @@ -350,7 +354,6 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/ai_call_shuttle() set category = "AI Commands" set name = "Call Emergency Shuttle" - if(check_unable(AI_CHECK_WIRELESS)) return @@ -477,9 +480,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/cancel_camera() set category = "AI Commands" set name = "Cancel Camera View" - - //src.cameraFollow = null - src.view_core() + view_core() //Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm //Adds in /mob/living/silicon/ai/proc/ai_network_change() instead @@ -523,7 +524,7 @@ var/list/ai_verbs_default = list( //End of code by Mord_Sith /mob/living/silicon/ai/proc/ai_statuschange() - set category = "AI Commands" + set category = "AI Settings" set name = "AI Status" if(check_unable(AI_CHECK_WIRELESS)) @@ -536,7 +537,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/ai_hologram_change() set name = "Change Hologram" set desc = "Change the default hologram available to AI to something else." - set category = "AI Commands" + set category = "AI Settings" if(check_unable()) return @@ -581,7 +582,6 @@ var/list/ai_verbs_default = list( set name = "Toggle Camera Light" set desc = "Toggles the light on the camera the AI is looking through." set category = "AI Commands" - if(check_unable()) return @@ -650,7 +650,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/control_integrated_radio() set name = "Radio Settings" set desc = "Allows you to change settings of your radio." - set category = "AI Commands" + set category = "AI Settings" if(check_unable(AI_CHECK_RADIO)) return @@ -661,13 +661,13 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/proc/sensor_mode() set name = "Set Sensor Augmentation" - set category = "AI Commands" + set category = "AI Settings" set desc = "Augment visual feed with internal sensor overlays" toggle_sensor_mode() /mob/living/silicon/ai/proc/toggle_hologram_movement() set name = "Toggle Hologram Movement" - set category = "AI Commands" + set category = "AI Settings" set desc = "Toggles hologram movement based on moving with your virtual eye." hologram_follow = !hologram_follow @@ -724,5 +724,16 @@ var/list/ai_verbs_default = list( if(rig) rig.force_rest(src) +/mob/living/silicon/ai/proc/toggle_hidden_verbs() + set name = "Toggle Hidden Verbs" + set category = "AI Settings" + + if(/mob/living/silicon/ai/proc/ai_announcement in verbs) + src << "Extra verbs toggled off." + verbs -= ai_verbs_hidden + else + src << "Extra verbs toggled on." + verbs |= ai_verbs_hidden + #undef AI_CHECK_WIRELESS #undef AI_CHECK_RADIO diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 58433a0b285..d00ba6d8d75 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -39,6 +39,6 @@ /mob/proc/showLaws(var/mob/living/silicon/S) return -/mob/dead/observer/showLaws(var/mob/living/silicon/S) +/mob/observer/dead/showLaws(var/mob/living/silicon/S) if(antagHUD || is_admin(src)) S.laws.show_laws(src) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index d049e12d757..587daf649e2 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -7,6 +7,9 @@ pass_flags = 1 mob_size = MOB_SMALL + idcard_type = /obj/item/weapon/card/id + var/idaccessible = 0 + var/network = "SS13" var/obj/machinery/camera/current = null @@ -406,3 +409,35 @@ grabber.update_inv_l_hand() grabber.update_inv_r_hand() return H + +/mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/obj/item/weapon/card/id/ID = W.GetID() + if(ID) + if (idaccessible == 1) + switch(alert(user, "Do you wish to add access to [src] or remove access from [src]?",,"Add Access","Remove Access", "Cancel")) + if("Add Access") + idcard.access |= ID.access + user << "You add the access from the [W] to [src]." + return + if("Remove Access") + idcard.access = null + user << "You remove the access from [src]." + return + if("Cancel") + return + else if (istype(W, /obj/item/weapon/card/id) && idaccessible == 0) + user << "[src] is not accepting access modifcations at this time." + return + +/mob/living/silicon/pai/verb/allowmodification() + set name = "Change Access Modifcation Permission" + set category = "pAI Commands" + desc = "Allows people to modify your access or block people from modifying your access." + + if(idaccessible == 0) + idaccessible = 1 + src << "You allow access modifications." + + else + idaccessible = 0 + src << "You block access modfications." diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 91a10bf3e50..ba6a4353bcf 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -233,7 +233,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates for(var/datum/paiCandidate/c in paiController.pai_candidates) if(c.ready) var/found = 0 - for(var/mob/dead/observer/o in player_list) + for(var/mob/observer/dead/o in player_list) if(o.key == c.key && o.MayRespawn()) found = 1 if(found) @@ -346,7 +346,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates /datum/paiController/proc/requestRecruits(var/mob/user) inquirer = user - for(var/mob/dead/observer/O in player_list) + for(var/mob/observer/dead/O in player_list) if(!O.MayRespawn()) continue if(jobban_isbanned(O, "pAI")) diff --git a/code/modules/mob/living/silicon/robot/custom_sprites.dm b/code/modules/mob/living/silicon/robot/custom_sprites.dm index c3632cd62e7..8eb937552ea 100644 --- a/code/modules/mob/living/silicon/robot/custom_sprites.dm +++ b/code/modules/mob/living/silicon/robot/custom_sprites.dm @@ -6,7 +6,7 @@ var/list/robot_custom_icons /hook/startup/proc/load_robot_custom_sprites() var/config_file = file2text("config/custom_sprites.txt") - var/list/lines = text2list(config_file, "\n") + var/list/lines = splittext(config_file, "\n") robot_custom_icons = list() for(var/line in lines) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 5356ca9b21b..8c0ec04900e 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -278,7 +278,7 @@ var/list/mob_hat_cache = list() //Reboot procs. /mob/living/silicon/robot/drone/proc/request_player() - for(var/mob/dead/observer/O in player_list) + for(var/mob/observer/dead/O in player_list) if(jobban_isbanned(O, "Cyborg")) continue if(O.client) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index da1f91e4a35..3f4f43fddc9 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -59,7 +59,7 @@ /obj/machinery/drone_fabricator/examine(mob/user) ..(user) - if(produce_drones && drone_progress >= 100 && istype(user,/mob/dead) && config.allow_drone_spawn && count_drones() < config.max_maint_drones) + if(produce_drones && drone_progress >= 100 && istype(user,/mob/observer/dead) && config.allow_drone_spawn && count_drones() < config.max_maint_drones) user << "
A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone." /obj/machinery/drone_fabricator/proc/create_drone(var/client/player) @@ -70,7 +70,7 @@ if(!produce_drones || !config.allow_drone_spawn || count_drones() >= config.max_maint_drones) return - if(!player || !istype(player.mob,/mob/dead)) + if(!player || !istype(player.mob,/mob/observer/dead)) return announce_ghost_joinleave(player, 0, "They have taken control over a maintenance drone.") @@ -85,7 +85,7 @@ drone_progress = 0 -/mob/dead/verb/join_as_drone() +/mob/observer/dead/verb/join_as_drone() set category = "Ghost" set name = "Join As Drone" diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 8b5f566d15f..a44be642535 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -336,7 +336,7 @@ weaponlock_time = 120 /mob/living/silicon/robot/update_canmove() - if(paralysis || stunned || weakened || buckled || lockcharge || !is_component_functioning("actuator")) canmove = 0 + if(paralysis || stunned || weakened || buckled || lockdown || !is_component_functioning("actuator")) canmove = 0 else canmove = 1 return canmove diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4260f1d365f..ad3445483d5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -81,7 +81,8 @@ var/weapon_lock = 0 var/weaponlock_time = 120 var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default - var/lockcharge //Used when locking down a borg to preserve cell charge + var/lockcharge //Used when looking to see if a borg is locked down. + var/lockdown = 0 //Controls whether or not the borg is actually locked down. var/speed = 0 //Cause sec borgs gotta go fast //No they dont! var/scrambledcodes = 0 // Used to determine if a borg shows up on the robotics console. Setting to one hides them. var/tracking_entities = 0 //The number of known entities currently accessing the internal camera @@ -864,6 +865,7 @@ disconnect_from_ai() lawupdate = 0 lockcharge = 0 + lockdown = 0 canmove = 1 scrambledcodes = 1 //Disconnect it's camera so it's not so easily tracked. @@ -887,6 +889,7 @@ // They stay locked down if their wire is cut. if(wires.LockedCut()) state = 1 + lockdown = state lockcharge = state update_canmove() diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm index ba09c9e5d6c..f59f6444e04 100644 --- a/code/modules/mob/living/simple_animal/borer/borer.dm +++ b/code/modules/mob/living/simple_animal/borer/borer.dm @@ -173,7 +173,7 @@ //Procs for grabbing players. /mob/living/simple_animal/borer/proc/request_player() - for(var/mob/dead/observer/O in player_list) + for(var/mob/observer/dead/O in player_list) if(jobban_isbanned(O, "Borer")) continue if(O.client) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index c4a238f8709..6e827565f78 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -57,7 +57,7 @@ handle_movement_target() if(prob(2)) //spooky - var/mob/dead/observer/spook = locate() in range(src,5) + var/mob/observer/dead/spook = locate() in range(src,5) if(spook) var/turf/T = spook.loc var/list/visible = list() diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 322d08dc9ff..ae172d7b711 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -22,7 +22,6 @@ var/obj/item/inventory_head var/obj/item/inventory_back - var/facehugger //IAN! SQUEEEEEEEEE~ /mob/living/simple_animal/corgi/Ian @@ -124,12 +123,6 @@ if(back_icon) overlays += back_icon - if(facehugger) - if(istype(src, /mob/living/simple_animal/corgi/puppy)) - overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy") - else - overlays += image('icons/mob/mask.dmi',"facehugger_corgi") - return diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index d0a8e09207a..77d52741ae2 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -14,6 +14,18 @@ emote_see = list("jiggles", "bounces in place") var/colour = "grey" +/mob/living/simple_animal/slime/science + name = "Kendrick" + colour = "rainbow" + icon_state = "rainbow baby slime" + icon_living = "rainbow baby slime" + icon_dead = "rainbow baby slime dead" + +/mob/living/simple_animal/slime/science/initialize() + ..() + overlays.Cut() + overlays += "aslime-:33" + /mob/living/simple_animal/adultslime name = "pet slime" desc = "A lovable, domesticated slime." @@ -33,8 +45,7 @@ ..() overlays += "aslime-:33" - -/mob/living/simple_animal/slime/adult/death() +/mob/living/simple_animal/adultslime/death() var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) S1.icon_state = "[src.colour] baby slime" S1.icon_living = "[src.colour] baby slime" diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index a69c288837e..db6eb8f4b7f 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -61,7 +61,7 @@ if(!B.brainmob.key) var/ghost_can_reenter = 0 if(B.brainmob.mind) - for(var/mob/dead/observer/G in player_list) + for(var/mob/observer/dead/G in player_list) if(G.can_reenter_corpse && G.mind == B.brainmob.mind) ghost_can_reenter = 1 break diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index e80c1becffe..33fb8acd248 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -50,13 +50,6 @@ stance = HOSTILE_STANCE_ATTACK T = M break - - if(istype(A, /obj/machinery/bot)) - var/obj/machinery/bot/B = A - if (B.health > 0) - stance = HOSTILE_STANCE_ATTACK - T = B - break return T @@ -101,9 +94,6 @@ var/obj/mecha/M = target_mob M.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) return M - if(istype(target_mob,/obj/machinery/bot)) - var/obj/machinery/bot/B = target_mob - B.attack_generic(src,rand(melee_damage_lower,melee_damage_upper),attacktext) /mob/living/simple_animal/hostile/proc/LoseTarget() stance = HOSTILE_STANCE_IDLE diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a66f6b772cd..06daf72260e 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -359,10 +359,6 @@ var/obj/mecha/M = target_mob if (M.occupant) return (0) - if (istype(target_mob,/obj/machinery/bot)) - var/obj/machinery/bot/B = target_mob - if(B.health > 0) - return (0) return 1 /mob/living/simple_animal/say(var/message) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 01a0e9105ab..abcaf66ae61 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -388,8 +388,8 @@ return else var/deathtime = world.time - src.timeofdeath - if(istype(src,/mob/dead/observer)) - var/mob/dead/observer/G = src + if(istype(src,/mob/observer/dead)) + var/mob/observer/dead/G = src if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted) usr << "\blue Upon using the antagHUD you forfeighted the ability to join the round." return @@ -505,17 +505,6 @@ namecounts[name] = 1 creatures[name] = O - if(istype(O, /obj/machinery/bot)) - var/name = "BOT: [O.name]" - if (names.Find(name)) - namecounts[name]++ - name = "[name] ([namecounts[name]])" - else - names.Add(name) - namecounts[name] = 1 - creatures[name] = O - - for(var/mob/M in sortAtom(mob_list)) var/name = M.name if (names.Find(name)) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 34ee014bea0..871215a519b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -1,10 +1,4 @@ // fun if you want to typecast humans/monkeys/etc without writing long path-filled lines. -/proc/isxenomorph(A) - if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = A - return istype(H.species, /datum/species/xenos) - return 0 - /proc/issmall(A) if(A && istype(A, /mob/living)) var/mob/living/L = A @@ -272,7 +266,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp var/atom/oldeye=M.client.eye var/aiEyeFlag = 0 - if(istype(oldeye, /mob/eye/aiEye)) + if(istype(oldeye, /mob/observer/eye/aiEye)) aiEyeFlag = 1 var/x @@ -405,8 +399,8 @@ proc/is_blind(A) follow = "([ghost_follow_link(subject, M)]) " if(M.stat != DEAD && M.client.holder) follow = "([admin_jump_link(subject, M.client.holder)]) " - var/mob/dead/observer/DM - if(istype(subject, /mob/dead/observer)) + var/mob/observer/dead/DM + if(istype(subject, /mob/observer/dead)) DM = subject if(M.client.holder) // What admins see lname = "[keyname][(DM && DM.anonsay) ? "*" : (DM ? "" : "^")] ([name])" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 26b83e30bb9..ed04bdfd60e 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -15,468 +15,468 @@ anchored = 1 // don't get pushed around - New() - mob_list += src +/mob/new_player/New() + mob_list += src - verb/new_player_panel() - set src = usr - new_player_panel_proc() +/mob/new_player/verb/new_player_panel() + set src = usr + new_player_panel_proc() - proc/new_player_panel_proc() - var/output = "
New Player Options" - output +="
" - output += "

Setup Character

" - - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) - if(ready) - output += "

\[ Ready | Not Ready \]

" - else - output += "

\[ Ready | Not Ready \]

" +/mob/new_player/proc/new_player_panel_proc() + var/output = "
New Player Options" + output +="
" + output += "

Setup Character

" + if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) + if(ready) + output += "

\[ Ready | Not Ready \]

" else - output += "View the Crew Manifest

" - output += "

Join Game!

" + output += "

\[ Ready | Not Ready \]

" - output += "

Observe

" + else + output += "View the Crew Manifest

" + output += "

Join Game!

" - if(!IsGuestKey(src.key)) - establish_db_connection() + output += "

Observe

" - if(dbcon.IsConnected()) - var/isadmin = 0 - if(src.client && src.client.holder) - isadmin = 1 - var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_poll_question WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM erro_poll_vote WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM erro_poll_textreply WHERE ckey = \"[ckey]\")") - query.Execute() - var/newpoll = 0 - while(query.NextRow()) - newpoll = 1 - break + if(!IsGuestKey(src.key)) + establish_db_connection() - if(newpoll) - output += "

Show Player Polls (NEW!)

" - else - output += "

Show Player Polls

" - - output += "
" - - src << browse(output,"window=playersetup;size=210x280;can_close=0") - return - - Stat() - ..() - - if(statpanel("Lobby") && ticker) - if(ticker.hide_mode) - stat("Game Mode:", "Secret") - else - if(ticker.hide_mode == 0) - stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode - - if(ticker.current_state == GAME_STATE_PREGAME) - stat("Time To Start:", "[ticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]") - stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") - totalPlayers = 0 - totalPlayersReady = 0 - for(var/mob/new_player/player in player_list) - stat("[player.key]", (player.ready)?("(Playing)"):(null)) - totalPlayers++ - if(player.ready)totalPlayersReady++ - - Topic(href, href_list[]) - if(!client) return 0 - - if(href_list["show_preferences"]) - client.prefs.ShowChoices(src) - return 1 - - if(href_list["ready"]) - if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started - ready = text2num(href_list["ready"]) - else - ready = 0 - - if(href_list["refresh"]) - src << browse(null, "window=playersetup") //closes the player setup window - new_player_panel_proc() - - if(href_list["observe"]) - - if(alert(src,"Are you sure you wish to observe? You will have to wait 15 minutes before being able to respawn!","Player Setup","Yes","No") == "Yes") - if(!client) return 1 - var/mob/dead/observer/observer = new() - - spawning = 1 - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo - - - observer.started_as_observer = 1 - close_spawn_windows() - var/obj/O = locate("landmark*Observer-Start") - if(istype(O)) - src << "Now teleporting." - observer.loc = O.loc - else - src << "Could not locate an observer spawn point. Use the Teleport verb to jump to the station map." - observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly. - - announce_ghost_joinleave(src) - client.prefs.update_preview_icon() - observer.icon = client.prefs.preview_icon - observer.alpha = 127 - - if(client.prefs.be_random_name) - client.prefs.real_name = random_name(client.prefs.gender) - observer.real_name = client.prefs.real_name - observer.name = observer.real_name - if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. - observer.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing! - observer.key = key - qdel(src) - - return 1 - - if(href_list["late_join"]) - - if(!ticker || ticker.current_state != GAME_STATE_PLAYING) - usr << "\red The round is either not ready, or has already finished..." - return - - if(client.prefs.species != "Human" && !check_rights(R_ADMIN, 0)) - if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist) - src << alert("You are currently not whitelisted to play [client.prefs.species].") - return 0 - - var/datum/species/S = all_species[client.prefs.species] - if(!(S.spawn_flags & IS_WHITELISTED)) - src << alert("Your current species,[client.prefs.species], is not available for play on the station.") - return 0 - - LateChoices() - - if(href_list["manifest"]) - ViewManifest() - - if(href_list["SelectedJob"]) - - if(!config.enter_allowed) - usr << "There is an administrative lock on entering the game!" - return - else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) - usr << "The station is currently exploding. Joining would go poorly." - return - - if(client.prefs.species != "Human") - if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist) - src << alert("You are currently not whitelisted to play [client.prefs.species].") - return 0 - - var/datum/species/S = all_species[client.prefs.species] - if(!(S.spawn_flags & CAN_JOIN)) - src << alert("Your current species, [client.prefs.species], is not available for play on the station.") - return 0 - - AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) - return - - if(href_list["privacy_poll"]) - establish_db_connection() - if(!dbcon.IsConnected()) - return - var/voted = 0 - - //First check if the person has not voted yet. - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM erro_privacy WHERE ckey='[src.ckey]'") + if(dbcon.IsConnected()) + var/isadmin = 0 + if(src.client && src.client.holder) + isadmin = 1 + var/DBQuery/query = dbcon.NewQuery("SELECT id FROM erro_poll_question WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM erro_poll_vote WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM erro_poll_textreply WHERE ckey = \"[ckey]\")") query.Execute() + var/newpoll = 0 while(query.NextRow()) - voted = 1 + newpoll = 1 break - //This is a safety switch, so only valid options pass through - var/option = "UNKNOWN" - switch(href_list["privacy_poll"]) - if("signed") - option = "SIGNED" - if("anonymous") - option = "ANONYMOUS" - if("nostats") - option = "NOSTATS" - if("later") - usr << browse(null,"window=privacypoll") - return - if("abstain") - option = "ABSTAIN" + if(newpoll) + output += "

Show Player Polls (NEW!)

" + else + output += "

Show Player Polls

" - if(option == "UNKNOWN") - return + output += "
" - if(!voted) - var/sql = "INSERT INTO erro_privacy VALUES (null, Now(), '[src.ckey]', '[option]')" - var/DBQuery/query_insert = dbcon.NewQuery(sql) - query_insert.Execute() - usr << "Thank you for your vote!" - usr << browse(null,"window=privacypoll") + src << browse(output,"window=playersetup;size=210x280;can_close=0") + return - if(!ready && href_list["preference"]) - if(client) - client.prefs.process_link(src, href_list) - else if(!href_list["late_join"]) - new_player_panel() +/mob/new_player/Stat() + ..() - if(href_list["showpoll"]) + if(statpanel("Lobby") && ticker) + if(ticker.hide_mode) + stat("Game Mode:", "Secret") + else + if(ticker.hide_mode == 0) + stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode - handle_player_polling() - return + if(ticker.current_state == GAME_STATE_PREGAME) + stat("Time To Start:", "[ticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]") + stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]") + totalPlayers = 0 + totalPlayersReady = 0 + for(var/mob/new_player/player in player_list) + stat("[player.key]", (player.ready)?("(Playing)"):(null)) + totalPlayers++ + if(player.ready)totalPlayersReady++ - if(href_list["pollid"]) +/mob/new_player/Topic(href, href_list[]) + if(!client) return 0 - var/pollid = href_list["pollid"] - if(istext(pollid)) - pollid = text2num(pollid) - if(isnum(pollid)) - src.poll_player(pollid) - return - - if(href_list["votepollid"] && href_list["votetype"]) - var/pollid = text2num(href_list["votepollid"]) - var/votetype = href_list["votetype"] - switch(votetype) - if("OPTION") - var/optionid = text2num(href_list["voteoptionid"]) - vote_on_poll(pollid, optionid) - if("TEXT") - var/replytext = href_list["replytext"] - log_text_poll_reply(pollid, replytext) - if("NUMVAL") - var/id_min = text2num(href_list["minid"]) - var/id_max = text2num(href_list["maxid"]) - - if( (id_max - id_min) > 100 ) //Basic exploit prevention - usr << "The option ID difference is too big. Please contact administration or the database admin." - return - - for(var/optionid = id_min; optionid <= id_max; optionid++) - if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to - var/rating - if(href_list["o[optionid]"] == "abstain") - rating = null - else - rating = text2num(href_list["o[optionid]"]) - if(!isnum(rating)) - return - - vote_on_numval_poll(pollid, optionid, rating) - if("MULTICHOICE") - var/id_min = text2num(href_list["minoptionid"]) - var/id_max = text2num(href_list["maxoptionid"]) - - if( (id_max - id_min) > 100 ) //Basic exploit prevention - usr << "The option ID difference is too big. Please contact administration or the database admin." - return - - for(var/optionid = id_min; optionid <= id_max; optionid++) - if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected - vote_on_poll(pollid, optionid, 1) - - proc/IsJobAvailable(rank) - var/datum/job/job = job_master.GetJob(rank) - if(!job) return 0 - if(!job.is_position_available()) return 0 - if(jobban_isbanned(src,rank)) return 0 - if(!job.player_old_enough(src.client)) return 0 + if(href_list["show_preferences"]) + client.prefs.ShowChoices(src) return 1 + if(href_list["ready"]) + if(!ticker || ticker.current_state <= GAME_STATE_PREGAME) // Make sure we don't ready up after the round has started + ready = text2num(href_list["ready"]) + else + ready = 0 + + if(href_list["refresh"]) + src << browse(null, "window=playersetup") //closes the player setup window + new_player_panel_proc() + + if(href_list["observe"]) + + if(alert(src,"Are you sure you wish to observe? You will have to wait 15 minutes before being able to respawn!","Player Setup","Yes","No") == "Yes") + if(!client) return 1 + var/mob/observer/dead/observer = new() + + spawning = 1 + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo + + + observer.started_as_observer = 1 + close_spawn_windows() + var/obj/O = locate("landmark*Observer-Start") + if(istype(O)) + src << "Now teleporting." + observer.loc = O.loc + else + src << "Could not locate an observer spawn point. Use the Teleport verb to jump to the station map." + observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly. + + announce_ghost_joinleave(src) + client.prefs.update_preview_icon() + observer.icon = client.prefs.preview_icon + observer.alpha = 127 + + if(client.prefs.be_random_name) + client.prefs.real_name = random_name(client.prefs.gender) + observer.real_name = client.prefs.real_name + observer.name = observer.real_name + if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. + observer.verbs -= /mob/observer/dead/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + observer.key = key + qdel(src) + + return 1 + + if(href_list["late_join"]) - proc/AttemptLateSpawn(rank,var/spawning_at) - if (src != usr) - return 0 if(!ticker || ticker.current_state != GAME_STATE_PLAYING) usr << "\red The round is either not ready, or has already finished..." - return 0 - if(!config.enter_allowed) - usr << "There is an administrative lock on entering the game!" - return 0 - if(!IsJobAvailable(rank)) - src << alert("[rank] is not available. Please try another.") - return 0 - - spawning = 1 - close_spawn_windows() - - job_master.AssignRole(src, rank, 1) - - var/mob/living/character = create_character() //creates the human and transfers vars and mind - character = job_master.EquipRank(character, rank, 1) //equips the human - UpdateFactionList(character) - equip_custom_items(character) - - // AIs don't need a spawnpoint, they must spawn at an empty core - if(character.mind.assigned_role == "AI") - - character = character.AIize(move=0) // AIize the character, but don't move them yet - - // IsJobAvailable for AI checks that there is an empty core available in this list - var/obj/structure/AIcore/deactivated/C = empty_playable_ai_cores[1] - empty_playable_ai_cores -= C - - character.loc = C.loc - - AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]") - ticker.mode.latespawn(character) - - qdel(C) - qdel(src) return - //Find our spawning point. - var/join_message = job_master.LateSpawn(character, rank) + if(client.prefs.species != "Human" && !check_rights(R_ADMIN, 0)) + if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist) + src << alert("You are currently not whitelisted to play [client.prefs.species].") + return 0 - character.lastarea = get_area(loc) - // Moving wheelchair if they have one - if(character.buckled && istype(character.buckled, /obj/structure/bed/chair/wheelchair)) - character.buckled.loc = character.loc - character.buckled.set_dir(character.dir) + var/datum/species/S = all_species[client.prefs.species] + if(!(S.spawn_flags & IS_WHITELISTED)) + src << alert("Your current species,[client.prefs.species], is not available for play on the station.") + return 0 - ticker.mode.latespawn(character) + LateChoices() - if(character.mind.assigned_role != "Cyborg") - data_core.manifest_inject(character) - ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn + if(href_list["manifest"]) + ViewManifest() - //Grab some data from the character prefs for use in random news procs. + if(href_list["SelectedJob"]) - AnnounceArrival(character, rank, join_message) - else - AnnounceCyborg(character, rank, join_message) + if(!config.enter_allowed) + usr << "There is an administrative lock on entering the game!" + return + else if(ticker && ticker.mode && ticker.mode.explosion_in_progress) + usr << "The station is currently exploding. Joining would go poorly." + return - qdel(src) + if(client.prefs.species != "Human") + if(!is_alien_whitelisted(src, client.prefs.species) && config.usealienwhitelist) + src << alert("You are currently not whitelisted to play [client.prefs.species].") + return 0 - proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message) - if (ticker.current_state == GAME_STATE_PLAYING) - if(character.mind.role_alt_title) - rank = character.mind.role_alt_title - // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. - global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer") + var/datum/species/S = all_species[client.prefs.species] + if(!(S.spawn_flags & CAN_JOIN)) + src << alert("Your current species, [client.prefs.species], is not available for play on the station.") + return 0 - proc/LateChoices() - var/name = client.prefs.be_random_name ? "friend" : client.prefs.real_name + AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) + return - var/dat = "
" - dat += "Welcome, [name].
" - dat += "Round Duration: [round_duration()]
" + if(href_list["privacy_poll"]) + establish_db_connection() + if(!dbcon.IsConnected()) + return + var/voted = 0 - if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles. - if(emergency_shuttle.going_to_centcom()) //Shuttle is going to centcomm, not recalled - dat += "The station has been evacuated.
" - if(emergency_shuttle.online()) - if (emergency_shuttle.evac) // Emergency shuttle is past the point of no recall - dat += "The station is currently undergoing evacuation procedures.
" - else // Crew transfer initiated - dat += "The station is currently undergoing crew transfer procedures.
" + //First check if the person has not voted yet. + var/DBQuery/query = dbcon.NewQuery("SELECT * FROM erro_privacy WHERE ckey='[src.ckey]'") + query.Execute() + while(query.NextRow()) + voted = 1 + break - dat += "Choose from the following open/valid positions:
" - for(var/datum/job/job in job_master.occupations) - if(job && IsJobAvailable(job.title)) - if(job.minimum_character_age && (client.prefs.age < job.minimum_character_age)) - continue - var/active = 0 - // Only players with the job assigned and AFK for less than 10 minutes count as active - for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10) - active++ - dat += "[job.title] ([job.current_positions]) (Active: [active])
" + //This is a safety switch, so only valid options pass through + var/option = "UNKNOWN" + switch(href_list["privacy_poll"]) + if("signed") + option = "SIGNED" + if("anonymous") + option = "ANONYMOUS" + if("nostats") + option = "NOSTATS" + if("later") + usr << browse(null,"window=privacypoll") + return + if("abstain") + option = "ABSTAIN" - dat += "
" - src << browse(dat, "window=latechoices;size=300x640;can_close=1") + if(option == "UNKNOWN") + return + + if(!voted) + var/sql = "INSERT INTO erro_privacy VALUES (null, Now(), '[src.ckey]', '[option]')" + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() + usr << "Thank you for your vote!" + usr << browse(null,"window=privacypoll") + + if(!ready && href_list["preference"]) + if(client) + client.prefs.process_link(src, href_list) + else if(!href_list["late_join"]) + new_player_panel() + + if(href_list["showpoll"]) + + handle_player_polling() + return + + if(href_list["pollid"]) + + var/pollid = href_list["pollid"] + if(istext(pollid)) + pollid = text2num(pollid) + if(isnum(pollid)) + src.poll_player(pollid) + return + + if(href_list["votepollid"] && href_list["votetype"]) + var/pollid = text2num(href_list["votepollid"]) + var/votetype = href_list["votetype"] + switch(votetype) + if("OPTION") + var/optionid = text2num(href_list["voteoptionid"]) + vote_on_poll(pollid, optionid) + if("TEXT") + var/replytext = href_list["replytext"] + log_text_poll_reply(pollid, replytext) + if("NUMVAL") + var/id_min = text2num(href_list["minid"]) + var/id_max = text2num(href_list["maxid"]) + + if( (id_max - id_min) > 100 ) //Basic exploit prevention + usr << "The option ID difference is too big. Please contact administration or the database admin." + return + + for(var/optionid = id_min; optionid <= id_max; optionid++) + if(!isnull(href_list["o[optionid]"])) //Test if this optionid was replied to + var/rating + if(href_list["o[optionid]"] == "abstain") + rating = null + else + rating = text2num(href_list["o[optionid]"]) + if(!isnum(rating)) + return + + vote_on_numval_poll(pollid, optionid, rating) + if("MULTICHOICE") + var/id_min = text2num(href_list["minoptionid"]) + var/id_max = text2num(href_list["maxoptionid"]) + + if( (id_max - id_min) > 100 ) //Basic exploit prevention + usr << "The option ID difference is too big. Please contact administration or the database admin." + return + + for(var/optionid = id_min; optionid <= id_max; optionid++) + if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected + vote_on_poll(pollid, optionid, 1) + +/mob/new_player/proc/IsJobAvailable(rank) + var/datum/job/job = job_master.GetJob(rank) + if(!job) return 0 + if(!job.is_position_available()) return 0 + if(jobban_isbanned(src,rank)) return 0 + if(!job.player_old_enough(src.client)) return 0 + return 1 - proc/create_character() - spawning = 1 - close_spawn_windows() - - var/mob/living/carbon/human/new_character - - var/use_species_name - var/datum/species/chosen_species - if(client.prefs.species) - chosen_species = all_species[client.prefs.species] - use_species_name = chosen_species.get_station_variant() //Only used by pariahs atm. - - if(chosen_species && use_species_name) - // Have to recheck admin due to no usr at roundstart. Latejoins are fine though. - if(is_species_whitelisted(chosen_species) || has_admin_rights()) - new_character = new(loc, use_species_name) - - if(!new_character) - new_character = new(loc) - - new_character.lastarea = get_area(loc) - - for(var/lang in client.prefs.alternate_languages) - var/datum/language/chosen_language = all_languages[lang] - if(chosen_language) - if(!config.usealienwhitelist || !(chosen_language.flags & WHITELISTED) || is_alien_whitelisted(src, lang) || has_admin_rights() \ - || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) - new_character.add_language(lang) - - if(ticker.random_players) - new_character.gender = pick(MALE, FEMALE) - client.prefs.real_name = random_name(new_character.gender) - client.prefs.randomize_appearance_for(new_character) - else - client.prefs.copy_to(new_character) - - src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo - - if(mind) - mind.active = 0 //we wish to transfer the key manually - if(mind.assigned_role == "Clown") //give them a clownname if they are a clown - new_character.real_name = pick(clown_names) //I hate this being here of all places but unfortunately dna is based on real_name! - new_character.rename_self("clown") - mind.original = new_character - mind.transfer_to(new_character) //won't transfer key since the mind is not active - - new_character.name = real_name - new_character.dna.ready_dna(new_character) - new_character.dna.b_type = client.prefs.b_type - new_character.sync_organ_dna() - if(client.prefs.disabilities) - // Set defer to 1 if you add more crap here so it only recalculates struc_enzymes once. - N3X - new_character.dna.SetSEState(GLASSESBLOCK,1,0) - new_character.disabilities |= NEARSIGHTED - - // And uncomment this, too. - //new_character.dna.UpdateSE() - - // Do the initial caching of the player's body icons. - new_character.force_update_limbs() - new_character.update_eyes() - new_character.regenerate_icons() - - new_character.key = key //Manually transfer the key to log them in - - return new_character - - proc/ViewManifest() - var/dat = "" - dat += "

Show Crew Manifest

" - dat += data_core.get_manifest(OOC = 1) - - src << browse(dat, "window=manifest;size=370x420;can_close=1") - - Move() +/mob/new_player/proc/AttemptLateSpawn(rank,var/spawning_at) + if (src != usr) + return 0 + if(!ticker || ticker.current_state != GAME_STATE_PLAYING) + usr << "\red The round is either not ready, or has already finished..." + return 0 + if(!config.enter_allowed) + usr << "There is an administrative lock on entering the game!" + return 0 + if(!IsJobAvailable(rank)) + src << alert("[rank] is not available. Please try another.") return 0 - proc/close_spawn_windows() - src << browse(null, "window=latechoices") //closes late choices window - src << browse(null, "window=playersetup") //closes the player setup window + spawning = 1 + close_spawn_windows() - proc/has_admin_rights() - return check_rights(R_ADMIN, 0, src) + job_master.AssignRole(src, rank, 1) - proc/is_species_whitelisted(datum/species/S) - if(!S) return 1 - return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & IS_WHITELISTED) + var/mob/living/character = create_character() //creates the human and transfers vars and mind + character = job_master.EquipRank(character, rank, 1) //equips the human + UpdateFactionList(character) + equip_custom_items(character) + + // AIs don't need a spawnpoint, they must spawn at an empty core + if(character.mind.assigned_role == "AI") + + character = character.AIize(move=0) // AIize the character, but don't move them yet + + // IsJobAvailable for AI checks that there is an empty core available in this list + var/obj/structure/AIcore/deactivated/C = empty_playable_ai_cores[1] + empty_playable_ai_cores -= C + + character.loc = C.loc + + AnnounceCyborg(character, rank, "has been downloaded to the empty core in \the [character.loc.loc]") + ticker.mode.latespawn(character) + + qdel(C) + qdel(src) + return + + //Find our spawning point. + var/join_message = job_master.LateSpawn(character, rank) + + character.lastarea = get_area(loc) + // Moving wheelchair if they have one + if(character.buckled && istype(character.buckled, /obj/structure/bed/chair/wheelchair)) + character.buckled.loc = character.loc + character.buckled.set_dir(character.dir) + + ticker.mode.latespawn(character) + + if(character.mind.assigned_role != "Cyborg") + data_core.manifest_inject(character) + ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn + + //Grab some data from the character prefs for use in random news procs. + + AnnounceArrival(character, rank, join_message) + else + AnnounceCyborg(character, rank, join_message) + + qdel(src) + +/mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message) + if (ticker.current_state == GAME_STATE_PLAYING) + if(character.mind.role_alt_title) + rank = character.mind.role_alt_title + // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. + global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer") + +/mob/new_player/proc/LateChoices() + var/name = client.prefs.be_random_name ? "friend" : client.prefs.real_name + + var/dat = "
" + dat += "Welcome, [name].
" + dat += "Round Duration: [round_duration()]
" + + if(emergency_shuttle) //In case Nanotrasen decides reposess CentComm's shuttles. + if(emergency_shuttle.going_to_centcom()) //Shuttle is going to centcomm, not recalled + dat += "The station has been evacuated.
" + if(emergency_shuttle.online()) + if (emergency_shuttle.evac) // Emergency shuttle is past the point of no recall + dat += "The station is currently undergoing evacuation procedures.
" + else // Crew transfer initiated + dat += "The station is currently undergoing crew transfer procedures.
" + + dat += "Choose from the following open/valid positions:
" + for(var/datum/job/job in job_master.occupations) + if(job && IsJobAvailable(job.title)) + if(job.minimum_character_age && (client.prefs.age < job.minimum_character_age)) + continue + var/active = 0 + // Only players with the job assigned and AFK for less than 10 minutes count as active + for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10) + active++ + dat += "[job.title] ([job.current_positions]) (Active: [active])
" + + dat += "
" + src << browse(dat, "window=latechoices;size=300x640;can_close=1") + + +/mob/new_player/proc/create_character() + spawning = 1 + close_spawn_windows() + + var/mob/living/carbon/human/new_character + + var/use_species_name + var/datum/species/chosen_species + if(client.prefs.species) + chosen_species = all_species[client.prefs.species] + use_species_name = chosen_species.get_station_variant() //Only used by pariahs atm. + + if(chosen_species && use_species_name) + // Have to recheck admin due to no usr at roundstart. Latejoins are fine though. + if(is_species_whitelisted(chosen_species) || has_admin_rights()) + new_character = new(loc, use_species_name) + + if(!new_character) + new_character = new(loc) + + new_character.lastarea = get_area(loc) + + for(var/lang in client.prefs.alternate_languages) + var/datum/language/chosen_language = all_languages[lang] + if(chosen_language) + if(!config.usealienwhitelist || !(chosen_language.flags & WHITELISTED) || is_alien_whitelisted(src, lang) || has_admin_rights() \ + || (new_character.species && (chosen_language.name in new_character.species.secondary_langs))) + new_character.add_language(lang) + + if(ticker.random_players) + new_character.gender = pick(MALE, FEMALE) + client.prefs.real_name = random_name(new_character.gender) + client.prefs.randomize_appearance_for(new_character) + else + client.prefs.copy_to(new_character) + + src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo + + if(mind) + mind.active = 0 //we wish to transfer the key manually + if(mind.assigned_role == "Clown") //give them a clownname if they are a clown + new_character.real_name = pick(clown_names) //I hate this being here of all places but unfortunately dna is based on real_name! + new_character.rename_self("clown") + mind.original = new_character + mind.transfer_to(new_character) //won't transfer key since the mind is not active + + new_character.name = real_name + new_character.dna.ready_dna(new_character) + new_character.dna.b_type = client.prefs.b_type + new_character.sync_organ_dna() + if(client.prefs.disabilities) + // Set defer to 1 if you add more crap here so it only recalculates struc_enzymes once. - N3X + new_character.dna.SetSEState(GLASSESBLOCK,1,0) + new_character.disabilities |= NEARSIGHTED + + // And uncomment this, too. + //new_character.dna.UpdateSE() + + // Do the initial caching of the player's body icons. + new_character.force_update_limbs() + new_character.update_eyes() + new_character.regenerate_icons() + + new_character.key = key //Manually transfer the key to log them in + + return new_character + +/mob/new_player/proc/ViewManifest() + var/dat = "" + dat += "

Show Crew Manifest

" + dat += data_core.get_manifest(OOC = 1) + + src << browse(dat, "window=manifest;size=370x420;can_close=1") + +/mob/new_player/Move() + return 0 + +/mob/new_player/proc/close_spawn_windows() + src << browse(null, "window=latechoices") //closes late choices window + src << browse(null, "window=playersetup") //closes the player setup window + +/mob/new_player/proc/has_admin_rights() + return check_rights(R_ADMIN, 0, src) + +/mob/new_player/proc/is_species_whitelisted(datum/species/S) + if(!S) return 1 + return is_alien_whitelisted(src, S.name) || !config.usealienwhitelist || !(S.spawn_flags & IS_WHITELISTED) /mob/new_player/get_species() var/datum/species/chosen_species @@ -504,5 +504,5 @@ /mob/new_player/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0) return -mob/new_player/MayRespawn() +/mob/new_player/MayRespawn() return 1 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index f7416c50242..e57224a3772 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -1,741 +1,748 @@ -datum/preferences +/datum/preferences //The mob should have a gender you want before running this proc. Will run fine without H - proc/randomize_appearance_for(var/mob/living/carbon/human/H) - gender = pick(MALE, FEMALE) - var/datum/species/current_species = all_species[species] +/datum/preferences/proc/randomize_appearance_for(var/mob/living/carbon/human/H) + gender = pick(MALE, FEMALE) + var/datum/species/current_species = all_species[species] - if(current_species) - if(current_species.flags & HAS_SKIN_TONE) - s_tone = random_skin_tone() - if(current_species.flags & HAS_EYE_COLOR) - randomize_eyes_color() - if(current_species.flags & HAS_SKIN_COLOR) - randomize_skin_color() - if(current_species.flags & HAS_UNDERWEAR) - underwear = rand(1,underwear_m.len) - undershirt = rand(1,undershirt_t.len) + if(current_species) + if(current_species.flags & HAS_SKIN_TONE) + s_tone = random_skin_tone() + if(current_species.flags & HAS_EYE_COLOR) + randomize_eyes_color() + if(current_species.flags & HAS_SKIN_COLOR) + randomize_skin_color() + if(current_species.flags & HAS_UNDERWEAR) + underwear_top = rand(1,underwear_top_t.len) + underwear_bottom = rand(1,underwear_bottom_t.len) + undershirt = rand(1,undershirt_t.len) - var/use_head_species - var/obj/item/organ/external/head/temp_head = H.get_organ(BP_HEAD) - if(temp_head) - use_head_species = temp_head.species.get_bodytype() - else - use_head_species = H.species.get_bodytype() + var/use_head_species + var/obj/item/organ/external/head/temp_head = H.get_organ(BP_HEAD) + if(temp_head) + use_head_species = temp_head.species.get_bodytype() + else + use_head_species = H.species.get_bodytype() - if(use_head_species) - h_style = random_hair_style(gender, species) - f_style = random_facial_hair_style(gender, species) + if(use_head_species) + h_style = random_hair_style(gender, species) + f_style = random_facial_hair_style(gender, species) - randomize_hair_color("hair") - randomize_hair_color("facial") + randomize_hair_color("hair") + randomize_hair_color("facial") - socks = rand(1,socks_t.len) - backbag = 2 - var/datum/species/S = all_species[species] - age = rand(S.min_age,S.max_age) - if(H) - copy_to(H,1) + socks = rand(1,socks_t.len) + backbag = 2 + var/datum/species/S = all_species[species] + age = rand(S.min_age,S.max_age) + if(H) + copy_to(H,1) - proc/randomize_hair_color(var/target = "hair") - if(prob (75) && target == "facial") // Chance to inherit hair color - r_facial = r_hair - g_facial = g_hair - b_facial = b_hair - return +/datum/preferences/proc/randomize_hair_color(var/target = "hair") + if(prob (75) && target == "facial") // Chance to inherit hair color + r_facial = r_hair + g_facial = g_hair + b_facial = b_hair + return - var/red - var/green - var/blue + var/red + var/green + var/blue - var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk") - switch(col) - if("blonde") - red = 255 - green = 255 - blue = 0 - if("black") - red = 0 - green = 0 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 51 - if("copper") - red = 255 - green = 153 - blue = 0 - if("brown") - red = 102 - green = 51 - blue = 0 - if("wheat") - red = 255 - green = 255 - blue = 153 - if("old") - red = rand (100, 255) - green = red - blue = red - if("punk") - red = rand (0, 255) - green = rand (0, 255) - blue = rand (0, 255) + var/col = pick ("blonde", "black", "chestnut", "copper", "brown", "wheat", "old", "punk") + switch(col) + if("blonde") + red = 255 + green = 255 + blue = 0 + if("black") + red = 0 + green = 0 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 51 + if("copper") + red = 255 + green = 153 + blue = 0 + if("brown") + red = 102 + green = 51 + blue = 0 + if("wheat") + red = 255 + green = 255 + blue = 153 + if("old") + red = rand (100, 255) + green = red + blue = red + if("punk") + red = rand (0, 255) + green = rand (0, 255) + blue = rand (0, 255) - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) - switch(target) - if("hair") - r_hair = red - g_hair = green - b_hair = blue - if("facial") - r_facial = red - g_facial = green - b_facial = blue + switch(target) + if("hair") + r_hair = red + g_hair = green + b_hair = blue + if("facial") + r_facial = red + g_facial = green + b_facial = blue - proc/randomize_eyes_color() - var/red - var/green - var/blue +/datum/preferences/proc/randomize_eyes_color() + var/red + var/green + var/blue - var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") - switch(col) - if("black") - red = 0 - green = 0 - blue = 0 - if("grey") - red = rand (100, 200) - green = red - blue = red - if("brown") - red = 102 - green = 51 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 0 - if("blue") - red = 51 - green = 102 - blue = 204 - if("lightblue") - red = 102 - green = 204 - blue = 255 - if("green") - red = 0 - green = 102 - blue = 0 - if("albino") - red = rand (200, 255) - green = rand (0, 150) - blue = rand (0, 150) + var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") + switch(col) + if("black") + red = 0 + green = 0 + blue = 0 + if("grey") + red = rand (100, 200) + green = red + blue = red + if("brown") + red = 102 + green = 51 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 0 + if("blue") + red = 51 + green = 102 + blue = 204 + if("lightblue") + red = 102 + green = 204 + blue = 255 + if("green") + red = 0 + green = 102 + blue = 0 + if("albino") + red = rand (200, 255) + green = rand (0, 150) + blue = rand (0, 150) - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) - r_eyes = red - g_eyes = green - b_eyes = blue + r_eyes = red + g_eyes = green + b_eyes = blue - proc/randomize_skin_color() - var/red - var/green - var/blue +/datum/preferences/proc/randomize_skin_color() + var/red + var/green + var/blue - var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") - switch(col) - if("black") - red = 0 - green = 0 - blue = 0 - if("grey") - red = rand (100, 200) - green = red - blue = red - if("brown") - red = 102 - green = 51 - blue = 0 - if("chestnut") - red = 153 - green = 102 - blue = 0 - if("blue") - red = 51 - green = 102 - blue = 204 - if("lightblue") - red = 102 - green = 204 - blue = 255 - if("green") - red = 0 - green = 102 - blue = 0 - if("albino") - red = rand (200, 255) - green = rand (0, 150) - blue = rand (0, 150) + var/col = pick ("black", "grey", "brown", "chestnut", "blue", "lightblue", "green", "albino") + switch(col) + if("black") + red = 0 + green = 0 + blue = 0 + if("grey") + red = rand (100, 200) + green = red + blue = red + if("brown") + red = 102 + green = 51 + blue = 0 + if("chestnut") + red = 153 + green = 102 + blue = 0 + if("blue") + red = 51 + green = 102 + blue = 204 + if("lightblue") + red = 102 + green = 204 + blue = 255 + if("green") + red = 0 + green = 102 + blue = 0 + if("albino") + red = rand (200, 255) + green = rand (0, 150) + blue = rand (0, 150) - red = max(min(red + rand (-25, 25), 255), 0) - green = max(min(green + rand (-25, 25), 255), 0) - blue = max(min(blue + rand (-25, 25), 255), 0) + red = max(min(red + rand (-25, 25), 255), 0) + green = max(min(green + rand (-25, 25), 255), 0) + blue = max(min(blue + rand (-25, 25), 255), 0) - r_skin = red - g_skin = green - b_skin = blue + r_skin = red + g_skin = green + b_skin = blue - proc/update_preview_icon() //seriously. This is horrendous. - qdel(preview_icon_front) - qdel(preview_icon_side) - qdel(preview_icon) +/datum/preferences/proc/update_preview_icon() //seriously. This is horrendous. + qdel(preview_icon_front) + qdel(preview_icon_side) + qdel(preview_icon) - var/g = "m" - if(gender == FEMALE) g = "f" + var/g = "m" + if(gender == FEMALE) g = "f" - var/icon/icobase - var/datum/species/current_species = all_species[species] + var/icon/icobase + var/datum/species/current_species = all_species[species] - if(current_species) - icobase = current_species.icobase - else - icobase = 'icons/mob/human_races/r_human.dmi' + if(current_species) + icobase = current_species.icobase + else + icobase = 'icons/mob/human_races/r_human.dmi' - preview_icon = new /icon(icobase, "") - for(var/name in BP_ALL) - if(organ_data[name] == "amputated") - continue - if(organ_data[name] == "cyborg") - var/datum/robolimb/R - if(rlimb_data[name]) R = all_robolimbs[rlimb_data[name]] - if(!R) R = basic_robolimb - if(name in list(BP_TORSO, BP_GROIN, BP_HEAD)) - preview_icon.Blend(icon(R.icon, "[name]_[g]"), ICON_OVERLAY) - else - preview_icon.Blend(icon(R.icon, "[name]"), ICON_OVERLAY) - continue - var/icon/limb_icon + preview_icon = new /icon(icobase, "") + for(var/name in BP_ALL) + if(organ_data[name] == "amputated") + continue + if(organ_data[name] == "cyborg") + var/datum/robolimb/R + if(rlimb_data[name]) R = all_robolimbs[rlimb_data[name]] + if(!R) R = basic_robolimb if(name in list(BP_TORSO, BP_GROIN, BP_HEAD)) - limb_icon = new /icon(icobase, "[name]_[g]") + preview_icon.Blend(icon(R.icon, "[name]_[g]"), ICON_OVERLAY) else - limb_icon = new /icon(icobase, "[name]") - // Skin color - if(current_species && (current_species.appearance_flags & HAS_SKIN_COLOR)) - limb_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - // Skin tone - if(current_species && (current_species.appearance_flags & HAS_SKIN_TONE)) - if (s_tone >= 0) - limb_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - else - limb_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - preview_icon.Blend(limb_icon, ICON_OVERLAY) + preview_icon.Blend(icon(R.icon, "[name]"), ICON_OVERLAY) + continue + var/icon/limb_icon + if(name in list(BP_TORSO, BP_GROIN, BP_HEAD)) + limb_icon = new /icon(icobase, "[name]_[g]") + else + limb_icon = new /icon(icobase, "[name]") + // Skin color + if(current_species && (current_species.appearance_flags & HAS_SKIN_COLOR)) + limb_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + // Skin tone + if(current_species && (current_species.appearance_flags & HAS_SKIN_TONE)) + if (s_tone >= 0) + limb_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) + else + limb_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) + preview_icon.Blend(limb_icon, ICON_OVERLAY) - //Tail - if(current_species && (current_species.tail)) - var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") - if(current_species && (current_species.appearance_flags & HAS_SKIN_COLOR)) - temp.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) - if(current_species && (current_species.appearance_flags & HAS_SKIN_TONE)) - if (s_tone >= 0) - temp.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) - else - temp.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) - preview_icon.Blend(temp, ICON_OVERLAY) + //Tail + if(current_species && (current_species.tail)) + var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") + if(current_species && (current_species.appearance_flags & HAS_SKIN_COLOR)) + temp.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) + if(current_species && (current_species.appearance_flags & HAS_SKIN_TONE)) + if (s_tone >= 0) + temp.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD) + else + temp.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) + preview_icon.Blend(temp, ICON_OVERLAY) - // This is absolute garbage but whatever. It will do until this entire file can be rewritten without crashes. - var/use_eye_icon = "eyes_s" - var/list/use_eye_data = current_species.has_limbs[BP_HEAD] - if(islist(use_eye_data)) - var/use_eye_path = use_eye_data["path"] - var/obj/item/organ/external/head/temp_head = new use_eye_path () - if(istype(temp_head)) - use_eye_icon = temp_head.eye_icon - qdel(temp_head) + // This is absolute garbage but whatever. It will do until this entire file can be rewritten without crashes. + var/use_eye_icon = "eyes_s" + var/list/use_eye_data = current_species.has_limbs[BP_HEAD] + if(islist(use_eye_data)) + var/use_eye_path = use_eye_data["path"] + var/obj/item/organ/external/head/temp_head = new use_eye_path () + if(istype(temp_head)) + use_eye_icon = temp_head.eye_icon + qdel(temp_head) - var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = use_eye_icon) - if ((current_species && (current_species.appearance_flags & HAS_EYE_COLOR))) - eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) + var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = use_eye_icon) + if ((current_species && (current_species.appearance_flags & HAS_EYE_COLOR))) + eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) - var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] - if(hair_style) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) - eyes_s.Blend(hair_s, ICON_OVERLAY) + var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] + if(hair_style) + var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") + hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD) + eyes_s.Blend(hair_s, ICON_OVERLAY) - var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] - if(facial_hair_style) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) - eyes_s.Blend(facial_s, ICON_OVERLAY) + var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] + if(facial_hair_style) + var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD) + eyes_s.Blend(facial_s, ICON_OVERLAY) - var/icon/underwear_s = null - if(underwear && current_species.appearance_flags & HAS_UNDERWEAR) - underwear_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear) + var/icon/underwear_top_s = null + if(underwear_top && current_species.appearance_flags & HAS_UNDERWEAR) + underwear_top_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear_top) + var/icon/underwear_bottom_s = null + if(underwear_bottom && current_species.appearance_flags & HAS_UNDERWEAR) + underwear_bottom_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear_bottom) - var/icon/undershirt_s = null - if(undershirt && current_species.appearance_flags & HAS_UNDERWEAR) - undershirt_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = undershirt) + var/icon/undershirt_s = null + if(undershirt && current_species.appearance_flags & HAS_UNDERWEAR) + undershirt_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = undershirt) - var/icon/socks_s = null - if(socks && current_species.appearance_flags & HAS_UNDERWEAR) - socks_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = socks) + var/icon/socks_s = null + if(socks && current_species.appearance_flags & HAS_UNDERWEAR) + socks_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = socks) - var/icon/clothes_s = null - if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(backbag == 2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3 || backbag == 4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + var/icon/clothes_s = null + if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty - switch(job_civilian_high) - if(HOP) - clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "ianshirt"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(BARTENDER) - clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "tophat"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(BOTANIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "nymph"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CHEF) - clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "chefhat"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apronchef"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(JANITOR) - clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_janitor"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(LIBRARIAN) - clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hairflower"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(QUARTERMASTER) - clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "poncho"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CARGOTECH) - clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "flat_cap"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(MINER) - clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "bearpelt"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(LAWYER) - clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "briefcase"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CHAPLAIN) - clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "imperium_monk"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CLOWN) - clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY) - if(MIME) - clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - else if(job_medsci_high) - switch(job_medsci_high) - if(RD) - clothes_s = new /icon('icons/mob/uniform.dmi', "director_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "petehat"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(SCIENTIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(XENOBIOLOGIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CHEMIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labgreen"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CMO) - clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_cmo"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(DOCTOR) - clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "surgeon"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(GENETICIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "monkeysuit"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(VIROLOGIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "plaguedoctor"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(ROBOTICIST) - clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "toolbox_blue"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - else if(job_engsec_high) - switch(job_engsec_high) - if(CAPTAIN) - clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "centcomcaptain"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(HOS) - clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberet"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(WARDEN) - clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "slippers_worn"), ICON_OVERLAY) - else - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(DETECTIVE) - clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(OFFICER) - clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CHIEF) - clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "blueprints"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(ENGINEER) - clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hazard"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(ATMOSTECH) - clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if(prob(1)) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "firesuit"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - - if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "straight_jacket"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY) - if(backbag == 2) + else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty + switch(job_civilian_high) + if(HOP) + clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "ianshirt"), ICON_OVERLAY) + switch(backbag) + if(2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3 || backbag == 4) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(CYBORG) - clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") - clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/suit.dmi', "cardborg"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY) - if(backbag == 2) + if(BARTENDER) + clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "tophat"), ICON_OVERLAY) + switch(backbag) + if(2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3 || backbag == 4) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(BOTANIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "nymph"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CHEF) + clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "chefhat"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apronchef"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(JANITOR) + clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_janitor"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(LIBRARIAN) + clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hairflower"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(QUARTERMASTER) + clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "poncho"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CARGOTECH) + clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "flat_cap"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(MINER) + clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "bearpelt"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(LAWYER) + clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "briefcase"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CHAPLAIN) + clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "imperium_monk"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CLOWN) + clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY) + if(MIME) + clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - if(disabilities & NEARSIGHTED) - preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY) + else if(job_medsci_high) + switch(job_medsci_high) + if(RD) + clothes_s = new /icon('icons/mob/uniform.dmi', "director_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "petehat"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(SCIENTIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(XENOBIOLOGIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CHEMIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labgreen"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CMO) + clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_cmo"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(DOCTOR) + clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "surgeon"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(GENETICIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "monkeysuit"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(VIROLOGIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "plaguedoctor"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(ROBOTICIST) + clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "toolbox_blue"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - preview_icon.Blend(eyes_s, ICON_OVERLAY) - if(underwear_s) - preview_icon.Blend(underwear_s, ICON_OVERLAY) - if(undershirt_s) - preview_icon.Blend(undershirt_s, ICON_OVERLAY) - if(socks_s) - preview_icon.Blend(socks_s, ICON_OVERLAY) - if(clothes_s) - preview_icon.Blend(clothes_s, ICON_OVERLAY) - preview_icon_front = new(preview_icon, dir = SOUTH) - preview_icon_side = new(preview_icon, dir = WEST) + else if(job_engsec_high) + switch(job_engsec_high) + if(CAPTAIN) + clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "centcomcaptain"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(HOS) + clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberet"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(WARDEN) + clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "slippers_worn"), ICON_OVERLAY) + else + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(DETECTIVE) + clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(OFFICER) + clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CHIEF) + clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "blueprints"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(ENGINEER) + clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hazard"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(ATMOSTECH) + clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) + if(prob(1)) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "firesuit"), ICON_OVERLAY) + switch(backbag) + if(2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + if(3) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) + if(4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) - qdel(eyes_s) - qdel(underwear_s) - qdel(undershirt_s) - qdel(socks_s) - qdel(clothes_s) + if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "straight_jacket"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + if(CYBORG) + clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") + clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY) + clothes_s.Blend(new /icon('icons/mob/suit.dmi', "cardborg"), ICON_OVERLAY) + clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY) + if(backbag == 2) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) + else if(backbag == 3 || backbag == 4) + clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY) + + if(disabilities & NEARSIGHTED) + preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY) + + preview_icon.Blend(eyes_s, ICON_OVERLAY) + if(underwear_top_s) + preview_icon.Blend(underwear_top_s, ICON_OVERLAY) + if(underwear_bottom_s) + preview_icon.Blend(underwear_bottom_s, ICON_OVERLAY) + if(undershirt_s) + preview_icon.Blend(undershirt_s, ICON_OVERLAY) + if(socks_s) + preview_icon.Blend(socks_s, ICON_OVERLAY) + if(clothes_s) + preview_icon.Blend(clothes_s, ICON_OVERLAY) + preview_icon_front = new(preview_icon, dir = SOUTH) + preview_icon_side = new(preview_icon, dir = WEST) + + qdel(eyes_s) + qdel(underwear_top_s) + qdel(underwear_bottom_s) + qdel(undershirt_s) + qdel(socks_s) + qdel(clothes_s) diff --git a/code/modules/mob/new_player/skill.dm b/code/modules/mob/new_player/skill.dm index 9c72f6a3995..1f713292029 100644 --- a/code/modules/mob/new_player/skill.dm +++ b/code/modules/mob/new_player/skill.dm @@ -4,12 +4,12 @@ var/global/const SKILL_ADEPT = 2 SKILL_EXPERT = 3 -datum/skill/var - ID = "none" // ID of the skill, used in code - name = "None" // name of the skill - desc = "Placeholder skill" // detailed description of the skill - field = "Misc" // the field under which the skill will be listed - secondary = 0 // secondary skills only have two levels and cost significantly less +/datum/skill/var + ID = "none" // ID of the skill, used in code + name = "None" // name of the skill + desc = "Placeholder skill" // detailed description of the skill + field = "Misc" // the field under which the skill will be listed + secondary = 0 // secondary skills only have two levels and cost significantly less var/global/list/SKILLS = null var/list/SKILL_ENGINEER = list("field" = "Engineering", "EVA" = SKILL_BASIC, "construction" = SKILL_ADEPT, "electrical" = SKILL_BASIC, "engines" = SKILL_ADEPT) @@ -18,144 +18,144 @@ var/list/SKILL_SECURITY_OFFICER = list("field" = "Security", "combat" = SKILL_BA var/list/SKILL_CHEMIST = list("field" = "Science", "chemistry" = SKILL_ADEPT, "science" = SKILL_ADEPT, "medical" = SKILL_BASIC, "devices" = SKILL_BASIC) var/global/list/SKILL_PRE = list("Engineer" = SKILL_ENGINEER, "Roboticist" = SKILL_ORGAN_ROBOTICIST, "Security Officer" = SKILL_SECURITY_OFFICER, "Chemist" = SKILL_CHEMIST) -datum/skill/management - ID = "management" - name = "Command" - desc = "Your ability to manage and commandeer other crew members." +/datum/skill/management + ID = "management" + name = "Command" + desc = "Your ability to manage and commandeer other crew members." -datum/skill/combat +/datum/skill/combat ID = "combat" name = "Close Combat" desc = "This skill describes your training in hand-to-hand combat or melee weapon usage. While expertise in this area is rare in the era of firearms, experts still exist among athletes." field = "Security" -datum/skill/weapons +/datum/skill/weapons ID = "weapons" name = "Weapons Expertise" desc = "This skill describes your expertise with and knowledge of weapons. A low level in this skill implies knowledge of simple weapons, for example tazers and flashes. A high level in this skill implies knowledge of complex weapons, such as grenades, riot shields, pulse rifles or bombs. A low level in this skill is typical for security officers, a high level of this skill is typical for special agents and soldiers." field = "Security" -datum/skill/EVA - ID = "EVA" - name = "Extra-vehicular activity" - desc = "This skill describes your skill and knowledge of space-suits and working in vacuum." - field = "Engineering" - secondary = 1 +/datum/skill/EVA + ID = "EVA" + name = "Extra-vehicular activity" + desc = "This skill describes your skill and knowledge of space-suits and working in vacuum." + field = "Engineering" + secondary = 1 -datum/skill/forensics +/datum/skill/forensics ID = "forensics" name = "Forensics" desc = "Describes your skill at performing forensic examinations and identifying vital evidence. Does not cover analytical abilities, and as such isn't the only indicator for your investigation skill. Note that in order to perform autopsy, the surgery skill is also required." field = "Security" -datum/skill/construction - ID = "construction" - name = "Construction" - desc = "Your ability to construct various buildings, such as walls, floors, tables and so on. Note that constructing devices such as APCs additionally requires the Electronics skill. A low level of this skill is typical for janitors, a high level of this skill is typical for engineers." - field = "Engineering" +/datum/skill/construction + ID = "construction" + name = "Construction" + desc = "Your ability to construct various buildings, such as walls, floors, tables and so on. Note that constructing devices such as APCs additionally requires the Electronics skill. A low level of this skill is typical for janitors, a high level of this skill is typical for engineers." + field = "Engineering" -datum/skill/management - ID = "management" - name = "Command" - desc = "Your ability to manage and commandeer other crew members." +/datum/skill/management + ID = "management" + name = "Command" + desc = "Your ability to manage and commandeer other crew members." -datum/skill/knowledge/law - ID = "law" - name = "Corporate Law" - desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for captains." - field = "Security" - secondary = 1 +/datum/skill/knowledge/law + ID = "law" + name = "Corporate Law" + desc = "Your knowledge of corporate law and procedures. This includes Corporate Regulations, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for captains." + field = "Security" + secondary = 1 -datum/skill/devices - ID = "devices" - name = "Complex Devices" - desc = "Describes the ability to assemble complex devices, such as computers, circuits, printers, robots or gas tank assemblies(bombs). Note that if a device requires electronics or programming, those skills are also required in addition to this skill." - field = "Science" +/datum/skill/devices + ID = "devices" + name = "Complex Devices" + desc = "Describes the ability to assemble complex devices, such as computers, circuits, printers, robots or gas tank assemblies(bombs). Note that if a device requires electronics or programming, those skills are also required in addition to this skill." + field = "Science" -datum/skill/electrical - ID = "electrical" - name = "Electrical Engineering" - desc = "This skill describes your knowledge of electronics and the underlying physics. A low level of this skill implies you know how to lay out wiring and configure powernets, a high level of this skill is required for working complex electronic devices such as circuits or bots." - field = "Engineering" +/datum/skill/electrical + ID = "electrical" + name = "Electrical Engineering" + desc = "This skill describes your knowledge of electronics and the underlying physics. A low level of this skill implies you know how to lay out wiring and configure powernets, a high level of this skill is required for working complex electronic devices such as circuits or bots." + field = "Engineering" -datum/skill/atmos - ID = "atmos" - name = "Atmospherics" - desc = "Describes your knowledge of piping, air distribution and gas dynamics." - field = "Engineering" +/datum/skill/atmos + ID = "atmos" + name = "Atmospherics" + desc = "Describes your knowledge of piping, air distribution and gas dynamics." + field = "Engineering" -datum/skill/engines +/datum/skill/engines ID = "engines" name = "Engines" desc = "Describes your knowledge of the various engine types common on space stations, such as the singularity or anti-matter engine." field = "Engineering" secondary = 1 -datum/skill/computer - ID = "computer" - name = "Information Technology" - desc = "Describes your understanding of computers, software and communication. Not a requirement for using computers, but definitely helps. Used in telecommunications and programming of computers and AIs." - field = "Science" +/datum/skill/computer + ID = "computer" + name = "Information Technology" + desc = "Describes your understanding of computers, software and communication. Not a requirement for using computers, but definitely helps. Used in telecommunications and programming of computers and AIs." + field = "Science" -datum/skill/pilot - ID = "pilot" - name = "Heavy Machinery Operation" - desc = "Describes your experience and understanding of operating heavy machinery, which includes mechs and other large exosuits. Used in piloting mechs." - field = "Engineering" +/datum/skill/pilot + ID = "pilot" + name = "Heavy Machinery Operation" + desc = "Describes your experience and understanding of operating heavy machinery, which includes mechs and other large exosuits. Used in piloting mechs." + field = "Engineering" -datum/skill/medical - ID = "medical" - name = "Medicine" - desc = "Covers an understanding of the human body and medicine. At a low level, this skill gives a basic understanding of applying common types of medicine, and a rough understanding of medical devices like the health analyzer. At a high level, this skill grants exact knowledge of all the medicine available on the station, as well as the ability to use complex medical devices like the body scanner or mass spectrometer." - field = "Medical" +/datum/skill/medical + ID = "medical" + name = "Medicine" + desc = "Covers an understanding of the human body and medicine. At a low level, this skill gives a basic understanding of applying common types of medicine, and a rough understanding of medical devices like the health analyzer. At a high level, this skill grants exact knowledge of all the medicine available on the station, as well as the ability to use complex medical devices like the body scanner or mass spectrometer." + field = "Medical" -datum/skill/anatomy - ID = "anatomy" - name = "Anatomy" - desc = "Gives you a detailed insight of the human body. A high skill in this is required to perform surgery.This skill may also help in examining alien biology." - field = "Medical" +/datum/skill/anatomy + ID = "anatomy" + name = "Anatomy" + desc = "Gives you a detailed insight of the human body. A high skill in this is required to perform surgery.This skill may also help in examining alien biology." + field = "Medical" -datum/skill/virology - ID = "virology" - name = "Virology" - desc = "This skill implies an understanding of microorganisms and their effects on humans." - field = "Medical" +/datum/skill/virology + ID = "virology" + name = "Virology" + desc = "This skill implies an understanding of microorganisms and their effects on humans." + field = "Medical" -datum/skill/genetics - ID = "genetics" - name = "Genetics" - desc = "Implies an understanding of how DNA works and the structure of the human DNA." - field = "Science" +/datum/skill/genetics + ID = "genetics" + name = "Genetics" + desc = "Implies an understanding of how DNA works and the structure of the human DNA." + field = "Science" -datum/skill/chemistry +/datum/skill/chemistry ID = "chemistry" name = "Chemistry" desc = "Experience with mixing chemicals, and an understanding of what the effect will be. This doesn't cover an understanding of the effect of chemicals on the human body, as such the medical skill is also required for medical chemists." field = "Science" -datum/skill/botany +/datum/skill/botany ID = "botany" name = "Botany" desc = "Describes how good a character is at growing and maintaining plants." -datum/skill/cooking +/datum/skill/cooking ID = "cooking" name = "Cooking" desc = "Describes a character's skill at preparing meals and other consumable goods. This includes mixing alcoholic beverages." -datum/skill/science +/datum/skill/science ID = "science" name = "Science" desc = "Your experience and knowledge with scientific methods and processes." field = "Science" -datum/attribute/var +/datum/attribute/var ID = "none" name = "None" desc = "This is a placeholder" -proc/setup_skills() +/proc/setup_skills() if(SKILLS == null) SKILLS = list() for(var/T in (typesof(/datum/skill)-/datum/skill)) @@ -167,10 +167,10 @@ proc/setup_skills() L += S -mob/living/carbon/human/proc/GetSkillClass(points) +/mob/living/carbon/human/proc/GetSkillClass(points) return CalculateSkillClass(points, age) -proc/show_skill_window(var/mob/user, var/mob/living/carbon/human/M) +/proc/show_skill_window(var/mob/user, var/mob/living/carbon/human/M) if(!istype(M)) return if(SKILLS == null) setup_skills() @@ -205,7 +205,7 @@ proc/show_skill_window(var/mob/user, var/mob/living/carbon/human/M) user << browse(HTML, "window=show_skills;size=600x800") return -mob/living/carbon/human/verb/show_skills() +/mob/living/carbon/human/verb/show_skills() set category = "IC" set name = "Show Own Skills" diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 787ec1bac1e..b1eebda6a94 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -103,10 +103,6 @@ name = "Shoulder-length Hair" icon_state = "hair_b" - longalt - name = "Shoulder-length Hair Alt" - icon_state = "hair_longfringe" - /*longish name = "Longer Hair" icon_state = "hair_b2"*/ @@ -115,10 +111,6 @@ name = "Long Hair" icon_state = "hair_vlong" - longeralt - name = "Long Hair Alt" - icon_state = "hair_vlongfringe" - longest name = "Very Long Hair" icon_state = "hair_longest" @@ -465,6 +457,27 @@ name = "Bald" icon_state = "bald" + longeralt2 + name = "Long Hair Alt 2" + icon_state = "hair_longeralt2" + + shortbangs + name = "Short Bangs" + icon_state = "hair_shortbangs" + + halfshaved + name = "Half-Shaved Emo" + icon_state = "hair_halfshaved" + + bun + name = "Casual Bun" + icon_state = "hair_bun" + + doublebun + name = "Double-Bun" + icon_state = "hair_doublebun" + + /* /////////////////////////////////// / =---------------------------= / @@ -482,7 +495,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajara","Skrell","Vox","Machine","Teshari") + species_allowed = list("Human","Unathi","Tajara","Skrell", "Machine","Teshari") teshari_beard name = "Teshari Beard" @@ -677,11 +690,6 @@ icon_state = "hair_messy" species_allowed = list("Tajara") - vox_quills_short - name = "Short Vox Quills" - icon_state = "vox_shortquills" - species_allowed = list("Vox") - /datum/sprite_accessory/facial_hair taj_sideburns diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index b0bc02f6858..ca8d1bffe1a 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -161,30 +161,6 @@ qdel(src) return O -//human -> alien -/mob/living/carbon/human/proc/Alienize() - if (transforming) - return - for(var/obj/item/W in src) - drop_from_inventory(W) - regenerate_icons() - transforming = 1 - canmove = 0 - icon = null - invisibility = 101 - for(var/t in organs) - qdel(t) - - var/alien_caste = pick("Hunter","Sentinel","Drone") - var/mob/living/carbon/human/new_xeno = create_new_xenomorph(alien_caste,loc) - - new_xeno.a_intent = I_HURT - new_xeno.key = key - - new_xeno << "You are now an alien." - qdel(src) - return - /mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num) if (transforming) return diff --git a/code/modules/nano/interaction/base.dm b/code/modules/nano/interaction/base.dm index 82fd32ea3c5..e48022e2cc1 100644 --- a/code/modules/nano/interaction/base.dm +++ b/code/modules/nano/interaction/base.dm @@ -32,6 +32,6 @@ . = STATUS_INTERACTIVE if(cell.charge <= 0) return STATUS_CLOSE - if(lockcharge) + if(lockdown) . = STATUS_DISABLED return min(., ..()) diff --git a/code/modules/nano/interaction/default.dm b/code/modules/nano/interaction/default.dm index e682ea55288..157e0e9de15 100644 --- a/code/modules/nano/interaction/default.dm +++ b/code/modules/nano/interaction/default.dm @@ -9,7 +9,7 @@ /mob/proc/default_can_use_topic(var/src_object) return STATUS_CLOSE // By default no mob can do anything with NanoUI -/mob/dead/observer/default_can_use_topic(var/src_object) +/mob/observer/dead/default_can_use_topic(var/src_object) if(can_admin_interact()) return STATUS_INTERACTIVE // Admins are more equal if(!client || get_dist(src_object, src) > client.view) // Preventing ghosts from having a million windows open by limiting to objects in range diff --git a/code/modules/nano/interaction/physical.dm b/code/modules/nano/interaction/physical.dm index 36f9a209712..05710084817 100644 --- a/code/modules/nano/interaction/physical.dm +++ b/code/modules/nano/interaction/physical.dm @@ -8,7 +8,7 @@ /mob/proc/check_physical_distance(var/src_object) return STATUS_CLOSE -/mob/dead/observer/check_physical_distance(var/src_object) +/mob/observer/dead/check_physical_distance(var/src_object) return default_can_use_topic(src_object) /mob/living/check_physical_distance(var/src_object) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index c1e367fc98e..e270185414b 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -345,12 +345,12 @@ nanoui is used to open and update nano browser uis var/template_data_json = "{}" // An empty JSON object if (templates.len > 0) - template_data_json = list2json(templates) + template_data_json = json_encode(templates) var/list/send_data = get_send_data(initial_data) - var/initial_data_json = replacetext(replacetext(list2json_usecache(send_data), """, "&#34;"), "'", "'") + var/initial_data_json = replacetext(replacetext(json_encode(send_data), """, "&#34;"), "'", "'") - var/url_parameters_json = list2json(list("src" = "\ref[src]")) + var/url_parameters_json = json_encode(list("src" = "\ref[src]")) return {" @@ -459,7 +459,7 @@ nanoui is used to open and update nano browser uis var/list/send_data = get_send_data(data) //user << list2json(data) // used for debugging - user << output(list2params(list(list2json_usecache(send_data))),"[window_id].browser:receiveUpdateData") + user << output(list2params(list(json_encode(send_data))),"[window_id].browser:receiveUpdateData") /** * This Topic() proc is called whenever a user clicks on a link within a Nano UI diff --git a/code/modules/organs/misc.dm b/code/modules/organs/misc.dm index 1f4fc2c1fe6..7da4dd1106c 100644 --- a/code/modules/organs/misc.dm +++ b/code/modules/organs/misc.dm @@ -56,6 +56,3 @@ if(owner && owner.stat != DEAD && !is_broken()) backup_time = world.time if(owner.mind) backup = owner.mind - -/obj/item/organ/internal/stack/vox/stack - name = "vox cortical stack" diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 8def5e7eefa..e3452512d1b 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -121,7 +121,7 @@ /obj/item/organ/external/examine() ..() - if(in_range(usr, src) || istype(usr, /mob/dead/observer)) + if(in_range(usr, src) || istype(usr, /mob/observer/dead)) for(var/obj/item/I in contents) if(istype(I, /obj/item/organ)) continue @@ -1326,9 +1326,6 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/head/seromi eye_icon = "eyes_seromi" -/obj/item/organ/external/head/vox - eye_icon = "vox_eyes_s" - /obj/item/organ/external/head/no_eyes eye_icon = "blank_eyes" diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm deleted file mode 100644 index e734d745f7c..00000000000 --- a/code/modules/organs/subtypes/xenos.dm +++ /dev/null @@ -1,52 +0,0 @@ -//XENOMORPH ORGANS -/obj/item/organ/internal/xenos - name = "xeno organ" - icon = 'icons/effects/blood.dmi' - desc = "It smells like an accident in a chemical factory." - -/obj/item/organ/internal/xenos/eggsac - name = "egg sac" - parent_organ = BP_GROIN - icon_state = "xgibmid1" - organ_tag = O_EGG - -/obj/item/organ/internal/xenos/plasmavessel - name = "plasma vessel" - parent_organ = BP_TORSO - icon_state = "xgibdown1" - organ_tag = O_PLASMA - var/stored_plasma = 0 - var/max_plasma = 500 - -/obj/item/organ/internal/xenos/plasmavessel/queen - name = "bloated plasma vessel" - stored_plasma = 200 - max_plasma = 500 - -/obj/item/organ/internal/xenos/plasmavessel/sentinel - stored_plasma = 100 - max_plasma = 250 - -/obj/item/organ/internal/xenos/plasmavessel/hunter - name = "tiny plasma vessel" - stored_plasma = 100 - max_plasma = 150 - -/obj/item/organ/internal/xenos/acidgland - name = "acid gland" - parent_organ = BP_HEAD - icon_state = "xgibtorso" - organ_tag = O_ACID - -/obj/item/organ/internal/xenos/hivenode - name = "hive node" - parent_organ = BP_TORSO - icon_state = "xgibmid2" - organ_tag = O_HIVE - -/obj/item/organ/internal/xenos/resinspinner - name = "resin spinner" - parent_organ = BP_HEAD - icon_state = "xgibmid2" - organ_tag = O_RESIN - diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index 2253e049a5a..891fd809fe4 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -147,7 +147,7 @@ if(P && (P.loc == src) && istype(P, /obj/item/weapon/paper) ) - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon))) usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]") onclose(usr, "[P.name]") else diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 8ff1a680d74..a7d489ba537 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -1,5 +1,5 @@ var/list/obj/machinery/photocopier/faxmachine/allfaxes = list() -var/list/admin_departments = list("[boss_name]", "Sol Government", "Supply") +var/list/admin_departments = list("[boss_name]", "Sif Governmental Authority", "Supply") var/list/alldepartments = list() var/list/adminfaxes = list() //cache for faxes that have been sent to admins @@ -198,8 +198,8 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins switch(destination) if (boss_name) message_admins(sender, "[uppertext(boss_short)] FAX", rcvdcopy, "CentcommFaxReply", "#006100") - if ("Sol Government") - message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0") + if ("Sif Governmental Authority") + message_admins(sender, "SIF GOVERNMENT FAX", rcvdcopy, "CentcommFaxReply", "#1F66A0") //message_admins(sender, "SOL GOVERNMENT FAX", rcvdcopy, "SolGovFaxReply", "#1F66A0") if ("Supply") message_admins(sender, "[uppertext(boss_short)] SUPPLY FAX", rcvdcopy, "CentcommFaxReply", "#5F4519") diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 8289b291adb..cfb662a3409 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -102,7 +102,7 @@ else if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) if(P && (P.loc == src) && istype(P)) - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon))) usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]") onclose(usr, "[P.name]") else diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 9cb37d98a91..cc8feae5b21 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -73,14 +73,14 @@ /obj/item/weapon/paper/examine(mob/user) ..() - if(in_range(user, src) || istype(user, /mob/dead/observer)) + if(in_range(user, src) || istype(user, /mob/observer/dead)) show_content(usr) else user << "You have to go closer if you want to read it." return /obj/item/weapon/paper/proc/show_content(var/mob/user, var/forceshow=0) - if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/dead/observer) || istype(user, /mob/living/silicon)) && !forceshow) + if(!(istype(user, /mob/living/carbon/human) || istype(user, /mob/observer/dead) || istype(user, /mob/living/silicon)) && !forceshow) user << browse("[name][stars(info)][stamps]", "window=[name]") onclose(user, "[name]") else diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index db7a0882160..53110bed0fa 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -122,7 +122,7 @@ if(istype(pages[page], /obj/item/weapon/paper)) var/obj/item/weapon/paper/P = W - if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/observer/dead) || istype(usr, /mob/living/silicon))) dat+= "[P.name][stars(P.info)][P.stamps]" else dat+= "[P.name][P.info][P.stamps]" diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index c754909c4ca..a3da9704ede 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -94,21 +94,19 @@ /obj/item/device/camera/siliconcam/robot_camera/printpicture(mob/user, obj/item/weapon/photo/p) injectmasteralbum(p) -/obj/item/device/camera/siliconcam/ai_camera/verb/take_image() +/mob/living/silicon/ai/proc/take_image() set category = "AI Commands" set name = "Take Image" set desc = "Takes an image" - set src in usr - toggle_camera_mode() + aiCamera.toggle_camera_mode() -/obj/item/device/camera/siliconcam/ai_camera/verb/view_images() +/mob/living/silicon/ai/proc/view_images() set category = "AI Commands" set name = "View Images" set desc = "View images" - set src in usr - viewpictures() + aiCamera.viewpictures() /obj/item/device/camera/siliconcam/ai_camera/verb/delete_images() set category = "AI Commands" @@ -123,7 +121,6 @@ set name = "Take Image" set desc = "Takes an image" set src in usr - toggle_camera_mode() /obj/item/device/camera/siliconcam/robot_camera/verb/view_images() diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 128cc625602..1d19b0fd6b4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -866,7 +866,7 @@ if(locked && !issilicon(usr) ) if(isobserver(usr) ) - var/mob/dead/observer/O = usr //Added to allow admin nanoUI interactions. + var/mob/observer/dead/O = usr //Added to allow admin nanoUI interactions. if(!O.can_admin_interact() ) //NanoUI /should/ make this not needed, but better safe than sorry. usr << "Try as you might, your ghostly fingers can't press the buttons." return 1 diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index 23774d526ed..d244c4eeaa9 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -134,10 +134,7 @@ /atom/proc/singuloCanEat() return 1 -/mob/dead/singuloCanEat() - return 0 - -/mob/eye/singuloCanEat() +/mob/observer/singuloCanEat() return 0 /mob/new_player/singuloCanEat() diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 2a9b44f926b..665e9342c18 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -1,4 +1,4 @@ -//Vox pinning weapon. +// Alien pinning weapon. /obj/item/weapon/gun/launcher/spikethrower name = "spike thrower" @@ -37,14 +37,6 @@ /obj/item/weapon/gun/launcher/spikethrower/update_icon() icon_state = "spikethrower[spikes]" -/obj/item/weapon/gun/launcher/spikethrower/special_check(user) - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(H.species && H.species.get_bodytype() != "Vox") - user << "\The [src] does not respond to you!" - return 0 - return ..() - /obj/item/weapon/gun/launcher/spikethrower/update_release_force() return diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm index e11844293e1..407b70d20a1 100644 --- a/code/modules/projectiles/guns/launcher/crossbow.dm +++ b/code/modules/projectiles/guns/launcher/crossbow.dm @@ -26,7 +26,7 @@ item_state = "bolt" /obj/item/weapon/arrow/quill - name = "vox quill" + name = "alien quill" desc = "A wickedly barbed quill from some bizarre animal." icon = 'icons/obj/weapons.dmi' icon_state = "quill" @@ -116,7 +116,7 @@ //double check that the user hasn't removed the bolt in the meantime if(!(bolt && tension && loc == current_user)) return - + tension++ update_icon() diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index 4f72eff5009..747a8294b84 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -6,7 +6,7 @@ embed = 1 //the dart is shot fast enough to pierce space suits, so I guess splintering inside the target can be a thing. Should be rare due to low damage. var/reagent_amount = 15 kill_count = 15 //shorter range - + muzzle_type = null /obj/item/projectile/bullet/chemdart/New() @@ -194,13 +194,3 @@ unload_ammo(usr) src.updateUsrDialog() return - -/obj/item/weapon/gun/projectile/dartgun/vox - name = "alien dart gun" - desc = "A small gas-powered dartgun, fitted for nonhuman hands." - -/obj/item/weapon/gun/projectile/dartgun/vox/medical - starting_chems = list("kelotane","bicaridine","anti_toxin") - -/obj/item/weapon/gun/projectile/dartgun/vox/raider - starting_chems = list("space_drugs","stoxin","impedrezene") diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 45e8910b38c..9fcc709ba05 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -32,8 +32,6 @@ var/options = list("robot", "slime") for(var/t in all_species) options += t - options -= "Xenomorph Queen" - options -= "Xenomorph" if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.species) diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index 625568bbf14..da346d2eb71 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -112,7 +112,7 @@ // Splatter anything under us that survived the explosion. if(value != SD_EMPTY_TILE && T.contents.len) for(var/atom/movable/AM in T) - if(AM.simulated && !istype(AM, /mob/dead)) + if(AM.simulated && !istype(AM, /mob/observer)) qdel(AM) // Also spawn doors and loot. @@ -173,7 +173,7 @@ else var/list/candidates = list() for(var/client/player in clients) - if(player.mob && istype(player.mob, /mob/dead/observer)) + if(player.mob && istype(player.mob, /mob/observer/dead)) candidates |= player if(!candidates.len) diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm index f1d7d02637a..72d52ae4d07 100644 --- a/code/modules/random_map/random_map.dm +++ b/code/modules/random_map/random_map.dm @@ -68,13 +68,11 @@ var/global/list/map_count = list() if(!do_not_announce) admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG) /datum/random_map/proc/get_map_cell(var/x,var/y) - if(!islist(map)) + if(!map) set_map_size() - var/cell = ((y-1)*limit_x)+x - if((cell < 1) || (cell > map.len)) + . = ((y-1)*limit_x)+x + if((. < 1) || (. > map.len)) return null - else - return cell /datum/random_map/proc/get_map_char(var/value) switch(value) diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 818b93b681d..89aa9b76f3a 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -397,7 +397,7 @@ R.touch_turf(target) return -/datum/reagents/proc/trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. +/datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. if(!target) return diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 498dcbed103..47d03e59748 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -345,7 +345,7 @@ // Juices -/datum/reagent/drink/banana +/datum/reagent/drink/juice/banana name = "Banana Juice" id = "banana" description = "The raw essence of a banana." @@ -355,7 +355,7 @@ glass_name = "glass of banana juice" glass_desc = "The raw essence of a banana. HONK!" -/datum/reagent/drink/berryjuice +/datum/reagent/drink/juice/berry name = "Berry Juice" id = "berryjuice" description = "A delicious blend of several different kinds of berries." @@ -365,7 +365,7 @@ glass_name = "glass of berry juice" glass_desc = "Berry juice. Or maybe it's jam. Who cares?" -/datum/reagent/drink/carrotjuice +/datum/reagent/drink/juice/carrot name = "Carrot juice" id = "carrotjuice" description = "It is just like a carrot but without crunching." @@ -375,11 +375,11 @@ glass_name = "glass of carrot juice" glass_desc = "It is just like a carrot but without crunching." -/datum/reagent/drink/carrotjuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) +/datum/reagent/drink/juice/carrot/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() M.reagents.add_reagent("imidazoline", removed * 0.2) -/datum/reagent/drink/grapejuice +/datum/reagent/drink/juice/ name = "Grape Juice" id = "grapejuice" description = "It's grrrrrape!" @@ -389,7 +389,7 @@ glass_name = "glass of grape juice" glass_desc = "It's grrrrrape!" -/datum/reagent/drink/lemonjuice +/datum/reagent/drink/juice/lemon name = "Lemon Juice" id = "lemonjuice" description = "This juice is VERY sour." @@ -399,7 +399,7 @@ glass_name = "glass of lemon juice" glass_desc = "Sour..." -/datum/reagent/drink/limejuice +/datum/reagent/drink/juice/lime name = "Lime Juice" id = "limejuice" description = "The sweet-sour juice of limes." @@ -409,13 +409,13 @@ glass_name = "glass of lime juice" glass_desc = "A glass of sweet-sour lime juice" -/datum/reagent/drink/limejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) +/datum/reagent/drink/juice/lime/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() if(alien == IS_DIONA) return M.adjustToxLoss(-0.5 * removed) -/datum/reagent/drink/orangejuice +/datum/reagent/drink/juice/orange name = "Orange juice" id = "orangejuice" description = "Both delicious AND rich in Vitamin C, what more do you need?" @@ -442,7 +442,7 @@ glass_name = "glass of poison berry juice" glass_desc = "A glass of deadly juice." -/datum/reagent/drink/potato_juice +/datum/reagent/drink/juice/potato name = "Potato Juice" id = "potato" description = "Juice of the potato. Bleh." @@ -453,7 +453,7 @@ glass_name = "glass of potato juice" glass_desc = "Juice from a potato. Bleh." -/datum/reagent/drink/tomatojuice +/datum/reagent/drink/juice/tomato name = "Tomato Juice" id = "tomatojuice" description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?" @@ -463,13 +463,13 @@ glass_name = "glass of tomato juice" glass_desc = "Are you sure this is tomato juice?" -/datum/reagent/drink/tomatojuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) +/datum/reagent/drink/juice/tomato/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() if(alien == IS_DIONA) return M.heal_organ_damage(0, 0.5 * removed) -/datum/reagent/drink/watermelonjuice +/datum/reagent/drink/juice/watermelon name = "Watermelon Juice" id = "watermelonjuice" description = "Delicious juice made from watermelon." @@ -674,7 +674,7 @@ cup_name = "cup of hot chocolate" cup_desc = "Made with love! And cocoa beans." -/datum/reagent/drink/sodawater +/datum/reagent/drink/soda/sodawater name = "Soda Water" id = "sodawater" description = "A can of club soda. Why not make a scotch and soda?" @@ -687,7 +687,7 @@ glass_name = "glass of soda water" glass_desc = "Soda water. Why not make a scotch and soda?" -/datum/reagent/drink/grapesoda +/datum/reagent/drink/soda/grapesoda name = "Grape Soda" id = "grapesoda" description = "Grapes made into a fine drank." @@ -698,7 +698,7 @@ glass_name = "glass of grape soda" glass_desc = "Looks like a delicious drink!" -/datum/reagent/drink/tonic +/datum/reagent/drink/soda/tonic name = "Tonic Water" id = "tonic" description = "It tastes strange but at least the quinine keeps the Space Malaria at bay." @@ -712,7 +712,7 @@ glass_name = "glass of tonic water" glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." -/datum/reagent/drink/lemonade +/datum/reagent/drink/soda/lemonade name = "Lemonade" description = "Oh the nostalgia..." id = "lemonade" @@ -723,7 +723,7 @@ glass_name = "glass of lemonade" glass_desc = "Oh the nostalgia..." -/datum/reagent/drink/kiraspecial +/datum/reagent/drink/soda/kiraspecial name = "Kira Special" description = "Long live the guy who everyone had mistaken for a girl. Baka!" id = "kiraspecial" @@ -735,7 +735,7 @@ glass_desc = "Long live the guy who everyone had mistaken for a girl. Baka!" glass_center_of_mass = list("x"=16, "y"=12) -/datum/reagent/drink/brownstar +/datum/reagent/drink/soda/brownstar name = "Brown Star" description = "It's not what it sounds like..." id = "brownstar" @@ -774,7 +774,7 @@ ..() M.make_jittery(5) -/datum/reagent/drink/nuka_cola +/datum/reagent/drink/soda/nuka_cola name = "Nuka Cola" id = "nuka_cola" description = "Cola, cola never changes." @@ -806,7 +806,7 @@ glass_desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks." glass_center_of_mass = list("x"=17, "y"=6) -/datum/reagent/drink/space_cola +/datum/reagent/drink/soda/space_cola name = "Space Cola" id = "cola" description = "A refreshing beverage." @@ -819,7 +819,7 @@ glass_name = "glass of Space Cola" glass_desc = "A glass of refreshing Space Cola" -/datum/reagent/drink/spacemountainwind +/datum/reagent/drink/soda/spacemountainwind name = "Mountain Wind" id = "spacemountainwind" description = "Blows right through you like a space wind." @@ -832,7 +832,7 @@ glass_name = "glass of Space Mountain Wind" glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." -/datum/reagent/drink/dr_gibb +/datum/reagent/drink/soda/dr_gibb name = "Dr. Gibb" id = "dr_gibb" description = "A delicious blend of 42 different flavours" @@ -844,7 +844,7 @@ glass_name = "glass of Dr. Gibb" glass_desc = "Dr. Gibb. Not as dangerous as the name might imply." -/datum/reagent/drink/space_up +/datum/reagent/drink/soda/space_up name = "Space-Up" id = "space_up" description = "Tastes like a hull breach in your mouth." @@ -855,7 +855,7 @@ glass_name = "glass of Space-up" glass_desc = "Space-up. It helps keep your cool." -/datum/reagent/drink/lemon_lime +/datum/reagent/drink/soda/lemon_lime name = "Lemon Lime" description = "A tangy substance made of 0.5% natural citrus!" id = "lemon_lime" @@ -1124,7 +1124,7 @@ glass_desc = "A glass of sake." glass_center_of_mass = list("x"=16, "y"=12) -/datum/reagent/ethanol/tequilla +/datum/reagent/ethanol/tequila name = "Tequila" id = "tequilla" description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?" @@ -1132,7 +1132,7 @@ strength = 25 glass_icon_state = "tequillaglass" - glass_name = "glass of Tequilla" + glass_name = "glass of Tequila" glass_desc = "Now all that's missing is the weird colored shades!" glass_center_of_mass = list("x"=16, "y"=12) @@ -1893,7 +1893,7 @@ strength = 25 glass_icon_state = "tequillasunriseglass" - glass_name = "glass of Tequilla Sunrise" + glass_name = "glass of Tequila Sunrise" glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." /datum/reagent/ethanol/threemileisland diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index 2e8c8990d0e..c3cb7b4d2b4 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -66,7 +66,7 @@ O.color = color /datum/reagent/paint/touch_mob(var/mob/M) - if(istype(M) && !istype(M, /mob/dead)) //painting ghosts: not allowed + if(istype(M) && !istype(M, /mob/observer)) //painting ghosts: not allowed M.color = color //maybe someday change this to paint only clothes and exposed body parts for human mobs. /datum/reagent/paint/get_data() diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 112887fa5d4..8a6d50ab299 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -178,11 +178,8 @@ W.visible_message("The fungi are completely dissolved by the solution!") /datum/reagent/toxin/plantbgone/touch_obj(var/obj/O, var/volume) - if(istype(O, /obj/effect/alien/weeds/)) - var/obj/effect/alien/weeds/alien_weeds = O - alien_weeds.health -= rand(15, 35) - alien_weeds.healthcheck() - else if(istype(O, /obj/effect/plant)) + ..() + if(istype(O, /obj/effect/plant)) qdel(O) /datum/reagent/toxin/plantbgone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 7c19f425651..8146069f5c2 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -321,9 +321,9 @@ /datum/chemical_reaction/dexalin name = "Dexalin" id = "dexalin" - result = "dexalin" + result = "dexalin" required_reagents = list("oxygen" = 2, "phoron" = 0.1) - catalysts = list("phoron" = 1) + catalysts = list("phoron" = 1) inhibitors = list("water" = 1) // Messes with cryox result_amount = 1 @@ -594,7 +594,6 @@ /datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume) var/datum/effect/effect/system/reagents_explosion/e = new() e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0) - e.holder_damage(holder.my_atom) if(isliving(holder.my_atom)) e.amount *= 0.5 var/mob/living/L = holder.my_atom @@ -660,7 +659,6 @@ /datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume) var/datum/effect/effect/system/reagents_explosion/e = new() e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0) - e.holder_damage(holder.my_atom) if(isliving(holder.my_atom)) e.amount *= 0.5 var/mob/living/L = holder.my_atom @@ -1484,15 +1482,15 @@ name = "Iced Tea" id = "icetea" result = "icetea" - required_reagents = list("ice" = 1, "tea" = 4) - result_amount = 4 + required_reagents = list("ice" = 1, "tea" = 2) + result_amount = 3 /datum/chemical_reaction/icecoffee name = "Iced Coffee" id = "icecoffee" result = "icecoffee" - required_reagents = list("ice" = 1, "coffee" = 4) - result_amount = 4 + required_reagents = list("ice" = 1, "coffee" = 2) + result_amount = 3 /datum/chemical_reaction/nuka_cola name = "Nuka Cola" @@ -1641,8 +1639,8 @@ name = "Pan-Galactic Gargle Blaster" id = "gargleblaster" result = "gargleblaster" - required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) - result_amount = 5 + required_reagents = list("vodka" = 2, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1) + result_amount = 6 /datum/chemical_reaction/brave_bull name = "Brave Bull" diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm index 4caf08cc31f..a99c9cdf248 100644 --- a/code/modules/reagents/reagent_containers/food.dm +++ b/code/modules/reagents/reagent_containers/food.dm @@ -13,12 +13,12 @@ /obj/item/weapon/reagent_containers/food/New() ..() - if (isnull(center_of_mass) && !pixel_x && !pixel_y) + if (center_of_mass.len && !pixel_x && !pixel_y) src.pixel_x = rand(-6.0, 6) //Randomizes postion src.pixel_y = rand(-6.0, 6) /obj/item/weapon/reagent_containers/food/afterattack(atom/A, mob/user, proximity, params) - if(proximity && params && istype(A, /obj/structure/table) && center_of_mass.len) + if(center_of_mass.len && proximity && params && istype(A, /obj/structure/table)) //Places the item on a grid var/list/mouse_control = params2list(params) diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm index ca9d7ca95d8..d449d251952 100644 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ b/code/modules/reagents/reagent_containers/food/condiment.dm @@ -42,6 +42,8 @@ var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this) user << "You add [trans] units of the condiment to \the [target]." + else + ..() feed_sound(var/mob/user) playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1) @@ -128,7 +130,7 @@ possible_transfer_amounts = list(1,20) amount_per_transfer_from_this = 1 volume = 20 - center_of_mass = null + center_of_mass = list() on_reagent_change() return /obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index 072a21f7776..63a467dcfde 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -39,6 +39,11 @@ center_of_mass = R.glass_center_of_mass else center_of_mass = list("x"=16, "y"=10) + + if(R.price_tag) + price_tag = R.price_tag + else + price_tag = null else icon_state = "glass_empty" name = "glass" @@ -78,6 +83,11 @@ else center_of_mass = list("x"=16, "y"=16) + if(R.price_tag) + price_tag = R.price_tag + else + price_tag = null + else icon_state = "cup_empty" name = "coffee cup" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 49b106a5343..d68be94b9ba 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -209,7 +209,7 @@ /obj/structure/reagent_dispensers/beerkeg name = "beer keg" - desc = "A beer keg" + desc = "A beer keg." icon = 'icons/obj/objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 @@ -217,6 +217,12 @@ ..() reagents.add_reagent("beer",1000) +/obj/structure/reagent_dispensers/beerkeg/fakenuke + name = "nuclear beer keg" + desc = "A beer keg in the form of a nuclear bomb! An absolute blast at parties!" + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nuclearbomb0" + /obj/structure/reagent_dispensers/virusfood name = "Virus Food Dispenser" desc = "A dispenser of virus food." diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 33f4a948c27..05b8a82f2f1 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1069,6 +1069,20 @@ CIRCUITS BELOW build_path = /obj/item/weapon/circuitboard/biogenerator sort_string = "KBAAA" +/datum/design/circuit/miningdrill + name = "mining drill head" + id = "mining drill head" + req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + build_path = /obj/item/weapon/circuitboard/miningdrill + sort_string = "KCAAA" + +/datum/design/circuit/miningdrillbrace + name = "mining drill brace" + id = "mining drill brace" + req_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1) + build_path = /obj/item/weapon/circuitboard/miningdrillbrace + sort_string = "KCAAB" + /datum/design/circuit/comconsole name = "communications console" id = "comconsole" diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index c6cbff24966..ccf20c0ce7d 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -9,8 +9,8 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/r_n_d/destructive_analyzer name = "destructive analyzer" icon_state = "d_analyzer" - var/obj/item/weapon/loaded_item = null - var/decon_mod = 0 + var/obj/item/weapon/loaded_item = null + var/decon_mod = 0 use_power = 1 idle_power_usage = 30 @@ -39,7 +39,7 @@ Note: Must be placed within 3 tiles of the R&D Console else icon_state = "d_analyzer" -/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob) +/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/item/O as obj, var/mob/user as mob) if(busy) user << "\The [src] is busy right now." return @@ -61,7 +61,7 @@ Note: Must be placed within 3 tiles of the R&D Console if(!linked_console) user << "\The [src] must be linked to an R&D console first." return - if(istype(O, /obj/item) && !loaded_item) + if(!loaded_item) if(isrobot(user)) //Don't put your module items in there! return if(!O.origin_tech) diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm index 44488817480..f10e3ae472d 100644 --- a/code/modules/research/mechfab_designs.dm +++ b/code/modules/research/mechfab_designs.dm @@ -407,6 +407,12 @@ name = "Cable layer" id = "mech_cable_layer" build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer + +/datum/design/item/mecha/flaregun + name = "Flare launcher" + id = "mecha_flare_gun" + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flare + materials = list(DEFAULT_WALL_MATERIAL = 12500) /datum/design/item/mecha/sleeper name = "Sleeper" diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index efb05b90d75..a5e5a00043d 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -40,12 +40,12 @@ var/list/temp_list if(!id_with_upload.len) temp_list = list() - temp_list = text2list(id_with_upload_string, ";") + temp_list = splittext(id_with_upload_string, ";") for(var/N in temp_list) id_with_upload += text2num(N) if(!id_with_download.len) temp_list = list() - temp_list = text2list(id_with_download_string, ";") + temp_list = splittext(id_with_download_string, ";") for(var/N in temp_list) id_with_download += text2num(N) diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm index 58cfdbb0311..0dd7e46ed8d 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm @@ -44,7 +44,7 @@ /*var/l = lentext(msg) if(findtext(msg," ",l,l+1)==0) msg+=" "*/ - seperate = text2list(msg, " ") + seperate = splittext(msg, " ") for(var/Xa = 1,Xa[user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") - - for(var/obj/item/alien_embryo/A in target) - A.loc = A.loc.loc - - ////////////////////////////////////////////////////////////////// // CHEST INTERNAL ORGAN SURGERY // ////////////////////////////////////////////////////////////////// diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm index b36da37d6f7..5769aa099e5 100644 --- a/code/modules/virus2/admin.dm +++ b/code/modules/virus2/admin.dm @@ -21,7 +21,7 @@ . += "[E.stage]: [E.effect.name]" return {" [name()]
- [list2text(., "
")]
+ [jointext(., "
")] "} /datum/disease2/disease/get_view_variables_options() diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index b6e56d231bb..9af07c48b68 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -210,7 +210,7 @@ var/global/list/virusDB = list() Antigen: [antigens2string(antigen)]
Transmitted By: [spreadtype]
Rate of Progression: [stageprob * 10]
- Species Affected: [list2text(affected_species, ", ")]
+ Species Affected: [jointext(affected_species, ", ")]
"} r += "Symptoms:
" diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm index 71621448612..8d88639db3c 100644 --- a/code/modules/virus2/diseasesplicer.dm +++ b/code/modules/virus2/diseasesplicer.dm @@ -52,7 +52,7 @@ if (memorybank) data["buffer"] = list("name" = (analysed ? memorybank.effect.name : "Unknown Symptom"), "stage" = memorybank.effect.stage) if (species_buffer) - data["species_buffer"] = analysed ? list2text(species_buffer, ", ") : "Unknown Species" + data["species_buffer"] = analysed ? jointext(species_buffer, ", ") : "Unknown Species" if (splicing) data["busy"] = "Splicing..." @@ -65,7 +65,7 @@ if (dish.virus2) if (dish.virus2.affected_species) - data["affected_species"] = dish.analysed ? list2text(dish.virus2.affected_species, ", ") : "Unknown" + data["affected_species"] = dish.analysed ? jointext(dish.virus2.affected_species, ", ") : "Unknown" if (dish.growth >= 50) var/list/effects[0] @@ -109,7 +109,7 @@ d.name = "[memorybank.effect.name] GNA disk (Stage: [memorybank.effect.stage])" d.effect = memorybank else if (species_buffer) - d.name = "[list2text(species_buffer, ", ")] GNA disk" + d.name = "[jointext(species_buffer, ", ")] GNA disk" d.species = species_buffer else if (memorybank) diff --git a/code/stylesheet.dm b/code/stylesheet.dm index d42ac80b7c8..c7b73001135 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -89,7 +89,6 @@ h1.alert, h2.alert {color: #000000;} .soghun {color: #228B22;} .solcom {color: #22228B;} .changeling {color: #800080;} -.vox {color: #AA00AA;} .rough {font-family: "Trebuchet MS", cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} diff --git a/code/world.dm b/code/world.dm index 3fcdf2eb420..136228ccfc6 100644 --- a/code/world.dm +++ b/code/world.dm @@ -452,7 +452,7 @@ var/world_topic_spam_protect_time = world.timeofday if (!text) error("Failed to load config/mods.txt") else - var/list/lines = text2list(text, "\n") + var/list/lines = splittext(text, "\n") for(var/line in lines) if (!line) continue @@ -473,7 +473,7 @@ var/world_topic_spam_protect_time = world.timeofday if (!text) error("Failed to load config/mentors.txt") else - var/list/lines = text2list(text, "\n") + var/list/lines = splittext(text, "\n") for(var/line in lines) if (!line) continue @@ -535,7 +535,7 @@ var/world_topic_spam_protect_time = world.timeofday features += "hosted by [config.hostedby]" if (features) - s += ": [list2text(features, ", ")]" + s += ": [jointext(features, ", ")]" /* does this help? I do not know */ if (src.status != s) diff --git a/html/changelog.html b/html/changelog.html index ccd03fffcd6..0c56f2860a5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,40 @@ -->
+

16 March 2016

+

Datraen updated:

+
    +
  • Harmbaton no longer causes halloss while inactive.
  • +
+

Kelenius updated:

+
    +
  • Potassium and nitroglycerin explosive grenades now work.
  • +
+ +

11 March 2016

+

Datraen updated:

+
    +
  • Adds ckeys, player panel to the antagonists panel.
  • +
  • Fragmentation grenades are no longer launchable.
  • +
  • Adds amount of telecrystals to the set telecrystal verb.
  • +
  • Added a verb to just add to telecrystals.
  • +
+

Kelenius updated:

+
    +
  • Drying rack now has a new sprite.
  • +
  • Beekeeping materials and a honey extractor have been added to hydroponics.
  • +
  • There is now a ten-second delay for carding the AI.
  • +
+

Zuhayr updated:

+
    +
  • Small species now take smaller bites/gulps from food and drink.
  • +
  • Small species are now effected by alchol and toxins twice as much.
  • +
  • blood_volume is now a species-level var and Teshari have lowered blood volume.
  • +
  • Hunger is a species var and Teshari get hungry faster.
  • +
  • Small mobs have a reduced climb delay.
  • +
  • Teshari gain more nutrition from meat.
  • +
+

11 February 2016

Datraen updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 43d42b94371..01df44e3c49 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1,1250 +1,1007 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. --- 2013-01-07: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'tgs': !!python/unicode 'Updated server to tgstation r5200 (November - 26th, 2012), see https://code.google.com/p/tgstation13/source/list - for tg''s changelog.' - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Implants: Explosvie implant, exploding - when victim hears the codephrase you set.' - - !!python/unicode 'rscadd': !!python/unicode 'Implants: Compressed Matter implat, - scan item (making it disappear), inject yourself and recall that item on will!' - - !!python/unicode 'rscadd': !!python/unicode 'Implant removal surgery, with !!FUN!! - results if you mess up it.' - - !!python/unicode 'rscadd': !!python/unicode 'Coats now have pockets again.' - - !!python/unicode 'rscadd': !!python/unicode 'Bash people on tabetops. an windows, - or with stools. Grab people to bash them on tables or windows (better grab for - better hit on windows). Drag stool sprite on you to pick it up, click on it - in hand to make it usual stool again.' - - !!python/unicode 'rscadd': !!python/unicode 'Surgical caps, and new sprites for - bloodbags and fixovein.' - - !!python/unicode 'rscadd': !!python/unicode 'Now some surgery steps will bloody - your hands, Full-body blood coat in case youy mess up spectacualry.' - - !!python/unicode 'rscadd': !!python/unicode 'Ported some crates (Art, Surgery, - Sterile equiplemnt).' - - !!python/unicode 'tweak': !!python/unicode 'Changed contraband crates. Posters - moved to Art Crate, cigs and lipstick ot party crate. Now contraband crate has - illegal booze and illicit drugs.' - - !!python/unicode 'bugfix': !!python/unicode 'Finally got evac party lights' - - !!python/unicode 'bugfix': !!python/unicode 'Now disfigurment,now it WILL happen - when damage is bad enough.' - - !!python/unicode 'experiment': !!python/unicode 'Now if you speak in depressurized - area (less than 10 kPa) only people next to you can hear you. Radios still work - though.' + Cael_Aislinn: + - tgs: Updated server to tgstation r5200 (November 26th, 2012), see https://code.google.com/p/tgstation13/source/list + for tg's changelog. + Chinsky: + - rscadd: 'Implants: Explosvie implant, exploding when victim hears the codephrase + you set.' + - rscadd: 'Implants: Compressed Matter implat, scan item (making it disappear), + inject yourself and recall that item on will!' + - rscadd: Implant removal surgery, with !!FUN!! results if you mess up it. + - rscadd: Coats now have pockets again. + - rscadd: Bash people on tabetops. an windows, or with stools. Grab people to bash + them on tables or windows (better grab for better hit on windows). Drag stool + sprite on you to pick it up, click on it in hand to make it usual stool again. + - rscadd: Surgical caps, and new sprites for bloodbags and fixovein. + - rscadd: Now some surgery steps will bloody your hands, Full-body blood coat in + case youy mess up spectacualry. + - rscadd: Ported some crates (Art, Surgery, Sterile equiplemnt). + - tweak: Changed contraband crates. Posters moved to Art Crate, cigs and lipstick + ot party crate. Now contraband crate has illegal booze and illicit drugs. + - bugfix: Finally got evac party lights + - bugfix: Now disfigurment,now it WILL happen when damage is bad enough. + - experiment: Now if you speak in depressurized area (less than 10 kPa) only people + next to you can hear you. Radios still work though. 2013-01-13: - !!python/unicode 'Chinsky': - - !!python/unicode 'tweak': !!python/unicode 'If you get enough (6) blood drips - on one tile, it''ll turn into a blood puddle. Should make bleeding out more - visible.' - - !!python/unicode 'tweak': !!python/unicode 'Security belt now able to hold taser, - baton and tape roll.' - - !!python/unicode 'tweak': !!python/unicode 'Added alternative security uniform - to Security wardrobes.' - - !!python/unicode 'rscadd': !!python/unicode 'Ported Urist cult runes. Down with - the crayon drawings! Example: http://dl.dropbox.com/u/26846767/images/SS13/255_symbols.PNG' - - !!python/unicode 'bugfix': !!python/unicode 'Engineering tape now require engineer - OR atmos access instead of both.' - - !!python/unicode 'rscadd': !!python/unicode 'Implants now will react to EMP, possibly - in !!FUN!! ways' - !!python/unicode 'GauHelldragon': - - !!python/unicode 'rscadd': !!python/unicode 'Servicebots now have RoboTray and - Printing Pen. Robotray can be used to pick up and drop food/drinks. Printing - pen can alternate between writing mode and rename paper mode by clicking it.' - - !!python/unicode 'rscadd': !!python/unicode 'Farmbots. A new type of robot that - weeds, waters and fertilizes. Use robot arm on water tank. Then use plant analyzer, - mini-hoe, bucket and finally proximity sensor.' - - !!python/unicode 'rscadd': !!python/unicode 'Chefs can clang their serving trays - with a rolling pin. Just like a riot shield!' + Chinsky: + - tweak: If you get enough (6) blood drips on one tile, it'll turn into a blood + puddle. Should make bleeding out more visible. + - tweak: Security belt now able to hold taser, baton and tape roll. + - tweak: Added alternative security uniform to Security wardrobes. + - rscadd: 'Ported Urist cult runes. Down with the crayon drawings! Example: http://dl.dropbox.com/u/26846767/images/SS13/255_symbols.PNG' + - bugfix: Engineering tape now require engineer OR atmos access instead of both. + - rscadd: Implants now will react to EMP, possibly in !!FUN!! ways + GauHelldragon: + - rscadd: Servicebots now have RoboTray and Printing Pen. Robotray can be used to + pick up and drop food/drinks. Printing pen can alternate between writing mode + and rename paper mode by clicking it. + - rscadd: Farmbots. A new type of robot that weeds, waters and fertilizes. Use robot + arm on water tank. Then use plant analyzer, mini-hoe, bucket and finally proximity + sensor. + - rscadd: Chefs can clang their serving trays with a rolling pin. Just like a riot + shield! 2013-01-21: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'bugfix': !!python/unicode 'Satchels and ore boxes can now hold - strange rocks.' - - !!python/unicode 'rscadd': !!python/unicode 'Closets and crates can now be built - out of 5 and 10 plasteel respectively.' - - !!python/unicode 'rscadd': !!python/unicode 'Observers can become mice once more.' + Cael_Aislinn: + - bugfix: Satchels and ore boxes can now hold strange rocks. + - rscadd: Closets and crates can now be built out of 5 and 10 plasteel respectively. + - rscadd: Observers can become mice once more. 2013-01-23: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'tgs': !!python/unicode 'Updated server to tgstation r5200 (November - 26th, 2012), see https://code.google.com/p/tgstation13/source/list - for tg''s changelog.' + Cael_Aislinn: + - tgs: Updated server to tgstation r5200 (November 26th, 2012), see https://code.google.com/p/tgstation13/source/list + for tg's changelog. 2013-01-31: - !!python/unicode 'CIB': - - !!python/unicode 'bugfix': !!python/unicode 'Chilis and cold chilis no longer - kill in small amounts' - - !!python/unicode 'bugfix': !!python/unicode 'Chloral now again needs around 5 - units to start killing somebody' + CIB: + - bugfix: Chilis and cold chilis no longer kill in small amounts + - bugfix: Chloral now again needs around 5 units to start killing somebody 2013-02-13: - !!python/unicode 'Erthilo': - - !!python/unicode 'bugfix': !!python/unicode 'Fixed SSD (logged-out) players not - staying asleep.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed set-pose verb and mice emotes - having extra periods.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed virus crate not appearing and - breaking supply shuttle.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed newcaster photos not being - censored.' + Erthilo: + - bugfix: Fixed SSD (logged-out) players not staying asleep. + - bugfix: Fixed set-pose verb and mice emotes having extra periods. + - bugfix: Fixed virus crate not appearing and breaking supply shuttle. + - bugfix: Fixed newcaster photos not being censored. 2013-02-14: - !!python/unicode 'CIB': - - !!python/unicode 'rscadd': !!python/unicode 'Medical side-effects(patients are - going to come back for secondary treatment)' - - !!python/unicode 'rscadd': !!python/unicode 'NT loyalty setting(affects command - reports and gives antags hints who might collaborate with them)' - - !!python/unicode 'tweak': !!python/unicode 'Simple animal balance fixes(They''re - slower now)' - !!python/unicode 'CaelAislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Re-added old ion storm laws, re-added - grid check event.' - - !!python/unicode 'rscadd': !!python/unicode 'Added Rogue Drone and Vermin Infestation - random events.' - - !!python/unicode 'rscadd': !!python/unicode 'Added/fixed space vines random event.' - - !!python/unicode 'tweak': !!python/unicode 'Updates to the virus events.' - - !!python/unicode 'tweak': !!python/unicode 'Spider infestation and alien infestation - events turned off by default.' - - !!python/unicode 'tweak': !!python/unicode 'Soghun, taj and skrell all have unique - language text colours.' - - !!python/unicode 'tweak': !!python/unicode 'Moderators will no longer be listed - in adminwho, instead use modwho.' - !!python/unicode 'Gamerofthegame': - - !!python/unicode 'rscadd': !!python/unicode 'Miscellaneous mapfixes.' + CIB: + - rscadd: Medical side-effects(patients are going to come back for secondary treatment) + - rscadd: NT loyalty setting(affects command reports and gives antags hints who + might collaborate with them) + - tweak: Simple animal balance fixes(They're slower now) + CaelAislinn: + - rscadd: Re-added old ion storm laws, re-added grid check event. + - rscadd: Added Rogue Drone and Vermin Infestation random events. + - rscadd: Added/fixed space vines random event. + - tweak: Updates to the virus events. + - tweak: Spider infestation and alien infestation events turned off by default. + - tweak: Soghun, taj and skrell all have unique language text colours. + - tweak: Moderators will no longer be listed in adminwho, instead use modwho. + Gamerofthegame: + - rscadd: Miscellaneous mapfixes. 2013-02-18: - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Security bots will now target hostile - mobs, and vice versa.' - - !!python/unicode 'tweak': !!python/unicode 'Carp should actually emigrate now, - instead of just immigrating then squatting around the outer hull.' - - !!python/unicode 'tweak': !!python/unicode 'Admins and moderators have been split - up into separate ''who'' verbs (adminwho and modwho respectively).' + Cael Aislinn: + - rscadd: Security bots will now target hostile mobs, and vice versa. + - tweak: Carp should actually emigrate now, instead of just immigrating then squatting + around the outer hull. + - tweak: Admins and moderators have been split up into separate 'who' verbs (adminwho + and modwho respectively). 2013-02-20: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Added new surgery: putting items - inside people. After you use retractor to keep incision open, just click with - any item to put it inside. But be wary, if you try to fit something too big, - you might rip the veins. To remove items, use implant removal surgery.' - - !!python/unicode 'rscadd': !!python/unicode 'Crowbar can be used as alternative - to retractor.' - - !!python/unicode 'rscadd': !!python/unicode 'Can now unload guns by clicking them - in hand.' - - !!python/unicode 'tweak': !!python/unicode 'Fixed distance calculation in bullet - missing chance computation, it was always assuming 1 or 0 tiles. Now distace - REALLY matters when you shoot.' - - !!python/unicode 'rscadd': !!python/unicode 'To add more FUN to previous thing, - bullets missed to not disappear but keep going until they hit something else.' - - !!python/unicode 'bugfix': !!python/unicode 'Compressed Matter and Explosive implants - spawn properly now.' - - !!python/unicode 'tweak': !!python/unicode 'Tweaks to medical effects: removed - itch caused by bandages. Chemical effects now have non-100 chance of appearing, - the stronger medicine, the more probality it''ll have side effects.' + Chinsky: + - rscadd: 'Added new surgery: putting items inside people. After you use retractor + to keep incision open, just click with any item to put it inside. But be wary, + if you try to fit something too big, you might rip the veins. To remove items, + use implant removal surgery.' + - rscadd: Crowbar can be used as alternative to retractor. + - rscadd: Can now unload guns by clicking them in hand. + - tweak: Fixed distance calculation in bullet missing chance computation, it was + always assuming 1 or 0 tiles. Now distace REALLY matters when you shoot. + - rscadd: To add more FUN to previous thing, bullets missed to not disappear but + keep going until they hit something else. + - bugfix: Compressed Matter and Explosive implants spawn properly now. + - tweak: 'Tweaks to medical effects: removed itch caused by bandages. Chemical effects + now have non-100 chance of appearing, the stronger medicine, the more probality + it''ll have side effects.' 2013-02-22: - !!python/unicode 'Chinsky': - - !!python/unicode 'tweak': !!python/unicode 'Change to body cavity surgery. Can - only put items in chest, groind and head. Max size for item - 3 (chest), 2 (groin), - 1 (head). For chest surgery ribs should be bent open, (lung surgery until second - scalpel step). Surgery step needs preparation step, with drill. After that you - can place item inside, or seal it with cautery to do other step instead.' + Chinsky: + - tweak: Change to body cavity surgery. Can only put items in chest, groind and + head. Max size for item - 3 (chest), 2 (groin), 1 (head). For chest surgery + ribs should be bent open, (lung surgery until second scalpel step). Surgery + step needs preparation step, with drill. After that you can place item inside, + or seal it with cautery to do other step instead. 2013-02-23: - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'wip': !!python/unicode 'RUST machinery components should now - be researchable (with high requirements) and orderable through QM (with high - cost).' - - !!python/unicode 'wip': !!python/unicode 'Shield machinery should now be researchable - (with high requirements) and orderable through QM (with high cost). This one - is reportedly buggy.' - - !!python/unicode 'tweak': !!python/unicode 'Rogue vending machines should revert - back to normal at the end of the event.' - - !!python/unicode 'rscadd': !!python/unicode 'New Unathi hair styles.' + Cael Aislinn: + - wip: RUST machinery components should now be researchable (with high requirements) + and orderable through QM (with high cost). + - wip: Shield machinery should now be researchable (with high requirements) and + orderable through QM (with high cost). This one is reportedly buggy. + - tweak: Rogue vending machines should revert back to normal at the end of the event. + - rscadd: New Unathi hair styles. 2013-02-25: - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'As well as building hull shield generators, - normal shield gens can now be built (see http://baystation12.net/forums/viewtopic.php?f=1&t;=6993).' - - !!python/unicode 'rscadd': !!python/unicode 'New random events: multiple new system - wide-events have been have been added to the newscaster feeds, some not quite - as respectable as others.' - - !!python/unicode 'rscadd': !!python/unicode 'New random event: some lucky winners - will win the TC Daily Grand Slam Lotto, while others may be the target of malicious - hackers.' + Cael Aislinn: + - rscadd: As well as building hull shield generators, normal shield gens can now + be built (see http://baystation12.net/forums/viewtopic.php?f=1&t;=6993). + - rscadd: 'New random events: multiple new system wide-events have been have been + added to the newscaster feeds, some not quite as respectable as others.' + - rscadd: 'New random event: some lucky winners will win the TC Daily Grand Slam + Lotto, while others may be the target of malicious hackers.' 2013-02-27: - !!python/unicode 'Gamerofthegame': - - !!python/unicode 'rscadd': !!python/unicode 'Added the (base gear) ERT preset - for the debug command.' - - !!python/unicode 'rscadd': !!python/unicode 'Map fixes, Virology hole fixed. Atmospheric - fixes for mining and, to a less extent, the science outpost. (No, not cycling - airlocks)' - - !!python/unicode 'rscadd': !!python/unicode 'Fiddled with the ERT set up location - on Centcom. Radmins will now have a even easier time equiping a team of any - real pratical size, especially coupled with the above debug command.' + Gamerofthegame: + - rscadd: Added the (base gear) ERT preset for the debug command. + - rscadd: Map fixes, Virology hole fixed. Atmospheric fixes for mining and, to a + less extent, the science outpost. (No, not cycling airlocks) + - rscadd: Fiddled with the ERT set up location on Centcom. Radmins will now have + a even easier time equiping a team of any real pratical size, especially coupled + with the above debug command. 2013-03-05: - !!python/unicode 'CIB': - - !!python/unicode 'rscadd': !!python/unicode 'Added internal organs. They''re currently - all located in the chest. Use advanced scanner to detect damage. Use the same - surgery as for ruptured lungs to fix them.' - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'soundadd': !!python/unicode 'Set roundstart music to randomly - choose between space.ogg and traitor.ogg (see http://baystation12.net/forums/viewtopic.php?f=5&t;=6972)' - - !!python/unicode 'experiment': !!python/unicode 'All RUST components except for - TEGs (which generate the power) are now obtainable ingame, bored engineers should - get hold of them and setup an experimental reactor for testing purposes.' + CIB: + - rscadd: Added internal organs. They're currently all located in the chest. Use + advanced scanner to detect damage. Use the same surgery as for ruptured lungs + to fix them. + Cael Aislinn: + - soundadd: Set roundstart music to randomly choose between space.ogg and traitor.ogg + (see http://baystation12.net/forums/viewtopic.php?f=5&t;=6972) + - experiment: All RUST components except for TEGs (which generate the power) are + now obtainable ingame, bored engineers should get hold of them and setup an + experimental reactor for testing purposes. 2013-03-06: - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Type 1 thermoelectric generators - and the associated binary circulators are now moveable (wrench to secure/unsecure) - and orderable via Quartermaster.' - - !!python/unicode 'wip': !!python/unicode 'code/maps/rust_test.dmm contains an - example setup for a functional RUST reactor. Maximum output is in the range - of 12 to 20MW (12 to 20 million watts).' - - !!python/unicode 'bugfix': !!python/unicode 'Removed double announcement for gridchecks, - reduced duration of gridchecks.' - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'You can now stab people with syringes - using the "harm" intent. This destroys the syringe and transfers a random percentage - of its contents into the target. Armor has a 50% chance of blocking the syringe.' + Cael Aislinn: + - rscadd: Type 1 thermoelectric generators and the associated binary circulators + are now moveable (wrench to secure/unsecure) and orderable via Quartermaster. + - wip: code/maps/rust_test.dmm contains an example setup for a functional RUST reactor. + Maximum output is in the range of 12 to 20MW (12 to 20 million watts). + - bugfix: Removed double announcement for gridchecks, reduced duration of gridchecks. + RavingManiac: + - rscadd: You can now stab people with syringes using the "harm" intent. This destroys + the syringe and transfers a random percentage of its contents into the target. + Armor has a 50% chance of blocking the syringe. 2013-03-09: - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'rscadd': !!python/unicode "Beekeeping is now possible. Construct\ - \ an apiary of out wood and embed it into a hydroponics tray, then get a queen\ - \ bee and bottle of BeezEez from cargo bay. \n\t\tHives produce honey and honeycomb,\ - \ but be wary if the bees start swarming." + Cael Aislinn: + - rscadd: "Beekeeping is now possible. Construct an apiary of out wood and embed\ + \ it into a hydroponics tray, then get a queen bee and bottle of BeezEez from\ + \ cargo bay. \n\t\tHives produce honey and honeycomb, but be wary if the bees\ + \ start swarming." 2013-03-11: - !!python/unicode 'CIB': - - !!python/unicode 'rscadd': !!python/unicode 'Cloning now requires you to put slabs - of meat into the cloning pod to replenish biomass.' - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'wip': !!python/unicode 'The xenoarchaeology update is here. - This includes a major content overhaul and a bunch of new features for xenoarchaeology.' - - !!python/unicode 'tweak': !!python/unicode 'Digsites (strange rock deposits) are - now much more nuanced and interesting, and a huge number of minor (non-artifact) - finds have been added.' - - !!python/unicode 'rscadd': !!python/unicode 'Excavation is now a complex process - that involves digging into the rock to the right depth.' - - !!python/unicode 'rscadd': !!python/unicode 'Chemical analysis is required for - safe excavation of the digsites, in order to determine how best to extract the - finds.' - - !!python/unicode 'bugfix': !!python/unicode 'Anomalous artifacts have been overhauled - and many longstanding bugs with existing effects have been fixed - the anomaly - utiliser should now work much more often.' - - !!python/unicode 'rscadd': !!python/unicode 'Numerous new artifact effects have - been added and some new artifact types can be dug up from the asteroid.' - - !!python/unicode 'rscadd': !!python/unicode 'New tools and equipment have been - added, including normal and spaceworthy versions of the anomaly suits, excavation - tools and other neat gadgets.' - - !!python/unicode 'rscadd': !!python/unicode 'Five books have been written by subject - matter experts from around the galaxy to help the crew of the Exodus come to - grips with this exacting new science (over 3000 words of tutorials!).' - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Sec HUDs now can see short versions - of sec records.on examine. Med HUDs do same for medical records, and can set - medical status of patient.' - - !!python/unicode 'rscadd': !!python/unicode 'Damage to the head can now cause - brain damage.' + CIB: + - rscadd: Cloning now requires you to put slabs of meat into the cloning pod to + replenish biomass. + Cael Aislinn: + - wip: The xenoarchaeology update is here. This includes a major content overhaul + and a bunch of new features for xenoarchaeology. + - tweak: Digsites (strange rock deposits) are now much more nuanced and interesting, + and a huge number of minor (non-artifact) finds have been added. + - rscadd: Excavation is now a complex process that involves digging into the rock + to the right depth. + - rscadd: Chemical analysis is required for safe excavation of the digsites, in + order to determine how best to extract the finds. + - bugfix: Anomalous artifacts have been overhauled and many longstanding bugs with + existing effects have been fixed - the anomaly utiliser should now work much + more often. + - rscadd: Numerous new artifact effects have been added and some new artifact types + can be dug up from the asteroid. + - rscadd: New tools and equipment have been added, including normal and spaceworthy + versions of the anomaly suits, excavation tools and other neat gadgets. + - rscadd: Five books have been written by subject matter experts from around the + galaxy to help the crew of the Exodus come to grips with this exacting new science + (over 3000 words of tutorials!). + Chinsky: + - rscadd: Sec HUDs now can see short versions of sec records.on examine. Med HUDs + do same for medical records, and can set medical status of patient. + - rscadd: Damage to the head can now cause brain damage. 2013-03-14: - !!python/unicode 'Spamcat': - - !!python/unicode 'rscadd': !!python/unicode 'Figured I should make one of these. - Syringestabbing now produces a broken syringe complete with fingerprints of - attacker and blood of a victim, so dispose your evidence carefully. Maximum - transfer amount per stab is lowered to 10.' + Spamcat: + - rscadd: Figured I should make one of these. Syringestabbing now produces a broken + syringe complete with fingerprints of attacker and blood of a victim, so dispose + your evidence carefully. Maximum transfer amount per stab is lowered to 10. 2013-03-15: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Mapped a compact research base on - the mining asteroid, with multiple labs and testing rooms. It''s reachable through - a new (old) shuttle dock that leaves from the research wing on the main station.' + Cael_Aislinn: + - rscadd: Mapped a compact research base on the mining asteroid, with multiple labs + and testing rooms. It's reachable through a new (old) shuttle dock that leaves + from the research wing on the main station. 2013-03-26: - !!python/unicode 'Spamcat': - - !!python/unicode 'bugfix': !!python/unicode 'Chemmaster now puts pills in pill - bottles (if one is inserted).' - - !!python/unicode 'tweak': !!python/unicode 'Stabbing someone with a syringe now - deals 3 damage instead of 7 because 7 is like, a crowbar punch.' - - !!python/unicode 'bugfix': !!python/unicode 'Lizards can now join mid-round again.' - - !!python/unicode 'rscadd': !!python/unicode 'Chemicals in bloodstream will transfer - with blood now, so don''t get drunk before your blood donation. Viruses and - antibodies transfer through blood too.' - - !!python/unicode 'bugfix': !!python/unicode 'Virology is working again.' + Spamcat: + - bugfix: Chemmaster now puts pills in pill bottles (if one is inserted). + - tweak: Stabbing someone with a syringe now deals 3 damage instead of 7 because + 7 is like, a crowbar punch. + - bugfix: Lizards can now join mid-round again. + - rscadd: Chemicals in bloodstream will transfer with blood now, so don't get drunk + before your blood donation. Viruses and antibodies transfer through blood too. + - bugfix: Virology is working again. 2013-03-27: - !!python/unicode 'Asanadas': - - !!python/unicode 'tweak': !!python/unicode 'The Null Rod has recovered its de-culting - ability, for balance reasons. Metagaming with it is a big no-no!' - - !!python/unicode 'rscadd': !!python/unicode 'Holy Water as a liquid is able to - de-cult. Less effective, but less bloody. May be changed over the course of - time for balance.' + Asanadas: + - tweak: The Null Rod has recovered its de-culting ability, for balance reasons. + Metagaming with it is a big no-no! + - rscadd: Holy Water as a liquid is able to de-cult. Less effective, but less bloody. + May be changed over the course of time for balance. 2013-04-04: - !!python/unicode 'SkyMarshal': - - !!python/unicode 'bugfix': !!python/unicode 'Fixed ZAS' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed Fire' - !!python/unicode 'Spamcat': - - !!python/unicode 'bugfix': !!python/unicode 'Blood type is now saved in character - creation menu, no need to edit it manually every round.' + SkyMarshal: + - bugfix: Fixed ZAS + - bugfix: Fixed Fire + Spamcat: + - bugfix: Blood type is now saved in character creation menu, no need to edit it + manually every round. 2013-04-09: - !!python/unicode 'SkyMarshal': - - !!python/unicode 'bugfix': !!python/unicode 'Fire Issues (Firedoors, Flamethrowers, - Incendiary Grenades) fixed.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed a bad line of code that was - preventing autoignition of flammable gas mixes.' - - !!python/unicode 'bugfix': !!python/unicode 'Volatile fuel is burned up after - a point.' - - !!python/unicode 'rscdel': !!python/unicode 'Partial-tile firedoors removed. This - is due to ZAS breaking when interacting with them.' + SkyMarshal: + - bugfix: Fire Issues (Firedoors, Flamethrowers, Incendiary Grenades) fixed. + - bugfix: Fixed a bad line of code that was preventing autoignition of flammable + gas mixes. + - bugfix: Volatile fuel is burned up after a point. + - rscdel: Partial-tile firedoors removed. This is due to ZAS breaking when interacting + with them. 2013-04-11: - !!python/unicode 'SkyMarshal': - - !!python/unicode 'experiment': !!python/unicode 'Fire has been reworked.' - - !!python/unicode 'experiment': !!python/unicode 'In-game variable editor is both - readded and expanded with fire controlling capability.' + SkyMarshal: + - experiment: Fire has been reworked. + - experiment: In-game variable editor is both readded and expanded with fire controlling + capability. 2013-04-17: - !!python/unicode 'SkyMarshal': - - !!python/unicode 'experiment': !!python/unicode 'ZAS is now more deadly, as per - decision by administrative team. May be tweaked, but currently AIRFLOW is the - biggest griefer.' - - !!python/unicode 'experiment': !!python/unicode 'World startup optimized, many - functions now delayed until a player joins the server. (Reduces server boot - time significantly)' - - !!python/unicode 'tweak': !!python/unicode 'Zones will now equalize air more rapidly.' - - !!python/unicode 'bugfix': !!python/unicode 'ZAS now respects active magboots - when airflow occurs.' - - !!python/unicode 'bugfix': !!python/unicode 'Airflow will no longer throw you - into doors and open them.' - - !!python/unicode 'bugfix': !!python/unicode 'Race condition in zone construction - has been fixed, so zones connect properly at round start.' - - !!python/unicode 'bugfix': !!python/unicode 'Plasma effects readded.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed runtime involving away mission.' + SkyMarshal: + - experiment: ZAS is now more deadly, as per decision by administrative team. May + be tweaked, but currently AIRFLOW is the biggest griefer. + - experiment: World startup optimized, many functions now delayed until a player + joins the server. (Reduces server boot time significantly) + - tweak: Zones will now equalize air more rapidly. + - bugfix: ZAS now respects active magboots when airflow occurs. + - bugfix: Airflow will no longer throw you into doors and open them. + - bugfix: Race condition in zone construction has been fixed, so zones connect properly + at round start. + - bugfix: Plasma effects readded. + - bugfix: Fixed runtime involving away mission. 2013-04-24: - !!python/unicode 'Jediluke69': - - !!python/unicode 'rscadd': !!python/unicode 'Added 5 new drinks (Kira Special, - Lemonade, Brown Star, Milkshakes, Rewriter)' - - !!python/unicode 'tweak': !!python/unicode 'Nanopaste now heals about half of - what it used to' - - !!python/unicode 'tweak': !!python/unicode 'Ballistic crates should now come with - shotguns loaded with actual shells no more beanbags' - - !!python/unicode 'bugfix': !!python/unicode 'Iced tea no longer makes a glass - of .what?' - !!python/unicode 'NerdyBoy1104': - - !!python/unicode 'rscadd': !!python/unicode 'New Botany additions: Rice and Plastellium. - New sheet material: Plastic.' - - !!python/unicode 'rscadd': !!python/unicode 'Plastellium is refined into plastic - by first grinding the produce to get plasticide. 20 plasticide + 10 polytrinic - acid makes 10 sheets of plastic which can be used to make crates, forks, spoons, - knives, ashtrays or plastic bags from.' - - !!python/unicode 'rscadd': !!python/unicode 'Rice seeds grows into rice stalks - that you grind to get rice. 10 Rice + 5 Water makes boiled rice, 10 rice + 5 - milk makes rice pudding, 10 rice + 5 universal enzyme (in beaker) makes Sake.' - !!python/unicode 'faux': - - !!python/unicode 'imageadd': !!python/unicode 'Mixed Wardrobe Closet now has colored - shoes and plaid skirts.' - - !!python/unicode 'imageadd': !!python/unicode 'Dress uniforms added to the Captain, - RD, and HoP wardrobe closets. A uniform jacket has also been added to the Captain''s - closet. HoS'' hat has been re-added to their closet. I do not love the CMO and - CE enough to give them anything.' - - !!python/unicode 'imageadd': !!python/unicode 'Atheletic closet now has five different - swimsuits *for the ladies* in them. If you are a guy, be prepared to be yelled - at if you run around like a moron in one of these. Same goes for ladies who - run around in shorts with their titties swaying in the space winds.' - - !!python/unicode 'imageadd': !!python/unicode 'A set of dispatcher uniforms will - spawn in the security closet. These are for playtesting the dispatcher role.' - - !!python/unicode 'imageadd': !!python/unicode 'New suit spawns in the laundry - room. It''s for geezer''s only. You''re welcome, Book.' - - !!python/unicode 'imageadd': !!python/unicode 'Nurse outfit variant, orderly uniform, - and first responder jacket will now spawn in the medical wardrobe closet.' - - !!python/unicode 'imageadd': !!python/unicode 'A white wedding dress will spawn - in the chaplain''s closet. There are also several dresses currently only adminspawnable. - Admins: Look either under "bride" or "dress." The bride one leads to the colored - wedding dresses, and there are some other kinds of dresses under dress.' - - !!python/unicode 'tweak': !!python/unicode 'No more luchador masks or boxing gloves - or boxing ring. You guys have a swimming pool now, dip in and enjoy it.' - - !!python/unicode 'tweak': !!python/unicode 'he meeting hall has been replaced - with an awkwardly placed security office meant for prisoner processing.' - - !!python/unicode 'tweak': !!python/unicode 'Added a couple more welding goggles - to engineering since you guys liked those a lot.' - - !!python/unicode 'imageadd': !!python/unicode 'Flasks spawn behind the bar. Only - three. Don''t fight over them. I don''t know how to add them to the bar vending - machine otherwise I would have done that instead. Detective, you have your own - flask in your office, it''s underneath the cigarettes on your desk.' - - !!python/unicode 'tweak': !!python/unicode 'Added two canes to the medical storage, - for people who have leg injuries and can''t walk good and stuff. I do not want - to see doctors pretending to be House. These are for patients. Do not make me - delete this addition and declare you guys not being able to have nice things.' - - !!python/unicode 'tweak': !!python/unicode 'Secondary entance to EVA now directly - leads into the medbay hardsuit section. Sorry for any inconviences this will - cause. The CMO can now fetch the hardsuits whenever they want.' - - !!python/unicode 'tweak': !!python/unicode 'Secondary security hardsuit has been - added to the armory. Security members please stop stealing engineer''s hardsuits - when you guys want to pair up for space travel.' - - !!python/unicode 'tweak': !!python/unicode 'Firelocks have been moved around in - the main hallways to form really ghetto versions of airlocks.' - - !!python/unicode 'tweak': !!python/unicode 'Violin spawns in theatre storage now. - I didn''t put the piano there though, that was someone else.' - - !!python/unicode 'tweak': !!python/unicode 'Psych office in medbay has been made - better looking.' + Jediluke69: + - rscadd: Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter) + - tweak: Nanopaste now heals about half of what it used to + - tweak: Ballistic crates should now come with shotguns loaded with actual shells + no more beanbags + - bugfix: Iced tea no longer makes a glass of .what? + NerdyBoy1104: + - rscadd: 'New Botany additions: Rice and Plastellium. New sheet material: Plastic.' + - rscadd: Plastellium is refined into plastic by first grinding the produce to get + plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which + can be used to make crates, forks, spoons, knives, ashtrays or plastic bags + from. + - rscadd: Rice seeds grows into rice stalks that you grind to get rice. 10 Rice + + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + + 5 universal enzyme (in beaker) makes Sake. + faux: + - imageadd: Mixed Wardrobe Closet now has colored shoes and plaid skirts. + - imageadd: Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A + uniform jacket has also been added to the Captain's closet. HoS' hat has been + re-added to their closet. I do not love the CMO and CE enough to give them anything. + - imageadd: Atheletic closet now has five different swimsuits *for the ladies* in + them. If you are a guy, be prepared to be yelled at if you run around like a + moron in one of these. Same goes for ladies who run around in shorts with their + titties swaying in the space winds. + - imageadd: A set of dispatcher uniforms will spawn in the security closet. These + are for playtesting the dispatcher role. + - imageadd: New suit spawns in the laundry room. It's for geezer's only. You're + welcome, Book. + - imageadd: Nurse outfit variant, orderly uniform, and first responder jacket will + now spawn in the medical wardrobe closet. + - imageadd: 'A white wedding dress will spawn in the chaplain''s closet. There are + also several dresses currently only adminspawnable. Admins: Look either under + "bride" or "dress." The bride one leads to the colored wedding dresses, and + there are some other kinds of dresses under dress.' + - tweak: No more luchador masks or boxing gloves or boxing ring. You guys have a + swimming pool now, dip in and enjoy it. + - tweak: he meeting hall has been replaced with an awkwardly placed security office + meant for prisoner processing. + - tweak: Added a couple more welding goggles to engineering since you guys liked + those a lot. + - imageadd: Flasks spawn behind the bar. Only three. Don't fight over them. I don't + know how to add them to the bar vending machine otherwise I would have done + that instead. Detective, you have your own flask in your office, it's underneath + the cigarettes on your desk. + - tweak: Added two canes to the medical storage, for people who have leg injuries + and can't walk good and stuff. I do not want to see doctors pretending to be + House. These are for patients. Do not make me delete this addition and declare + you guys not being able to have nice things. + - tweak: Secondary entance to EVA now directly leads into the medbay hardsuit section. + Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits + whenever they want. + - tweak: Secondary security hardsuit has been added to the armory. Security members + please stop stealing engineer's hardsuits when you guys want to pair up for + space travel. + - tweak: Firelocks have been moved around in the main hallways to form really ghetto + versions of airlocks. + - tweak: Violin spawns in theatre storage now. I didn't put the piano there though, + that was someone else. + - tweak: Psych office in medbay has been made better looking. 2013-05-14: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'experiment': !!python/unicode 'Depth scanners can now be used - to determine what material archaeological deposits are made of, meaning lab - analysis is no longer required.' - - !!python/unicode 'tweak': !!python/unicode 'Some useability issues with xenoarchaeology - tools have been resolved, and the transit pods cycle automatically now.' + Cael_Aislinn: + - experiment: Depth scanners can now be used to determine what material archaeological + deposits are made of, meaning lab analysis is no longer required. + - tweak: Some useability issues with xenoarchaeology tools have been resolved, and + the transit pods cycle automatically now. 2013-05-15: - !!python/unicode 'Spamcat': - - !!python/unicode 'rscadd': !!python/unicode 'Added telescopic - batons to HoS''s and captain''s lockers. These are quite robust and easily - concealable.' + Spamcat: + - rscadd: Added telescopic batons + to HoS's and captain's lockers. These are quite robust and easily concealable. 2013-05-21: - !!python/unicode 'SkyMarshal': - - !!python/unicode 'experiment': !!python/unicode 'ZAS will now speed air movement - into/out of a zone when unsimulated tiles (e.g. space) are involved, in relation - to the number of tiles.' - - !!python/unicode 'experiment': !!python/unicode 'Portable Canisters will now automatically - connect to any portable connecter beneath them on map load.' - - !!python/unicode 'bugfix': !!python/unicode 'Bug involving mis-mapped disposal - junction fixed' - - !!python/unicode 'bugfix': !!python/unicode 'Air alarms now work for atmos techs - (whoops!)' - - !!python/unicode 'bugfix': !!python/unicode 'The Master Controller now properly - stops atmos when it runtimes.' - - !!python/unicode 'bugfix': !!python/unicode 'Backpacks can no longer be contaminated' - - !!python/unicode 'tweak': !!python/unicode 'ZAS no longer logs air statistics.' - - !!python/unicode 'tweak': !!python/unicode 'ZAS now rebuilds as soon as it detects - a semi-complex change in geometry. (It was doing this already, but in a convoluted - way which was actually less efficient)' - - !!python/unicode 'tweak': !!python/unicode 'General code cleanup/commenting of - ZAS' - - !!python/unicode 'tweak': !!python/unicode 'Jungle now initializes after the random - Z-level loads and atmos initializes.' + SkyMarshal: + - experiment: ZAS will now speed air movement into/out of a zone when unsimulated + tiles (e.g. space) are involved, in relation to the number of tiles. + - experiment: Portable Canisters will now automatically connect to any portable + connecter beneath them on map load. + - bugfix: Bug involving mis-mapped disposal junction fixed + - bugfix: Air alarms now work for atmos techs (whoops!) + - bugfix: The Master Controller now properly stops atmos when it runtimes. + - bugfix: Backpacks can no longer be contaminated + - tweak: ZAS no longer logs air statistics. + - tweak: ZAS now rebuilds as soon as it detects a semi-complex change in geometry. (It + was doing this already, but in a convoluted way which was actually less efficient) + - tweak: General code cleanup/commenting of ZAS + - tweak: Jungle now initializes after the random Z-level loads and atmos initializes. 2013-05-25: - !!python/unicode 'Erthilo': - - !!python/unicode 'bugfix': !!python/unicode 'Fixes alien races appearing an unknown - when speaking their language.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixes alien races losing their language - when cloned.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixes UI getting randomly reset when - trying to change it in Genetics Scanners.' + Erthilo: + - bugfix: Fixes alien races appearing an unknown when speaking their language. + - bugfix: Fixes alien races losing their language when cloned. + - bugfix: Fixes UI getting randomly reset when trying to change it in Genetics Scanners. 2013-05-26: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Tentacles! Now clone damage will - make you horribly malformed like examine text says.' - !!python/unicode 'Meyar': - - !!python/unicode 'rscadd': !!python/unicode 'The syndicate shuttle now has a cycling - airlock during Nuke rounds.' - - !!python/unicode 'rscadd': !!python/unicode 'Restored the ability for the syndicate - Agent ID to change the name on the card (reforge it) more than once.' - - !!python/unicode 'rscadd': !!python/unicode 'ERT Radio now functional again.' - - !!python/unicode 'rscadd': !!python/unicode 'Research blast doors now actually - lock down the entirety of station-side Research. ' - - !!python/unicode 'rscadd': !!python/unicode 'Added lock down buttons to the wardens - office. ' - - !!python/unicode 'rscadd': !!python/unicode 'The randomized barsign has made a - return. ' - - !!python/unicode 'rscadd': !!python/unicode 'Syndicate Agent ID''s external airlock - access restored.' - !!python/unicode 'VitrescentTortoise': - - !!python/unicode 'rscadd': !!python/unicode 'Added a third option for not getting - any job preferences. It allows you to return to the lobby instead of joining.' + Chinsky: + - rscadd: Tentacles! Now clone damage will make you horribly malformed like examine + text says. + Meyar: + - rscadd: The syndicate shuttle now has a cycling airlock during Nuke rounds. + - rscadd: Restored the ability for the syndicate Agent ID to change the name on + the card (reforge it) more than once. + - rscadd: ERT Radio now functional again. + - rscadd: 'Research blast doors now actually lock down the entirety of station-side + Research. ' + - rscadd: 'Added lock down buttons to the wardens office. ' + - rscadd: 'The randomized barsign has made a return. ' + - rscadd: Syndicate Agent ID's external airlock access restored. + VitrescentTortoise: + - rscadd: Added a third option for not getting any job preferences. It allows you + to return to the lobby instead of joining. 2013-05-28: - !!python/unicode 'Erthilo': - - !!python/unicode 'bugfix': !!python/unicode 'Fixes everyone being able to understand - alien languages. HERE IS YOUR TOWER OF BABEL' - !!python/unicode 'VitrescentTortoise': - - !!python/unicode 'bugfix': !!python/unicode 'Wizard''s forcewall now works.' + Erthilo: + - bugfix: Fixes everyone being able to understand alien languages. HERE IS YOUR + TOWER OF BABEL + VitrescentTortoise: + - bugfix: Wizard's forcewall now works. 2013-05-30: - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'Meteor showers actually spawn meteors - now.' - - !!python/unicode 'tweak': !!python/unicode 'Engineering tape fits into toolbelt - and can be placed on doors.' - - !!python/unicode 'rscadd': !!python/unicode 'Pill bottles can hold paper.' - !!python/unicode 'Spamcat': - - !!python/unicode 'tweak': !!python/unicode 'Pill bottle capacity increased to - 14 items.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed Lamarr (it now spawns properly)' - !!python/unicode 'proliberate': - - !!python/unicode 'rscadd': !!python/unicode 'Station time is now displayed in - the status tab for new players and AIs.' + Segrain: + - bugfix: Meteor showers actually spawn meteors now. + - tweak: Engineering tape fits into toolbelt and can be placed on doors. + - rscadd: Pill bottles can hold paper. + Spamcat: + - tweak: Pill bottle capacity increased to 14 items. + - bugfix: Fixed Lamarr (it now spawns properly) + proliberate: + - rscadd: Station time is now displayed in the status tab for new players and AIs. 2013-05-31: - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'Portable canisters now properly connect - to ports beneath them on map load.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed unfastening gas meters.' + Segrain: + - bugfix: Portable canisters now properly connect to ports beneath them on map load. + - bugfix: Fixed unfastening gas meters. 2013-06-01: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Bloody footprints! Now stepping in - the puddle will dirty your shoes/feet and make you leave bloody footprints for - a bit.' - - !!python/unicode 'rscadd': !!python/unicode 'Blood now dries up after some time. - Puddles take ~30 minutes, small things 5 minutes.' - - !!python/unicode 'bugfix': !!python/unicode 'Untreated wounds now heal. No more - toe stubs spamming you with pain messages for the rest of the shift.' - - !!python/unicode 'experiment': !!python/unicode 'On the other side, everything - is healed slowly. Maximum you cna squeeze out of first aid is 0.5 health per - tick per organ. Lying down makes it faster too, by 1.5x factor.' - - !!python/unicode 'rscadd': !!python/unicode 'Lids! Click beaker/bottle in hand - to put them on/off. Prevent spilling' - - !!python/unicode 'rscadd': !!python/unicode 'Added ''hailer'' to security lockers. - If used in hand, says "Halt! Security!". For those who can''t run and type.' + Chinsky: + - rscadd: Bloody footprints! Now stepping in the puddle will dirty your shoes/feet + and make you leave bloody footprints for a bit. + - rscadd: Blood now dries up after some time. Puddles take ~30 minutes, small things + 5 minutes. + - bugfix: Untreated wounds now heal. No more toe stubs spamming you with pain messages + for the rest of the shift. + - experiment: On the other side, everything is healed slowly. Maximum you cna squeeze + out of first aid is 0.5 health per tick per organ. Lying down makes it faster + too, by 1.5x factor. + - rscadd: Lids! Click beaker/bottle in hand to put them on/off. Prevent spilling + - rscadd: Added 'hailer' to security lockers. If used in hand, says "Halt! Security!". + For those who can't run and type. 2013-06-05: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Load bearing equipment - webbings - and vests for engineers and sec. Attach to jumpsuit, use ''Look in storage'' - verb (object tab) to open.' - !!python/unicode 'Segrain': - - !!python/unicode 'rscadd': !!python/unicode 'Exosuits now can open firelocks by - walking into them.' + Chinsky: + - rscadd: Load bearing equipment - webbings and vests for engineers and sec. Attach + to jumpsuit, use 'Look in storage' verb (object tab) to open. + Segrain: + - rscadd: Exosuits now can open firelocks by walking into them. 2013-06-06: - !!python/unicode 'Asanadas': - - !!python/unicode 'rscadd': !!python/unicode 'Added a whimsical suit to the head - of personnel''s secret clothing locker.' - !!python/unicode 'Meyar': - - !!python/unicode 'bugfix': !!python/unicode 'Disposal''s mail routing fixed. Missing - pipes replaced.' - - !!python/unicode 'bugfix': !!python/unicode 'Chemistry is once again a part of - the disposals delivery circuit. ' - - !!python/unicode 'bugfix': !!python/unicode 'Added missing sorting junctions to - Security and HoS office.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed a duplicate sorting junction.' + Asanadas: + - rscadd: Added a whimsical suit to the head of personnel's secret clothing locker. + Meyar: + - bugfix: Disposal's mail routing fixed. Missing pipes replaced. + - bugfix: 'Chemistry is once again a part of the disposals delivery circuit. ' + - bugfix: Added missing sorting junctions to Security and HoS office. + - bugfix: Fixed a duplicate sorting junction. 2013-06-09: - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'Emagged supply console can order - SpecOp crates again.' + Segrain: + - bugfix: Emagged supply console can order SpecOp crates again. 2013-06-11: - !!python/unicode 'Meyar': - - !!python/unicode 'bugfix': !!python/unicode 'Fixes a security door with a firedoor - ontop of it.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed a typo relating to the admin - Select Equipment Verb. (It''s RESPONSE team not RESCUE team)' - - !!python/unicode 'rscadd': !!python/unicode 'ERT are now automated, from their - spawn to their shuttle. Admin intervention no longer required! (Getting to the - mechs still requires admin permission generally)' - - !!python/unicode 'rscadd': !!python/unicode 'Added flashlights to compensate for - the weakened PDA lights' - - !!python/unicode 'tweak': !!python/unicode 'ERT Uniforms updated to be in line - with Centcom uniforms. No more turtlenecks, no sir. ' + Meyar: + - bugfix: Fixes a security door with a firedoor ontop of it. + - bugfix: Fixed a typo relating to the admin Select Equipment Verb. (It's RESPONSE + team not RESCUE team) + - rscadd: ERT are now automated, from their spawn to their shuttle. Admin intervention + no longer required! (Getting to the mechs still requires admin permission generally) + - rscadd: Added flashlights to compensate for the weakened PDA lights + - tweak: 'ERT Uniforms updated to be in line with Centcom uniforms. No more turtlenecks, + no sir. ' 2013-06-12: - !!python/unicode 'Zuhayr': - - !!python/unicode 'rscadd': !!python/unicode 'Added pneumatic cannon and harpoons.' - - !!python/unicode 'experiment': !!python/unicode 'Added embedded projectiles. Bullets - and thrown weapons may stick in targets. Throwing them by hand won''t make them - stick, firing them from a cannon might. Implant removal surgery will get rid - of shrapnel and stuck items.' + Zuhayr: + - rscadd: Added pneumatic cannon and harpoons. + - experiment: Added embedded projectiles. Bullets and thrown weapons may stick in + targets. Throwing them by hand won't make them stick, firing them from a cannon + might. Implant removal surgery will get rid of shrapnel and stuck items. 2013-06-13: - !!python/unicode 'Kilakk': - - !!python/unicode 'rscadd': !!python/unicode 'Added the Xenobiologist job. Has - access to the research hallway and to xenobiology.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed Xenobiology access from Scientists.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed the Xenobiologist alternate - title from Scientists.' - - !!python/unicode 'rscadd': !!python/unicode 'Added "Xenoarchaeology" to the RD, - Scientists, and to the ID computer.' - - !!python/unicode 'tweak': !!python/unicode 'Changed the Research Outpost doors - to use "Xenoarchaeology" access.' + Kilakk: + - rscadd: Added the Xenobiologist job. Has access to the research hallway and to + xenobiology. + - rscdel: Removed Xenobiology access from Scientists. + - rscdel: Removed the Xenobiologist alternate title from Scientists. + - rscadd: Added "Xenoarchaeology" to the RD, Scientists, and to the ID computer. + - tweak: Changed the Research Outpost doors to use "Xenoarchaeology" access. 2013-06-18: - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'Fixed some bugs in windoor construction.' - - !!python/unicode 'tweak': !!python/unicode 'Secure windoors are made with rods - again.' - - !!python/unicode 'rscadd': !!python/unicode 'Windoors drop their electronics when - broken. Emagged windoors can have theirs removed by crowbar.' - - !!python/unicode 'rscadd': !!python/unicode 'Airlock electronics can be configured - to make door open for any single access on it instead of all of them.' - - !!python/unicode 'rscadd': !!python/unicode 'Cyborgs can preview their icons before - choosing.' + Segrain: + - bugfix: Fixed some bugs in windoor construction. + - tweak: Secure windoors are made with rods again. + - rscadd: Windoors drop their electronics when broken. Emagged windoors can have + theirs removed by crowbar. + - rscadd: Airlock electronics can be configured to make door open for any single + access on it instead of all of them. + - rscadd: Cyborgs can preview their icons before choosing. 2013-06-21: - !!python/unicode 'Jupotter': - - !!python/unicode 'bugfix': !!python/unicode 'Fix the robotiscist preview in the - char setupe screen' + Jupotter: + - bugfix: Fix the robotiscist preview in the char setupe screen 2013-06-22: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'tweak': !!python/unicode 'The xenoarchaeology depth scanner - will now tell you what energy field is required to safely extract a find.' - - !!python/unicode 'tweak': !!python/unicode 'Excavation picks will now dig faster, - and xenoarchaeology as a whole should be easier to do.' + Cael_Aislinn: + - tweak: The xenoarchaeology depth scanner will now tell you what energy field is + required to safely extract a find. + - tweak: Excavation picks will now dig faster, and xenoarchaeology as a whole should + be easier to do. 2013-06-23: - !!python/unicode 'Segrain': - - !!python/unicode 'rscadd': !!python/unicode 'Airlocks of various models can be - constructed again.' - !!python/unicode 'faux': - - !!python/unicode 'experiment': !!python/unicode 'There has been a complete medbay - renovation spearheaded by Vetinarix. http://baystation12.net/forums/viewtopic.php?f=20&t;=7847 - <-- Please put any commentary good or bad, here.' - - !!python/unicode 'tweak': !!python/unicode 'Some maintenance doors within RnD - and Medbay have had their accesses changed. Maintenance doors in the joint areas - (leading to the research shuttle, virology, and xenobiology) are now zero access. - Which means anyone in those joints can enter the maintenance tunnels. This was - done to add additional evacuation locations during radiation storms. Additional - maintenance doors were added to the tunnels in these areas to prevent docs and - scientists from running about.' - - !!python/unicode 'tweak': !!python/unicode 'Starboard emergency storage isn''t - gone now, it''s simply located in the escape wing.' - - !!python/unicode 'experiment': !!python/unicode 'An engineering training room - has been added to engineering. This location was previously where surgery was - located. If you are new to engineering or need to brush up on your skills, please - use this area for testing.' + Segrain: + - rscadd: Airlocks of various models can be constructed again. + faux: + - experiment: There has been a complete medbay renovation spearheaded by Vetinarix. + http://baystation12.net/forums/viewtopic.php?f=20&t;=7847 <-- Please + put any commentary good or bad, here. + - tweak: Some maintenance doors within RnD and Medbay have had their accesses changed. + Maintenance doors in the joint areas (leading to the research shuttle, virology, + and xenobiology) are now zero access. Which means anyone in those joints can + enter the maintenance tunnels. This was done to add additional evacuation locations + during radiation storms. Additional maintenance doors were added to the tunnels + in these areas to prevent docs and scientists from running about. + - tweak: Starboard emergency storage isn't gone now, it's simply located in the + escape wing. + - experiment: An engineering training room has been added to engineering. This location + was previously where surgery was located. If you are new to engineering or need + to brush up on your skills, please use this area for testing. 2013-06-26: - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'Autopsy scanner properly displays - time of wound infliction and death.' - - !!python/unicode 'bugfix': !!python/unicode 'Autopsy scanner properly displays - wounds by projectile weapons.' - !!python/unicode 'Whitellama': - - !!python/unicode 'bugfix': !!python/unicode 'One-antag rounds (like wizard/ninja) - no longer end automatically upon death' - - !!python/unicode 'wip': !!python/unicode 'Space ninja has been implemented as - a voteable gamemode' - - !!python/unicode 'rscadd': !!python/unicode 'Space ninja spawn landmarks have - been implemented (but not yet placed on the map), still spawn at carps-pawns - instead. (The code will warn you about this and ask you to report it, it''s - a known issue.)' - - !!python/unicode 'rscadd': !!python/unicode 'Five new space ninja directives have - been added, old directives have been reworded to be less harsh' - - !!python/unicode 'wip': !!python/unicode 'Space ninjas have been given their own - list as antagonists, and are no longer bundled up with traitors' - - !!python/unicode 'bugfix': !!python/unicode 'Space ninjas with a "steal a functional - AI" objective will now succeed by downloading one into their suits' - - !!python/unicode 'tweak': !!python/unicode 'Space ninja suits'' exploding on death - has been nerfed, so as not to cause breaches' - - !!python/unicode 'rscadd': !!python/unicode 'A few space ninja titles/names have - been added and removed to be slightly more believable' - - !!python/unicode 'bugfix': !!python/unicode 'The antagonist selector no longer - chooses jobbanned players when it runs out of willing options' + Segrain: + - bugfix: Autopsy scanner properly displays time of wound infliction and death. + - bugfix: Autopsy scanner properly displays wounds by projectile weapons. + Whitellama: + - bugfix: One-antag rounds (like wizard/ninja) no longer end automatically upon + death + - wip: Space ninja has been implemented as a voteable gamemode + - rscadd: Space ninja spawn landmarks have been implemented (but not yet placed + on the map), still spawn at carps-pawns instead. (The code will warn you about + this and ask you to report it, it's a known issue.) + - rscadd: Five new space ninja directives have been added, old directives have been + reworded to be less harsh + - wip: Space ninjas have been given their own list as antagonists, and are no longer + bundled up with traitors + - bugfix: Space ninjas with a "steal a functional AI" objective will now succeed + by downloading one into their suits + - tweak: Space ninja suits' exploding on death has been nerfed, so as not to cause + breaches + - rscadd: A few space ninja titles/names have been added and removed to be slightly + more believable + - bugfix: The antagonist selector no longer chooses jobbanned players when it runs + out of willing options 2013-06-27: - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'ID cards properly setup bloodtype, - DNA and fingerprints again.' + Segrain: + - bugfix: ID cards properly setup bloodtype, DNA and fingerprints again. 2013-06-28: - !!python/unicode 'Segrain': - - !!python/unicode 'rscadd': !!python/unicode 'AIs are now able to examine what - they see.' + Segrain: + - rscadd: AIs are now able to examine what they see. 2013-07-03: - !!python/unicode 'Segrain': - - !!python/unicode 'rscadd': !!python/unicode 'Security and medical cyborgs can - use their HUDs to access records.' + Segrain: + - rscadd: Security and medical cyborgs can use their HUDs to access records. 2013-07-05: - !!python/unicode 'Spamcat': - - !!python/unicode 'rscadd': !!python/unicode 'Pulse! Humans now have hearbeat rate, - which can be measured by right-clicking someone - Check pulse or by health analyzer. - Medical machinery also has heartbeat monitors. Certain meds and conditions can - influence it.' + Spamcat: + - rscadd: Pulse! Humans now have hearbeat rate, which can be measured by right-clicking + someone - Check pulse or by health analyzer. Medical machinery also has heartbeat + monitors. Certain meds and conditions can influence it. 2013-07-06: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Humans now can be infected with more - than one virus at once.' - - !!python/unicode 'rscadd': !!python/unicode 'All analyzed viruses are put into - virus DB. You can view it and edit their name and description on medical record - consoles.' - - !!python/unicode 'tweak': !!python/unicode 'Only known viruses (ones in DB) will - be detected by the machinery and HUDs. ' - - !!python/unicode 'rscadd': !!python/unicode 'Viruses cause fever, body temperature - rising the more stage is.' - - !!python/unicode 'bugfix': !!python/unicode 'Humans'' body temperature does not - drift towards room one unless there''s big difference in them.' - - !!python/unicode 'tweak': !!python/unicode 'Virus incubators now can transmit - viuses from dishes to blood sample.' - - !!python/unicode 'rscadd': !!python/unicode 'New machine - centrifuge. It can - isolate antibodies or viruses (spawning virus dish) from a blood sample in vials. - Accepts vials only.' - - !!python/unicode 'rscadd': !!python/unicode 'Fancy vial boxes in virology, one - of them is locked by ID with MD access.' - - !!python/unicode 'tweak': !!python/unicode 'Engineered viruses are now ariborne - too.' + Chinsky: + - rscadd: Humans now can be infected with more than one virus at once. + - rscadd: All analyzed viruses are put into virus DB. You can view it and edit their + name and description on medical record consoles. + - tweak: 'Only known viruses (ones in DB) will be detected by the machinery and + HUDs. ' + - rscadd: Viruses cause fever, body temperature rising the more stage is. + - bugfix: Humans' body temperature does not drift towards room one unless there's + big difference in them. + - tweak: Virus incubators now can transmit viuses from dishes to blood sample. + - rscadd: New machine - centrifuge. It can isolate antibodies or viruses (spawning + virus dish) from a blood sample in vials. Accepts vials only. + - rscadd: Fancy vial boxes in virology, one of them is locked by ID with MD access. + - tweak: Engineered viruses are now ariborne too. 2013-07-11: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Gun delays. All guns now have delays - between shots. Most have less than second, lasercannons and pulse rifles have - around 2 seconds delay. Automatics have zero, click-speed.' + Chinsky: + - rscadd: Gun delays. All guns now have delays between shots. Most have less than + second, lasercannons and pulse rifles have around 2 seconds delay. Automatics + have zero, click-speed. 2013-07-26: - !!python/unicode 'Kilakk': - - !!python/unicode 'bugfix': !!python/unicode 'Brig cell timers will no longer start - counting down automatically.' - - !!python/unicode 'tweak': !!python/unicode 'Separated the actual countdown timer - from the timer controls. Pressing "Set" while the timer is counting down will - reset the countdown timer to the time selected.' + Kilakk: + - bugfix: Brig cell timers will no longer start counting down automatically. + - tweak: Separated the actual countdown timer from the timer controls. Pressing + "Set" while the timer is counting down will reset the countdown timer to the + time selected. 2013-07-28: - !!python/unicode 'Segrain': - - !!python/unicode 'rscadd': !!python/unicode 'Camera console circuits can be adjusted - for different networks.' - - !!python/unicode 'rscadd': !!python/unicode 'Nuclear operatives and ERT members - have built-in cameras in their helmets. Activate helmet to initialize it.' + Segrain: + - rscadd: Camera console circuits can be adjusted for different networks. + - rscadd: Nuclear operatives and ERT members have built-in cameras in their helmets. + Activate helmet to initialize it. 2013-07-30: - !!python/unicode 'Erthilo': - - !!python/unicode 'bugfix': !!python/unicode 'EFTPOS and ATM machines should now - connect to databases.' - - !!python/unicode 'bugfix': !!python/unicode 'Gravitational Catapults can now be - removed from mechs.' - - !!python/unicode 'bugfix': !!python/unicode 'Ghost manifest rune paper naming - now works correctly.' - - !!python/unicode 'bugfix': !!python/unicode 'Fix for newscaster special characters. - Still not recommended.' - !!python/unicode 'Kilakk': - - !!python/unicode 'rscadd': !!python/unicode 'Added colored department radio channels.' + Erthilo: + - bugfix: EFTPOS and ATM machines should now connect to databases. + - bugfix: Gravitational Catapults can now be removed from mechs. + - bugfix: Ghost manifest rune paper naming now works correctly. + - bugfix: Fix for newscaster special characters. Still not recommended. + Kilakk: + - rscadd: Added colored department radio channels. 2013-08-01: - !!python/unicode 'Asanadas': - - !!python/unicode 'tweak': !!python/unicode 'The Null Rod has recovered its de-culting - ability, for balance reasons. Metagaming with it is a big no-no!' - - !!python/unicode 'rscadd': !!python/unicode 'Holy Water as a liquid is able to - de-cult. Less effective, but less bloody. May be changed over the course of - time for balance.' - !!python/unicode 'CIB': - - !!python/unicode 'bugfix': !!python/unicode 'Chilis and cold chilis no longer - kill in small amounts' - - !!python/unicode 'bugfix': !!python/unicode 'Chloral now again needs around 5 - units to start killing somebody' - !!python/unicode 'Cael Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Security bots will now target hostile - mobs, and vice versa.' - - !!python/unicode 'tweak': !!python/unicode 'Carp should actually emigrate now, - instead of just immigrating then squatting around the outer hull.' - - !!python/unicode 'tweak': !!python/unicode 'Admins and moderators have been split - up into separate ''who'' verbs (adminwho and modwho respectively).' - !!python/unicode 'CaelAislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Re-added old ion storm laws, re-added - grid check event.' - - !!python/unicode 'rscadd': !!python/unicode 'Added Rogue Drone and Vermin Infestation - random events.' - - !!python/unicode 'rscadd': !!python/unicode 'Added/fixed space vines random event.' - - !!python/unicode 'tweak': !!python/unicode 'Updates to the virus events.' - - !!python/unicode 'tweak': !!python/unicode 'Spider infestation and alien infestation - events turned off by default.' - - !!python/unicode 'tweak': !!python/unicode 'Soghun, taj and skrell all have unique - language text colours.' - - !!python/unicode 'tweak': !!python/unicode 'Moderators will no longer be listed - in adminwho, instead use modwho.' - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'tgs': !!python/unicode 'Updated server to tgstation r5200 (November - 26th, 2012), see https://code.google.com/p/tgstation13/source/list - for tg''s changelog.' - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Old new medical features:' - - !!python/unicode 'rscadd': !!python/unicode 'Autoinjectors! They come preloaded - with 5u of inapro, can be used instantly, and are one-use. You can replace chems - inside using a syringe. Box of them is added to Medicine closet and medical - supplies crate.' - - !!python/unicode 'rscadd': !!python/unicode 'Splints! Target broken liimb and - click on person to apply. Can be taken off in inventory menu, like handcuffs. - Splinted limbs have less negative effects.' - - !!python/unicode 'rscadd': !!python/unicode 'Advanced medikit! Red and mean, all - doctors spawn with one. Contains better stuff - advanced versions of bandaids - and aloe heal 12 damage on the first use.' - - !!python/unicode 'tweak': !!python/unicode 'Wounds with damage above 50 won''t - heal by themselves even if bandaged/salved. Would have to seek advanced medical - attention for those.' - !!python/unicode 'Erthilo': - - !!python/unicode 'bugfix': !!python/unicode 'Fixed SSD (logged-out) players not - staying asleep.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed set-pose verb and mice emotes - having extra periods.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed virus crate not appearing and - breaking supply shuttle.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed newcaster photos not being - censored.' - !!python/unicode 'Gamerofthegame': - - !!python/unicode 'rscadd': !!python/unicode 'Miscellaneous mapfixes.' - !!python/unicode 'GauHelldragon': - - !!python/unicode 'rscadd': !!python/unicode 'Servicebots now have RoboTray and - Printing Pen. Robotray can be used to pick up and drop food/drinks. Printing - pen can alternate between writing mode and rename paper mode by clicking it.' - - !!python/unicode 'rscadd': !!python/unicode 'Farmbots. A new type of robot that - weeds, waters and fertilizes. Use robot arm on water tank. Then use plant analyzer, - mini-hoe, bucket and finally proximity sensor.' - - !!python/unicode 'rscadd': !!python/unicode 'Chefs can clang their serving trays - with a rolling pin. Just like a riot shield!' - !!python/unicode 'Jediluke69': - - !!python/unicode 'rscadd': !!python/unicode 'Added 5 new drinks (Kira Special, - Lemonade, Brown Star, Milkshakes, Rewriter)' - - !!python/unicode 'tweak': !!python/unicode 'Nanopaste now heals about half of - what it used to' - - !!python/unicode 'tweak': !!python/unicode 'Ballistic crates should now come with - shotguns loaded with actual shells no more beanbags' - - !!python/unicode 'bugfix': !!python/unicode 'Iced tea no longer makes a glass - of .what?' - !!python/unicode 'Jupotter': - - !!python/unicode 'bugfix': !!python/unicode 'Fix the robotiscist preview in the - char setupe screen' - !!python/unicode 'Kilakk': - - !!python/unicode 'rscadd': !!python/unicode 'Added the Xenobiologist job. Has - access to the research hallway and to xenobiology.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed Xenobiology access from Scientists.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed the Xenobiologist alternate - title from Scientists.' - - !!python/unicode 'rscadd': !!python/unicode 'Added "Xenoarchaeology" to the RD, - Scientists, and to the ID computer.' - - !!python/unicode 'tweak': !!python/unicode 'Changed the Research Outpost doors - to use "Xenoarchaeology" access.' - !!python/unicode 'Meyar': - - !!python/unicode 'rscadd': !!python/unicode 'The syndicate shuttle now has a cycling - airlock during Nuke rounds.' - - !!python/unicode 'rscadd': !!python/unicode 'Restored the ability for the syndicate - Agent ID to change the name on the card (reforge it) more than once.' - - !!python/unicode 'rscadd': !!python/unicode 'ERT Radio now functional again.' - - !!python/unicode 'rscadd': !!python/unicode 'Research blast doors now actually - lock down the entirety of station-side Research. ' - - !!python/unicode 'rscadd': !!python/unicode 'Added lock down buttons to the wardens - office. ' - - !!python/unicode 'rscadd': !!python/unicode 'The randomized barsign has made a - return. ' - - !!python/unicode 'rscadd': !!python/unicode 'Syndicate Agent ID''s external airlock - access restored.' - !!python/unicode 'NerdyBoy1104': - - !!python/unicode 'rscadd': !!python/unicode 'New Botany additions: Rice and Plastellium. - New sheet material: Plastic.' - - !!python/unicode 'rscadd': !!python/unicode 'Plastellium is refined into plastic - by first grinding the produce to get plasticide. 20 plasticide + 10 polytrinic - acid makes 10 sheets of plastic which can be used to make crates, forks, spoons, - knives, ashtrays or plastic bags from.' - - !!python/unicode 'rscadd': !!python/unicode 'Rice seeds grows into rice stalks - that you grind to get rice. 10 Rice + 5 Water makes boiled rice, 10 rice + 5 - milk makes rice pudding, 10 rice + 5 universal enzyme (in beaker) makes Sake.' - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'You can now stab people with syringes - using the "harm" intent. This destroys the syringe and transfers a random percentage - of its contents into the target. Armor has a 50% chance of blocking the syringe.' - !!python/unicode 'Segrain': - - !!python/unicode 'bugfix': !!python/unicode 'Meteor showers actually spawn meteors - now.' - - !!python/unicode 'tweak': !!python/unicode 'Engineering tape fits into toolbelt - and can be placed on doors.' - - !!python/unicode 'rscadd': !!python/unicode 'Pill bottles can hold paper.' - !!python/unicode 'SkyMarshal': - - !!python/unicode 'bugfix': !!python/unicode 'Fixed ZAS' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed Fire' - !!python/unicode 'Spamcat': - - !!python/unicode 'rscadd': !!python/unicode 'Figured I should make one of these. - Syringestabbing now produces a broken syringe complete with fingerprints of - attacker and blood of a victim, so dispose your evidence carefully. Maximum - transfer amount per stab is lowered to 10.' - !!python/unicode 'VitrescentTortoise': - - !!python/unicode 'rscadd': !!python/unicode 'Added a third option for not getting - any job preferences. It allows you to return to the lobby instead of joining.' - !!python/unicode 'Whitellama': - - !!python/unicode 'bugfix': !!python/unicode 'One-antag rounds (like wizard/ninja) - no longer end automatically upon death' - - !!python/unicode 'wip': !!python/unicode 'Space ninja has been implemented as - a voteable gamemode' - - !!python/unicode 'rscadd': !!python/unicode 'Space ninja spawn landmarks have - been implemented (but not yet placed on the map), still spawn at carps-pawns - instead. (The code will warn you about this and ask you to report it, it''s - a known issue.)' - - !!python/unicode 'rscadd': !!python/unicode 'Five new space ninja directives have - been added, old directives have been reworded to be less harsh' - - !!python/unicode 'wip': !!python/unicode 'Space ninjas have been given their own - list as antagonists, and are no longer bundled up with traitors' - - !!python/unicode 'bugfix': !!python/unicode 'Space ninjas with a "steal a functional - AI" objective will now succeed by downloading one into their suits' - - !!python/unicode 'tweak': !!python/unicode 'Space ninja suits'' exploding on death - has been nerfed, so as not to cause breaches' - - !!python/unicode 'rscadd': !!python/unicode 'A few space ninja titles/names have - been added and removed to be slightly more believable' - - !!python/unicode 'bugfix': !!python/unicode 'The antagonist selector no longer - chooses jobbanned players when it runs out of willing options' - !!python/unicode 'Zuhayr': - - !!python/unicode 'rscadd': !!python/unicode 'Added pneumatic cannon and harpoons.' - - !!python/unicode 'experiment': !!python/unicode 'Added embedded projectiles. Bullets - and thrown weapons may stick in targets. Throwing them by hand won''t make them - stick, firing them from a cannon might. Implant removal surgery will get rid - of shrapnel and stuck items.' - !!python/unicode 'faux': - - !!python/unicode 'imageadd': !!python/unicode 'Mixed Wardrobe Closet now has colored - shoes and plaid skirts.' - - !!python/unicode 'imageadd': !!python/unicode 'Dress uniforms added to the Captain, - RD, and HoP wardrobe closets. A uniform jacket has also been added to the Captain''s - closet. HoS'' hat has been re-added to their closet. I do not love the CMO and - CE enough to give them anything.' - - !!python/unicode 'imageadd': !!python/unicode 'Atheletic closet now has five different - swimsuits *for the ladies* in them. If you are a guy, be prepared to be yelled - at if you run around like a moron in one of these. Same goes for ladies who - run around in shorts with their titties swaying in the space winds.' - - !!python/unicode 'imageadd': !!python/unicode 'A set of dispatcher uniforms will - spawn in the security closet. These are for playtesting the dispatcher role.' - - !!python/unicode 'imageadd': !!python/unicode 'New suit spawns in the laundry - room. It''s for geezer''s only. You''re welcome, Book.' - - !!python/unicode 'imageadd': !!python/unicode 'Nurse outfit variant, orderly uniform, - and first responder jacket will now spawn in the medical wardrobe closet.' - - !!python/unicode 'imageadd': !!python/unicode 'A white wedding dress will spawn - in the chaplain''s closet. There are also several dresses currently only adminspawnable. - Admins: Look either under "bride" or "dress." The bride one leads to the colored - wedding dresses, and there are some other kinds of dresses under dress.' - - !!python/unicode 'tweak': !!python/unicode 'No more luchador masks or boxing gloves - or boxing ring. You guys have a swimming pool now, dip in and enjoy it.' - - !!python/unicode 'tweak': !!python/unicode 'he meeting hall has been replaced - with an awkwardly placed security office meant for prisoner processing.' - - !!python/unicode 'tweak': !!python/unicode 'Added a couple more welding goggles - to engineering since you guys liked those a lot.' - - !!python/unicode 'imageadd': !!python/unicode 'Flasks spawn behind the bar. Only - three. Don''t fight over them. I don''t know how to add them to the bar vending - machine otherwise I would have done that instead. Detective, you have your own - flask in your office, it''s underneath the cigarettes on your desk.' - - !!python/unicode 'tweak': !!python/unicode 'Added two canes to the medical storage, - for people who have leg injuries and can''t walk good and stuff. I do not want - to see doctors pretending to be House. These are for patients. Do not make me - delete this addition and declare you guys not being able to have nice things.' - - !!python/unicode 'tweak': !!python/unicode 'Secondary entance to EVA now directly - leads into the medbay hardsuit section. Sorry for any inconviences this will - cause. The CMO can now fetch the hardsuits whenever they want.' - - !!python/unicode 'tweak': !!python/unicode 'Secondary security hardsuit has been - added to the armory. Security members please stop stealing engineer''s hardsuits - when you guys want to pair up for space travel.' - - !!python/unicode 'tweak': !!python/unicode 'Firelocks have been moved around in - the main hallways to form really ghetto versions of airlocks.' - - !!python/unicode 'tweak': !!python/unicode 'Violin spawns in theatre storage now. - I didn''t put the piano there though, that was someone else.' - - !!python/unicode 'tweak': !!python/unicode 'Psych office in medbay has been made - better looking.' - !!python/unicode 'proliberate': - - !!python/unicode 'rscadd': !!python/unicode 'Station time is now displayed in - the status tab for new players and AIs.' + Asanadas: + - tweak: The Null Rod has recovered its de-culting ability, for balance reasons. + Metagaming with it is a big no-no! + - rscadd: Holy Water as a liquid is able to de-cult. Less effective, but less bloody. + May be changed over the course of time for balance. + CIB: + - bugfix: Chilis and cold chilis no longer kill in small amounts + - bugfix: Chloral now again needs around 5 units to start killing somebody + Cael Aislinn: + - rscadd: Security bots will now target hostile mobs, and vice versa. + - tweak: Carp should actually emigrate now, instead of just immigrating then squatting + around the outer hull. + - tweak: Admins and moderators have been split up into separate 'who' verbs (adminwho + and modwho respectively). + CaelAislinn: + - rscadd: Re-added old ion storm laws, re-added grid check event. + - rscadd: Added Rogue Drone and Vermin Infestation random events. + - rscadd: Added/fixed space vines random event. + - tweak: Updates to the virus events. + - tweak: Spider infestation and alien infestation events turned off by default. + - tweak: Soghun, taj and skrell all have unique language text colours. + - tweak: Moderators will no longer be listed in adminwho, instead use modwho. + Cael_Aislinn: + - tgs: Updated server to tgstation r5200 (November 26th, 2012), see https://code.google.com/p/tgstation13/source/list + for tg's changelog. + Chinsky: + - rscadd: 'Old new medical features:' + - rscadd: Autoinjectors! They come preloaded with 5u of inapro, can be used instantly, + and are one-use. You can replace chems inside using a syringe. Box of them is + added to Medicine closet and medical supplies crate. + - rscadd: Splints! Target broken liimb and click on person to apply. Can be taken + off in inventory menu, like handcuffs. Splinted limbs have less negative effects. + - rscadd: Advanced medikit! Red and mean, all doctors spawn with one. Contains better + stuff - advanced versions of bandaids and aloe heal 12 damage on the first use. + - tweak: Wounds with damage above 50 won't heal by themselves even if bandaged/salved. + Would have to seek advanced medical attention for those. + Erthilo: + - bugfix: Fixed SSD (logged-out) players not staying asleep. + - bugfix: Fixed set-pose verb and mice emotes having extra periods. + - bugfix: Fixed virus crate not appearing and breaking supply shuttle. + - bugfix: Fixed newcaster photos not being censored. + Gamerofthegame: + - rscadd: Miscellaneous mapfixes. + GauHelldragon: + - rscadd: Servicebots now have RoboTray and Printing Pen. Robotray can be used to + pick up and drop food/drinks. Printing pen can alternate between writing mode + and rename paper mode by clicking it. + - rscadd: Farmbots. A new type of robot that weeds, waters and fertilizes. Use robot + arm on water tank. Then use plant analyzer, mini-hoe, bucket and finally proximity + sensor. + - rscadd: Chefs can clang their serving trays with a rolling pin. Just like a riot + shield! + Jediluke69: + - rscadd: Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter) + - tweak: Nanopaste now heals about half of what it used to + - tweak: Ballistic crates should now come with shotguns loaded with actual shells + no more beanbags + - bugfix: Iced tea no longer makes a glass of .what? + Jupotter: + - bugfix: Fix the robotiscist preview in the char setupe screen + Kilakk: + - rscadd: Added the Xenobiologist job. Has access to the research hallway and to + xenobiology. + - rscdel: Removed Xenobiology access from Scientists. + - rscdel: Removed the Xenobiologist alternate title from Scientists. + - rscadd: Added "Xenoarchaeology" to the RD, Scientists, and to the ID computer. + - tweak: Changed the Research Outpost doors to use "Xenoarchaeology" access. + Meyar: + - rscadd: The syndicate shuttle now has a cycling airlock during Nuke rounds. + - rscadd: Restored the ability for the syndicate Agent ID to change the name on + the card (reforge it) more than once. + - rscadd: ERT Radio now functional again. + - rscadd: 'Research blast doors now actually lock down the entirety of station-side + Research. ' + - rscadd: 'Added lock down buttons to the wardens office. ' + - rscadd: 'The randomized barsign has made a return. ' + - rscadd: Syndicate Agent ID's external airlock access restored. + NerdyBoy1104: + - rscadd: 'New Botany additions: Rice and Plastellium. New sheet material: Plastic.' + - rscadd: Plastellium is refined into plastic by first grinding the produce to get + plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which + can be used to make crates, forks, spoons, knives, ashtrays or plastic bags + from. + - rscadd: Rice seeds grows into rice stalks that you grind to get rice. 10 Rice + + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + + 5 universal enzyme (in beaker) makes Sake. + RavingManiac: + - rscadd: You can now stab people with syringes using the "harm" intent. This destroys + the syringe and transfers a random percentage of its contents into the target. + Armor has a 50% chance of blocking the syringe. + Segrain: + - bugfix: Meteor showers actually spawn meteors now. + - tweak: Engineering tape fits into toolbelt and can be placed on doors. + - rscadd: Pill bottles can hold paper. + SkyMarshal: + - bugfix: Fixed ZAS + - bugfix: Fixed Fire + Spamcat: + - rscadd: Figured I should make one of these. Syringestabbing now produces a broken + syringe complete with fingerprints of attacker and blood of a victim, so dispose + your evidence carefully. Maximum transfer amount per stab is lowered to 10. + VitrescentTortoise: + - rscadd: Added a third option for not getting any job preferences. It allows you + to return to the lobby instead of joining. + Whitellama: + - bugfix: One-antag rounds (like wizard/ninja) no longer end automatically upon + death + - wip: Space ninja has been implemented as a voteable gamemode + - rscadd: Space ninja spawn landmarks have been implemented (but not yet placed + on the map), still spawn at carps-pawns instead. (The code will warn you about + this and ask you to report it, it's a known issue.) + - rscadd: Five new space ninja directives have been added, old directives have been + reworded to be less harsh + - wip: Space ninjas have been given their own list as antagonists, and are no longer + bundled up with traitors + - bugfix: Space ninjas with a "steal a functional AI" objective will now succeed + by downloading one into their suits + - tweak: Space ninja suits' exploding on death has been nerfed, so as not to cause + breaches + - rscadd: A few space ninja titles/names have been added and removed to be slightly + more believable + - bugfix: The antagonist selector no longer chooses jobbanned players when it runs + out of willing options + Zuhayr: + - rscadd: Added pneumatic cannon and harpoons. + - experiment: Added embedded projectiles. Bullets and thrown weapons may stick in + targets. Throwing them by hand won't make them stick, firing them from a cannon + might. Implant removal surgery will get rid of shrapnel and stuck items. + faux: + - imageadd: Mixed Wardrobe Closet now has colored shoes and plaid skirts. + - imageadd: Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A + uniform jacket has also been added to the Captain's closet. HoS' hat has been + re-added to their closet. I do not love the CMO and CE enough to give them anything. + - imageadd: Atheletic closet now has five different swimsuits *for the ladies* in + them. If you are a guy, be prepared to be yelled at if you run around like a + moron in one of these. Same goes for ladies who run around in shorts with their + titties swaying in the space winds. + - imageadd: A set of dispatcher uniforms will spawn in the security closet. These + are for playtesting the dispatcher role. + - imageadd: New suit spawns in the laundry room. It's for geezer's only. You're + welcome, Book. + - imageadd: Nurse outfit variant, orderly uniform, and first responder jacket will + now spawn in the medical wardrobe closet. + - imageadd: 'A white wedding dress will spawn in the chaplain''s closet. There are + also several dresses currently only adminspawnable. Admins: Look either under + "bride" or "dress." The bride one leads to the colored wedding dresses, and + there are some other kinds of dresses under dress.' + - tweak: No more luchador masks or boxing gloves or boxing ring. You guys have a + swimming pool now, dip in and enjoy it. + - tweak: he meeting hall has been replaced with an awkwardly placed security office + meant for prisoner processing. + - tweak: Added a couple more welding goggles to engineering since you guys liked + those a lot. + - imageadd: Flasks spawn behind the bar. Only three. Don't fight over them. I don't + know how to add them to the bar vending machine otherwise I would have done + that instead. Detective, you have your own flask in your office, it's underneath + the cigarettes on your desk. + - tweak: Added two canes to the medical storage, for people who have leg injuries + and can't walk good and stuff. I do not want to see doctors pretending to be + House. These are for patients. Do not make me delete this addition and declare + you guys not being able to have nice things. + - tweak: Secondary entance to EVA now directly leads into the medbay hardsuit section. + Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits + whenever they want. + - tweak: Secondary security hardsuit has been added to the armory. Security members + please stop stealing engineer's hardsuits when you guys want to pair up for + space travel. + - tweak: Firelocks have been moved around in the main hallways to form really ghetto + versions of airlocks. + - tweak: Violin spawns in theatre storage now. I didn't put the piano there though, + that was someone else. + - tweak: Psych office in medbay has been made better looking. + proliberate: + - rscadd: Station time is now displayed in the status tab for new players and AIs. 2013-08-04: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Health HUD indicator replaced with - Pain indicator. Now health indicator shows pain level instead of actual vitals - level. Some types of damage contribute more to pain, some less, usually feeling - worse than they really are.' + Chinsky: + - rscadd: Health HUD indicator replaced with Pain indicator. Now health indicator + shows pain level instead of actual vitals level. Some types of damage contribute + more to pain, some less, usually feeling worse than they really are. 2013-08-08: - !!python/unicode 'Erthilo': - - !!python/unicode 'bugfix': !!python/unicode 'Raise Dead rune now properly heals - and revives dead corpse.' - - !!python/unicode 'bugfix': !!python/unicode 'Admin-only rejuvenate verb now heals - all organs, limbs, and diseases.' - - !!python/unicode 'bugfix': !!python/unicode 'Cyborg sprites now correctly reset - with reset boards. This means cyborg appearances can now be changed without - admin intervention.' + Erthilo: + - bugfix: Raise Dead rune now properly heals and revives dead corpse. + - bugfix: Admin-only rejuvenate verb now heals all organs, limbs, and diseases. + - bugfix: Cyborg sprites now correctly reset with reset boards. This means cyborg + appearances can now be changed without admin intervention. 2013-09-18: - !!python/unicode 'Kilakk': - - !!python/unicode 'rscadd': !!python/unicode 'Fax machines! The Captain and IA - agents can use the fax machine to send properly formatted messages to Central - Command.' - - !!python/unicode 'imageadd': !!python/unicode 'Gave the fax machine a fancy animated - sprite. Thanks Cajoes!' + Kilakk: + - rscadd: Fax machines! The Captain and IA agents can use the fax machine to send + properly formatted messages to Central Command. + - imageadd: Gave the fax machine a fancy animated sprite. Thanks Cajoes! 2013-09-24: - !!python/unicode 'Snapshot': - - !!python/unicode 'rscdel': !!python/unicode 'Removed hidden vote counts.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed hiding of vote results.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed OOC muting during votes.' - - !!python/unicode 'rscadd': !!python/unicode 'Crew transfers are no longer callable - during Red and Delta alert.' - - !!python/unicode 'wip': !!python/unicode 'Started work on Auto transfer framework.' + Snapshot: + - rscdel: Removed hidden vote counts. + - rscdel: Removed hiding of vote results. + - rscdel: Removed OOC muting during votes. + - rscadd: Crew transfers are no longer callable during Red and Delta alert. + - wip: Started work on Auto transfer framework. 2013-10-06: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Return of dreaded side effects. They - now manifest well after their cause disappears, so curing them should be possible - without them reappearing immediately. They also lost last stage damaging effects.' + Chinsky: + - rscadd: Return of dreaded side effects. They now manifest well after their cause + disappears, so curing them should be possible without them reappearing immediately. + They also lost last stage damaging effects. 2013-10-29: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'Xenoarchaeology''s chemical analysis - and six analysis machines are gone, replaced by a single one which can be beaten - in a minigame.' - - !!python/unicode 'rscadd': !!python/unicode 'Sneaky traitors will find new challenges - to overcome at the research outpost, but may also find new opportunities (transit - tubes can now be traversed).' - - !!python/unicode 'rscadd': !!python/unicode 'Finding active alien machinery should - now be made significantly easier with the Alden-Saraspova counter.' + Cael_Aislinn: + - rscadd: Xenoarchaeology's chemical analysis and six analysis machines are gone, + replaced by a single one which can be beaten in a minigame. + - rscadd: Sneaky traitors will find new challenges to overcome at the research outpost, + but may also find new opportunities (transit tubes can now be traversed). + - rscadd: Finding active alien machinery should now be made significantly easier + with the Alden-Saraspova counter. 2013-11-01: - !!python/unicode 'Various': - - !!python/unicode 'rscadd': !!python/unicode 'Autovoting, Get off the station when - your 15 hour workweek is done, thanks unions!' - - !!python/unicode 'rscadd': !!python/unicode 'Some beach props that Chinsky finds - useless.' - - !!python/unicode 'wip': !!python/unicode 'Updated NanoUI' - - !!python/unicode 'rscadd': !!python/unicode 'Dialysis while in sleepers - removes - reagents from mobs, like the chemist, toss him in there!' - - !!python/unicode 'tweak': !!python/unicode 'Pipe Dispensers can now be ordered - by Cargo' - - !!python/unicode 'rscadd': !!python/unicode 'Fancy G-G-G-G-Ghosts!' + Various: + - rscadd: Autovoting, Get off the station when your 15 hour workweek is done, thanks + unions! + - rscadd: Some beach props that Chinsky finds useless. + - wip: Updated NanoUI + - rscadd: Dialysis while in sleepers - removes reagents from mobs, like the chemist, + toss him in there! + - tweak: Pipe Dispensers can now be ordered by Cargo + - rscadd: Fancy G-G-G-G-Ghosts! 2013-11-23: - !!python/unicode 'Ccomp5950': - - !!python/unicode 'bugfix': !!python/unicode 'Players are now no longer able to - commit suicide with a lasertag gun, and will feel silly for doing so.' - - !!python/unicode 'bugfix': !!python/unicode 'Ghosts hit with the cult book shall - now actually become visible.' - - !!python/unicode 'bugfix': !!python/unicode 'The powercells spawned with Exosuits - will now properly be named to not confuse bearded roboticists.' - - !!python/unicode 'bugfix': !!python/unicode 'Blindfolded players will now no longer - require eye surgery to repair their sight, removing the blindfold will be sufficient.' - - !!python/unicode 'rscadd': !!python/unicode 'Atmospheric Technicians will now - have access to Exterior airlocks.' + Ccomp5950: + - bugfix: Players are now no longer able to commit suicide with a lasertag gun, + and will feel silly for doing so. + - bugfix: Ghosts hit with the cult book shall now actually become visible. + - bugfix: The powercells spawned with Exosuits will now properly be named to not + confuse bearded roboticists. + - bugfix: Blindfolded players will now no longer require eye surgery to repair their + sight, removing the blindfold will be sufficient. + - rscadd: Atmospheric Technicians will now have access to Exterior airlocks. 2013-11-24: - !!python/unicode 'Yinadele': - - !!python/unicode 'experiment': !!python/unicode 'Supermatter engine added! Please - treat your new engine gently, and report any strangeness!' - - !!python/unicode 'tweak': !!python/unicode 'Rebalanced events so people don''t - explode into appendicitis or have their organs constantly explode.' - - !!python/unicode 'rscadd': !!python/unicode 'Vending machines have had bottled - water, iced tea, and grape soda added.' - - !!python/unicode 'rscadd': !!python/unicode 'Head reattachment surgery added! - Sew heads back on proper rather than monkey madness.' - - !!python/unicode 'rscadd': !!python/unicode 'Pain crit rebalanced - Added aim - variance depending on pain levels, nerfed blackscreen severely.' - - !!python/unicode 'rscadd': !!python/unicode 'Cyborg alt titles: Robot, and Android - added! These will make you spawn as a posibrained robot. Please enjoy!' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed the sprite on the modified - welding goggles, added a pair to the CE''s office where they''ll be used.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed atmos computers- They are once - again responsive!' - - !!python/unicode 'tweak': !!python/unicode 'Added in functionality proper for - explosive implants- You can now set their level of detonation, and their effects - are more responsively concrete depending on setting.' - - !!python/unicode 'rscadd': !!python/unicode 'Hemostats re-added to autolathe!' - - !!python/unicode 'rscadd': !!python/unicode 'Added two manuals on atmosia and - EVA, by MagmaRam! Found in engineering and the engineering bookcase.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed areas in medbay to have fully - functional APC sectors.' - - !!python/unicode 'rscadd': !!python/unicode 'Girders are now lasable.' - - !!python/unicode 'experiment': !!python/unicode 'Please wait warmly, new features - planned for next merge!' + Yinadele: + - experiment: Supermatter engine added! Please treat your new engine gently, and + report any strangeness! + - tweak: Rebalanced events so people don't explode into appendicitis or have their + organs constantly explode. + - rscadd: Vending machines have had bottled water, iced tea, and grape soda added. + - rscadd: Head reattachment surgery added! Sew heads back on proper rather than + monkey madness. + - rscadd: Pain crit rebalanced - Added aim variance depending on pain levels, nerfed + blackscreen severely. + - rscadd: 'Cyborg alt titles: Robot, and Android added! These will make you spawn + as a posibrained robot. Please enjoy!' + - bugfix: Fixed the sprite on the modified welding goggles, added a pair to the + CE's office where they'll be used. + - bugfix: Fixed atmos computers- They are once again responsive! + - tweak: Added in functionality proper for explosive implants- You can now set their + level of detonation, and their effects are more responsively concrete depending + on setting. + - rscadd: Hemostats re-added to autolathe! + - rscadd: Added two manuals on atmosia and EVA, by MagmaRam! Found in engineering + and the engineering bookcase. + - bugfix: Fixed areas in medbay to have fully functional APC sectors. + - rscadd: Girders are now lasable. + - experiment: Please wait warmly, new features planned for next merge! 2013-12-01: - !!python/unicode 'Various Developers banged their keyboards together:': - - !!python/unicode 'rscadd': !!python/unicode 'New Engine, the supermatter, figure - out what a cooling loop is, or don''t and blow up engineering!' - - !!python/unicode 'rscadd': !!python/unicode 'Each department will have it''s own - fax, make a copy of your butt and fax it to the admins!' - - !!python/unicode 'rscadd': !!python/unicode 'Booze and soda dispensers, they are - like chemmasters, only with booze and soda!' - - !!python/unicode 'rscadd': !!python/unicode 'Bluespace and Cryostasis beakers, - how do they work? Fuggin bluespace how do they work?' - - !!python/unicode 'rscadd': !!python/unicode 'You can now shove things into vending - machines, impress your friends on how things magically disappear out of your - hands into the machine!' - - !!python/unicode 'rscadd': !!python/unicode 'Robots and Androids (And gynoids - too!) can now use custom job titles' - - !!python/unicode 'bugfix': !!python/unicode 'Various bugfixes' + 'Various Developers banged their keyboards together:': + - rscadd: New Engine, the supermatter, figure out what a cooling loop is, or don't + and blow up engineering! + - rscadd: Each department will have it's own fax, make a copy of your butt and fax + it to the admins! + - rscadd: Booze and soda dispensers, they are like chemmasters, only with booze + and soda! + - rscadd: Bluespace and Cryostasis beakers, how do they work? Fuggin bluespace + how do they work? + - rscadd: You can now shove things into vending machines, impress your friends on + how things magically disappear out of your hands into the machine! + - rscadd: Robots and Androids (And gynoids too!) can now use custom job titles + - bugfix: Various bugfixes 2013-12-18: - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'Mousetraps can now be "hidden" through - the right-click menu. This makes them go under tables, clutter and the like. - The filthy rodents will never see it coming!' - - !!python/unicode 'tweak': !!python/unicode 'Monkeys will no longer move randomly - while being pulled.' + RavingManiac: + - rscadd: Mousetraps can now be "hidden" through the right-click menu. This makes + them go under tables, clutter and the like. The filthy rodents will never see + it coming! + - tweak: Monkeys will no longer move randomly while being pulled. 2014-01-01: - !!python/unicode 'Various': - - !!python/unicode 'rscadd': !!python/unicode 'AntagHUD and MedicalHUD for ghosts, - see who the baddies are, check for new configuration options.' - - !!python/unicode 'rscadd': !!python/unicode 'Ghosts will now have bold text if - they are in the same room as the person making conversations easier to follow.' - - !!python/unicode 'rscadd': !!python/unicode 'New hairstyles! Now you can use - something other then hotpink floor length braid.' - - !!python/unicode 'wip': !!python/unicode 'DNA rework, tell us how you were cloned - and became albino!' - - !!python/unicode 'rscadd': !!python/unicode 'Dirty floors, so now you know exactly - how lazy the janitors are!' - - !!python/unicode 'rscadd': !!python/unicode 'A new UI system, feel free to color - it yourself, don''t set it to completely clear or you will have a bad time.' - - !!python/unicode 'rscadd': !!python/unicode 'Cryogenic storage, for all your SSD - needs.' - - !!python/unicode 'rscadd': !!python/unicode 'New hardsuits for those syndicate - tajaran' + Various: + - rscadd: AntagHUD and MedicalHUD for ghosts, see who the baddies are, check for + new configuration options. + - rscadd: Ghosts will now have bold text if they are in the same room as the person + making conversations easier to follow. + - rscadd: New hairstyles! Now you can use something other then hotpink floor length + braid. + - wip: DNA rework, tell us how you were cloned and became albino! + - rscadd: Dirty floors, so now you know exactly how lazy the janitors are! + - rscadd: A new UI system, feel free to color it yourself, don't set it to completely + clear or you will have a bad time. + - rscadd: Cryogenic storage, for all your SSD needs. + - rscadd: New hardsuits for those syndicate tajaran 2014-02-01: - !!python/unicode 'Various': - - !!python/unicode 'rscadd': !!python/unicode 'NanoUI for PDA' - - !!python/unicode 'rscadd': !!python/unicode 'Write in blood while a ghost in cult - rounds with enough cultists' - - !!python/unicode 'rscadd': !!python/unicode 'Cookies, absurd sandwiches, and even - cookable dioanae nymphs!' - - !!python/unicode 'rscadd': !!python/unicode 'A bunch of new guns and other weapons' - - !!python/unicode 'rscadd': !!python/unicode 'Species specific blood' + Various: + - rscadd: NanoUI for PDA + - rscadd: Write in blood while a ghost in cult rounds with enough cultists + - rscadd: Cookies, absurd sandwiches, and even cookable dioanae nymphs! + - rscadd: A bunch of new guns and other weapons + - rscadd: Species specific blood 2014-02-19: - !!python/unicode 'Aryn': - - !!python/unicode 'experiment': !!python/unicode 'New air model. Nothing should - change to a great degree, but temperature flow might be affected due to closed - connections not sticking around.' + Aryn: + - experiment: New air model. Nothing should change to a great degree, but temperature + flow might be affected due to closed connections not sticking around. 2014-03-01: - !!python/unicode 'Various': - - !!python/unicode 'rscadd': !!python/unicode 'Paint Mixing, red and blue makes - purple!' - - !!python/unicode 'rscadd': !!python/unicode 'New posters to tell you to respect - those darned cat people' - - !!python/unicode 'rscadd': !!python/unicode 'NanoUI for APC''s, Canisters, Tank - Transfer Valves and the heaters / coolers' - - !!python/unicode 'tweak': !!python/unicode 'PDA bombs are now less annoying, and - won''t always blow up / cause internal bleeding' - - !!python/unicode 'tweak': !!python/unicode 'Blob made less deadly' - - !!python/unicode 'rscadd': !!python/unicode 'Objectiveless Antags now a configuration - option, choose your own adventure!' - - !!python/unicode 'wip': !!python/unicode 'Engineering redesign, now with better - monitoring of the explodium supermatter!' - - !!python/unicode 'rscadd': !!python/unicode 'Security EOD' - - !!python/unicode 'rscadd': !!python/unicode 'New playable race, IPC''s, go beep - boop boop all over the station!' - - !!python/unicode 'rscadd': !!python/unicode 'Gamemode autovoting, now players - don''t have to call for gamemode votes, it''s automatic!' + Various: + - rscadd: Paint Mixing, red and blue makes purple! + - rscadd: New posters to tell you to respect those darned cat people + - rscadd: NanoUI for APC's, Canisters, Tank Transfer Valves and the heaters / coolers + - tweak: PDA bombs are now less annoying, and won't always blow up / cause internal + bleeding + - tweak: Blob made less deadly + - rscadd: Objectiveless Antags now a configuration option, choose your own adventure! + - wip: Engineering redesign, now with better monitoring of the explodium supermatter! + - rscadd: Security EOD + - rscadd: New playable race, IPC's, go beep boop boop all over the station! + - rscadd: Gamemode autovoting, now players don't have to call for gamemode votes, + it's automatic! 2014-03-05: - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'Smartfridges added to the bar, chemistry - and virology. No more clutter!' - - !!python/unicode 'rscadd': !!python/unicode 'A certain musical instrument has - returned to the bar.' - - !!python/unicode 'rscadd': !!python/unicode 'There is now a ten second delay between - ingesting a pill/donut/milkshake and regretting it.' + RavingManiac: + - rscadd: Smartfridges added to the bar, chemistry and virology. No more clutter! + - rscadd: A certain musical instrument has returned to the bar. + - rscadd: There is now a ten second delay between ingesting a pill/donut/milkshake + and regretting it. 2014-03-10: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Viruses now affect certain range - of species, different for each virus' - - !!python/unicode 'tweak': !!python/unicode 'Spaceacilline now prevents infection, - and has a small chance to cure viruses at Stage 1. It does not give them antibodies - though, so they can get sick again!' - - !!python/unicode 'tweak': !!python/unicode 'Biosuits and spacesuits now offer - more protection against viruses. Full biosuit competely prevents airborne infection, - when coupled with gloves they both protect quite well from contact ones' - - !!python/unicode 'rscadd': !!python/unicode 'Sneezing now spreads viruses in front - of mob. Sometimes he gets a warning beforehand though' + Chinsky: + - rscadd: Viruses now affect certain range of species, different for each virus + - tweak: Spaceacilline now prevents infection, and has a small chance to cure viruses + at Stage 1. It does not give them antibodies though, so they can get sick again! + - tweak: Biosuits and spacesuits now offer more protection against viruses. Full + biosuit competely prevents airborne infection, when coupled with gloves they + both protect quite well from contact ones + - rscadd: Sneezing now spreads viruses in front of mob. Sometimes he gets a warning + beforehand though 2014-03-30: - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'Inflatable walls and doors added. - Useful for sealing off hull breaches, but easily punctured by sharp objects - and Tajarans.' + RavingManiac: + - rscadd: Inflatable walls and doors added. Useful for sealing off hull breaches, + but easily punctured by sharp objects and Tajarans. 2014-04-06: - !!python/unicode 'RavingManiac': - - !!python/unicode 'tweak': !!python/unicode 'Tape recorders and station-bounced - radios now work inside containers and closets.' + RavingManiac: + - tweak: Tape recorders and station-bounced radios now work inside containers and + closets. 2014-04-11: - !!python/unicode 'Jarcolr': - - !!python/unicode 'rscadd': !!python/unicode 'You can now flip coins like a D2' - - !!python/unicode 'tweak': !!python/unicode 'Miscellaneous cargo crates got a tiny - buff, Standard Costume crate is now Costume Crate' - - !!python/unicode 'tweak': !!python/unicode 'Grammar patch,telekinesis/amputated - arm exploit fixes,more in the future' - - !!python/unicode 'tweak': !!python/unicode 'Grille kicking now does less damage' - - !!python/unicode 'tweak': !!python/unicode 'TELESCOPIC baton no longer knocks - anybody down,still got a lot of force though' - - !!python/unicode 'tweak': !!python/unicode 'Other small-ish changes and fixes - that aren''t worth mentioning' + Jarcolr: + - rscadd: You can now flip coins like a D2 + - tweak: Miscellaneous cargo crates got a tiny buff, Standard Costume crate is now + Costume Crate + - tweak: Grammar patch,telekinesis/amputated arm exploit fixes,more in the future + - tweak: Grille kicking now does less damage + - tweak: TELESCOPIC baton no longer knocks anybody down,still got a lot of force + though + - tweak: Other small-ish changes and fixes that aren't worth mentioning 2014-04-25: - !!python/unicode 'Various': - - !!python/unicode 'rscadd': !!python/unicode 'Overhauled saycode, you can now use - languages over the radio.' - - !!python/unicode 'rscadd': !!python/unicode 'Chamelon items beyond just the suit.' - - !!python/unicode 'rscadd': !!python/unicode 'NanoUI Virology' - - !!python/unicode 'rscadd': !!python/unicode '3D Sounds' - - !!python/unicode 'rscadd': !!python/unicode 'AI Channel color for when they want - to be all sneaky' - - !!python/unicode 'rscadd': !!python/unicode 'New inflatable walls and airlocks - for your breach sealing pleasure.' - - !!python/unicode 'rscadd': !!python/unicode 'Carbon Copy papers, so you can subject - everyone to your authority and paperwork, but mainly paperwork' - - !!python/unicode 'rscadd': !!python/unicode 'Undershirts and rolling down jumpsuits' - - !!python/unicode 'rscadd': !!python/unicode 'Insta-hit tasers, can be shot through - glass as well.' - - !!python/unicode 'rscadd': !!python/unicode 'Changeling balances, an emphasis - put more on stealth.' - - !!python/unicode 'rscdel': !!python/unicode 'Genetics disabled' - - !!python/unicode 'rscdel': !!python/unicode 'Telescience removed, might be added - again when we come up with a less math headache enducing version of it.' - - !!python/unicode 'bugfix': !!python/unicode 'Bugfixes galore!' + Various: + - rscadd: Overhauled saycode, you can now use languages over the radio. + - rscadd: Chamelon items beyond just the suit. + - rscadd: NanoUI Virology + - rscadd: 3D Sounds + - rscadd: AI Channel color for when they want to be all sneaky + - rscadd: New inflatable walls and airlocks for your breach sealing pleasure. + - rscadd: Carbon Copy papers, so you can subject everyone to your authority and + paperwork, but mainly paperwork + - rscadd: Undershirts and rolling down jumpsuits + - rscadd: Insta-hit tasers, can be shot through glass as well. + - rscadd: Changeling balances, an emphasis put more on stealth. + - rscdel: Genetics disabled + - rscdel: Telescience removed, might be added again when we come up with a less + math headache enducing version of it. + - bugfix: Bugfixes galore! 2014-04-29: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'rscadd': !!python/unicode 'Webbing vest storage can now be accessed - by clicking on the item in inventory' - - !!python/unicode 'rscadd': !!python/unicode 'Holsters can be accessed by clicking - on them in inventory' - - !!python/unicode 'rscadd': !!python/unicode 'Webbings and other suit attachments - are now visible on the icon in inventory' - - !!python/unicode 'tweak': !!python/unicode 'Removing jumpsuits now requires drag - and drop to prevent accidental undressing' - - !!python/unicode 'rscadd': !!python/unicode 'Added an action icon for magboots - that can be used to toggle them similar to flashlights' - - !!python/unicode 'rscadd': !!python/unicode 'Fuel tanks now spill fuel when wrenched - open' + HarpyEagle: + - rscadd: Webbing vest storage can now be accessed by clicking on the item in inventory + - rscadd: Holsters can be accessed by clicking on them in inventory + - rscadd: Webbings and other suit attachments are now visible on the icon in inventory + - tweak: Removing jumpsuits now requires drag and drop to prevent accidental undressing + - rscadd: Added an action icon for magboots that can be used to toggle them similar + to flashlights + - rscadd: Fuel tanks now spill fuel when wrenched open 2014-05-03: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'rscadd': !!python/unicode "Coming out of nowhere the past few\ - \ months, the Garland Corporation has made headlines with a new prehistoric\ - \ theme park delighting travellers with species thought extinct. Now available\ - \ for research stations everywhere is the technology that made it all possible!\ - \ Features include:
    \n\t\t\t- 13 discoverable prehistoric species to clone\ - \ from fossils (including 5 brand new ones).
    \n\t\t\t- 11 discoverable prehistoric\ - \ plants to clone from fossils (including 9 brand new ones).
    \n\t\t\t- New\ - \ minigame that involves correctly ordering the genomes inside each genetic\ - \ sequence to unlock an animal/plant.
    \n\t\t\t- Some prehistoric animals\ - \ and plants may seem strangely familiar... while others may bring more than\ - \ the erstwhile scientist bargains for.
    \n




    " + Cael_Aislinn: + - rscadd: "Coming out of nowhere the past few months, the Garland Corporation has\ + \ made headlines with a new prehistoric theme park delighting travellers with\ + \ species thought extinct. Now available for research stations everywhere is\ + \ the technology that made it all possible! Features include:
    \n\t\t\t-\ + \ 13 discoverable prehistoric species to clone from fossils (including 5 brand\ + \ new ones).
    \n\t\t\t- 11 discoverable prehistoric plants to clone from fossils\ + \ (including 9 brand new ones).
    \n\t\t\t- New minigame that involves correctly\ + \ ordering the genomes inside each genetic sequence to unlock an animal/plant.
    \n\ + \t\t\t- Some prehistoric animals and plants may seem strangely familiar... while\ + \ others may bring more than the erstwhile scientist bargains for.
    \n




    " 2014-05-06: - !!python/unicode 'Hubble': - - !!python/unicode 'rscadd': !!python/unicode 'Clip papers together by hitting a - paper with a paper or photo' - - !!python/unicode 'imageadd': !!python/unicode 'Adds icons for copied stamps' + Hubble: + - rscadd: Clip papers together by hitting a paper with a paper or photo + - imageadd: Adds icons for copied stamps 2014-05-16: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'rscadd': !!python/unicode 'Silicon mob types (AI, cyborgs, PAI) - can now speak certain species languages depending on type and module' - - !!python/unicode 'rscadd': !!python/unicode 'Languages can now be whispered when - using the language code with either the whisper verb or the whisper speech code' + HarpyEagle: + - rscadd: Silicon mob types (AI, cyborgs, PAI) can now speak certain species languages + depending on type and module + - rscadd: Languages can now be whispered when using the language code with either + the whisper verb or the whisper speech code 2014-05-23: - !!python/unicode 'Hubble': - - !!python/unicode 'rscadd': !!python/unicode 'Personal lockers are now resettable' - - !!python/unicode 'rscadd': !!python/unicode 'Take off people''s accessories or - change their sensors in the drag and drop-interface' - - !!python/unicode 'rscadd': !!python/unicode 'Merge paper bundles by hitting one - with another' - - !!python/unicode 'tweak': !!python/unicode 'Line breaks in Security, Medical and - Employment Records' - - !!python/unicode 'tweak': !!python/unicode 'Record printouts will have names on - it' - - !!python/unicode 'tweak': !!python/unicode 'Set other people''s internals in belt - and suit storage slots' - - !!python/unicode 'bugfix': !!python/unicode 'No longer changing suit sensors while - cuffed' - - !!python/unicode 'bugfix': !!python/unicode 'No longer emptying other people''s - pockets when they are not full yet' + Hubble: + - rscadd: Personal lockers are now resettable + - rscadd: Take off people's accessories or change their sensors in the drag and + drop-interface + - rscadd: Merge paper bundles by hitting one with another + - tweak: Line breaks in Security, Medical and Employment Records + - tweak: Record printouts will have names on it + - tweak: Set other people's internals in belt and suit storage slots + - bugfix: No longer changing suit sensors while cuffed + - bugfix: No longer emptying other people's pockets when they are not full yet 2014-05-28: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Adds few new paperBBcode tags, to - make up for HTML removal.' - - !!python/unicode 'rscadd': !!python/unicode '[logo] tag draws NT logo image (one - from wiki).' - - !!python/unicode 'rscadd': !!python/unicode '[table] [/table] tags mark borders - of tables. [grid] [/grid] are borderless tables, useful of making layouts. Inside - tables following tags are used: [row] marks beginning of new table row, [cell] - - beginning of new table cell.' + Chinsky: + - rscadd: Adds few new paperBBcode tags, to make up for HTML removal. + - rscadd: '[logo] tag draws NT logo image (one from wiki).' + - rscadd: '[table] [/table] tags mark borders of tables. [grid] [/grid] are borderless + tables, useful of making layouts. Inside tables following tags are used: [row] + marks beginning of new table row, [cell] - beginning of new table cell.' 2014-05-31: - !!python/unicode 'Jarcolr': - - !!python/unicode 'rscadd': !!python/unicode '21 New cargo crates, go check them - out!' - - !!python/unicode 'rscadd': !!python/unicode 'Peanuts have now been added, food - items are now being developed.' - - !!python/unicode 'rscadd': !!python/unicode '2 new cargo groups, Miscellaneous - and Supply.' - - !!python/unicode 'rscadd': !!python/unicode 'Sugarcane seeds can now be gotten - from the seed dispenser.' - - !!python/unicode 'rscadd': !!python/unicode '5 new satchels when selecting "satchel" - for RD, scientist, botanist, virologist, geneticist (disabled) and chemist.' - - !!python/unicode 'rscadd': !!python/unicode 'Clicking on a player with a paper/book - when you have the eyes selected shows them the book/paper forcefully.' + Jarcolr: + - rscadd: 21 New cargo crates, go check them out! + - rscadd: Peanuts have now been added, food items are now being developed. + - rscadd: 2 new cargo groups, Miscellaneous and Supply. + - rscadd: Sugarcane seeds can now be gotten from the seed dispenser. + - rscadd: 5 new satchels when selecting "satchel" for RD, scientist, botanist, virologist, + geneticist (disabled) and chemist. + - rscadd: Clicking on a player with a paper/book when you have the eyes selected + shows them the book/paper forcefully. 2014-06-03: - !!python/unicode 'Hubblenaut': - - !!python/unicode 'rscadd': !!python/unicode 'Added wheelchairs' - - !!python/unicode 'tweak': !!python/unicode 'Replaced stool in Medical Examination - with wheelchair' - - !!python/unicode 'tweak': !!python/unicode 'Using a fire-extinguisher to propel - you on a chair can have consequences (drive into walls and people, do it!)' + Hubblenaut: + - rscadd: Added wheelchairs + - tweak: Replaced stool in Medical Examination with wheelchair + - tweak: Using a fire-extinguisher to propel you on a chair can have consequences + (drive into walls and people, do it!) 2014-06-13: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'rscadd': !!python/unicode 'Added docking ports for shuttles' - - !!python/unicode 'rscadd': !!python/unicode 'Shuttle airlocks will automatically - open and close, preventing people from being sucked into space by because someone - on another z-level called a shuttle' - - !!python/unicode 'rscadd': !!python/unicode 'Some docking ports can also double - as airlocks' - - !!python/unicode 'rscadd': !!python/unicode 'Docking ports can be overriden to - prevent any automatic action. Shuttles will wait for players to open/close doors - manually' - - !!python/unicode 'rscadd': !!python/unicode 'Shuttles can be forced launched, - which will make them not wait for airlocks to be properly closed' + HarpyEagle: + - rscadd: Added docking ports for shuttles + - rscadd: Shuttle airlocks will automatically open and close, preventing people + from being sucked into space by because someone on another z-level called a + shuttle + - rscadd: Some docking ports can also double as airlocks + - rscadd: Docking ports can be overriden to prevent any automatic action. Shuttles + will wait for players to open/close doors manually + - rscadd: Shuttles can be forced launched, which will make them not wait for airlocks + to be properly closed 2014-06-15: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'bugfix': !!python/unicode 'Fixed wound autohealing regardless - of damage amount. The appropriate wound will now be assigned correctly based - on damage amount and type' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed several other bugs related - wounds that resulted in damage magically disappearing' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed various sharp objects not being - counted as sharp, bullets in particular' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed armour providing more protection - from bullets than it was supposed to' + HarpyEagle: + - bugfix: Fixed wound autohealing regardless of damage amount. The appropriate wound + will now be assigned correctly based on damage amount and type + - bugfix: Fixed several other bugs related wounds that resulted in damage magically + disappearing + - bugfix: Fixed various sharp objects not being counted as sharp, bullets in particular + - bugfix: Fixed armour providing more protection from bullets than it was supposed + to 2014-06-19: - !!python/unicode 'Chinsky': - - !!python/unicode 'rscadd': !!python/unicode 'Adds guest terminals on the map. - These wall terminals let anyone issue temporary IDs. Only access that issuer - has can be granted, and maximum time pass can be issued for is 20 minutes. All - operations are logged in terminals.' + Chinsky: + - rscadd: Adds guest terminals on the map. These wall terminals let anyone issue + temporary IDs. Only access that issuer has can be granted, and maximum time + pass can be issued for is 20 minutes. All operations are logged in terminals. 2014-06-20: - !!python/unicode 'Cael_Aislinn': - - !!python/unicode 'rscadd': !!python/unicode 'New discoverable items added to xenoarchaeology, - and new features for some existing ones. Artifact harvesters can now harvest - the secondary effect of artifacts as well as the primary one.
    + Cael_Aislinn: + - rscadd: 'New discoverable items added to xenoarchaeology, and new features for + some existing ones. Artifact harvesters can now harvest the secondary effect + of artifacts as well as the primary one.

    ' - - !!python/unicode 'tweak': !!python/unicode 'Artifact utilisers should be much - nicer/easier to use now.
    + - tweak: 'Artifact utilisers should be much nicer/easier to use now.
  • Alden-Saraspova counters and talking items should work properly now.
    @@ -1253,316 +1010,252 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
    ' 2014-07-01: - !!python/unicode 'Various': - - !!python/unicode 'experiment': !!python/unicode 'Hardsuit breaching.' - - !!python/unicode 'experiment': !!python/unicode 'Rewritten fire.' - - !!python/unicode 'experiment': !!python/unicode 'Supermatter now glows and sucks - things into it as it approaches criticality.' - - !!python/unicode 'rscadd': !!python/unicode 'Station Vox (Vox pariahs) are now - available.' - - !!python/unicode 'rscadd': !!python/unicode 'Wheelchairs.' - - !!python/unicode 'rscadd': !!python/unicode 'Cargo Trains.' - - !!python/unicode 'rscadd': !!python/unicode 'Hardsuit cycler machinery.' - - !!python/unicode 'rscadd': !!python/unicode 'Rewritten lighting (coloured lights!)' - - !!python/unicode 'rscadd': !!python/unicode 'New Mining machinery and rewritten - smelting.' - - !!python/unicode 'rscadd': !!python/unicode 'Rewritten autolathe' - - !!python/unicode 'rscadd': !!python/unicode 'Mutiny mode.' - - !!python/unicode 'rscadd': !!python/unicode 'NanoUI airlock and docking controllers.' - - !!python/unicode 'rscadd': !!python/unicode 'Completely rewritten shuttle code.' - - !!python/unicode 'rscadd': !!python/unicode 'Derelict Z-level replacement: construction - site.' - - !!python/unicode 'rscadd': !!python/unicode 'Computer3 laptops.' - - !!python/unicode 'rscadd': !!python/unicode 'Constructable SMES units.' - - !!python/unicode 'rscadd': !!python/unicode 'Omni-directional atmos machinery.' - - !!python/unicode 'rscadd': !!python/unicode 'Climbable tables and crates.' - - !!python/unicode 'rscadd': !!python/unicode 'Xenoflora added to Science.' - - !!python/unicode 'rscadd': !!python/unicode 'Utensils can be used to eat food.' - - !!python/unicode 'rscadd': !!python/unicode 'Decks of cards are now around the - station.' - - !!python/unicode 'rscadd': !!python/unicode 'Service robots can speak languages.' - - !!python/unicode 'wip': !!python/unicode 'Xenoarch updates and fixes.' - - !!python/unicode 'tweak': !!python/unicode 'Rewritten species-specific gear icon - handling.' - - !!python/unicode 'tweak': !!python/unicode 'Cats and borers can be picked up.' - - !!python/unicode 'tweak': !!python/unicode 'Botanist renamed to Gardener.' - - !!python/unicode 'tweak': !!python/unicode 'Hydroponics merged with the Kitchen.' - - !!python/unicode 'tweak': !!python/unicode 'Latejoin spawn points (Arrivals, Cryostorage, - Gateway).' - - !!python/unicode 'rscadd': !!python/unicode 'Escape pods only launch automatically - during emergency evacuations' - - !!python/unicode 'rscadd': !!python/unicode 'Escape pods can be made to launch - during regular crew transfers using the control panel inside the pod, or by - emagging the panel outside the pod' - - !!python/unicode 'rscadd': !!python/unicode 'When swiped or emagged, the crew - transfer shuttle can be delayed in addition to being launched early' + Various: + - experiment: Hardsuit breaching. + - experiment: Rewritten fire. + - experiment: Supermatter now glows and sucks things into it as it approaches criticality. + - rscadd: Station Vox (Vox pariahs) are now available. + - rscadd: Wheelchairs. + - rscadd: Cargo Trains. + - rscadd: Hardsuit cycler machinery. + - rscadd: Rewritten lighting (coloured lights!) + - rscadd: New Mining machinery and rewritten smelting. + - rscadd: Rewritten autolathe + - rscadd: Mutiny mode. + - rscadd: NanoUI airlock and docking controllers. + - rscadd: Completely rewritten shuttle code. + - rscadd: 'Derelict Z-level replacement: construction site.' + - rscadd: Computer3 laptops. + - rscadd: Constructable SMES units. + - rscadd: Omni-directional atmos machinery. + - rscadd: Climbable tables and crates. + - rscadd: Xenoflora added to Science. + - rscadd: Utensils can be used to eat food. + - rscadd: Decks of cards are now around the station. + - rscadd: Service robots can speak languages. + - wip: Xenoarch updates and fixes. + - tweak: Rewritten species-specific gear icon handling. + - tweak: Cats and borers can be picked up. + - tweak: Botanist renamed to Gardener. + - tweak: Hydroponics merged with the Kitchen. + - tweak: Latejoin spawn points (Arrivals, Cryostorage, Gateway). + - rscadd: Escape pods only launch automatically during emergency evacuations + - rscadd: Escape pods can be made to launch during regular crew transfers using + the control panel inside the pod, or by emagging the panel outside the pod + - rscadd: When swiped or emagged, the crew transfer shuttle can be delayed in addition + to being launched early 2014-07-06: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'rscadd': !!python/unicode 'Re-enabled and rewrote the wound - infection system' - - !!python/unicode 'rscadd': !!python/unicode 'Infections can be prevented by properly - bandaging and salving wounds' - - !!python/unicode 'rscadd': !!python/unicode 'Infections are cured by spaceacillin' + HarpyEagle: + - rscadd: Re-enabled and rewrote the wound infection system + - rscadd: Infections can be prevented by properly bandaging and salving wounds + - rscadd: Infections are cured by spaceacillin 2014-07-20: - !!python/unicode 'PsiOmegaDelta': - - !!python/unicode 'rscadd': !!python/unicode 'AI can now store up to five camera - locations and return to them when desired.' - - !!python/unicode 'rscadd': !!python/unicode 'AI can now alt+left click turfs in - camera view to list and interact with the objects.' - - !!python/unicode 'rscadd': !!python/unicode 'AI can now ctrl+click turret controls - to enable/disable turrets.' - - !!python/unicode 'rscadd': !!python/unicode 'AI can now alt+click turret controls - to toggle stun/lethal mode.' - - !!python/unicode 'rscadd': !!python/unicode 'AI can now select which channel to - state laws on.' + PsiOmegaDelta: + - rscadd: AI can now store up to five camera locations and return to them when desired. + - rscadd: AI can now alt+left click turfs in camera view to list and interact with + the objects. + - rscadd: AI can now ctrl+click turret controls to enable/disable turrets. + - rscadd: AI can now alt+click turret controls to toggle stun/lethal mode. + - rscadd: AI can now select which channel to state laws on. 2014-07-26: - !!python/unicode 'Whitellama': - - !!python/unicode 'rscadd': !!python/unicode 'Added dynamic flavour text.' - - !!python/unicode 'bugfix': !!python/unicode 'Fixed bug with suit fibers and fingerprints.' + Whitellama: + - rscadd: Added dynamic flavour text. + - bugfix: Fixed bug with suit fibers and fingerprints. 2014-07-31: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'tweak': !!python/unicode 'Stun batons now work like tasers and - deal agony instead of stun' - - !!python/unicode 'rscadd': !!python/unicode 'Being hit in the hands with a stun - weapon will cause whatever is being held to be dropped' - - !!python/unicode 'tweak': !!python/unicode 'Handcuffs now require an aggressive - grab to be used' + HarpyEagle: + - tweak: Stun batons now work like tasers and deal agony instead of stun + - rscadd: Being hit in the hands with a stun weapon will cause whatever is being + held to be dropped + - tweak: Handcuffs now require an aggressive grab to be used 2014-08-02: - !!python/unicode 'Whitellama': - - !!python/unicode 'bugfix': !!python/unicode 'Arcane tomes can now be stored on - bookshelves.' - - !!python/unicode 'bugfix': !!python/unicode 'Dionaea players no longer crash on - death, and now become nymphs properly.' + Whitellama: + - bugfix: Arcane tomes can now be stored on bookshelves. + - bugfix: Dionaea players no longer crash on death, and now become nymphs properly. 2014-08-05: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'tweak': !!python/unicode 'Atmos Rewrite. Many atmos devices - now use power according to their load and gas physics' - - !!python/unicode 'rscadd': !!python/unicode 'Pressure regulator device. Replaces - the passive gate and can regulate input or output pressure' - - !!python/unicode 'rscadd': !!python/unicode 'Gas heaters and gas coolers are now - constructable and can be upgraded with parts from research' - - !!python/unicode 'bugfix': !!python/unicode 'Fixes recharger and cell charger - power draw. Rechargers draw 15 kW, wall chargers draw 25 kW, and heavy-duty - cell chargers draw 40 kW. Cyborg charging stations draw 75 kW.' - - !!python/unicode 'bugfix': !!python/unicode 'Laptops, and various other machines, - now draw more reasonable amounts of power' - - !!python/unicode 'bugfix': !!python/unicode 'Machines will periodically update - their powered status if moved from a powered to an unpowered area and vice versa' + HarpyEagle: + - tweak: Atmos Rewrite. Many atmos devices now use power according to their load + and gas physics + - rscadd: Pressure regulator device. Replaces the passive gate and can regulate + input or output pressure + - rscadd: Gas heaters and gas coolers are now constructable and can be upgraded + with parts from research + - bugfix: Fixes recharger and cell charger power draw. Rechargers draw 15 kW, wall + chargers draw 25 kW, and heavy-duty cell chargers draw 40 kW. Cyborg charging + stations draw 75 kW. + - bugfix: Laptops, and various other machines, now draw more reasonable amounts + of power + - bugfix: Machines will periodically update their powered status if moved from a + powered to an unpowered area and vice versa 2014-08-27: - !!python/unicode 'Whitellama': - - !!python/unicode 'bugfix': !!python/unicode 'Made destination taggers more intuitive - so you know when you''ve tagged something' - - !!python/unicode 'rscadd': !!python/unicode 'Ported package label and tag sprites' - - !!python/unicode 'rscadd': !!python/unicode 'Ported using a pen on a package to - give it a title, or to write a note' - - !!python/unicode 'rscadd': !!python/unicode 'Donut boxes and egg boxes can be - constructed out of cardboard' + Whitellama: + - bugfix: Made destination taggers more intuitive so you know when you've tagged + something + - rscadd: Ported package label and tag sprites + - rscadd: Ported using a pen on a package to give it a title, or to write a note + - rscadd: Donut boxes and egg boxes can be constructed out of cardboard 2014-08-31: - !!python/unicode 'Whitellama': - - !!python/unicode 'bugfix': !!python/unicode 'Matches and candles can be used to - burn papers, too.' - - !!python/unicode 'bugfix': !!python/unicode 'Observers have a bit more time (20 - seconds, instead of 7.5) before the Diona join prompt disappears.' + Whitellama: + - bugfix: Matches and candles can be used to burn papers, too. + - bugfix: Observers have a bit more time (20 seconds, instead of 7.5) before the + Diona join prompt disappears. 2014-09-05: - !!python/unicode 'RavingManiac': - - !!python/unicode 'experiment': !!python/unicode 'NewPipe implemented: Supply and - scrubber pipes can be run in parallel without connecting to each other.' - - !!python/unicode 'rscadd': !!python/unicode 'Supply pipes will only connect to - supply pipes, vents and Universal Pipe Adapters(UPAs).' - - !!python/unicode 'rscadd': !!python/unicode 'Scrubber pipes will only connect - to scrubber pipes, scrubbers and UPAs.' - - !!python/unicode 'rscadd': !!python/unicode 'UPAs will connect to regular, scrubber - and supply pipes.' + RavingManiac: + - experiment: 'NewPipe implemented: Supply and scrubber pipes can be run in parallel + without connecting to each other.' + - rscadd: Supply pipes will only connect to supply pipes, vents and Universal Pipe + Adapters(UPAs). + - rscadd: Scrubber pipes will only connect to scrubber pipes, scrubbers and UPAs. + - rscadd: UPAs will connect to regular, scrubber and supply pipes. 2014-09-20: - !!python/unicode 'HarpyEagle': - - !!python/unicode 'bugfix': !!python/unicode 'Fixes evidence bags and boxes eating - each other. Evidence bags now store items by dragging the bag onto the item - to be stored.' + HarpyEagle: + - bugfix: Fixes evidence bags and boxes eating each other. Evidence bags now store + items by dragging the bag onto the item to be stored. 2014-09-28: - !!python/unicode 'Gamerofthegame': - - !!python/unicode 'rscadd': !!python/unicode 'Hoverpods fully supported, currently - orderable from cargo. Two slots, three cargo, space flight and a working mech - for all other intents and purposes.' - - !!python/unicode 'rscadd': !!python/unicode 'Added the Rigged laser and Passenger - Compartment equipment. The rigged laser is a weapon for working exosuits - just - a ordinary laser, but with triple the cool down and rather power inefficient. - The passenger compartment allows other people to board and hitch a ride on the - mech - such as in fire rescue or for space flight.' - !!python/unicode 'Zuhayr': - - !!python/unicode 'rscadd': !!python/unicode 'Organs can now be removed and transplanted.' - - !!python/unicode 'tweak': !!python/unicode 'Brain surgery is now the same as chest - surgery regarding the steps leading up to it.' - - !!python/unicode 'tweak': !!python/unicode 'Appendix and kidney now share the - groin and removing the first will prevent appendicitis.' - - !!python/unicode 'tweak': !!python/unicode 'Lots of backend surgery/organ stuff, - see the PR if you need to know.' + Gamerofthegame: + - rscadd: Hoverpods fully supported, currently orderable from cargo. Two slots, + three cargo, space flight and a working mech for all other intents and purposes. + - rscadd: Added the Rigged laser and Passenger Compartment equipment. The rigged + laser is a weapon for working exosuits - just a ordinary laser, but with triple + the cool down and rather power inefficient. The passenger compartment allows + other people to board and hitch a ride on the mech - such as in fire rescue + or for space flight. + Zuhayr: + - rscadd: Organs can now be removed and transplanted. + - tweak: Brain surgery is now the same as chest surgery regarding the steps leading + up to it. + - tweak: Appendix and kidney now share the groin and removing the first will prevent + appendicitis. + - tweak: Lots of backend surgery/organ stuff, see the PR if you need to know. 2014-10-01: - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'Zooming with the sniper rifle now - adds a view offset in the direction you are facing.' - - !!python/unicode 'rscadd': !!python/unicode 'Added binoculars - functionally similar - to sniper scope. Adminspawn-only for now.' - - !!python/unicode 'rscadd': !!python/unicode 'Bottles from chemistry now, like - beakers, use chemical overlays instead of fixed sprites.' - - !!python/unicode 'rscadd': !!python/unicode 'Being in space while not magbooted - to something will cause your sprite to bob up and down.' - !!python/unicode 'Zuhayr': - - !!python/unicode 'rscadd': !!python/unicode 'Added species organ checks to several - areas (phoron burn, welder burn, appendicitis, vox cortical stacks, flashes).' - - !!python/unicode 'rscadd': !!python/unicode 'Added VV option to add or remove - organs.' - - !!python/unicode 'rscadd': !!python/unicode 'Added simple bioprinter (adminspawn).' - - !!python/unicode 'rscadd': !!python/unicode 'Added smashing/slashing behavior - from xenos to some unarmed attacks.' - - !!python/unicode 'rscadd': !!python/unicode 'Added some new state icons for diona - nymphs.' - - !!python/unicode 'rscadd': !!python/unicode 'Added borer husk functionality (cortical - borers can turn dead humans into zombies).' - - !!python/unicode 'rscadd': !!python/unicode 'Added tackle verb.' - - !!python/unicode 'rscadd': !!python/unicode 'Added NO_SLIP.' - - !!python/unicode 'rscadd': !!python/unicode 'Added species-specific orans to Dionaea, - new Xenomorphs and vox.' - - !!python/unicode 'rscadd': !!python/unicode 'Added colour and species to blood - data.' - - !!python/unicode 'rscadd': !!python/unicode 'Added lethal consequences to missing - your heart.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed robot_talk_understand and - alien_talk_understand.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed attack_alien() and several - flavours of is_alien() procs.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed /mob/living/carbon/alien/humanoid.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed alien_hud().' - - !!python/unicode 'rscdel': !!python/unicode 'Removed IS_SLOW, NEEDS_LIGHT and - RAD_ABSORB.' - - !!python/unicode 'rscdel': !!python/unicode 'Renamed is_larva() to is_alien().' - - !!python/unicode 'tweak': !!python/unicode 'Refactored a ton of files, either - condensing or expanding them, or moving them to new directories.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored some attack vars from simple_animal - to mob/living level.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored internal organs to /mob/living/carbon - level.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored rad and light absorbtion - to organ level.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored brains to /obj/item/organ/brain.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored a lot of blood splattering - to use blood_splatter() proc.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored broadcast languages (changeling - and alien hiveminds, drone and binary chat) to actual languages.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored xenomorph abilities to - work for humans.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored xenomorphs into human species.' - - !!python/unicode 'tweak': !!python/unicode 'Rewrote larva_hud() and human_hud(). - The latter now takes data from the species datum.' - - !!python/unicode 'tweak': !!python/unicode 'Rewrote diona nymphs as descendents - of /mob/living/carbon/alien.' - - !!python/unicode 'tweak': !!python/unicode 'Rewrote xenolarva as descendents of - /mob/living/carbon/alien.' - - !!python/unicode 'tweak': !!python/unicode 'Rewrote /mob/living/carbon/alien.' - - !!python/unicode 'tweak': !!python/unicode 'Moved alcohol and toxin processing - to the liver.' - - !!python/unicode 'tweak': !!python/unicode 'Moved drone light proc to robot level, - added integrated_light_power and local_transmit vars to robots.' - - !!python/unicode 'tweak': !!python/unicode 'Moved human brainloss onto the brain - organ.' - - !!python/unicode 'tweak': !!python/unicode 'Shuffled around and collapsed several - redundant procs down to carbon level (hide, ventcrawl, Bump).' - - !!python/unicode 'tweak': !!python/unicode 'Fixed species swaps from NO_BLOOD - to those with blood killing the subject instantly.' + RavingManiac: + - rscadd: Zooming with the sniper rifle now adds a view offset in the direction + you are facing. + - rscadd: Added binoculars - functionally similar to sniper scope. Adminspawn-only + for now. + - rscadd: Bottles from chemistry now, like beakers, use chemical overlays instead + of fixed sprites. + - rscadd: Being in space while not magbooted to something will cause your sprite + to bob up and down. + Zuhayr: + - rscadd: Added species organ checks to several areas (phoron burn, welder burn, + appendicitis, vox cortical stacks, flashes). + - rscadd: Added VV option to add or remove organs. + - rscadd: Added simple bioprinter (adminspawn). + - rscadd: Added smashing/slashing behavior from xenos to some unarmed attacks. + - rscadd: Added some new state icons for diona nymphs. + - rscadd: Added borer husk functionality (cortical borers can turn dead humans into + zombies). + - rscadd: Added tackle verb. + - rscadd: Added NO_SLIP. + - rscadd: Added species-specific orans to Dionaea, new Xenomorphs and vox. + - rscadd: Added colour and species to blood data. + - rscadd: Added lethal consequences to missing your heart. + - rscdel: Removed robot_talk_understand and alien_talk_understand. + - rscdel: Removed attack_alien() and several flavours of is_alien() procs. + - rscdel: Removed /mob/living/carbon/alien/humanoid. + - rscdel: Removed alien_hud(). + - rscdel: Removed IS_SLOW, NEEDS_LIGHT and RAD_ABSORB. + - rscdel: Renamed is_larva() to is_alien(). + - tweak: Refactored a ton of files, either condensing or expanding them, or moving + them to new directories. + - tweak: Refactored some attack vars from simple_animal to mob/living level. + - tweak: Refactored internal organs to /mob/living/carbon level. + - tweak: Refactored rad and light absorbtion to organ level. + - tweak: Refactored brains to /obj/item/organ/brain. + - tweak: Refactored a lot of blood splattering to use blood_splatter() proc. + - tweak: Refactored broadcast languages (changeling and alien hiveminds, drone and + binary chat) to actual languages. + - tweak: Refactored xenomorph abilities to work for humans. + - tweak: Refactored xenomorphs into human species. + - tweak: Rewrote larva_hud() and human_hud(). The latter now takes data from the + species datum. + - tweak: Rewrote diona nymphs as descendents of /mob/living/carbon/alien. + - tweak: Rewrote xenolarva as descendents of /mob/living/carbon/alien. + - tweak: Rewrote /mob/living/carbon/alien. + - tweak: Moved alcohol and toxin processing to the liver. + - tweak: Moved drone light proc to robot level, added integrated_light_power and + local_transmit vars to robots. + - tweak: Moved human brainloss onto the brain organ. + - tweak: Shuffled around and collapsed several redundant procs down to carbon level + (hide, ventcrawl, Bump). + - tweak: Fixed species swaps from NO_BLOOD to those with blood killing the subject + instantly. 2014-11-01: - !!python/unicode 'PsiOmegaDelta': - - !!python/unicode 'bugfix': !!python/unicode 'Adds the last missing step to deconstruct - fire alarms. Apply wirecutters.' - - !!python/unicode 'rscadd': !!python/unicode 'There''s a "new" mining outpost nearby - the Research outpost.' - - !!python/unicode 'rscadd': !!python/unicode 'Manifest ghosts now have spookier - names.' - - !!python/unicode 'rscadd': !!python/unicode 'Adds a gas monitor computer for the - toxin mixing chamber.' - - !!python/unicode 'rscadd': !!python/unicode 'AI can now change the display of - individual AI status screens.' - - !!python/unicode 'rscadd': !!python/unicode 'More ion laws..' - - !!python/unicode 'rscadd': !!python/unicode 'All turrets have been replaced with - portable variants. Potential targets can be configured on a per turret basis.' - - !!python/unicode 'bugfix': !!python/unicode 'Improved crew monitor map positioning.' - - !!python/unicode 'rscadd': !!python/unicode 'Can now order plastic, body-, and - statis bags from cargo' - - !!python/unicode 'rscadd': !!python/unicode 'PDAs now receive newscasts.' - - !!python/unicode 'rscadd': !!python/unicode '(De)constructable emergency shutters.' - - !!python/unicode 'rscadd': !!python/unicode 'Borgs can now select to simply state - their laws or select a radio channel, same as the AI.' + PsiOmegaDelta: + - bugfix: Adds the last missing step to deconstruct fire alarms. Apply wirecutters. + - rscadd: There's a "new" mining outpost nearby the Research outpost. + - rscadd: Manifest ghosts now have spookier names. + - rscadd: Adds a gas monitor computer for the toxin mixing chamber. + - rscadd: AI can now change the display of individual AI status screens. + - rscadd: More ion laws.. + - rscadd: All turrets have been replaced with portable variants. Potential targets + can be configured on a per turret basis. + - bugfix: Improved crew monitor map positioning. + - rscadd: Can now order plastic, body-, and statis bags from cargo + - rscadd: PDAs now receive newscasts. + - rscadd: (De)constructable emergency shutters. + - rscadd: Borgs can now select to simply state their laws or select a radio channel, + same as the AI. 2014-11-04: - !!python/unicode 'TwistedAkai': - - !!python/unicode 'rscadd': !!python/unicode 'Almost any window which has been - fully unsecured can now be dismantled with a wrench.' + TwistedAkai: + - rscadd: Almost any window which has been fully unsecured can now be dismantled + with a wrench. 2014-11-08: - !!python/unicode 'PsiOmegaDelta': - - !!python/unicode 'rscadd': !!python/unicode 'Service personnel now have their - own frequency to communicate over. Use "say :v".' - - !!python/unicode 'rscadd': !!python/unicode 'The AI can now has proper quick access - to its private channel. Use "say :o".' - - !!python/unicode 'rscadd': !!python/unicode 'Newscasters supports photo captions. - Simply pen one on the attached photo.' - - !!python/unicode 'rscadd': !!python/unicode 'Once made visible by a cultist ghosts - can toggle visiblity at will.' - - !!python/unicode 'rscadd': !!python/unicode 'Detonating cyborgs using the cyborg - monitor console now notifies the master AI, if any.' - - !!python/unicode 'rscadd': !!python/unicode 'More machinery, such as APCs, air - alarms, etc., now support attaching signalers to the wires.' - - !!python/unicode 'tweak': !!python/unicode 'Random event overhaul. Admins may - wish check the verb "Event Manager Panel".' + PsiOmegaDelta: + - rscadd: Service personnel now have their own frequency to communicate over. Use + "say :v". + - rscadd: The AI can now has proper quick access to its private channel. Use "say + :o". + - rscadd: Newscasters supports photo captions. Simply pen one on the attached photo. + - rscadd: Once made visible by a cultist ghosts can toggle visiblity at will. + - rscadd: Detonating cyborgs using the cyborg monitor console now notifies the master + AI, if any. + - rscadd: More machinery, such as APCs, air alarms, etc., now support attaching + signalers to the wires. + - tweak: Random event overhaul. Admins may wish check the verb "Event Manager Panel". 2014-11-22: - !!python/unicode 'Zuhayr': - - !!python/unicode 'rscadd': !!python/unicode 'Added the /obj/item/weapon/rig class - - back-mounted deployable hardsuits.' - - !!python/unicode 'rscadd': !!python/unicode 'Replaced existing hardsuits with - ''voidsuits'', functionally identical.' - - !!python/unicode 'rscdel': !!python/unicode 'Removed the mounted device and helmet/boot - procs from voidsuits.' - - !!python/unicode 'tweak': !!python/unicode 'Refactored a shit-ton of ninja code - into the new rig class.' - - !!python/unicode 'wip': !!python/unicode 'This is more than likely going to take - a lot of balancing to get into a good place.' + Zuhayr: + - rscadd: Added the /obj/item/weapon/rig class - back-mounted deployable hardsuits. + - rscadd: Replaced existing hardsuits with 'voidsuits', functionally identical. + - rscdel: Removed the mounted device and helmet/boot procs from voidsuits. + - tweak: Refactored a shit-ton of ninja code into the new rig class. + - wip: This is more than likely going to take a lot of balancing to get into a good + place. 2015-01-09: - !!python/unicode 'Zuhayr': - - !!python/unicode 'tweak': !!python/unicode 'Voice changers no longer use ID cards. - They have Toggle and Set Voice verbs on the actual mask object now.' - - !!python/unicode 'rscadd': !!python/unicode 'Readded moonwalking. Alt-dir to face - new dir, or Face-Direction verb to face current dir.' + Zuhayr: + - tweak: Voice changers no longer use ID cards. They have Toggle and Set Voice verbs + on the actual mask object now. + - rscadd: Readded moonwalking. Alt-dir to face new dir, or Face-Direction verb to + face current dir. 2015-02-04: - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'Holodeck is now bigger and better, - with toggleable gravity and a new courtroom setting' - !!python/unicode 'TwistedAkai': - - !!python/unicode 'bugfix': !!python/unicode 'Purple Combs should now be visible - and have their proper icon' + RavingManiac: + - rscadd: Holodeck is now bigger and better, with toggleable gravity and a new courtroom + setting + TwistedAkai: + - bugfix: Purple Combs should now be visible and have their proper icon 2015-02-12: - !!python/unicode 'Daranz': - - !!python/unicode 'rscadd': !!python/unicode 'Vending machines now use NanoUI and - accept cash. The vendor account can now be suspended to disable all sales in - all machines on station.' + Daranz: + - rscadd: Vending machines now use NanoUI and accept cash. The vendor account can + now be suspended to disable all sales in all machines on station. 2015-02-16: - !!python/unicode 'RavingManiac': - - !!python/unicode 'rscadd': !!python/unicode 'Say hello to the new Thermoelectric - Supermatter Engine. Read the operating manual to get started.' + RavingManiac: + - rscadd: Say hello to the new Thermoelectric Supermatter Engine. Read the operating + manual to get started. 2015-02-18: - !!python/unicode 'PsiOmegaDelta': - - !!python/unicode 'rscadd': !!python/unicode 'Synths now have timestamped radio - and chat messages.' - - !!python/unicode 'rscadd': !!python/unicode 'New and updated uplink items.' - - !!python/unicode 'rscadd': !!python/unicode 'Multiple AIs can now share the same - holopad.' - - !!python/unicode 'rscadd': !!python/unicode 'The AI now has built-in consoles, - accessible from the subsystem tab.' + PsiOmegaDelta: + - rscadd: Synths now have timestamped radio and chat messages. + - rscadd: New and updated uplink items. + - rscadd: Multiple AIs can now share the same holopad. + - rscadd: The AI now has built-in consoles, accessible from the subsystem tab. 2015-02-24: - !!python/unicode 'Zuhayr': - - !!python/unicode 'experiment': !!python/unicode 'Major changes to the kitchen - and hydroponics mechanics. Review the detailed changelog here,' + Zuhayr: + - experiment: Major changes to the kitchen and hydroponics mechanics. Review the + detailed changelog here, 2015-04-07: - !!python/unicode 'RavingManiac': - - !!python/unicode 'tweak': !!python/unicode 'You can now pay vending machines and - EFTPOS scanners without removing your ID from your PDA or wallet. Clicking on - the vending machine with your ID/PDA/wallet/cash also brings up the menu now - instead of attacking the vending machine.' + RavingManiac: + - tweak: You can now pay vending machines and EFTPOS scanners without removing your + ID from your PDA or wallet. Clicking on the vending machine with your ID/PDA/wallet/cash + also brings up the menu now instead of attacking the vending machine. 2015-04-18: PsiOmegaDelta: - rscadd: Added a changelog editing system that should cause fewer conflicts and @@ -2466,3 +2159,26 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. penalty if fired without an empty offhand. - rscadd: Unified two-handed melee weapons with the above; while the offhand is empty, the weapon will count as wielded. +2016-03-11: + Datraen: + - rscadd: Adds ckeys, player panel to the antagonists panel. + - tweak: Fragmentation grenades are no longer launchable. + - tweak: Adds amount of telecrystals to the set telecrystal verb. + - rscadd: Added a verb to just add to telecrystals. + Kelenius: + - rscadd: Drying rack now has a new sprite. + - rscadd: Beekeeping materials and a honey extractor have been added to hydroponics. + - tweak: There is now a ten-second delay for carding the AI. + Zuhayr: + - rscadd: Small species now take smaller bites/gulps from food and drink. + - rscadd: Small species are now effected by alchol and toxins twice as much. + - rscadd: blood_volume is now a species-level var and Teshari have lowered blood + volume. + - rscadd: Hunger is a species var and Teshari get hungry faster. + - rscadd: Small mobs have a reduced climb delay. + - rscadd: Teshari gain more nutrition from meat. +2016-03-16: + Datraen: + - bugfix: Harmbaton no longer causes halloss while inactive. + Kelenius: + - bugfix: Potassium and nitroglycerin explosive grenades now work. diff --git a/html/changelogs/Datraen-AdditionalModes.yml b/html/changelogs/Datraen-AdditionalModes.yml new file mode 100644 index 00000000000..d9fa39439ea --- /dev/null +++ b/html/changelogs/Datraen-AdditionalModes.yml @@ -0,0 +1,7 @@ +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-AntagPanelUpgrade.yml b/html/changelogs/Datraen-AntagPanelUpgrade.yml deleted file mode 100644 index 38adc5a3609..00000000000 --- a/html/changelogs/Datraen-AntagPanelUpgrade.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - rscadd: "Adds ckeys, player panel to the antagonists panel." diff --git a/html/changelogs/Datraen-GrenadeRestriction.yml b/html/changelogs/Datraen-GrenadeRestriction.yml deleted file mode 100644 index ebc380b1b26..00000000000 --- a/html/changelogs/Datraen-GrenadeRestriction.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - tweak: "Fragmentation grenades are no longer launchable." diff --git a/html/changelogs/Datraen-TCrystalVerb1.yml b/html/changelogs/Datraen-TCrystalVerb1.yml deleted file mode 100644 index b894530ca73..00000000000 --- a/html/changelogs/Datraen-TCrystalVerb1.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Datraen - -delete-after: True - -changes: - - tweak: "Adds amount of telecrystals to the set telecrystal verb." - - rscadd: "Added a verb to just add to telecrystals." diff --git a/html/changelogs/Kelenius-dankMemes.yml b/html/changelogs/Kelenius-dankMemes.yml deleted file mode 100644 index b3026bf40c4..00000000000 --- a/html/changelogs/Kelenius-dankMemes.yml +++ /dev/null @@ -1,37 +0,0 @@ -################################ -# 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: Kelenius - -# 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: - - rscadd: "Drying rack now has a new sprite." - - rscadd: "Beekeeping materials and a honey extractor have been added to hydroponics." diff --git a/html/changelogs/Zuhayr-tesharireagents.yml b/html/changelogs/Zuhayr-tesharireagents.yml deleted file mode 100644 index 4997d3a131b..00000000000 --- a/html/changelogs/Zuhayr-tesharireagents.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: Zuhayr -delete-after: True -changes: - - rscadd: "Small species now take smaller bites/gulps from food and drink." - - rscadd: "Small species are now effected by alchol and toxins twice as much." - - rscadd: "blood_volume is now a species-level var and Teshari have lowered blood volume." - - rscadd: "Hunger is a species var and Teshari get hungry faster." - - rscadd: "Small mobs have a reduced climb delay." - - rscadd: "Teshari gain more nutrition from meat." diff --git a/html/changelogs/datraen-TraitorHackCheckFix.yml b/html/changelogs/datraen-TraitorHackCheckFix.yml new file mode 100644 index 00000000000..4acd2abee1e --- /dev/null +++ b/html/changelogs/datraen-TraitorHackCheckFix.yml @@ -0,0 +1,7 @@ +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/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index 23e826159eb..5f1898b8578 100644 Binary files a/icons/mecha/mecha_equipment.dmi and b/icons/mecha/mecha_equipment.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 038524df81b..afc8a68ddd0 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 5d5bc1b8cf3..0fbebc0d3d2 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f7e883cd41b..3ea8a3254c5 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 11183bb3101..e7d69759aa7 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 f5ec8c0c536..8082f74e484 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_races/r_armalis.dmi b/icons/mob/human_races/r_armalis.dmi deleted file mode 100644 index b7609d94275..00000000000 Binary files a/icons/mob/human_races/r_armalis.dmi and /dev/null differ diff --git a/icons/mob/human_races/r_vox.dmi b/icons/mob/human_races/r_vox.dmi deleted file mode 100644 index f212822aafb..00000000000 Binary files a/icons/mob/human_races/r_vox.dmi and /dev/null differ diff --git a/icons/mob/human_races/xenos/r_xenos_drone.dmi b/icons/mob/human_races/xenos/r_xenos_drone.dmi deleted file mode 100644 index 19094d66ed9..00000000000 Binary files a/icons/mob/human_races/xenos/r_xenos_drone.dmi and /dev/null differ diff --git a/icons/mob/human_races/xenos/r_xenos_hunter.dmi b/icons/mob/human_races/xenos/r_xenos_hunter.dmi deleted file mode 100644 index a6ce545f3ae..00000000000 Binary files a/icons/mob/human_races/xenos/r_xenos_hunter.dmi and /dev/null differ diff --git a/icons/mob/human_races/xenos/r_xenos_queen.dmi b/icons/mob/human_races/xenos/r_xenos_queen.dmi deleted file mode 100644 index efb5558ac15..00000000000 Binary files a/icons/mob/human_races/xenos/r_xenos_queen.dmi and /dev/null differ diff --git a/icons/mob/human_races/xenos/r_xenos_sentinel.dmi b/icons/mob/human_races/xenos/r_xenos_sentinel.dmi deleted file mode 100644 index 5b250c7445e..00000000000 Binary files a/icons/mob/human_races/xenos/r_xenos_sentinel.dmi and /dev/null differ diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi index 61b297f9cc5..728255c8417 100644 Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi index b4e58f68451..b2b3ff87ee3 100644 Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi index 6e6d8bdac57..a47ee5d686b 100644 Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi index 0e8bb9118cc..5a6c20b6336 100644 Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ diff --git a/icons/mob/screen_ai.dmi b/icons/mob/screen_ai.dmi new file mode 100644 index 00000000000..ad813aad751 Binary files /dev/null and b/icons/mob/screen_ai.dmi differ diff --git a/icons/mob/slimes.dmi b/icons/mob/slimes.dmi index 3e6b915efa8..f2da09ad8f7 100644 Binary files a/icons/mob/slimes.dmi and b/icons/mob/slimes.dmi differ diff --git a/icons/mob/species/vox/eyes.dmi b/icons/mob/species/vox/eyes.dmi deleted file mode 100644 index 6e15b3e58c4..00000000000 Binary files a/icons/mob/species/vox/eyes.dmi and /dev/null differ diff --git a/icons/mob/species/vox/gloves.dmi b/icons/mob/species/vox/gloves.dmi deleted file mode 100644 index 16b4706c4a7..00000000000 Binary files a/icons/mob/species/vox/gloves.dmi and /dev/null differ diff --git a/icons/mob/species/vox/head.dmi b/icons/mob/species/vox/head.dmi deleted file mode 100644 index d0097e8d00d..00000000000 Binary files a/icons/mob/species/vox/head.dmi and /dev/null differ diff --git a/icons/mob/species/vox/masks.dmi b/icons/mob/species/vox/masks.dmi deleted file mode 100644 index 8f426fa2992..00000000000 Binary files a/icons/mob/species/vox/masks.dmi and /dev/null differ diff --git a/icons/mob/species/vox/shoes.dmi b/icons/mob/species/vox/shoes.dmi deleted file mode 100644 index 822174fbd42..00000000000 Binary files a/icons/mob/species/vox/shoes.dmi and /dev/null differ diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi deleted file mode 100644 index 50c85feba4e..00000000000 Binary files a/icons/mob/species/vox/suit.dmi and /dev/null differ diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi deleted file mode 100644 index 515595633f3..00000000000 Binary files a/icons/mob/species/vox/uniform.dmi and /dev/null differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 025ea51b1fb..3635ab9ac18 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 076048a4342..69ed74959fd 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index e42f9d97ab9..cf99daa0670 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 767cc2f6e42..fa521d772d3 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index f7c3fdea8e6..32b620c75c1 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 3d0fa01bee7..8bd1183df81 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index fe58599efe7..f315e6ba2b9 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 83896e921fd..1d7ddbf51f9 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index dfade93ae94..35d7e732a16 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/hydroponics_growing.dmi b/icons/obj/hydroponics_growing.dmi index 6de8b809de8..d8914e8cf1c 100644 Binary files a/icons/obj/hydroponics_growing.dmi and b/icons/obj/hydroponics_growing.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 1b08d9a9a20..7481b918b6f 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/playing_cards.dmi b/icons/obj/playing_cards.dmi index a5fa632cb3a..04239be49d3 100644 Binary files a/icons/obj/playing_cards.dmi and b/icons/obj/playing_cards.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index a9998cd6243..225705ab65e 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/maps/polaris-1.dmm b/maps/polaris-1.dmm index a6768838a48..a712597e8c6 100644 --- a/maps/polaris-1.dmm +++ b/maps/polaris-1.dmm @@ -105,7 +105,7 @@ "aca" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/civilian_hallway_fore) "acb" = (/obj/structure/closet/wardrobe/xenos,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "acc" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/tiled,/area/crew_quarters/locker) -"acd" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor/tiled,/area/crew_quarters/locker) +"acd" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/accessory/storage/knifeharness,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "ace" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "acf" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/camera/network/civilian{c_tag = "Civ - Locker Room Fore"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "acg" = (/obj/machinery/recharge_station,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/locker) @@ -502,7 +502,7 @@ "ajH" = (/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue) "ajI" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/solar/auxstarboard) "ajJ" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/invisible,/obj/item/clothing/under/suit_jacket/red,/obj/machinery/light,/obj/item/weapon/barcodescanner,/turf/simulated/floor/carpet,/area/library) -"ajK" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/camera,/obj/item/device/eftpos{eftpos_name = "Library EFTPOS scanner"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/turf/simulated/floor/carpet,/area/library) +"ajK" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -28},/obj/item/device/retail_scanner/civilian{tag = "icon-retail_idle (NORTH)"; icon_state = "retail_idle"; dir = 1},/obj/item/device/camera,/turf/simulated/floor/carpet,/area/library) "ajL" = (/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library) "ajM" = (/obj/machinery/librarycomp{pixel_y = 0},/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/library) "ajN" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor/wood,/area/library) @@ -874,7 +874,7 @@ "aqP" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/detectives_office) "aqQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/security/detectives_office) "aqR" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/lino,/area/security/detectives_office) -"aqS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/box/slides,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) +"aqS" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/security/detectives_office) "aqT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/security/detectives_office) "aqU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/security/detectives_office) "aqV" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/security/detectives_office) @@ -1264,19 +1264,19 @@ "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/deployable/barrier,/obj/machinery/camera/network/security{c_tag = "Armoury"},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 1},/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) "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/structure/closet/wardrobe/orange,/obj/effect/floor_decal/industrial/outline/yellow,/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) -"ayw" = (/obj/structure/closet/radiation,/obj/effect/floor_decal/industrial/outline/yellow,/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) +"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) "ayz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/interrogation) "ayA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/red{dir = 8},/turf/simulated/floor/tiled,/area/security/brig) "ayB" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/light_switch{pixel_x = 0; pixel_y = -26},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) "ayC" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) -"ayD" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/table/standard,/obj/item/weapon/folder/red{pixel_x = 2; pixel_y = 4},/obj/item/weapon/pen,/obj/machinery/camera/network/security{c_tag = "SEC - Evidence Storage"; dir = 8},/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) -"ayE" = (/obj/machinery/photocopier,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) +"ayD" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/table/standard,/obj/machinery/camera/network/security{c_tag = "SEC - Evidence Storage"; dir = 8},/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled/dark,/area/security/evidence_storage) +"ayE" = (/obj/structure/closet/secure_closet/personal,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/backpack/dufflebag,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "ayF" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "ayG" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/effect/landmark/start{name = "Head of Security"},/obj/machinery/button/remote/airlock{id = "HoSdoor"; name = "Office Door"; pixel_x = -36; pixel_y = 29},/obj/machinery/button/windowtint{pixel_x = -26; pixel_y = 30},/obj/machinery/button/remote/blast_door{id = "security_lockdown"; name = "Brig Lockdown"; pixel_x = -36; pixel_y = 39; req_access = list(2)},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hos) "ayH" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) @@ -1392,7 +1392,7 @@ "aAN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/security_equiptment_storage) "aAO" = (/obj/machinery/computer/prisoner,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden) "aAP" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/industrial/outline/grey,/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/dark,/area/security/warden) -"aAQ" = (/obj/structure/table/reinforced,/obj/item/device/eftpos{eftpos_name = "Brig EFTPOS scanner"},/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/security{c_tag = "SEC - Warden's Office"},/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aAQ" = (/obj/structure/table/reinforced,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/security{c_tag = "SEC - Warden's Office"},/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/obj/item/device/retail_scanner/security,/turf/simulated/floor/tiled/dark,/area/security/warden) "aAR" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 14; pixel_y = 24},/obj/machinery/photocopier,/turf/simulated/floor/tiled/dark,/area/security/warden) "aAS" = (/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 30},/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor/tiled/dark,/area/security/warden) "aAT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/dark,/area/security/warden) @@ -1470,11 +1470,11 @@ "aCn" = (/obj/machinery/door/airlock/glass{name = "Recreation Area"},/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) "aCo" = (/obj/machinery/door/airlock/glass{name = "Recreation Area"},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aCp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/chapel) -"aCq" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/random/energy,/obj/random/energy,/obj/machinery/door/window/brigdoor/southleft{name = "Weapons Locker"; req_access = list(1)},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aCr" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/random/projectile,/obj/random/projectile,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/southright{name = "Weapon Locker"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aCs" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/energy/ionrifle,/obj/effect/floor_decal/industrial/outline/grey,/obj/item/weapon/gun/energy/ionrifle{pixel_x = -2; pixel_y = -2},/obj/machinery/door/window/brigdoor/southleft{name = "Weapons Locker"; req_access = list(1)},/obj/structure/window/reinforced{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aCt" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/weapon/storage/box/practiceshells,/obj/item/weapon/storage/box/practiceshells,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/southright{name = "Weapon Locker"},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aCu" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aCq" = (/obj/effect/floor_decal/corner/mauve/full{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"aCr" = (/obj/effect/landmark/start{name = "Geneticist"},/obj/effect/floor_decal/corner/mauve{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"aCs" = (/obj/effect/floor_decal/corner/mauve{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"aCt" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"aCu" = (/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "aCv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "aCw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "aCx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) @@ -1528,7 +1528,7 @@ "aDt" = (/turf/simulated/wall,/area/maintenance/pool) "aDu" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/pool) "aDv" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/decal/cleanable/cobweb2,/obj/effect/landmark{name = "blobstart"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/pool) -"aDw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/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/machinery/door/window/brigdoor/eastleft{name = "Armor Locker"; req_access = list(1)},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aDw" = (/obj/effect/floor_decal/corner/mauve/full{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "aDx" = (/turf/simulated/floor/tiled/dark,/area/security/armoury) "aDy" = (/obj/machinery/door/airlock/highsecurity{name = "Secure Armoury Section"; req_access = list(3)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/dark,/area/security/armoury) "aDz" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) @@ -1574,26 +1574,26 @@ "aEn" = (/obj/structure/disposalpipe/segment,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aEo" = (/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,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/holodeck) "aEp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/recreation_area_hallway) -"aEq" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Fore"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aEq" = (/obj/machinery/photocopier,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -28},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "aEr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aEs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aEt" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/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) +"aEt" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Fore"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aEu" = (/turf/simulated/wall,/area/crew_quarters/recreation_area) "aEv" = (/turf/simulated/wall,/area/crew_quarters/pool) "aEw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/maintenance/pool) "aEx" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/maintenance/pool) -"aEy" = (/obj/structure/window/reinforced{dir = 8},/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/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/eastright{name = "Armor Locker"},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aEz" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aEA" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"aEy" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) +"aEz" = (/obj/structure/closet/secure_closet/warden,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/warden) +"aEA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/steel,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/turf/simulated/floor/tiled,/area/security/prison) "aEB" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/dark,/area/security/armoury) "aEC" = (/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/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/security_equiptment_storage) "aED" = (/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 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/security_equiptment_storage) "aEE" = (/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access = list(2)},/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/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) "aEF" = (/turf/simulated/wall,/area/security/security_equiptment_storage) -"aEG" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/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/machinery/door/window/brigdoor/northleft{name = "Weapons locker"; req_access = list(2)},/obj/effect/floor_decal/industrial/outline/yellow,/obj/item/clothing/suit/storage/vest/heavy/officer,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"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/closet/secure_closet/warden,/obj/item/device/megaphone,/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) "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,9 +1646,6 @@ "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/window/reinforced{dir = 8},/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/machinery/camera/network/security{c_tag = "SEC - Armoury Secure"; dir = 4},/obj/machinery/door/window/brigdoor/eastleft{name = "Armor Locker"; req_access = list(1)},/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aFL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/table/rack,/obj/machinery/door/window/northleft{name = "Voidsuit Storage"; req_access = list(1)},/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aFM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/security,/obj/item/clothing/head/helmet/space/void/security,/obj/machinery/door/window/northright{name = "Voidsuit Storage"; req_access = list(1)},/obj/item/weapon/tank/air,/turf/simulated/floor/tiled/dark,/area/security/armoury) "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) @@ -1686,7 +1683,7 @@ "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) "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) -"aGy" = (/obj/machinery/door/window/westright{name = "Janitoral Desk"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{name = "Janitorial Desk"},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/blast/shutters{dir = 4; id = "janitor_blast"; layer = 3.1; name = "Janitorial Shutters"},/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) "aGB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled/dark,/area/lawoffice) @@ -1708,11 +1705,7 @@ "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/structure/window/reinforced{dir = 8},/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,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/eastright{name = "Armor Locker"},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/security/armoury) "aGV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aGW" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/storage/box/empslite,/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aGX" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aGY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) "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) @@ -1778,11 +1771,6 @@ "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/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/machinery/door/window/brigdoor/eastleft{name = "Armor Locker"; req_access = list(1)},/obj/effect/floor_decal/industrial/outline/grey,/obj/item/weapon/gun/projectile/shotgun/pump{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aIn" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = -2; pixel_y = -2},/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/southleft{name = "Armor Locker"; req_access = list(1)},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aIo" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/armor/laserproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/laserproof{pixel_x = -2; pixel_y = -2},/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/southright{name = "Armor Locker"},/obj/structure/window/reinforced{dir = 1},/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/dark,/area/security/armoury) -"aIp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aIq" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/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/armoury) "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) @@ -1849,10 +1837,7 @@ "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/structure/window/reinforced{dir = 8},/obj/structure/table/rack,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/eastright{name = "Armor Locker"},/obj/structure/window/reinforced,/obj/item/weapon/gun/energy/gun{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/energy/gun,/turf/simulated/floor/tiled/dark,/area/security/armoury) "aJG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aJH" = (/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/dark,/area/security/armoury) -"aJI" = (/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Armoury Access"; pixel_x = 28; pixel_y = 4; req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury) "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) @@ -1892,7 +1877,7 @@ "aKt" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/weapon/material/ashtray/plastic{pixel_x = 4; pixel_y = 6},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor/tiled/dark,/area/lawoffice) "aKu" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/lawoffice) "aKv" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) -"aKw" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aKw" = (/obj/machinery/door/window/westright{name = "Janitoral Desk"; req_access = list(26)},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{name = "Janitorial Desk"},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/blast/shutters{dir = 4; id = "janitor_blast"; layer = 3.1; name = "Janitorial Shutters"},/turf/simulated/floor/tiled,/area/janitor) "aKx" = (/obj/item/weapon/bedsheet/orange,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/security/prison) "aKy" = (/obj/machinery/vending/coffee,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) "aKz" = (/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,/turf/simulated/floor/plating,/area/crew_quarters/pool) @@ -1901,9 +1886,6 @@ "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/window/reinforced{dir = 1},/obj/machinery/flasher/portable,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aKG" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aKH" = (/obj/machinery/recharger/wallcharger{pixel_x = 32; pixel_y = -4},/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/security/armoury) "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) @@ -1928,7 +1910,7 @@ "aLd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/button/flasher{id = "permentryflash"; name = "entry flash"; pixel_x = 0; pixel_y = -34; req_access = list(2)},/obj/machinery/button/remote/airlock{id = "prisonexit"; name = "Exit Doors"; pixel_x = 6; pixel_y = -26; req_access = list(2)},/obj/machinery/button/remote/airlock{id = "prisonentry"; name = "Entry Doors"; pixel_x = -6; pixel_y = -26; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/prison) "aLe" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/computer/security/telescreen{desc = "Big Brother is watching."; layer = 3.4; name = "Brig Monitor"; network = list("Prison"); pixel_x = 32; pixel_y = -3},/obj/item/weapon/stool/padded,/obj/machinery/button/remote/blast_door{id = "brigobs"; name = "Observation Shutters"; pixel_x = 6; pixel_y = -26; req_access = list(2)},/obj/machinery/button/flasher{id = "permflash"; name = "Brig flashes"; pixel_x = -6; pixel_y = -36; req_access = list(2); tag = "permflash"},/obj/machinery/button/remote/blast_door{id = "Prison Gate"; name = "Prison Lockdown"; pixel_x = 6; pixel_y = -36; req_access = list(2)},/obj/machinery/light_switch{pixel_x = -8; pixel_y = 26},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/security/prison) "aLf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/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) -"aLg" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/security/prison) +"aLg" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/floor/carpet,/area/crew_quarters/recreation_area) "aLh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/security/prison) "aLi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/prison) "aLj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison) @@ -1966,8 +1948,6 @@ "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/flasher/portable,/obj/effect/floor_decal/industrial/outline/grey,/obj/item/device/radio/intercom{broadcasting = 0; dir = 2; frequency = 1475; icon_state = "intercom"; listening = 1; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/security/armoury) -"aLT" = (/obj/machinery/flasher/portable,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/armoury) "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) @@ -1987,7 +1967,6 @@ "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/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/steel,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/turf/simulated/floor/tiled,/area/security/prison) "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) @@ -2022,12 +2001,6 @@ "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" = (/turf/simulated/wall/r_wall,/area/security/tactical) -"aMX" = (/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/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/tactical) -"aMY" = (/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 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/tactical) -"aMZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/airlock/highsecurity{name = "Tactical Equipment"; req_access = list(3)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aNa" = (/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/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/tactical) -"aNb" = (/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"},/turf/simulated/floor/plating,/area/security/tactical) "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) @@ -2093,12 +2066,6 @@ "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/door/window/brigdoor/eastleft{name = "Weapons Locker"; req_access = list(3)},/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aOq" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aOr" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aOs" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aOt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aOu" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/tactical) "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) @@ -2150,9 +2117,6 @@ "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/wardrobe/tactical,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aPv" = (/obj/structure/closet/wardrobe/tactical,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/dark,/area/security/tactical) -"aPw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/machinery/camera/network/security{c_tag = "SEC - Armoury Tactical Equipment"; dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/window/northleft{name = "Ammo Locker"; req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/tactical) "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) @@ -2192,9 +2156,9 @@ "aQh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Civilian Primary Aft 1"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_aft) "aQi" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/dark,/area/lawoffice) "aQj" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/simulated/floor/tiled/dark,/area/lawoffice) -"aQk" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; name = "Fitness Room"; sortType = "Fitness Room"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aQk" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aQl" = (/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/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/recreation_area_hallway) -"aQm" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Aft"; dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) +"aQm" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 2; name = "Fitness Room"; sortType = "Fitness Room"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "aQn" = (/turf/simulated/wall,/area/crew_quarters/recreation_area_restroom) "aQo" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom) "aQp" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area) @@ -2887,11 +2851,11 @@ "bdA" = (/obj/machinery/door/airlock/glass_medical{name = "Staff Room"; req_access = list(5)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "bdB" = (/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/hydroponics/garden) "bdC" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled,/area/hydroponics/garden) -"bdD" = (/obj/structure/table/marble,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 8; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) +"bdD" = (/obj/structure/table/marble,/obj/machinery/door/firedoor/border_only,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (EAST)"; icon_state = "register_idle"; dir = 4},/obj/machinery/door/blast/shutters{dir = 8; id = "coffeeshop"; layer = 3.1; name = "Cafe Shutters"},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "bdE" = (/obj/structure/table/marble,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 8; pixel_y = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop) "bdF" = (/obj/structure/cable/green,/obj/structure/flora/pottedplant,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "bdG" = (/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) -"bdH" = (/obj/structure/bed/chair/wood{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) +"bdH" = (/obj/machinery/camera/network/northern_star{c_tag = "Hall - Recreation Aft"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area_hallway) "bdI" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafe"; dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/media/jukebox,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "bdJ" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) "bdK" = (/obj/structure/closet/crate/freezer,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) @@ -2972,7 +2936,7 @@ "bfh" = (/turf/simulated/wall,/area/medical/surgery2) "bfi" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bfj" = (/obj/structure/table/standard,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Surgery Emergency Phone"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) -"bfk" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) +"bfk" = (/obj/structure/bed/chair/wood{dir = 4},/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "bfl" = (/obj/machinery/door/airlock/maintenance{name = "Operating Theatre Maintenance Access"; req_access = list(45)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) "bfm" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/maintenance/medbay_fore) "bfn" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/medbay_fore) @@ -3165,7 +3129,7 @@ "biS" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "biT" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/pink/full,/turf/simulated/floor/tiled/white,/area/medical/surgery2) "biU" = (/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/surgery2) -"biV" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/surgery2) +"biV" = (/obj/structure/bed/chair/wood{dir = 8},/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) "biW" = (/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 2"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "biX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light_switch{pixel_x = 32; pixel_y = 2},/obj/effect/floor_decal/corner/pink/full{dir = 4},/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "biY" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) @@ -3173,7 +3137,7 @@ "bja" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bjb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bjc" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 16},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/exam_room) -"bjd" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"bjd" = (/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/machinery/computer/arcade/orion_trail,/turf/simulated/floor/tiled,/area/security/prison) "bje" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bjf" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bjg" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/cryo) @@ -3229,7 +3193,7 @@ "bke" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_two) "bkf" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "bkg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/medical/surgeryobs) -"bkh" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/surgeryobs) +"bkh" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/medical/surgery_storage) "bki" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/surgery2) "bkj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "bkk" = (/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/white,/area/medical/surgery_hallway) @@ -3314,15 +3278,15 @@ "blL" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery) "blM" = (/turf/simulated/wall,/area/medical/surgery) "blN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/medbay{c_tag = "MED - Surgery Hallway"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) -"blO" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) +"blO" = (/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/surgery2) "blP" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "blQ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/exam_room) -"blR" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/exam_room) +"blR" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "blS" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/power/apc{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/cryo) "blT" = (/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"},/turf/simulated/floor/tiled/white,/area/medical/cryo) "blU" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/medical/cryo) "blV" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/steel,/area/medical/cryo) -"blW" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) +"blW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) "blX" = (/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/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,/obj/structure/disposalpipe/segment,/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "blY" = (/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/light_switch{pixel_x = 26; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "blZ" = (/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/medical_restroom) @@ -3465,7 +3429,7 @@ "boG" = (/obj/machinery/door/airlock/medical{name = "Examination Room"; req_access = list(5)},/obj/machinery/door/firedoor/border_only,/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"},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "boH" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/medical/cryo) "boI" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/cryo) -"boJ" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"boJ" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/security/prison) "boK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/cryo) "boL" = (/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/crew_quarters/medbreak) "boM" = (/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,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) @@ -3482,7 +3446,7 @@ "boX" = (/obj/effect/floor_decal/corner/lime,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) "boY" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) "boZ" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/white,/area/medical/virology) -"bpa" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/virology) +"bpa" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/exam_room) "bpb" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/research/station) "bpc" = (/turf/simulated/shuttle/floor,/area/shuttle/research/station) "bpd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/shuttle/plating,/area/rnd/docking) @@ -3549,7 +3513,6 @@ "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) -"bqp" = (/obj/machinery/disposal,/obj/effect/floor_decal/corner/mauve/full{dir = 1},/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "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) @@ -3622,7 +3585,7 @@ "brH" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled,/area/medical/surgeryobs) "brI" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/pink/full,/turf/simulated/floor/tiled/white,/area/medical/surgery) "brJ" = (/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/surgery) -"brK" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/surgery) +"brK" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) "brL" = (/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 1"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/surgery) "brM" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/obj/machinery/light_switch{pixel_x = 32; pixel_y = 2},/obj/effect/floor_decal/corner/pink/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery) "brN" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway) @@ -3641,7 +3604,6 @@ "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/effect/landmark/start{name = "Geneticist"},/obj/effect/floor_decal/corner/mauve{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "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) @@ -3704,10 +3666,7 @@ "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/effect/floor_decal/corner/mauve{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"btp" = (/obj/effect/floor_decal/corner/mauve{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "btq" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"btr" = (/obj/effect/floor_decal/corner/mauve/full{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "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) @@ -3783,7 +3742,7 @@ "buM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "buN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "buO" = (/obj/machinery/door/airlock/command{id_tag = null; name = "CMO's Office"; req_access = list(40)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"buP" = (/obj/effect/floor_decal/corner/mauve{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"buP" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/virology) "buQ" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start{name = "Geneticist"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "buR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "buS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) @@ -3840,12 +3799,12 @@ "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) "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/paleblue{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/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) "bvV" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bvW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bvX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bvY" = (/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bvZ" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bvZ" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bwa" = (/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/medical/medbay_primary_storage) "bwb" = (/obj/structure/table/glass,/obj/item/roller,/obj/item/roller{pixel_y = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bwc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -3869,7 +3828,7 @@ "bwu" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/virology) "bwv" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 8},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Virology Emergency Phone"; pixel_x = -6; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bww" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/corner/lime{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) -"bwx" = (/obj/effect/floor_decal/corner/lime,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Aft"; dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/virology) +"bwx" = (/obj/effect/floor_decal/corner/mauve{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) "bwy" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/virology) "bwz" = (/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/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "bwA" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3899,7 +3858,7 @@ "bwY" = (/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,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/rnd/lab) "bwZ" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{name = "Research and Development Desk"; req_access = list(7)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/rnd/lab) "bxa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/maintenance/central) -"bxb" = (/obj/structure/closet/secure_closet/paramedic,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"bxb" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{broadcasting = 1; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/reception) "bxc" = (/turf/simulated/wall,/area/medical/reception) "bxd" = (/obj/structure/bed/chair{dir = 4},/obj/structure/sign/nosmoking_1{pixel_x = -32},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) "bxe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/reception) @@ -3907,12 +3866,12 @@ "bxg" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bxh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/reception) "bxi" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/medical/reception) -"bxj" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bxj" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -22},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bxk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bxl" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/adv,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bxm" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bxn" = (/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/medical/medbay_primary_storage) -"bxo" = (/obj/machinery/vending/medical,/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bxn" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical{name = "Medbay Equipment"; req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bxo" = (/obj/structure/bed/chair/wheelchair,/obj/machinery/camera/network/medbay{c_tag = "MED - Equipment Storage"; dir = 8},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bxp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bxq" = (/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bxr" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -3979,7 +3938,7 @@ "byA" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/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/white,/area/medical/medbay_primary_storage) "byB" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "byC" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"byD" = (/obj/structure/bed/chair/wheelchair,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/camera/network/medbay{c_tag = "MED - Equipment Storage"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"byD" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/emergency,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "byE" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_x = -32; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "byF" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "byG" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -3996,7 +3955,7 @@ "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) "byS" = (/turf/simulated/wall,/area/medical/morgue) "byT" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) -"byU" = (/obj/structure/table/steel,/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/medical/morgue) +"byU" = (/obj/effect/floor_decal/corner/lime,/obj/machinery/camera/network/medbay{c_tag = "MED - Virology 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/virology) "byV" = (/obj/machinery/disposal,/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/medical/morgue) "byW" = (/turf/simulated/floor/tiled,/area/medical/morgue) "byX" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) @@ -4182,9 +4141,9 @@ "bCv" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/obj/random/medical,/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light{dir = 8},/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bCw" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bCx" = (/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,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bCy" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bCy" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bCz" = (/obj/structure/table/rack,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"; pixel_x = 2; pixel_y = 2},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bCA" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/emergency,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bCA" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/structure/sign/poster{pixel_x = 0; pixel_y = -32},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bCB" = (/obj/structure/closet/secure_closet/medical1,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bCC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bCD" = (/obj/effect/floor_decal/corner/paleblue,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -4195,7 +4154,7 @@ "bCI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bCJ" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/camera/network/medbay{c_tag = "MED - CMO"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bCK" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -10; pixel_y = -23},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bCL" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) +"bCL" = (/obj/structure/table/steel,/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/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,/area/medical/morgue) "bCM" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) "bCN" = (/obj/machinery/optable,/turf/simulated/floor/tiled,/area/medical/morgue) "bCO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/medical/morgue) @@ -4472,7 +4431,7 @@ "bHZ" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "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/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/medbay_fore) +"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) "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) @@ -4539,7 +4498,7 @@ "bJo" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bJp" = (/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/white,/area/medical/sleeper) "bJq" = (/obj/structure/sign/goldenplaque{desc = "Done No Harm."; name = "Best Doctor 2552"; pixel_y = -32},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bJr" = (/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 = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bJr" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/storage/backpack/satchel_vir,/obj/item/weapon/storage/backpack/virology,/turf/simulated/floor/plating,/area/maintenance/medbay_fore) "bJs" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bJt" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bJu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -4611,7 +4570,7 @@ "bKI" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - Lobby Aft"; dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/reception) "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/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/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) "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) @@ -4711,7 +4670,7 @@ "bME" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bMF" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bMG" = (/obj/structure/bed/chair/comfy/teal{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) -"bMH" = (/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; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"bMH" = (/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue{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/reception) "bMI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/bed/chair/comfy/teal{dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bMJ" = (/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/patient_wing) "bMK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/rnd/research) @@ -4743,7 +4702,7 @@ "bNk" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bNl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bNm" = (/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) -"bNn" = (/obj/structure/lamarr,/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice) +"bNn" = (/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice) "bNo" = (/obj/structure/table/standard,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/assembly/robotics) "bNp" = (/turf/simulated/floor/tiled,/area/assembly/robotics) "bNq" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics) @@ -4752,7 +4711,7 @@ "bNt" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bNu" = (/obj/structure/closet/secure_closet/hop2,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "bNv" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/blue,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) -"bNw" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/item/weapon/stamp/hop,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) +"bNw" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp/hop,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) "bNx" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop) "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) @@ -4782,10 +4741,10 @@ "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/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/beige{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bOa" = (/obj/structure/closet/secure_closet/paramedic,/obj/item/clothing/accessory/storage/black_vest,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "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/effect/floor_decal/corner/pink{dir = 10},/obj/structure/closet/secure_closet/paramedic,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"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) "bOe" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOf" = (/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOg" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) @@ -4912,7 +4871,7 @@ "bQx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bQy" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Access"; dir = 1},/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bQz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/lime{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/medical/virologyaccess) -"bQA" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled,/area/medical/virologyaccess) +"bQA" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/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/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bQB" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bQC" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "MED - Virology Access Hallway"; dir = 1},/turf/simulated/floor/tiled,/area/medical/virologyaccess) "bQD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/virologyaccess) @@ -4941,7 +4900,7 @@ "bRa" = (/obj/machinery/computer/aifixer,/obj/effect/floor_decal/corner/purple/full,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bRb" = (/obj/machinery/computer/robotics,/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bRc" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/ai_status_display{pixel_y = -32},/obj/machinery/camera/network/research{c_tag = "SCI - RD's Office"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) -"bRd" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) +"bRd" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/mob/living/simple_animal/slime/science,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice) "bRe" = (/obj/structure/table/rack,/obj/item/weapon/rig/hazmat/equipped,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice) "bRf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/obj/item/weapon/pen,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRg" = (/obj/machinery/optable{name = "Robotics Operating Table"},/turf/simulated/floor/tiled/white,/area/assembly/robotics) @@ -4969,7 +4928,7 @@ "bRC" = (/obj/machinery/door/airlock{name = "Private Restroom"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "bRD" = (/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "bRE" = (/obj/structure/toilet{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) -"bRF" = (/obj/structure/closet/chefcloset,/obj/item/device/eftpos{eftpos_name = "Kitchen EFTPOS scanner"},/obj/item/glass_jar,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bRF" = (/obj/structure/closet/chefcloset,/obj/item/glass_jar,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/device/retail_scanner/civilian,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bRG" = (/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,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bRH" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/light,/obj/machinery/button/remote/blast_door{id = "kitchen"; name = "Kitchen Shutters Control"; pixel_x = -1; pixel_y = -24; req_access = list(28)},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bRI" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -4999,8 +4958,8 @@ "bSg" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bSh" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bSi" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) -"bSj" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft{name = "Medical Delivery"; req_access = list(5)},/turf/simulated/floor/tiled,/area/medical/patient_wing) -"bSk" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bSj" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/light{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/cryo) +"bSk" = (/obj/effect/floor_decal/corner/beige{dir = 5},/obj/structure/sink{dir = 2; icon_state = "sink"; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bSl" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/blue,/area/medical/psych) "bSm" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 8},/obj/machinery/button/windowtint{id = "psyco_tint"; pixel_x = -25},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door."; id = "mentaldoor"; name = "office door control"; pixel_x = -34; pixel_y = 7},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor/carpet/blue,/area/medical/psych) "bSn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) @@ -5064,10 +5023,10 @@ "bTt" = (/obj/machinery/chemical_dispenser/full,/obj/structure/table/reinforced,/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bTu" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bTv" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/tiled/white,/area/medical/chemistry) -"bTw" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/chainofcommand,/obj/item/device/eftpos{eftpos_name = "Captain EFTPOS scanner"},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the Starboard Bridge Doors."; id = "sbridgedoor"; name = "Starboard Bridge Door Control"; pixel_x = 4; pixel_y = -6},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the captain's office."; id = "captaindoor"; name = "Captain's Office Door Control"; pixel_x = 4; pixel_y = 6},/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bTw" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cash_register/civilian{tag = "icon-register_idle (NORTH)"; icon_state = "register_idle"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) "bTx" = (/obj/structure/closet/secure_closet/medical1,/obj/item/weapon/storage/box/pillbottles,/obj/effect/floor_decal/corner/beige{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bTy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/chemistry) -"bTz" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"bTz" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/cryo) "bTA" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bTB" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bTC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) @@ -5143,7 +5102,7 @@ "bUU" = (/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "bUV" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/clothing/head/cakehat,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) "bUW" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/cafeteria) -"bUX" = (/obj/effect/floor_decal/corner/beige{dir = 5},/obj/structure/sink{dir = 2; icon_state = "sink"; pixel_x = 0; pixel_y = 11},/turf/simulated/floor/tiled/white,/area/medical/chemistry) +"bUX" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/screwdriver,/obj/effect/floor_decal/corner/beige{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/chemistry) "bUY" = (/obj/item/weapon/stool/padded,/obj/machinery/alarm{pixel_y = 22},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafeteria Fore"; dir = 2},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "bUZ" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) "bVa" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) @@ -5243,10 +5202,10 @@ "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/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) +"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) "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/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/structure/sign/poster{pixel_x = 0; pixel_y = -32},/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) "bWX" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bWY" = (/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_c) "bWZ" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/patient_c) @@ -5258,7 +5217,7 @@ "bXf" = (/obj/item/weapon/gun/launcher/syringe,/obj/item/weapon/storage/box/syringegun,/obj/structure/table/steel,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bXg" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/structure/table/steel,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bXh" = (/obj/structure/closet/crate{icon_state = "crateopen"; name = "Grenade Crate"; opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) -"bXi" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"bXi" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/medical/psych) "bXj" = (/obj/item/weapon/cane,/obj/item/weapon/cane{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cane{pixel_x = -6; pixel_y = 4},/obj/structure/table/steel,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bXk" = (/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/structure/table/steel,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bXl" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft) @@ -5300,7 +5259,7 @@ "bXV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bXW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bXX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/bridge/meeting_room) -"bXY" = (/obj/item/weapon/hand_labeler,/obj/item/device/assembly/timer,/obj/item/device/eftpos{eftpos_name = "Bridge EFTPOS scanner"},/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room) +"bXY" = (/obj/item/weapon/hand_labeler,/obj/item/device/assembly/timer,/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/retail_scanner/command{tag = "icon-retail_idle (EAST)"; icon_state = "retail_idle"; dir = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bXZ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bYa" = (/obj/structure/bed/chair/comfy/black{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bYb" = (/obj/item/weapon/folder/red,/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark{name = "blobstart"},/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/carpet,/area/bridge/meeting_room) @@ -5328,7 +5287,7 @@ "bYx" = (/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},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bYy" = (/obj/machinery/door/firedoor/glass,/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) "bYz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/pink{dir = 9},/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/white,/area/medical/patient_wing) -"bYA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"bYA" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/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},/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bYB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft) "bYC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/maintenance/medbay_aft) "bYD" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) @@ -5458,7 +5417,7 @@ "caX" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/bed/chair/office/light,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room D"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_d) "caY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/maintenance/medbay_aft) "caZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/light/small,/turf/simulated/floor,/area/maintenance/medbay_aft) -"cba" = (/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) +"cba" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft{name = "Medical Delivery"; req_access = list(5)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled,/area/medical/patient_wing) "cbb" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) "cbc" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/medical_escape_pod_hallway) "cbd" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_1_berth_hatch"; locked = 1; name = "Large Escape Pod 1"; req_access = list(13)},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) @@ -5512,7 +5471,7 @@ "cbZ" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "cca" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) "ccb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) -"ccc" = (/obj/structure/bed/chair/wood{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/coffee_shop) +"ccc" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/item/weapon/storage/toolbox/emergency,/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},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "ccd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "cce" = (/obj/machinery/recharge_station,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/neutral,/area/crew_quarters/cafeteria) "ccf" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway) @@ -5526,7 +5485,6 @@ "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/effect/floor_decal/industrial/warning/corner{dir = 1},/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"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway) "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) @@ -5740,7 +5698,7 @@ "cgt" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "large_escape_pod_1"; pixel_x = -26; pixel_y = 26; tag_door = "large_escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "cgu" = (/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "cgv" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station) -"cgw" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; frequency = 1487; icon_state = "medintercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station) +"cgw" = (/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/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) "cgx" = (/obj/structure/bed/chair,/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station) "cgy" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/steel,/area/quartermaster/miningdock) "cgz" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel,/area/quartermaster/miningdock) @@ -5870,7 +5828,7 @@ "ciT" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/medbay_aft) "ciU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/medbay_aft) "ciV" = (/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,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft) -"ciW" = (/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) +"ciW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 4; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "ciX" = (/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,/turf/simulated/floor/plating,/area/crew_quarters/cafeteria) "ciY" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station) "ciZ" = (/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,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station) @@ -6239,8 +6197,8 @@ "cpY" = (/obj/machinery/door/airlock{name = "Cargo Emergency Storage"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/emergency_storage/emergency6) "cpZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/storage/tools) "cqa" = (/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access = list(12)},/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,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/storage/tools) -"cqb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/hallway/primary/port) -"cqc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/hallway/primary/port) +"cqb" = (/obj/structure/bed/chair,/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/shuttle/floor{icon_state = "floor3"},/area/shuttle/large_escape_pod1/station) +"cqc" = (/obj/structure/table/rack,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/medbay_aft) "cqd" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/dark,/area/hallway/primary/port) "cqe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/quartermaster/office) "cqf" = (/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/port) @@ -6268,7 +6226,7 @@ "cqB" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_three) "cqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft) "cqD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_aft) -"cqE" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/obj/effect/floor_decal/corner/brown{dir = 9},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) +"cqE" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/chainofcommand,/obj/machinery/button/remote/airlock{desc = "A remote control switch for the Starboard Bridge Doors."; id = "sbridgedoor"; name = "Starboard Bridge Door Control"; pixel_x = 4; pixel_y = -6},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the captain's office."; id = "captaindoor"; name = "Captain's Office Door Control"; pixel_x = 4; pixel_y = 6},/turf/simulated/floor/wood,/area/crew_quarters/captain) "cqF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/office) "cqG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/office) "cqH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/quartermaster/office) @@ -6300,14 +6258,13 @@ "crh" = (/obj/machinery/door/airlock/glass{name = "Cargo Access"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/hallway/secondary/cargo_hallway) "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/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/primary/port) -"crl" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/hallway/primary/port) +"crk" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_four) "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/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port) -"crr" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/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) "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) @@ -6417,7 +6374,7 @@ "ctu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking_hallway) "ctv" = (/obj/structure/table/standard,/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/obj/effect/floor_decal/corner/brown/full,/turf/simulated/floor/tiled,/area/quartermaster/office) "ctw" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/office) -"ctx" = (/obj/structure/table/standard,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/effect/floor_decal/corner/brown{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/quartermaster/office) +"ctx" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/effect/floor_decal/corner/brown{dir = 9},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office) "cty" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/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/quartermaster/office) "ctz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/wood,/area/crew_quarters/bar) "ctA" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/status_display/supply_display{pixel_y = -32},/turf/simulated/floor/tiled,/area/quartermaster/foyer) @@ -6545,8 +6502,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/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2"; suffix = "#2"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/quartermaster/storage) -"cvW" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #1"},/obj/machinery/bot/mulebot{beacon_freq = 1400; home_destination = "QM #1"; suffix = "#1"},/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) "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) @@ -6650,7 +6607,7 @@ "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) "cxV" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) -"cxW" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/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) "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) @@ -6663,10 +6620,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/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/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) "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/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/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) "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) @@ -6679,7 +6636,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/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/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) "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) @@ -6795,7 +6752,7 @@ "cAI" = (/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,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) "cAJ" = (/obj/structure/closet,/obj/item/weapon/storage/backpack/dufflebag,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cAK" = (/obj/structure/closet/secure_closet/quartermaster,/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cAL" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3; pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/tiled,/area/quartermaster/qm) +"cAL" = (/obj/structure/table/standard,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -12; pixel_y = -24},/obj/effect/floor_decal/corner/brown{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/item/device/retail_scanner/civilian{tag = "icon-retail_idle (NORTH)"; icon_state = "retail_idle"; dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office) "cAM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cAN" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) "cAO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint) @@ -7024,7 +6981,7 @@ "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) "cFf" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) -"cFg" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/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) "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) @@ -7035,10 +6992,10 @@ "cFo" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4) "cFp" = (/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_4) "cFq" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 4"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4) -"cFr" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4) +"cFr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/hallway/primary/port) "cFs" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4) "cFt" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9) -"cFu" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9) +"cFu" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/hallway/primary/port) "cFv" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 9"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9) "cFw" = (/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_9) "cFx" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9) @@ -7049,7 +7006,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/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/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) "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) @@ -7351,7 +7308,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/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics Subgrid"},/obj/structure/cable/cyan,/obj/structure/disposalpipe/segment{dir = 2; 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) "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) @@ -7385,13 +7342,13 @@ "cMa" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/light{dir = 1},/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cMb" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) "cMc" = (/obj/machinery/lapvend,/turf/simulated/floor/lino,/area/hallway/secondary/entry/docking_lounge) -"cMd" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/device/eftpos{eftpos_name = "Bar EFTPOS scanner"},/obj/item/glass_jar,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"cMd" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3; pixel_y = 3},/obj/item/weapon/coin/silver,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/light,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cMe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cMf" = (/obj/structure/reagent_dispensers/beerkeg,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Storage"; dir = 2},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cMg" = (/obj/machinery/button/remote/blast_door{id = "bar"; name = "Bar Shutters"; pixel_x = -26; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cMh" = (/obj/item/weapon/stool/padded,/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cMi" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) -"cMj" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) +"cMj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/port) "cMk" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 1"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) "cMl" = (/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_1) "cMm" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) @@ -7416,7 +7373,7 @@ "cMF" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_8) "cMG" = (/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_8) "cMH" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 8"; dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_8) -"cMI" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_8) +"cMI" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/primary/port) "cMJ" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_8) "cMK" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/wall/r_wall,/area/engineering/atmos) "cML" = (/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/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva) @@ -7537,7 +7494,7 @@ "cOW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cOX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/sign/securearea{desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; icon_state = "monkey_painting"; name = "Mr. Deempisi portrait"; pixel_x = 28; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cOY" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/lino,/area/crew_quarters/bar) -"cOZ" = (/obj/structure/table/woodentable,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/item/device/flashlight/lamp/green,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"cOZ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port) "cPa" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/machinery/newscaster{pixel_x = 31; pixel_y = 3},/turf/simulated/floor/carpet,/area/crew_quarters/bar) "cPb" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) "cPc" = (/turf/simulated/floor/carpet,/area/crew_quarters/bar) @@ -7565,7 +7522,6 @@ "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/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 1},/obj/effect/floor_decal/corner/white{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor's Dinning"; dir = 2},/turf/simulated/floor/tiled,/area/crew_quarters/visitor_laundry) "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) @@ -9553,9 +9509,9 @@ "dBK" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/evahallway) "dBL" = (/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{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/glass{name = "Dock"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard) "dBM" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass{name = "Dock"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard) -"dBN" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/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/white,/area/crew_quarters/kitchen) +"dBN" = (/obj/structure/sign/redcross{name = "First-Aid"; pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/port) "dBO" = (/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,/area/crew_quarters/cafeteria) -"dBP" = (/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/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/tiled,/area/crew_quarters/cafeteria) +"dBP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/primary/port) "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) @@ -9567,11 +9523,11 @@ "dBY" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) "dBZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) "dCa" = (/obj/structure/table/standard,/obj/machinery/microwave,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) -"dCb" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) +"dCb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/tiled,/area/hallway/primary/port) "dCc" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 2"; dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) "dCd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep/vistor_room_2) "dCe" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) -"dCf" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_7) +"dCf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/primary/port) "dCg" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_7) "dCh" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 2},/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_7) "dCi" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Visitor Room 7"; dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_7) @@ -9705,25 +9661,92 @@ "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) -"dEJ" = (/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/hallway/primary/central_four) -"dEK" = (/obj/effect/floor_decal/corner/blue/full{dir = 4},/obj/machinery/door/airlock/medical{name = "First-Aid Station"; req_access = list(5)},/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/white,/area/medical/first_aid_station_starboard) -"dEL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) -"dEM" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/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},/turf/simulated/floor/tiled,/area/hallway/primary/central_four) -"dEN" = (/obj/effect/floor_decal/corner/blue/full,/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/adv,/obj/item/bodybag/cryobag,/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"},/obj/machinery/camera/network/medbay{c_tag = "MED - First-Aid Station"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"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) +"dEM" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_5) +"dEN" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_6) "dEO" = (/turf/simulated/wall,/area/medical/first_aid_station_starboard) -"dEP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/corner/blue{dir = 10},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dEQ" = (/obj/effect/floor_decal/corner/blue{dir = 10},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dER" = (/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,/obj/machinery/door/blast/shutters{dir = 2; id = "first_aid_station"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) -"dES" = (/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,/obj/machinery/door/blast/shutters{dir = 1; id = "first_aid_station"; layer = 3.1; name = "Security Shutters"},/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) +"dEP" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_11) +"dEQ" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_12) +"dER" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/carpet,/area/crew_quarters/bar) +"dES" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_3) "dET" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/sign/directions/security{dir = 1; pixel_x = -32; pixel_y = 0},/obj/structure/sign/directions/science{dir = 1; pixel_x = -32; pixel_z = -8},/obj/structure/sign/directions/evac{dir = 4; pixel_x = -32; pixel_z = 8},/obj/machinery/light{dir = 8},/obj/machinery/camera/network/northern_star{c_tag = "Hall - Central Primary Port Aft 2"; dir = 4},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_four) -"dEU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dEV" = (/obj/machinery/computer/crew,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dEW" = (/obj/machinery/sleep_console{tag = "icon-sleeperconsole (NORTH)"; icon_state = "sleeperconsole"; dir = 1},/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dEX" = (/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,/obj/machinery/door/blast/shutters{dir = 4; id = "first_aid_station"; layer = 3.1; name = "Security Shutters"},/obj/structure/sign/redcross,/turf/simulated/floor/plating,/area/medical/first_aid_station_starboard) -"dEY" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/obj/machinery/sleeper,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dEZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/corner/blue{dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dFa" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/blast_door{id = "first_aid_station"; name = "Security Shutters"; pixel_y = 25},/obj/effect/floor_decal/corner/blue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) -"dFb" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/blue/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "First-Aid Station"; req_access = list(5)},/obj/machinery/door/blast/shutters{dir = 4; id = "first_aid_station"; layer = 3.1; name = "Security Shutters"},/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"},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station_starboard) +"dEU" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_4) +"dEV" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_9) +"dEW" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_10) +"dEX" = (/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/machinery/power/sensor{name = "Powernet Sensor - Atmospherics Subgrid"; name_tag = "Atmospherics Subgrid"},/obj/structure/cable/cyan,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/engineering/atmos/storage) +"dEY" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_1) +"dEZ" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_2) +"dFa" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_7) +"dFb" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/crew_quarters/sleep/vistor_room_8) +"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) +"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) +"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) +"dFt" = (/obj/structure/closet/wardrobe/orange,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"dFu" = (/obj/structure/closet/radiation,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage) +"dFv" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green{dir = 5},/obj/structure/window/reinforced{dir = 1},/obj/random/projectile,/obj/machinery/door/window/brigdoor/southleft{name = "Ballistics"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFw" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/projectile/shotgun/pump{pixel_x = 3; pixel_y = 3},/obj/item/weapon/gun/projectile/shotgun/pump,/obj/machinery/door/window/brigdoor/southleft{name = "Ballistics"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFx" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green{dir = 5},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/random/projectile,/obj/machinery/door/window/brigdoor/southleft{name = "Ballistics"; req_access = list(1)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFy" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/southright{name = "Lethal Ammo"; req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFz" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/mc9mmt,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/item/ammo_magazine/c45m,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/door/window/brigdoor/southleft{name = "Lethal Ammo"; req_access = list(3)},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFA" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFB" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFC" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/recharger/wallcharger{pixel_x = 32; pixel_y = -4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFD" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFE" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full{dir = 8},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/machinery/door/window/brigdoor/eastright{name = "Ammo"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/stool,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFI" = (/obj/machinery/recharger/wallcharger{pixel_x = 32; pixel_y = -4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFK" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red{dir = 9},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/machinery/door/window/brigdoor/eastright{name = "Ammo"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFL" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/empslite{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFM" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFN" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs{pixel_x = 8; pixel_y = 6},/obj/item/weapon/storage/box/chemimp{pixel_x = 4; pixel_y = 3},/obj/item/weapon/storage/box/trackimp,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFO" = (/obj/machinery/camera/network/security{c_tag = "SEC - Secure Armory Weapons"; dir = 8},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFQ" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/weapon/storage/box/practiceshells,/obj/item/weapon/storage/box/practiceshells,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/stunshells,/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor/eastright{name = "Ammo"},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/stool,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dFT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/security/armoury) +"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) +"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) +"dGd" = (/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/southright{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) +"dGe" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor/southleft{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) +"dGf" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/void/security,/obj/item/clothing/head/helmet/space/void/security,/obj/item/weapon/tank/air,/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/security/armoury) +"dGg" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Armoury Access"; pixel_x = 28; pixel_y = -28; req_access = list(3)},/turf/simulated/floor/tiled,/area/security/armoury) +"dGh" = (/obj/machinery/light{dir = 1},/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) +"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) +"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) +"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) +"dGt" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/red/full,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/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) +"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) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9778,7 +9801,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahabXabXabXabXabXabXabXabXabXabXabXaaeabYabZabcacaabTacbaccacdaceacfacgachaciabTaaSabtacjackaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahabXaclacmacnacoaclacpaclacqacrabXacsabYabZabcaboabTactacuacuacuacuacvacuacuacwaaSabtacxaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaczaczacAaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahabXacBacCacCacCacCacDacCacCacEacFabCacGabZabcaboabTacHacuacIacJacuacvacuacKacLaaSabtacMaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNaaaaaaacNaaaaaaaaaacNaaaaaaaaaaaaaaaacNaaaaaaaaaacNaaaaaaacNaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaadaaaacOaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahabXacPacCacCacQacCacRacSacSacSacTabmacUacVabCabCacWacXacuacYacZacuacvacuadaacwaaSabtadbaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaadaaaacOaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahabXacPacCacCacQacCacRacSacSacSacTabmacUacVabCabCacWacXacuacYacZacuayEacuadaacwaaSabtadbaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaaaaacNacNacNacNacNacNacNaaaaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadadcaadacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaddaddaddabXaclacmadeacoadfadgacladhadiabXadjabYadkabmadladmadnadoadpadqadoadradoadsadtaduadvadwaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczaczacAacAaaaaaaaaaadxaaaaaaaaaacAacAaczaczaczaaaaaaadyaddaddaddaddaddaddadzadzabXabXabXabXabXabXabXabXabXabXabXaaeabYadAadBadBadCadDadEadFadGadHadIacuadJadKaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaacNacNacNacNaaaaaaacNacNacNacNacNacNacNacNacNaaaaaaacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaadLaadaadaaaaadaaaaaaaaaaczaaaaaaadMadNadOadPadQadRadSadTadUadVadWadXadYadZaeaadVadVaebaecaddaboaedaeeabcaboabTacuacuaefacJacuaegacuadJaehaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9786,7 +9809,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaaaaddaddaddaddaddaeJaeKaeLaeMaeMaeMaeMaeNaeMaeMaeMaeMaeOaePaddaeQabYaeRaeSaeTabTaeUacuaeVacuaeWaegacuaeXaeYaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaaaaahaahaahaahaddaddaeKaeMaeMafaafbafcafdafeafbaffaeMaeMaddaddaaNafgafhafiaaNabTafjacuafkaflaflafmaflaflaflaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaacOaaaaaaaahaahaahaahaahaddafnaeMafoafcafpafqafrafsaftaftafuaeMaahaahaaNabYafvafwaaNafxafyafyafzaflafAafBafCafDafEaaSabtaaSaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyafyaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeiaeiaeiaeiaeiaadaejaadaeiaeiaeiaeiaeiaadacAaaaaahaahaahaahaahaahaddafnaeMafFafGafHafIafJafKafLafMafNaeMaahaahaaNabYaeRafOaaNafxafyafyaywaflafPafQafRaflaflaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeDaeEaeEaeEaeEaeFaejaeGaeHaeHaeHaeHaeIaadacAaaaaahaahaahaahaahaddaddafnaeMafSafTafUafVafWafXafYafcafZaeMaahaahaaNagaafvagbaaNafxagcagdageaflagfaggaggaghafEaaSabtabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadaeZaeZaeZaeZaeZaadaejaadaeZaeZaeZaeZaeZaadacAaaaaahaahaahaahaahaddagiagjaeMafcafcagkaglaglaglagmafcafcaeMaahaahaaNagnagoagpaaNabTabTabTabTaflaflagqaflaflaflaaSaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyacyacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaadaaaaaaaaaaejaaaaaaaaaaadaaaaaaaaaaczaaaaahaahaahaahaahaddagragsaeMagtaguagkafcagvafcagwaguagxaeMaahaahaaNabYafvafwaaNaahaahaahaahaflagyaggagzaflagAagBaaSabtaaSaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNacNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9818,32 +9841,32 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyasGasGasGasHasIasJasIasKasGasGamuasLasLasMasNasOasPasNasLasLamuamuamuamuamuamuasLasQasRasRasRasRasRanrapwasSapwanranranranranranranranrasTasUasVasWapzapzapzapzapzasXanzasYasZanzanzanzanzasYataamYaoBaoDaoDatbaoDasDatcaoGahyalAatdateahMdEIdEFdEEdEHdEGdElaahaahaahakzamfatganQaqIaqJaqKatganQathakzaahaahaahaahanZarNanZanZaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiatiatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFatGatHatIasQatJatKatLatMasRanratNatOatNanraahaahaahaahaahaahanratPatQatRanranraahaahaahamXamXatSatTatUanzatVatWatXatYatZamYauaaubaoDaoDaucaudamYamYaahahuahvahwauedEDdECdEBdEodEAdEldElaahaahakzaqFaufaugaqIaqJaqKauhaugaqFakzaahaahaahaahanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyatiatiauiaujaukaulaumaunauoaupauqaurausautauuauvauwauxauyauzauAauBauCauBauDauEauFauGauHauGauIasQauJauKauLauMasRaahatNauNatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahamXamXamXauPamXamXamXamXamXamXamYamYamYauQauRamYamYamYaahaahahudEsdErdEudEtdEwdEvdEydExdEzdElaahaahakzauSauTakzauUauVauWakzauSauTakzahyaahaahanZanZarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahaahavCavDavEavFavCaahaahaahaahaahahyahyahyahyaahaahaahaahaahahuahvameahMahudEqdEpdEodEndEmdElaahaahahyahyahyavGavHavIavJavGahyahyahyahyahyanZanZarOarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsclxdEjcmydEkdElaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCaxiawnavEawnaxjavCavCavCavCavCavCaxfaxgaxhavCavCavCavCavCaxkaxlaxmaxdaxnawsawsckJawsawsawsawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsanZanZaxrarNanZanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiaxtaxuaxvaxwaxxaxyavdavQaxzaxAavfaxBaxCaxDaxEaxFaxGavfawPaxHaxIawQawRaxJaxKaxKaxKaxKaxKaxKaxKaxLaxLaxLaxLaxLaahatNauNatNatNatNatNatNatNatNaxMawnaxNaxOaxPaxQaxRaxSaxTaxQaxQaxUaxVaxQaxWaxQaxQaxRaxQaxQaxXaxYaxQaxQaxZaxQaxTayaaxQaxQaxRaxQaybaycaxPaydayeayfayfaygayhayiayfayjayfayfaykayfaylaxqavJaymaynayoaymaypanZarOarOayqanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaxsayraysaytayuayvaywaxsaahatiayxayyayzatiayAavbavdayBayCayDavfayEayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPaySayQayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazhaziazjazjazgazkaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvazxazyazvazvazvazvazzazAazvazvazBaymazCazDarOazEazFanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaxsayrayrazHazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazXazYayPaCdaCcayPazZaAaaAbaAcaAdaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALaALaALaALaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDeaBiayPaBiaDeayPaBjaBkaBlayXayXaBmaBnaBoatNatNaahatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsanZanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaBAaBBaBCazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPdEfayPayPayPdEgayPayXaCeayXayXaAeaCfayZauNatNaahaahaahaahaahaahavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaCqaCraCsaCtaCuaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaDddEiaDfaDgaDhaDiaDjaAeaDkaDlauNatNaahaahaahaahaahaahaahavCaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaDwaDxaDxaDxaDxaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaahaahaahaahaahavCaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEqaEraEsaEtaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaALaALaEyaDxaEzaEAaDxaEBaALaECaEDaEEaEFaEGaEHaEFaEIaEJaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaahaahaFmaFmaFmaFmaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaFwaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaALaALaFKaDxaFLaFMaDxaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaGyaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaGMaGNaGOaGNaGPaGOaGNaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaGUaGVaGWaGXaGYaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaFmaHOaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaImaDxaInaIoaIpaIqaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaDsaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaJFaDxaJGaJHaDxaJIaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFaaKbaFaaFaaKcaKdaKeaKfaKgaKhaKiaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaKoaKpaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaKwaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaKFaKGaDxaJHaDxaKHaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaLSaLTaDxaJHaDxaKHaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaMnaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaMWaMWaMWaMXaMYaMZaNaaNbaMWaJJaNcaNdaNeaNeaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraNsaFaaNtaNuaFaaNvaNwaFaaNxaNyaFaaLmaNzaNAaNBaNCaNDaNEaNFaNEaLmaNGaFhaFhaahaahatNaNHaNIatNaahaNJaNKaNLaNMaNNaNOaNPaxlaxmawnaFoaNQaNRaJkaJkaNSaFoahyaCjaNTaNUaNVaNWaNXaNYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaNZaOaaObaOcaOdaOdaOdaOeaOdaOfaOdaOgaOdaOhaOiaOjaKBaKCaKCaOkaOlaOmaKCaKCaKDaGRaOnaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaMWaMWaOpaOqaOraOsaOtaOuaMWaJJaLUaOvaOwaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaMdaOGaOHaKSaOIaOJaOKaOLaOMaFaaONaOOaOPaLmaLmaOQaLmaORaFhaOSaOTaOTaOUaFaaFaaOVaFaaFaaahaahaahatNatNaNIatNaahaNJaOWaOXaOYaOZaOXaPaaxlaxmawnaJjaJkaPbaPcaJkaKuaFoahyaCjaPdaPeaGDaPfaPgaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaPhaLIaIcaPiaPjaPlaPlaPlaPmaPnaPoaPlaPpaPlaPraPsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaPtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaMWaMWaMWaPuaPvaPwaPuaPuaMWaJJaKIaPxaKIaKIaKIaPyaPzaPAaPBaPCaPDaJQaKVaPEaPFaPFaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPNaPPaPQaPNaPRaPSaKxaPUaPTaPWaFaaPXaPYaPZaFaaahaahaahaahatNaHNatNaahaNJaQaaOXaQbaQcaQdaQeaQfaQgaQhaKraJkaQiaJmaJnaQjaFoahyaCjaPdaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaLIaIcaQkaQlaLPaQnaQnaQoaQnaQnaQpaQqaPkaLQaQsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaMWaMWaMWaMWaMWaMWaMWaMWaJJaJJaPxaKIaQtaQuaQvaLXaQwaQxaQyaQzaJQaQAaQBaQCaKSaQCaQDaQEaFhaFhaFhaFhaQFaLgaQGaQHaQHaMtaLmaQIaQJaPNaPPaQKaQLaFaaQMaPYaQNaFaaahaahaahaahatNaHNatNaahaNJaNJaQOaOXaQPaQQaNPawnaxmaQRaFoaJkaJkaHVaQSaFoaFoahyaCjaPdaCjaahaahaGDaQTaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaQUaQVaDraQWaClaQnaQnaQXaQYaQZaQnaQnaRaaQnaQnaRbaJAaRcaRdaRdaRdaRdaRdaRdaRdaReaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahahyaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaahaahaahaahaahaMWaMWaMWaMWaMWaMWaMWaJJaRgaRhaRgaRgaJJaJJaJJaJJaJJaJJaJJaRiaRiaRiaPqaRkaPqaRiaRiaRiaahaahaFhaFhaRlaRmaPVaRoaRpaRqaRraPSaKxaRsaRnaRuaFhaFaaFaaRvaFaaahaahaahatNatNaHNatNaahaahaNJaNJaRwaRxaRyaPaawnaxmaRzaFoaRAaRBaGCaFoaFoahyahyaCjaPdaCjaahaahaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaIaaLIaIcaRCaClbZuaREaRFaRGaQZaQnaRHaRGaRIaQnaRbaRJaRKaRKaRKaRKaRKaRKaRKaRKaRKaRLaGRaRMaRNaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaRPaRPaRPaRPaRPaRPaRPaRPaRQaRfaahaahaahaahaahaahaahaahaahaahaahaahaahaRgaRRaRSaRTahyahyahyahyahyahyahyahyahyaRUaRVaRVaRVaRUahyahyaahaahaahaFhaFhaRWaRXaRXaRYaFhaFhaFhaFhaFhaFhaFhaFhaahaFaaRZaFaaahaahaahatNaSaaSbatNaahaahahyaNJaNJaNJaNJaNJaScaSdawnaFoaFoaFoaFoaFoahyahyahyaCjaPdaCjaCjaahaGDaGDaGEaGFaGFaGFaSeaGFaGFaGFaGFaGHaGDaGIaSfaGKaGLaClaQnaQnaSgaShaSiaSjaSkaSlaSmaSjaRbaSnaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahyahyahyahyahyatiauXauYauZatiavaavbavcavdaveavdavfavfavgavhaviavjavkavfavlavmavnavoavpavqatDavravsavtavuavvavwavxavyavzavAasRaahatNavBatNaahaahaahaahaahaahaahanrasTauOasranraahaahaahaahaahaahavCavDavEavFavCaahaahaahaahaahahyahyahyahyaahaahaahaahaahahuahvameahMahudEqdEpdEodEndEmdElaahaahahyahyahyavGavHavIavJavGahyahyahyahyahyanZanZarOarNanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaxsaxsaxsaxsaxsaxsaxsaxsaahatiavKavLavMatiavNavOavdavdavPavQavfavRavSavTavUavTavVavWavXavYavZawaawbawcawdaweaweawfaweawgasQawhawiasRawjasRaahatNauNatNaahaahaahaahaahaahanranrawkawlawmanranrahyahyahyahyavCavCawnavEawoavCavCaahaahaahaahaahahyahyahyahyaahaahaahavCahuawpawqawrahuawsclxdEjcmydEkdElaahaahahyahyahyawtawuawvawwawtahyahyahyaahaahanZawxawyawzanZaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyaahaahaahaahaahaahaahaahaxsdFmdFnazHdFoaytayuaxsaahatiawAawBawCatiawDawEavdawFawGawHavfawIawJawKawLawMawNawOawPavmawQawQawRawSatDatEawTawUawVawWasQawXawYasRawZasRaahatNauNatNaahaahaahaahaahatNavCaxaaxbaxcaxdaxeavCavCaxfaxgaxhavCaxiawnavEawnaxjavCavCavCavCavCavCaxfaxgaxhavCavCavCavCavCaxkaxlaxmaxdaxnawsawsckJawsawsawsawsawsawsaxoaxpawsavHaxqavJawsaxoaxpawsawsanZanZaxrarNanZanZaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaALaALaALaALaALaALaALaxsdFqdFqazHazHdFrdFraxsaahatiaxtaxuaxvaxwaxxaxyavdavQaxzaxAavfaxBaxCaxDaxEaxFaxGavfawPaxHaxIawQawRaxJaxKaxKaxKaxKaxKaxKaxKaxLaxLaxLaxLaxLaahatNauNatNatNatNatNatNatNatNaxMawnaxNaxOaxPaxQaxRaxSaxTaxQaxQaxUaxVaxQaxWaxQaxQaxRaxQaxQaxXaxYaxQaxQaxZaxQaxTayaaxQaxQaxRaxQaybaycaxPaydayeayfayfaygayhayiayfayjayfayfaykayfaylaxqavJaymaynayoaymaypanZarOarOayqanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALaALaALaALaALaALaxsdFsdFsazHazHdFtdFuaxsaahatiayxayyayzatiayAavbavdayBayCayDavfaEqayFavTayGavTayHayIayJayKayLayMayNayOayPayQayRayPaySayQayPayTayUayVayWayXatNatNauNayYayZayZayZazaazbazcazdawnaxlazeazfazgazhaziazjazjazgazkaziazjazlazjazgazmaznaznaznazoaznaznazpaznazqaznaznaznazmazqazpazrazsaztazuazvazvazvazwazvazvazxazyazvazvazvazvazzazAazvazvazBaymazCazDarOazEazFanZaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALaALdFwdFvdFxaALdFzdFyaxsayrayraBCazHazHazIaxsazJazJazJazJazJazJazKazLazMazMazNazMazMazMazMazOazPazQazRazSazTazUazVavqavqazWayPazXazYayPaCdaCcayPazZaAaaAbaAcaAdaAeaAfauNaAgatNatNatNaAhazbatNaAiawnaxlaxmaxdaAjaAkaAlawnaAmaAnaAoaApawnaAqawnaAraAkawnawnawnaApawnawnaAsawnaAtawnaAuawnaAkaAvaxlaAwaAxaAyaAzaAAaAAaAAaABaACaAAaADaAEaAAaAAaAAaAAaAFaAGaymaymaAHaAIazCanZaAJaAJaAKanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALaALdFAaDxaDxaDxdFBdFDdFCaALayrayrazHazHaAMaAMaANaAOaAPaAQaARaASaATaAUaAVaAWaAXaAYaAZaBaaBbazMavfavfavfavfavfaBcaBdaBeaBfaBgaBhayPaDeaBiayPaBiaDeayPaBjaBkaBlayXayXaBmaBnaBoatNatNaahatNatNatNatNavCaBpaxlaxmaxdaBqavCavCaxfaxgaxhavCavCaBraBsaAiavCavCaBtaBuaBuaBuaBvavCavCavCavCavCavCavCavCaBwaxlaAwaxdaBxawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsanZanZaByaBzanZaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaALaALdFEaDxdFGdFFdFHdFFdFJdFIaALaBAaBBazHazHaBDaBEaBFaBGaBGaBHaBGaBIaBJaBKaBLaBMaBNaBOaBPaBQaBRazMaBSaBTaBUaBVaBWaBXaBYaBeaBZaCaaCbayPdEfayPayPayPdEgayPayXaCeayXayXaAeaCfayZauNatNaahaahaahaahaahaahavCavCaCgaChaCiavCavCahyahyahyahyahyaCjaCjaCkaCjaCjahyahyahyahyahyahyahyaahaahaahaahaahaahaClaClaCmaCnaCoaClawsaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahanZanZaCpanZanZaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFKaDxaJGdFLdFNdFMdFPdFOaALaCvaCwaCxaCyaCzazHaCAaCBaCCaCDaCEaCFaCGaCHaCIaCJaCKaCLaCMaCNaCNaCOaCPaCQaCRaCSaCTaCUaCVaCWaCXaCYaCZaDadEhaDbaDcaDddEiaDfaDgaDhaDiaDjaAeaDkaDlauNatNaahaahaahaahaahaahaahavCaxlaxmaxdavCahyahyahyahyahyahyahyaCjaDmaDnaCjahyahyahyahyahyahyahyahyaahaahaahaahaahaDoaDpaDqaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaDuaDvaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaALaALdFQaDxaGVdFRdFSdFRdFTaDxaDyazHaDzaDAaDBazHazHaDCaBGaBGaDDaBGaDEaDGaDHaDIaDJaDKaDLaDMaDNaDOazMaDPaDQaDRaBVaDSaDTaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEaaEeaEfaEgaEhaEiaEjaEkaElaEmatNaahaahaahaahaahaahaahavCaxlaxmaEnavCahyahyahyahyahyahyahyaCjaEoaDnaCjahyahyahyahyahyahyahyahyahyahyaahaahaahaEpaEtaEraEsaGyaClaEuaEuaEuaEuaEuaEuaEuaEuaEuaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEwaExaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaALaALaALdFUaDxaDxaDxaDxdFVaEBaALaECaEDaEEaEFdFWaEHaEFaEIaEzaDDaDFaELaEMaENaEOaEPaEQaERaESaETaEUazMaBVaEVaBVaEWaEXaEYaEZaFaaFbaFcaFdaFaaFeaFfaFeaFaaFeaFgaFeaFhayPaFiatNaFjaFkaFlatNaahaahaahaFmaFmaFmaFmaFmaFnaxcaxdaFoaFoaFoaFoaFoahyahyahyaCjaDmaCjaCjahyahyahyahyahyahyahyahyahyahyahyaahaahaFpaFqaFraFsaFtaClaFuaFvaFwaFxaFyaFzaLgaFAaFuaEvaFBaFBaFCaFDaFEaFFaFGaFFaFHaFDaFCaFIaEvaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaALaALaALaALdFYdFXdFZaDxdGaaFNaFOaFPaCIaFQaEFaECaEKaEFaFSaFTaFUaFVaFWaFXaFYaFZazMaGaaGbaGcaGdaGeazMaGfaGgaGhaGiaGjaGkaGlaFaaGmaGnaGoaFaaGpaGqaGraFaaGpaGnaGraFhaahaahatNaGsaGtaGuatNaahaahaFmaFmaGvaFRaGxaKwaxlaxmaGzaFoaGAaGBaGCaFoaFoahyahyaCjaDmaCjahyahyaGDaGDaGEaGFaGFaGFaGGaGFaGFaGFaGFaGHaGDaGIaGJaGKaGLaClaGMaGNaGOaGNaGPaGNaGOaGNaGQaEvaGRaGSaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGTaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALaALaALaALdGbdGcaGZaHaaHbaHcaHdaHeaHfaGwaHhaHiaHjaHkaHlaHmaHnaHoaHpaHqaHraHsaHtaHlaHuaHvaHwaHxaHyaHzaHAaHBaHCaFaaHDaHEaHFaFaaHGaHHaHIaFaaHJaHEaHKaFhaahaahatNaHLaHMaHNatNaahaFmaFmaHOaHPaHQaHRaFmaHSaxmaxdaFoaHTaHUaHVaHWaFoaFoahyaCjaDmaCjahyahyaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaIaaIbaIcaIdaClaIeaGNaGNaIfaIgaIhaGNaGNaIiaEvaGRaIjaIkaIkaIkaIkaIkaIkaIkaIkaIkaIlaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGedGddGfaDxdGadGgaIraIsaItaIuaIvaIwaHgaIyaIzaIAaIBaICaIDaIEaIFaIGaIHaIIaIHaIJaIKaILaIMaINaIOaBXaIPaIQaGkaIRaFaaISaITaIUaFaaIVaIWaIVaFaaIVaIXaIVaFhaahaahatNaIYaIZaHNatNaFmaFmaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaFoahyaCjaDmaCjahyahyaGDaJpaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaJraFraFsaQkaClaJsaGNaJtaJuaJvaJwaJxaGNaJyaEvaJzaJAaJBaJCaJCaJCaJCaJCaJCaJCaJDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGhaGVdFRdFRdFRdGjdGiaALaJJaJKaJKaJKaJLaJMaJKaJNaJKaJOaJPaJKaJQaJRaJSaJTaJQaJUaJVaJWaFaaJXaJYaFaaJZaKaaFaaKbaFaaFaaKcaKdaKeaKfaKgaKhbjdaKjaKiaKdaKkaFhaFhaahatNatNaKlaHNayZaKmaKnaJbaJbaKoaKpaKqaFmaxlaxmaxdaKraJkaKsaKtaJkaKuaFoahyaCjaDmaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaIbaIcaLJaDoaKyaGNaJtaJuaJvaJwaJxaGNaLKaKzaKAaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGkaDxaDxaDxaDxaDxdFPaysaALaJJaKIaKIaKJaKIaKKaKLaKMaKNaKOaKPaKQaJQaKRaKSaKTaKUaKVaKWaKXaFaaKYaKZaFaaLaaLbaLcaLdaLeaLfboJaLhaLiaLjaLkaLlboJaLmaLmaLmaLmaLnaFhaahaahatNaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaFmaLyaxmaxdaFoaLzaLAaJkaJkaLBaFoahyaCjaLCaLDaGDaLEaLFaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaLIaIbaIcaLJaFpaLLaLLaLLaLMaLNaLOaLLaLLaLLaLQaLRaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGndGoaDxdFPayvaALaJJaLUaKIaKIaKIaLVaLWaLXaLYaLZaMaaMbaMcaMdaKSaKSaMeaMfaMgaMhaFaaMiaMjaFaaMkaMlaMmaEAaMoaMpaLmaMqaMraMsaMtaLmaLmaMsaLmaLmaLmaLnaFhaahaahatNaMuaHNatNaFmaFmaFmaFmaFmaFmaFmaFmaMvaMwaMxaMyaMzaMAaMBaJkaMCaFoahyaCjaMDaMEaGDaMFaMGaMHaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaMJaEsaMKaMLaMMaMMaMMaMNaMOaMPaMMaMMaMMaMQaMRaJAaKBaKCaKCaMSaMTaMUaKCaKCaKDaGRaMVaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGmaDxaDxdGqdGraDxdFPdGsaALaJJaNcaNdaNeaNeaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraNsaFaaNtaNuaFaaNvaNwaFaaNxaNyaFaaLmaNzaNAaNBaNCaNDaNEaNFaNEaLmaNGaFhaFhaahaahatNaNHaNIatNaahaNJaNKaNLaNMaNNaNOaNPaxlaxmawnaFoaNQaNRaJkaJkaNSaFoahyaCjaNTaNUaNVaNWaNXaNYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaMIaLIaNZaOaaObaOcaOdaOdaOdaOeaOdaOfaOdaOgaOdaOhaOiaOjaKBaKCaKCaOkaOlaOmaKCaKCaKDaGRaOnaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALdGtaDxaJGaDxaDxaDxdGvdGuaALaJJaLUaOvaOwaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaMdaOGaOHaKSaOIaOJaOKaOLaOMaFaaONaOOaOPaLmaLmaOQaLmaORaFhaOSaOTaOTaOUaFaaFaaOVaFaaFaaahaahaahatNatNaNIatNaahaNJaOWaOXaOYaOZaOXaPaaxlaxmawnaJjaJkaPbaPcaJkaKuaFoahyaCjaPdaPeaGDaPfaPgaLGaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaHZaPhaLIaIcaPiaPjaPlaPlaPlaPmaPnaPoaPlaPpaPlaPraPsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaJEaDtaPtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGwaDxaDxaDxaDxaDxaALaALaJJaKIaPxaKIaKIaKIaPyaPzaPAaPBaPCaPDaJQaKVaPEaPFaPFaPFaPGaPHaPIaPJaPKaPLaPMaPNaPOaPNaPPaPQaPNaPRaPSaKxaPUaPTaPWaFaaPXaPYaPZaFaaahaahaahaahatNaHNatNaahaNJaQaaOXaQbaQcaQdaQeaQfaQgaQhaKraJkaQiaJmaJnaQjaFoahyaCjaPdaCjaGDaGDaGDaGDaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaKvaLIaIcaQmaQlaLPaQnaQnaQoaQnaQnaQpaQqaPkaLQaQsaJAaKBaKCaKCaKCaKCaKCaKCaKCaKDaGRaKEaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaALaALaALdGydGxdGxdGzaALaALaahaJJaJJaPxaKIaQtaQuaQvaLXaQwaQxaQyaQzaJQaQAaQBaQCaKSaQCaQDaQEaFhaFhaFhaFhaQFboJaQGaQHaQHaMtaLmaQIaQJaPNaPPaQKaQLaFaaQMaPYaQNaFaaahaahaahaahatNaHNatNaahaNJaNJaQOaOXaQPaQQaNPawnaxmaQRaFoaJkaJkaHVaQSaFoaFoahyaCjaPdaCjaahaahaGDaQTaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaJqaQUaQVaDraQWaClaQnaQnaQXaQYaQZaQnaQnaRaaQnaQnaRbaJAaRcaRdaRdaRdaRdaRdaRdaRdaReaGRaJEaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahahyaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaRfaahaahaahaALaALaALaALaALaALaALaALaahaahaRgaRhaRgaRgaJJaJJaJJaJJaJJaJJaJJaRiaRiaRiaPqaRkaPqaRiaRiaRiaahaahaFhaFhaRlaRmaPVaRoaRpaRqaRraPSaKxaRsaRnaRuaFhaFaaFaaRvaFaaahaahaahatNatNaHNatNaahaahaNJaNJaRwaRxaRyaPaawnaxmaRzaFoaRAaRBaGCaFoaFoahyahyaCjaPdaCjaahaahaGDaHXaHYaHYaHYaHYaHYaHYaHYaHYaHYaHYaLHaIaaLIaIcaRCaClbZuaREaRFaRGaQZaQnaRHaRGaRIaQnaRbaRJaRKaRKaRKaRKaRKaRKaRKaRKaRKaRLaGRaRMaRNaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaRPaRPaRPaRPaRPaRPaRPaRPaRQaRfaahaahaahaahaALaALaALaALaALaALaahaahaahaRgaRRaRSaRTahyahyahyahyahyahyahyahyahyaRUaRVaRVaRVaRUahyahyaahaahaahaFhaFhaRWaRXaRXaRYaFhaFhaFhaFhaFhaFhaFhaFhaahaFaaRZaFaaahaahaahatNaSaaSbatNaahaahahyaNJaNJaNJaNJaNJaScaSdawnaFoaFoaFoaFoaFoahyahyahyaCjaPdaCjaCjaahaGDaGDaGEaGFaGFaGFaSeaGFaGFaGFaGFaGHaGDaGIaSfaGKaGLaClaQnaQnaSgaShaSiaSjaSkaSlaSmaSjaRbaSnaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaGRaDtaFJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaROaRPaSoaSpaSqaSraSsaStaSoaSuaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSxaSxaSxaSxaSyaSzaRTahyahyahyahyahyahyahyahyahyaSAaSBaSCaSDaSAahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaFaaFaaFaaahaahaahatNaSEaSFatNaahaahahyahyahyahyahyaSGawnaxmawnaSGahyahyahyahyahyahyahyaCjaSHaSIaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaDoaFqaSJaFsaFtaClaRDaSKaSLaSMaSNaQnaRHaSOaRIaQnaSPaGRaFCaSQaSRaFFaSSaFFaSTaSQaFCaSUaEvaDtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVaSWaSXaSXaSXaSXaSXaSXaSXaSYaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSZaTaaTbaTcaTdaTeaRTahyahyahyaTfaTgaThaTiaTfahyaTjaTkaTlaTkaTjahyahyaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahatNaHNaTmatNaahaahahyahyahyahyahyaTnawnaxmawnaTnahyaToaTpaTqaTraToahyaCjaPdaDnaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaEpaQmaLIaIcaKwaClaQnaQnaQnaQnaQnaQnaQnaQnaQnaQnaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaTtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaTvaTwaTwaSXaTxaTyaTzaTAaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaTBaTCaTDaTEaTFaTGaRTahyahyaTfaTfaQraTIaQraTfaTfaTfaTJaTKaTJaTfaTfahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyaTfaTfaTfaTfaTfaahaahaahaahaTfatNaTLatNaTfaahaahaahahyahyahyavCavCaTMaTNaTMavCaToaToaTOaTPaTQaToaToaCjaTRaCjaCjaahaahaahaahahyahyahyahyahyahyahyahyahyaFpaDpaQVaDraDsaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaTSaTTaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSVaSWaSXaSXaSXaSXaSXaSXaSXaSYaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaSZaTaaTbaTcaTdaTeaRTahyahyahyaTfaTgaThaTiaTfahyaTjaTkaTlaTkaTjahyahyaahaahaahaahaahahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahatNaHNaTmatNaahaahahyahyahyahyahyaTnawnaxmawnaTnahyaToaTpaTqaTraToahyaCjaPdaDnaCjaahaahahyahyahyahyahyahyahyahyahyahyahyaEpbdHaLIaIcaLJaClaQnaQnaQnaQnaQnaQnaQnaQnaQnaQnaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaEvaTtaOoaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaTvaTwaTwaSXaTxaTyaTzaTAaSvaSwaRfaahaahaahaahaahaahaahaahaahaSxaTBaTCaTDaTEaTFaTGaRTahyahyaTfaTfaQraTIaQraTfaTfaTfaTJaTKaTJaTfaTfahyahyaahaahaahaahahyahyahyahyahyahyahyahyahyaTfaTfaTfaTfaTfaahaahaahaahaTfatNaTLatNaTfaahaahaahahyahyahyavCavCaTMaTNaTMavCaToaToaTOaTPaTQaToaToaCjaTRaCjaCjaahaahaahaahahyahyahyahyahyahyahyahyahyaFpaDpaQVaDraQkaClaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaDtaTSaTTaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTuaRPaRPaRPaTUaTUaRPaRPaRPaRPaTVaRfaahaahaahaahaahaTWaTWaTWaTWaSxaTXaTYaTZaSxaRTaUaaRTaUbaUcaTfaUdaTkaTkaTkaUeaTfaUfaTkaUgaTkaUhaTfaUiaUjaTfaTfaTfaTfaTgaThaThaThaThaThaThaThaTiaTfaUkaUlaUmaTfaTfaTfaTfaTfaTfaUnaUoaUpaTfaTfaTfaTfaTfaUqaUraTfaUsaTkaTlaTkaUtaToaUuaUvaUvaUwaUxaToaUyaUzaUAaClaClaClaClaClaClaUBaUCaUCaUCaUCaUCaUCaUDaClaGIaUEaCnaCoaClaClaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaTWaDtaDtaUFaUGaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaRfaRfaRfaRfaUHaUHaRfaRfaRfaRfaRfaRfaUIaUIaUIaUIaUIaUIaUJaUKaULaSxaTcaUMaSxaSxaUNaUOaUPaUNaUNaUQaTkaURaUSaUTaUTaUUaUVaUTaUWaUTaUTaUUaUTaUTaUTaUXaUYaUTaUZaUTaUTaUTaUTaUSaUTaUTaUTaUUaUTaVaaUSaUUaUTaUTaVbaVcaVdaUTaVeaTkaTJaTkaVfaTkaVgaTkaTkaVhaTkaTkaTlaTkaTkaViaVjaUvaUvaVkaVlaVmaVnaVoaVnaVpaVqaVraZQaVsaVtaVnaVnaVuaVvaVnaVnaVwaVxaVyaVnaVnaVzaVAaLIaUAaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaDtaVBaVCaFJaDtaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGazGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaRfaVDaVEaVFaVGaVHaVIaVJaVKaVLaVMaVNaVOaVPaVQaVKaVKaVRaVSaVTaVKaVUaVKaVPaVVaVWaVVaVRaVKaVXaVYaVZaIxaVYaVYaWbaWcaWdaWeaWdaWfaWbaWdaWdaWdaWgaWhaWdaWdaWiaWdaWdaWfaWcaWdaWdaWaaWbaWdaWjaWcaWbaWqaWdaWgaWdaWkaWhaWlaWdaWbaWdaWiaWdaWcaWdaWdaWmaWdaWfaWnaTkaTkaViaWoaWpbhcaWraWsaWtaWuaWvaWuaWwaWuaWuaWuaWuaWxaWyaWuaObaWuaWuaWuaWzaWAaWAaWAaWBaWCaWDaWDaWEaWFaWGaWHaWIaWIaWIaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWGaWJaDtaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9854,77 +9877,77 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZYaZZbaaaZoaahaahaahaahaYPbabbacbadbaebafbagbahaYPahyahybaibajbakbalbamahyahyahyahyahyaahaahaahaZCbanbaobapaZDbaqbarbasaZDbatbaubavaZFaahaZdaZGbaxaZdahyahyahybayaZLbKzaYFaTHbaCbaDbaEbaFbaGbaHbaIbawbazbhAaZJbaMahyahyahybaNaYGaYHaUwbdwbaLbaBbaPbaObaRbaQbaPbaSbaRbaTbaWbaVbcPbaXaZRaZRaahaahaahaahaZmbbbbbcaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdaaaaaabbdaaaaaaaaabbdaaaaaaaaaaaaaaabbdaaaaaaaaabbdaaaaaabbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobbebbfbbgaZoaahaahaahaahaYPbbhbacbbibbjbbkbagbblaYPbbmbbnbbobbpbbqbbrbamahyahyahyaahaahaahaahaahaZCbbsbbtbbubbvbbwbbxbbybbzbbAbbBbbCaZFaahaZdaZdaZHaZdahyahybaybbDbbEbMcbfMbdCbdCbbGbbGbbHbbGbgHccSblCdCpbbLbbEbbMbaMahyahybbNbbObbPbbQbbRbbabaYbbTbbSbbTbbUbbWbbVbbWbcabcIbbXbbYbbZbcJaZRaahaahaahaahaZmaZWbcbaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZobccbcdbceaZoaahaahaahaahaYPbcfbcgbchbchbchbcibchbcjbckbclbclbcmbcnbcobamahyahyaahaahaahaahaahaahaZCbcpbcqbcraZDbcsbctbcuaZDbcvbcwbcxaZFaahaahaZdaZHaZdahyaZIbcybbEbbFbfMdCqbbGbbGbczbcAbcBbcCbcDbbGbbGbgHdCrbbLbbEbcyaZIahyaTobcEbcFbcGbcHbcLbcKbcNbcMbcNbcQbdzbdybdzdCsbdDbcObaZdCtbdEaZRbcRbcRbcRbcRaZmbcSbcTaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbdHbdGbLZbdIbWObNGcccbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaZoaZpbcUaZoaZoaahaahaahaahaYPbcVbcWbcXbcYbcZbdabdbbdcbddbdebdebdfbdgbdhbaiahyahyaahaahaahaahaahaahaZCbdibdjbdkbdlbdlbdmbdlbdlbdnbdobdpaZFaahaahaZdaZHaZdahybdqbaJbbFbfMdCqbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbgHdCrbdsbaKbdqahyaTobdubdvaUwbdwbaLbdFbfkbdGbLZbdIbWObNGbiVbYuaZRccRcsWdCucwuaZRbdJbdKbdLbcRbdMbdNbdOaZmaahaahaZmaZmaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaabbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbdPbdPbdPbdPbdQbdRbdSbdTaahaahaahaahaYPaRtbdVbdWbdXbdYbdXbdZbeabebbecbecaZzbcnbedbeebefbefbefbefbefaahaahaahaZCaZCaZCaZCbdlbegbehbeibdlaZFaZFaZFaZFaahaahaZdaZHaZdahybejbiHbfMdCqbbGbelbbGbembenbbGbbGbbGbeobepbbGbelbbGbgHdCvbiFbejahyaZPbesbetaUwaToaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRbeubevbewbcRbdMbdNbdOaZmaahaZmaZmbexbeybdObdObdObezbeAaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfabfbbeZbfcbfdbfebffbfgbfhbfibfjbcRbfkbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbeBbeCbeDbdPbeEbeFbeGbdTaahaahaahaahaYPaYPbeHbeIbeJbeKbeLaYPaYPbbmbbnbbobeMbcnbeNbeebeObePbeQbeRbefaahaahaahaahaahbdlbdlbeSbeTbeUbeTbeSbdlbdlaahaahaahaahaZdaZHaZdahybcybiHdCwbeqbbGbbGbeVbeWbbGbbGbbGbbGbbGbeXbepbbGbbGbbGdCxbiFbcyahybaNbbObetbeYaToaahaahbeZbeZbfabfbbeZbfcbfdbfebffbfgbfhbfibfjbcRbkhbevbevbflbdMbdNbfmaZmaZmaZmbfnbfobfobfobfobfobfobfobfpaZmaZmaZmaZmaZmaZmaZmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbfqbfrbfsbdPbftbfubfvbdTaahaahaahaahaahaYPaYPbfwbfxbfyaYPaYPahyahyahybfzbfAbcnbfBbeebfCbfDbfEbfFbefbefaahaahaahaahbdlbfGbeTbfHbfIbfJbeTbfKbdlaahaahaahaahaZdaZHaZdahyaZIbfLdCybbJbbGbeVbfNbfObbGdCzdCzdCzbbGbjlbfPbfQbbGbbGdCAbfSaZIahybbNaYGbetaUwaToaahaahbeZbfTbfUbfVbfWbfXbfYbfZbfZbgabgbbgcbgdbgebgfbggbghbcRbdMbgibfobfobfobfobgjbgkbgkbgkbgkbgkbgkbgkbglbfobfobfobfobfobfpaZmaZmaahaahaahaahaahaahbgmbgmbgmbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbgnbfrbgobdPbgpbgqbgrbdTaahaahaahaahahyahyahyahyahyahyahyahyahyahybbobbobgsbcnbgtbeebefbgubgvbgwbgxbefaahaahaahaahbdlbgybeTbeibgzbeibeTbgAbdlaahaahaahaZdaZdaZHaZdahyaZIbgBdCBbfRbbGbgCbbGbbGdCCbgDbgEbgFdCDbbGbbGbgCbbGbgGbgHdCEaZIaZfaTobgIbgJbgKaToaToaahbeZbgLbgMbgNbgObgPbgQbgRbgSbgTbgUbgVbgWbgXbgYbgYbgYbgYbgYbgYbgZbgZbgZbgZbgZbgkbhabhbbmzbhdbhebgkbhfbhfbhfbhfbhfbhfbglbfpaZmaahaahaahaahaahbgmbgmbhgbhhbhibhhbhjbgmbgmaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbdPbhkbhlbhkbdPbhmbfubhnbhobhobhobhoaahaahaahahyahyahyahyahyahyahyahyaZybhpbajbhqbhrbhsbefbhtbgvbgwbhubefaahaahaahaahbdlbhvbeTbhwbhxbhwbeTbhybdlaahaahaahaZdaZGaZHaZdahybdqbaUdCFbbGbbGbbGbbGdCGbgDbhAbhAbhAbgFdCFbbGbbGbbGbhBbbGbhCbhDbhEbhFbhGbetaUwbhHaToaahbeZbhIbhJbgNbhKbhLbhLbhLbhLbhMbhNbgVbhObhPbgYbhQbhRbhSbhTbgYbhUbhVbhVbhWbgZbhXbhYbhYbhZbhZbhYbiabhfbibbicbidbiebhfbdOaZWaZmaahaahaahaahaahbgmbifbigbihbiibijbikbifbgmaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahbilbilbilbilbilbilbilbilbilbimbinbiobipbeEbfubinbhobiqbirbhobhobhoaahaahahyahyahyahyahyahyahybambisaZzbitbiubdebivbiwbixbgwbhubefaahaahaahaahbdlbiybeTbizbiAbiBbeTbiCbdlaahaahaahaZdbiDaZHaZdahybejbdrdCFbbGbbGbbGbbGdCGbiFbhAbdtbhAbiHdCFbbGbbGbbGbiIbiJbiJbiKbiLbiMbiNbiObiPbiQaToaahbeZbfTbiRbiSbeZbiTbiUbiVbiWbiXbfhbgVbhObiYbgYbiZbjabjbbjcbgYbjdbjebjfbjgbgZbjhbjibjjbjkbpybjmbjnbhfbibbjobjpbjqbhfbjrbjsaZmaahaahaahaahaahbgmbjtbjubjvbjwbjvbjubjxbgmaahaahbgmbgmbgmbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahbilbjybjzbjAbjBbjCbjDbjEbilbjFbjGbjHbjIbjJbjKbjLbhobjMbjNbjObjPbhoaahaahaahahyahyahyahyahyahybaibjQbjRbjSbhrbecbjTbjUbjVbgwbhubefaahaahaahaahbjWbjWbjWbjWbjXbjWbjWbjWbjWaahaahaahaZdbjYaZHaZdahybcybaUdCFbbGbbGbbGbbGdCGbjZbhAbhAbhAbkadCFbbGbbGbbGbkbbbGbbGbkcaZibkdaYGbetaUwbkeaToaahbeZbkfbkgbkhbeZbfhbfhbfhbfhbkibfhbkjbkkbklbgYbkmbknbkobkpbgYbkqbkrbksbktbgZbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbhfbdObkGaZmaahaahbgmbgmbgmbgmbkHbkIbkHbkJbkHbkKbkHbgmbgmbgmbgmbkLbkMbkNbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkObkPbkRbkQbkSbkPbkPahyaahaahaahaahaahaahaahaahaahbilbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhbhoblibljblkblkbhobllbllbllbllahyahyahyahyahybbobboblmblnblobeebefblpbjVbgwblqbefaahaahaahaahbjWblrblsbltblublvblwblxbjWaahaahaahaZdaZdaZHaZdahyaZIblydCwbeqbbGblzbbGbbGdCrbjZblAbkabfMbbGbbGblzbbGblBdCHdCIaZIaZfaToaZjblDaZlaToaToaahbeZblEblFblGbeZblHblIblJblKblLblMblNbhOblObgYbgYblPblQblRbgYblSblTblUblVbgZblWbhZbhYblXbhYbhYblYbhfblZbmabhfbmbbhfbmcaZWaZmaahbgmbgmbifbmdbkHbmebmfbmgbmhbmibmfbmgbmjbkJbmkbmlbmibmmbmgbmnbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahbilbilbilbilbilbilbilbilbilbimbinbiobipbeEbfubinbhobiqbirbhobhobhoaahaahahyahyahyahyahyahyahybambisaZzbitbiubdebivbiwbixbgwbhubefaahaahaahaahbdlbiybeTbizbiAbiBbeTbiCbdlaahaahaahaZdbiDaZHaZdahybejbdrdCFbbGbbGbbGbbGdCGbiFbhAbdtbhAbiHdCFbbGbbGbbGbiIbiJbiJbiKbiLbiMbiNbiObiPbiQaToaahbeZbfTbiRbiSbeZbiTbiUblObiWbiXbfhbgVbhObiYbgYbiZbjabjbbjcbgYbSjbjebjfbjgbgZbjhbjibjjbjkbpybjmbjnbhfbibbjobjpbjqbhfbjrbjsaZmaahaahaahaahaahbgmbjtbjubjvbjwbjvbjubjxbgmaahaahbgmbgmbgmbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahbilbjybjzbjAbjBbjCbjDbjEbilbjFbjGbjHbjIbjJbjKbjLbhobjMbjNbjObjPbhoaahaahaahahyahyahyahyahyahybaibjQbjRbjSbhrbecbjTbjUbjVbgwbhubefaahaahaahaahbjWbjWbjWbjWbjXbjWbjWbjWbjWaahaahaahaZdbjYaZHaZdahybcybaUdCFbbGbbGbbGbbGdCGbjZbhAbhAbhAbkadCFbbGbbGbbGbkbbbGbbGbkcaZibkdaYGbetaUwbkeaToaahbeZbkfbkgblRbeZbfhbfhbfhbfhbkibfhbkjbkkbklbgYbkmbknbkobkpbgYbkqbkrbksbktbgZbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkEbkFbhfbdObkGaZmaahaahbgmbgmbgmbgmbkHbkIbkHbkJbkHbkKbkHbgmbgmbgmbgmbkLbkMbkNbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkObkPbkRbkQbkSbkPbkPahyaahaahaahaahaahaahaahaahaahbilbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhbhoblibljblkblkbhobllbllbllbllahyahyahyahyahybbobboblmblnblobeebefblpbjVbgwblqbefaahaahaahaahbjWblrblsbltblublvblwblxbjWaahaahaahaZdaZdaZHaZdahyaZIblydCwbeqbbGblzbbGbbGdCrbjZblAbkabfMbbGbbGblzbbGblBdCHdCIaZIaZfaToaZjblDaZlaToaToaahbeZblEblFblGbeZblHblIblJblKblLblMblNbhOblWbgYbgYblPblQbpabgYblSblTblUblVbgZbrKbhZbhYblXbhYbhYblYbhfblZbmabhfbmbbhfbmcaZWaZmaahbgmbgmbifbmdbkHbmebmfbmgbmhbmibmfbmgbmjbkJbmkbmlbmibmmbmgbmnbgmbgmaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkPbmobmpbmqbmpbmobkRahyahyaahbkPbkPbkPbkPaahaahaahbilbmrbmsbjAbmtbmubmvbmwbilbmxbfubmybdTbrebdTbrebhoblibmAbmBbmCblkbmDbmEbmFbllbmGbmHbmIbllahyahyaZyaZzbcnbhrbeebmJbmKbmLbmMbefbefaahaahaahaahbjWbmNbmObmPbmQbmPbmRbmSbjWaahaahaahaahaZdaZHaZdahyaZIbmTdCJbbJbbGbfPbfQbmUbbGbdCbdCbdCbbGbmUbeVbfNbbGbbGdCKbmVaZIahyaZPaYGaYHaUwaToaahaahbeZbmWbmXbmYbmZbnabnbbncbncbndbnebnfbngbnhbnibgYbnjbnkbnlbgYbnmbnnbnobnpbgZbnqbnrbhYbnsbhYbntbnubhfbnvbnwbhfbnxbhfbnyaZWaZmaahbgmbnzbnAbnBbnCbnDbnEbnDbnFbnDbnGbihbnHbkJbnIbnJbnKbnLbihbnMbnNbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnObnPbnQbnRbnRbnPbnSbnTbkPbkPbkPbnUbnVbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbftbfubnWbdTbnXbnYbnZblkblkboabobbocblkbodboeboebofbogbohboibllahyahybamaZzbcnbojbeebmKbmKbokbolbefaahaahaahaahbjWbjWbombonboobopboqbonborbjWbjWaahaahaahaZdaZHaZdahybdqbiHdCBbfRbbGbbGbfPbfQbbGbbGbbGbbGbbGbembeWbbGbbGbbGdCxbdxbdqahybaNbbObotbouaToaahaahbeZbgLbovbgNbowboxboybozboAboBboCbgVbhOboDboEbgYboFboGboFbgYboHboIboJboKbgZbgkboLboMbdAboLboMboOboOboOboOboOboOboOboOaZWaZmaahbgmboPboQboRbkHboSbmfboTboUboVboWbmmbmgbkHbmibmmboXboYboSboZbpabgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQbmqbpbbpcbpcbmqbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpqbprbprbpsbprbptbpubpvbpwbpxbMKbpzbpzbpzbpAblkblkbpBblkblkbpCbpDbpEbpEbpEbpFbpGbllahyahybamaZzbcnbfBbeebefbefbefbefbefaahaahaahaahbjWbpHbpIbpJbpKbpLbpKbpMbpNbpObjWaahaahaahaZdaZHaZdahybejbiHdCDdCLbbGbelbbGbfPbenbbGbbGbbGbeobeWbbGbelbbGdCHdCMbdxbejahybbNaYGaYHaUwbpPahyaahbeZbpQbpRbgNbpSbpTbpUbpVbpVbpWbpXbpYbpZbqabqabqbbqcbqdbqcbqebqcbqfbqgbqhbqibqjbqkbqhbqlbqmbqnboObqobqpbqqbqrbqsbqtboOaZWaZmaahbgmbqubqvbqwbkJbqxbqybqzbgmbqAbqBbqCbqCbqDbsnbqCbqEbqFbqGboZbqHbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahaahbjWbjWbrwbrxbpKbpKbpKbrybrzbjWbjWaahaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbrKbrLbrMblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscbsdbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahaahaahbjWbsQbrxbsRbsSbsTbsUbsQbjWaahaahaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkbtlbtmboObtnbtobtpbtqbtpbtrboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbyTbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbMKbtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahaahaahbjWbujbukbulbumbukbukbujbjWaahaahaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzbuAbuBbuCbuDbuEbuFbuGbuHbuIbtfbuJbuKbuLbuMbuNbuObuLbuNboObuPbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbCQbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhbvibvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTbvUbsXbvVbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbwxbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbxnbsXbxobxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbxzboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbyDbsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObyPbyQbyRbySbIxbyUbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnObnPbnQbnRbnRbnPbnSbnTbkPbkPbkPbnUbnVbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbftbfubnWbdTbnXbnYbnZblkblkboabobbocblkbodboeboebofbogbohboibllahyahybamaZzbcnbojbeebmKbmKbokbolbefaahaahaahaahbjWbjWbombonboobopboqbonborbjWbjWaahaahaahaZdaZHaZdahybdqbiHdCBbfRbbGbbGbfPbfQbbGbbGbbGbbGbbGbembeWbbGbbGbbGdCxbdxbdqahybaNbbObotbouaToaahaahbeZbgLbovbgNbowboxboybozboAboBboCbgVbhOboDboEbgYboFboGboFbgYboHboIbTzboKbgZbgkboLboMbdAboLboMboOboOboOboOboOboOboOboOaZWaZmaahbgmboPboQboRbkHboSbmfboTboUboVboWbmmbmgbkHbmibmmboXboYboSboZbuPbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkQbmqbpbbpcbpcbmqbpdbpebpfbpgbphbpibpjbpkbplbpmbpnbpobppbpqbprbprbpsbprbptbpubpvbpwbpxbMKbpzbpzbpzbpAblkblkbpBblkblkbpCbpDbpEbpEbpEbpFbpGbllahyahybamaZzbcnbfBbeebefbefbefbefbefaahaahaahaahbjWbpHbpIbpJbpKbpLbpKbpMbpNbpObjWaahaahaahaZdaZHaZdahybejbiHdCDdCLbbGbelbbGbfPbenbbGbbGbbGbeobeWbbGbelbbGdCHdCMbdxbejahybbNaYGaYHaUwbpPahyaahbeZbpQbpRbgNbpSbpTbpUbpVbpVbpWbpXbpYbpZbqabqabqbbqcbqdbqcbqebqcbqfbqgbqhbqibqjbqkbqhbqlbqmbqnboObqoaCqbqqbqrbqsbqtboOaZWaZmaahbgmbqubqvbqwbkJbqxbqybqzbgmbqAbqBbqCbqCbqDbsnbqCbqEbqFbqGboZbqHbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAacOacAacAacAacAacAacAacAacOacAacAacAacAaaaaaaacAacAacAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqIaadahybkQbnPbqJbpcbpcbqKbqLbqMbqNbqObqPbqQbqRbqSbqTbqUbqVbqTbqWbqXbqTbqYbqZbrabrbbrcbrdbgqbinbMNbrfbrgbpzbrhbrebribrjbrkbrlbrmbrnbrobrpbrqbrrbrsbllahyahybambrtbrubrvaZyahyahyahyahyahyahyaahaahaahbjWbjWbrwbrxbpKbpKbpKbrybrzbjWbjWaahaahaahaZdaZHaZdahybcyaTsbrBdCDdCLbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGbbGdCHdCCbrCbdBbcyahyaTobrEaYHbrFbrGahyahybeZbfTblFbrHbeZbrIbrJbvUbrLbrMblMbrNbrObrPbrQbrRbrSbrTbrSbrSbrSbrUbrVbrWbrXbrYbrZbrYbsabrYbrYbsbbscaCrbsebsfbsgbsgboOaZWaZmaahbgmboPbshboRbkHbmibsibsjbskbslbmmbmmbsmbkHbuYbmmbsobspbmiboZbsqbgmaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaaaaadaadaaaaadaadaadaaaaadaadaadaaaacAaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsrahyahybssbmqbstbpcbpcbmqbsubsvbswbsxbsybszbsAbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbkPbsBbfubsCbdTbekbsEbsFbsFbsGbsHbsIbsJbrlbsKbrnbsLbsMbsNbrrbsObsPahyahybamaZzbcnbhrbamahyahyahyahyahyahyaahaahaahaahbjWbsQbrxbsRbsSbsTbsUbsQbjWaahaahaahaahaZdaZHaZdahyaZIbdqbbEbsVdCDdCLbbIbbJbbKbbGbbGbbGbbIbbJbbKdCHdCCbrCbbEbdqaZIahyaZPaYGbetaUwbrGahyahybeZbeZbsWbeZbeZblMblMblMbsXbsXbsXbsXbsYbsZbsXbsXbtabtbbtcbtdbtdbtebtfbtbbtgbthbtibtjbtkbtlbtmboObtnaCsaCuaCtaCuaDwboOaZWaZmaahbgmbtsbttbnBbtubnDbtvbnDbtwbmmbtxbmmbtybkJbyTbijbtzbtAbtBbtCbtDbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaacAaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaabtEbtFbtGaaaacAaadaadaaaaaaaaaaaaaaaaaabtHbtIbtJbtKaaaaaabtLbtMbtNbtLbtLbtObnPbnQbtPbtQbnPbtRbnTbkPbkPbkPbtSbnTbkPaahaahaahaahaahaahaahaahaahaahaahbdTbtTbtUbtVbMKbtWbtXbtYbpzbtZbeEbuabubbucbudbuebufbufbufbugbuhbuiahyahybamaZzbcnbhrbamahyahyahyahyahyaahaahaahaahaahbjWbujbukbulbumbukbukbujbjWaahaahaahaahaZdaZHaZdahyahybbMbaMbbEbsVdCDdCNdCPdCOdCzdCzdCzdCNdCPdCOdCCbrCbbEbaybbDahyahybaNbdubdvbunbrGahyahybuoberbuqburbusbutbuubuvbsXbuwbuxbuybuzbuAbuBbuCbuDbuEbuFbuGbuHbuIbtfbuJbuKbuLbuMbuNbuObuLbuNboObwxbuQbuRbuSbuTbuUboOaZWaZmaahbgmbgmbifbuVbkHboSbuWbmmbmfbmmbmmbtCbuXbkJbCQbwubuZbvabsmbvbbgmbgmaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhbvibvjbvkbkPbmobmpbmqbmpbmobkRahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahbdTbvlbvmbvnbMNbvobvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbvCbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObosbuqbvQboNbvSbvTbxbbsXbvVbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbwhbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLbkObkPbkRbkQbkSbkPbkPaahaahahyahyahyahyahyahyaahaahbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbrAbwRbwSbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbwZbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbxdbxebvSbxfbxgbxhbxibsXbxjbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbxzboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyaahaahahyahyahyahyaahaahaahaahbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbyibyjbykbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahaahaahaahbxaaahaahaahaahaahaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaTobbObynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbyObyPbyQbyRbySbIxbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJbzjbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsbztbtLaahaahaahaahahyahyahyahyahyahyaahaahaahaahaahbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbzTbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahaahbxaaahaahaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbAhaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbAobuCbApbAqbArbAsbAtbAubuCbAvbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmbALbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCybCzbCAbwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbCLbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadbAYaadaaaaadaaaaaaaaabAZbBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahaahaahbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbCebCdbCdbCdbCfbCgbCgbCgbCgbCgbCgbCgbCgbChbCgbCibCjbCkbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCWbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCXbCYbCVbCVbCVbCZbDabDbbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahaahaahbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbDKbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfbEgbEgbEgbEgbEgbEgbEgbEhbEgbEgbEgbEibEjbEjbEjbEjbEjbEjbEjbEkbiDbjYaZdbElaYGbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySbEEbEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadbEMaadaaaaadaaaaaaaaabAZbBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbrDbFqbFrbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvbFwaZdbFxbFybFxaZdbFzbFAbFBbFCaZdaahaahaZdaZdaZGaZHaZGbFDbFEbFFbFGbEgbFHbFIbFJbFJbFKbFLbFMbFObFNbFPbFNbHvbHubEjbFQbEjaZdaZdaTobFRbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySbGqbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxybGybGzbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbHebHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbIcaZmaahaahaahaahaahaahbgmbIdbIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubLzbIybIzbIAbGYahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbKLbKMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkbxbbMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbMHbMIbMJbRXbMLbMMbTzbSjbUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAbNBbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFdBNbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbUXbOabMnbMobOdbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbPkbPlbPmbNpbNpbSzcpCcpubRlcGibGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvbQwbMPbMQbQxbQybQzbMUbMVbQAbQBbOJbQCbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbRfbRgbRhbNpbNpcGQbRgcIgbRlcNkbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgbRFbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbSkbQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaadbtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaaaaaabGBbznbznbznbznbtHbtHbGCbGDbDibGEbGFbGGbGHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbwMbwMbGIbGJbGJbGJbwMbwMbwMbGKbGLbyfbGMbGNbGObGPbGQbFibJWbGSbGTbGUbGVbGWbGXbGYbFnbGZbFnbGYahybeebeebHabcnbecbHbbHcbFubHdbHebHfbHgbFubFubFubFubHhbHibHhbHjbHjbHkbHlbHjbHmaahaahaahaZdaZdaZHbEgbEgbHnbHobHpbEgbHqbHrbHsbHsbHsbHtbHwbHybHxbHxbHzbKBbJbbHAbHBbEjahyahyaToaZjblDbHCaToaToahybxcbHDbHEbCqbHFbHGbHHbCqbHIbHJbHKbHLbHMbHNbHMbHObHPbHPbHQbHPbHPbHRbHSbHTbHUbHVbHWbHXbySbHYbHZbIabGtbGubGvbIbbyWbAJbySbbbbJraZmaahaahaahaahaahaahbgmbIdbIebIfbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaaadaaaaaaaaaaahaahaahaahaahaahaahaahbtHbtHbtHbtHbtHbIgbIhbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbIjbGJbGIbGJbGJbGJbGJbIkbwMbIlbfubImbInbIobIpbIqbIrbFibIsbItbIubIvbIubIwbIubLzbIybIzbIAbGYahyahybIBbecbRQbecbICbHcbIDbIEbIFbIFbIGbIHbIIbIJbFubIKbILbIMbHjbINbIObIPbHjaahaahaahaahaZdaZGaZHbEgbIQbIRbISbITbEgbIUbIVbIWbFJbFJbIXbIYbIZbJabJabJabJabJabJbbJcbJdahyahybJeaYGbRSaUvbpPahyahybuobosbvSbvSbJfbJgbvSbvSbJhbJibJjbJkbxqbJlbJmbJnbthbJobJpbJqbKLbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbySbglbfpaZmaahaahaahaahaahaahbgmbgmbLDbJKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaabtEbGAbtGaaaacAaaaaaaaahaahahyahyahyahyahyahyahyahyaahaahaahbtHbtHbJLbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbJMbGJbJNbJObGJbGJbGJbIkbwMbJPbtUbJQbJRbJSbJTbJUbJVbFibGYbLEbJXbJYbJXbJXbJXbJZbJYbKabKbbKcahyahybKdbecbcnbecbKebHcbKfbKgbKhbKibKjbKhbKhbKkbFubKlbILbKmbHjbKnbKobKpbHjaahaahaahaahaZdbKqaZHbEgbIQbKrbKsbKtbEgbKubKvbKwbFJbKxbKycuybKAbJabJabJabJabJabKBbKCbKDahyahybrGbKEbynbKFbrGahyahybvObsDbKHbKHbKIbKKbMHbKMbKNbKNbKObKPbKQbKRbKNbKSbKTbKUbKVbKSbKWbKWbKWbKWbKWbKXbKYbKZbLabySbySbySbySbySbySbySbySbySbySbLbbLcaZmbLdbLebLebLebLdbLdbLfbLgbLhbLibLfbLdaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadbtEbGAbtGaadacAaaabLjaahbLkbLkbLlbkQbkQbkQbLmbLkbLkahyaahaahaahbtHbLnbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbwMbLobLpbLqbGJbLrbGJbLsbwMbwMbLtbfubImbFibLubLvbLwbLxbLybGYbPnbNsbLBbLCbLCbLAbLAbLBbRjbRibLFahyahybKdbLGbhqbecbKebHcbLHbLIbKhbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbHjaahaahaahaahaZdaZdaZHbEgbEgbLWbEgbEgbEgbLXbLYcAgbMabKxbMbcuBbMdbMebMfbMgbMhbKBbKBbMibKDahyahybvNbMjbgJaUvbvNahyahybMkbMlbMmbKJbOcbMkbMkbMkbMkbOabMqbMrbMsbMtbMsbKSbMubMvbMwbMxbKWbMybMzbMAbMBbMCbMDbMEbMFbMGbOdbMIbMJbRXbMLbMMdFecbabUSbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNabNcbLdaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaabtEbNdbtGaaaaadaadbLjaahbLkbNebNfbNgbNfbNgbNfbNebLkahyahyaahaahbtHbNhbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahbtHbtHbtHbwMbwMbwMbwMbwMbwMbwMbwMbwMbNibNjbfubyfbGMbNkbNlbNmbLxbNnbGYbNobNpbNpbNqbNqbNrbNqbNqbRlbRkbGYahyahybKdbecbDMbDNbKebNtbFubNubKhbNvbNwbNxbKhbNybFubNzbNAbNBbNCbNCbNCbNCbNCbNCbNCbNCaahaahaZdaZHbEgbNDbNEbNFbQAbNHbFJbFJbNIbFJbNJbEgbNKbNLbNMbNNbNObKBbNPbNQbNRbNSahyahyaTobNTbetbNUaToahyahybMkbNVbNWbNXbNYbSkbUXbMnbMobWTbMqbMrbOebOfbOgbKSbOhbOibOjbOkbKWbOlbOmbOnbOobOpbOqbOrbOsbOtbOtbOubOvbOqbOtbOwbOtbOxbOybOzbOAbOBbOCbODbOEbOEbOFbOEbOGbOHbOIbOJbOKbLdaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaahaahaahbOLbOMbONbOObOPbOQbOLbORahyahyaahaahbtHbOSbIibOTbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbOUbOVbOWbOXbOYbOZbzHbPabPbbPcbPdbPebPfbPgbImbInbIobPhbPibLxbPjbGYbPkbPlbPmbNpbNpbSzcpCcpubRlcGibGYahyahybKdbecbcnbecbPobHcbFubPpbKhbPqbPrbPsbKhbPtbFubPubPvbPwbNCbPxbPybPzbPAbNCbPBbNCbNCaahaZdaZHbEgbPCbPDbPEbPEbPFbPEbPEbPGbFJbPHbEgbPIbPJbPKbPLbPMbPNbPIbPJbPKbEjbPObPPaToaZjblDbHCaToaToahybMkbPQbPRbPSbPTbPUbPVbPWbPXbPYbPZbQabQbbQcbQdbKSbQebQfbQgbQhbKWbQibQjbQkbMBbQlbQmbQnbQobQpbQqbQrbQsbQtbQpbQubQvbQwbMPbMQbQxbQybQzbMUbMVbWWbQBbOJbQCbQDbQEbOJcAfbLdaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczaczacAaczaczacOacAaadaadaadaadaaaaaaaaaaadaadaadacOaadaaaaahaahaahbNgbQFbQGbQHbQHbQIbNgahyahyahyaahaahbtHbQJbQKbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbQYbQZbyfbJRbRabRbbRcbRdbRebGYbRfbRgbRhbNpbNpcGQbRgcIgbRlcNkbGYahyahybKdbecbcnbRmbRnbRobRpbRqbRrbRsbRtbRubRvbRwbFubRxbPvbRybNCbRzbRAbRBbRBbRCbRDbREbNCaahaZdaZHbEgbRFbRGbFJbRHbRIbFJbFJbFJbFJbRJbEgbupbTlbTkbRNbRObRPbRObRPbvEbRTbRUbRUbRVbRWbetaUvbvFaToahybMkbRYbRZbSabNWbSbbScbSdbSebSfbSgbShbSibMpbvIbKSbXibQfbSlbSmbKWbKWbKWbKWbKWbSnbSobSpbSpbSpbSpbSpbSqbSrbSqbSqbSqbSqbSqbSsbStbSubSvbSwbSwbSwbLdbLdbSxbSycNtbSxbLdbLdaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbOLbSAbQGbQHbQHbSBbOLbORahyahyaahaahbtHbSCbIibSDbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbtHbSEbSEbSFbSGbSEbSHbSIbSJbSKbSLbSMbSNbSObSPbSLbSLbSLbSLbSLbSLbSQbSRbSQbSSbSSbSQbSTbSQbSUbSQbGYahyahybKdbecbcnbSVbbobbobFubFubFubFubFubFubSWbFubFubSXbSYbSZbNCbTabTbbTcbTdbNCbTebTfbNCaahaZdaZHbEgbFLbvJbEgbEgbThbTibTibTibTibEgbEgbTjbTkbTlbTmbTnbTkbTlbTkbTobTpaUvaUvaUvaUvbTqbTrbTsaToahybMkbGxbTubTvbTubTtbScbTxbTybVhbTAbTBbTCbTDbTEbKSbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbTQbTRbTSbTTbSpbTUbTVbTWbTXbTYbTZbSqbUabUbbSubUcbUdbUebSuaahaahbSxbUfbUgbSxaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbNebNfbNgbUhbNgbNfbNebLkahyahyaahaahbtHbtHbIibtHbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbUibUjbUkbUlbSEbUmbUnbUnbUobUpbUqbUrbUsbUtbUubUvbUwbUxbSLbUybUzbUAbUBbUBbUybUzbUybUCbUDbUEahyahybKdbecbcnaZzbUFahybUGbUHbUIbUJbUKbULbULbUMbUGbUNbUObUPbNCbNCbUQbNCbNCbNCbNCbNCbNCaahaZdaZHbURbvMbUTbUUbUVbUWbUWbUWbUWbUWbYobUYbTkbTlbUZbVabVbbVcbTkbTlbVdbVeaUvaUvbVfbVgbdvaUvbvPaToahybMkbVibVjbVkbVlbVmbVnbVobVpbVqbVrbVsbMpbKNbKNbKSbKSbKSbKSbKSbTJbVtbVubVvbVwbVxbVybVzbVAbVBbVCbSpbVDbVEbVFbVGbVGbVHbSqbVIbVJbSubVKbVLbVMbSuaahaahbSxbVNcAhbSxaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbLlbVPbVQbVRbVSbVTbLmbLkahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfbWgbWhbWibWibWjbWkbSLbWlbWmbWlbWnbUBbWlbWmbWlbUCbUDbUEahyahybKdbWobcnaZzbamahybWpbWqbULbWrbWsbWsbWtbWubUGbWvbWwbUPbWxbWybWzbWAbWBbWCbWDbWEbNCaahaZdbWFbWGbWHbWIbWJclZbWLbWKbWKbWKbWLbWKbWJbTlbTkbWNdBObVabWPbTlbTkbWQbURbPObPPaTobHCblDbHCaToaToahybMkbWRbWSbMkbWRbWSbMkbMkbMkbWTbWUbWVbWWbKNaahaahaahaahaahaahbTJbWXbWYbWZbTNbXabXbbTQbXcbXdbXebSpbXfbXgbXhbXibXjbXkbSqbXlbXmbXnbXobXpbSubSuaahaahbSxbXqbXrbSxbSxaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbSLbXObUBbUBbXPbXQbXRbXRbXRbXSbXTbUEahyahybXUbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkbTwbYmbYnbYnbvRbNCaahaZdbYpbURbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTldBPbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzbYAbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbLkbLlbVPbVQbVRbVSbVTbLmbLkahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebWfbWgbWhbWibWibWjbWkbSLbWlbWmbWlbWnbUBbWlbWmbWlbUCbUDbUEahyahybKdbWobcnaZzbamahybWpbWqbULbWrbWsbWsbWtbWubUGbWvbWwbUPbWxbWybWzbWAbWBbWCbWDbWEbNCaahaZdbWFbWGbWHbWIbWJclZbWLbWKbTwbWKbWLbWKbWJbTlbTkbWNdBObVabWPbTlbTkbWQbURbPObPPaTobHCblDbHCaToaToahybMkbWRbWSbMkbWRbWSbMkbMkbMkbYAbWUbWVbCAbKNaahaahaahaahaahaahbTJbWXbWYbWZbTNbXabXbbTQbXcbXdbXebSpbXfbXgbXhcccbXjbXkbSqbXlbXmbXnbXobXpbSubSuaahaahbSxbXqbXrbSxbSxaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsbXtbXubXvbXsahyahyahyaahaahaahaahbtHbIibtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbXwbXxbXybXzbXAbXBbXCbXDbXEbXFbXGbXHbXIbXJbXKbXLbXMbXNbSLbXObUBbUBbXPbXQbXRbXRbXRbXSbXTbUEahyahybXUbXVbhqbXWbamahybXXbXYbXZbYabYbbYcbYdbYebYfbYgbYhbYibYjbYjbYkcqEbYmbYnbYnbvRbNCaahaZdbYpbURbYqbTkbTlbWJbYrbWJbYrbWJbYrbWJbYsbTkbTlbUZbYtbVbbVcbTkbTlcgwbURahyahyaTobYvbetbYwaToahyahyahyahyahyahyahyahyahyahybKNbKNbYxbYybKNbKNaahaahaahaahaahaahbTJbTJbTJbTJbTJbYzciWbSpbSpbSpbSpbSpbSqbSqbSqbSqbSqbSqbSqbYBbYCbSubSubSubSuaahaahaahbSxbYDbVObYEbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybYFbYGbYHbYIbYFahyahyahyaahaahaahaahbtHbYJbtHaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbYKbYLbYMbYNbYObYPbXMbYQbYRbYSbYTbYUbYRbYQbXMbXMbXMbYVbSLbWlbWmbWlbYWbUBbWlbWmbWlbYXbYYbUEbYZbZabeebecbDMbZbbamahybZcbZdbZebZfbZgbZhbZibZjbUGbWvbZkbZlbZmbZnbZobZpbZqbZrbZsbZtbNCaahaZdbYpbURcaAbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbZvbTjbZwbTlbTkbTjbZybZxahybJeaUvbetaUvbJeahyahyahyahyahyahyahyahyahyahyahybZzbZAbZBbZzaahaahaahaahaahaahaahbZCbZDbZEbZFbZGbTObTPbZHbZIbZJbZKbZLaahaahaahaahaahaahbZMbZNbZObZPbZQbZMaahaahaahaahbSxbZRbZSbZTbSxaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZcbacbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahycbgcbhcbicbjcbgahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEcbkcblcbmcbnbSEbNZcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAbSLcbBcbCbUBbUBbUBbUBcbDbUBcbEcbFcamcancbGcbHbecbcnaZzcbIahybUGcbJcbKcbLcbMbULcbNbUGcbOcbPcbQcbObNCcbRcbScbTcbUcbVcbWcbXbNCaahaZdbYpaZdcDsbTlbTkbYsbTmbTnbTkbTlbTkcbZbTmbTlbTkbTlccabTnccbbTlbTkdBQcaIahyahybrGccdbgJaUvbrGahyahyahyahyahyahyahyahyahyahyahyccBccfccgcaNaahaahaahaahaahaahaahbZCcchcciccjbZGcckcclbZHccmccnccobZLaahaahaahaahaahaahbZMbZNbZMbZMbZMbZMaahaahaahaahcbcccpccqccrccscctccuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahybZUbZVbZWbZUbZUahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbZZcaacabcacbSEcadcaecaecaecafcagcahcaicaecaecaecajcakbSLbUybUybUybUBbUBbUybUybUybYXcalcamcanbecbecbecbcnaZzbamahycaocapbZecaqcarcarcasbULbUGbWvcatcaucavcavcawcaxcaybYnbYncazbNCaahaZdcaBaZdccebTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkbTlbTkcaCcaDcaEcaFcaGcaHcaIahyahybrGaUvbetcaJbrGahyahyahyahyahyahyahyahyahyahyahycaKcaLcaMcaNaahaahaahaahaahaahaahbZCcaOcaPcaQcaRcaScaTcaUcaVcaWcaXbZLaahaahaahaahaahaahbZMcaYcaZdFfcbbbZMaahaahaahaahcbccbdcbecbfcbcaahahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahahycbgcbhcbicbjcbgahyahyaahaahaahaahaahbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEcbkcblcbmcbnbSEbNZcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAbSLcbBcbCbUBbUBbUBbUBcbDbUBcbEcbFcamcancbGcbHbecbcnaZzcbIahybUGcbJcbKcbLcbMbULcbNbUGcbOcbPcbQcbObNCcbRcbScbTcbUcbVcbWcbXbNCaahaZdbYpaZdcDsbTlbTkbYsbTmbTnbTkbTlbTkcbZbTmbTlbTkbTlccabTnccbbTlbTkdBQcaIahyahybrGccdbgJaUvbrGahyahyahyahyahyahyahyahyahyahyahyccBccfccgcaNaahaahaahaahaahaahaahbZCcchcciccjbZGcckcclbZHccmccnccobZLaahaahaahaahaahaahbZMbZNbZMbZMbZMbZMaahaahaahaahcbcccpaEGccrccscctccuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybXsccvccwccxbXsahyahyaahaahaahbZXbZXbZXbZYbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEccycczbSEbSEbSLbSLbSLbSLbSLccAbSLbSLbSLccEccCccDbSLbSLbUEbUEcdPccFccFccGbUEbUEbUEbUEbUEbYZbZabeeccHblnblmbeeahybUGbUGbUGbUGbUGbUGbUGbUGccIccJccKccLbNCbNCccMbNCbNCbNCccNccObNCccPaZdccQaZdbURbwQbTlbUZdBRbVbbVcccTccUbVbbVaccVccWbUZbVadBOccXbTkbTlcbYcaIahyahybrGaUvbetaUvbvNahyahyahyahyahyahyahyahyahyahyahyccBccYccZcaNaahaahaahaahaahaahaahbZCbZCbZCbZCbZCcdacdbbZLbZLbZLbZLbZLaahaahaahaahaahaahbZMbZNbZMaahaahaahaahaahaahaahcbccdccddcdecdfcdgcdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahahyahybYFcdiccwcdjbYFahyahyaahaahaahbZXcdkcdlcdmbZXbZXbZXbZXaahaahaahaahaahaahaahaahaahaahaahaahaahbSEbSEbSEbSEaahaahaahaahbZXcdncdobZXahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZybecbcnaZzcbOcbOcbOcbOcdpcdqcdrcdscdtbFpcdvcdwcdxcdycdzcdAcdBcdCcdDcbOcbOcbOcbOcbOcdEcdFcdGbURbURbTkccUbVbbYtccVcdHbUZbYtdBObVccdIccUcdJcdKcdLcdMcdNcdOcdSahyahybrGcdQbetcdRaTocaNahyahyahyahyahyahyahyahyahyahycelcdTcdUcaNaahaahaahaahaahaahaahaahaahaahaahbZMcdVcdWbZMaahaahaahaahaahaahaahaahaahaahbZMbZNbZMaahaahcbccbccbccbccbccbccdXcdXcbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahbZUbVSbVQbZUcdYccwcdZbZUbVSbVQbZUbZUbZXbZXceacebceccedceecefbZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcegcehceiceiceiceiceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybaicejbjSaZzcekceLcemcbOcenceocepceocencencenccJccKcencencencdBceqcercescbOcetceLceucevcewcexceycezceAceBceCceDceAceEceAceFceCceBceGceBceCceHceIbTkbTlceJbURahyahybvNaUvbetaUvceKcaNcgqceMceMceMceMceMceMceMceMceNcaNceOcePcaNbZMbZMbZMbZMaahaahaahaahaahbZMbZMbZMceQceRbZMaahaahaahaahaahaahaahaahaahbZMbZMbZNbZMaahaahcbcceSceTceTceTceTceUceUceVceTceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbZUceXceYceXceZcfacfbcfccfdcfecffcfgcfhcficfjcfkcflcfmcfncfobZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcfpcfqcfrcfscftcfuceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybbocfvcfwcfxcfycfzcfAcfBcfCcfDcfEcfFcfFcfFcfFcfGcfHcfFcfFcfFcfIcfJcfDcfKcfLcfMcfNcfOcfPcfQcfRcfSbTpcfTbTlbTkbTlbTkcfUbTkbTlbTkbTlcfVbTlbTkcfWbTkbTlbTkcfXbZyahyahyaTocfYbyncfZaVlcgacgbcgbcgbcgccgbcgbcgdcgbcgbcgbcgbcgecgfcggbZMcghcgibZMbZMbZMbZMbZMbZMbZMcgjcgkcglcgmbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcgnbZNbZMaahaahcbccgocgpcgTcgrcgscgtcgucgvcgwcgxceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahbZUceXceYceXceZcfacfbcfccfdcfecffcfgcfhcficfjcfkcflcfmcfncfobZXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcfpcfqcfrcfscftcfuceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybbocfvcfwcfxcfycfzcfAcfBcfCcfDcfEcfFcfFcfFcfFcfGcfHcfFcfFcfFcfIcfJcfDcfKcfLcfMcfNcfOcfPcfQcfRcfSbTpcfTbTlbTkbTlbTkcfUbTkbTlbTkbTlcfVbTlbTkcfWbTkbTlbTkcfXbZyahyahyaTocfYbyncfZaVlcgacgbcgbcgbcgccgbcgbcgdcgbcgbcgbcgbcgecgfcggbZMcghcgibZMbZMbZMbZMbZMbZMbZMcgjcgkcglcgmbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcgnbZNbZMaahaahcbccgocgpcgTcgrcgscgtcgucgvcqbcgxceTceWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUcgycgzcgAccwcgBccwccwcgCccwcgDbZUcgEcgFcgEcgGcgHcgIcgJbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcgKcgLceicgMcgNcgOceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZycgPcgQcgRcgSchucgUcbOcgVcgWcgXcgYcgZchacgWcgWchbcgWchcchdchechfcgWchgcbOcgUchuchhchichjcevcevchkcdMcdNcdMcdNchlchmcdMchncdMcdNchochpcdMchqchrchschtchLchvahyahybJechwchxbbQbbRchychzchzchzchAchzchzchBchzchzchzchzchCchDchEchFchGchHchGchGchGchGchGchGchGchGchGchIchJchJchJchJchJchJchJchJchJchJchJchJchJchKbZMaahaahcbccgocgpciscgucgucgucgucgucgucguchMchNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUchOchPchQchRchSchTchUccwchVchWbZUchXchYchZchYciacibciccidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidciecifcidcidcigcihciicijcikcilceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybamcimbcnbeccbOcbOcbOcbOcinciocipciqcirciwcitciucivciAcixciycizciGciBciCcbOcbOcbOcbOciDcfQciEciFbURbURciXciHciHciHciHciHciHciHciHciHciHciHciHciIbURciXchvahyahyahybrGciJciKciLciKciMciNciNciOciNciNciNciPciNciNciNciOciQciRciSbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMciTciUciVciWbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMaahaahcbccgocgpcjAciYciZcjacjbcjccjdcjeceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahbZUchOchPchQchRchSchTchUccwchVchWbZUchXchYchZchYciacibciccidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidcidciecifcidcidcigcihciicijcikcilceiahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybamcimbcnbeccbOcbOcbOcbOcinciocipciqcirciwcitciucivciAcixciycizciGciBciCcbOcbOcbOcbOciDcfQciEciFbURbURciXciHciHciHciHciHciHciHciHciHciHciHciHciIbURciXchvahyahyahybrGciJciKciLciKciMciNciNciOciNciNciNciPciNciNciNciOciQciRciSbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMciTciUciVcqcbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMaahaahcbccgocgpcjAciYciZcjacjbcjccjdcjeceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgbZUbZUcjhcjicjjcgBcjkcjlcjlcjmbZUbZUcjnchYcjochYcjpcjqcjrcjsbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXbZXcjtcjucjvcjvcjwcjxcjyceiceiceiceiahyahycjzcjzcjzcjzcjzcjzcjzahyahyahyahyahyahyahybaicimbcnbeccjBahyahycbOcbOcbOcjHcjCcjDcjEcjDcjDcjFcjDcjEcjDcjCcjGcbOcbOcbOahyahyckhcjIcjJcjKciFaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahybvNaUvaUvcjLcjMcaNcgqceMceMceMceMceMceMceMceMceNcaNcaNcaNcaNbZMaahaahaahaahaahaahaahaahbZMbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccjNceTceTceTceTceTceTceVceTceTcjfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcjgcjOcjPcjgbVScjQbVQcjRbVScjQbVQbZUchYcjScjTchYcjUchYcjVcjWcjXcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXbZXcjucjYbZXcjZbYlbZXaahahyahyahyahycjzcjzckbckcckdckeckfcjzcjzahyahyahyahyahybbobbockgblnccHbbobboahyahyahyckEahyahyahyahyahyahyahyahyahyahyahyahyckEahyahyahyciFciFckicfQcfRciFciFaahaahaahahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyciFciFckjckjckkciFciFahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcbccbccbccbccbccbccbccbccbccbccbccbcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxckyckzchYckAchYckBckCckDcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahydEOdEOdESdEOdEOdETcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRckQciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahaahaahaahaahaahaahaahcllcllcllcllcllcllcllaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahydEOdEYdEZdFadFbbecclyclzclAclAclBclCclCclCclDclCclEclCclCclFcfRcfRcfRcfRclGclHclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclQclIclIclIclIclIclQclRclIclSclIclTclIclQclIclKclIclUclUclVclWbKGcmpahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahaahaahaahcmjcmjcmjcmjcllcmkcmlcmmcmncmocllaahaahbZXbZXcjubZXaahaahaahahyahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahydEOdEWdEUdEVdEXbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahaahaahaahcmjcnicnjcnkcllcnlcnlcnmcnlcnncllaahaahbZXcnocjubZXaahaahaahaahahyahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahydEOdENdEQdEPdEKdEJdEMdELbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahaahaahaahcmjcogcohcoicllcojcokcolcnlcomcllaahaahbZXconcjubZXaahaahaahaahaahahycowckFckFcopcoqckIckIcorckIckIcoscjzahydEOdEOdERdEOdEOcotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjaahaahaahaahahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcDncDncDncEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcqbcqccqdcpjcpjcpjcpjcpjcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcFecEVcEVcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgcqEckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcJacJacEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvcswcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcJacJacNfcEVcEVcEVcEVcEVcrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwctxctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubcuacuacuacuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcPocJacPvcJacQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcuwcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacuIcuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcrIcqfcqfcqfcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUcvVcvWcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjahyahyahyahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcZMcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVcxWcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyicyjcykcrZcylcymcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyycyzcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgcjgcklckmcknckockpckqckrckscktckuckvckwckxckyckzchYckAchYckBckCckDcjqaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZXcjubZXbZXbZXbZXbZXahyahyckKckFckFckGckHckIckIckIckIckIckIcjzahyahyahyahybbobbodETcimbcnbecbDObboclmckLckMciFclmckLckLckLckLckLckLckLckLckLckLckMciFclmckLckMciFckNckOckPcfRckQciFciFciFciFciFclmckLckLckLckLckLckLckLckLckLckLckRciFclmckLckRciFckScfRcfRckTckUciFciFahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahcjgckVckmcknckWckXckYckZclaclbchVclccldclecleclfclgclhcjUchYclicljclkcjqaahaahaahaahaahaahaahaahaahcllcllcllcllcllcllcllaahaahaahbZXcjubZXaahaahaahaahahyahyclYclncloclpclqclrclscltcluclvclwcjzahyahyahyahyaZycrkbecclyclzclAclAclBclCclCclCclDclCclEclCclCclFcfRcfRcfRcfRclGclHclIclJclIclIclIclKclLclMclNclIclIclKclIclOclIclPclIclQclIclIclIclIclIclQclRclIclSclIclTclIclQclIclKclIclUclUclVclWbKGcmpahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMciVbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcsTcknckncmacmbcmcbZUbZUcmdbZUbZUchYcmeclecmfcmgcmhcmichYcjqcjqcjqcjqaahaahaahaahaahcmjcmjcmjcmjcllcmkcmlcmmcmncmocllaahaahbZXbZXcjubZXdEOdEOdEOdEOahyahycmRcmqcmrcmscmtcmtcmucmvcmwcmtcmxcjzahyahyahyahybambisbeccimcsUbecbeccmzcfRcfRcfRcfRcmAcmBcmBcmBcmCcmDcmDcmDcmEcmDcmFcmDcmGcmDcmDcsVcmHcmIcmJcmKcmDcmDcmHcsZcmDcmDcmLcmDcmDcmDcmMcmDcmDcmDcmDcmGcmDcmDcmDcmEcmDcmDcmDcmHcmNcmBctacmOcmPcmQcncahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMciVbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahcjgcmScmTcmUcmVcmWcjgcmXbObcmZcnacnbcnScndcnecnfcngcnhcmichYaahaahaahaahaahaahaahaahaahcmjcnicnjcnkcllcnlcnlcnmcnlcnncllaahaahbZXcnocjubZXaEJcrrcrqdEOdEOahyclYcnpcnqcnrcnsckIcntcnucnvckIcnwcjzahyahyahyahybaibjQbeccimbDMbDNbeccmzcfRcnxcfRcnycnzcnAcnBcfRcnCcnxcfRcfRcnDcnxcnEcfRcnFcfRcnxcfRcjKcnGchicnHcevcevcnIcevcnJcevcnKcnMcevcnLcxCcevcnJcevcevcevcevcnJcevcnNcevcevcevcnIcnOcnQcnPcnRcfRbKGcodahyaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcnTciVcgnbZMbZMbZMbZMbZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjaahaahcjgcnUckXcnVcnWcnXcnYcnZcoacobcoacoccoocoecleclecofchYbRKchYaahaahaahaahaahaahaahaahaahcmjcogcohcoicllcojcokcolcnlcomcllaahaahbZXconcjubZXcvVcxWcvWcyjdEOahycowckFckFcopcoqckIckIcorckIckIcoscjzahyahyahyahybbobbocotcimbcnbeccoAbboclmckLckMciFclmckMciFcovcoGcoxcoycozcoScoxcoBcovciFclmckLckMciFcoCckicoDcmBcoEciFclmckLckMciFciFclmckLckMczAclmckLckMciFciFdCQckMciFclmckLckMciFcoFckickicfRcoXciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahbZMbZMcoHcoIcoJcoJcoJcoJcoJcoJcoJcoJcoKcoLcoLcoLcoMcoNcoObZMbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbLjaahaahcjgcoPckncoQcmacoRcpqcoTcoUcoVcoacoWcpPcoYcoZcpacpbchYcpcchYaahaahaahaahaahaahaahaahaahcmjcpdcohcpecllcpfcpgcphcpicokcllaahaahcpjbZXcpkbZXcpjcyzcymcFgdEOahyahyahyahycjzcplcpmcpncpocppcpTcprcjzahyahyahyahyahybbobbocpscptcmzbbobboahyahyahyahyahyahycovcNHcpvcpwcpxcpycpzcpAcpBcNIcovahyahyahyciFciFcpDcpEckjciFciFahyahyahyczZcDncDncDncEvcEvcEvcEVcEVcEWczZahyahyahyahyahyahyciFciFcjIcjIcjKciFciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcpFcpGcpHbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMcpIcoMcpJbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahcjgcpKcpLcpMcpNcpOcqecpQcoacpRcoacpSchYcqzcpUcqzcpVcpWchZchYcpXcpXcpXcpXcpXcpXcpXcpXcpXcmjcmjcpYcmjcllcllcpZcqacllcpZcllcpXcpjcpjcFucFrcqdcpjdEOcFFcLvdEOcrIcqfcqfcqgcjzcjzcjzcjzcqhcjzcjzcjzcjzcrIcqfcqfcqfcqgcpjcqicqjcqkcqlcqmcpjcpjahyahyahyahyahycovcqncqocqpcqqcqrcqscrJcpBcqucovahyahyahyahycqvcqwcqxcqycqvahyahyahyahyczZcFecEVcEVcEvcEvcEVcEVcEVcIFczZahyahyahyahyahyahyahycrNckicqAcqBciFaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahbZMcqCcgnbZMbZMaahaahaahaahaahaahaahaahaahaahaahbZMbZMcgncqDbZMaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahcjgctxckncqFcqGcqHcqIcqJcqJcqKcqLcqMcqNcqOcqOcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqYcqYcqOcqZcracqYcrbcrccqYcqYcqOcrdcrecrfcrgcrhcricrjcMIcMjcrmcrncrocOZcrudBNcrscrtcrucrucrvcrucricrwcrxcrycrzcrAcrBcrAcrCcrAcrDcrAcrzcrAcrEcrFcrGcrucrHcrRahyahyahyahyahycrWcqtcrKcrLcrLcrMcrLcrLcpBcqtcrWahyahyahyahycsKcrOcrPcqycsKahyahyahyahycIHcJacJacEVcEVcEVcEVcEVcEVcJKcrQcrQcrQcsLcrScrTcrUcrQcrQctccsNctccrQcrQcrQcrQaahaahaahaahaahaahaahcrXcrXcrXcrXcrXbZMcrYcrZcrZcrZcrZcrZaahaahaahaahaahaahaahcsacsacsacsacsacsbbZMcsccsccsccsccscaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahcjgcsdcknckncsecsfcsgcshcshcsicshcsjcskcslcsmcsncsncsncsocspcsqcsrcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsqcsscsqcsqcsqcstcsqcsqcsucsvcswcsxcsycswcswcsvdBPcswcswcszcsAcsBcrucrucrucricrucsCcswcsDcswcsEcswcswcswcsFcswcsvcswcsGcsHcsIcrucsJcsRahyahyahyahyahyctmcqtcrKcrLcsMcsMcsMcrLcpBcqtctmahyahyahyctucsOcrOcsPcsQcumcsSahyahyahycMYcJacJacNfcEVcEVcEVcEVcEVcrQcrQcwtctdcsXcwtcwvcsXcsYcwwctbcsYctbctecxOcwxcrQcrQaahaahcrXcrXcrXcrXcrXctfctgcthcrXctictjcrZctkctlcurcrZcrZcrZcrZcrZcsacsacsacsactnctoctpcsactqctrcscctscttcuTcsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaabLjbLjcjgctvctwcALctycmacjgbRMctActBctCctDctEctFctGctHcrfcrfcrfctIctJctKcrfctLctMctNcrfctFctOcrfcrfctPctQctRctSctTctQctQctUctVctWcrocrpctXctYctZcuacubdCbcuadCfcuacuccudcuacuacuacubcuecufcuacubcuacugcuacuhcuicuacuacubcuacujcrucukcruculcuYahyahyahyahyahyctmcuncuocrLcsMcupcsMcrLcuqcunctmahyahyahycvacqycrOcrPcqycqycvaahyahyahycMYcPocJacPvcJacQdcEVcEVcEVcrQcxScsYcwrcwscwscwscwscwscwsczmczlczoczncPbcPbcBjcrQaahaahcrXcuucuvcuucrXcuwcuxcuKcrXcuzcuAcrZcuNcuCcuDcrZcuEcuFcuEcrZcuGcuHcuGcsacuIcuJcvzcsacuLcuMcsccwEcuOcuPcsccuQcuRcuQcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadcuScuScvgcuUcuScuVcuWcuScuScuScuXcvocuZcuXcvrcvbcuXcvccvdcvecvfcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpXcpjcvNcvhcrFcvicvjcpjcpjcpjcpjcrIcqfcqfcqfcqfcqgcpjbRRcvlcqdcpjcrIcqfcqgcpjcrIcqfcqgcpjcvmcrucrucrGcvncpjcpjahyahyahyahyahycwjcvpcuocrLcrLcrLcrLcrLcuqcvqcwjahyahyahycqvcwqcrOcrPcqycvscqvahyahyahycRUcWQcJacJacJacJacEVcEVcWRcrQcBkcsYcsYcsYcvucvucvucvucvuctbcDpcwzcsYcsYcsYcducrQaahaahcrXcvwcvxcvwcrXcrXcvycrXcrXcwFcwGcrZcrZcvBcrZcrZcvCcvDcvCcrZcvEcvFcvEcsacsacvGcsacsacvHcvIcsccsccvJcsccsccvKcvLcvKcscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxfcvOcvPcvQcvRcvScvTcvUdEKdEJcvXcvYcvZcwacwbcwccuXcpXcpXcpXcpXcpXaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahcpjcwdcwecwfcwgcwdcpjdELdELdELahyahyahyahyahyahycpjcwhcwicwhcpjahyahyahyahyahyahyahycxAcqicqicqicwkcqicxAahyahyahyahyahyahycovcuncwlcwmcwncwocuncuncuqcwpcovahyahyahycsKcqycrOcrPcqycqycsKahyahyahyczZcZMcJacJadcEdcLcDncEVcEVcrQcvucvucsYcsYcBicDqdBUcxPbdUctbcxRcsYcFdcFdcFdcFdcrQaahaahcrXcwBcwCcwDcwDcwDcwJcwHcwLcwKcwUcwTcwXcwVcwMcwNcwMcwOcwPcrZcwQcwRcwScwScwScyacyecybcyqcyfcwYcwZcxacxbcxccxbcxdcxecscaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacxNcxgcxgcxgcxgcvScvTcxhcxhcxicuXcxjcxkcxlcxmcxncuXcxocxpcxqcxraahaahaahaahaahcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxrcxscxtcxucxvcxwcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcwhcxxcxycwhahyahyahyahyahyahyahyahycxzcyBcxBczkcxDcyBcxzahyahyahyahyahyahycovcovcxEcxFcxGcxHcxIcxJcxKcovcovahyahyahycumcsScxLcxMcqyctucsOahyahyahyczZczZdcYdcEdcEdcEcJacDnddacrQcEFcxPcsYcsYcxQcxQcxQcxQcxQctbcxRcsYcFdcFdcFdcFbcrQaahaahcrXcxVdEMcxXcxYcxZcytcyrcrXcyccydcrZcAkcyucygcyhcyidENcykcrZcyldEPcyncyocypcAqcAucsacyscAxcBocBncyvcywcyxcyydEQcyAcscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczTcyCcyDcyEcyFcxgcxgcvScyGcyHcyIcyJcyKcyLcyMcyNcyOcyPcuXcxqcxqcxqcxrcxrcxrcxrcxrcxrcxrcyQcyRcyScyScyScyScyScyScyScyScyScyScyScyTcyScyUcyVcyWcyXcyYcyVcyZczaczbczaczaczaczaczaczaczaczaczaczccwhahyahyahyahyahycxzcxzcxzcxzczdczebTgczgczhcxzcxzcxzcxzahyahyahyahycovcovcovcziczjczicovcovcovahyahyahyahyahycvacrOcrPcqycvaahyahyahyahyahyczZczZczZczZddeczZczZczZcrQcxQcxQcDocwycwycwycFccHvcHrcJzcHxcsYcFdcFdcFdcFdcrQaahaahcrXcrXcrXcrXcrXcrXcBqcrXcrXczpcuAcrZcrZcBrcrZcrZcrZcrZcrZcrZcsacsacsacsacsacBucsacsacuLcBvcsccsccsccsccsccsccsccsccscaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMczrczsczrczscztczuczvczwczxczyczzcxgcArczBczCczDczEcuXcuXczFczGczGczGczGczGczGczGczGczGczGczHcxqcxrcxrcxrcxrcxrczIczIczJcxrcOHczKcxqcxrczLczMczNczOczPcwhczQczQddgddmddkczQczQcwhcwhcwhcwhczRcwhahyahyahyahyahycxzczSczScABczUczVczWczXczYcAIcAacAacxzaahahyahyahyahyaahaahczicAbcziaahaahaahahyahyahyahyahycqvcAccAdcAecqvahyahyahyahyahyahyahyahycBgcQzcBgahyaahcrQcJNcxTcKMcxTcxTcFacFacKNcxTcxTcMecDrcFdcFdcFdcmYcrQaahaahaahaahaahaahcAicAjcBxcAlcAicAmcAncAocApcCccBbcAoaahaahaahaahaahaahaahcAscAtcClcAvcAscAwcCmcAycAzcAAcBAcAyaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcALbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacBQcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUcHwcGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcCDcCEcCFcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcQzcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHcOZcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcCDcCEcCFcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQeddrcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfcFgcFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqcFrcFscAocFtcFucFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEcFFcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcAEcAFcxgcxgcvScvTcAGczzcAHcBTcAJcAKcMdbWMcuXcxqcANcxqcxqcxrcxrcxrcxrcxrcxrcxrcxrcAOcxrcxraahaahaahcxrcAPcAPcAPcxrcxrcxrcxrcwdcwdcAQcARcAScwdcwdcwhcwhcwhcwhcwhczQcwhcwhaahaahcwhczRcwhaahahyahyahyahycxzcATczecAUcAVczeczeczgcAWcAXczecAYcxzaahahyahyaahaahaahaahczicAZcziaahaahaahcBacCScBccBacqvcqvcBdcBecBfcqvcBgcBgcBgcBgcBgahyahyahycBgcQzcBgaahaahcrQcvucvucMXcGzcGAcGAcGAcNJcGAcGzcNMcsYcNVcNVcNWcNXcrQaahaahcAicAicAicAicAicBmcDycDxcAiczpcBpcAocDDcDCcBscAocAocAocAocAocAscAscAscAscBtcDMcDNcAscBwcBvcAycFkcBycBzcAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcEBcyCcBBcBCcxgcxgcxgcBDcvTcAGczzcBEcuXcvrcvbcuXcuXcuXcxrcANcBFcxrcxraahaahaahaahaahaahcxrcBGcBHcxraahaahaahcBIcBIcBJcBIcBIaahaahaahaahcwdcBKcxucxvcwdaahaahaahaahaahcwhczQcwhaahaahaahcwhczRcwhaahaahaahahyahycxzcxzcxzcxzcBLcBMcBNcBOcbocxzcxzcxzcxzaahaahaahaahaahaahaahczicAbczicziczicBacBacBQcBRcBacBScEIcrOcrPcqycBUcBgcBVcBWcBXcBgcBgahyahycBgcQzcBgaTWaahcrQcNRcxPcMXcGzcHscHtcHucNUdFccGzcNMcsYcPccPccPccOVcrQaahaahcAicBZcCacCbcAicAicFlcAicAicCdcvAcAocFmcCecAocAocCfcCgcChcAocCicCjcCkcAscAscFncAscAscvHcFycAycAycCncAycAycCocCpcCqcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcACcADcACcCrcyFcxgcxgcvScvTcAGczzcCscCtcCucCvcCwcCxcCycCzcCAcxrcxraahaahaahaahaahaahaahcxrcCBcCCcxrcxraahaahcBIcCDcCEcCFcBIcCGcCGcCGaahcwdcCHcCIcCJcCKcCKcCKcCKcCKcCKcCKcCLcCKcCKaahahycwhczRcwhaahaahaahaahahycxzcCMcCNcABcCOczVcCPcCQcCRcEKcCTcCUcxzaahaahaahaahaahaahaahczicCVcCWcCXcCXcCYcCZcDacDbcDccDdcDecDfcDgcDhcDicBgcDjcDkcDlcDmcBgcBgcBgcBgcQzcQzcBgcBgcrQclXcxQcMXcGzcHscHtcIGcOYcHwcGzcNMcsYcQHcQHdERcPacrQaahaahcAicDtcDucDvcDwcDvcFAcFzcDzcDAcwIcDBcHFcHAcDEcDFcDEcDGcDHcAocDIcDJcDKcDLcDKcHGcHKcDOcwWcHNcDPcDQcDRcDScDTcDScDUcDVcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcDWcDXcDWcDYcDZcEacEbcEccEdcEeczzcEfcCtcEgcEhcEicEjcEkcCtcxrcxraahaahaahaahaahaahaahaahcxrcElcEmcxqcxraahaahcBIcCDcCEcCFcBIcEncEocCGcCGcwdcEpcEqcErcCKcEscEtcEuddpcEwcEwcEwcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcATczecEycAVczecEzczgcEAcFHczeczecxzaahaahaahaahaahaahaahczicECcEDcEEcEDcBackacEGcEHcFXcEJcGfcELcEMcENcEOcEPcEQcERcERcEScETcEUcEUcQeddrcEXcQfcEYcEZcxTcxTcQgcQhcHscJLcJMcQFcHwcGzcNMcQIcQGcQGcQGcQGcQGaahaahcAicFfdEScFhcFicFjcIKcIJcAicyccydcAocIPcILcFocFpcFqdEUcFscAocFtdEVcFvcFwcFxcIQcIRcAscyscAxcKacJRcFBcFCcFDcFEdEWcFGcAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMcGjcFIcFJcFKcDZcxgcxgcvScFLcyHcFMcFNcFOcFPcFQcFRcFScFTcCtaahaahaahaahaahaahaahaahaahaahcxrcElcFUcxqcxraahaahcBIcFVcCEcCFcBIcFWcGpcFYcFZcwdcGacGbcGccCKcGdcGecEwcEwcEwcEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcxzcxzcxzcGqczecGgcGhcOIcGBczecGkcxzaahaahaahaahaahaahaahczicECcGlcziczicBacGmcGncGocGScEJcHccGrcrPcqycGscBgcGtcGucGvcGwcBgcBgcBgcGxcXdcERcERddqcrQcrQcrQcrQcrQcKJcKKcKLdhfcHwcGzcNMcQGcQGdkBdkBdlCcQGaahaahcAicAicAicAicAicAicKbcAicAiczpcuAcAocAocFmcAocAocAocAocAocAocAscAscAscAscAscKScAscAscuLcBvcAycAycAycAycAycAycAycAycAyaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacHHcGCcGDcGEcGEcGFcGGcGGcGGcGGcGHcGIcGIcGJcGKcGLcCtbkQbkQahyahyahybkQbkQaahaahaahcxrcGMcGNcxrcxraahaahcBIcGOcGPcOJcBIcGRcHRcCGcCGcwdcGTcCIcGUcGVcGWcGWcGWcGXcGXcGXcGXcGYcCKahyahycwhczRcwhaahaahaahaahaahcxzcGZczecABcHaczVcCPcCQcHbcHSczecGkcxzaahaahaahaahaahaahaahczicAbczicziaahcBacHdcHedmEcHgcHfcHccHicHjcHkcHlcHmcHncHocHmcHpcHmaahcBgcBgcHqcGxcGxdnjcOUdBSdBTcMfcrQcrQcMgcMhdhfcHwcGzdBVdDhdDgdDjdDidDkcQGaahaahaahaahaahaahcHycHzcKTcHBcHycHCcHDcHEcKXcKWcIzcHEaahaahaahaahaahaahaahcHIcHJcLgcHLcHIcHMcLhcHOcHPcHQcJtcHOaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcvMcvMcvMcvMcvMcvMcvMaadaaacJwcGCcDXcHTcDXcHUcHVcxgcxgcHWcCtcHXcGKcHYcHZcIacCtbkQcIbcIccIccIccIcbkQaahaahaahcxrcIdcIecxraahaahaahcBIcCDcIfcOScBIcIhcIicIjcIkcwdcIlcImcIncCKcGecIocGecEwcGecEwcEwcEwcCKahyahycwhczRcwhaahaahaahaahaahcxzcIpczecIqcAVcIrcIscItcAWcIuczecGkcxzaahaahaahaahaahaahaahczicAbcziaahaahcBacIvcIwcHhcFXcIycKDcrOcrPcIAcDicHmcIBcICcIDcIEcHmaahaahcBgcHqcBgcOTdDlcNKcNTcNLcNNctzcNOcNPcNQdDmcNScNTdDncQGdDodDqdDpdDrcQGaahaahcHycHycHycHycHycIIcMpcMocHyczpcuAcHEcMqcIMcINcHEcHEcHEcHEcHEcHIcHIcHIcHIcIOcMrcMscHIcuLcBvcHOcMtcIScITcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcCDcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQcMdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcvMcvMcvMcvMcvMaadaadaadcuScuScuScuScuScuScuScIUcIVcIWcIXcIYcIZddOcJbcCtcCtahycIccJccJdcJccIcahyahyaahcJecJecJfcJgcJeaahaahaahcBIcCDcJhcJicJjcJkcJlcJmcJmcwdcJncJocJpcCKcJqcGecEwcEwcEwcEwcJrcExcCKahyahycwhczRcwhaahaahaahaahaahcxzcJsczecMLcJuczVcJvczXczYcNgczeczecxzaahaahaahaahaahaahaahczicAbcziaahaahcBacJxcJycIxcGScJAcJBcJCcJDcJEcJFcHmcJGcJHcJIcJJcHmaahaahcBgcGycBgcBgcBgcrQdFdcsYcOWcOXcrQcHtdDscOYdDtcsYdDucQGdDvcQGdDwcQGcQGaahaahcHycJOcJPcJQcHycHycMucHycHycJScvAcHEcMvcJTcHEcHEcJUcJVcJWcHEcJXcJYcJZcHIcHIcMwcHIcHIcvHcMxcHOcHOcKccHOcHOcKdcKecKfcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaadbkQaahaahaahaahaahcuScuScuScuScCtcCtcCtcCtcCtcCtaahahycIccJccJccJccIcahyahyaahcJecKgcKhcKicJecKjcKjcKjcBIcBIcKkcKlcBIcKmcKncKocKpcKqcKrcKscKtcKqcKucGedeccKvcEwcKwcKwcKwcCKahyahycwhczRcwhaahaahaahaahaahcxzcKxczecHScKyczecKzczgcKAcHScKBcKBcxzaahaahaahaahaahaahaahczicAbcziaahcKCcKCcNYcKEcKFcKCcKCcKCcKGcKHcKIcKCcKCcKCcKCcKCcKCcKCcKCaahcBgcHqcBgaahaahcrQcrQcQAcQBcQCcrQcQDcQEdDydDxcsYcsYcQGdDzcQGdDAcQGaahaahaahcHycKOcKPcKQcKRcKQcMzcMycKUcDAcwIcKVcMBcMAcKYcKZcKYcLacLbcHEcLccLdcLecLfcLecMCcMDcLicwWcHNcLjcLkcLlcLmcLncLmcLocLpcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLucLvcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMicMjcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdCbdCedCddCgdCfdCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHcMIcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaahyaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccLqcLrcLscIcahyaahaahcJecLtcLudEXcJecLwcLxcLycLzcBIcLAcBIcCGcCGcLBcCGcLCcKqcLDcLEcLFcKqcLGcLGcLGcLGcLGcLGcLGcLGahyahyahycwhczRcwhcziaahaahaahaahcxzcxzcxzcxzcLHcLIcLJcLKcLLcxzcxzcxzcxzaahaahaahaahaahaahcziczicAbczicKCcKCcLMcLNcLOcLPcLQcLRcLScLTcLUcLVcLWcLXcLYcLZcMacMbcMccKCcKCcBgcHqcBgahyaahaahcrQcrQcrQcrQcrQcrQcrQcrQcrQdDCdDBcQGcQGcQGcQGcQGaahaahaahcHycMidEYcMkcMlcMmcMndBWcHycyccydcHEdBYdBXdCadBZdCcdEZdCedCddCgdFadCidChdCkdCjdClcHIcysdCmdCodCncMEcMFcMGcMHdFbcMJcHOaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQcIccMKcNZcMMcIcbkQcMNcMNcMNcMNcMPcMOcKjcMQcMRcMScMTcMUcMVcMWdDDcoucMZcNacMUcNbcNccNdcNecrVcOpcNhcNicNjcQncLGcNlcLGcLGahyahycwhcNmcNncziczicziczicziczicNocNpcxzcNqcxzcNrcxzcNqcxzcEDcEDcziczicziczicziczicziczicUqcXxcUucKCcNucLPcLPcNvcNwcNwcNxcNycNzcNAcNBcNCcNDcNEcNEcNEcNFcLPcNGcKCcZgdDEcBgahyahyaahaahaahaahaahaahaahaahcWudDFdbMdbMdDGcWuaahaahaahaahaahaahcHycHycHycHycHycHycHycHycHyczpcuAcHEcHEcHEcHEcHEcHEcHEcHEcHEcHIcHIcHIcHIcHIcHIcHIcHIcuLczqcHOcHOcHOcHOcHOcHOcHOcHOcHOaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOudDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhcPicPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAcPBcPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahybkQbkQcOsahycOMbkQbkQcMNcOacObcOccOdcOecOfcOgcOhcOicMTcOjcOkcOlcOlcOmcOncOocPFcOqcNccNdcNecOrcPPcOtcOtcOudDHcOvcOtcOwcLGahyahycwhcOxcOycOzcOAcOBcOCcOCcOCcOCcOAcOAcOAcODcOEcOFcOAcOCcOCcOGcOCcOCcOCcOCcOCcOCcOCcOCdlDdBIdBHcKCcOKcLPcLPcOLcLPcLPcPYcONcOOcOPcOQcONcPYcLPcLPcLPcORcLPcLPcKCdBJcHqcBgahyahyahyaahaahaahaahaahaahaahcWudDIdbMdbMdDJcWuaahaahaahaahaahaahcPdcPecPfcPgcPhcPicPjcPkcPdcPlcPmcPncuscPpcPpcPqcPpcutcPrcPscPpcPtcPpcPucPpcPpcvkcPncPwcPlcPxcPycPzcPAaEycPCcPDcPEcPxaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahyahycQscPGcPGcPHcPGcPIcPJcPKcMNcPLcPMcPMcPNcPOcRfcPQcPRcPScMTcPTcPUcOocPVcPWcOocPXcRucPZcNccQacQbcQccxUdDKdDMdDLdDNcQicQjcQkcLGahyahycwhcQlczQczicziczicziczicziczicziczicEDcEDcEEcNscEDczicziczicziczicziczicziczicziczicQmcEDdBKcKCcQocQocLPcQpcQqcQrcRJcQtcOOcQucQvcQwcRJcQxcQocLPcQycQqcQocKCdCRcHqcBgahyahyahyahyaahaahaahaahaahaahcWucWudDPdDOcWucWuaahaahaahaahaahaahcPdcQJcQKcQKcQLcQKcQKcQMcQNcQOcQPcQQcQRcQRcQRcQScQRcQTcQUcQVcQWcQXcQRcQYcQRcQRcQRcQQcQZcRacRbcRccRccRccRdcRccRccRecPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbLjbLjaahaahaahaahaahaahaahaahaahaahaahaahaahaahahyahycSAcRgcRhcRicRjcRkcRlcRmcRncRocRpcRqcRrcRscRtcSLcRvcRwcRxcMTcRycPUcRzcRAcRBcRCcOlcRDcREcRFcRGcRHcRIcTadDQcRKcRLcRMcRNcROcRPcLGahyahycwhcRQcwhcziahyahyahyahyahyahyahycziczicziczicziczicziaahaahaahaahaahaahaahaahaahcziczicRRdCScKCcRTcRWcRVcLPcRWcRXcRJcRYcOOcOPcOQcRZcRJcRTcRWcLPcRVcRWcSacKCdCTcSccBgahyahyahyahyahyaahaahaahaahaahahydDRdbMdDScWuaahaahaahaahaahaahaahcPdcSdcSecSfcSgcShcSicSjcSjcSkcSlcSmcSlcSlcSlcSncSlcSlcSlcSocSpcSqcSqcSrcSqcSqcSqcSscStcSkcSucSucSvcSwcSxcSycSycSzcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahbLjbLjaahaahaahaahaahaahaahaahaahbkQbkQahyahyahybkQbkQcTZcSBcSCcPMcSDcPMcSEcSFcSGcSHcPMcPMcSIcSJcSKcUlcSMcSNcSOcMTcSPcSQcSRcSScSTcSUcSVcSWcSXcSYcSZcNecRIcUscTbcOtcTccTdcTecTfcTgcLGahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahaahaahaahaahaahaahaahaahaahaahczicThcRScKCcTicTjcTkcLPcTlcTjcRJcTmcTncTocOQcTmcRJcTjcTjcTpcLPcTlcTqcKCcSbcTrcBgahyahyahyahyahyahyahyahyahyahyahydDTdbMdDUcWuaahaahaahaahaahaahaahcPdcPdcTscTtcTucTvcTwcTxcPdcPncPncPncTycTzcTzcTAcTBcTCcTDcTEcTFcTGdCUcTHcTzcTzcTIcPncPncPncPxcTJcTKcTLcTMcTNcTOcPxcPxaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9932,7 +9955,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccUEcUEcUFcUGcVucVgcUJcUKcULcUMcPMcUMcUNcUOcUPcUQcURcUScUTcUUcUVcRqcUWcUXcVQcUZcOocOocOocOocOocVacRucVbcUhcVccNecVdcVecVfcWicVhcVicVjcVkcVlcVmahyahycwhcRQcwhahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaahaahaahahyahyahyahyahyahyczicVncEDcKCcLPcLPcVocNEcNEcNEcNDcNCcVpcVqcVrcNycNxcNwcNwcVscLPcLPcLPcKCcGxcVtcBgahyahyahyahyahyahyahyahyahyahyahydDRdbMdbScWuaahaahaahaahaahaahaahaahahyahyahyahyahyahyahyaahaahaahaahahyahyahyahyahycWvcVvcVwcVxcPnaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIccVycVzcVAcNZahycTZcVBcVCcVDcVEcVFcUMcVGcVHcVIcVJcVKcVKcVLcVMcVNcPMcVOcVPcWBcVRcVScVScVTcOocVUcVVcMTcVWcVXcVYcNecVZcWacWbcWicWccWdcWecWfcWgcVmcwhcwhcwhcRQcwhcWhcWhcWOcWjcWkcWhcWhcWOcWjcWkcWhcWhahyahyahyahyahyahyahyahyahyahyahyahycziczicWlczicKCcWmcWncWocWpcvtcLPcLRcONcOOcOOcOQcONcLRcLPcvtcWpcWqcWrcWscKCcBgcWtcBgcBgahyahyahyahyahyahyahyahyahyahydDTdbMdbScWuaahcWucWucWucWucWuaahaahahyahyahyahyahyaahaahaahaahaahaahaahahyahyahyahycXncWwcWxcWycWuaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccUEcUEcWzcWAcVucXucWCcWDcWEcWFcWGcWHcWIcWJcWJcWJcWFcWFcWFcWKcWLcPMcWMcWNcMTcMTcXycWPcwAcvvcXycWPcWScWTcWUcVYcNecWVcWWcWXcWicWYcWZcXacXbcXccVmdDXcXecXecXfczQcWhcXgcXhcXicXjcXkcXlcXhcXmcXhcXhcWhcWhcXHcXocXocXocXocXocXpcXqcXHcXpcXqcXqcXrcXscXtcKCcKCcNYcKEcKFcKCcKCcKCcYfcXvcXvcKIcYfcKCcKCcKCcNYcKEcKFcKCcKCcXtcXwdCXcXqcXqcZncXzcXzcXzcXAcWucWucWudDYcWucWwdDZcWucWucWucXBcXCcXCcWucWucWucWucZncXzcXzcXAcWucWucWucWucWucWucWucZncXzcXzcXAcWucXDcXEcXFcWucXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcZocXIcXJcVDcXKcXLcUMcUNcXMcXMcXNcUOcVEcXOcXPcWFcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYacYccYdcNecYecWacNcdaTcYgcYhcYicYjcYkcVmcRQczQcYlczQczQcYmcYncYocYpcYqcYncYrcYpcYscYtcYucYvcYwcYxcYycYxcYxcYzcYxcYAcYBcYxcYxcYCcYDcYEcYFcYGcYHcYCcYxcYIcYxcYycYJcYKcYxcYxcYxcYLcYxcYMcYNcYycYxcYxcYxcYCcYxcYGcYOcYPcYPcYQcYRcYScYRcYTcYRcYUcYVdCYcYRcYRcYWcYScYRcYXcYScYYcYRcYZdCYcYXcYRcZacYRcYRcZbcYRcYRcZccYUdCYcYRcYRcZdcYRcYRcYScYRcYXcZecZfcXFdCZcXGcZhcZicZjcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccIccIccIccIcbkQcZocXIcXJcVDcXKcXLcUMcUNcXMcXMcXNcUOcVEcXOcXPcWFcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYacYccYdcNecYecWacNcdaTcYgcYhcYicYjcYkcVmcRQczQcYlczQczQcYmcYncYocYpcYqcYncYrcYpcYscYtcYucYvcYwcYxcYycYxcYxcYzcYxcYAcYBcYxcYxcYCcYDcYEcYFcYGcYHcYCcYxcYIcYxcYycYJcYKcYxcYxcYxcYLcYxcYMcYNcYycYxcYxcYxcYCcYxcYGcYOcYPcYPcYQcYRcYScYRcYTcYRcYUcYVdCYcYRcYScYWcYRcYRcYXcYScYYcYRcYZdCYcYXcYRcZacYRcYRcZbcYRcYRcZccYUdCYcYRcYRcZdcYRcYRcYScYRcYXcZecZfcXFdCZcXGcZhcZicZjcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkcZlcZmdbDdbdcZpcZqcVMcZrcPMcUMcUNcZscZtcZucVGcVHcZvcZqcZwcZxcZycZqcZzcZAcZBcZCcZDcZEcZFcZGcZHcZGcZIcZJcZKcZLdmbcZNcZOcZPcZQcZRcZScZTcVmcRQcwhcwhcZUcwhcZVcZWcZXcWhcZVcZWcZYcWhcZVcZZdaadabdacdaddaddaddaedaddaddafdaddaddaddagdaedahdaidajdakdagdaddajdaddaddaddaedaddaddaddaddaddafdaddaddaddaddaddagdakdajdaldaddaedagdamdamdamdandamdamdaodamdamdamdapdamdamdaqdaodardasdatdaudaqdamdandamdamdaodamdamdamdamdamdamdamdavdamdamdaudamdaqdawdaxdaydazdaAdaBdaCdaDcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahahycIcdaEdaFdaGcNZahycTZdaHdaIdaJdaKcTSdaLcUNdaMdaNdaOcUNcPMdaPcPMdaQcPMcPMdaRdaSdaSdbIdaUdaVdaWdbIdaUdaSdaXdaYdaZdbadbbdbcdbNdbedbfdbgdbNdbedbcdbccRQcwhdbhdbidbjcZVdbkdbldbmcWhdbndbldbocZVcWhdbpcXhdbqdbrdbrdbrdbsdbtdbrdbrdbudbrdbrdbvdbwdbxdbydbzdbAdbBdbCdcedbCdbCdbEdbFdbCdbCdbGdbCdbCdbCdbHdbCdbCdcfdbCdbBdbJdbzdbydbKdbLdbvdbMdbMdcrdbMdbMdbMdbOdbMdbMdbMdbPdbMdbMcWwdbQdbRdbScXEdbTcWwdbMdcrdbMdbMdbUdbMdbVdbMdbMdbMdbVdbMdbMdbMdbMdbWdbMcWwdbWdbXcXFdbYcXGdbZdcadcbcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahbkQcIccZkcZkdccdcddcDdczdcgdchdcidaPcPMcUMdcjdckdcldcmdcndcodcpcTQdcpdcmdcodcqdcJdcsdctdcudcvdcwdcxdcydcxddbdcAdcBdcCddndmkdcFdcGdcHdcIddtdcKczfdbcdcMcwhdcNdbidcOcZVdcPdcQdcRcWhdcSdcTdcUcZVcWhcWhcWhcWhcXHcXocXocXocXocXocXpdcVcXHcXpdcWdcXdpPdqIdpQdcXdcWddDdcVcXHcXocXocXocXocXpdcVcXHcXocXocXocXocXpdcVddDddcddddskdtrdstddddddcZncXAddhcZncXzcXAddhcZncXzcXAddhcZncXAddiddjdBAdBCdBBddjddiddPddhcZncXzcXzcXzcXzcXAddhcZncXzcXzcXzcXzcXAddhddPddodBEdBDdBFddscXGcXGcXGcXGcXGaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-2.dmm b/maps/polaris-2.dmm index 2056e569d5f..9a3b1721e5e 100644 --- a/maps/polaris-2.dmm +++ b/maps/polaris-2.dmm @@ -686,7 +686,7 @@ "nj" = (/turf/unsimulated/wall{icon = 'icons/misc/title.dmi'; icon_state = "title"},/area) "nk" = (/turf/unsimulated/wall,/area/centcom/specops) "nl" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) -"nm" = (/obj/mecha/combat/gygax/dark,/obj/machinery/camera/network/ert{c_tag = "Assault Armor North"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) +"nm" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership{name = "\improper Ninja Base"}) "nn" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "no" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; listening = 0; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops) "np" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/turf/unsimulated/floor{icon_state = "dark"},/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" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/regular,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_mothership) +"of" = (/turf/simulated/shuttle/wall{dir = 6; icon_state = "wall3_wall"; tag = "icon-swall (NORTHWEST)"},/area/space) "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) @@ -905,7 +905,7 @@ "ru" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_port"; name = "port docking hatch controller"; pixel_x = 0; pixel_y = 25; tag_door = "specops_shuttle_port_hatch"},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "rv" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "rw" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) -"rx" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) +"rx" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "ry" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) "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) @@ -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" = (/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},/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) "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) @@ -996,7 +996,7 @@ "th" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "ti" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start) "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},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"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) "tn" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) @@ -1048,7 +1048,7 @@ "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) "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/window/reinforced,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) +"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) @@ -1595,13 +1595,13 @@ "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) -"EL" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"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/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"EO" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"EP" = (/obj/structure/table/standard,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"EQ" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"ER" = (/obj/machinery/chem_master,/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) +"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) "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) @@ -1610,7 +1610,7 @@ "EX" = (/obj/structure/flora/bush,/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall) "EY" = (/obj/effect/floor_decal/corner/white{dir = 9; icon_state = "corner_white"; tag = "icon-corner_white (NORTHWEST)"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "EZ" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Fa" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/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) @@ -1624,10 +1624,10 @@ "Fl" = (/obj/structure/window/shuttle{icon_state = "window12"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) "Fm" = (/obj/structure/window/shuttle{icon_state = "window8"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) "Fn" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s"; icon_state = "swall_s"},/area/shuttle/escape/centcom) -"Fo" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Fp" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Fq" = (/obj/structure/closet/secure_closet/chemical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Fr" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Fo" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Fp" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Fq" = (/obj/effect/floor_decal/corner/green{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Fr" = (/obj/effect/floor_decal/corner/green,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Fs" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "Ft" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "Fu" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom) @@ -1641,7 +1641,7 @@ "FC" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "FD" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "FE" = (/turf/simulated/shuttle/wall{tag = "icon-swall (NORTHEAST)"; icon_state = "swall"; dir = 5},/area/shuttle/escape/centcom) -"FF" = (/obj/structure/closet/secure_closet/medical1,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"FF" = (/obj/structure/table/standard,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/effect/floor_decal/corner/purple/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "FG" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge West"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "FH" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "FI" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) @@ -1674,19 +1674,19 @@ "Gj" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "Gk" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "Gl" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) -"Gm" = (/obj/machinery/smartfridge/chemistry,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Gn" = (/obj/structure/closet/secure_closet/medical3,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gm" = (/obj/effect/floor_decal/corner/purple{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gn" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Go" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit"; req_access = list(19)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "Gp" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHEAST)"; icon_state = "swall"; dir = 6},/area/shuttle/escape/centcom) "Gq" = (/turf/simulated/shuttle/wall{tag = "icon-swall_t"; icon_state = "swall_t"},/area/shuttle/escape/centcom) "Gr" = (/turf/simulated/shuttle/wall{tag = "icon-swall_straight (EAST)"; icon_state = "swall_straight"; dir = 4},/area/shuttle/escape/centcom) "Gs" = (/turf/simulated/shuttle/wall{tag = "icon-swall (SOUTHWEST)"; icon_state = "swall"; dir = 10},/area/shuttle/escape/centcom) "Gt" = (/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; req_access = newlist()},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Gu" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Gv" = (/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Gw" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Gx" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Gy" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gu" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/purple/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gv" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gw" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gx" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/purple{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Gy" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Gz" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "GA" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "GB" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) @@ -1696,10 +1696,10 @@ "GF" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "GG" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Cell"},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "GH" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) -"GI" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"GI" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "GJ" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"GK" = (/obj/machinery/computer/med_data,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"GL" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"GK" = (/obj/structure/closet/secure_closet/chemical,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"GL" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/purple{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "GM" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "GN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) "GO" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/bar) @@ -1714,7 +1714,7 @@ "GX" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "GY" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "GZ" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) -"Ha" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ha" = (/obj/structure/closet/secure_closet/medical1,/obj/effect/floor_decal/corner/purple{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Hb" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) "Hc" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "Hd" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar) @@ -1744,9 +1744,9 @@ "HB" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "HC" = (/obj/machinery/camera/network/crescent{c_tag = "Shuttle Center"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "HD" = (/obj/machinery/vending/medical,/turf/unsimulated/wall,/area/centcom/medical) -"HE" = (/obj/machinery/vending/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"HF" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"HG" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"HE" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"HF" = (/obj/structure/closet/secure_closet/medical1,/obj/effect/floor_decal/corner/purple/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"HG" = (/obj/effect/floor_decal/corner/purple,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "HH" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "HI" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "HJ" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) @@ -1765,8 +1765,8 @@ "HW" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) "HX" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "HY" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"HZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ia" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"HZ" = (/obj/effect/floor_decal/corner/purple{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ia" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/purple/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ib" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "Ic" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) "Id" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/centcom/bar) @@ -1775,35 +1775,35 @@ "Ig" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar) "Ih" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar) "Ii" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"Ij" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ij" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ik" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Il" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Im" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Im" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "In" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom) "Io" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_one_access = list(13); tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) -"Ip" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ip" = (/obj/structure/table/standard,/obj/structure/flora/pottedplant{pixel_y = 8},/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Iq" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ir" = (/obj/structure/morgue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Is" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ir" = (/obj/machinery/smartfridge/chemistry,/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Is" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "It" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) -"Iu" = (/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},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Iu" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Iv" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Iw" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Ix" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/o2,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Iy" = (/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,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Iz" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ix" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Iy" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Iz" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "IA" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "IB" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "IC" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"ID" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid,/obj/item/weapon/storage/firstaid,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"ID" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "IE" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "IF" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "IG" = (/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "IH" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "II" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome) "IJ" = (/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access = list(5)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"IK" = (/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_state = "white"},/area/centcom/medical) -"IL" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"IK" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"IL" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/green{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "IM" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "IN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "IO" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) @@ -1813,11 +1813,11 @@ "IS" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "IT" = (/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_south_starboard_mech"; pixel_y = -19},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "IU" = (/obj/machinery/door/airlock/medical{name = "Observation Room"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"IV" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"IW" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"IV" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"IW" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "IX" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "IY" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"IZ" = (/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"IZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ja" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Jb" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Jc" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) @@ -1828,14 +1828,14 @@ "Jh" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/shuttle/escape/centcom) "Ji" = (/obj/machinery/door/airlock/glass_medical{name = "Escape Shuttle Infirmary"; req_access = list(5)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "Jj" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/shuttle/escape/centcom) -"Jk" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jl" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jm" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jn" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jo" = (/obj/structure/closet/wardrobe/white,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jp" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/medical_cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jq" = (/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Jr" = (/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jk" = (/obj/effect/floor_decal/corner/green{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jm" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jn" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jo" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jp" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jq" = (/obj/machinery/sleep_console,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Jr" = (/obj/machinery/sleeper{dir = 8},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Js" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Jt" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "Ju" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) @@ -1851,17 +1851,17 @@ "JE" = (/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/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "JF" = (/obj/structure/closet/hydrant{pixel_x = -30; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) "JG" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) -"JH" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"JH" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "JI" = (/obj/structure/bed/chair,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "JJ" = (/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) "JK" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "JL" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "JM" = (/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "JN" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access = list(45)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"JO" = (/obj/machinery/disease2/incubator,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"JP" = (/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},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"JQ" = (/obj/machinery/disease2/isolator,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"JR" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"JO" = (/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"JP" = (/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"JQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"JR" = (/obj/effect/floor_decal/corner/blue{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "JS" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "JT" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "JU" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) @@ -1874,9 +1874,9 @@ "Kb" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "Kc" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) "Kd" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/crescent{c_tag = "Shuttle East Storage"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom) -"Ke" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Kf" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Kg" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ke" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Kf" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Kg" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Kh" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "Ki" = (/obj/machinery/igniter,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "Kj" = (/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) @@ -1886,7 +1886,7 @@ "Kn" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "Ko" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "Kp" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"Kq" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/stack/nanopaste,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Kq" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Kr" = (/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Ks" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "Kt" = (/obj/machinery/door/blast/regular{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) @@ -1898,32 +1898,32 @@ "Kz" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape/centcom) "KA" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/shuttle/escape/centcom) "KB" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/shuttle/escape/centcom) -"KC" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KD" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KE" = (/obj/machinery/computer/centrifuge,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"KC" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"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) "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/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KK" = (/obj/machinery/smartfridge/chemistry/virology,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KL" = (/obj/structure/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"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) -"KO" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KP" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KQ" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"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) "KR" = (/obj/effect/landmark{name = "tdome2"},/obj/machinery/camera/network/thunder{c_tag = "Thunderdome - Red Team"; invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2) "KS" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "KT" = (/obj/effect/landmark{name = "tdome1"},/obj/machinery/camera/network/thunder{c_tag = "Green Team"; invisibility = 101},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1) -"KU" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KV" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KW" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KX" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KY" = (/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"KZ" = (/obj/machinery/disease2/diseaseanalyser,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"La" = (/obj/machinery/computer/diseasesplicer,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Lb" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"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) +"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) +"Lb" = (/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,/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Lc" = (/obj/machinery/atmospherics/pipe/vent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "Ld" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena"; invisibility = 101},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "Le" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) @@ -2120,10 +2120,10 @@ "ON" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac) "OO" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac) "OP" = (/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"OQ" = (/obj/item/tape/engineering{tag = "icon-engineering_v"; icon_state = "engineering_v"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"OQ" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "OR" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac) "OS" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac) -"OT" = (/obj/item/tape/engineering{tag = "icon-engineering_v"; icon_state = "engineering_v"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"OT" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "OU" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) "OV" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) "OW" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/shuttle/plating,/area/centcom/evac) @@ -2138,7 +2138,7 @@ "Pf" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pg" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Ph" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"Pi" = (/obj/item/tape/engineering{tag = "icon-engineering_h"; icon_state = "engineering_h"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Pi" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "Pj" = (/obj/structure/urinal{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pk" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pl" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) @@ -2148,31 +2148,31 @@ "Pp" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pq" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pr" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"Ps" = (/obj/item/organ/internal/xenos/plasmavessel,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"Pt" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror/raider{pixel_x = -28; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Ps" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Pt" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pu" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pv" = (/obj/item/xenos_claw,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"Pw" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/weapon/gun/launcher/spikethrower,/obj/item/clothing/under/vox/vox_casual,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"Px" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/weapon/gun/launcher/spikethrower,/obj/item/clothing/under/vox/vox_robes,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Pw" = (/obj/structure/table/rack,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"Px" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) "Py" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -28; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) "Pz" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"}) "PA" = (/obj/item/pizzabox/meat,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"PB" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/under/vox/vox_robes,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"PB" = (/obj/machinery/computer/shuttle_control/multi/skipjack,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PC" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PD" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PE" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"PF" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/under/vox/vox_casual,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"PG" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/under/vox/vox_robes,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"PF" = (/turf/simulated/wall/skipjack,/area/skipjack_station/start) +"PG" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start) "PH" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PI" = (/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"PJ" = (/obj/item/organ/internal/xenos/eggsac,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"PJ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_east_control"; req_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start) "PK" = (/obj/item/organ/internal/stack,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PL" = (/obj/structure/bed/chair,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PP" = (/obj/machinery/computer/station_alert,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) -"PQ" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"}) +"PQ" = (/obj/machinery/computer/shuttle_control/multi/skipjack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "PR" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PS" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PT" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"}) @@ -2182,20 +2182,20 @@ "PX" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"}) "PY" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/skipjack_station/start) "PZ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/skipjack_station/start) -"Qa" = (/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) -"Qb" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"Qa" = (/obj/machinery/button/remote/blast_door{id = "skipjackshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start) +"Qb" = (/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership) "Qc" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_northwest_lock"; locked = 0; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Qd" = (/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/plating,/area/skipjack_station/start) "Qe" = (/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/plating,/area/skipjack_station/start) "Qf" = (/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/plating,/area/skipjack_station/start) "Qg" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_northeast_lock"; locked = 0; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start) -"Qh" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_east_control"; req_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"Qh" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops) "Qi" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Qj" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Qk" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"Ql" = (/obj/machinery/computer/shuttle_control/multi/vox,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Ql" = (/obj/structure/table/steel,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "Qm" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"Qn" = (/obj/machinery/button/remote/blast_door{id = "skipjackshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/wall/voxshuttle,/area/skipjack_station/start) +"Qn" = (/obj/structure/table/standard,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) "Qo" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Qp" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start) "Qq" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start) @@ -2254,7 +2254,7 @@ "Rr" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) "Rs" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) "Rt" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) -"Ru" = (/obj/item/weapon/deck,/obj/structure/table/steel,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) +"Ru" = (/obj/structure/reagent_dispensers/beerkeg/fakenuke,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership) "Rv" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "Rw" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) "Rx" = (/obj/machinery/light/small{dir = 1},/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) @@ -2282,7 +2282,7 @@ "RT" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "RU" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/skipjack_station/start) "RV" = (/obj/structure/table/standard,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) -"RW" = (/obj/structure/table/standard,/obj/item/weapon/deck,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/skipjack_station/start) +"RW" = (/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) "RX" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/skipjack_station/start) "RY" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/skipjack_station/start) "RZ" = (/obj/structure/simple_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) @@ -2342,7 +2342,7 @@ "Tb" = (/obj/structure/table/woodentable,/obj/item/device/megaphone,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "Tc" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "Td" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chawanmushi,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"Te" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/bundle/c1,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"Te" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cash_register/civilian{tag = "icon-register_idle (WEST)"; icon_state = "register_idle"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant) "Tf" = (/obj/item/weapon/book/manual/robotics_cyborgs,/obj/structure/table/glass,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "Tg" = (/obj/item/robot_parts/head,/obj/structure/table/glass,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) "Th" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) @@ -2382,6 +2382,61 @@ "TP" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command) "TQ" = (/obj/machinery/computer/arcade/battle,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security) "TR" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) +"TS" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/cash_register/civilian,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar) +"TT" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c1,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"TU" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops) +"TV" = (/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"TW" = (/obj/effect/floor_decal/corner/pink{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"TX" = (/obj/effect/floor_decal/corner/pink{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"TY" = (/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"TZ" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 0; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ua" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ub" = (/obj/machinery/computer/cloning,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uc" = (/obj/machinery/clonepod,/obj/effect/floor_decal/corner/blue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ud" = (/obj/structure/closet/wardrobe/white,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ue" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uf" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/medical_cloning,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ug" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uh" = (/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ui" = (/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uj" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uk" = (/obj/effect/floor_decal/corner/pink,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ul" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/pink/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Um" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Un" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"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) +"Uv" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/obj/effect/floor_decal/corner/pink{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uw" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/obj/effect/floor_decal/corner/pink/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Ux" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/obj/item/stack/nanopaste,/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uy" = (/obj/effect/floor_decal/corner/pink{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"Uz" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/obj/effect/floor_decal/corner/pink{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UA" = (/obj/machinery/computer/operating,/obj/effect/floor_decal/corner/pink{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UB" = (/obj/machinery/computer/centrifuge,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UC" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UD" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28},/obj/effect/floor_decal/corner/pink{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UE" = (/obj/machinery/smartfridge/chemistry/virology,/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UF" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UG" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UH" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UI" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UJ" = (/obj/machinery/computer/arcade,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UL" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UM" = (/obj/structure/closet/secure_closet/medical2,/obj/effect/floor_decal/corner/pink/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UO" = (/obj/effect/floor_decal/corner/pink{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UP" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/pink/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UQ" = (/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/structure/table/glass,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UR" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"US" = (/obj/machinery/computer/diseasesplicer,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UT" = (/obj/machinery/disease2/diseaseanalyser,/obj/effect/floor_decal/corner/green{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) +"UU" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) (1,1,1) = {" aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoalahajapaqarasatauavawaxayaaabacadaeafagahaaaiajakalamanaoagafajacadahakazaAaBaCaDaEaFaGaHaIaJaKaLaMaNaOaAaBaCaDaEaFaGaHaIaJazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaQaQaQaQaQaQaQaQaQaQaQaQaQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaRaSaSaSaSaSaSaSaSaSaSaR @@ -2452,7 +2507,7 @@ aVbgaTbbbfaUbbbfaUbgaTbbbfaUbgaTbbbfaUbgaTbbbfaUbhbdaZaPaPaPaPbgahakadaiaaaoamaj bebdaWaXaVbbaXaVbbbdaWaXaVbbbdaWaXaVbbbdaWaXaVbbaTbaaYaPaPaPaPazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazhshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshshsazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjzjIhChChChChChCjOjOjOhChChChChChCjMkekTlulvlvjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP azazazazazazazazazazazazazazazazazazazazazazazazazazazaPaPaPaPazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazazaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylylylylylylylyaPaPjwjzhClzlzlzlzlzhCjOjOjOhCjOjOjOjOjOhClAjwlulvlvjwaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylBlBlBlylBlBlyaPaPjwjzhClzlzlzlzlzlzjOjOjOjOjOjOjOjOjOhClAjwjwjwjwjwaPaPaPaPaPaPaPaPaPlClDlElDlFaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylBlGlBlHlBlBlyaPaPjwjzhClzlzlzlzlzlzjOjOjOjOjOjOjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDlIlJlKlDaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylBlGlBlHlBlBlyaPaPjwjzhClzlzlzlzlzlzjOjOjOjOjOjOjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlDlInmlKlDaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlylLlLlLlylBlBlyaPaPjwjzhClzlzlzlzlzhClzlzlzhCjOhCjOhChChClMjzjwaPaPaPaPaPaPaPaPaPaPaPaPlNlJlOlJlNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlPlPlPlPlylylylylylylBlBlyaPaPjwjzhClzlzlzhChChClzlzlzhChChCjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlQlJlJlJlQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPlPlPlPlPlHlBlHlBlBlBlBlBlyaPaPjwjzhClzlzlzhCjzhClRlRlRhCjzhCjOjOjOhCjPjzjwaPaPaPaPaPaPaPaPaPaPaPaPlQlJlJlJlQaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2469,30 +2524,30 @@ mamamamamamamamkmamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmoaPaPaPaPmlmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPmjmjmjmjmjmjmj mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmmmmmmmmmmmmqmmmmmmmrmpmpmpmoaPaPaPaPmompmpmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPmjmjmjmjmjmjmjmjmjaPmjmjmjmjmjmjmjmj mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmqmmmmmqmmmmmrmsmtmumvmwmxmymzmAmomJmKmLnJnPmVnRnKmmmmmmmqmCmDmDmWmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmomEmFmomGmGmomHmImompmpmpmpmpmpmpmpmpmonXmpmpmMmNmpmOmMmPmQoYmompmpmpmpmBmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmonXmpmpmpmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmlmmmmmmmmmmmrmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmonXmpmpmpmpmpmppimpmpngmompmpmpmpnhmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -njmamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlnmnnnonnmompmpmpmpmpmpmpmpmVmpmpnpnqnrnsmpmpnfmontnunvmMmpmpmpmMnwnxnymompmpmpmppbnznAnBmoaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnCmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnnEnnnnnnnnnnnEnFnnnnnnnGmompmpmpmpmpmpmpmpmVmpmpmpmpmpmpmpmpnHmBnPmMmMmUmpmpmpmUmMmMnRmrmpmpmpmpmBmmmmmmnKmmmqmmmmmrnLnMnNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnOaPmTmjmjjwjwjwjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUmmnPnQnRmmmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVnWmpmpmpnWnXnYnYmompmpmpmpmonZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwofogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloinnnnojmookolmoomonmoooopmooqorosotouovmpmpowmMoxmpmpmpmpmpmpmpmpmpmpoympmpmpmpozmYoAoAoAmYoznMnMozoBnMoCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPlwoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnKmMmMmMmMmMnPTITJnRnIoImpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPozmEmFozmGmGozmHmIozmpmpmpmpmpmpmpmpmpmompmpmpmMmNmpmOmMmPmQoYmompmpmpmpmBmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPmSaPmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPofsnsnsnsnsnmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpmpmoQhmpmpmpmpmpmppimpmpmXmompmpmpmpozmYmZnamoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +mamamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPoznnnnELnonnpbmpmpmpmpmpmpmpmpmVmpmpnbncndnempmpnfmompmpmpmpmpmpmppimpmpngmompmpmpmpnhmYmYnimoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPmSaPmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +njmamamamamamamamamamamamamamaaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlENnnnnnnmompmpmpmpmpmpmpmpmVmpmpnpnqnrnsmpmpnfmontnunvmMmpmpmpmMnwnxnymompmpmpmppbnznAnBmoaPaPaPaPmlmmmmmmmnaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnCmTmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnnEnnnnnnnnnnnEnFnnnnnnnGozmpmpmpmpmpmpmpmpmVmpmpmpmpmpmpmpmpnHnJnPmMmMmUmpmpmpmUmMmMnRmrmpmpmpmpmBmmmmmmnKmmmqmmmmmrnLnMnNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjaPaPaPaPaPaPnOaPmTmjmjjwjwjwjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUmmnPnQnRmmmUmVmVmUmVmVmUmVmVmUmpmpmpmpmpmpmpmpnSmMmRnUnVnWmpmpmpnWnXnYnYoympmpmpmpoznZoaoaoaobmoocodmonLoenNmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPjwjwEOogohjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloinnnnojpbokolpbomonpboooppboqorosotouovmpmpowmMoxmpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoAoAoAmYoznMnMozoBnMoCmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPlwoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoGnnnnnnnnnnoGoHnnnnnnojnJmmmmnKmmmmnKmmmmnImMmMmMmMmMmUTITJnRnPoImpmpmpmpmpmpmpmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPkjoDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnloLnnnnnnoMmpmpmpmpmpmpmpmpmpmpmpmpmpmpoNmpmpoNoOmpmpmpoPoQoYoSoTmpmpmpmpmpmpmpmpmYmYoJoJoJmYoKnMnMnMnMnMnMmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPkToDoEoFoEoDjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoUnnnnnnnnnnoUoVnnnnnnnnoMmpmpoWmpmpoWmpmpmpmpmpmpmpmpoXmpmpoXmpmpmpmpoPpjoYoYoTmpmpoZpampmpmpmppbmYoAoAoAmYpbpcnMpbpdpbpemoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjwoFoFpfjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphmlmMmMnPnTnTnRmMmMmqmMmMmMmMmMnPTLTLnRmnmpmpmpoPTMTNpkoTmpmpplmompmpmpmpmopmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoFoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmppCmompmpmpmpmBmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpOpPpQmpmpmpmppPpOpNmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqmioqnqojwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmonnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlnKmmmMmMnPqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpozqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwriioiorjjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFqJrGrHjwrIioiorJjwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnoUnnnnnnnnnnoUoVnnnnnnnnoMmpmpoWmpmpoWmpmpmpmpmpmpmpmpoXmpmpoXmpmpmpmpoPpjoYoYoTmpmpmpmpmpmpmpmpmYmYoAoAoAmYpbpcnMpbpdpbpemoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwjwoFoFpfjwjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnlpgnnnnphpbmMmMmUnTnTmUmMmMpbmMmMmMmMmMmUTLTLnRnPmpmpmpoPTMTNpkoTmpmpoZpampmpmpmppbpmoaoaoapnmopcnMmopomopomoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPjwoFoFoFjwmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnDnnnnnnnnppnnnnnnnnnnpppqnnnnnnprmopsmpmpmpmpmpptpumopvpwpxpypzpAmpmppBmMpCmpmpmpmpmpmpmpmpmpplmompmpmpmpnJmmmmmmmmmmnKmqmmnKmmpDmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpEpFpFpGjwjwpHjwjwjwjwjwjwjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnknknknknknknknknknkmUnnnnnnnnpImopJmpmpmpmpmpmppKmompmpmpmppLmpmpmppMmMpNpOpPpQmpmpmppPpOpNpCmompmpmpmpmMpRpSpSpTpUpVmopWnMpXmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPmjmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPpYpZqaqaqaqbqcaPaPqdqeqfqgqeqeqeqhjwqiqjqkqljwqmioqnqojwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpbnnqpqqqrqsmoqtmpmpquqvmpmpqwmompmpmpmpmpmpmpmpmlmmmmmMmMmUqxqxnRmmmmmmmmmrmpmpmpmpmMqyqyqyqyqyqymoqznMqAmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPpYqBqCqDqEqFqGqBqcaPqdqeqHqHqeqeqeqeqIqJqJqJqKjwjwjwjwjwjwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmrqLmpmpqMqNmpmpqOmompmpqPqQqRmpmpqSmoqTqUqUqUqUqVqVqUqUqUqWaPmompmpmpmpmUqyqXqYqYqYqYnJnPqZnRmraPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPqBrarbrbrcrbrbqFqBaPqdrdrerfrgqeqeqejwqJqJqJrhjwriioiorjjwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmprkrlmpmpmpmompmprmrnrompmprpmorqrrrsrtrurvrvrvrwrxqUqWmompmpmpmpryqyrzrzrzrzrzqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPqBrArbrbrbrbrBrCqBaPqdqerDrDqeqeqerEjwrFRurGrHjwrIioiorJjwmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmprKmorqrLrMrvrvrvrvrvrvrvrNrOmompmpmpmpryqyqyqyrPqyqyqyqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBrQrbrbrRrbrbrSqBaPqdqeqeqeqeqeqerTjwjwjwjwjwjwrUioiorVjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqyqysbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwsmioiosnjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyqysDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsHsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwsmioiosnjwmjmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnKsRsRsRsRsRsRsRsRsRsRsRsRpDmUsSsSmUpDmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwsYsZsZsYjwjwjwjwmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwtktkioioioiotltltmjwjwmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpmpmpmpmpmpmpmompmpmpmpmpmpmpmpmorqrLrWrXrYrYrYrYrYrZqUsamompmpmpmppbqyqysbsbqyqyscqyqyqYmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsesesesesesesesesesesesesesesesesesesesesesesdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsfqBsgqBqBqBqBqBshaPsipFpFsjjwqoqoqojwlhlhsksljwsmioioEPjwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmompmpsospsqsrssstmosusvswsxsyszmpsAmosBqUqUqUqUqUqUqUqUqUsaaPmompmpmpmpmosCqyTUsDqyqysEqyqysFmoaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsHsIsJsKsLqBaPaPaPaPaPaPsMqoqoqosNlilisOsOjwsmioioEQjwmjmjmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmosPsQsospsqsrssstmBmmmmmmmmmmmmmmmmnIsRsRsRsRsRsRsRsRsRsRsRsRozmUsSsSmUnJmmmmmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBsTsUrBrbsVqBaPaPaPaPaPaPsWqoqoqojwsXlijwjwjwsYsZsZsYjwjwjwjwmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnJmmmmmmmmmmmmmmmmnIaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPtamUtbtbmUtcaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGsGtdtetetetetftftetetetetgsGsGsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBthsIrBrbtiqBqcaPaPnOnCtjjwqoqoqojwjwjwjwuktkioioioiotltltmjwjwmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGsGtdtotptqtrtetstttetutvtetetetgsGsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPpYqBqBqBqBtwsIrBrbtxqBqBqBqBqctytyjwtzqoqoqojwtAtBioioioioioioioioiotCjwmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGsGtdtetDtDtDtDtetEtEtetDtDtFtGtetetgsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPqBtHtItJqBrbtKrbtLqBqBtMtNtOtPtQtRtQqoqoqoqotSioioioioioiotTioioioiotUjwmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBqBugqBqBuhtMuiujtPtQuktQqoqoqoqojwulumioioioioioioioioiounjwmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGtdtetetVtWtXtYtetZtDuatDtDtDtDubuctesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPudueufueqBqBqBugqBqBuhtMuiujtPtQQbtQqoqoqoqojwulumioioioioioioioioiounjwmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuoupuqtDurururtetDtDteusutuuuvuwuxtesGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPqBqBuduyqBqBuzrbuAqBqBuBuCuBqBuDuDjwuEpFsjjwjwjwjwuFuGioioioiouHuHuIjwjwmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPnktntnnkaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuJuptDtDtDtDtDuatDtDteteteteteteteuKsGsGsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuLrbrbuMqBrbuNrbqBuOuPuQuRqBmTaPmTaPaPaPaPmjmjjwjwjwsYuSuSsYjwjwjwjwmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmMtntnmMaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPsdsGsGuTtetDtDtDuUtDtetDtDtDuVuWsGsGsGsGsGsGsGuXuXuXuXuXuXuXuXuXuXuXaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPqBuYrbrbrbuZrbrbrbvarbrbrbvbqBnCnCnCnCaPaPaPaPmjmjmjjwvcioiovcjwmjmjmjmjmjmjmjmjmj @@ -2515,7 +2570,7 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHmTaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwPzhzixgxexfxexfzjwPzkzlzmzmzmyIyUyVznyIyYyYyYyYzozpyYyYyYyYyYsdxjxjxjxjxjxjsdvKvKvJvKvKvKvKvKvKvKvKzqsdsdsdsdsdsdsdsdsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbvHvHvHvHvHwvmTmTmTmTmTmTmTmTmTmTmTaPvGwbwbwbwPxexfzrxfxexfySzswPztxexexexeyIyVyVyVzuyYyYzvyYzozpyYzwzxzyyYsdsdvJvJvJvJsdsdvKvKzzvKvKvKvKzAzBzCvKvKsdvKvKvKvKvKvKzDsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvHmTaPaPzEzFzGzEzFzFzHzIzJzFzKzLmTmTvHzMwbwbwPxfxezNxexfTQzOzPwPzQxexAxexeyIyVyVzRyIzSyYzTyYzozpyYzwzxzyyYyIvKvKvKvKvKvKvKvKvKvJvKvKvKvKzCzCzDvKvKzUvKzVvKvKzVvKzCsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmjmj -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzNxgxgxgxgxgxgwPAeAfxexeAgyIAhyVzRyIzSyYyYyYzozpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPzEzWzXzYzZAaAbAaAaAaAbAcAdvGvGvGwbwbwbwPzrzNxgxgxgxgxgxgwPAeAfxexeAgyIAhyVzRyIzSyYyYyYTezpyYzwRpzyyYyIvKvKvKvKvKvKvKvKvKvJAiyNvKvKvKvKvKAjvKsdzcAkAlzCAmvKzqsdyRyRsdvKvKsdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvGaPaPAnAoApAoAqAoAoAoAoAoAoAoArAsxxAswbwbwbwPxfxexfxexfxexfxexfAeAeAtAeAeyIyIyIyIyIzozozozozozpyYzwRBzyyYyIvJvJAuvJvJsdwdvKvKsdAvyNvKvKvKvKvKsdsdsdsdvJvJvJvJvJsdsdAwAwsdvKvKsdaPaPaPaPAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvGaPaPAyAzAAABzZACADACACACADAEAFvGvGvGwbwbwbwPxexfxexfxexfxexfxexfxexfxeAGAHyIyYyYyYzpzpzpzpzpyYyYyYyYyYyYyIAIAJvKAKALsdAMANAOAwAwBkAwsdvJAPvJsdAQAQAQARASATAUAVAQAQAQAwwdvKvKsdaPaPaPAxAxAWAWAWAWAWAWAXAXAXAWAWAWAWAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvHmTaPaPAyzFAZAyzFzFzHzIzJzFBaBbmTmTvHwbwbwbwPxfxexfySAGySAGySxfxexfxexfySBcyIBdyYyYyYyYyYyYyYyYyYyYyYyYBdyIvKvKvKvKvKsdvKvKvKEaAQAQBlsdvKvKvKsdAQAQAQARBeBfBgAVAQAQAQAwvKvKvKsdaPaPaPAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPBhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPmjmjmjmjmj @@ -2533,35 +2588,35 @@ aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGxxxxDWwbwbwbwbwb aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbEgxxEexxEfwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQDPAQAQDQCWCWEhDRDRDREiCWCWDSAQAQDPAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDTAWAWAWDUAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGEjEkvGwbwbwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbvGErEjEsvGwbwbElEmEnElEmEoEpEqEmEnElEmEnwbwbwbwbwbwbwbwbwbwbAQAQAQAQDCAQAQDCAQAQAQClAwClAQAQAQAQAQAQAQAQAQAQAQAQClAwAQAQEtCWCWCWEhEuEvCWCWCWEwAQAQAwCmAQAQAQAQAQAQAQAQAQAQAQAQCmAxExExAxAxAxAxAxAWAWAWBDAxAxAxAYAYAYAxBEBEAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHDfCJxxCGCFxxCGwbwbwbwbwbwbEyEyEzEzEyEAEAEAEyEzEzEyEyEAEAEyEyDiDjDjDjDjEBAQAQECDjDjDjDjDmAwAQAQEDEECWCWCWCWCWCWCWEFEGAQAQAwDiDjDjDjDjEBAQAQECDjDjDjDjDmAxAWAWEHEIEJEKAYBJAWAWAxAxBKBLBMBLBMBNBOBOBPBMBLBMBLBQBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyELEMEMEMENEOEOEMEMEMEyEPEQEMEREyCSCNCOCPCPESAQAQESCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPESAQAQESCOCPCOEXETAxAWAWAWAWAWAWAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMEMEyEMEMEZFaEyFbFcFdFdFeFbFfFfFbFcFdFdFeFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWAWAWAWAWAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMFoFpEMEMFoFpEMEMEyFqEMEMFrEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyEMEMFoFpEMEMFoFpEMEMEyFFEMEZFaEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyEMEMFoFpEMEMFoFpEMEMEyFFEMEMEREyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxAWAWFxBJAWFxAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyEMEMEMEMEMEMEMEMEMEMEyEyEMEMFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyEMEMEMEMEMEMEMEMEMELEyGmEMEMGnEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyGuGvGwGxGvGyEyEMEMEMGnEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWFxBJAWFxAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyEMEMEMGIEMGJEMEMGJEMGKEMEMEMGLEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxAWAWFxBJAWFxAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyEMEMEMEMEMEMEMEMEMEMEMEMEMEMHaEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxAWAWAWAWAWAWAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyEMEMEMEMEMEMEMEMEMEMEMEMEMEMGLEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyEMEMEMEMEMEMEMEMEMEMEMEMEMEMHaEyHsHtHtFtFtHuHvHvHvHvHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxAWAWGVGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMEMEAEAEAEMEMHDFVEMEMHEHFHGEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxAWAWAXAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyEOEMEMEMHQHREMEMENEyEMEMEyEyEyEyHSHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyEOEMEMEMEMEMEMEMHZEyEMEMIaIaIaEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBDAWAWAWAWAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPGWGfFIGkIiGfFIGkIiGfFIGkGWaPaPvHwbwbwbEyEOEMEMEMHQHREMEMIjEyEMEMIkIlImEyFbFbFbFbFbFbFbFbFbFbFbFbFbFbFbHeHeHeHxHxHxHxHxHxHxHxHxHeHeHeFhInGQInGQInGSGQGQHWInGQInGQInAxAYAYAYAYAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbIovHaPaPIiGfFIGkIiGfFTGkIiGfFIGkIiaPaPvHwbwbwbEyGLEMEMEMEMEMEMEMIpEyEMEMEMIqImEyIrEMEMEMIsHeHxHxHxHxHxHxHxHxHxHxHxHeHeItHeHeHxHeHeItHeHeHxHxHeHeHeFhFhFhFhFhFhFhFhFhFhFhFhFhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPHbGfFIGkIiGfFIGkIiGfFIGkHbaPaPvHwbwbwbEyIuEMEMEMIvIwEMEMIxEyIyEMEMIzIzEyIrEMEMEMIsHeHxHeHeHeHeIAHeHeHeHxHxHxHxHxHxHeHxHeHxHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnIBFIGkHbGfFIGkHbGfFIICHnvGvGvGwbwbwbEyEMEMEMEMEMEMEMEMIDEyEyEyIEEyEyEyIrEMEMEMIsHeHxHeIFIGIGIGIGIHHeHeHeHeHeHeHeHeIIHeHeHeHeHeHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIFIFIFIFIFIFIFIFIHAHzxxHzwbwbwbEyEMEMEMEMEMEyEyIJEyEyEMEMEMEMIKEyEMEMEMEMILHeHxHeIFIGIGIGIGIHHeIMINIOINIPIQIQIQIQIQIPIQIPIQIRHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIISFIFIFIFIFIISFIFIITHzxxHzwbwbwbEyEyIUEyHDEyEyIVEMIWEyEMEMEMEMEMIXEMEMIYEMIZHeHxHeJaIGIGIGIGJbHeIQJcJcJcJcJcIQIQIQJcJcJcJcJdJeHeHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGJfFRJgJhFkFmJiFkFmJhJgFRJjvGvGvGwbwbwbEyEMEMEMEMEMEyJkEMIWEyJlJmJnJoJpEyJqEMEMEMJrHeHxHeJaJsJtJtIGIGJuIQIQJvJwJvIQIQIQIQIQJvJwJvJxIQHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHaPaPHnJyJzHnJAJBJCJDJEHnJFJGHnaPaPvHvIvIvIEyEMEMEMJHJHEyIVEMIWEyEyEyEyEyEyEyEyEyEyEyHeHeHxHeHeHeHeHeHeHeHeIQJcJcJcJcJcIQIQIQJcJcJcJcJIIQHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyJOJPJQEAEMEMEMJRJRJRHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKcKdHnaPaPwvwbwbwbEyKeEMEMKfKgEyEMEMEMEMEMEMEMEAEMEMEMEMEMEMHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnisKnJCKoKpHnKlKlJjaPaPvGwbwbwbEyKqEMEMEMEMEyEMEMEMEMEMEMEMKrEMEMEMEMEMEMHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyKCEMEMIYKDEyKEEMEMEMKFEMKGEAEMEMEZEMEMEMHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPKyKzKzKzKBaPaPaPaPaPaPvHwbwbwbEyEMEMEMEMKJEyKKEMEMKLKMEMKNEAKOKPKQJRJRJRHeHxHeKsKtKuKuKRKuKuKvKjKjKjKjKjKjKjKSKjKjKjKjKjKkKjKvKwKwKTKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyKUGLEMKVKWEyKXKYKZLaLbEMEMEyEyEyEyEyEyEyHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjLcLdLcKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbwbwbwbCFxxCGCFxxCHCICJxxCGCFxxCGwbwbwbwbwbwbEyEREMEMFaFpFoFoFqEMFrEyFFGnGmGuEyCSCNCOCPCPESAQAQESCZETCPCOCOAwAQAQAQEUEVCWCWCWCWCWEFCVAQAQAQAwEWCOCNCOCPESAQAQESCOCPCOEXETAxAWAWAWAWAWAWAYBJAWAWAxBKBZCaCaCaCaCbCcCcCdCaCaCaCbCeBQCfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGwbEYEYwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbCgBUCrwbwbwbvHvHvHvHvGvGvGvGvGvHvHvHvHwbwbwbBTBUwbEzEMEMEMEMEMEMEMEMEMGvEyGwEMEZGxEyFbFcFdFdFeFbFfFfFbFcFdFdFeFbFbAQAQAQAQEDCzFgFgFgCBEGAQAQAQAQFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWAWAWAWAWAxBJAWAWAYCnCoCcCcCcCcCcCcCcCcCcCcCcCcCpCnCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbBUEYwbwavHvHaPaPaPaPaPaPaPaPaPaPaPvHvHwawbCiBUBVwbwavHvHaPaPFjFkFlFlFlFmFnaPaPvHvHwawbCgBUBVEzEMEMGIGyEMEMGIGyEMGvEyGKEMEMGLEyFsFtFtFtFtFtFtFtFtFtFtFtFtFsFbAwClAQAQAQAQAQAQAQAQAQAQAQClAwFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYBJAWAWAYCECoCcCcCcCcCcCcCcCcCcCcCcCcCpCECfCfCfCfCfCfCfCfCfAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbCrwbvHvHmTaPaPaPaPaPaPaPaPaPaPaPmTvHvHwbCiBUwbwbvHvHmTaPFjFyFzFAFBFCFDFEFnaPmTvHvHwbwbBUwbEyEMEMGIGyEMEMGIGyEMGvEyHaEMEZGxEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbAwAwAQAQAQAQAQAQAQAQAQAQAQAwAwFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYBJAWAWAxCeBQDcDcDcDcDdCcCcDeDcDcDcDdBKBZCqCqCqCqCqCqCqCqCqAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHBFBFBFvHvHaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPvHvHBFBFBFvHvHaPmTFjFyFGFHFIFHFIFHFJFEFnmTaPvHvHBFBFBFEyHEEMGIGyEMEMGIGyEMGvEyHFHZHGIaEyFtFtFKFLFMFNFtFtFKFOFPFNFtFtFbaPAwAwAwAwAwAQAwAQAwAwAwAwAwaPFhFwFQFQFQFQFwFwFwFwFQFQFQFQFwAxAWAWFxBJAWFxAxBJAWAWAxAxCeBLBMBLBMBNBOBOBPBMBLBMBLBZBRBRBRBRBRBRBRBRBRBRAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTFRFIFIFIFSFTFUFIFIFIFRmTaPaPvGwbwbwbEyHEEMEMEMEMEMEMEMEMGvEyEyGwIjFVEyFtFtFKFWFXFNFtFtFKFYFZFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFwFwFwFwFwFwFwFwFwFwFwFwFwFwAxAWAWFxBJAWFxAYAWAWAWBDAxAxAxAYAYAYAxDJDJAxAYAYAYAxAxAxAxAYAYAYAxAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGeGfGgGhGiGhGjGkGlGdmTaPaPvGwbwbwbEyHEEMEMFrImImImImImIpEyIrFqEMIsEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhFuFvFvFvFvFwFwFwFwFvFvFvFvFuAxAWAWFxBJAWFxAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGaPaPmTaPaPaPaPaPaPaPaPaPaPaPmTaPaPvGwbwbwbvGaPaPmTGdGoFRGpGqGrGqGsFRGoGdmTaPaPvGwbwbwbEyEAGtEMEyIxIuIzIyIuIDEyHEEMEMIKEyFtFtFKGzGAFNFtFtFKGBGCFNFtFtFbaPaPAwGDAQAQAQCWAQAQAQGEAwaPaPFhFhFhFhFhFhFhFiFiFhFhFhFhFhFhAxAWAWFxBJAWFxAxAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTaPaPaPaPaPaPaPaPaPaPaPmTmTmTvHwbwbwbvHmTmTmTGdFIGkGdGFGGGHGdGfFIGdmTmTmTvHwbwbwbEyHEEMEMILFqGJEMEMGJFaIVFqEMEMIWEyFtFtFKGMGNFNFtFtFKGOGPFNFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGRGRGRGRGQGQGQGQGSGTGTGTGUAxAWAWFxBJAWFxAxAxAWAWAWAWAWAWGVGVGVAWAWAWAWGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPFRFIGkGWGXGYGZGWGfFIFRaPaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIZEyFtFtFtFtFtFtFtFtFtFtFtFtFtFtFbaPaPAwGaGbAQAQCWAQAQGbGcAwaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxAWAWAWAWAWAWAxAxAxAYAYAYAxAYAYAYAxAYAYAYAxAYAYAYAxaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPFjFyGeGkHbGXHcGZHbGfGlFEFnaPaPvHwbwbwbEyHEEMEMEMEMEMEMEMEMEMEMEMEMEMIWEyFtFtFtFtFtFtHdHdHdHdHdHdHdHdFbaPaPHeHeHeHfHfHgHfHfHeHeHeaPaPFhHhFhHiFhHjFhGQGQFhHkFhHlFhHmAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHoFIGkHpFRHqFRHrGfFIHoHnvGvGvGwbwbwbEyHEEMFrImImImJkFrImImJkEMEMEMIZEyHsHtHtFtFtHuHvHvHvTSHvHvHvHvFbaPaPHeHwHxHfHxHxHxHfHxHwHeaPaPFhHyFhHyFhHyFhGQGQFhHyFhHyFhHyAxAWAWGVGVGVGVAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIHBHCFIFIHBFIFIFIHAHzxxHzwbwbwbEyEAEMGvEAEAEAHEGvHDFVHEFrJmJlJnEyHHHIHJFtFtHuHKHLHLHLHLHLHLHLFbaPaPHeHxHMHNHxHxHxHNHOHxHeaPaPFhFhFhFhFhFhFhGQGQFhFhFhFhFhFhAxAWAWAXAXAXAXAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIFIFIFIFIFIFIFIFIFIHPHzxxHzwbwbwbEyJoEMFaJpJrJqFqEMJHEyJPJOEyEyEyEyHSHTHUFtFtHuHLHLHLHLHLHLHLHLFbaPaPHeHfHxHfHxHxHxHfHxHfHeaPaPFhHVGQHVGQHVGSGQGQHWHVGQHVGQHVAxAWAWAWAWAWAWAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnHXFIGkGWGfFIGkGWGfFIHYHnvGvGvGwbwbwbEyJoEMEMEMEMEMEMEMJQEyJPJRKeKeKfEyIbIcIdFtFtHLHLHLIeIfIhIgHLHLFbaPaPHeHxHxHxHxHxHxHxHxHxHeaPaPFhGQGQGQGQGQGQGQGQGQGQGQGQGQGQAxBDAWAWAWAWAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPGWGfFIGkIiGfFIGkIiGfFIGkGWaPaPvHwbwbwbEyJoEMEMEMHQHREMEMKgEyJPEMIkIlKqEyFbFbFbFbFbFbFbFbFbFbFbFbFbFbFbHeHeHeHxHxHxHxHxHxHxHxHxHeHeHeFhInGQInGQInGSGQGQHWInGQInGQInAxAYAYAYAYAYAYaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTvHwbwbIovHaPaPIiGfFIGkIiGfFTGkIiGfFIGkIiaPaPvHwbwbwbEyKCEMEMEMEMEMEMEMKDEyJPEMEMIqKqEyKFKEKEKEKJHeHxHxHxHxHxHxHxHxHxHxHxHeHeItHeHeHxHeHeItHeHeHxHxHeHeHeFhFhFhFhFhFhFhFhFhFhFhFhFhaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPHbGfFIGkIiGfFIGkIiGfFIGkHbaPaPvHwbwbwbEyKKEMEMEMIvIwEMEMKLEyKPKOEMKQKUEyKVEMEMEMKWHeHxHeHeHeHeIAHeHeHeHxHxHxHxHxHxHeHxHeHxHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGHnIBFIGkHbGfFIGkHbGfFIICHnvGvGvGwbwbwbEyHEEMEMEMFrImJkEMKXEyEyEyIEEyEyEyKVEMEMEMKWHeHxHeIFIGIGIGIGIHHeHeHeHeHeHeHeHeIIHeHeHeHeHeHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHAFIFIFIFIFIFIFIFIFIFIFIHAHzxxHzwbwbwbEyHEEMFrImKYEyEyIJEyEyLaKZEMJRLbEyKZEMEMEMOQHeHxHeIFIGIGIGIGIHHeIMINIOINIPIQIQIQIQIQIPIQIPIQIRHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbxwxxxyaPaPaPaPaPaPaPaPaPaPaPaPaPxyxxxwwbwbwbHzxxHzHPFIFIISFIFIFIFIFIISFIFIITHzxxHzwbwbwbEyEyIUEyHDEyEyOTEMPiEyJPEMEMEMEMIXEMEMIYEMRWHeHxHeJaIGIGIGIGJbHeIQJcJcJcJcJcIQIQIQJcJcJcJcJdJeHeHxHeHeHeHeHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGwbwbwbvGvGvGJfFRJgJhFkFmJiFkFmJhJgFRJjvGvGvGwbwbwbEyTVEMTXTWTYEyTZEMUaEyUcUbUeUdUfEyUhUgUgUgUiHeHxHeJaJsJtJtIGIGJuIQIQJvJwJvIQIQIQIQIQJvJwJvJxIQHeHxHxHxHxHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHaPaPaPmTmTmTmTmTmTmTmTmTmTmTaPaPaPvHwbwbwbvHaPaPHnJyJzHnJAJBJCJDJEHnJFJGHnaPaPvHvIvIvIEyTVEMUkUjUlEyUmEMUnEyEyEyEyEyEyEyEyEyEyEyHeHeHxHeHeHeHeHeHeHeHeIQJcJcJcJcJcIQIQIQJcJcJcJcJIIQHeHeHeHeHeHeHeHxHeHeHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvHwbwbwbvHmTmTmTmTaPaPaPaPaPaPaPaPaPmTmTmTmTvHwbwbwbvHmTmTHnJJJJHnJKJLJCJCJMHnJJJJHnmTmTvHwbwbwbEyEyJNEyEAEAEyEyIJEyEyUpUoUqEAUrJpJpUsUsUtHeHxHxHeHeJSJSJSJSJSHeJTJTJTJTJTJTJTJTJTJTJTJTJTJUJTHeJVJVJVJVJVHeHxHxHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPwvvGvGvGwvaPaPHnJWJXHnJYJCJZKaKbHnKcKdHnaPaPwvwbwbwbEyUuEMTXUvUwEyHEEMFaJpFqEMFaEAFqEMEMEMEMEMHeHxHeHeHeKhKhKhKhKhHeKiKjKjKjKjKjKjKjKjKjKjKjKjKkKiHeKhKhKhKhKhHeHeHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvZvYvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvYvYvYvGaPaPJfKlKlHnisKnJCKoKpHnKlKlJjaPaPvGwbwbwbEyUxEMEMEMUyEyHEEMEMFrImEMEMKrEMEMEMEMEMEMHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGvGvGvGvGaPaPKyKzKzKAJhKlKlKlJhKAKzKzKBaPaPvGwbwbwbEyUzEMEMIYUAEyUBEMEMGvUCEMKGEAJkEMEZEMEMEMHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjKjKjKjKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPKyKzKzKzKBaPaPaPaPaPaPvHwbwbwbEyTVEMEMEMUDEyUEEMEMUFKMEMKNEAUHUGUJUIUIUKHeHxHeKsKtKuKuKRKuKuKvKjKjKjKjKjKjKjKSKjKjKjKjKjKkKjKvKwKwKTKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyUMULUOUNUPEyURUQUTUSUUEMKYEyEyEyEyEyEyEyHeHxHeKsKtKuKuKuKuKuKvKjKjKjKjKjKjLcLdLcKjKjKjKjKkKjKvKwKwKwKwKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbEyEyEyEyEyEyEyEyEyEyEyEyEyEyEyaPaPaPaPaPaPHeHxHeKsKtKuKHKuKHKuKvKjKjKjKjKjKjLeLfLgKjKjKjKjKkKjKvKwKIKwKIKwKtKxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbvHaPaPaPaPaPaPHeHxHeHxKtKuKuKuKuKuKvKjKjKjKjKjKjKjLhKjKjKjKjKjKkKjKvKwKwKwKwKwKtHxHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPvGwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbwbvHaPaPaPaPaPaPHeHxHeLiHeLjLjLjLjLjHeKiKjKjKjKjKjKjLhKjKjKjKjKjKkKiHeLjLjLjLjLjHeLiHeHxHeaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP @@ -2593,45 +2648,45 @@ aRaRaRaRaRaRaRaRaRaRaROgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgOgaRaRaRaRaRaRaRmd aRmjmjmjmjmjmjmjmjmjmjOvOvOvOvOvOgOwOxOyOgOvOvOvOvOvOvOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMtMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMALZLZLZLZMBOEOEMBLZLZLZLZMDMLMPMPMLMfOFOqOqOqOFMfOGMPMPMPMPOHMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjmjmjmjmjmjmjmjmjmjOvOvOvOvOvOgOIOxOxOgOvOvOvOvOvOvOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJMgMfMLMPMPMLMfOKOLOqOqOqMfOtMPMPOtMPOtMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjmjmjmjmjmjOvOvOvOgOgOgOgOvOgOgOgOgOMOgOgOgOgOgOgOgOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJOJMfONNLNLONMfNBNCOONBNCMfOGMPOtMBLZLZOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR -aRmjmjmjOvOvOvOvOPOQOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJOJMfORORORORMfOSOqOqOqOSMfOtMPOGMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR -aRmjmjmjOvOvOxOTOPOTOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOUOVOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPNdMuMgOWOXMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfOYOZPaMfOJOJOJOJOJOJOJOJOJOJOJOJMAMBNBNCMBMDOqOqOqOqOqMfOGMPOtMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR -aRmjmjmjOvOvOPOTOPOvOvOvOgOgOgOgOMOgOgOgOgOMOgOxOxOxOMPbPcOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPOhLZLZLZLZNiLXLXLXNiLXLXLXNiLXLXLXNiLXLXLXNiMeMeMeMfOJOJOJOJOJOJOJOJOJOJOJMgMfaPaPaPaPMfOSOqOSOqOSMfOtMPPdOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR +aRmjmjmjOvOvOvOvOPOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPMJMuMgMgMgMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfMPMPMPMfOJOJOJOJOJOJOJOJOJOJOJOJMfORORORORMfOSOqOqOqOSMfOtMPOGMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR +aRmjmjmjOvOvOxOPOPOPOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOxOgOUOVOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPNdMuMgOWOXMfOzOzOzOAOBOBOBOAOCOCOCOAODODODMfOYOZPaMfOJOJOJOJOJOJOJOJOJOJOJOJMAMBNBNCMBMDOqOqOqOqOqMfOGMPOtMfaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR +aRmjmjmjOvOvOPOPOPOvOvOvOgOgOgOgOMOgOgOgOgOMOgOxOxOxOMPbPcOvOvOvmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPOhLZLZLZLZNiLXLXLXNiLXLXLXNiLXLXLXNiLXLXLXNiMeMeMeMfOJOJOJOJOJOJOJOJOJOJOJMgMfaPaPaPaPMfOSOqOSOqOSMfOtMPPdOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjmjmjOvOPOPOvOvOvOvOvOvOvOvOgOxOxOIOgPeOxOgOxOxOxOMPbPfOvOvOgmjmjaRmjmjmjmjmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPOhLXLXLXLXLXLXLXLXLXLXLXLXOuaPaPaPaPOhLZLZLZLZLZNiLZLZOuaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjmjmjOvOPOvOvOvmjmjOvOgOgOgOgPgOxOwOgPgOwOgOxOxOxOgPbPbPbPhOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR -aRmjmjmjOvPiPiOvmjmjmjOvPjPkPkOgOgOgOgOgOgOgOgOxOxOxOgPbPbPbPlOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR +aRmjmjmjOvOPOPOvmjmjmjOvPjPkPkOgOgOgOgOgOgOgOgOxOxOxOgPbPbPbPlOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNSNRaR aRmjOvOPOPOPOPOvOvmjmjOvPmPnPmOMOxOxOxOxOxOxOxOxOxOxOgPoPpPqOgOgmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRaR -aRmjPrOPOPOPOPPsOvmjmjOgPtPmPmOMOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR -aRmjPuPvPwOPPxOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjPAOPPBOPPwOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjOvOPPFOPPGOPOPmjmjaPaPmjOgOxOwOxOxOxOxOgPDPDPHPDPDOgOxOxOxOxOwOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjOvPIPJOPOPPKOPmjmjaPaPmjOgOxOxOxOxOxOxOMPDPDPLPDPDOMOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjOvOvOPOPOPOPOvmjmjmSaPaPOgOxOxOgPMPNPOOgPDPPPQPDKmOgPMPNPOOgOxOxOgaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjPrOPOPOPOPOPOvmjmjOgPsPmPmOMOxOxOxOxOxOxOxOxOxOxOgOvOvOvOvOvmjmjaRmjmjmjaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaRaR +aRmjPuPvPtOPPtOPOPmjmjOgPyPzOgOgOgOgOgOgOgOgOgOgOMOgOgOgOgOgOgOgOgOgOgmjmjaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjPAOPPwOPPtOPOPmjmjOvOvOvOgOxOxOxOxOxOxOgPCPDPDPDPEOgOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjOvOPPwOPPxOPOPmjmjaPaPmjOgOxOwOxOxOxOxOgPDPDPHPDPDOgOxOxOxOxOwOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjOvPIOPOPOPPKOPmjmjaPaPmjOgOxOxOxOxOxOxOMPDPDPLPDPDOMOxOxOxOxOxOxOgmjaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjOvOvOPOPOPOPOvmjmjmSaPaPOgOxOxOgPMPNPOOgPDPPPBPDKmOgPMPNPOOgOxOxOgaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvOvOvOvPRPSOvmjmTmSaPaPOgOxOxOgaPaPaPOgOgPMPNPOOgOgaPaPaPOgOxOxOgaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjOvOvOvOvOvOvmjaPaPaPaPaPPTPUPUPVaPaPaPaPaPaPaPaPaPaPaPaPaPPTPUPUPVaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjmjmjmjmjaPaPaPaPPTPWPXPVaPaPaPaPaPaPaPaPaPaPaPaPaPPTPWPXPVaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjmjmjmjaPaPaPaPaPPTPWPXPVaPaPaPaPaPaPaPaPaPaPaPaPaPPTPWPXPVaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjmjmjmjaPaPaPaPaPPYPUPUPZaPaPaPPYaPaPaPaPaPPZaPaPaPPYPUPUPZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPaPaPaPaPQaQbQcQaaPaPaPQaQdQeQeQeQfQaaPaPaPQaQgQhQaaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPaPaPaPaPQaQiQjQaaPaPPYQaQaQkQlQmQnQaPZaPaPQaQoQpQaaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPaPaPaPaPQaQqQrQaaPaPQaQaQsQtQuQtQvQaQaaPaPQaQwQxQaaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPaPaPaPaPQaQyQaQaQaQaQaQzQAQAQAQAQAQBQaQaQaQaQaQCQaaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPaPaPaPaPQaQDQEQFQGQHQaQIQAQAQAQAQAQIQaQJQKQLQMQNQaaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjaPaPaPaPaPaPaPaPaPaPaPQaQOQPQPQPQQQaQRQSQTQUQRQSQTQaQVQPQPQWQOQaaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFPGQcPFaPaPaPPFQdQeQeQeQfPFaPaPaPPFQgPJPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQiQjPFaPaPPYPFPFQkPQQmQaPFPZaPaPPFQoQpPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQqQrPFaPaPPFPFQsQtQuQtQvPFPFaPaPPFQwQxPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQyPFPFPFPFPFQzQAQAQAQAQAQBPFPFPFPFPFQCPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPaPaPaPaPPFQDQEQFQGQHPFQIQAQAQAQAQAQIPFQJQKQLQMQNPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjaPaPaPaPaPaPaPaPaPaPaPPFQOQPQPQPQQPFQRQSQTQUQRQSQTPFQVQPQPQWQOPFaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjaPaPaPaPaPaPaPaPaPaPaPQXQOQPQPQPQPQUQAQAQAQAQAQAQAQUQPQPQYQPQOQXaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPQaRcRdQAQAQAQAReQaQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPRhRaQPQPQaRiQaQaQaRjTERlQaQaQaRiQaRmRnRoRhaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPPYQaTFRqRqQaRrRsRrQXRtRuRvQXRwRxRyQaRzRATGQaPZaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRDRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPmjmjaPaPaPREQaRFRFQaQaRrRrRrQZRtRkRvQZRyRyRGQaQaRFRFQaRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRTRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPmjmjaPaPaPaPRERURURHQaRVRWRrRhRXQARXRhRyRyRYQaRERURURHaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKRZSaSbSaScRSRSSdRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPQaRrRrRrQaQaQUQaQaSeRySfQaaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSgSgRKRKRKShRCSaSaSiRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPQaRrRrSjQaSkQASlQaRyRySmQaaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSnRCSoSoSpRCSqSrSsStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPQaQaSuRrQaSvQASwQaSxSyQaQaaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSzSzRKRKRKSARCSoSoSoSBSoSoSoSCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPREQaQaQaQaSDSESFQaQaQaQaRHaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSGRCSHSISJRCSKSLSMStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPREQaRFRFRFRFRFQaRHaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKShRCRCRCRCRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPQZRaQPRbRPQPPFRcRdQAQAQAQARePFQPRfQPRgQOQZaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPRhRaQPQPPFRiPFPFPFRjTERlPFPFPFRiPFRmRnRoRhaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPPYPFTFRqRqPFRrRsRrQXRtQlRvQXRwRxRyPFRzRATGPFPZaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRCRCRCRCRCRCRCRCRCRCRCRCRDRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPmjmjaPaPaPREPFRFRFPFPFRrRrRrQZRtRkRvQZRyRyRGPFPFRFRFPFRHaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRIRJRKRLRMRNRCROTHRQRCRRRSRTRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPmjmjaPaPaPaPRERURURHPFRVQnRrRhRXQARXRhRyRyRYPFRERURURHaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKRZSaSbSaScRSRSSdRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPPFRrRrRrPFPFQUPFPFSeRySfPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSgSgRKRKRKShRCSaSaSiRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPPFRrRrSjPFSkQASlPFRyRySmPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSnRCSoSoSpRCSqSrSsStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPPFPFSuRrPFSvQASwPFSxSyPFPFaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCSzSzRKRKRKSARCSoSoSoSBSoSoSoSCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPREPFPFPFPFSDSESFPFPFPFPFRHaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKSGRCSHSISJRCSKSLSMStRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjmjmjaPaPaPaPmjmjaPaPaPaPaPaPaPaPREPFRFRFRFRFRFPFRHaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKShRCRCRCRCRCRCRCRCRCRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPRERURURURURURHaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSOSPSQRKSRSSSTSRSUSVSWSWSVRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNSXSYSQRKSZSZSZSZTaSaSaSaSaRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTbTcSQRKSZSZSZSZSZSZSZSZSZRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP -aRmjmjmjaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTdTeSQRKSZSZSZSZSZSZTfTgThRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP +aRmjmjmjaPaPaPaPaPaPaPaPaPaPmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKSNTdTTSQRKSZSZSZSZSZSZTfTgThRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCRKRKRKRKRKRKSZSZSZSZSZSZSZSZSZRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjmjmjaPaPaPaPaPaPaPmjmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTiTjTjTkTjTjTjTkTjTjTjTkTjTjTlRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP aRmjaPaPaPaPaPaPaPaPaPaPmjmjmjaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPmdaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPRCTmTnTnSUToTpToSUTqTqTrSUTsTtRSRCaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaP diff --git a/maps/polaris-3.dmm b/maps/polaris-3.dmm index 6f62e83d812..850b38a5053 100644 --- a/maps/polaris-3.dmm +++ b/maps/polaris-3.dmm @@ -5,7 +5,7 @@ "ae" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/derelict/ship) "af" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/derelict/ship) "ag" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"ah" = (/obj/machinery/sleeper,/obj/machinery/light{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"ah" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "ai" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/derelict/ship) "aj" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/derelict/ship) "ak" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/derelict/ship) @@ -40,7 +40,7 @@ "aN" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "aO" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "aP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/derelict/ship) -"aQ" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"aQ" = (/obj/machinery/light{dir = 1},/obj/machinery/sleeper{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "aR" = (/obj/machinery/door/window,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "aS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "aT" = (/obj/structure/lattice,/turf/space,/area/space) @@ -50,33 +50,33 @@ "aX" = (/obj/structure/table/standard,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "aY" = (/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,/turf/simulated/shuttle/plating,/area/derelict/ship) "aZ" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"ba" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 4},/area/space) -"bb" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 1},/area/space) -"bc" = (/turf/simulated/shuttle/wall{icon_state = "swall_straight"; dir = 4},/area/space) -"bd" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 2},/area/space) +"ba" = (/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bb" = (/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/bed/padded,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bc" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bd" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat) "be" = (/obj/structure/table/standard,/obj/item/device/analyzer,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bf" = (/obj/structure/bed/chair{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bg" = (/obj/machinery/door/airlock/glass{name = "Living Module"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bh" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bi" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 8},/area/space) -"bj" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 8},/area/space) -"bk" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) -"bl" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 1},/area/space) -"bm" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 4},/area/space) +"bi" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat) +"bj" = (/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/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat) +"bk" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/tcomsat) +"bl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/tcomsat) +"bm" = (/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/tcomsat) "bn" = (/obj/machinery/door/window/northright,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bo" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"bo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/tcomsat) "bp" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"bq" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) +"bq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat) "br" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/derelict/ship) "bs" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/derelict/ship) -"bt" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 2},/area/space) -"bu" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/space) -"bv" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_c"; dir = 4},/area/space) +"bt" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/tcomsat) +"bu" = (/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/machinery/camera/network/telecom{c_tag = "Telecoms - Solar North"; dir = 1},/turf/simulated/floor/airless,/area/tcomsat) +"bv" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/tcomsat) "bw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/derelict/ship) "bx" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"by" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 1},/area/space) -"bz" = (/turf/simulated/shuttle/wall{icon_state = "swall_t"; dir = 2},/area/space) -"bA" = (/turf/simulated/shuttle/wall{icon_state = "swall_s"; dir = 8},/area/space) +"by" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/tcomsat) +"bz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/tcomsat) +"bA" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/airless,/area/tcomsat) "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) @@ -101,18 +101,18 @@ "bW" = (/obj/structure/table/standard,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "bX" = (/turf/simulated/shuttle/wall{tag = "icon-swall_t"; icon_state = "swall_t"},/area/derelict/ship) "bY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"bZ" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) -"ca" = (/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/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space) -"cb" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) -"cc" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless,/area/space) -"cd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space) -"ce" = (/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/space) -"cf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/space) -"cg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space) -"ch" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless,/area/space) -"ci" = (/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/machinery/camera/network/telecom{c_tag = "Telecoms - Solar North"; dir = 1},/turf/simulated/floor/airless,/area/space) -"cj" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless,/area/space) -"ck" = (/turf/simulated/wall/r_wall,/area/space) +"bZ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless,/area/tcomsat) +"ca" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat) +"cb" = (/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/tcomsat) +"cc" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/tcomsat) +"cd" = (/obj/machinery/power/solar,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/tcomsat) +"ce" = (/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/tcomsat) +"cf" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar West"; dir = 8},/turf/simulated/floor/airless,/area/tcomsat) +"cg" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/tcomsat) +"ch" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar East"; dir = 4},/turf/simulated/floor/airless,/area/tcomsat) +"ci" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/tcomsat) +"cj" = (/turf/simulated/floor/airless,/area/tcomsat) +"ck" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/tracker,/turf/simulated/floor/airless,/area/tcomsat) "cl" = (/turf/simulated/wall/r_wall,/area/tcomsat) "cm" = (/turf/simulated/wall/r_wall,/area/tcommsat/computer) "cn" = (/obj/structure/lattice,/turf/space,/area/tcomsat) @@ -123,12 +123,12 @@ "cs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/valve/digital/open{dir = 4; name = "Mixed Air Outlet Valve"},/turf/simulated/floor/plating,/area/tcomsat) "ct" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/meter,/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/plating,/area/tcomsat) "cu" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/tcomsat) -"cv" = (/turf/simulated/floor/airless,/area/tcommsat/computer) +"cv" = (/obj/item/weapon/bedsheet/green,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer) "cw" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/computer) -"cx" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/tiled,/area/tcommsat/computer) "cy" = (/obj/machinery/camera/network/telecom{c_tag = "Telecoms Lounge"},/turf/simulated/floor/tiled,/area/tcommsat/computer) -"cz" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/tiled,/area/tcommsat/computer) -"cA" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cz" = (/obj/item/weapon/bedsheet/brown,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer) +"cA" = (/obj/item/weapon/bedsheet/red,/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer) "cB" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/tiled/dark,/area/tcommsat/computer) "cC" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/tcomsat) "cD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/tcomsat) @@ -157,7 +157,7 @@ "da" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer) "db" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "dc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor/tiled,/area/tcommsat/computer) -"dd" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/tcommsat/computer) +"dd" = (/obj/item/weapon/bedsheet/orange,/obj/machinery/light{dir = 8},/obj/structure/bed/padded,/turf/simulated/floor/tiled,/area/tcommsat/computer) "de" = (/obj/machinery/firealarm{dir = 4; pixel_x = 26},/turf/simulated/floor/tiled,/area/tcommsat/computer) "df" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/tcomsat) "dg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/tcomsat) @@ -194,10 +194,9 @@ "dL" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/tcommsat/computer) "dM" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/tiled,/area/tcommsat/computer) "dN" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/computer) -"dO" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/space) -"dP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless,/area/space) -"dQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/airless,/area/space) -"dR" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/airless,/area/space) +"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) "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) @@ -220,7 +219,6 @@ "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/power/solar,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) "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) @@ -233,7 +231,6 @@ "ey" = (/obj/machinery/airlock_sensor/airlock_interior{frequency = 1381; id_tag = "server_access_in_sensor"; name = "interior sensor"; pixel_y = 25},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "ez" = (/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "eA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"eB" = (/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/space) "eC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) "eD" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/space,/area/tcomsat) "eE" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -241,8 +238,6 @@ "eG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat) "eH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat) "eI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/tcomsat) -"eJ" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/airless,/area/space) -"eK" = (/obj/machinery/power/solar,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space) "eL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcomsat) "eM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/space,/area/tcomsat) "eN" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -266,9 +261,6 @@ "ff" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/tcomsat) "fg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/tcomsat) "fh" = (/obj/machinery/telecomms/hub/preset,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) -"fi" = (/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/space) -"fj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/space) -"fk" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar West"; dir = 8},/turf/simulated/floor/airless,/area/space) "fl" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/tcomsat) "fm" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fn" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -285,8 +277,6 @@ "fy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/tcomsat) "fz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/tcomsat) "fA" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/tcomsat) -"fB" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/camera/network/telecom{c_tag = "Telecoms - Solar East"; dir = 4},/turf/simulated/floor/airless,/area/space) -"fC" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/airless,/area/space) "fD" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fE" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) "fF" = (/obj/machinery/telecomms/processor/preset_three,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber) @@ -384,7 +374,6 @@ "ht" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hu" = (/obj/machinery/bluespace_beacon,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/tcommsat/entrance) "hv" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"hw" = (/turf/simulated/floor/airless,/area/space) "hx" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable/yellow,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hy" = (/obj/machinery/power/smes/buildable{charge = 2.5e+006; input_attempt = 1; input_level = 250000; inputting = 1; output_level = 250000; RCon_tag = "Telecommunications Satellite"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor/plating,/area/tcommsat/powercontrol) @@ -393,13 +382,9 @@ "hC" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) "hD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) "hE" = (/obj/item/weapon/cell,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) -"hF" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/tracker,/turf/simulated/floor/airless,/area/space) -"hG" = (/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/space) "hH" = (/obj/structure/closet/malf/suits,/turf/simulated/floor/tiled/dark,/area/tcommsat/entrance) "hI" = (/obj/machinery/door/airlock/hatch{name = "Power Control"; req_access = list(61)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/tcommsat/powercontrol) "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) -"hK" = (/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/space) -"hL" = (/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/space) "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) @@ -454,19 +439,19 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacadaeaaaaaaaaaaaaaaabaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacafagagahagaiajadaeaaaaaaaaabajakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacafagagaQahaiajadaeaaaaaaaaabajakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalamagagagagagaganaiaoaeaaaaabapaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoajasagagagagatagagagauaoaeabapavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaoafawaiacadaxayazacacaAajajajalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBafagaCagaDaBaEagaFagagagagagagaGavaHacaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagagagagaDaBagagagagagagagagagauacaoaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJagagagagaKaBagagaLaMacacasagaNaBaOaiajadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaBagaQaRaBagagaBaSagagaiaoaeaaabadacacacacacacacadaeaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaUaDagagagaVagagaBaWaXaNaBagagaYagagagagaiaoacaoafagagagaZagagagaialaTaaaababbbcbcbcbcbcbcbcbbbdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbebfagagagaMagagaBagagagaBagagbgagagagagagbhagbhagagagagagagagagagbhaTaaaTbibjbkbkbkbkbkbkbkblbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaDaDagagagaVagagaBbnboagaBagagaYagagagagaLaoacaoasagagagagagagbpaLalaTaTaTbqbkbkbkbkbkbkbkbkbkbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaiacacaMafagagaBagagagaLaobraabsajacacacacacacacajbraaaaaTbibtbkbkbkbkbubkbkbvbmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwagagagagbxauasagagagagagagagagaBagaLadajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaabybzbcbcbcbcbcbcbcbzbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaBagbaaRaBagagaBaSagagaiaoaeaaabadacacacacacacacadaeaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaUaDagagagaVagagaBaWaXaNaBagagaYagagagagaiaoacaoafagagagaZagagagaialaTaaaaabadacacacacacacacadaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPbebfagagagaMagagaBagagagaBagagbgagagagagagbhagbhagagagagagagagagagbhaTaaaTauafagagagagagagagaialaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaDaDagagagaVagagaBbnbbagaBagagaYagagagagaLaoacaoasagagagagagagbpaLalaTaTaTbhagagagagagagagagagbhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPagagagagagaBagagaiacacaMafagagaBagagagaLaobraabsajacacacacacacacajbraaaaaTauasagagagagbcagagaLalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwagagagagbxauasagagagagagagagagaBagaLadajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaabsajacacacacacacacajbraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBbBbCbDagaLaoajacacadasagagagagauacaobraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBagbEbFaLaoafbGbHbIaialbJbKaFbLaGavbMadakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsacadacaoafagagagagagaBagagaLadalavavaqaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -527,67 +512,67 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaaaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZcacbaTaTaTbZcacbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZcacbaTaTaTbZcacbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZcacbaaaTaabZcacbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaacccdcdcecdcdcfaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaaaaaaaaaaaTaaaaaaaaaaaTaaaacgaaaaaTaaaaaaaaaaaTaaaaaaaaaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaachcdcdcdcdcdcdcdcdcdcdcdcdcdcicdcdcdcdcdcdcdcdcdcdcdcdcdcjaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaachcfckckckckckckckckckckckckckckckckckckckckckckckckckckckcccjaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaachcfckckclclclclclclclclclckckckckckckckckckcmcmcmcmcmcmcmcmckcccjaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckckclcncocpcqcrcsctcuclcmcmcmcmcmcmcmcmcvcmcxcwczcycAcNcmckckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclcncncncCcDcEcFcGcHcIcmcBcKcJcMcLcOcmcvcmcPcNcNcNcNcNcmckckcgaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcgckclcocncocRcScTcUcVcWcXcmcYcZdadbdccQcmcvcmddcNcNcNcNdecmckckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclcocncocodfdgdhdidjdkdldmdncNcNdodpcmcvcmdrdqdtdsdvducmckckcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgckclcocncocRdxdwdzdAdAdAdBdCdDdEdDdFdGdGdGcmdIdHdKdJdMdLdNdOdOdPdQdRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaacgckclcocncocRdSdTdUdVdVdVcmdWdYdXcNdZeaebeccmcmcmedcmcmcmcmckckcgaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaacgckclcneecnefdScIdGdGdGdGdGegeheiejekdGdGeldGdGefemencneecnclckcgaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeoeoeoeoeoeoeoeoeoeoaaaacgckclcocncocRepeqdGererereseteueverewexeyezeAdGefemcXcocncoclckcccjaaaaeoeoeoeoeoeoeoeoeoeoaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTeBeBeBeBeBeBeBeBeBeBcjaTcgckclcocncocReCeDdGerezezezeEezezezeEezezezerdGefemcXeGeFeHclckckcgaTcheJeJeJeJeJeJeJeJeJeJaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeKeKeKeKeKeKeKeKeKeKcgaacgckclcocncocReIeMdGereOeNePeEezerezeEezeReSerdGeTeUcXeLeWeXeQclckcgaacgeKeKeKeKeKeKeKeKeKeKaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaacgaacgckclcocncocReVeZdGerezezezeEezeYezeEezezezerdGfbfcfdfafffgfeclckcgaacgaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTfifjfkckclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclckfBfjfCaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaacgaacgckclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclckcgaacgaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeoeoeoeoeoeoeoeoeoeocgaacgckclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclckcgaacgeoeoeoeoeoeoeoeoeoeoaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTeBeBeBeBeBeBeBeBeBeBcfaTcgckclcocncocRdScXdGerfRfQfTfSezezezfUfWfVfXerdGcRemcXfYeFeHclckckcgaTcceJeJeJeJeJeJeJeJeJeJaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaeKeKeKeKeKeKeKeKeKeKaaaacgckclcocncocRdScXdGerererfZerergaerergberererdGcRemcXcocncoclckchcfaaaaeKeKeKeKeKeKeKeKeKeKaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaacgckclcneecnefeVcIdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGefemcIcneecnclckcgaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaacgckclcocncocReVgdgedkdkgfgggcgighglgjgmgfdkdkgngoemcXcocncoclckcgaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgckclcocncocRgpdwdwdwdwgqgsgsgsgtgrgrgrgydydydydygucXcocngvclckcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclgwcncocodVdVgxdVdVgfgCgzgkgAgkgzgDgfdVdVdVdVdVcococncoclckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcgckclcocncococococncogBgfgfgfgfgIgfgfgfgfgBcococococococncoclckcgaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckclcncncncncncncncngKgJgJgBgFgGgHgBgJgJgMcncncncncncncncnclckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacgckckclcncocococococlgBgJgQgPgEgGgEgRgTgJgBclcocococococnclckckcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacccjckckclclclclclclclgBgBgBgBgLgUgLgBgBgBgBclclclclclclclckckchcfaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaacccjckgNgOgNgNgNgNgNgNgNgBgBgJgGgXgBgBgBckckckckckckckckckchcfaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaacccjgNhcgYgShdhggVgWgNgBgBhlgGgJgBgBgBchcdcdcdcdcdcdcdcdcfaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaacggNhthngNgZhahahbgNgBhvhAhehDhCgBgBcgaaaaaaaaaaaaaaaTaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaacggNhhgNgNhihjhjhkgNgJhEgEhmgEgJhHgBcgaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacchohphqgNhrhjhjhshIhDhfhfhugEgEhJgBcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaThwhwcghwgNhxhyhziehBifgJgEgEgEgJhHgBcgaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaahwhwcghwgNgNgNgNgNgNgBiggJgJgJihgBgBcgaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahFcdhGcdcdcdcdcdcdcjgBgBijiiikgBgBchcfaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaTaaaacccjgBgBgBgBgBchcfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYaaaacccdcdhKcdcdcfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaacgaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcdcdhGcdcdcjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZhLcbaTaTaTbZhLcbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaTaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbZhLcbaTaTaTbZhLcbaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabZhLcbaaaaaabZhLcbaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaaaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbdbjbiaTaTaTbdbjbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbdbjbiaTaTaTbdbjbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabdbjbiaaaTaabdbjbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaablbkbkbmbkbkboaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaaaaaaaaaaaTaaaaaaaaaaaTaaaabqaaaaaTaaaaaaaaaaaTaaaaaaaaaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaabtbkbkbkbkbkbkbkbkbkbkbkbkbkbubkbkbkbkbkbkbkbkbkbkbkbkbkbvaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaabtboclclclclclclclclclclclclclclclclclclclclclclclclclclclblbvaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabtboclclclclclclclclclclclclclclclclclclclclcmcmcmcmcmcmcmcmclblbvaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclclcncocpcqcrcsctcuclcmcmcmcmcmcmcmcmcvcNcxcwczcycAcNcmclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclcncncncCcDcEcFcGcHcIcmcBcKcJcMcLcOcmcPcNcNcNcNcNcNcNcmclclbqaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbqclclcocncocRcScTcUcVcWcXcmcYcZdadbdccQcmddcNcNcNcNcNcNdecmclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclcocncocodfdgdhdidjdkdldmdncNcNdodpcmdrdqdqdqdtdsdvducmclclbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqclclcocncocRdxdwdzdAdAdAdBdCdDdEdDdFdGdGdGcmdIdHdKdJdMdLdNbybybzbZbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaabqclclcocncocRdSdTdUdVdVdVcmdWdYdXcNdZeaebeccmcmcmedcmcmcmcmclclbqaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaabqclclcneecnefdScIdGdGdGdGdGegeheiejekdGdGeldGdGefemencneecnclclbqaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacaaaaabqclclcocncocRepeqdGererereseteueverewexeyezeAdGefemcXcocncoclclblbvaaaacacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbbvaTbqclclcocncocReCeDdGerezezezeEezezezeEezezezerdGefemcXeGeFeHclclclbqaTbtccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdbqaabqclclcocncocReIeMdGereOeNePeEezerezeEezeReSerdGeTeUcXeLeWeXeQclclbqaabqcdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocReVeZdGerezezezeEezeYezeEezezezerdGfbfcfdfafffgfeclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaTaTaTaTaTaTaTaTcecgcfclclcncncnefdSfldGfmfofnfpewfqfhfxewfsfrftfudGfvfwdyfIfyfzfAclclchcgciaTaTaTaTaTaTaTaTaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaaaTaaaaaaaaaaaaaTaabqaabqclclcocncocRdScXdGerfEfDezeEezerezeEezfFfGerdGcRemfHfLfJfKfMclclbqaabqaaaTaaaaaaaaaaaaaTaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacacacacacacacacacacabqaabqclclcocncocReVcXdGerezezezeEezerezeEezezezerdGcRemcXeLfNfOfPclclbqaabqcacacacacacacacacacaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcbcbcbcbcbcbcbcbcbcbboaTbqclclcocncocRdScXdGerfRfQfTfSezezezfUfWfVfXerdGcRemcXfYeFeHclclclbqaTblccccccccccccccccccccaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacdcdcdcdcdcdcdcdcdcdaaaabqclclcocncocRdScXdGerererfZerergaerergberererdGcRemcXcocncoclclbtboaaaacdcdcdcdcdcdcdcdcdcdaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaaaTaaaaaabqclclcneecnefeVcIdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGefemcIcneecnclclbqaaaaaaaaaTaaaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYbYaaaabqclclcocncocReVgdgedkdkgfgggcgighglgjgmgfdkdkgngoemcXcocncoclclbqaaaaaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqclclcocncocRgpdwdwdwdwgqgsgsgsgtgrgrgrgydydydydygucXcocngvclclbqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclgwcncocodVdVgxdVdVgfgCgzgkgAgkgzgDgfdVdVdVdVdVcococncoclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbqclclcocncococococncogBgfgfgfgfgIgfgfgfgfgBcococococococncoclclbqaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclcncncncncncncncngKgJgJgBgFgGgHgBgJgJgMcncncncncncncncnclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabqclclclcncocococococlgBgJgQgPgEgGgEgRgTgJgBclcocococococnclclclbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaablbvclclclclclclclclclgBgBgBgBgLgUgLgBgBgBgBclclclclclclclclclbtboaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaaaablbvclgNgOgNgNgNgNgNgNgNgBgBgJgGgXgBgBgBclclclclclclclclclbtboaaaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaablbvgNhcgYgShdhggVgWgNgBgBhlgGgJgBgBgBbtbkbkbkbkbkbkbkbkboaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaaaabqgNhthngNgZhahahbgNgBhvhAhehDhCgBgBbqaaaaaaaaaaaaaaaTaaaabYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYaabqgNhhgNgNhihjhjhkgNgJhEgEhmgEgJhHgBbqaabYbYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaablhohphqgNhrhjhjhshIhDhfhfhugEgEhJgBbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTcjcjbqcjgNhxhyhziehBifgJgEgEgEgJhHgBbqaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaacjcjbqcjgNgNgNgNgNgNgBiggJgJgJihgBgBbqaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackbkdObkbkbkbkbkbkbvgBgBijiiikgBgBbtboaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaTaaaablbvgBgBgBgBgBbtboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYaaaablbkbkdPbkbkboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaabqaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtbkbkdObkbkbvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbddQbiaTaTaTbddQbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaTaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaTbddQbiaTaTaTbddQbiaTbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYaabddQbiaaaaaabddQbiaabYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTaaaaaaaaaaaTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYbYbYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-4.dmm b/maps/polaris-4.dmm index 96b900afc07..5b7187b4393 100644 --- a/maps/polaris-4.dmm +++ b/maps/polaris-4.dmm @@ -19,9 +19,9 @@ "as" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "at" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "au" = (/obj/machinery/light,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) -"av" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_main_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access = list(10)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/hallway) +"av" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_main_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = -25; req_access = list(10)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "aw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) -"ax" = (/turf/simulated/wall/r_wall,/area/mine/unexplored) +"ax" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(10)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "ay" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) "az" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eoutpost_main_outer"; locked = 1; name = "Engineering Outpost"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) "aA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) @@ -249,7 +249,7 @@ "eO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) "eP" = (/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,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) "eQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_inner"; locked = 1; name = "Engineering Dock Airlock"},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) -"eR" = (/turf/simulated/floor/tiled,/area/space) +"eR" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) "eS" = (/obj/machinery/computer/crew,/turf/simulated/floor/tiled,/area/outpost/engineering/rest) "eT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/solars) "eU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/engineering/solars) @@ -275,9 +275,8 @@ "fo" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_outer"; locked = 1; name = "Engineering Dock Airlock"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "edock_airlock"; name = "exterior access button"; pixel_x = -26; pixel_y = 0; req_access = list(10)},/turf/simulated/floor/tiled,/area/outpost/engineering/hallway) "fp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/engineering/hallway) "fq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/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/outpost/engineering/hallway) -"fr" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/hallway) -"fs" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(10)},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solars) -"ft" = (/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/hallway) +"fr" = (/obj/machinery/light{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) +"fs" = (/obj/machinery/light{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/mine/explored) "fu" = (/turf/simulated/wall,/area/outpost/engineering/hallway) "fv" = (/turf/space,/area/shuttle/constructionsite/site) "fw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/mine/explored) @@ -293,8 +292,6 @@ "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) -"fJ" = (/obj/machinery/light{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/outpost/engineering/hallway) -"fK" = (/obj/machinery/light{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/outpost/engineering/hallway) "fL" = (/obj/structure/grille,/turf/space,/area/space) "fM" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "fN" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) @@ -490,37 +487,37 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababab aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababahahahahahahabababababababahahahahahananananananananacahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababaqarasasasataqahahahabababababahahahahajanananahahahananananahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababauaqavaqauaqawaqaqahahahababababahahahahahananananananananananahahahahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaxayazaAaBaCaDaEaqaqahahahahajajahahanahananaFananananananananahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaGaGaGaxaHaIaJaKaCaCaCaqaqaqaqahahananananahanahananananananananananacahahahahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaLaLaGaMaNaxaOaPaQaKaRaSaCaTaCaqaqaqahaUananahananananananahahanananananajahahahabababahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaLaLaLaVaWaXaxayaYaAaZbababbbcaCaCaqaqaqbdananananananananananahanananananajahahahabababahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababaLaLbeaLaGbfaGaxbgbhbiaxbjbkbabablaCaCaqahajajacahanahananaFananananananananacahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaGayazaAaBaCaDaEaqaqahahahahajajahahanahananaFananananananananahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaGaGaGaGaHaIaJaKaCaCaCaqaqaqaqahahananananahanahananananananananananacahahahahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaLaLaGaMaNaGaOaPaQaKaRaSaCaTaCaqaqaqahaUananahananananananahahanananananajahahahabababahahahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaLaLaLaVaWaXaGayaYaAaZbababbbcaCaCaqaqaqbdananananananananananahanananananajahahahabababahahahahahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababaLaLbeaLaGbfaGaGbgbhbiaCbjbkbabablaCaCaqahajajacahanahananaFananananananananacahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababaLbPbnbobpbqbrbsbtbubvbwbxbybabababzaCaqabababahahahahacananananananananahahahahahahabababababababahahahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLaLbAbBbmbnbCbDaLbEbFbGaCbHbIbJbKbabLaCaCabababahahahahacajajahahahahahahahahahahababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaLbMbNbOcKbQbQbQaLbRbSbTaCbUbabababababVaCabababahahahahahahahahahahahahahahabababababababababababababahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababaLaLaLaLbWbXaLaLaLaLbYbZcaaCaCcbccbabacdaCaCaCababababababababababababababababababababababababababababahahahabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababaLcecfcgchcicjcjaLckclbFbGcmaCaCaCcncnaCaCcocpcpcpcpcpcpabababababababababababababababababababababababahahababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaqaqaLcqcrcsctcucvcwcxcycAczcPbibYclcBclclcCclclcpcDcEcFcGcpcpababababababababababababababababababababababahahabababababaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababcHcIcIcIcIcIcIcIcJcJcJdfcLcMbOcNcOeGcQaxcRcScTbtbtbtbtcUbtcVcWcXcYcZdadbcpababababababababababababababababababababababahahahaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababcHcIcIcIcIcIcIcIcJcJcJdfcLcMbOcNcOeGcQaGcRcScTbtbtbtbtcUbtcVcWcXcYcZdadbcpababababababababababababababababababababababahahahaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcababababababaqaLdddecsfQdgfRdhcxdidjdkdldmbYdnclclcldoclaIcpdpdqdrdsdtcpabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaLdudvdwdxdydzdzaLckclfPbGdAdBdBdBdCdCdBdBdDcpcpcpdEdFdGcpabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababdHdHdHdHdHdHdHdHdHdHbYbZcadBdBdIdJdKdKdLdBdBdBabcpdMdFdpcpababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababdHdNdOdPdPdQdPdRdHbRbSbTdBdSdTdUdKdKdKdVdBababcpdWdXdYcpababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabahahababababdHdHdHdPdZeaebecdHedbFeedBefdKegdKdKdLdBdBababcpehdXdYcpababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeiejejejejejejekelemdPdZeneoepeqbtereseteuevewdKdKexdBabababcpeyezeAcpabababababababababahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahabdHdHeBdPeCdPdPeDcleEeFdCdKdKeHeReIdBdBababahcpeJeKeLcpabababababababababahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahabdHdHeBdPeCdPdPeDcleEeFdCdKdKeHdKeIdBdBababahcpeJeKeLcpabababababababababahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahdHdHeMeNdPdPeOePeQaAaBdKdKfSeSdBdBabababaheTeUeVeWabababababababahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahdHeXdHeYeZaKfafbfcaKfdfedBffdBabababahaheWfgfheWababababababahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahdHdHdHaKficlfjaKdBdBdBaqaqahahahahahfkfleKfmahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahahaxfnePfofpfqaxaqaqaqahahahahahahfrfsftahahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahahaGfnePfofpfqaGaqaqaqahahahahahaheRaxaqahahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahfufvfvfvfvfvfuahahahahahahahahahahfwahahahahahahahadahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahfrfvfvfvfvfvfrahahadahfxfxfxfxfxahfwahfxfxfxfxfxahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahaheRfvfvfvfvfveRahahadahfxfxfxfxfxahfwahfxfxfxfxfxahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahaqfvfvfvfvfvaqahahadfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahaqfvfvfvfvfvaqahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahfHfvfvfvfvfvaqahahadahahahahahahahfGahahahahfyahahfIahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahfHfHfvfvfvfvfvaqahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfJfufvfvfvfvfvfufKahfyfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfyfuaqaqaqfufyahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfracfvfvfvfvfvacfsahfyfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahfyacaqaqaqacfyahahadahfFfFfFfFfFahfGahfFfFfFfFfFahadahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahadahahahahahahahfGahahahahfyahahfyahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahadahfxfxfxfxfxahfGahfxfxfxfxfxahadahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahadfyfzfAfAfAfAfBfCfBfDfDfDfDfEfyadahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/polaris-5.dmm b/maps/polaris-5.dmm index 39e2da69a1f..c8ca0f7c697 100644 --- a/maps/polaris-5.dmm +++ b/maps/polaris-5.dmm @@ -1046,7 +1046,6 @@ "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" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/space) "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) @@ -1265,7 +1264,7 @@ "yq" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/outpost/engineering/mining/atmospherics) "yr" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/outpost/mining_main/dorms) "ys" = (/obj/structure/mirror{pixel_x = 30; pixel_y = -2},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/freezer,/area/outpost/mining_main/dorms) -"yt" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms) +"yt" = (/obj/item/weapon/bedsheet/brown,/obj/structure/bed/padded,/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms) "yu" = (/obj/machinery/suspension_gen,/obj/effect/floor_decal/corner/purple{dir = 1},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/outpost/research/eva) "yv" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms) "yw" = (/obj/machinery/door/airlock/glass_mining{name = "Mining Outpost Airlock"; req_access = list(48)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/outpost/mining_main/north_hall) @@ -1716,7 +1715,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldlpMpMpMsAtFtGtHpSpRpRpRuducxIpRuducxIpRuducxIpRpRpRtjtKtLtMtjqdqdqdoVoVoVoVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldlpMpMpRpWpRpRpRdlpRtNtOtPpRtQtOyepRtStOtTpRdlpRtUtUtVtUtUqdoVoVoVoVoVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacjWtWdldldldldldldldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldlaaaaaaaaaaaaaaaaaaaaaaaaaadlaadldldldldldldldldldldldldlpRtXygyOpRtXygyOpRubtXEjpRdldldldlueufoVoVoVoVoVacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagNuguhgNdlgNuhuggNdlaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldluidlpRpRpRpRpRpRpRpRpRpRpRpRpRdldldldlueoVoVoVoVdlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagNuguhgNdlgNuhuggNdlaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldlpRpRpRpRpRpRpRpRpRpRpRpRpRdldldldlueoVoVoVoVdlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlugujujujujujujujugdldlaaaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldldldldldldldldldldldldldldldldldldlueoVoVdlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldldldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldldlwaujujujujujujujwadldldldlaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldldldldldldldldldldldldldldldldlukuloVdldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacdldldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadldldlumgNujujujujujujujgNundldldldlaaaaaaaaaaaaaaaaaaaaaaaadldldldldldldldldldldldldldldldldldldldldldldldldldloVueoVdldldlacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 37ac74f7e0e..756f6edce0c 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -128,7 +128,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'fixedLeftWide')}} - {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'fixedLeftWide')}} {{/if}} + {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'fixedLeftWide')}}
@@ -762,128 +762,38 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm {{else data.mode == 48}} -

Mule Control

- {{if data.records.mulebot.active == null || data.records.mulebot.active == 0}} - {{if data.records.mulebot.count == 0}} -

No bots found.

- {{else}} -

Mule List

-
- Select A Mulebot -
-
- {{for data.records.mulebot.bots}} -
- {{:helper.link(value.Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : value.ref}, null, null)}} (Location: {{:value.Location}}) -
- {{/for}} - {{/if}} -
- {{:helper.link('Scan for Bots','gear', {'radiomenu' : "1", 'op' : "scanbots"}, null, null)}} - {{else}} - {{if data.records.mulebot.botstatus.mode == -1}} -

Waiting for response...

- {{else}} -

Status:

-
-
-
- Location: -
-
- {{:data.records.mulebot.botstatus.loca}} -
-
-
-
- Mode: -
-
- - {{if data.records.mulebot.botstatus.mode ==0}} - Ready - {{else data.records.mulebot.botstatus.mode == 1}} - Loading/Unloading - {{else data.records.mulebot.botstatus.mode ==2}} - Navigating to Delivery Location - {{else data.records.mulebot.botstatus.mode == 3}} - Navigating to Home - {{else data.records.mulebot.botstatus.mode ==4}} - Waiting for Clear Path - {{else data.records.mulebot.botstatus.mode ==5 || data.records.mulebot.botstatus.mode == 6}} - Calculating navigation Path - {{else data.records.mulebot.botstatus.mode ==7}} - Unable to locate destination - {{/if}} - -
-
-
-
- Current Load: -
-
- - {{:helper.link(data.records.mulebot.botstatus.load == null ? 'None (Unload)' : data.records.mulebot.botstatus.load + ' (Unload)', 'gear', {'radiomenu' : "1", 'op' : "unload"},data.records.mulebot.botstatus.load == null ? 'disabled' : null, null)}} - -
-
-
-
- Power: -
-
- - {{:data.records.mulebot.botstatus.powr}}% - -
-
-
-
- Destination: -
-
- {{:helper.link(data.records.mulebot.botstatus.dest == null || data.records.mulebot.botstatus.dest == "" ? 'None (Set)': data.records.mulebot.botstatus.dest+ ' (Set)', 'gear', {'radiomenu' : "1", 'op' : "setdest"}, null, null)}} -
-
-
-
- Home: -
-
- {{if data.records.mulebot.botstatus.home == null}} None {{else}} {{:data.records.mulebot.botstatus.home}} {{/if}} -
-
-
-
- Auto Return: -
-
- {{:helper.link(data.records.mulebot.botstatus.retn == 1 ? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : data.records.mulebot.botstatus.retn==1 ? "retoff" : "reton"}, null, null)}} -
-
-
-
- Auto Pickup: -
-
- {{:helper.link(data.records.mulebot.botstatus.pick==1? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : data.records.mulebot.botstatus.pick==1 ? "pickoff" : "pickon"}, null, null)}} -
-
-
-
- Functions: -
-
- {{:helper.link('Stop', 'gear', {'radiomenu' : "1", 'op' : "stop"}, null, null)}} - {{:helper.link('Proceed', 'gear', {'radiomenu' : "1", 'op' : "go"}, null, null)}} - {{:helper.link('Return Home', 'gear', {'radiomenu' : "1", 'op' : "home"}, null, null)}} -
-
-

- {{:helper.link('Return to Bot list', 'gear', {'radiomenu' : "1", 'op' : "botlist"}, null, null)}} - {{/if}} - {{/if}} +

Mule Control

+ {{if data.records.mulebotcount == 0}} +

No bots found.

+ {{else}} +

Mule List

+ {{for data.records.mulebots}} +
+
Mulebot #{{:value.name}}
+
Location: {{:value.location}}
Home: {{:value.home}}
Target: {{:value.target}}
Load: {{:value.load}}
+
+
+
Status:
+
+ {{if value.mode == 0}} + Idle + {{else value.mode == 1}} + Moving + {{else value.mode == 2}} + Unloading + {{else}} + Calculating path + {{/if}} +
+
+
+ {{:helper.link('Go home', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "Home"})}} + {{:helper.link('Set destination', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "SetD"})}} + {{:helper.link('Go', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "GoTD"})}} + {{:helper.link('Stop', null, {'cartmenu' : "1", 'choice' : "MULEbot", 'ref' : value.ref, 'command' : "Stop"})}} +
+ {{/for}} + {{/if}} {{else data.mode == 49}} diff --git a/polaris.dme b/polaris.dme index e8d08c4d960..e30cdd9ed53 100644 --- a/polaris.dme +++ b/polaris.dme @@ -33,6 +33,11 @@ #include "code\__defines\species_languages.dm" #include "code\__defines\targeting.dm" #include "code\__defines\turfs.dm" +#include "code\_compatibility\509\_JSON.dm" +#include "code\_compatibility\509\JSON Reader.dm" +#include "code\_compatibility\509\JSON Writer.dm" +#include "code\_compatibility\509\text.dm" +#include "code\_compatibility\509\type2type.dm" #include "code\_helpers\atmospherics.dm" #include "code\_helpers\datum_pool.dm" #include "code\_helpers\files.dm" @@ -64,6 +69,7 @@ #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" #include "code\_onclick\hud\action.dm" +#include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\gun_mode.dm" #include "code\_onclick\hud\hud.dm" @@ -178,7 +184,6 @@ #include "code\datums\wires\autolathe.dm" #include "code\datums\wires\camera.dm" #include "code\datums\wires\explosive.dm" -#include "code\datums\wires\mulebot.dm" #include "code\datums\wires\particle_accelerator.dm" #include "code\datums\wires\radio.dm" #include "code\datums\wires\robot.dm" @@ -219,7 +224,6 @@ #include "code\game\antagonist\antagonist_print.dm" #include "code\game\antagonist\antagonist_update.dm" #include "code\game\antagonist\alien\borer.dm" -#include "code\game\antagonist\alien\xenomorph.dm" #include "code\game\antagonist\outsider\commando.dm" #include "code\game\antagonist\outsider\deathsquad.dm" #include "code\game\antagonist\outsider\ert.dm" @@ -324,12 +328,14 @@ #include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" -#include "code\game\gamemodes\mixed\bughunt.dm" #include "code\game\gamemodes\mixed\conflux.dm" #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\paranoia.dm" #include "code\game\gamemodes\mixed\traitorling.dm" #include "code\game\gamemodes\mixed\uprising.dm" +#include "code\game\gamemodes\mixed\visitors.dm" #include "code\game\gamemodes\ninja\ninja.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" @@ -416,8 +422,6 @@ #include "code\game\machinery\atmoalter\portable_atmospherics.dm" #include "code\game\machinery\atmoalter\pump.dm" #include "code\game\machinery\atmoalter\scrubber.dm" -#include "code\game\machinery\bots\bots.dm" -#include "code\game\machinery\bots\mulebot.dm" #include "code\game\machinery\camera\camera.dm" #include "code\game\machinery\camera\camera_assembly.dm" #include "code\game\machinery\camera\motion.dm" @@ -548,7 +552,6 @@ #include "code\game\objects\objs.dm" #include "code\game\objects\structures.dm" #include "code\game\objects\weapons.dm" -#include "code\game\objects\effects\aliens.dm" #include "code\game\objects\effects\bump_teleporter.dm" #include "code\game\objects\effects\effect_system.dm" #include "code\game\objects\effects\explosion_particles.dm" @@ -738,6 +741,7 @@ #include "code\game\objects\items\weapons\storage\fancy.dm" #include "code\game\objects\items\weapons\storage\firstaid.dm" #include "code\game\objects\items\weapons\storage\internal.dm" +#include "code\game\objects\items\weapons\storage\laundry_basket.dm" #include "code\game\objects\items\weapons\storage\lockbox.dm" #include "code\game\objects\items\weapons\storage\misc.dm" #include "code\game\objects\items\weapons\storage\secure.dm" @@ -763,7 +767,6 @@ #include "code\game\objects\structures\inflatable.dm" #include "code\game\objects\structures\janicart.dm" #include "code\game\objects\structures\kitchen_spike.dm" -#include "code\game\objects\structures\lamarr_cage.dm" #include "code\game\objects\structures\lattice.dm" #include "code\game\objects\structures\mirror.dm" #include "code\game\objects\structures\mop_bucket.dm" @@ -808,7 +811,6 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" -#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm" #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" #include "code\game\objects\structures\stool_bed_chair_nest\stools.dm" @@ -902,7 +904,6 @@ #include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm" #include "code\modules\admin\secrets\random_events\gravity.dm" #include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm" -#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm" #include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" @@ -1007,6 +1008,7 @@ #include "code\modules\clothing\ears\skrell.dm" #include "code\modules\clothing\glasses\glasses.dm" #include "code\modules\clothing\glasses\hud.dm" +#include "code\modules\clothing\gloves\arm_guards.dm" #include "code\modules\clothing\gloves\boxing.dm" #include "code\modules\clothing\gloves\color.dm" #include "code\modules\clothing\gloves\miscellaneous.dm" @@ -1025,6 +1027,7 @@ #include "code\modules\clothing\masks\voice.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\jobs.dm" +#include "code\modules\clothing\shoes\leg_guards.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\spacesuits\alien.dm" @@ -1085,7 +1088,6 @@ #include "code\modules\detectivework\forensics.dm" #include "code\modules\detectivework\microscope\dnascanner.dm" #include "code\modules\detectivework\microscope\microscope.dm" -#include "code\modules\detectivework\microscope\slides.dm" #include "code\modules\detectivework\tools\crimekit.dm" #include "code\modules\detectivework\tools\evidencebag.dm" #include "code\modules\detectivework\tools\luminol.dm" @@ -1098,10 +1100,13 @@ #include "code\modules\economy\Accounts_DB.dm" #include "code\modules\economy\ATM.dm" #include "code\modules\economy\cash.dm" +#include "code\modules\economy\cash_register.dm" #include "code\modules\economy\economy_misc.dm" #include "code\modules\economy\EFTPOS.dm" #include "code\modules\economy\Events.dm" #include "code\modules\economy\Events_Mundane.dm" +#include "code\modules\economy\price_list.dm" +#include "code\modules\economy\retail_scanner.dm" #include "code\modules\economy\TradeDestinations.dm" #include "code\modules\events\apc_damage.dm" #include "code\modules\events\blob.dm" @@ -1153,6 +1158,9 @@ #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm" #include "code\modules\food\recipes_microwave.dm" +#include "code\modules\games\cah.dm" +#include "code\modules\games\cah_black_cards.dm" +#include "code\modules\games\cah_white_cards.dm" #include "code\modules\games\cardemon.dm" #include "code\modules\games\cards.dm" #include "code\modules\games\spaceball_cards.dm" @@ -1194,7 +1202,6 @@ #include "code\modules\lighting\lighting_system.dm" #include "code\modules\lighting\lighting_turf.dm" #include "code\modules\lighting\~lighting_undefs.dm" -#include "code\modules\liquid\splash_simulation.dm" #include "code\modules\maps\dmm_suite.dm" #include "code\modules\maps\reader.dm" #include "code\modules\maps\swapmaps.dm" @@ -1281,6 +1288,7 @@ #include "code\modules\mob\living\bot\farmbot.dm" #include "code\modules\mob\living\bot\floorbot.dm" #include "code\modules\mob\living\bot\medbot.dm" +#include "code\modules\mob\living\bot\mulebot.dm" #include "code\modules\mob\living\bot\secbot.dm" #include "code\modules\mob\living\carbon\breathe.dm" #include "code\modules\mob\living\carbon\carbon.dm" @@ -1306,9 +1314,6 @@ #include "code\modules\mob\living\carbon\alien\diona\progression.dm" #include "code\modules\mob\living\carbon\alien\diona\say_understands.dm" #include "code\modules\mob\living\carbon\alien\diona\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\larva\larva.dm" -#include "code\modules\mob\living\carbon\alien\larva\life.dm" -#include "code\modules\mob\living\carbon\alien\larva\progression.dm" #include "code\modules\mob\living\carbon\brain\brain.dm" #include "code\modules\mob\living\carbon\brain\brain_item.dm" #include "code\modules\mob\living\carbon\brain\death.dm" @@ -1348,17 +1353,11 @@ #include "code\modules\mob\living\carbon\human\species\species_attack.dm" #include "code\modules\mob\living\carbon\human\species\species_hud.dm" #include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm" -#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm" #include "code\modules\mob\living\carbon\human\species\station\monkey.dm" #include "code\modules\mob\living\carbon\human\species\station\seromi.dm" #include "code\modules\mob\living\carbon\human\species\station\slime.dm" #include "code\modules\mob\living\carbon\human\species\station\station.dm" -#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_embryo.dm" -#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_facehugger.dm" -#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm" -#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.dm" -#include "code\modules\mob\living\carbon\human\species\xenomorphs\xenomorphs.dm" #include "code\modules\mob\living\carbon\metroid\death.dm" #include "code\modules\mob\living\carbon\metroid\emote.dm" #include "code\modules\mob\living\carbon\metroid\examine.dm" @@ -1477,9 +1476,6 @@ #include "code\modules\multiz\pipes.dm" #include "code\modules\multiz\structures.dm" #include "code\modules\multiz\turf.dm" -#include "code\modules\nano\_JSON.dm" -#include "code\modules\nano\JSON Reader.dm" -#include "code\modules\nano\JSON Writer.dm" #include "code\modules\nano\nanoexternal.dm" #include "code\modules\nano\nanomanager.dm" #include "code\modules\nano\nanomapgen.dm" @@ -1520,7 +1516,6 @@ #include "code\modules\organs\subtypes\seromi.dm" #include "code\modules\organs\subtypes\standard.dm" #include "code\modules\organs\subtypes\unbreakable.dm" -#include "code\modules\organs\subtypes\xenos.dm" #include "code\modules\overmap\_defines.dm" #include "code\modules\overmap\sectors.dm" #include "code\modules\overmap\ships\ship.dm"