From 519bf698697c2f45cdcd9c2e5c186c36f9392daf Mon Sep 17 00:00:00 2001 From: Fikou <23585223+Fikou@users.noreply.github.com> Date: Wed, 18 Jan 2023 21:04:10 +0100 Subject: [PATCH] Dynamic Human Icon Generation For Simple/Basic Mobs (& Cardboard Cutouts) (#72517) ## About The Pull Request revive of #68760 this time a proc, not an element this time supports cardboard cutouts this time supports mob corpses ![image](https://user-images.githubusercontent.com/23585223/211064291-81070650-189f-4afa-8116-81b687e3ea35.png) ## Why It's Good For The Game prevents these icons ever being outdated, they'll always look what they are supposed to, saves spriting work ## Changelog :cl: Fikou, a hood by Viro refactor: humanoid mobs and cardboard cutouts automatically generate their sprites, they no longer will be outdated /:cl: Co-authored-by: Time-Green --- _maps/map_files/generic/CentCom.dmm | 9 +- _maps/shuttles/whiteship_box.dmm | 4 +- _maps/shuttles/whiteship_personalshuttle.dmm | 6 +- _maps/templates/holodeck_spacecheckers.dmm | 110 ++---- _maps/templates/shelter_2.dmm | 4 +- code/__DEFINES/mobs.dm | 3 + code/__HELPERS/dynamic_human_icon_gen.dm | 60 ++++ code/datums/holocall.dm | 2 +- code/game/objects/items/cardboard_cutouts.dm | 317 ++++++++++++------ .../items/stacks/sheets/sheet_types.dm | 6 + code/game/objects/structures/chess.dm | 27 +- code/modules/antagonists/cult/cult.dm | 4 - .../antagonists/heretic/heretic_antag.dm | 5 - code/modules/clothing/outfits/standard.dm | 47 ++- code/modules/clothing/suits/toggles.dm | 5 + code/modules/clothing/suits/wiz_robe.dm | 4 + code/modules/hallucination/body.dm | 4 +- code/modules/hallucination/delusions.dm | 37 +- code/modules/jobs/job_types/shaft_miner.dm | 8 - .../ruins/spaceruin_code/forgottenship.dm | 14 +- code/modules/mapping/mapping_helpers.dm | 41 +++ .../mob/living/basic/syndicate/syndicate.dm | 93 ++--- .../living/simple_animal/friendly/trader.dm | 2 +- .../hostile/bosses/paperwizard.dm | 7 +- .../simple_animal/hostile/cat_butcher.dm | 6 +- .../simple_animal/hostile/dark_wizard.dm | 4 + .../simple_animal/hostile/nanotrasen.dm | 69 +++- .../living/simple_animal/hostile/pirate.dm | 56 ++-- .../hostile/retaliate/spaceman.dm | 49 --- .../living/simple_animal/hostile/russian.dm | 20 +- .../living/simple_animal/hostile/skeleton.dm | 73 ++-- .../living/simple_animal/hostile/wizard.dm | 1 + .../living/simple_animal/hostile/zombie.dm | 39 ++- code/modules/mob_spawn/corpses/mob_corpses.dm | 106 +++++- .../mob_spawn/ghost_roles/mining_roles.dm | 6 +- code/modules/mob_spawn/mob_spawn.dm | 4 +- code/modules/mod/mod_control.dm | 6 +- .../modules/projectiles/ammunition/_firing.dm | 2 +- .../projectiles/ammunition/ballistic/rifle.dm | 3 + code/modules/projectiles/guns/energy.dm | 2 +- .../projectiles/guns/energy/energy_gun.dm | 3 + code/modules/projectiles/guns/energy/pulse.dm | 3 + .../projectiles/projectile/bullets/rifle.dm | 3 + .../crossbreeding/_status_effects.dm | 2 +- .../modules/unit_tests/hallucination_icons.dm | 2 + ...nshot_antag_icons_syndicateinfiltrator.png | Bin 821 -> 854 bytes ...shot_antag_icons_syndicatesleeperagent.png | Bin 821 -> 854 bytes .../screenshot_antag_icons_traitor.png | Bin 821 -> 854 bytes icons/mob/clothing/head/wizard.dmi | Bin 5100 -> 5595 bytes icons/mob/simple/simple_human.dmi | Bin 98666 -> 373 bytes icons/mob/simple/traders.dmi | Bin 0 -> 3868 bytes icons/obj/art/cardboard_cutout.dmi | Bin 17654 -> 365 bytes icons/obj/chess.dmi | Bin 1252 -> 1365 bytes icons/obj/clothing/head/wizard.dmi | Bin 1199 -> 1243 bytes tgstation.dme | 1 + 55 files changed, 804 insertions(+), 475 deletions(-) create mode 100644 code/__HELPERS/dynamic_human_icon_gen.dm create mode 100644 icons/mob/simple/traders.dmi diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 57f4dcc7748..07ced7373d8 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -5958,10 +5958,7 @@ /area/centcom/central_command_areas/evacuation) "Cg" = ( /obj/item/cardboard_cutout{ - desc = "They seem to be ignoring you... Typical."; - dir = 1; - icon_state = "cutout_ntsec"; - name = "Private Security Officer" + starting_cutout = "Private Security Officer" }, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -8855,9 +8852,7 @@ /area/centcom/central_command_areas/admin) "UA" = ( /obj/item/cardboard_cutout{ - desc = "They seem to be ignoring you... Typical."; - icon_state = "cutout_ntsec"; - name = "Private Security Officer" + starting_cutout = "Private Security Officer" }, /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index ef24e8a4cb0..35f377df0f2 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -301,7 +301,7 @@ melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; - zombiejob = "Assistant" + outfit = /datum/outfit/corpse_assistant }, /turf/open/floor/iron/white/corner{ dir = 1 @@ -1546,7 +1546,7 @@ melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; - zombiejob = "Assistant" + outfit = /datum/outfit/corpse_assistant }, /turf/open/floor/iron, /area/shuttle/abandoned/medbay) diff --git a/_maps/shuttles/whiteship_personalshuttle.dmm b/_maps/shuttles/whiteship_personalshuttle.dmm index 40a110fb07a..cd6bae93ab7 100644 --- a/_maps/shuttles/whiteship_personalshuttle.dmm +++ b/_maps/shuttles/whiteship_personalshuttle.dmm @@ -74,7 +74,7 @@ melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; - zombiejob = "Assistant" + outfit = /datum/outfit/corpse_assistant }, /turf/open/floor/plating, /area/shuttle/abandoned/engine) @@ -299,7 +299,7 @@ melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; - zombiejob = "Assistant" + outfit = /datum/outfit/corpse_assistant }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned/engine) @@ -531,7 +531,7 @@ melee_damage_lower = 11; melee_damage_upper = 11; name = "Rotting Carcass"; - zombiejob = "Assistant" + outfit = /datum/outfit/corpse_assistant }, /turf/open/floor/mineral/plastitanium, /area/shuttle/abandoned/bridge) diff --git a/_maps/templates/holodeck_spacecheckers.dmm b/_maps/templates/holodeck_spacecheckers.dmm index 6f902980b89..f320d7fe191 100644 --- a/_maps/templates/holodeck_spacecheckers.dmm +++ b/_maps/templates/holodeck_spacecheckers.dmm @@ -3,10 +3,7 @@ /turf/open/floor/holofloor/plating, /area/template_noop) "c" = ( -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_greytide"; - name = "White Pawn" - }, +/obj/structure/chess/checker/whiteman, /turf/open/floor/holofloor/dark, /area/template_noop) "d" = ( @@ -19,37 +16,13 @@ /turf/open/floor/holofloor/plating, /area/template_noop) "g" = ( -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_clown"; - name = "White King" - }, -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_clown"; - name = "White King" - }, -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_clown"; - name = "White King" - }, -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_clown"; - name = "White King" - }, -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_clown"; - name = "White King" - }, /obj/effect/turf_decal/board_letter/h{ dir = 1 }, /turf/open/floor/holofloor/plating, /area/template_noop) "i" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_greytide"; - name = "Black Pawn" - }, +/obj/structure/chess/checker/blackman, /obj/effect/turf_decal/board_letter/f{ dir = 1 }, @@ -81,11 +54,16 @@ }, /turf/open/floor/holofloor/plating, /area/template_noop) +"q" = ( +/obj/structure/chess/checker/whiteking, +/obj/structure/chess/checker/whiteking, +/obj/structure/chess/checker/whiteking, +/obj/structure/chess/checker/whiteking, +/obj/structure/chess/checker/whiteking, +/turf/open/floor/holofloor/plating, +/area/template_noop) "r" = ( -/obj/item/cardboard_cutout/adaptive{ - icon_state = "cutout_greytide"; - name = "White Pawn" - }, +/obj/structure/chess/checker/whiteman, /obj/effect/turf_decal/board_number/two{ dir = 4 }, @@ -122,31 +100,11 @@ /turf/open/floor/holofloor/plating, /area/template_noop) "z" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_clown"; - name = "Black King" - }, -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_clown"; - name = "Black King" - }, -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_clown"; - name = "Black King" - }, -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_clown"; - name = "Black King" - }, -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_clown"; - name = "Black King" - }, +/obj/structure/chess/checker/blackking, +/obj/structure/chess/checker/blackking, +/obj/structure/chess/checker/blackking, +/obj/structure/chess/checker/blackking, +/obj/structure/chess/checker/blackking, /turf/open/floor/holofloor/plating, /area/template_noop) "A" = ( @@ -158,11 +116,7 @@ }, /area/template_noop) "B" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_greytide"; - name = "Black Pawn" - }, +/obj/structure/chess/checker/blackman, /obj/effect/turf_decal/board_letter/h{ dir = 1 }, @@ -223,19 +177,11 @@ /turf/open/floor/holofloor/dark, /area/template_noop) "M" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_greytide"; - name = "Black Pawn" - }, +/obj/structure/chess/checker/blackman, /turf/open/floor/holofloor/dark, /area/template_noop) "N" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_greytide"; - name = "Black Pawn" - }, +/obj/structure/chess/checker/blackman, /obj/effect/turf_decal/board_number/six{ dir = 4 }, @@ -256,22 +202,14 @@ /turf/open/floor/holofloor/plating, /area/template_noop) "T" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_greytide"; - name = "Black Pawn" - }, +/obj/structure/chess/checker/blackman, /obj/effect/turf_decal/board_letter/b{ dir = 1 }, /turf/open/floor/holofloor/dark, /area/template_noop) "V" = ( -/obj/item/cardboard_cutout/adaptive{ - color = "#9999BB"; - icon_state = "cutout_greytide"; - name = "Black Pawn" - }, +/obj/structure/chess/checker/blackman, /obj/effect/turf_decal/board_letter/d{ dir = 1 }, @@ -309,7 +247,7 @@ /area/template_noop) (1,1,1) = {" -a +z Y w G @@ -318,7 +256,7 @@ k K v x -a +q "} (2,1,1) = {" a @@ -405,7 +343,7 @@ c P "} (9,1,1) = {" -z +a B n N diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index ac4e97b5cf1..ce569cb3391 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -74,9 +74,7 @@ "o" = ( /obj/structure/chair/comfy/black, /obj/item/cardboard_cutout{ - desc = "A cardboard cutout of a xenomorph maid."; - icon_state = "cutout_lusty"; - name = "lusty xenomorph maid" + starting_cutout = "Xenomorph Maid" }, /obj/structure/window/reinforced/survival_pod{ dir = 1 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 468e6ca7208..f58242121c1 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -771,3 +771,6 @@ /// Checking flags for [/mob/proc/can_read()] #define READING_CHECK_LITERACY (1<<0) #define READING_CHECK_LIGHT (1<<1) + +/// In dynamic human icon gen we don't replace the held item. +#define NO_REPLACE 0 diff --git a/code/__HELPERS/dynamic_human_icon_gen.dm b/code/__HELPERS/dynamic_human_icon_gen.dm new file mode 100644 index 00000000000..74dbe66458a --- /dev/null +++ b/code/__HELPERS/dynamic_human_icon_gen.dm @@ -0,0 +1,60 @@ +///Global list of all dynamically generated icons, for caching, so we don't have to generate multiple times. +GLOBAL_LIST_EMPTY(dynamic_human_icons) + +///This proc takes an amount of arguments and creates a human dummy using the paths, for visuals you want! +/proc/get_dynamic_human_icon(outfit_path, species_path = /datum/species/human, mob_spawn_path, r_hand, l_hand, bloody_slots = NONE, list/generated_dirs = GLOB.cardinals, animated = TRUE) + if(!species_path) + return FALSE + var/arg_string = "[outfit_path]_[species_path]_[mob_spawn_path]_[l_hand]_[r_hand]_[bloody_slots]_[generated_dirs.Join(",")]" + if(GLOB.dynamic_human_icons[arg_string]) //if already exists in our cache, just return that + return GLOB.dynamic_human_icons[arg_string] + var/mob/living/carbon/human/dummy/consistent/dummy = new() + dummy.set_species(species_path) + dummy.stat = DEAD //this is to avoid side effects of mob spawners + dummy.underwear = "Nude" + dummy.undershirt = "Nude" + dummy.socks = "Nude" + if(outfit_path) + var/datum/outfit/outfit = new outfit_path() + if(r_hand != NO_REPLACE) //we can still override to be null, no replace means just use outfit's + outfit.r_hand = r_hand + if(l_hand != NO_REPLACE) + outfit.l_hand = l_hand + dummy.equipOutfit(outfit) + else if(mob_spawn_path) + var/obj/effect/mob_spawn/spawner = new mob_spawn_path(null, TRUE) + spawner.outfit_override = list() + if(r_hand != NO_REPLACE) + spawner.outfit_override["r_hand"] = r_hand + if(l_hand != NO_REPLACE) + spawner.outfit_override["l_hand"] = l_hand + spawner.special(dummy, dummy) + spawner.equip(dummy) + for(var/obj/item/carried_item in dummy) + if(dummy.is_holding(carried_item)) + var/datum/component/two_handed/twohanded = carried_item.GetComponent(/datum/component/two_handed) + if(twohanded) + twohanded.wield(dummy) + var/datum/component/transforming/transforming = carried_item.GetComponent(/datum/component/transforming) + if(transforming) + transforming.set_active(carried_item) + if(bloody_slots & carried_item.slot_flags) + carried_item.add_mob_blood(dummy) + dummy.update_held_items() + var/icon/output = icon('icons/blanks/32x32.dmi', "nothing") + for(var/direction in generated_dirs) + var/icon/partial = getFlatIcon(dummy, defdir = direction, no_anim = !animated) + output.Insert(partial, dir = direction) + GLOB.dynamic_human_icons[arg_string] = output + qdel(dummy) + return output + +///This exists to apply the icons async, as that cannot be done in Initialize because of possible sleeps. +/proc/apply_dynamic_human_icon(atom/target, outfit_path, species_path = /datum/species/human, mob_spawn_path, r_hand, l_hand, bloody_slots = NONE, generated_dirs = GLOB.cardinals) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(set_dynamic_human_icon), args) + +///This proc gets an argument of a target and runs +/proc/set_dynamic_human_icon(list/arguments) + var/atom/target = arguments[1] //1st argument is the target + var/icon/dynamic_icon = get_dynamic_human_icon(arglist(arguments.Copy(2))) //the rest of the arguments starting from 2 matter to the proc + target.icon = dynamic_icon diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 90d8c8f3f7b..6075771046c 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -356,7 +356,7 @@ outfit_type = /datum/outfit/job/captain /datum/preset_holoimage/nanotrasenprivatesecurity - outfit_type = /datum/outfit/nanotrasensoldiercorpse2 + outfit_type = /datum/outfit/nanotrasensoldiercorpse /datum/preset_holoimage/hivebot nonhuman_mobtype = /mob/living/simple_animal/hostile/hivebot diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index ac304b5f8fe..1e113692dbb 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -1,3 +1,6 @@ +///Global list of all cardboard cutout datums, cached by name to instance. +GLOBAL_LIST(cardboard_cutouts) + //Cardboard cutouts! They're man-shaped and can be colored with a crayon to look like a human in a certain outfit, although it's limited, discolored, and obvious to more than a cursory glance. /obj/item/cardboard_cutout name = "cardboard cutout" @@ -6,35 +9,26 @@ icon_state = "cutout_basic" w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE - /// Possible restyles for the cutout, add an entry in change_appearance() if you add to here - var/list/possible_appearances = list() + item_flags = NO_PIXEL_RANDOM_DROP /// If the cutout is pushed over and has to be righted var/pushed_over = FALSE /// If the cutout actually appears as what it portray and not a discolored version var/deceptive = FALSE + /// What cutout datum we spawn at the start? Uses the name, not the path. + var/starting_cutout /obj/item/cardboard_cutout/Initialize(mapload) . = ..() - possible_appearances = sort_list(list( - JOB_ASSISTANT = image(icon = src.icon, icon_state = "cutout_greytide"), - "Clown" = image(icon = src.icon, icon_state = "cutout_clown"), - "Mime" = image(icon = src.icon, icon_state = "cutout_mime"), - "Traitor" = image(icon = src.icon, icon_state = "cutout_traitor"), - "Nuke Op" = image(icon = src.icon, icon_state = "cutout_fluke"), - "Cultist" = image(icon = src.icon, icon_state = "cutout_cultist"), - "Clockwork Cultist" = image(icon = src.icon, icon_state = "cutout_servant"), - "Revolutionary" = image(icon = src.icon, icon_state = "cutout_viva"), - "Wizard" = image(icon = src.icon, icon_state = "cutout_wizard"), - "Nightmare" = image(icon = src.icon, icon_state = "cutout_nightmare"), - "Xenomorph" = image(icon = src.icon, icon_state = "cutout_fukken_xeno"), - "Xenomorph Maid" = image(icon = src.icon, icon_state = "cutout_lusty"), - "Ash Walker" = image(icon = src.icon, icon_state = "cutout_free_antag"), - "Deathsquad Officer" = image(icon = src.icon, icon_state = "cutout_deathsquad"), - "Ian" = image(icon = src.icon, icon_state = "cutout_ian"), - "Slaughter Demon" = image(icon = 'icons/mob/simple/mob.dmi', icon_state = "daemon"), - "Laughter Demon" = image(icon = 'icons/mob/simple/mob.dmi', icon_state = "bowmon"), - "Private Security Officer" = image(icon = src.icon, icon_state = "cutout_ntsec") - )) + if(!GLOB.cardboard_cutouts) + INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(generate_cardboard_cutouts)) + if(starting_cutout) + return INITIALIZE_HINT_LATELOAD + +/obj/item/cardboard_cutout/LateInitialize() + var/datum/cardboard_cutout/cutout = GLOB.cardboard_cutouts[starting_cutout] + if(!cutout) + CRASH("Given invalid starting_cutout! [starting_cutout]") + cutout.apply(src) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/cardboard_cutout/attack_hand(mob/living/user, list/modifiers) @@ -100,6 +94,10 @@ * * user The mob choosing a skin of the cardboard cutout */ /obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user) + var/list/possible_appearances = list() + for(var/cutout_name in GLOB.cardboard_cutouts) + var/datum/cardboard_cutout/cutout = GLOB.cardboard_cutouts[cutout_name] + possible_appearances[cutout_name] = image(icon = cutout.applied_icon) var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, PROC_REF(check_menu), user, crayon), radius = 36, require_near = TRUE) if(!new_appearance) return FALSE @@ -114,85 +112,8 @@ icon = initial(icon) if(!deceptive) add_atom_colour("#FFD7A7", FIXED_COLOUR_PRIORITY) - switch(new_appearance) - if(JOB_ASSISTANT) - name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - desc = "A cardboat cutout of an assistant." - icon_state = "cutout_greytide" - if("Clown") - name = pick(GLOB.clown_names) - desc = "A cardboard cutout of a clown. You get the feeling that it should be in a corner." - icon_state = "cutout_clown" - if("Mime") - name = pick(GLOB.mime_names) - desc = "...(A cardboard cutout of a mime.)" - icon_state = "cutout_mime" - if("Traitor") - name = "[pick("Unknown", "Captain")]" - desc = "A cardboard cutout of a traitor." - icon_state = "cutout_traitor" - if("Nuke Op") - name = "[pick("Unknown", "COMMS", "Telecomms", "AI", "stealthy op", "STEALTH", "sneakybeaky", "MEDIC", "Medic")]" - desc = "A cardboard cutout of a nuclear operative." - icon_state = "cutout_fluke" - if("Cultist") - name = "Unknown" - desc = "A cardboard cutout of a cultist." - icon_state = "cutout_cultist" - if("Clockwork Cultist") - name = "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" - desc = "A cardboard cutout of a servant of Ratvar." - icon_state = "cutout_servant" - if("Revolutionary") - name = "Unknown" - desc = "A cardboard cutout of a revolutionary." - icon_state = "cutout_viva" - if("Wizard") - name = "[pick(GLOB.wizard_first)], [pick(GLOB.wizard_second)]" - desc = "A cardboard cutout of a wizard." - icon_state = "cutout_wizard" - if("Nightmare") - name = "[pick(GLOB.nightmare_names)]" - desc = "A cardboard cutout of a nightmare." - icon_state = "cutout_nightmare" - if("Xenomorph") - name = "alien hunter ([rand(1, 999)])" - desc = "A cardboard cutout of a xenomorph." - icon_state = "cutout_fukken_xeno" - if(prob(25)) - alpha = 75 //Spooky sneaking! - if("Xenomorph Maid") - name = "lusty xenomorph maid ([rand(1, 999)])" - desc = "A cardboard cutout of a xenomorph maid." - icon_state = "cutout_lusty" - if("Ash Walker") - name = lizard_name(pick(MALE, FEMALE)) - desc = "A cardboard cutout of an ash walker." - icon_state = "cutout_free_antag" - if("Deathsquad Officer") - name = pick(GLOB.commando_names) - desc = "A cardboard cutout of a death commando." - icon_state = "cutout_deathsquad" - if("Ian") - name = "Ian" - desc = "A cardboard cutout of the HoP's beloved corgi." - icon_state = "cutout_ian" - if("Slaughter Demon") - name = "slaughter demon" - desc = "A cardboard cutout of a slaughter demon." - icon = 'icons/mob/simple/mob.dmi' - icon_state = "daemon" - if("Laughter Demon") - name = "laughter demon" - desc = "A cardboard cutout of a laughter demon." - icon = 'icons/mob/simple/mob.dmi' - icon_state = "bowmon" - if("Private Security Officer") - name = "Private Security Officer" - desc = "A cardboard cutout of a private security officer." - icon_state = "cutout_ntsec" - else - return FALSE + var/datum/cardboard_cutout/cutout = GLOB.cardboard_cutouts[new_appearance] + cutout.apply(src) return TRUE /** @@ -219,9 +140,195 @@ return FALSE return TRUE -/obj/item/cardboard_cutout/setDir(newdir) - newdir = SOUTH - return ..() - /obj/item/cardboard_cutout/adaptive //Purchased by Syndicate agents, these cutouts are indistinguishable from normal cutouts but aren't discolored when their appearance is changed deceptive = TRUE + +///Proc that returns a list of all the cardboard cutouts (we create all subtypes) to be used in the global list. +/proc/generate_cardboard_cutouts() + var/list/cutouts = list() + for(var/datum/cardboard_cutout/cutout as anything in subtypesof(/datum/cardboard_cutout)) + cutout = new cutout() + cutouts[cutout.name] = cutout + GLOB.cardboard_cutouts = cutouts + +/datum/cardboard_cutout + /// Name of the cutout, used for radial selection and the global list. + var/name = "Boardjak" + /// The icon we apply to the cardboard cutout. + var/applied_icon = null + /// The base name we actually give to to the cardboard cutout. Can be overridden in get_name(). + var/applied_name = "boardjak" + /// The desc we give to the cardboard cutout. + var/applied_desc = "A cardboard cutout of a boardjak." + /// If we're not using dynamic generation (for non-humans), we can set a direct icon to give. + var/direct_icon = null + /// Same as direct_icon, but icon_state! + var/direct_icon_state = "" + /// If we're using dynamic generation, the outfit the generated mob will have. + var/outfit = null + /// If we're using dynamic generation, the right hand item the generated mob will have. + var/r_hand = NO_REPLACE + /// If we're using dynamic generation, the left hand item the generated mob will have. + var/l_hand = NO_REPLACE + /// If we're using dynamic generation, the mob spawner the generated mob will base visuals from. + var/mob_spawner = null + /// If we're using dynamic generation, the species of the generated mob. + var/species = /datum/species/human + +/datum/cardboard_cutout/New() + . = ..() + if(direct_icon) + applied_icon = icon(direct_icon, direct_icon_state, dir = SOUTH, frame = 1) + else + applied_icon = get_dynamic_human_icon(outfit, species, mob_spawner, l_hand, r_hand, generated_dirs = list(SOUTH), animated = FALSE) + +/// This proc returns the name that the cardboard cutout item will use. +/datum/cardboard_cutout/proc/get_name() + return applied_name + +/// This proc sets the cardboard cutout item's vars. +/datum/cardboard_cutout/proc/apply(obj/item/cardboard_cutout/cutouts) + cutouts.icon = applied_icon + cutouts.name = get_name() + cutouts.desc = applied_desc + +/datum/cardboard_cutout/assistant + name = "Assistant" + applied_name = "John Greytide" + applied_desc = "A cardboard cutout of an assistant." + mob_spawner = /obj/effect/mob_spawn/corpse/human/generic_assistant + +/datum/cardboard_cutout/assistant/get_name() + return "[pick(GLOB.first_names_male)] [pick(GLOB.last_names)]" + +/datum/cardboard_cutout/clown + name = "Clown" + applied_name = "HONK" + applied_desc = "A cardboard cutout of a clown. You get the feeling that it should be in a corner." + outfit = /datum/outfit/job/clown + +/datum/cardboard_cutout/clown/get_name() + return pick(GLOB.clown_names) + +/datum/cardboard_cutout/mime + name = "Mime" + applied_name = "..." + applied_desc = "...(A cardboard cutout of a mime.)" + outfit = /datum/outfit/job/mime + +/datum/cardboard_cutout/mime/get_name() + return pick(GLOB.mime_names) + +/datum/cardboard_cutout/traitor + name = "Traitor" + applied_name = "Unknown" + applied_desc = "A cardboard cutout of a traitor." + outfit = /datum/outfit/traitor_cutout + +/datum/cardboard_cutout/traitor/get_name() + return pick("Unknown", "Captain") + +/datum/cardboard_cutout/nuclear_operative + name = "Nuclear Operative" + applied_name = "Unknown" + applied_desc = "A cardboard cutout of a nuclear operative." + outfit = /datum/outfit/syndicate/full + +/datum/cardboard_cutout/nuclear_operative/get_name() + return pick("Unknown", "COMMS", "Telecomms", "AI", "stealthy op", "STEALTH", "sneakybeaky", "MEDIC", "Medic") + +/datum/cardboard_cutout/cultist + name = "Cultist" + applied_name = "Unknown" + applied_desc = "A cardboard cutout of a cultist." + outfit = /datum/outfit/cult_cutout + +/datum/cardboard_cutout/revolutionary + name = "Revolutionary" + applied_name = "Unknown" + applied_desc = "A cardboard cutout of a revolutionary." + outfit = /datum/outfit/rev_cutout + +/datum/cardboard_cutout/wizard + name = "Wizard" + applied_name = "wizard" + applied_desc = "A cardboard cutout of a wizard." + outfit = /datum/outfit/wizard/bookless + +/datum/cardboard_cutout/wizard/get_name() + return "[pick(GLOB.wizard_first)] [pick(GLOB.wizard_second)]" + +/datum/cardboard_cutout/nightmare + name = "Nightmare" + applied_name = "nightmare" + applied_desc = "A cardboard cutout of a nightmare." + species = /datum/species/shadow/nightmare + +/datum/cardboard_cutout/nightmare/get_name() + return pick(GLOB.nightmare_names) + +/datum/cardboard_cutout/xenomorph + name = "Xenomorph" + applied_name = "alien hunter" + applied_desc = "A cardboard cutout of a xenomorph." + direct_icon = 'icons/mob/nonhuman-player/alien.dmi' + direct_icon_state = "alienh" + +/datum/cardboard_cutout/xenomorph/get_name() + return applied_name + " ([rand(1, 999)])" + +/datum/cardboard_cutout/xenomorph_maid + name = "Xenomorph Maid" + applied_name = "lusty xenomorph maid" + applied_desc = "A cardboard cutout of a xenomorph maid." + direct_icon = 'icons/mob/nonhuman-player/alien.dmi' + direct_icon_state = "maid" + +/datum/cardboard_cutout/xenomorph_maid/get_name() + return applied_name + " ([rand(1, 999)])" + +/datum/cardboard_cutout/ash_walker + name = "Ash Walker" + applied_name = "lizard" + applied_desc = "A cardboard cutout of an ash walker." + species = /datum/species/lizard/ashwalker + outfit = /datum/outfit/ashwalker/spear + +/datum/cardboard_cutout/ash_walker/get_name() + return lizard_name(pick(MALE, FEMALE)) + +/datum/cardboard_cutout/death_squad + name = "Deathsquad Officer" + applied_name = "deathsquad officer" + applied_desc = "A cardboard cutout of a death commando." + outfit = /datum/outfit/centcom/death_commando + +/datum/cardboard_cutout/death_squad/get_name() + return pick(GLOB.commando_names) + +/datum/cardboard_cutout/ian + name = "Ian" + applied_name = "Ian" + applied_desc = "A cardboard cutout of the HoP's beloved corgi." + direct_icon = 'icons/mob/simple/pets.dmi' + direct_icon_state = "corgi" + +/datum/cardboard_cutout/slaughter_demon + name = "Slaughter Demon" + applied_name = "slaughter demon" + applied_desc = "A cardboard cutout of a slaughter demon." + direct_icon = 'icons/mob/simple/mob.dmi' + direct_icon_state = "daemon" + +/datum/cardboard_cutout/laughter_demon + name = "Laughter Demon" + applied_name = "laughter demon" + applied_desc = "A cardboard cutout of a laughter demon." + direct_icon = 'icons/mob/simple/mob.dmi' + direct_icon_state = "bowmon" + +/datum/cardboard_cutout/security_officer + name = "Private Security Officer" + applied_name = "Private Security Officer" + applied_desc = "A cardboard cutout of a private security officer." + mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasensoldier diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c8613d24d43..2a3d02dcab5 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -63,6 +63,12 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new /datum/stack_recipe("Black Queen", /obj/structure/chess/blackqueen, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ new /datum/stack_recipe("Black King", /obj/structure/chess/blackking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ )), + new /datum/stack_recipe_list("checkers pieces", list( \ + new /datum/stack_recipe("White Checker Man", /obj/structure/chess/checker/whiteman, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("White Checker King", /obj/structure/chess/checker/whiteking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Checker Man", /obj/structure/chess/checker/blackman, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ + new /datum/stack_recipe("Black Checker King", /obj/structure/chess/checker/blackking, 2, time = 1 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_ENTERTAINMENT), \ + )), null, \ new/datum/stack_recipe("rack parts", /obj/item/rack_parts, category = CAT_FURNITURE), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ diff --git a/code/game/objects/structures/chess.dm b/code/game/objects/structures/chess.dm index 178d522a0fd..4441d758194 100644 --- a/code/game/objects/structures/chess.dm +++ b/code/game/objects/structures/chess.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/chess.dmi' icon_state = "white_pawn" name = "\improper Probably a White Pawn" - desc = "This is weird. Please inform adminstration on how you managed to get the parent chess piece. Thanks!" + desc = "This is weird. Please inform administration on how you managed to get the parent chess piece. Thanks!" max_integrity = 100 /obj/structure/chess/wrench_act(mob/user, obj/item/tool) @@ -80,3 +80,28 @@ name = "\improper Black King" desc = "A black king chess piece. It can move one tile in any direction." icon_state = "black_king" + +/obj/structure/chess/checker + icon_state = "white_checker_man" + name = "\improper Probably a White Checker" + desc = "This is weird. Please inform administration on how you managed to get the parent checker piece. Thanks!" + +/obj/structure/chess/checker/whiteman + name = "\improper White Checker Man" + desc = "A white checker piece. Looks suspiciously like a flattened chess pawn." + icon_state = "white_checker_man" + +/obj/structure/chess/checker/whiteking + name = "\improper White Checker Man" + desc = "A white checker piece. It's stacked!" + icon_state = "white_checker_king" + +/obj/structure/chess/checker/blackman + name = "\improper Black Checker Man" + desc = "A black checker piece. Looks suspiciously like a flattened chess pawn." + icon_state = "black_checker_man" + +/obj/structure/chess/checker/blackking + name = "\improper Black Checker King" + desc = "A black checker piece. It's stacked!" + icon_state = "black_checker_king" diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index a250563da7a..9b50a259805 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -571,7 +571,3 @@ equipped.eye_color_left = BLOODCULT_EYE equipped.eye_color_right = BLOODCULT_EYE equipped.update_body() - - var/obj/item/clothing/suit/hooded/hooded = locate() in equipped - hooded.MakeHood() // This is usually created on Initialize, but we run before atoms - hooded.ToggleHood() diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 3dbc9f502d1..f66485fb5f5 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -765,8 +765,3 @@ suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch r_hand = /obj/item/melee/touch_attack/mansus_fist - -/datum/outfit/heretic/post_equip(mob/living/carbon/human/equipper, visualsOnly) - var/obj/item/clothing/suit/hooded/hooded = locate() in equipper - hooded.MakeHood() // This is usually created on Initialize, but we run before atoms - hooded.ToggleHood() diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 75d9e2ab1ba..01ee43f4d29 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -103,6 +103,29 @@ head = /obj/item/clothing/head/helmet/redtaghelm shoes = /obj/item/clothing/shoes/sneakers/red +/datum/outfit/traitor_cutout + name = "Traitor Cutout" + + uniform = /obj/item/clothing/under/color/grey + suit = /obj/item/clothing/suit/armor/vest + gloves = /obj/item/clothing/gloves/chief_engineer + mask = /obj/item/clothing/mask/gas + belt = /obj/item/storage/belt + l_hand = /obj/item/melee/energy/sword/saber/red + r_hand = /obj/item/gun/energy/recharge/ebow + shoes = /obj/item/clothing/shoes/magboots/advance + +/datum/outfit/rev_cutout + name = "Revolutionary Cutout" + + uniform = /obj/item/clothing/under/color/grey + back = /obj/item/storage/backpack + gloves = /obj/item/clothing/gloves/color/yellow + mask = /obj/item/clothing/mask/gas + belt = /obj/item/storage/belt + l_hand = /obj/item/melee/baton/security/cattleprod + shoes = /obj/item/clothing/shoes/sneakers/black + /datum/outfit/laser_tag/blue name = "Laser Tag Blue" @@ -248,6 +271,15 @@ shoes = /obj/item/clothing/shoes/cult/alt/ghost l_hand = /obj/item/melee/cultblade/ghost +/datum/outfit/cult_cutout + name = "Cultist Cutout" + + uniform = /obj/item/clothing/under/rank/civilian/chaplain + suit = /obj/item/clothing/suit/hooded/cultrobes/hardened + shoes = /obj/item/clothing/shoes/cult/alt + back = /obj/item/storage/backpack/cultpack + r_hand = /obj/item/melee/cultblade/dagger + /datum/outfit/wizard name = "Blue Wizard" @@ -255,9 +287,9 @@ suit = /obj/item/clothing/suit/wizrobe back = /obj/item/storage/backpack backpack_contents = list( - /obj/item/storage/box/survival = 1, /obj/item/spellbook = 1, -) + ) + box = /obj/item/storage/box/survival ears = /obj/item/radio/headset head = /obj/item/clothing/head/wizard shoes = /obj/item/clothing/shoes/sandal/magic @@ -272,13 +304,20 @@ if(new_spellbook) new_spellbook.owner = wizard.mind +/datum/outfit/wizard/bookless + name = "Wizard - Bookless" + backpack_contents = list() + +/datum/outfit/wizard/bookless/post_equip(mob/living/carbon/human/wizard, visualsOnly) + return + /datum/outfit/wizard/apprentice name = "Wizard Apprentice" r_pocket = /obj/item/teleportation_scroll/apprentice r_hand = null l_hand = null - backpack_contents = list(/obj/item/storage/box/survival = 1) + backpack_contents = list() /datum/outfit/wizard/red name = "Red Wizard" @@ -299,7 +338,7 @@ r_hand = null suit = /obj/item/clothing/suit/wizrobe/red head = /obj/item/clothing/head/wizard/red - backpack_contents = list(/obj/item/storage/box/survival = 1) + backpack_contents = list() /datum/outfit/centcom/soviet name = "Soviet Admiral" diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 75466c69716..2c32b5137ef 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -36,6 +36,11 @@ RemoveHood() return ..() +/obj/item/clothing/suit/hooded/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot) + if(visuals_only) + MakeHood() + ToggleHood() + /obj/item/clothing/suit/hooded/proc/RemoveHood() src.icon_state = "[initial(icon_state)]" hood_up = FALSE diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 2547b3552b4..3ac885d2829 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -70,6 +70,10 @@ flags_inv = HIDEHAIR|HIDEFACIALHAIR dog_fashion = null +/obj/item/clothing/head/wizard/hood + name = "wizard hood" + icon_state = "wizhood" + /obj/item/clothing/suit/wizrobe name = "wizard robe" desc = "A magnificent, gem-lined robe that seems to radiate power." diff --git a/code/modules/hallucination/body.dm b/code/modules/hallucination/body.dm index aeaca25178f..1e9b78f8240 100644 --- a/code/modules/hallucination/body.dm +++ b/code/modules/hallucination/body.dm @@ -151,11 +151,11 @@ body_floats = TRUE /datum/hallucination/body/weird/faceless - body_image_file = 'icons/mob/simple/simple_human.dmi' + body_image_file = 'icons/mob/simple/traders.dmi' body_image_state = "faceless" /datum/hallucination/body/weird/bones - body_image_file = 'icons/mob/simple/simple_human.dmi' + body_image_file = 'icons/mob/simple/traders.dmi' body_image_state = "mrbones" /datum/hallucination/body/weird/freezer diff --git a/code/modules/hallucination/delusions.dm b/code/modules/hallucination/delusions.dm index 543025038c5..391d9ea77a4 100644 --- a/code/modules/hallucination/delusions.dm +++ b/code/modules/hallucination/delusions.dm @@ -18,6 +18,8 @@ var/delusion_icon_file /// The icon state of the delusion image var/delusion_icon_state + /// Do we use a generated icon? If yes no icon file or state needed. + var/dynamic_icon = FALSE /// The name of the delusion image var/delusion_name @@ -94,7 +96,7 @@ return TRUE /datum/hallucination/delusion/proc/make_delusion_image(mob/over_who) - var/image/funny_image = image(delusion_icon_file, over_who, delusion_icon_state) + var/image/funny_image = image(delusion_icon_file, over_who, dynamic_icon ? "" : delusion_icon_state) funny_image.name = delusion_name funny_image.override = TRUE return funny_image @@ -196,27 +198,24 @@ /datum/hallucination/delusion/preset/syndies random_hallucination_weight = 1 - delusion_icon_file = 'icons/mob/simple/simple_human.dmi' - delusion_icon_state = "syndicate_space" + dynamic_icon = TRUE delusion_name = "Syndicate" affects_others = TRUE affects_us = FALSE /datum/hallucination/delusion/preset/syndies/make_delusion_image(mob/over_who) - var/static/list/syndicate_icon_states - - if(!syndicate_icon_states) - syndicate_icon_states = list() - for(var/state in icon_states(delusion_icon_file)) - if(!findtext(state, "syndicate")) - continue - - syndicate_icon_states += state - - if(length(syndicate_icon_states) > 0) - delusion_name = over_who.name - delusion_icon_state = pick(syndicate_icon_states) - else - stack_trace("Hey! The hallucination [type] couldn't find a single icon state to use, it'll be invisible. Correct this.") - + delusion_icon_file = get_dynamic_human_icon( \ + mob_spawn_path = pick( \ + /obj/effect/mob_spawn/corpse/human/syndicatesoldier, \ + /obj/effect/mob_spawn/corpse/human/syndicatecommando, \ + /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper, \ + ), \ + r_hand = pick( \ + /obj/item/knife/combat/survival, \ + /obj/item/melee/energy/sword/saber, \ + /obj/item/gun/ballistic/automatic/pistol, \ + /obj/item/gun/ballistic/automatic/c20r, \ + /obj/item/gun/ballistic/shotgun/bulldog, \ + ), \ + ) return ..() diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index b566713ca60..92f4dbc5cbb 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -72,14 +72,6 @@ mask = /obj/item/clothing/mask/gas/explorer internals_slot = ITEM_SLOT_SUITSTORE -/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/miner, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - if(istype(miner.wear_suit, /obj/item/clothing/suit/hooded)) - var/obj/item/clothing/suit/hooded/explorer_suit = miner.wear_suit - explorer_suit.ToggleHood() - /datum/outfit/job/miner/equipped/mod name = "Shaft Miner (Equipment + MODsuit)" back = /obj/item/mod/control/pre_equipped/mining diff --git a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm index 926a0cc8143..045ab8ec00c 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm @@ -130,25 +130,21 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) /mob/living/simple_animal/hostile/nanotrasen/ranged/assault name = "Nanotrasen Assault Officer" desc = "Nanotrasen Assault Officer. Contact CentCom if you saw him on your station. Prepare to die, if you've been found near Syndicate property." - icon_state = "nanotrasenrangedassault" - icon_living = "nanotrasenrangedassault" - icon_dead = null - icon_gib = "syndicate_gib" ranged = TRUE rapid = 4 rapid_fire_delay = 1 rapid_melee = 1 retreat_distance = 2 minimum_distance = 4 - casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' + casingtype = /obj/item/ammo_casing/a556/weak + projectilesound = 'sound/weapons/gun/smg/shot.ogg' loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier) + mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier + held_item = /obj/item/gun/ballistic/automatic/ar /mob/living/simple_animal/hostile/nanotrasen/elite name = "Nanotrasen Elite Assault Officer" desc = "Pray for your life, syndicate. Run while you can." - icon_state = "nanotrasen_ert" - icon_living = "nanotrasen_ert" maxHealth = 150 health = 150 melee_damage_lower = 13 @@ -165,3 +161,5 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) projectilesound = 'sound/weapons/laser.ogg' loot = list(/obj/effect/gibspawner/human) faction = list(ROLE_DEATHSQUAD) + mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasenelitesoldier + held_item = /obj/item/gun/energy/pulse/carbine/lethal diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 60bd0c9761e..fddbf014e22 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -366,6 +366,47 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) . = ..() . += " | trait name: [trait_name]" +///This helper applies dynamic human icons to things on the map +/obj/effect/mapping_helpers/atom_injector/human_icon_injector + name = "Human Icon Injector" + icon_state = "icon" + /// Path of the outfit we give the human. + var/outfit_path + /// Path of the species we give the human. + var/species_path = /datum/species/human + /// Path of the mob spawner we base the human off of. + var/mob_spawn_path + /// Path of the right hand item we give the human. + var/r_hand = NO_REPLACE + /// Path of the left hand item we give the human. + var/l_hand = NO_REPLACE + /// Which slots on the mob should be bloody? + var/bloody_slots = NONE + /// Directions we generate for the mob. + var/generated_dirs = list(NORTH, SOUTH, EAST, WEST) + /// Do we draw more than one frame for the mob? + var/animated = TRUE + +/obj/effect/mapping_helpers/atom_injector/human_icon_injector/check_validity() + if(!ispath(species_path, /datum/species)) + CRASH("Wrong species path in [type] - [species_path] is not a species") + if(outfit_path && !ispath(outfit_path, /datum/outfit)) + CRASH("Wrong outfit path in [type] - [species_path] is not an outfit") + if(mob_spawn_path && !ispath(mob_spawn_path, /obj/effect/mob_spawn)) + CRASH("Wrong mob spawn path in [type] - [mob_spawn_path] is not a mob spawner") + if(l_hand && !ispath(l_hand, /obj/item)) + CRASH("Wrong left hand item path in [type] - [l_hand] is not an item") + if(r_hand && !ispath(r_hand, /obj/item)) + CRASH("Wrong left hand item path in [type] - [r_hand] is not an item") + return TRUE + +/obj/effect/mapping_helpers/atom_injector/human_icon_injector/inject(atom/target) + apply_dynamic_human_icon(target, outfit_path, species_path, mob_spawn_path, r_hand, l_hand, bloody_slots, generated_dirs, animated) + +/obj/effect/mapping_helpers/atom_injector/human_icon_injector/generate_stack_trace() + . = ..() + . += " | outfit path: [outfit_path] | species path: [species_path] | mob spawner path: [mob_spawn_path] | right/left hand path: [r_hand]/[l_hand]" + ///Fetches an external dmi and applies to the target object /obj/effect/mapping_helpers/atom_injector/custom_icon name = "Custom Icon Injector" diff --git a/code/modules/mob/living/basic/syndicate/syndicate.dm b/code/modules/mob/living/basic/syndicate/syndicate.dm index e8eebfae7f6..1c93cf00042 100644 --- a/code/modules/mob/living/basic/syndicate/syndicate.dm +++ b/code/modules/mob/living/basic/syndicate/syndicate.dm @@ -1,18 +1,9 @@ ///////////////Base Mob//////////// -/obj/effect/light_emitter/red_energy_sword //used so there's a combination of both their head light and light coming off the energy sword - set_luminosity = 2 - set_cap = 2.5 - light_color = COLOR_SOFT_RED - /mob/living/basic/syndicate name = "Syndicate Operative" desc = "Death to Nanotrasen." icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "syndicate" - icon_living = "syndicate" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID sentience_type = SENTIENCE_HUMANOID maxHealth = 100 @@ -31,24 +22,30 @@ unsuitable_heat_damage = 7.5 faction = list(ROLE_SYNDICATE) ai_controller = /datum/ai_controller/basic_controller/syndicate - + /// Loot this mob drops on death. var/loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier) + /// Path of the mob spawner we base the mob's visuals off of. + var/mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatesoldier + /// Path of the right hand held item we give to the mob's visuals. + var/r_hand + /// Path of the left hand held item we give to the mob's visuals. + var/l_hand /mob/living/basic/syndicate/Initialize(mapload) . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = mob_spawner, r_hand = r_hand, l_hand = l_hand) if(LAZYLEN(loot)) AddElement(/datum/element/death_drops, loot) AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_SHOE) /mob/living/basic/syndicate/space - icon_state = "syndicate_space" - icon_living = "syndicate_space" name = "Syndicate Commando" maxHealth = 170 health = 170 loot = list(/obj/effect/gibspawner/human) unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/syndicate/space/Initialize(mapload) . = ..() @@ -56,22 +53,20 @@ set_light(4) /mob/living/basic/syndicate/space/stormtrooper - icon_state = "syndicate_stormtrooper" - icon_living = "syndicate_stormtrooper" name = "Syndicate Stormtrooper" maxHealth = 250 health = 250 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper /mob/living/basic/syndicate/melee //dude with a knife and no shields melee_damage_lower = 15 melee_damage_upper = 15 - icon_state = "syndicate_knife" - icon_living = "syndicate_knife" loot = list(/obj/effect/gibspawner/human) attack_verb_continuous = "slashes" attack_verb_simple = "slash" attack_sound = 'sound/weapons/bladeslice.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH + r_hand = /obj/item/knife/combat/survival var/projectile_deflect_chance = 0 /mob/living/basic/syndicate/melee/bullet_act(obj/projectile/projectile) @@ -81,13 +76,12 @@ return ..() /mob/living/basic/syndicate/melee/space - icon_state = "syndicate_space_knife" - icon_living = "syndicate_space_knife" name = "Syndicate Commando" maxHealth = 170 health = 170 unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/syndicate/melee/space/Initialize(mapload) . = ..() @@ -95,65 +89,53 @@ set_light(4) /mob/living/basic/syndicate/melee/space/stormtrooper - icon_state = "syndicate_stormtrooper_knife" - icon_living = "syndicate_stormtrooper_knife" name = "Syndicate Stormtrooper" maxHealth = 250 health = 250 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper /mob/living/basic/syndicate/melee/sword melee_damage_lower = 30 melee_damage_upper = 30 - icon_state = "syndicate_sword" - icon_living = "syndicate_sword" attack_verb_continuous = "slashes" attack_verb_simple = "slash" attack_sound = 'sound/weapons/blade1.ogg' armour_penetration = 35 - light_color = COLOR_SOFT_RED projectile_deflect_chance = 50 - -/mob/living/basic/syndicate/melee/sword/Initialize(mapload) - . = ..() - set_light(2) + light_range = 2 + light_power = 2.5 + light_color = COLOR_SOFT_RED + r_hand = /obj/item/melee/energy/sword/saber/red + l_hand = /obj/item/shield/energy /mob/living/basic/syndicate/melee/sword/space - icon_state = "syndicate_space_sword" - icon_living = "syndicate_space_sword" name = "Syndicate Commando" maxHealth = 170 health = 170 unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 projectile_deflect_chance = 50 - var/obj/effect/light_emitter/red_energy_sword/sord + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/syndicate/melee/sword/space/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) - sord = new(src) - set_light(4) -/mob/living/basic/syndicate/melee/sword/space/Destroy() - QDEL_NULL(sord) - return ..() /mob/living/basic/syndicate/melee/sword/space/stormtrooper - icon_state = "syndicate_stormtrooper_sword" - icon_living = "syndicate_stormtrooper_sword" name = "Syndicate Stormtrooper" maxHealth = 250 health = 250 projectile_deflect_chance = 50 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper ///////////////Guns//////////// /mob/living/basic/syndicate/ranged - icon_state = "syndicate_pistol" - icon_living = "syndicate_pistol" - var/casingtype = /obj/item/ammo_casing/c9mm - var/projectilesound = 'sound/weapons/gun/pistol/shot.ogg' loot = list(/obj/effect/gibspawner/human) ai_controller = /datum/ai_controller/basic_controller/syndicate/ranged + r_hand = /obj/item/gun/ballistic/automatic/pistol + var/casingtype = /obj/item/ammo_casing/c9mm + var/projectilesound = 'sound/weapons/gun/pistol/shot.ogg' /mob/living/basic/syndicate/ranged/Initialize(mapload) . = ..() @@ -164,13 +146,12 @@ loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier) /mob/living/basic/syndicate/ranged/space - icon_state = "syndicate_space_pistol" - icon_living = "syndicate_space_pistol" name = "Syndicate Commando" maxHealth = 170 health = 170 unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/syndicate/ranged/space/Initialize(mapload) . = ..() @@ -178,31 +159,29 @@ set_light(4) /mob/living/basic/syndicate/ranged/space/stormtrooper - icon_state = "syndicate_stormtrooper_pistol" - icon_living = "syndicate_stormtrooper_pistol" name = "Syndicate Stormtrooper" maxHealth = 250 health = 250 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper /mob/living/basic/syndicate/ranged/smg - icon_state = "syndicate_smg" - icon_living = "syndicate_smg" casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/weapons/gun/smg/shot.ogg' ai_controller = /datum/ai_controller/basic_controller/syndicate/ranged/burst + r_hand = /obj/item/gun/ballistic/automatic/c20r /mob/living/basic/syndicate/ranged/smg/pilot //caravan ambush ruin name = "Syndicate Salvage Pilot" - loot = list(/obj/effect/mob_spawn/corpse/human/syndicatesoldier) + loot = list(/obj/effect/mob_spawn/corpse/human/syndicatepilot) + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatepilot /mob/living/basic/syndicate/ranged/smg/space - icon_state = "syndicate_space_smg" - icon_living = "syndicate_space_smg" name = "Syndicate Commando" maxHealth = 170 health = 170 unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/syndicate/ranged/smg/space/Initialize(mapload) . = ..() @@ -210,27 +189,24 @@ set_light(4) /mob/living/basic/syndicate/ranged/smg/space/stormtrooper - icon_state = "syndicate_stormtrooper_smg" - icon_living = "syndicate_stormtrooper_smg" name = "Syndicate Stormtrooper" maxHealth = 250 health = 250 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper /mob/living/basic/syndicate/ranged/shotgun - icon_state = "syndicate_shotgun" - icon_living = "syndicate_shotgun" casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot (up to 72.5 brute) fired in a two-round burst ai_controller = /datum/ai_controller/basic_controller/syndicate/ranged/shotgunner + r_hand = /obj/item/gun/ballistic/shotgun/bulldog /mob/living/basic/syndicate/ranged/shotgun/space - icon_state = "syndicate_space_shotgun" - icon_living = "syndicate_space_shotgun" name = "Syndicate Commando" maxHealth = 170 health = 170 unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 speed = 1 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatecommando /mob/living/basic/syndicate/ranged/shotgun/space/Initialize(mapload) . = ..() @@ -238,19 +214,16 @@ set_light(4) /mob/living/basic/syndicate/ranged/shotgun/space/stormtrooper - icon_state = "syndicate_stormtrooper_shotgun" - icon_living = "syndicate_stormtrooper_shotgun" name = "Syndicate Stormtrooper" maxHealth = 250 health = 250 + mob_spawner = /obj/effect/mob_spawn/corpse/human/syndicatestormtrooper ///////////////Misc//////////// /mob/living/basic/viscerator name = "viscerator" desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations." - icon_state = "viscerator_attack" - icon_living = "viscerator_attack" pass_flags = PASSTABLE | PASSMOB combat_mode = TRUE mob_biotypes = MOB_ROBOTIC diff --git a/code/modules/mob/living/simple_animal/friendly/trader.dm b/code/modules/mob/living/simple_animal/friendly/trader.dm index 3b6225e1c1d..2605b9a50d8 100644 --- a/code/modules/mob/living/simple_animal/friendly/trader.dm +++ b/code/modules/mob/living/simple_animal/friendly/trader.dm @@ -26,7 +26,7 @@ /mob/living/simple_animal/hostile/retaliate/trader name = "Trader" desc = "Come buy some!" - icon = 'icons/mob/simple/simple_human.dmi' + icon = 'icons/mob/simple/traders.dmi' icon_state = "faceless" maxHealth = 200 health = 200 diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index f2878850936..8644d652de2 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -8,7 +8,7 @@ del_on_death = TRUE icon = 'icons/mob/simple/simple_human.dmi' icon_state = "paperwizard" - ranged = 1 + ranged = TRUE environment_smash = ENVIRONMENT_SMASH_NONE minimum_distance = 3 retreat_distance = 3 @@ -21,9 +21,12 @@ projectiletype = /obj/projectile/temp projectilesound = 'sound/weapons/emitter.ogg' attack_sound = 'sound/hallucinations/growl1.ogg' + footstep_type = FOOTSTEP_MOB_SHOE var/list/copies = list() - footstep_type = FOOTSTEP_MOB_SHOE +/mob/living/simple_animal/hostile/boss/paper_wizard/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/wizard/paper) /mob/living/simple_animal/hostile/boss/paper_wizard/Destroy() QDEL_LIST(copies) diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm index 652b082543d..8a869792b02 100644 --- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm +++ b/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm @@ -28,7 +28,11 @@ faction = list("hostile") check_friendly_fire = 1 status_flags = CANPUSH - del_on_death = 1 + del_on_death = TRUE + +/mob/living/simple_animal/hostile/cat_butcherer/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/cat_butcher, l_hand = /obj/item/circular_saw, bloody_slots = ITEM_SLOT_GLOVES|ITEM_SLOT_OCLOTHING) /mob/living/simple_animal/hostile/cat_butcherer/AttackingTarget() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm index e7aa4aa4f53..e7ce64e37ae 100644 --- a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm @@ -33,6 +33,10 @@ loot = list(/obj/effect/decal/remains/human) del_on_death = TRUE +/mob/living/simple_animal/hostile/dark_wizard/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/wizard/dark, r_hand = /obj/item/staff) + /obj/projectile/temp/earth_bolt name = "earth bolt" icon_state = "declone" diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm index 0cc6f8a37c1..2b6596fe9ce 100644 --- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm +++ b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm @@ -2,10 +2,6 @@ name = "\improper Nanotrasen Private Security Officer" desc = "An officer part of Nanotrasen's private security force, he seems rather unpleased to meet you." icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "nanotrasen" - icon_living = "nanotrasen" - icon_dead = null - icon_gib = "syndicate_gib" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID sentience_type = SENTIENCE_HUMANOID speak_chance = 0 @@ -31,17 +27,20 @@ del_on_death = TRUE dodging = TRUE footstep_type = FOOTSTEP_MOB_SHOE + /// Path of the mob spawner we base the mob's visuals off of. + var/mob_spawner = /obj/effect/mob_spawn/corpse/human/nanotrasensoldier + /// Path of the held item we give to the mob's visuals. + var/held_item -/mob/living/simple_animal/hostile/nanotrasen/screaming - icon_state = "nanotrasen" - icon_living = "nanotrasen" +/mob/living/simple_animal/hostile/nanotrasen/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = mob_spawner, r_hand = held_item) /mob/living/simple_animal/hostile/nanotrasen/screaming/Aggro() ..() summon_backup(15) say("411 in progress, requesting backup!") - /mob/living/simple_animal/hostile/nanotrasen/ranged icon_state = "nanotrasenranged" icon_living = "nanotrasenranged" @@ -50,7 +49,7 @@ minimum_distance = 5 casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/weapons/gun/pistol/shot_alt.ogg' - + held_item = /obj/item/gun/ballistic/automatic/pistol/m1911 /mob/living/simple_animal/hostile/nanotrasen/ranged/smg icon_state = "nanotrasenrangedsmg" @@ -58,3 +57,55 @@ rapid = 3 casingtype = /obj/item/ammo_casing/c46x30mm projectilesound = 'sound/weapons/gun/smg/shot.ogg' + held_item = /obj/item/gun/ballistic/automatic/wt550 + + +/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace + name = "\improper Nanotrasen Private Security Officer" + desc = "An officer part of Nanotrasen's private security force." + icon = 'icons/mob/simple/simple_human.dmi' + turns_per_move = 5 + speed = 0 + stat_attack = HARD_CRIT + robust_searching = 1 + vision_range = 3 + maxHealth = 100 + health = 100 + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 15 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + faction = list("nanotrasenprivate") + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + sentience_type = SENTIENCE_HUMANOID + combat_mode = TRUE + loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasensoldier) + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 7.5 + status_flags = CANPUSH + search_objects = 1 + /// Path of the held item we give to the mob's visuals. + var/held_item + +/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/nanotrasensoldier, r_hand = held_item) + +/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/Aggro() + ..() + summon_backup(15) + say("411 in progress, requesting backup!") + +/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/ranged + vision_range = 9 + rapid = 3 + ranged = 1 + retreat_distance = 3 + minimum_distance = 5 + casingtype = /obj/item/ammo_casing/c46x30mm + projectilesound = 'sound/weapons/gun/smg/shot.ogg' + loot = list(/obj/item/gun/ballistic/automatic/wt550, + /obj/effect/mob_spawn/corpse/human/nanotrasensoldier) + held_item = /obj/item/gun/ballistic/automatic/wt550 diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 1a9b5dfe70f..50308b7ba32 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -2,9 +2,6 @@ name = "Pirate" desc = "Does what he wants cause a pirate is free." icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "pirate_dead" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID sentience_type = SENTIENCE_HUMANOID speak_chance = 0 @@ -24,17 +21,20 @@ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 7.5 speak_emote = list("yarrs") - loot = list(/obj/effect/mob_spawn/corpse/human/pirate, - /obj/item/melee/energy/sword/pirate) - del_on_death = 1 + loot = list(/obj/effect/mob_spawn/corpse/human/pirate) + del_on_death = TRUE faction = list("pirate") + /// Path of the mob spawner we base the mob's visuals off of. + var/mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate + /// Path of the held item we give to the mob's visuals. + var/held_item +/mob/living/simple_animal/hostile/pirate/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = mob_spawner, r_hand = held_item) /mob/living/simple_animal/hostile/pirate/melee name = "Pirate Swashbuckler" - icon_state = "piratemelee" - icon_living = "piratemelee" - icon_dead = "piratemelee_dead" melee_damage_lower = 30 melee_damage_upper = 30 armour_penetration = 35 @@ -42,40 +42,31 @@ attack_verb_simple = "slash" attack_sound = 'sound/weapons/blade1.ogg' attack_vis_effect = ATTACK_EFFECT_SLASH - var/obj/effect/light_emitter/red_energy_sword/sord - + loot = list(/obj/effect/mob_spawn/corpse/human/pirate/melee) + light_range = 2 + light_power = 2.5 + light_color = COLOR_SOFT_RED footstep_type = FOOTSTEP_MOB_SHOE + loot = list( + /obj/effect/mob_spawn/corpse/human/pirate/melee, + /obj/item/melee/energy/sword/pirate, + ) + mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/melee + held_item = /obj/item/melee/energy/sword/pirate /mob/living/simple_animal/hostile/pirate/melee/space name = "Space Pirate Swashbuckler" - icon_state = "piratespace" - icon_living = "piratespace" - icon_dead = "piratespace_dead" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 speed = 1 + mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/melee/space /mob/living/simple_animal/hostile/pirate/melee/space/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) -/mob/living/simple_animal/hostile/pirate/melee/Initialize(mapload) - . = ..() - sord = new(src) - -/mob/living/simple_animal/hostile/pirate/melee/Destroy() - QDEL_NULL(sord) - return ..() - -/mob/living/simple_animal/hostile/pirate/melee/Initialize(mapload) - . = ..() - set_light(2) - /mob/living/simple_animal/hostile/pirate/ranged name = "Pirate Gunner" - icon_state = "pirateranged" - icon_living = "pirateranged" - icon_dead = "pirateranged_dead" projectilesound = 'sound/weapons/laser.ogg' ranged = 1 rapid = 2 @@ -84,15 +75,16 @@ minimum_distance = 5 projectiletype = /obj/projectile/beam/laser loot = list(/obj/effect/mob_spawn/corpse/human/pirate/ranged) + mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/ranged + held_item = /obj/item/gun/energy/laser /mob/living/simple_animal/hostile/pirate/ranged/space name = "Space Pirate Gunner" - icon_state = "piratespaceranged" - icon_living = "piratespaceranged" - icon_dead = "piratespaceranged_dead" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 speed = 1 + mob_spawner = /obj/effect/mob_spawn/corpse/human/pirate/ranged/space + held_item = /obj/item/gun/energy/e_gun/lethal /mob/living/simple_animal/hostile/pirate/ranged/space/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm index 3e4e6ddaf32..fd89b71ff06 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm @@ -27,52 +27,3 @@ environment_smash = ENVIRONMENT_SMASH_NONE del_on_death = 0 footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace //this should be in a different file - name = "\improper Nanotrasen Private Security Officer" - desc = "An officer part of Nanotrasen's private security force." - icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "nanotrasen" - icon_living = "nanotrasen" - icon_dead = null - icon_gib = "syndicate_gib" - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - vision_range = 3 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 15 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - faction = list("nanotrasenprivate") - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - sentience_type = SENTIENCE_HUMANOID - combat_mode = TRUE - loot = list(/obj/effect/mob_spawn/corpse/human/nanotrasensoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - status_flags = CANPUSH - search_objects = 1 - -/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/Aggro() - ..() - summon_backup(15) - say("411 in progress, requesting backup!") - -/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/ranged - icon_state = "nanotrasenrangedsmg" - icon_living = "nanotrasenrangedsmg" - vision_range = 9 - rapid = 3 - ranged = 1 - retreat_distance = 3 - minimum_distance = 5 - casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/weapons/gun/smg/shot.ogg' - loot = list(/obj/item/gun/ballistic/automatic/wt550, - /obj/effect/mob_spawn/corpse/human/nanotrasensoldier) diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index dee84b5f863..e5e7fe4cc66 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -26,27 +26,35 @@ unsuitable_atmos_damage = 7.5 faction = list("russian") status_flags = CANPUSH - del_on_death = 1 - footstep_type = FOOTSTEP_MOB_SHOE + del_on_death = TRUE + /// The mob spawner we base the icon off of. + var/mob_spawner = /obj/effect/mob_spawn/corpse/human/russian + /// The item the icon will hold. + var/held_item = /obj/item/knife/kitchen +/mob/living/simple_animal/hostile/russian/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = mob_spawner, r_hand = held_item) /mob/living/simple_animal/hostile/russian/ranged icon_state = "russianranged" icon_living = "russianranged" loot = list(/obj/effect/mob_spawn/corpse/human/russian/ranged, /obj/item/gun/ballistic/revolver/nagant) - ranged = 1 + ranged = TRUE retreat_distance = 5 minimum_distance = 5 projectilesound = 'sound/weapons/gun/revolver/shot.ogg' casingtype = /obj/item/ammo_casing/n762 - + mob_spawner = /obj/effect/mob_spawn/corpse/human/russian/ranged + held_item = /obj/item/gun/ballistic/revolver/nagant /mob/living/simple_animal/hostile/russian/ranged/mosin loot = list(/obj/effect/mob_spawn/corpse/human/russian/ranged, /obj/item/gun/ballistic/rifle/boltaction) casingtype = /obj/item/ammo_casing/a762 + held_item = /obj/item/gun/ballistic/rifle/boltaction /mob/living/simple_animal/hostile/russian/ranged/trooper icon_state = "russianrangedelite" @@ -56,6 +64,8 @@ casingtype = /obj/item/ammo_casing/shotgun/buckshot loot = list(/obj/effect/mob_spawn/corpse/human/russian/ranged/trooper, /obj/item/gun/ballistic/shotgun/lethal) + mob_spawner = /obj/effect/mob_spawn/corpse/human/russian/ranged/trooper + held_item = /obj/item/gun/ballistic/shotgun/lethal /mob/living/simple_animal/hostile/russian/ranged/officer name = "Russian Officer" @@ -67,6 +77,8 @@ casingtype = /obj/item/ammo_casing/c9mm loot = list(/obj/effect/mob_spawn/corpse/human/russian/ranged/officer, /obj/item/gun/ballistic/automatic/pistol/aps) + mob_spawner = /obj/effect/mob_spawn/corpse/human/russian/ranged/officer + held_item = /obj/item/gun/ballistic/automatic/pistol/aps /mob/living/simple_animal/hostile/russian/ranged/officer/Aggro() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 5d439748865..e72af36bdb4 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -1,11 +1,8 @@ /mob/living/simple_animal/hostile/skeleton name = "reanimated skeleton" desc = "A real bonefied skeleton, doesn't seem like it wants to socialize." - icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "skeleton" - icon_living = "skeleton" - icon_dead = "skeleton" gender = NEUTER + icon = 'icons/mob/simple/simple_human.dmi' mob_biotypes = MOB_UNDEAD|MOB_HUMANOID turns_per_move = 5 speak_emote = list("rattles") @@ -31,36 +28,47 @@ faction = list("skeleton") see_in_dark = NIGHTVISION_FOV_RANGE lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - death_message = "collapses into a pile of bones!" - del_on_death = 1 - loot = list(/obj/effect/decal/remains/human) - footstep_type = FOOTSTEP_MOB_SHOE + death_message = "collapses into a pile of bones!" + del_on_death = TRUE + loot = list(/obj/effect/decal/remains/human) + /// Path of the outfit we give to the mob's visuals. + var/outfit = null + /// Path of the species we give to the mob's visuals. + var/species = /datum/species/skeleton + /// Path of the held item we give to the mob's visuals. + var/held_item + +/mob/living/simple_animal/hostile/skeleton/Initialize(mapload) + . = ..() + apply_dynamic_human_icon(src, outfit, species, r_hand = held_item) /mob/living/simple_animal/hostile/skeleton/eskimo name = "undead eskimo" desc = "The reanimated remains of some poor traveler." - icon_state = "eskimo" - icon_living = "eskimo" - icon_dead = "eskimo_dead" maxHealth = 55 health = 55 weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) melee_damage_lower = 17 melee_damage_upper = 20 death_message = "collapses into a pile of bones, its gear falling to the floor!" - loot = list(/obj/effect/decal/remains/human, - /obj/item/spear, - /obj/item/clothing/shoes/winterboots, - /obj/item/clothing/suit/hooded/wintercoat) + loot = list( + /obj/effect/decal/remains/human, + /obj/item/spear, + /obj/item/clothing/shoes/winterboots, + /obj/item/clothing/suit/hooded/wintercoat, + ) + outfit = /datum/outfit/eskimo + held_item = /obj/item/spear +/datum/outfit/eskimo + name = "Eskimo" + suit = /obj/item/clothing/suit/hooded/wintercoat + shoes = /obj/item/clothing/shoes/winterboots /mob/living/simple_animal/hostile/skeleton/templar name = "undead templar" desc = "The reanimated remains of a holy templar knight." - icon_state = "templar" - icon_living = "templar" - icon_dead = "templar_dead" maxHealth = 150 health = 150 weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) @@ -72,10 +80,19 @@ melee_damage_lower = 25 melee_damage_upper = 30 death_message = "collapses into a pile of bones, its gear clanging as it hits the ground!" - loot = list(/obj/effect/decal/remains/human, - /obj/item/clothing/suit/chaplainsuit/armor/templar, - /obj/item/clothing/head/helmet/chaplain, - /obj/item/claymore/weak{name = "holy sword"}) + loot = list( + /obj/effect/decal/remains/human, + /obj/item/clothing/suit/chaplainsuit/armor/templar, + /obj/item/clothing/head/helmet/chaplain, + /obj/item/claymore/weak{name = "holy sword"} + ) + outfit = /datum/outfit/templar + +/datum/outfit/templar + name = "Templar" + head = /obj/item/clothing/head/helmet/chaplain + suit = /obj/item/clothing/suit/chaplainsuit/armor/templar + r_hand = /obj/item/claymore/weak /mob/living/simple_animal/hostile/skeleton/ice name = "ice skeleton" @@ -99,8 +116,11 @@ melee_damage_lower = 15 melee_damage_upper = 20 light_color = LIGHT_COLOR_PURPLE + light_range = 2 death_message = "collapses into a pile of bones, their suit dissolving among the plasma!" loot = list(/obj/effect/decal/remains/plasma) + outfit = /datum/outfit/plasma_miner + species = /datum/species/plasmaman /mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer desc = "A plasma-soaked miner, their exposed limbs turned into a grossly incandescent bone seemingly made of plasma. They seem to still have their mining tool in their hand, gripping tightly." @@ -117,7 +137,10 @@ attack_sound = 'sound/weapons/sonic_jackhammer.ogg' attack_vis_effect = null // jackhammer moment loot = list(/obj/effect/decal/remains/plasma, /obj/item/pickaxe/drill/jackhammer) + held_item = /obj/item/pickaxe/drill/jackhammer -/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize(mapload) - . = ..() - set_light(2) +/datum/outfit/plasma_miner + name = "Plasma Miner" + uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland + suit = /obj/item/clothing/suit/hooded/explorer + mask = /obj/item/clothing/mask/gas/explorer diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm index b69cd69c21c..007d54cb995 100644 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm @@ -40,6 +40,7 @@ /mob/living/simple_animal/hostile/wizard/Initialize(mapload) . = ..() + apply_dynamic_human_icon(src, mob_spawn_path = /obj/effect/mob_spawn/corpse/human/wizard, r_hand = /obj/item/staff) var/obj/item/implant/exile/exiled = new /obj/item/implant/exile(src) exiled.implant(src) diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm index ad916accceb..b1a9d4ba2c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm @@ -2,8 +2,6 @@ name = "Shambling Corpse" desc = "When there is no more room in hell, the dead will walk in outer space." icon = 'icons/mob/simple/simple_human.dmi' - icon_state = "zombie" - icon_living = "zombie" mob_biotypes = MOB_ORGANIC|MOB_HUMANOID sentience_type = SENTIENCE_HUMANOID speak_chance = 0 @@ -21,28 +19,33 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 status_flags = CANPUSH - del_on_death = 1 - var/zombiejob = JOB_MEDICAL_DOCTOR + death_message = "collapses, flesh gone in a pile of bones!" + del_on_death = TRUE + loot = list(/obj/effect/decal/remains/human) + /// The probability that we give people real zombie infections on hit. var/infection_chance = 0 + /// Outfit the zombie spawns with for visuals. + var/outfit = /datum/outfit/corpse_doctor /mob/living/simple_animal/hostile/zombie/Initialize(mapload) . = ..() - INVOKE_ASYNC(src, PROC_REF(setup_visuals)) - -/mob/living/simple_animal/hostile/zombie/proc/setup_visuals() - var/datum/job/job = SSjob.GetJob(zombiejob) - - var/datum/outfit/outfit = new job.outfit - outfit.l_hand = null - outfit.r_hand = null - - var/mob/living/carbon/human/dummy/dummy = new - dummy.equipOutfit(outfit) - dummy.set_species(/datum/species/zombie) - icon = getFlatIcon(dummy) - qdel(dummy) + apply_dynamic_human_icon(src, outfit, /datum/species/zombie, bloody_slots = ITEM_SLOT_OCLOTHING) /mob/living/simple_animal/hostile/zombie/AttackingTarget() . = ..() if(. && ishuman(target) && prob(infection_chance)) try_to_zombie_infect(target) + +/datum/outfit/corpse_doctor + name = "Corpse Doctor" + suit = /obj/item/clothing/suit/toggle/labcoat + uniform = /obj/item/clothing/under/rank/medical/doctor + shoes = /obj/item/clothing/shoes/sneakers/white + back = /obj/item/storage/backpack/medic + +/datum/outfit/corpse_assistant + name = "Corpse Assistant" + mask = /obj/item/clothing/mask/gas + uniform = /obj/item/clothing/under/color/grey + shoes = /obj/item/clothing/shoes/sneakers/black + back = /obj/item/storage/backpack diff --git a/code/modules/mob_spawn/corpses/mob_corpses.dm b/code/modules/mob_spawn/corpses/mob_corpses.dm index ccedb6ad3f7..968b5e95942 100644 --- a/code/modules/mob_spawn/corpses/mob_corpses.dm +++ b/code/modules/mob_spawn/corpses/mob_corpses.dm @@ -65,6 +65,27 @@ id = /obj/item/card/id/advanced/chameleon id_trim = /datum/id_trim/chameleon/operative +/obj/effect/mob_spawn/corpse/human/syndicatepilot + name = "Syndicate Pilot" + hairstyle = "Bald" + facial_hairstyle = "Shaved" + outfit = /datum/outfit/syndicatepilotcorpse + +/datum/outfit/syndicatepilotcorpse + name = "Syndicate Pilot Corpse" + uniform = /obj/item/clothing/under/syndicate + suit = /obj/item/clothing/suit/armor/vest/alt + shoes = /obj/item/clothing/shoes/combat + neck = /obj/item/clothing/neck/large_scarf/syndie + glasses = /obj/item/clothing/glasses/cold + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/radio/headset + mask = /obj/item/clothing/mask/gas + head = /obj/item/clothing/head/helmet/swat + back = /obj/item/storage/backpack + id = /obj/item/card/id/advanced/chameleon + id_trim = /datum/id_trim/chameleon/operative + /obj/effect/mob_spawn/corpse/human/pirate name = "Pirate" skin_tone = "caucasian1" //all pirates are white because it's easier that way @@ -76,9 +97,25 @@ name = "Pirate Corpse" uniform = /obj/item/clothing/under/costume/pirate shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/eyepatch - head = /obj/item/clothing/head/costume/pirate/bandana +/obj/effect/mob_spawn/corpse/human/pirate/melee + name = "Pirate Swashbuckler" + outfit = /datum/outfit/piratecorpse/melee + +/datum/outfit/piratecorpse/melee + name = "Pirate Swashbuckler Corpse" + glasses = /obj/item/clothing/glasses/eyepatch + head = /obj/item/clothing/head/costume/pirate/bandana/armored + +/obj/effect/mob_spawn/corpse/human/pirate/melee/space + name = "Pirate Swashbuckler - Space" + outfit = /datum/outfit/piratecorpse/melee/space + +/datum/outfit/piratecorpse/melee/space + name = "Pirate Swashbuckler Corpse - Space" + suit = /obj/item/clothing/suit/space/pirate + head = /obj/item/clothing/head/helmet/space/pirate/bandana + back = /obj/item/tank/jetpack/carbondioxide /obj/effect/mob_spawn/corpse/human/pirate/ranged name = "Pirate Gunner" @@ -86,9 +123,19 @@ /datum/outfit/piratecorpse/ranged name = "Pirate Gunner Corpse" - suit = /obj/item/clothing/suit/costume/pirate - head = /obj/item/clothing/head/costume/pirate + glasses = /obj/item/clothing/glasses/eyepatch + suit = /obj/item/clothing/suit/costume/pirate/armored + head = /obj/item/clothing/head/costume/pirate/armored +/obj/effect/mob_spawn/corpse/human/pirate/ranged/space + name = "Pirate Gunner - Space" + outfit = /datum/outfit/piratecorpse/ranged/space + +/datum/outfit/piratecorpse/ranged/space + name = "Pirate Gunner Corpse - Space" + suit = /obj/item/clothing/suit/space/pirate + head = /obj/item/clothing/head/helmet/space/pirate + back = /obj/item/tank/jetpack/carbondioxide /obj/effect/mob_spawn/corpse/human/russian name = "Russian" @@ -156,15 +203,32 @@ shoes = /obj/item/clothing/shoes/sandal/magic head = /obj/item/clothing/head/wizard +/obj/effect/mob_spawn/corpse/human/wizard/dark + name = "Dark Wizard Corpse" + outfit = /datum/outfit/wizardcorpse/dark + +/datum/outfit/wizardcorpse/dark + head = /obj/item/clothing/head/wizard/hood + +/obj/effect/mob_spawn/corpse/human/wizard/paper + name = "Paper Wizard Corpse" + outfit = /datum/outfit/paper_wizard + +/datum/outfit/paper_wizard + name = "Paper Wizard" + uniform = /obj/item/clothing/under/color/white + suit = /obj/item/clothing/suit/wizrobe/paper + shoes = /obj/item/clothing/shoes/sandal/magic + head = /obj/item/clothing/head/collectable/paper /obj/effect/mob_spawn/corpse/human/nanotrasensoldier name = "\improper Nanotrasen Private Security Officer" - outfit = /datum/outfit/nanotrasensoldiercorpse2 + outfit = /datum/outfit/nanotrasensoldiercorpse hairstyle = "Bald" facial_hairstyle = "Shaved" -/datum/outfit/nanotrasensoldiercorpse2 - name = "NT Private Security Officer Corpse" +/datum/outfit/nanotrasensoldiercorpse + name = "\improper NT Private Security Officer Corpse" uniform = /obj/item/clothing/under/rank/security/officer suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat @@ -177,13 +241,13 @@ id_trim = /datum/id_trim/centcom/corpse/private_security/tradepost_officer /obj/effect/mob_spawn/corpse/human/nanotrasenassaultsoldier - name = "Nanotrasen Private Security Officer" + name = "\improper Nanotrasen Assault Officer Corpse" outfit = /datum/outfit/nanotrasenassaultsoldiercorpse hairstyle = "Bald" facial_hairstyle = "Shaved" /datum/outfit/nanotrasenassaultsoldiercorpse - name = "NT Assault Officer Corpse" + name = "\improper NT Assault Officer Corpse" uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat @@ -195,6 +259,22 @@ id = /obj/item/card/id/advanced/centcom id_trim = /datum/id_trim/centcom/corpse/assault +/obj/effect/mob_spawn/corpse/human/nanotrasenelitesoldier + name = "\improper Nanotrasen Elite Assault Officer Corpse" + outfit = /datum/outfit/nanotrasenelitesoldiercorpse + hairstyle = "Bald" + facial_hairstyle = "Shaved" + +/datum/outfit/nanotrasenelitesoldiercorpse + name = "\improper NT Elite Assault Officer Corpse" + uniform = /obj/item/clothing/under/rank/centcom/military + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + mask = /obj/item/clothing/mask/gas/sechailer/swat + back = /obj/item/mod/control/pre_equipped/responsory/security + id = /obj/item/card/id/advanced/centcom + id_trim = /datum/id_trim/centcom/ert/security + /obj/effect/mob_spawn/corpse/human/cat_butcher name = "The Cat Surgeon" hairstyle = "Cut Hair" @@ -229,3 +309,11 @@ id = /obj/item/card/id/advanced l_pocket = /obj/item/paper/fluff/bee_objectives mask = /obj/item/clothing/mask/animal/small/bee + +/obj/effect/mob_spawn/corpse/human/generic_assistant + name = "Generic Assistant" + hairstyle = "Short Hair" + haircolor = COLOR_BLACK + facial_hairstyle = "Shaved" + skin_tone = "caucasian1" + outfit = /datum/outfit/job/assistant/consistent diff --git a/code/modules/mob_spawn/ghost_roles/mining_roles.dm b/code/modules/mob_spawn/ghost_roles/mining_roles.dm index b5a94784366..49fb6f1d303 100644 --- a/code/modules/mob_spawn/ghost_roles/mining_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/mining_roles.dm @@ -255,10 +255,14 @@ notify_ghosts("An ash walker egg is ready to hatch in \the [spawner_area.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER) /datum/outfit/ashwalker - name ="Ashwalker" + name = "Ash Walker" head = /obj/item/clothing/head/helmet/gladiator uniform = /obj/item/clothing/under/costume/gladiator/ash_walker +/datum/outfit/ashwalker/spear + name = "Ash Walker - Spear" + back = /obj/item/spear/bonespear + ///Syndicate Listening Post /obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 8b65733aa46..232f58a4fe9 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -207,8 +207,10 @@ ///burn damage this corpse will spawn with var/burn_damage = 0 -/obj/effect/mob_spawn/corpse/Initialize(mapload) +/obj/effect/mob_spawn/corpse/Initialize(mapload, no_spawn) . = ..() + if(no_spawn) + return switch(spawn_when) if(CORPSE_INSTANT) INVOKE_ASYNC(src, PROC_REF(create)) diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index ee5c7b5f2f6..240a0829aad 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -417,9 +417,11 @@ if(wearer.stat < UNCONSCIOUS && prob(10)) wearer.emote("scream") +/obj/item/mod/control/visual_equipped(mob/user, slot, initial = FALSE) + if(slot & slot_flags) + set_wearer(user) + /obj/item/mod/control/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot) - if(visuals_only) - set_wearer(outfit_wearer) //we need to set wearer manually since it doesnt call equipped quick_activation() /obj/item/mod/control/doStrip(mob/stripper, mob/owner) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 4d17c872280..7707dcb19da 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -32,7 +32,7 @@ return TRUE /obj/item/ammo_casing/proc/tk_firing(mob/living/user, atom/fired_from) - return !user.contains(fired_from) + return fired_from != user && !user.contains(fired_from) /obj/item/ammo_casing/proc/ready_proj(atom/target, mob/living/user, quiet, zone_override = "", atom/fired_from) if (!loaded_projectile) diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 754c872cced..e4edd21c826 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -23,6 +23,9 @@ desc = "A 5.56mm phasic bullet casing." projectile_type = /obj/projectile/bullet/a556/phasic +/obj/item/ammo_casing/a556/weak + projectile_type = /obj/projectile/bullet/a556/weak + // 40mm (Grenade Launcher) /obj/item/ammo_casing/a40mm diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index c4784e55ba9..1f8772c06a3 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -132,7 +132,7 @@ // Sometimes ammo_type has paths, sometimes it has atom. for (var/atom/item in ammo_type) qdel(item) - ammo_type -= item + ammo_type = null return ..() diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 177546515e9..faf35cfe957 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -164,3 +164,6 @@ . += "[icon_state]_fail_1" if(151 to INFINITY) . += "[icon_state]_fail_2" + +/obj/item/gun/energy/e_gun/lethal + ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/disabler) diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 98ccb556a2b..4db8e626bda 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -48,6 +48,9 @@ overlay_x = 18, \ overlay_y = 12) +/obj/item/gun/energy/pulse/carbine/lethal + ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode) + /obj/item/gun/energy/pulse/carbine/loyalpin pin = /obj/item/firing_pin/implant/mindshield diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 7c3a7c6e0a1..afe4b4fc140 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -6,6 +6,9 @@ armour_penetration = 30 wound_bonus = -40 +/obj/projectile/bullet/a556/weak //centcom + damage = 20 + /obj/projectile/bullet/a556/phasic name = "5.56mm phasic bullet" icon_state = "gaussphase" diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 34f1c80e764..60feedb7565 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -383,7 +383,7 @@ duration = 300 /datum/status_effect/spookcookie/on_apply() - var/image/I = image(icon = 'icons/mob/simple/simple_human.dmi', icon_state = "skeleton", layer = ABOVE_MOB_LAYER, loc = owner) + var/image/I = image(icon = 'icons/mob/species/human/human.dmi', icon_state = "skeleton", layer = ABOVE_MOB_LAYER, loc = owner) I.override = 1 owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "spookyscary", I) return ..() diff --git a/code/modules/unit_tests/hallucination_icons.dm b/code/modules/unit_tests/hallucination_icons.dm index 46ee134e7ea..96bbf464c2a 100644 --- a/code/modules/unit_tests/hallucination_icons.dm +++ b/code/modules/unit_tests/hallucination_icons.dm @@ -19,6 +19,8 @@ // Test preset delusion hallucinations for invalid image setups for(var/datum/hallucination/delusion/preset/hallucination as anything in subtypesof(/datum/hallucination/delusion/preset)) + if(initial(hallucination.dynamic_icon)) + continue var/icon = initial(hallucination.delusion_icon_file) var/icon_state = initial(hallucination.delusion_icon_state) check_hallucination_icon(hallucination, icon, icon_state) diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png index 62e23dad5c7f005c87e98c8fe75c71ee56526e07..0a9a5ef08e4eea7798d0c391de5dfec0c40752cd 100644 GIT binary patch delta 641 zcmV-{0)G9q2G$0UBu9!+OjJbx001Z`C?a}|ikqJt*#Ei2#tjV(3#E!;o2Ns|u`_IV zQ;e8%thkw(nZ(4zi;IgqJUnV@Y8Mw5F)=ZKfPmcq0Fhr9k$Nx$+wCoYk*n8!ax*6(JUAhR0xZ>A)+Fh|NlL^YkEvV5lv|-R;YVkCX=NP#my|x>lub& z7>3axM~-8lLlYEHY7hh=KoiJif>s2~QEC)L6rhRZYQoWd0l)mv5yvrgXkwjdVmO$f zmH<^{a=+g{0ciT@vDPMNMWBIy#>ys1athESs&j)Qx%+}Mfberb33?`IO`x@M0EWZi z1sFKAa+<&kE*)1uhbCx6Fap}Ij6s^F6rf4b)9!`$R0d2Y6BGPFfCnStrlWA29g7FPzC&A=kvK2;HzdFPF@4Xp%*xKedH*IGkvjGnBbQJ|3fB!FY*mQ#x0-# zJt}eJ@4*x0aHdxlx#I%lXe)6iB*5f+4+;WZ*9L=i$itbwf2uG+9f2zA>#cDhf&MoN z+>deIqiHFB`59i3Zi1SE2cS7#^`^2Qa3jm_uFKU`c=cl0LBSF{I@n#UR!?BPUOxkk z1N}4M1zIw3jrY8O(#yYp^XW}cOQ1taAb16v%?6HjJ{>X6uLo`|nBvSEz^$9@c3b)K zcV8gMJ3#mfjt_tbeGRmEK%$?n-Bu$|4J2VH_NSYmjzHl&L^x}W2ifBQ$g+&n4TAZq zQ;8lCTcTIr{55KGGK?!ywSUS`zOxK!=w3pNF b`rieg1H$gC*Jp8|00000NkvXXu0mjfW6LB* delta 629 zcmV-*0*d|C2DJu|Bvye?OjJbx002BZJZfrci;IhynVC`1lmm}efPjEe!i!VJkHo~p z7Z(?bo1ZZ;G2H+Fxx~gIdW{^|{~jYD{{R3=Pfp9t(f|MdjO+h&ae@E^1}G>fk%KS< zeM%o0k+*+;0rE*iK~!jg?Urp*f9%!{}1e(*+Za-GDSK#_xS?L z%6S~_?uEg?Fbu;m3}fG%RG8oZ0;Zl;bnoc7K;fR}odFy?=jcpgf?eTEKL@_=UjQ6@ zjJm3|30eujB?y9mr#J){b=8%QL*N!ZpE&n{s>1DmV1m5}Bw_M!IP}zyPUz zSmd663y>4Jm47EBNRs3p)C8K3-L_yIs&J-nZWShIBT!|_dTSp@fJ35vpvtN(Rg0hD z4e2ImDR=eFvXR3fS=~e<+5?{_g^5%2S9iV$0xvz zWexQ4fW)$0yHAagY9I+qu{qrYZ3GJEDZ*K6+{h6(Kv5KIHwflZrxGJvEHKAZNgBgV zuv1Vrp~3f_t6kCifN>D;>zV==9&fAaQ3=*~bZAs-*Xl+3mebeu!3AIT7xU32B(Q`G P00000NkvXXu0mjf8#f`B diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png index 62e23dad5c7f005c87e98c8fe75c71ee56526e07..0a9a5ef08e4eea7798d0c391de5dfec0c40752cd 100644 GIT binary patch delta 641 zcmV-{0)G9q2G$0UBu9!+OjJbx001Z`C?a}|ikqJt*#Ei2#tjV(3#E!;o2Ns|u`_IV zQ;e8%thkw(nZ(4zi;IgqJUnV@Y8Mw5F)=ZKfPmcq0Fhr9k$Nx$+wCoYk*n8!ax*6(JUAhR0xZ>A)+Fh|NlL^YkEvV5lv|-R;YVkCX=NP#my|x>lub& z7>3axM~-8lLlYEHY7hh=KoiJif>s2~QEC)L6rhRZYQoWd0l)mv5yvrgXkwjdVmO$f zmH<^{a=+g{0ciT@vDPMNMWBIy#>ys1athESs&j)Qx%+}Mfberb33?`IO`x@M0EWZi z1sFKAa+<&kE*)1uhbCx6Fap}Ij6s^F6rf4b)9!`$R0d2Y6BGPFfCnStrlWA29g7FPzC&A=kvK2;HzdFPF@4Xp%*xKedH*IGkvjGnBbQJ|3fB!FY*mQ#x0-# zJt}eJ@4*x0aHdxlx#I%lXe)6iB*5f+4+;WZ*9L=i$itbwf2uG+9f2zA>#cDhf&MoN z+>deIqiHFB`59i3Zi1SE2cS7#^`^2Qa3jm_uFKU`c=cl0LBSF{I@n#UR!?BPUOxkk z1N}4M1zIw3jrY8O(#yYp^XW}cOQ1taAb16v%?6HjJ{>X6uLo`|nBvSEz^$9@c3b)K zcV8gMJ3#mfjt_tbeGRmEK%$?n-Bu$|4J2VH_NSYmjzHl&L^x}W2ifBQ$g+&n4TAZq zQ;8lCTcTIr{55KGGK?!ywSUS`zOxK!=w3pNF b`rieg1H$gC*Jp8|00000NkvXXu0mjfW6LB* delta 629 zcmV-*0*d|C2DJu|Bvye?OjJbx002BZJZfrci;IhynVC`1lmm}efPjEe!i!VJkHo~p z7Z(?bo1ZZ;G2H+Fxx~gIdW{^|{~jYD{{R3=Pfp9t(f|MdjO+h&ae@E^1}G>fk%KS< zeM%o0k+*+;0rE*iK~!jg?Urp*f9%!{}1e(*+Za-GDSK#_xS?L z%6S~_?uEg?Fbu;m3}fG%RG8oZ0;Zl;bnoc7K;fR}odFy?=jcpgf?eTEKL@_=UjQ6@ zjJm3|30eujB?y9mr#J){b=8%QL*N!ZpE&n{s>1DmV1m5}Bw_M!IP}zyPUz zSmd663y>4Jm47EBNRs3p)C8K3-L_yIs&J-nZWShIBT!|_dTSp@fJ35vpvtN(Rg0hD z4e2ImDR=eFvXR3fS=~e<+5?{_g^5%2S9iV$0xvz zWexQ4fW)$0yHAagY9I+qu{qrYZ3GJEDZ*K6+{h6(Kv5KIHwflZrxGJvEHKAZNgBgV zuv1Vrp~3f_t6kCifN>D;>zV==9&fAaQ3=*~bZAs-*Xl+3mebeu!3AIT7xU32B(Q`G P00000NkvXXu0mjf8#f`B diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png index 62e23dad5c7f005c87e98c8fe75c71ee56526e07..0a9a5ef08e4eea7798d0c391de5dfec0c40752cd 100644 GIT binary patch delta 641 zcmV-{0)G9q2G$0UBu9!+OjJbx001Z`C?a}|ikqJt*#Ei2#tjV(3#E!;o2Ns|u`_IV zQ;e8%thkw(nZ(4zi;IgqJUnV@Y8Mw5F)=ZKfPmcq0Fhr9k$Nx$+wCoYk*n8!ax*6(JUAhR0xZ>A)+Fh|NlL^YkEvV5lv|-R;YVkCX=NP#my|x>lub& z7>3axM~-8lLlYEHY7hh=KoiJif>s2~QEC)L6rhRZYQoWd0l)mv5yvrgXkwjdVmO$f zmH<^{a=+g{0ciT@vDPMNMWBIy#>ys1athESs&j)Qx%+}Mfberb33?`IO`x@M0EWZi z1sFKAa+<&kE*)1uhbCx6Fap}Ij6s^F6rf4b)9!`$R0d2Y6BGPFfCnStrlWA29g7FPzC&A=kvK2;HzdFPF@4Xp%*xKedH*IGkvjGnBbQJ|3fB!FY*mQ#x0-# zJt}eJ@4*x0aHdxlx#I%lXe)6iB*5f+4+;WZ*9L=i$itbwf2uG+9f2zA>#cDhf&MoN z+>deIqiHFB`59i3Zi1SE2cS7#^`^2Qa3jm_uFKU`c=cl0LBSF{I@n#UR!?BPUOxkk z1N}4M1zIw3jrY8O(#yYp^XW}cOQ1taAb16v%?6HjJ{>X6uLo`|nBvSEz^$9@c3b)K zcV8gMJ3#mfjt_tbeGRmEK%$?n-Bu$|4J2VH_NSYmjzHl&L^x}W2ifBQ$g+&n4TAZq zQ;8lCTcTIr{55KGGK?!ywSUS`zOxK!=w3pNF b`rieg1H$gC*Jp8|00000NkvXXu0mjfW6LB* delta 629 zcmV-*0*d|C2DJu|Bvye?OjJbx002BZJZfrci;IhynVC`1lmm}efPjEe!i!VJkHo~p z7Z(?bo1ZZ;G2H+Fxx~gIdW{^|{~jYD{{R3=Pfp9t(f|MdjO+h&ae@E^1}G>fk%KS< zeM%o0k+*+;0rE*iK~!jg?Urp*f9%!{}1e(*+Za-GDSK#_xS?L z%6S~_?uEg?Fbu;m3}fG%RG8oZ0;Zl;bnoc7K;fR}odFy?=jcpgf?eTEKL@_=UjQ6@ zjJm3|30eujB?y9mr#J){b=8%QL*N!ZpE&n{s>1DmV1m5}Bw_M!IP}zyPUz zSmd663y>4Jm47EBNRs3p)C8K3-L_yIs&J-nZWShIBT!|_dTSp@fJ35vpvtN(Rg0hD z4e2ImDR=eFvXR3fS=~e<+5?{_g^5%2S9iV$0xvz zWexQ4fW)$0yHAagY9I+qu{qrYZ3GJEDZ*K6+{h6(Kv5KIHwflZrxGJvEHKAZNgBgV zuv1Vrp~3f_t6kCifN>D;>zV==9&fAaQ3=*~bZAs-*Xl+3mebeu!3AIT7xU32B(Q`G P00000NkvXXu0mjf8#f`B diff --git a/icons/mob/clothing/head/wizard.dmi b/icons/mob/clothing/head/wizard.dmi index e11123c11e39fe35df88360b29f821c1db1b9a53..9f022fdeac2a30cdf1ac3694e0524ea17a2b683f 100644 GIT binary patch literal 5595 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 delta 4693 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 R+kmcS@O1TaS?83{1OU*il#&1d literal 98666 zcmXt91ytNzunz97#ofKQJG8j8xR(OO-QAtPK%ux6DDF_)i@OzfEnZk)ffwF8k8_sf zO0wCRduP6x`4X+Js(^t?f(ift#ydq>O#pz|1V7!#h+vP8S6d<2i1N|ab(6JpwQ#X< za^| z@>4E{uXK~;eXa2mEUkce#IO|knPx?dM2}VF{srL|ZAEjwDq}`UG@e zHjjCo)=HE;-1+M;ayP})h(zwh$FjG{J-!N>GbTIW^ohK?`_@M7SHjQ_Z5TV4%@!(s zv2kGg@67Qu>$CHx8Kb&?86AxrHb9B)uVrSaM9=K|qa4bG|9(8e#5V-gKhX6RkX#(F zT%}b#4U=T~4}3HCT#fl_mKz9TW!ow-N1qF-h6;EmE2Zs~b?Wcwr9JTc?5ml!h7o)N z%S=aC1jih~0H4GVg^z%ysSQCrMv%jA*TE;4j&)&o;`FkKfsIj=l>8!DqzD_VJ);Qo z)o$d+Uk85ofWWM=;pOokx%HO^p6!lH0nbAEYel%He!18WwL(*kN*b$rRZHUGN4$jx%B5xf#XJJ-i8G9LT1|j z(B|2=rnIb#`rEf}=>9JzJ0<*pq$fm0UnK9`=yI0cL!8Q89|-E7D4BO1fNu;fU>6B% zn$%tWn<}LM2_MWSKN;TBdK}ImDzO+vDzDuiIBN0xA|cdZ(J>97?Ui}w1#z0vk@YJ5 z-`4Q%J3KeYhTTYLZk%bKn#%ple(Y>dv)NSK=1GWXt~`E)%`j?5g8g8ZJnPx zqW>X;8XFsn^}ci^w6qAq0#=hb^pf@1Pt_OK_J4Tkzb#m9(z`Nv4PE_ z?>idlzDTNPGA(zx9uV(wxR&z9W_M!LA1RCiTdp|2Ms6(wHxFc_%F7$ zzG0s8KR+Ozq_dCC1XB+Uj6aGbe*LiGk52KY&NB9JkAjFuAtWTkZ3Y()4+kIr6TVtQ z$^AV)@1;j<*EolDeNt*zOjIiaT9In3&q>g?gAa6l;}c{@o?i{fPO7MgakXV&k%O*B z-ngP17a6k!E=(FV<+H8=EuzPm0vm|>h@T0@?`@+@DtG|>nDhFV<^++Za|u%SeqD4N zI~BkCsQ8X(K2BAla7utdEkjZtZ)2X)KXlwSH#GSXJ1zs7!URoI`^)%XI2UnVI0*;v zyglEZJ8~_!P|M(rhC&A4=)TLGRkkZ}&fR$SC@o#FMc78r>5N8XH?o)RVjFYSDP76%;pFbqP#dbRFcJxKI!ti1m1rngGtqlO$ECc`*Cnwh3 z`Nq)EYze{v2Rl1Gkd&Pre|6=8PRbuALP$wD=|4F!5m8dY2y`zjeB=`G$>?Gyt*ftx z0djJ3jJ6$T;i|fxI3w`#8E~fV1`li7+=ITSVIh7mfdgjF>CiMUwMhLUY6?7>CnEP? zS$T_8N2CAiyqGy@8y&y<6hBbu2nST5kMZfPI(K4tp7@#W&#wv-7Qjg6b9U-f`Aw3O z3SHTd;}F7~`UeJU>LHS5KC>sVrdqaNhavq7U{33Vz;+)ec1n48G+D!PeYw(#10OZt z&<|(-AU56j;<3bds3bQ46|jbon?h9qz~giYCZ0hKeZ(VQvrOH<04-jAmUi{VsLPBB zk%fgtP}QPmVc}bJY%Hy|Vd>$((9nrr2@O6WA;Y0#b;-kxugeN>Oy9%QMGT-M!RGqXv)P=P{ z%1`K7&fhR-^tH-!T(`$=ifE&#U!=w}DZfQAo>ixF5yy%M;$&|-qW{n{ z!=jCEAs6MTUXQKwkc-Um*JF!`5r#d~CTv`n=6zq{l?c|wpe(0v-j(>{I=s6v59*m! z%;02m&)@_CUPqP?Des35OIP#n$4DvWZJs?4(#?0?a-<8pvjoXQn+iyR2<|Al&b@Dj zqr;miT2GK{hvNnu&3|U|8A|9X3A6N8QC85etS?0+(-R0UYEX}eHpL2JT*!CHMH(0y zbXxH@Ww$O&4;^zsRspWvb9P_YR}Flg!RTpaKJ&vyKkru0M#Op{4kEOq!Y@Ta2T%vZ zmPCFhW#A)qb#pP{-vQlB6kG@jr^VC^J)jxh*A0+>URIG{8YM6jwwXhQ(xzQ&v$s6lvX-SWn)glF$ zJ~ycM1VrBC_>nR}qz(1-nDH%3YWA*t+V70DLU$84Fmh(~JKb2iSOSr*u^;137D?6o z?wMFw`v9SuFAF@t__?K}<)H<90Bl}uXOHQx+B~*lBw$HU2o5Ov_)(Y7_6>OW4GP5V z2j*D~P_0)V@lIKpF5@T5C+>wHRKNnG`X_2ot%H`I+Ba>}!EFH%y55^#pdiz~SYZ&i zO!yAsGF&flXo6BKYM029FP7eVQmz2+5}lC1@YZSqUoP$|slD?-sHwJZ7##3$cb-^R z$3yoshziHRbp7o&uIT7!x`2&qGDhH4eev07cYWA!+J-N!w?crV^M52Bm;p>2ntkh1 z5rI|ystQE|n;Ta>Un(9RKYMw5HwosXrpB{VRuIO&_?%)e(1@m}J9J(YGYs@h^k9LP z7C2o?UAGr85ddA(-M8qVEMhz9hSfb!LXog8erN5O&zKL7B-Wgm*uwC})>Kxqd-@$r zWQ+0N+dVz}^YZ*d7&>%Aid~sKi-W@ucr(z(_|d(m_pHzLk91K{Q63-0MOKr#c7Xo5 z2*w4!?s@E<-(l!NBi3#ekZ~M12!AO3v~kQs=P#?EP=9hBqR-+TDBjd*OSS?a7f#rFI8trWgn!DlpWg?M>~2t-f#rvH)Z`Lc)C!5mWBov z4ha(;kd>D=2ffTE@FVXW0lI{{0xr5Zze~OpPG~~{GGA_A5{7y2+*}F_FdBp-Ok(ON~f@8pyEmc7X%pW2XabdSJciXy$NTSy2 z2BJ++D~1`w^?A&PO`tp-~fA)p=SjOr#j~1{gmc?`g`u3J%vGg~&Ag)+^X|?@l zMSpE&c~TNf-TR=Fj5^U7-`gwAK?y=1;-@oDK(Og?$03%hgA>T6fE`GjUllUv6MaP_ z##tg6*KS?nHzIa+4>DzJp#i^$M@?Txz&2?Xj7q-tH>olf&!?o2m$kehTQZOqh|v+* z$-X*j`|(;y!YB+`7noA}((5d&2CW(JHu@Xjh*jx6ndv<)Em0Po5HB4PGof~nER=XM z&{}8^bq=1JSmWeL9qX?Xv0 zs6teBJUZ}aF6i;@tY<=gLAoex7pePlY5DiXT>Fqg5!(1YM&ov^uAmX550j=M;xPuhBJEbRLr1?pD5fc1s8`1=v{xV3YKa!gTq8NIC zJeM34ZzfDh@A@taIra_iby5O^;b^J5 zS%qmVOC+(q_KHAt=?XOln`ASX{5+t7wv$mpFZymBDgj6uOW}Yc7lR`@T&`#B4twF$ z&nhQ6WYIN-OmhtO0_J6|~Qe&Tr(_9|V)?Y}2c(Pq8^O?KR(({`iZ*q3h4 z18Er;5Tl!`(HKG=pg`V&_2&NmAc9OjcBlzuU*vyHNT5d}*&cG7^2b;{$?< z4FqCGCKV>u*kr@Pw-;TB+^*mN<249_Uz+3Y#NP?ohFj4s9f7(&^+c82-sp?!0}d)0 zHhdw^`Wv-#{?erigCY4YTNOCK^i^Ih>PyR0575re&dMBCLnqjQJOG zxy(#%^~BjanrJ1;$15B`A))-hmuDvzm)@nc%*SnZ)~}`?|BLJLb&x6h>ATK3kiR7S zLtE~`bJCuxTrom6xy;pXVi(8D(@}I^nIb=#WBOCfF#?E5Oqc3KS{u&Xx|+kyCeQjG zj0D^T`(giym$h6j_6GPLdiqiNQ*bvg6{|saw8Pp?!mm0u#>U$IRyne>vL2A2nEUkb zVp)G;i;+3_dhtgjx7LI>!ceRo1yIj*hED#T?W`}^c3#{ z*Sqk+RiSHiaBZQ&Hso?g(D#aHA2be5YCB`(Z#UXtVkFGBj!%Qg&+BaSCv%|TdiA&V zhR~;&O(>{>Q?EOV7GaTYHcp~op6ElUpBMU7@6t3a4h~_Axg7PY3PskRh&igxels~v z5K(^)Zf58W=0QLjU6bRokleWfOct3Oe3CVf)Nw9n>_NA9kJNUtdgcZdPpUZBsu*Vr4%JlEVa^Ft?(lKeEH$(~at zel_Ftwz;n>M=Qf%+wZNTUa87GsENGIlrOcJ)nz zvuYA5?d^!JL#ZP?6}r5noMUe)E$}uzQafGVu|jrfJ#s?9_*Qa3ZF;FT#E69d_iVO^ z1NBr4zPLokO9DapfB&=^G$0tuaFPm#91H>qTevPLA8l#I0zY@MOA81`V4+DF8&h0e zUAfK7lVGG+vgqpTOY8lZxfCvw+}qnTgVbP4-A6{o@3ufflxHI%{$@X+Wld{1fV2>Cr9XLdM60>U*3dj9)E zV8rtqJ7KO$vMh#x)Zd^~%x`K3(;*;TL=4r@;SXy%`y_{cgn+=`fljfNOHe6U3eSU` zxMx|G8iWNttA14>sHPh^f4y91jYZq6znhXhw2@y*AqDiTAdXwUdP&q1zfk|F9rFx-Ex0%#Tr ziF36Y$g6Q(7^H15rH;HqpjW{b<^75$U_z;8*nWd_dv>33Egu>wzde&m3QmZOUjxAD z>`a0F{)Ih=FniV2j<4$T^Ye4Q{>Ty{O_Mjn>$0uZu{lvNuc&Lc)ThrxizKaQj=JHw z45U4y@J#ZHmt zw$Imlm+KrSJ@B8bQ0=m^{`>Bhik6^wy*mivr7Pxqsq=A{@7p2EtSz_tR82?`(t5f; zNv5wRkx!tlqezykDy;^+kJXCr(lZOwghXifg^n?r%5MFHc{cL)&Zn69L^jOPI z1#G>=Q_saw2Di%WR{5l0@KQfKxRLsqBQq}1%-kVjC( z?DX%YQW#0sK+nZ!L*Uk)I)Ae2*y+Am1VxD^*;PY=E<>4XA9pu(&g>zXvw(?{Ag(p+ z8rJ^Qux9W2dg(HJYk6j^C!ccrV$k+Qik5rJ4n}vnm@~kKmRm~Bn>!^OA>_~H5b5}u zA=H}5o8C^Qe>(i1D#SJ|9JWJXZ>Ble(ZJIgB8|AdQ3D@|>DadrSS=^j^Fg|!z0QU2 zVR0?=&eTNJFF8gJhlQ!-ebciqJ0|&h#GL@!mS}Hx5WvJ}isyjN3&qWP6-UD1hFU~e z7`(NuN-NJFaJmQ73xzV!zrC%2jKcp$BdaM&cD*FIwE+o14hW)a{PyT4AVLIi*{;9s zU!O)v6n`i+h2AEprt_V@`T9cD{2?HNgI9tQ)H8MJ@T*Pu(nx~lG2nE+y?vZO*GPDq zV3eCQOK~Nh9S62Js(!t=HtNS`wdo~|>?*#)Uq9Kg1-emI*Mg#cGx0ynBy-lSr#Dh2rJ-8B6F2-Mp7eWH@|}U_nJAd*OVV4GHu^A9 zKY*=kpqwtBZZINOivWOnH$1f*jiF1iC3!XV>boy2F%Z}w8k1lvBKAJe0krO^Ne>3* zQ0~bnXS6R3h6pY#NnnO=Q;?A(ZTGh3PU~VL0g5b5fGG?1jKzPOp!l9=6C*;^wr4y(`CD2j$8L-J36ivcA9!6*xzdS}eW^~B`f8|&DKVJS z6MXLOmXx;t%Yuk?Due)ZAZ9s-Ru|n}`)Y;HHV#p6c>c-^6Z*Ky@A7#)ZM( zz6lKtKf0{-bld*LkM!_ByZ7XL_>w3F1l4CQJ8bPx`oWH4d)WExv5q=z%`_`2Uk`!+ z%UP_-mo)j}J~s<52vMbe>iYgD&RWL`slr4APXe04h8$?%AqQgNt#@jh-DhHgcZtJG z(~S6OBx4#CO!(n%&u51rRbz0sg!|nw^DX5woAdFG=Fi*nUfaXoEfk(I_zsEDG+ z$Clo;WNHCeo&vuuaY3C+F(mIesKS5|Ap9Z_(Bb&`bMK{A+#3-TKro>8#6M>LVFM<5 z_)Uv9D}lIpr#jtB3`};5TIPQ>hZ7R7**yDX&mi!BP4YYO_+`MXBssf&)x<`xDC%w5_djHFPVbrpPS^2&AFK1 znx>{fi^mMly{ITMjL|~sknv{+jNG$C#^`X|s!>t^dd?A9nbo8ACrzWu=G29^0@Mz! zwMlG|Ihv|q8M64lQ%3acRP@8D*1hUsF%Xp12X2sT6A?$`%jDWMg_?J3L7O zriW9E?hp)n1;zXOMK^lN8ysR{MPT8&q4p?|DA%gldpDM|F<)CRxJA&cjf%Oqw>PR1 zL*!rf3)IgyWu)$hJZuZkDU0}bQw3E6*#cdSD7eQ?Nh2eSpCfZgy1<_w-U=U|EK9Y@ zVSt$cJH^5K$xc*X1x6_v4V5h6Y`4@v&A)sVLOL|Mdg!<0(ui0TadC0zKzHz3<`%ed z!FUpK^ogx%Xbqbko?)QBZ1$b3F4Mj;#zD&g=jS14nf)6ZPx$&^lSm3-C|U^&&v!CR z%mgMDP031!1UWI!TQ{kbwFO9JB^wNoD0+pAN$#*tuVNh_{+d4;8z0{+8xCr0 zkl7X%6qM#j?p_?y%2H3kZQGAuKguuw_aHfp-w)^FQdnMr)vTqFH-1(#qL;y4&uJ2f z73}YbMA>KwOvMkcm3Y4s>%0_~ZleLQO+{Z#0wDU4M8M#DU^J+0%1@j`d}Nls2T|mR zxLl_QS}?qbfd<&g8|nOhJUs~)1FU>|s7H+TumFBqTHa4(45fFJbJpe5wWe*Rnn5fa%?D)mh0VXCU*~Nuw9Mm1>=~q+bm-7}+W+DcL$JgN}TL;PO`H+$I1> z7x5LInVG2p!>ZSqOA02GI{AI=-;Eb}A0HCwNOuRN8Sp1BQS?_peZQ6$V*4C@u(}-W zuFr!}>IVWvdYje<))Q(NAxC2W(x~3}B;E`=oO>9_7pZwf+HJ0|5q@cyC+2eyu7BQn zk<=@aZT*GnKL%f}s*ga>Mqh@9@=qqP>*(~%XhzJXu*&{+I9!1A(J*o;8SB2!3B2W= zpv4dE;xqVpGJpZIf}_1C;DUk0ol9yOY9}jK%iT@sy^Es?{nmAZt9jmFSpK53gQTmL z>ESz@M=80o#l0e(mKo=^&ncn2_reqK_t9G|GYIW-wP}fq_aozN0a12P=a5ceSzWeOah(2rM@}PjItDA`krgwTs!=hxXa>A*1n;sS>-SXYX!p8l zzCT9g-3T9=E=&e%&y**IF3N1Hr1n6u@xXPcYW=U)bwlH|l1RLLAOOViQIs?5 zxZve}7QGCV-`cep#Cri@q>ifxF`OUg`P7z)x{gkwQyH$i`#<4cI>K$o5^8QCIMBfe zx=Jxi5YU`%Ty(g0(vP}w{^x)^2qf+yfy8mZC9GDbK&)J2hGJ8eZ_&ywp zbQiDx%uxjwrObiUz5iHMy&fK0?lq~B2F%aTyV`)6=&aeG!#UikH@&V_Xd9%aQ6`k; zS6WjT6gO5fi}UlIHn;APgF#l-nI3J{Kd(2|r`k^@W5O+Jy5WIl*u(mXKU2(OQw}{V zq#nH@T=-x?Z};FwA6TwCi==9-lLo7sevpalf~8(ZFU87=JT|uOlhG2IR(Rlfetj>* z)NA+v*$EI|^T6d-oe;jKB0PXHW4ZtC%aGWkcG+B%fNw4YOV`q+xug`75?N$IfwN5Q ziHVe|(od^Sj0#zKSPxDfSmq3>*{Z8Z-i4q8JaHCC`s#!Ry#9OckpW>zSVtiqIDrGA zuWNNj^;v56VR2_DQKs;tRHddfl&6(U^Shx!diZXMqDreYuvwB^YuH~7rjByFTqs^| z+;0r0%H-lw5Z)=CQXUu#q@(dy%FB{#}|~?S|5HMC-nS`-n34+ z5YWMiD1p#5ov-ym1f%9|_ITvcmiLN4+ORfY{q5I$%igU9VQqL*7~C1dz6ct@vm+8> zS^Pc_QSIxop<+>rLC?|B(}YJV35NI$*|1RzMtxQ){<;_Ff3JNi?uWMVV#Rot`(k|K z(2d0XIDGfA9K9Clxb<&O%iRtK?Ycx%77+`jJB}Hzg*RNY@){F(`$M^VlNyGcaCG8I z%kg}BoQ?cBR$$qyM@BSDc54yogy(IP`AfUrHXuU3ANwb$@vO|PrZ*a!HE#!!_BDXwCW?7X)Iaw+O zg>G4x@3qy3X7?PhGqHeI-s)_fmx`HR-{LpNo&eI}X)ghfpULoeMB@%ih*(h({(k*y z6W||)jztUTFVXUIPWc!EK~tHM>Nnt%=pFmZ++IwlK6J@gbaxyMl=r`1Rm}UsP=;`Q&fkVU&3=9MVjqN{;woYztyI1BQ&nOEc$ZMU8z<{L_ z>Zikm9~BoT>*2w#sj2Do(&=S%i8m-AZD+T;>RGHA?s_mutP&Wud;S$zoSRGP@0W!~ zKnQ+uP{uKC^I#wPH?2VV@3!z|;PM7yCi}rCG!IA1ls?&P;H`m^XCoYws#o0wEbzTp_$)nvBST;w6Tlr`zCLv_?&ykl_23|7hS|wsK|dw{+*FO z-0^Y$c%XPv)kx2lQd%~nG!m;a#5RH(n8}eJRz0nNr+p^BKBaQRpHuq174m_0?`vZ^%rL|v`?`2!o2009Y+9?@NWuy(e#qZbHG zucRuFYnEu%7Xf36ps%c!{_)wkGpBvd?o~S65y&^Z5{+iPyHp+8J4>dA_Z@y_4F`!G z-gpjhNU*?1e?c@!Zv26P-)){)Uz<1y;QhAd)$k0W%I;XX1wy}6ouFW0wW>BZ=vp&(ZbIS_WDIN5EaJ^WBO}Sc6Om8J>ghuEBpM$Uol{U8OPSM$Mv|Xg3r-=$OXldmdVF2*J{ppeBbhQ;v0gDW@QJei~f8^~6;6SmS z5;{nBlV;ZJW)j1<*P?i!2}tI1sj8E(K#PluS7US6_1xYEz2b-U;Qaq1Q;i3ArG_J@ zf7|sO4w|50R0ywVunS8>RZvYp-74(;FZEk|7THe!PBHX>)8g`E1(0Nvi0e_g&T@%; zf~M~6CEeAA>2Jp!M<9k0IJwKf&EZ=8e$*}ax+p>mZPz^ExL?zv!L$?qU4qV3PBfp`A%(C=C(J!6w%_oh`x2>Kv6lT2ZJq z?SW0{^v74-u%rHqglv~q{)O&Eat;2zFLQX zV~|GD0i|u?7>G1zGQByREGS-nLvE+}P|tqU7tzmO0MheSW(xU0WIZLSGu{YS1`#2eGiSOiIdz zKFhvx%MnXk`(w!cK7UH?km=R#aKXhDxA)a2CW%Ct>v4NTp5(D5FxGohh_jI0Rs|GX|7m-m_R|&ws9dgaUk6_& zX^e{Pj}ZKbIf_hY)k!}*v<6qLn_I(#xAcm7dTwGv9J;QqUjB4JU~F1=D!~j7k9s<1 zfLc;h6XumTAyfHJdCLz33~D(Q$&}_^QWk@8)USd8$&dW@f5L{784K%vqFR2K2RB7f z)5rEpE0#_WY?u-wZUj8Cult;^gI;iF#j$Ikc_UynoAn#=?7tz3bAQALvu-Z*YrZJCIGdMgt5NN_6O3&ZT z9KfQc4JAK8!^GTY$?pk$x?DYz;7VA<9rzX*fk{uff!L`B#Rj@Z-j9%%|1@U}J@9x5 z7LW;&aEP{m15Q8r4F^V!nuWjD9evCzQcZaH;h>R0dGj<=tQ4}u{dtVIAkYyk4Oj`EX+%GcW&jnh|-GB zKt~q_BDe0Xajc7t|D?RO-qW}&bPc*oWu~X+)zlQapPl1$g-+BuY5f`i1aQ=1?;RuE4zB5Y7d<5M1`MW)&+S=L*-Y0L^JaeFM5tuMC zGG>Vd>K%CLG<`Zo#@oJ0QdzCjOS{%+!ME2gyW6 zxbA(;$Uv7Ag!z%<2s(HY5|Yi!b*tZcFC;+IN~#0{dJvvDwOl%9H$EutTt+Uz`ZJ9x zsDSu30D{4kw6s{wXOOQdqoRVbkj=b3^73E&&}Fk}FTw#p6$2>9Vp5yYBJSKwy8#u4 zGwvq^NO#FrqEn5)T~Vi4l`C%`7~bQpl9sFJ*bfYUNx?(}4(|ZYVD|%JaGt%LizbyBNDbx*upn?(DAO^xlMN6#r&{{~6_ z=D`a0mpcTnd@Nvr)YGGBCt+x)B=6@>*^7}hbI@`1kBngUMetR-vokUExVF6jz^8nY zG@?Yj)8+eZTXS=8KdX})TUm*mWz+CC>7|Ebzs6A8r>A2mtU#$Y%kMoG2X?L}Rq7%l zJ4HX3k3ljrv<4}G{v9MGYPp2PP>>KPJ2v)-edJ{@-c}eE9htRvb|?a`dF#~cdh*ec z*wCd&9pAi{SAuS>DmdIbI**17T&r^nwf7ZXPDDK4KcHdhR#x>^lq_vnt&dAXUAUWM zpxG2~h~4oonwLf(GfTI{i8=y{AOQUHH!#1pW>(9|Hupa z>yXKBPcj(yCbmqg1e8{7I=_9!gfl3O3a=x_klje?=LIT|_jgv68TgW&y_-RJgJAD63ON#_~o9?$B_S@aJoXCI8i*5X{Agg8lgcMxe zJ|+Jpr*WD-Qg#O zKpDI5n+wV&X?W@V=RXZLV7&=kOL?V=!;OQMJj{%U(q8$Mm*v_Sgq+-v71#~J49Y>+ zao1;8G=!)3xeis5R!e8g*CwHRT~?EUQdTI})hC$Nrio}o98PPKF0HG1-7_4AgM;#h zElyGgJ~ET@8gujW++aXW%Ge8{0`R>gnU7ji1OfMtkG^OWabb=E9nAsvR+g4M za1JLAXIBTirPxB=D6VJPH0GQ`+pA@=vZ}^2=Jqw%(1;e8k72Q{=D%|X;Pw-x(3Y|D z)~)2_F;%my*N+Y&DKVv3EUng+igBSAebi?ec#Hv`L7l^2N*nArqDfyhBQ*YMO;x)N z&1GPy4#+_pS7LoaK>KETf0gDgOKjZ%z29#0yC2o9F@4u;59SDZ`miL>0d{FMeqP>& zizJxW7@)=NNHg}}h@})+>w=UP$fV@pz+7!z+uF9c+#Ucj{#KWlTilGAbZx;Qw^7TL zAv~`93iyjzsE$t~ATXJSl$Du@6kdQ0I&3pCwn|e2R^`H}rjMvdN~{T#)^GmB1e8Gi z+E!%JZsD4mn-9Wtifv@o72zG$--jnAa?Z@o{&E@R2ZJFDUn~zqwm=%fKpO18E36kk z?)xKLvf6uQNS0*s5}*6i{%$E%0F^Ky2<5%@`mu%a*2-;mr6eeS#Y$8e^)AfqlSj>c z!Fc$063dvI6)Wa@E5(v3SvYMzU0_vfH7Tx&ypT19sQQ@}ZN9sz>iU{d^zz;ybP8&} z{1$m$(Q6(KMBKdz)m?)*Vvk|8JV8KU;Mc6)Gnf8J*D~!8Ax5oD_c~@CeSutWP%29u zz5)x?CX*_Hnc;wF@3l2X>PwToiLixU&)NO=PGS(O=zhB45rq??c0CDHhSinNy0jJ8yFGgkS_s{;Hcvv~MQ}vAo z{0}HgHdodNh567PKmrxr+A7{FqupvEOG@qoMnnct4_FBp>4nW2u`qy2kB96dJqyfr zEdLQ+HO~=rQ^5Ag*uaL=C%`!E%(|U^7%Me|8YQ7$q6$4eRyMEGAYoC!16*9eAIk@( z%y5#1iw+m7IS*i9?C7 zTWYXLrt;>o|HJ0O$QRru0CVC$o+*GeKhO93_wSzUxiAN@dg_bO-bqI$kWK+~i{D+E zBpi#LV|Q(0-VruLWMz@n`QAAIl4JMRErAkU3ZuDsFqoK_Ns4ri2<#W+wwQ( zox%SGBM^UE@+5RM>7#}hs9Q1cKRHY*%!Wwt@YIdJ1eW~DBR9$@$(S9+gkq z9dR5A8wg_>fZqM^;9e;wEP#YS;t2!qS6?7#DTZECb*t!hBsj;ffkVRGOk=I|){<)&keTe@(C#;BI#lP{Jt#Kiy?!3pi3d+%`tY(%3u{+FWc( zQG=`M&gUWz`%5DtOKL{BU%0F%yD_~bERf>+uYjf zF>Lq3u^jovy+DtPVwIS*`SN1__ms=28vw?QO9Pk`kNq*pxPT@Pk0jEik`~sa(NDrq zuH;@22Y^rJD9-;ELPB)_|D#%EHb#=YfMmRL}k%^pi1x3BLF&lw{O$~#tGqR)g===MPLd> zIh`!bwFFm=K<3w*kjO|wD~yJ8qiJo^`;%-NWozoKy*)WFMGcw^3bw!_dTpIW$@2Ma zV+WE4MY__3FWd)3@RKD!EJ|{*#GPhcj`$k?0aVuX%3_b;HLVDvAx{XcV6*{?H z;C=_+f2LzCe>8sgR^z>Q8-ZBV zf{-cB*xeNT{bQ|>(N0jZ}y*hIbVpIlx9Qf%OFRfgoK2-nHh|g zl@;XScu=&(X-l-ClKgVTaT~q|Ku?qCBD=bdz1T_Ih}Or7GI|E%aCl&q71vp3AITS~ zse;q6r5pW{RFNSP69F((W)ICRL?N@QaOQ4Aw|IKkF*ZZN%tp9hASIcJ7*c6|0{ueJ8tZ~yiX+vKOv^&5Puko{6f49-G>Xe>5{OO;(_g2Bz| zXeDT^kQtZ}F!wqDXdw~X+c?O%rzANq(19ROM%v-ih-(3cA%p*TQC;x06$klIUU;6o zd6=JkP&oN=Z!85VfKW-C8W?&6Em_8ej_R2wy+Duv@X6W7u@_BAL53H$wT-?i3-V zU`)EI!LLwQm-G6(JU^(jk;)qbs96NP|DN+n>%%RMb|d+h-$fr^7TulZW<&{kq234| z>x{|L2Gu-+N#gu`isp*#I=a~6EnFGRkFmTrI52>cZ$eCi#+8P-vm*hj;wQpI`gITKzlH0!$-6=vGkO!Cf&CkBiXERkt5|*|%?xCt>$}0MS|#m)7yiv2?*E@A4WR@p3#Qd!CTryeU$X#GnIHdoZBWhpQ7b?xm(qp& zGk!+wt=IZc0>b^*lEtR9!lDrq@~xyQ_HsWN!T|JeA*h&WM0RKq-|qEQez z$ih=%gP@~N8{IiO%gGEpFmOplvR=kPc^@vt>%fW@`5%it8+iA!l{>5imwqY7dsh&Y z(kW`EwdX3ok#BBqa&~rj;JvsdaX;~ENL@ertWn833S#<7BK|$#ZGjkSLy@r`fk#|UT1mC+36El#7Vy#R#vRkfi;62y7m)Nd8=@x%xdCpE(yBr6P zz7RnonK9pqYMN@5aar2-#a}PPw8!7v7!Pa)G@XSJ^r{>^3&kgU$f;#+jthy3y`ux7 zG8Y#Yvb4Mesj>%<8UMtgfAV}sZ^_JX?!M-~b5`q;N;D{SvdmTR z>-XAJzhg9i!9~OV{FMKt*4S`svIZ-=b#!nTSn1qPEO}ApP&?`ZxKLU;I!kNo?p*#) z*no3P1SvM_LR*|4A$`7idmsnDGr`bowK;Ub?-&wKK!8o~V22D=g5mQw#Ez(g#>q(9 zkK^*)<@-ZtJQ&V$a&HG- zT7^W+=LlRs-BwvA!4)B)#J_y~K0?zk&D^iQ1=o1C0dp7sai017&#bN>-ykb!0~6(% zh;W^~SVGv={;!k6!iL-Ianeoxl)=QjW$CuJj*j@>j4RJxmQT6C2hd~ChT-jjcg-3f zfHd<`Bh={i+cz!%^wT);mL$>V4{9H#S8~`GK2c8N;+28=H+k>3{GYyId5+`4USqYT zx@NzKb&aoa{P!ZfDT``%cP}X`9g|{0o`dU4?c!pcX$Z^ktkz$!ce23TJEmhH}CM6O(14~rY?bb(ify2}f zReqpwV;**cOc&h072fL28!wK}e}<|KyY*nP!Lh!3aDnun#1y>FqldoF%oJeMKg7nt zQ%p0CYe+xrD5iU6`6z`+kn@4M9v?N$gElAwe6*pSg*AC&epndt%{fZggIFXt?r z6A-Zx&&noBn0Ke|w~j1w_4unEcI$y284^jQgdQ1z$6n38)HOaUEP?1JP+6bIFHl~E zSsn6_oRYSzb>=pp+(GDDeUZeC zp-(Q_Z)KNZ+zwP|hCKDXqYXMd?*n{j-yP@6vOlk^l9#h=(?0E(9Sk2k!14=OUS7@{ zxH*5lRaK>|rZ&BstC4`>=XXtlupJ-+C94jKSg?;Fk-u5(GY+60a~!jbUKgGieEEir zW83h=|LqRJ!pno82GOGqpl9gpo*<1jm|#3&(J-vvo%2=YHHrP(C2Q45{<&DW^`xX< z`HJ)%!!xpsx*>vXDTuU)Agy!zU+U}Qx=}@5WP`b1oMKqydO{s^_ZTgxHQ^CG&8lV( znPplGo!=S~akXQm@cD&%h(gk{sPU`UfQkUro_+2NzB=EZW-H%rN3GQ-aHT{I_;A9WCi1HRv^Q@T0?_ZT7svSE8^LK1XsiwpP zhXcU@U9p(2wO4m{cY|Oot+5@Zwz0KEg%B{v-~qkJ?}x;Px;*x6S6pP_HML1BkHT}4 zD|NqEShI-DJYge?h`^gBUQSK5nVA_V(5ev>-*lt8L?fmF(wN@-VWpXR>oUP@cm3JAHXl!0Q3$gGmUW^Wfm~BNdkBGle1t1V#g!p z@$&*Wmu1fK$A%1kS8qF(u^lnU!s6olF3nzVCwb{Ys}Z-Z7P|#>+T15P>b{VU`=)gA z(qokt9I*l?KvuMl1;$ThE2~28zroY9Z!tod>|xqYYfG~v%_Afyl)*pnTeF%jc))q% z`LON$WbEC+_k#pbEUWt)%*OOuCyS2r49_O14`1;F?q2_yoOD^+J2;5@@PQh%py2j) zSV@!A0ZO^-x& zv_s*DC~TyBcX=o`PCBjt+dHBTIgnr=5w z#l>?8wl4^zA&{5p+Asjcav8I#=T@6lW2KhK;6ot$C&W^{Arm{YU_s=$?-PxW6`}2Q zFj)~>dXoZ%sU=& z++&YY)w0Vae{)li*w^(0&yc|o;_MG!e%C6eTab9*2 zQ8mTk3` z{m*LhCML8qeI47UQGEx6o+va@b6IlxOv8Og)}Buvd7G9@$W>}Y%sOmRGh21q?8$ zMMyWs5wrc9$jq1gPef_RejAEE+SxwyftWCC4NP7gcM}S#6k|FBfVWmsKPfQ9DG@p+ zeJ2`F)x>(56CQ<)$(Mn9qd`bp6^KVr3%kgrZ#3moR1{#0u1ief^M8a6A?Q(99+q5Y zv!*b1pl9vr52ZS`@bZ@gek=Nw#*d6C#=hv4N2z`8+Q0G;K;!X_9S#MjMo4#$d8>4w zoRFZpvatBi_{ zlGpVh)BpbDrS#yVkiMVaOJa)(i-<^x!$-cEpj^oy|0%@;#nBzSH>-{`rH@QbMwLcr z(Z?fjGsWy^;Qr6la1`TYP+V>yG$)6LyIZsbo6~z2g&N9*NuW=un3*k=o)Xp3m`Snc zjR|E8t=Cxfl5BfO=16%H*w#I?N`Rf^@yF_h?0r_TOj7HUhU%e{-Pc`{ex^nViooyF zK)4YkX!cKBFw+Se3O*iw$L-HhRSg^Ak5}_dTk4HVZGqwoq7^3X^w0fhv~+YrfpCD% z58+1`6BAS8zbM(-0)t}jU{UUDP~brhlv&n*pWEk2)J1rH)NZ6T#O3`je|^PwV^U;8 zAH5~Voyg#kSFiOR*0t8BQnuVAR;dTc7=;;;e$rvxviU7k2lR@ojgx^OMfb0BC$RWfity?V8 zz*1j7lH(HT^F#1|YkeSG(%vX~duT$xKYPXu>bMPW^-S|<(cyd7j)#lJOBlWkYQ zPPlftaLqe=A|%a2{FJg>DZam~taG@#9+KjbDnl&7!Y@78GqbV|b+%HgD~CCJuL(&B znKM-d>^_F`F`=Y+NqIc5vuv1eItylAd8K;$NEWjjLs3b9lA0|l#$xQ%LCEI`=3PR@ z$B)uDQc`K*V*)6-nW#|>cp+YURmR_976ShrWI|ywGI!@XJ^gjW(*X8zIp5Y+et)=p zA7C1lzX!aJj#Wsts~=NHN}_bBfy!p7V+uCsqgcFq%^9sg=wVb=BY6Wl#QN@D^(7~v zF}eKdZ?~hJozBzEA#D?rSnp+DT(<_|r>-w@-hS%{_R*#j_*S&K@b30tSgi5i;>|J3 z*zOi~;HWhd2os8m@x@es6BBv62Y&u!PB#4BeK)_{go?cS7kPD7-lFgY*&YBB?#G85 z2C^HQm?*qJK=SqN7@6cyT7FQlk!A;Tl5J{UUyqA=N*8Qgf;LKTKyEdg^f6t|zA0gP zipPt}UW8g`3>sy*Ca0l6@F6>!xKojtO_Ulll*!^Si1xUF&-~eT7A+I4>_g__at~k82m5(Z-kz?ozo~!UTRLBnYSnCMRp6$8o=bwtUbof%EBsIWZ3} zA6u+it3;`vNh?%VNp$|gOYbDm!S5YCS9!V8ME({FRntF;Gona(R*p~Gw7M1?$+_st zL!pR=Ur5Zpy?J=jE(%e6C#@QN82+PypLN6=c!_)}EJRiNOrpG$?z2P1<>BdRIsD=A zOxw#=vQMeYP7MlR($QaDUJl$~IJuA?9>4YH!int-0V2V*SpGH$MBH}<&d+DY_XXik z4>7E_CziQdLHkr(eB)nISSUZ{W|*7)9I`?yy`acS{owbdWX)(W<=c?EYdx-`z1?(0rKqyn4&alaiv$@4j;X@RQgi)|{ zKUaZ%NkPMO^oB0x6EAjF!LmXT)b9?>Sq{iyZRwLP<$XW6xnYA7-7i~V(5DFKrK94e zYpxTsP3CIvHm8+V`8m0QrrxakaJYRHhCnWt>j+Kg4Ikk^A+)}t>8%Do=p|;UeD)UI zRIRK9#mqyK3sG|_%DQ(V^nuzSbJ$j!nbG$^-jTfj-S;JkHw;?U-mG5#6>BDP)Iy+R zaT+UoQAQ2f6Naw(=>=#=+Bqxfye6tZ0a94RN=fThR9YG(WdIc8bo?9~L^&`}MW0Gb zu@@H?w+{|3o+>)m8fqCDMopAxDwOF)C?c!C3gVO_A5v1%0xgcjoSgR{CG5-*@RY1$ zVW}B+2r(VekbhB@+~}lLG7%iW^_coecZd`!EYM;f+mHuQyKjGvS0|jjn#)ALt4Mp^ zw$p4OcoYB{%LefIRMoLt@o*e2JqtgJ9kYDXzdKcq=8Gtney~?eJG=--rXhf#1~LH=~DVsUXBYNp@P&{Lk-L_B40e`TO-|YAvAQEh!ewp)1Ura zEG1_jZ*tNL4U*3HtG_c8>tv@SZ*8SB)Ua8A0g{-S8U>C!%zD(V+&)smpvBrO;Pjx{j2Sx4k2N8q6lzRY;tOaPlIoaz?Hwn1ErzG7a@Neu|Nu+UW zGIc>be)}g8pGFh{f%{kLb7!RH9YIWtjTNWcKYtFFO8@ZT=d9&7W6QePvH78@*rgiF z?$XjHl=kqAl&_x@AuE5D(^JXvD~F>}*!RZ%*lw^XkDtAI8XfXnnL0L4qpy&E_kHim zrONuTz-5N=0+=69ue{KLKN~WQRAtESkp%_0v6TP~1=7#RGCEKRi67IW#g&+UPY6lC z%g60q&ieCKSKr|ln-b`Fbu2Fa82j>D>&sy8SRz&^#f|IA1y||RYhd0swj&~w<=TUq z7dsM2+d7s|z(lC_xCxx>|Jz!F0vaE~JURGqSaU1hJa7?zA(n8L7DoH<(LlmUzqWSH z+2?Wo%~d2u$E?8%T}H}w=o~$a+%cgpz`@ zUcI`PNmB5cb|kT=ScqmbrKyciOoRgM$YI^v>8fybHqw`{EcFNwk=*)0B`TuQXgSL8Q?3Od~Yd4rG8LtZ=8x(Ny}pxZ@ImrZMa*sEx~Q6 zcq#to4Mw*>$W%ZtE(LL}M(D5x1s*1vw`rN~4PG~DP^X1#ksYOhqRR8x2b%B5>pNXg zv<3No8K*{+daWF>w-R%#ND*+e;YHwX?P>e+0J&kMsND5+)Y2KI5bS~!$jH~u0}={1E={yWkQ_8g`Y>kkWgq(rL>TuO zJN*r(#_}Zx4y-+`#k=*kIp1G28$XFq7Ey4z2RGMDWezwwRw1W5w8}bZg=f*sZ>j8}FDWprI@#pb1EsXgOs4a0U!NrTlROG-o&h6Y$&f*eo zlQhBKr1vgX#|apL@5EP8atLM)*7({_BWE4L!C?^4Fd@oIPt4s9rXaGpE_h5f#)JVB;hcyMBu1YSk`emLyC3#tdbe5y~WLqv@bLoEiUQHWuPuOR8R&c1aj61A(4NQiUGR2$6 zu^{Z4A2$#sub9}bX#JgJN`KtCp6&#-_i*s@C%Ai&vFS(w2tGPdMDiiE_kt_dVdFZ1 zN9KF2@(D|!Zwdubp@WkI-z3qv4frf&gYX&$k+xa7(eA-00auONN{=pBD(qbY#lp1~+ zNK?I51`P!|F*dc6g)t(97Nu}7@G7`Jlln+Q{h|KRTk(TVcLfD?_h&7d-ro#4v=GF3 zQ#B8^f3tj#9uXtmKD4Eww5`iRnZfqq8CyShKlhVALv!dEVn8dluD1d>7SQ!0j`sFQ z&*$U|T3WJc*dYFn1eiib@Bv^h;l~=8tzO z*48WvBq*Z{Pd$bcf*#^XTq=m4l+hzgNqBMTAzmcEUy2=dd@Wq=5Wi&%s%;6i!#UEc zrpPU7`kYJS9Z>E2B>mwXruSlND0hNZsMk}@^{Y&AI$Cgv z4xC1YhStqM)0%#W2T_TqML}`du2b0?_v9J)el9W1bOn9|Iv+GE6FFwnB&C+ zpZ)o0VAYA*?B}~+yttq{xa9cd z?ct7F`7pd?-SVe(2MD@fcIOkJVuaoFgk)|KBa_qJQ&^^7Kas&;$UI08P_@4>$Yt5;M36ghV*RAcNYK4Eh{j%+D^hOs{J=G(%L^t3eMtY0k{^F9P66&3F* z4BK+*R8$dzIZy5EO7d?3 z5APfIMx<(~WsQyJ8a2Whf`2=0gCsbBS)OUtgiSf`6m;|@KRZf!Y~uX}*)z?Ffy*kX zqm4pW#GSsLUO~Ob&4uhU4Ym$H1PJwDJS$PqOmGg>EE>-Tx4{tu2Xmq9uV_x<=A&ce zQSy9|LXR+LVqQGV;U*x%qP-3dzf%)f=8ujVZjXNAuIf2e7GjgRO|Vdb~ijA0!X z0v6iQ-jVbL7Y$$>^1nLH%q!{-=Si5GGqy$CUZY#kpgkRoE^-jc9^MwnD()r4wx89} zK>qtIs-Lj0uVZ3Dqx-UZi#O^2Y5`<*G?%hI^?>nR_X}#(*UP*prQB)&=cwsH*sOfx zqbw=qA)m@8lAvpbd!xJKARfktGq|2z=W1YiL@64*VD^emr1-%0<9_;*_CRW*KOL;- z#Q6I4Yoi}*x2$AfH1MymoP$Y{dw%P#*-^UWjcgL4J81Y2;EMO?B%j4o(F1Di!_l zY>phquPot6GQ7uYX$EE}9c<UdSV8i=p7uin0Wn+3|exS*iZZa-sg669P(<52`DoUHMgr<8HZ=jZ3| zo0oyAQba_=#Y;2tS)}T(_^6KDr)qrjI<~fw6eqtkjB|s3seiZIa&~SDkBPwnCDO6! z=KAuh=97!b)MlGJ-`&^pMN)LkCup$`%b&j-V!GWshtkn_J9#}4AGPvl2j>AD zv!Ij^YP)u^n>PGs+OsC7V-ZiuzlV#s8AIVs*Vm<`rJ1KcG$URO859;4(z?S(!iP4y zfb8|hNW(}rt+mam-mihTbNTI_xf+qAO|ywVSu>^h8Msx^w?>8{b=l;m_KiSxg93%2 zyz1gI`W|J|r(Bp}nSsI?Mf#ka-BxOJ#Y2$*l3!N#w1(Wk$%zjosB6_$W%7#z=0Ya@^fe?tLzuo65@0Z4=H8t87RYn z%wqd)GTi>GwX!#;0ZPV>^|;s5z*J4B?y*e&?E$e64S74yGu*FF)skta@b&Z1$;e|d zdgoYg&r*DeumAaVlYANaK6yiM!9QpH#9Yl0ontrG)Y|a4nZC6-;+DE2{1OEKvAx?Vfi$) zmFFQzf?o+5UmnsW7cAV?F3TPU2)Vo}n!eYU&a`;*d&j4Hx0tf|DD&mrcn^^$8wcV+ z{QJCL7m_`jRdZNwdy)_5Um2!UOXp<{@WQSCBEmWntr9@j`DkdPXgnV)6%nvasZv1AgnLvOCI?Bo)6K9NEsr$9l=)!Ej1n`>9Mx;=JV*RHp zj6#=|%r>@cx@~qby9ElDk-PN{@_rPyD#|Nz?(E;oUW{#1DTAry&&uyXG*3_*Rj?uK z(0?I=gTw5@f3Q{eW|n9FIg8~F%4WWOj3+^t6uPirDn!RFopgo~RD5Qaxgc?-s`f^5 zcMtoDgnGT&+ig4~NYRN2|W+QZ@q|UIb z2k!TEFq<_fyykx`no4djPD4H4tY8J!-bwwb=Iuieeo3lK?p%1izEr~cldU~S_7-Ac zFRYL-^1_>Ul)+FAYuk6Ng9CaSoddT<~X2eB4vX%0+4JZE?!wr6UxO>Cf{^ zdn;@*Wm8muNV)R3e8H|jHx4?ygo>`YIrNQsretP)y+}`g|3C3epkETe>sBO{$DEj$ zDb1FY@mkaSm_SNSbIZ$Fwm!u~qT&;O)DunmYppl-DaaG16R-X)1A{inlfCM8dNA4P z@NPS!gUEtIv;2IqYrqO6 z$Xy)Ah=N}Rnnpmo2KX1)%TAtAAuLCQV;eV4uwMzXVuw~x%He(<26$$4%{e5+~I z(n%Oy2K385H-X9PQ^EA^6YmJ&;FF&lph>6$Z3#A$dJSlDe~*@rP^AjgfZCJ5sQhVt z97QoIQa2^|)5mj_j+bMQe7)Mb+^7GDbZcF=qj#|9f-Hz>)`Pf2@jnF&^cM@r$7)?d zuG}NLPEKo)p>KXof3e&>7rokgJH@nz`tfyOOp4vS%hZQw$7a3ou~LP+_kF_Z_s?_i zt(N~K#gjX^>9m+)9)CUfHuTD24deZjlh>bU-YtAq{dalfz39@7F9<0d8XC&A4v5!4 zm6AwK`C$7GWZd>|(WdGASddkWk8}Xx}Ayv&C0~Veg`% z2b*(3cajNwNXQ|e+mJ#G1z<9e6wfag8cfQ7w)Axjeof0!kF|1J*J?5PC8exb87kfudu z65U+memRpA6eQ+#bX@ocKnDlE{o2I+5ERHfz2AF9rFZiL;K=&nA7--Tl$54_>&q=j zKLosIh2fdQO%YK_9{4YockQolmO&!u)Px7t*cZK!-rC$O`1A?VvMIEX#i|h~-X!g$ zc3VJ=1tvZUAb+7xRjtwdOkhuXv$J+TA(ly_CRAg+=M{N3*%+*zAmvm#0BizG7D2|L zq^^!f@Z%p}v!v9Z@aPlvH)0(>pa{Y1PhUwgUV2esVq&`d-8afqXVYfr*x0a!Ib7|t+vOT&k?>libA(c>cHHRTXT8e;Dq zDH$TG8xV66*I-8qh#kZh zL}ErL)~E>12$Wvb)9B=@&;u?#61$R_R)1b_)GjoW=B@aByJne0c~-PE2GRz+70DLxvsH2FxKA zHKrSafK4jJw;WvB=8l-v# zQvED)E+RG#Ry+hNzE*GyO}s_%mZKmeBlt;PQM(`Rx(eE7_yGCH`-ZCN~MgE=sWX82&)-@7CfcV?N(@ zNC@gz|7*AN%et1)G1Tp&qkaI4X=`aQ{tP(%QkviQG{u zo4ifG{6Zpdcarn`@=}2>&Fz(}BRR?Kzmm)HsW&RFvEla(x%(#af^d&N2Z7=#2mkc} z!`g(#&35#!1U(H6E=bXHjOtLE7E&!mzDD z=IiTkV?Ha0e=2lEe|!4+3QHR^>muiPSTS#&L`AcemQ`)}a9~DaW8U=U-ckN{Uoi79 z@Nc1XccIj1PEHQAp1%~ZnW(K!96#bsGmt-2w?y9+w%!crVO=$s59HP9q2VW z`Q`?rr2vZg%_~k~61J2F8K3SR0z?mZyF_WTp6)jWX+rN(xhdY%B~r4{D+(l8j7a0Y zlt<+{@Y*IBajUGfWOky^HAMcePSL;>{Dv}Ose3OUQ#1n_1vmnnFLD6vyGXzMDaFhm zEI`CLM(MB?7O{w!FwY%$0qB)cBMDoj8eb*BziU>`kt}xJMo5r4E&}hIu**h>iJcwm z{#q=UiAibjL**7u?+f_9CR&5&+F>~6+5WVl2zH$V8$KL9N>gJ>8C1*-H_+0O#lgXe zdQsN1(BxjAHL$wo=nW}^fnaaEp3Fl?xSMGJYn-j{y+u7OSP(TGs z*+3aVYQm9Lx;!xyd?cS9DJmJ1PXX)$a7Izl=_?fKB7vQX3cwUdik;B8Uoq0=S;hSq zfv5NHxHaX}v9KAVW(@V-$pTv?unii<>xbn0rixC8D`7widSuRNi??I%yv_m@&HRKn z#qSDWGxrBOhnOnbDen8mXc*$=CW3PZ_;nLi+;Wx@Aa1~tgM{BuDJdz|n^FFO{@W0L z4P>T$^!8qU*>k~h5)I^UrC6~w(>C37*sr%s6Fu*tw3c}U`mO1%`I#9MF$dtQah6MX*Nf-L=isgei!RN)tw zU_7fq2p6<>x>%~+Ot{NS$>FpifFV}VIdpl9mgEk&MRYg0V=~-X7d}ccxBmdj_-cFE z2O$kK2WR;gdB0gJz->@RMxtPXYwQ7=(5Vcc7BX{?x#dV3MdFok*GOeUz;bU)i0Rix zbU;jw&F_WDGxhgB@#>itV|>C(>ia{66&13tZwktMY+5Wol1jOinSfpM4`|ct$-R$C zE6eZqw(CT$V#fNUV6dwkim?a}!GW{_Iao|WN zqah(n1hMwYdhw&=OZ)KB<3F!Lx_oXf&u0qqUf=ocMg3zxv`_@ zp9&*kx-UWZ(n_0XJ*cRyJZ$uM#XuQWrfz!o`KxmT;-2iH-qFxQ{`n4wt6dyXoWHec z%NGu!*-h&@Uh}ElO?|Q9G1MZeL6AzW0DzbJ$$s~A7HuThH)!U- z>)vexq;Ft9Bvo~FMc|zbxDXs%+@#c;0X6b4jwV%g@-(z@1CJayXMusYIG|XA-+uMmy>mUDATejgp|Djye2{L8n zQV`^zqVk`Sxa2J0=DLD87{M+o#KimSzJhys$zK#frq-XAoGf%urP_u-YD5r`l7^=0 zivIj(aIHOlQF2*hfijlNw=$sJ1{0)vnW6{C_aVh*%QsSP++b}ma3ICW(Od3q})OpLT z$%2yVaN`44RcEiud#S9!~v~93!@z63B=@Su^juc~aqIbV^ z^;%nh25)P!*rrTL@&>jc*mSVG?+hd4+<^BZ6&2Gs%vF0l>_$wKO6#JRqQ+|;^*5~R zl`25HY-ZMj0Z=@2pzQ80d~XU@HKL)Yq~eZtst_8gRs3lMSoQg6`3=q6NJ%b^7(&Ml;)8IyEgV2{(dV^%aSt zN^fCFf4tELhrEB4&~g=hFE)000B>r2zdg-pXZ`p001fhMXcSyVggRR&h&Uc(+3$1W zp^*D81mV<_FT-M!KMVmzqi$!|zxjN}OjV@t#RViNjz(;4tU#e~XLLG5PEqxo|9(G9 z0f7!%iWgjIpbK;zA0I1K!c0wRzX}UW1V)C&VV8gT67sd%9GR;7D4B%R@>^{jt}$ox zqLcRd<#gxl9!?hG*9zn1(vBOG8rR*=o#pvOd=fg|Mg(~g@oCcRG-M2ZB1=v6K*{Z^ z#eY@8DoL#y87PlF4f~C4$dsXwl^n8P!82eZL<ce zn54LIf2NXg-2PF)hy{pk1fs^?fN;5Zo>ge%IszwvPYg5i#x>jK{BD=%LBtCFKgOQU39? zd6}*}Q$`UuG~*z8cta9>OzLv$nV)3KaenFD7MsD_eJmh#E0m6afG~m*L`6%c2!rGx zz=6<-%@FsEMiC*BMS>E>OZ86gwp5zq-Mo**)OD?B<1n?l{1!>6Rkyl_3p@>2xr46u zj*gonLpDO6Jfy}r(Tt5vm`JZIeU5%yQU>Lc<)79KT70uiQbe6gCz3%c=hsh65{-3- zY&wZC-ySvyOAvTYxU@n9>_%vXq@~{jLJ#B8VHS0`!pNm*5dg&Ef&!4TPDq?G+N(tg zkB8e90+d>5!nn=b_S!$8hIfGE102fMuPlX;JSc-l*8379g}Hz5{ntRRIthu0iG!a# zAr9FaownNhQ(3sD$sLeA9MRS$gGWH%wz)hv7emUeZ#sF?9zI*DWo1`je&xr2&1CN(8Hr=&F{nH24f&+`ut$^l0Nkp&1z z9Y7IMAJsxnXNi|qnp{7<(s%l{s;Yw9jU3U%&%)6!c|{th7?Pf&4w3b8r*ZpCGLoK< z!?*uhhW(9b>b$$hhKbwvy&_j1%I5)241Rb{Vt^_|cT@o4NLO)M`!{c_wkXIFbsz4z z-2>^oCf^e$Pp$X;magchdR}}dnQw5WsJ{&z&zo};%+@wB=m&&GGT4h4tZG#s`dE98 zlqZk-muW8z9FT};{jc8MpAuCD1CD~OEsFwitf>sNw2DukK7g!j45l=0rkfn=jX{~1 zg257KFbm9is;bIZpR8Lx1y;byd8@p*TmJq*8(2y0Z;7@#K2|8*(|P|nbkWHU;+h9T zs+mh91pFWE4>-bgXV$A<+eH8zp}yzx+GKF`yPo< z6ktJBLr_cFxddB^-*d8qiHUrXChl>UgdzO9+S`Wb&`89@V^}iZo~>3Zs8dTNtPWY1 zWP-`%i)MRbjodG29U9Fq;wHy!>!|)XnaE1imgK~cSTF(QG`IzxO~w(#@_l#Dw7~JI(XyYp1#TXn<2x^}-2}r?9bw zXvZ&PBLv1Mm_tyi;v%FTP?v+m)hzJ(m0XU1fHATPl`d=r!uCfV?@s5%izr>LaJA1N zeynqG@$t%F==AdinZ13%zHC4+xuIwR0da;?Rp%3Z8{(wP+ z__dR>iiR>K#2o(2b$^UK2Td1fnBLU6?ysv=nAVcvhT~hBi=mm7CFa0lHwIhj`Y_W zln_vM>$WmjyZ*rtZw1sD{lkYWgaJBvG;zd2RYKSp_k?}<#McKMh?OA}d)DMc33JHI zgnxX~6BQLar)Agv9sR&yNrE`+b+Z&E!@K^sy67=lJJ2L@`TL&TA!WoVC6#^t{A(t)?9zZwC7!iCx(a`wS~C2sV0m@Hq!f%4<6%amq2Jb80#k ze84G-^rid$?%u`qLPo!aAg%!)qw7;wNRTi-{x9jubl^j}<37xq0m*QY2 z`or*l=AAxy6h%oasR*D4DS7j@iKb*FmV`@dMC!C@qe2cTA$@cX$ktQepa z=eLL)oz;isk#g8~CHp}sDJcQQl86W`mTh>CqLmf1@!VYFrM9;A%-GkCy(yRhx$oD|vJ?wBl4Q@r~dx}%gOoaQDS+Z-Ztg}F{3B`Fen|k6#ZC~!WCp<>V#u)ifp)DbI6oT?3^tD95au&`F6b(QU8Cn0Npo! z#DA8Do+3dN?*Yt?5EJEj7tVi>;(9iIGyh@n^X%igygNLIEcSz0*2b(YEXX(GVF`_t zK{65V8I;KX@J2yS$_OS%3*j-a-fCRGcfSP_M3ksK?CV=d;)f4FJBcV1wL6juGMN>Vf-Cu60J36?udwEGJwq4T!KAQloWJKz`J(4pi0;ILeP;qXf4czl?M8bn)v+u@Bco4M{t@4`0E12-H@;UK=P>5wNw&?*7y_6v z`-PTM?N#u2yg`}nTJv62x71N9T5NBZb86I45Dme>R$J*0FZTh8WOMb~Frw|Mf0n9_ zD`#j0+-Nt)@V<8mk0s;{P%1|)2b6jL!J6>|z8b-6s+mO6j=?1@6r;Uhl`UB&@2Sou zZO7w)GEAmxokU(Bx3)(G@U+Wxf%p>ycJN3Fyr>r7#S@REh=ITbSU2-rW+4!PBiA^? zgzvptXJ=<2GXXHLd$7y!s5vh4D1=S!kwXKXN3;t|^5 z>m6aMP~@GrH|6-^ET1Ga&j0r-SyMcd2VxSCeuxQi4BdnKOE&)7kYICk7I~PIJ1b*P z+(2TM*G*(3lK&jC6(_hOsDyfZ#Ch`bzUUEeJGWyPAR{wDm{Kd$WYu_pzc@RGt9%50 zYVvw|4=eP!m;8>Nj9i;}PU!)bT^^(g|BZGnq5bQZk%qUBy`ZwQ#roHzOM(9!4{2dS zIr9g_+BH4|GwrAF_{ag2$Fy_LZAW>P6?Iv?9ef5t`|75c)J<$?h?JdK5nh^(E+D6qd>?w!5K7Xvg>D|W`NT%E(!wKCykIZ~ngA@#W zms1-(Pe=0ynO)WnL&xs0!^^ZZYz7l-C)2-^W#ict=&=~MV)Gy)FNKWCdq?jx5lvw+|5>hCokx(%gc_Tu%~pX^=-6&$uIPXqA23acd3l5)0nx~J=U$0@Z@>?&&#f7)jDIHa+;y&`XN&~69ru+J zzmwVW(e=ssYD)_Xi^)Ck`CN|Mpawhw=|KMfX25iD!NDj%^bP#et$@hV(ZMY-s1ePr zV`ROgF$TFrbNKg~hAUFGL%9{fFJxuTF}65+*!?Irw)=B30Zu>%X}w0e#}Jz#b;}bN!;?k?{I3w zGSfeYtFJD?eoxKE#{a>zuU`D6CDpr8O{Z@as7P_!vi5w~x0Ju->7E2ha89g|px)n>_&z^r@xyks3l;p?A}O>(A% zyhK_f^HA;#___Z|K)KCwTvzUg4}S8y>kDM-Tc@p&=rU*?ayJhe?48%jFxT~B0|rMv ze}?2#=>W4GYp~WrwSL;kb`IZHbpxk|b3(!R3L-V%Q1lH2&B=?cD`=ih2>$FEuHsSP zHRCPClhKW$Qhik^tMdPl^_BrmzwP_*2mz%-X%Hzv5RlG+NJuLZN(>~VOQm6yARr;# zAP6W(C@nFhk(3b0(cQhlw&&u$fA{~*^L_D!&CfPI*RD9v<2=sesIYqGsPD8!>V1M+ zFNm`>#l6Cw^XC3OONV0ltdsYsX)Qew$GmAYNB;cC^buUot8wqGva|0Oh0ulfk;3%8 zkmq8KRq;)r`ZtL#Sn_3=`4vC@Ej%B$pxCwO`NfKV6dPpjw-*5=L|}1;u0l(* zynEe($UjT-6ybRQHCmUx8rG(ZWlTMKP4`?1X>menNAov^Km5{2qH=wuz)iL}(?WCk zhW~f_o7lQ*=b6u&MB;hhn!E3O_1$?~ChS984{1 zxy_G&p2vK6YhTzZi#eIXAc(FplQmh#jX$)8%SB(jFP-ONQv>T?`2CM-v2&Bc*qW)j3Abr0mft@ zo^6TGu=JVOv)lt!McsZUb8pTSizlYt;6!QxxYrvSt9B@_ZF~-z@wcR+$|F!9SLK?iQFORI%D|2 z!r~xzS1%PSBL_dU(>NxWlHyg{_=?i_F2YDaWiA6!0zR`;iZPp+1=X6u9s zABU_b5WN;b_=#-72L$5TS3^xjNec#J`k=i5XoSmf&`im-=Y{y6Jhe)oD^l(+f6HY# z^Xh0hAfKJU3ST-SltRBw3J2SQd*yA=#Tn_L^L?4sh6XR@KwX^W1_WV>MTcUYkmO`^|grhG;K% z)sKAP#HN#%^EUGKg#HCl92eyb0hgn`^Kg?O+;5_kwKxUDfwJX`Hr-7I53hrNYxn;J zJzv_!uPJzOu6~|FcCDczZRb>aPAuq#A9VL#YE6c;-G)wL>=}uR)^iB9YbmdoVuK6<&6*s`}Ry^ z3<}j_Rz*}NCI*_tiFx=XTCn#Yh>GGt8eRxW#LkG;luD&tl;d9vr>6X%2%7-rw_CXW zXD4S~E_gw(VC~Nc!?Wi3Y@yb`6xZTh3cBERcD)tNld~-%%!_r(bD6r4KapWw?axk# zAv+80zhq%S7>b(LS-W%4A96&$>-;Nw+F68m zihinYbw@3Gi+Mk9Vw{&Bfe`fIGr9l6SVF|tU1@$IT^PS;OUKo8(>Ww|oT=#F`KL1+ z!oW~hR`%8k{7^#(_uyup24rMqj^y7uVZZ0RXw_LG6t{Ma!no^(hdB8ixz6+>3UEi7 zN!)&LG9{H2v-5oES= zgJz|3YBzm9`sEShK@`5zP|!TJFy!)77anptHPAnpE!!)CFuZ#uR(5MS)e4+YABLm< zRKTbD_IiiZ=18D1K}!&Zd;C;GwSm{xith$4+e7AU*#`p`$(Ij*-}$mGO2TaCNDl!V zUx@q~M|5=P^km;8gK*dT*6N97h!}R`UMV7eke)#e_apcEZ;|I*0vXuWbrON>GPafy zG(p-UkNQZn|m64 zXdIhOME?xQd%$>0wt}GG(rsL~UaQUG5K?kJxJ~q6$e~AhSaMzo+;mYNlp4G9*Z0}P zcO3lEox)2FEF}$!w8dP?xtJ!cR#DeuX%8Z)aUzSYzpZ6ycYFikl2iE*;>=8D8p-+i zN?ctwk#9I;KQQZI0s3R^VwWVYs~PEaH2$7nLshlocB~|M-qf5BKXBAQic(rUb|IUJ zDEMAc#0;H1$QnZBIWv?V=36;1H5;0 z`Y=8Wo?VP`h)mb_9GrNQ2-1%Y#b-{niDK`*9$k(jNzj~_$IU&!mkL$eJ<j11l6Bug-e0O6XTLm(1tf}tlVYJ z_izt9CdyrVm7iKu(qA*0z}v!anoDAF^Uxq-qS)ava+${CfwF(Jst!tzx*>2^XiefC z70va?uU8>*2eOVJ9fcCMv3*!N-ZnNIBv5t>FhY8q9F<)I1E=+`pkvREd%*3*B z_>jyCbg^tsD41%HAXCU`w(OIWDbdfzwSFoa;pM(Nj889nM*m422Cd-hu}_gZTk`#s z{a_~pCt`-dy?nW>o?+`Q(JGhM&VR4N`zl}^?$j)tFx+=3&)s^`!iO8sa0<;70S>SC zWzcyO6kIRT#N2nIv>3J)YMx=qvE_xh({Tr4ag+Ip3%eSG4* z(cGZY_*w16XJh}ZSvn`@`4gq1JM-bnjlCuLX9sJTiFq%aNHg0nB&J*Eaxu>1cU*j{Tq-*DrDf;7SaZ$Io%TP& z(=*0r{iOv?rlZ!mY}6Hpu>A;Vp2wbNeRea95raD%j;owE8k!%2V~gFM@cExWTU_aH znR+pI|2dwOcm_Sxw>&u;UBJ9zZ(aH{%s$VL1KS+FG|a*u1D!*VGrBt8TtlsGP-$Rb zej(0wPBZl%OL3^XLYCfWKhF8(Br*^JUky;maxoJ3@+Omxk!6~ep#73?WYDbbFU`27 zP!l#Eq6+zgYxk$qM4e^tVlPgSuW=J`%kaVe$3*3X0yrarx8X8*TiTmJW)#HM?(TMy z>y~3?QP85|E32Wxr@?&plmRwhNB#Xto6C)Oj-k*;%O(9{T3_mDI#jO?^uT zNe)fp7ZgRFv`Nq=dR=1ykoOBu#Tc)gaaNFO;SQ8^gs-M&vR@sX`=nx~kyUf|oG+Gi z*+2LXnjPeG0;rSdo}ZSto|SYiu0!+N0f>@TGLgfrX3wsj^f#ZgjJ*B|yUfo=&IT9Z1DHJSxfe!PDV z_;9r*+{?dj&Pgb*Jf=)Z@lHNp>sI!5tEjy6_ji4c|D@x=KaVv-Q2w?!(?kU6+>Gfg zbc)KEK-MiCgl6XthG55k(s>+t(Lx}+C8koZ*g95a1Bn}FV|NYf<~D5rKrC&QW>jiQ|<8Axg~MZwPh(W1O5^jniWd>%@Ct&CSo# zLWx^bxXltBzn{G9OP;e)n8tmbw^hn@s(hc1(>|LUiovO>JSg~?7oo~yck&ax-zB0sA+Yuje#nIy8Yi-99MbsuFUpy9VIn2wK}Mrq;ck% z4quJVE;>-)tmSZ>Dy95Tfl3y((~YV4sd9nm(rEC|<0+#lR!0>QyM{y;k<#$|jE@U+d*6<;~29u#x^5*BxztQbN6mDo3wt!)O zC^9+fDHC&KPY=T*mDrZc_=wgeMnxDRVhOa`--ZC#A@20l^B0ToI{^tM=ldJgS^kPu zd3^kF6nKypr$e{ybISa*_)cN(rB(6D$32l8@T>R{jkL#J02< zf2_u~-HG`IqvX3uiLjr4w?&+9Tx&yDU18F=ts*$^Vi5&R0Jf^|xK}|J@E+y*3F9?B z3KpqWk_~^%NA4|U&=&bSK}gAKlpYTbeS?^);Mjao1sVc|7~plYF*4Q!UviJDEJ*<0 z7U|?adYpT=x!~Vd_U1@MG!G{0T;jZKd|x^rPl}kp^#dU*Uc@g2h#KNc_dH#34{4+l zO>hBhY{>4~zP1{mj7qdTMuVv;jBFeW24Cg8WZh5yLCmTlJq1E4XwPhuY8=nSc(b)} z=y>VViH?);Zx3hiPr5@7h(A;U}Z^78rDh5w7t2gM(tr(4&EZ~r70HN%Py4Aq5t;9FvX|I5)Meq9!n z=>h6bSGKfRCn4?-^vOw5o7xsKHEE;-6YCc=by1$pi>IMLCdj7g|=f-aM z5H2e|Z-TY75|#hHb4cyw%lsjE&`f4IZ50;@z2-;we{AN6J(H=a_%x}(t{(jVk-j2M z&hC7J@1t?>(?L18D1I0&_s;d_k7cfJ5UQ(dk;KQpQ^Dt=kr3sK_PyCaulLFt_4PgT zQrEf^ga10DU$4feX5Pb19{V;o!8GD6%2L8Q9yK1BguWR7WQAAj!=L<7<3?lSf1{Ws zT%IL+&9+lUKaZdk1vU4n>1k;Ia2psHl*|R`U>e)M;%uZ&yf*j7;1=k!zM$sj=C5Ds zmEoC0me21?F?a(^%s|`R3 zof%A{3D1D3YY_SlNyu&dj?T`Hxw%5FadB~LprfD&VnFw>my(K(E-Z;Cc0Tns<^ZTZ zvUKmxHeRDce|fYs#$Jq-Iw8(N%btL`48enWPzVeO3Aqwo0hR9J@^T72BN8R5M;mQN zM@Q6zcu(k7&cG!lrKMlX%MDcsxe>?RfLUH#HXz2E(@}N{tkDB}0)hrm*#7t3iWv0q z|ArQpNap?T&j0f<63}ou7N-|`4uA4hw*P%62&$|U1}5h~@!78CMM!9tEdf#9R6ylT$zq~!~blSh~>x?@=dUR0~g44Nl3cjEu|+k>IX zZ$YI_5Gf~hlR-5v1licwoB%yXB*{9jR6a98gU*Fx`EjherW&Hi+yR11#OiT=Tvul);l#RuHy6*q| zMBIb_jNe_vfc7xp<|j`#mnp^AlJphPw|=8kq|$ok?(Xi<=pPu^GJC$Xw4`F=2Y1yA zW&c(jEDpX1uh1xMJsphS|C=3WsmRqQ!$+$Fv};AN*0auM3*t^`O#w67xIrVh@9*7c zi+kS#F~07{Yq>{9LDA>t?A;5lT9nqQH_DSJ81d`oeuHk9FHAVWx|us&fN4Ftv43{f zjRXr$hZhbGAPYcPDmjc}5P7&7^Wnqi`g#T&=7KR`gQlR9q6p)UuT=4sR(U|V?tKJ8 zny^@rJM`VZcq&Wtu5A`?flFOSlzprGTkP zw36U|mI!Y5g7sQ4R=zv$R=Ensd6R(c^^wM>%^6DDRZ=~eiBjwSNB@)JVxpT`@OW82 ziFa>T;rL(0R!P*an?Ha4SV;*lIXT&Odi;^EugukN+`>T8@y*w-MKpP#w+ri@lbIDF zkB{FNH2n8I_QsGeDsaRm>Z9UpY5S7-wGzN=qV532PMd;%kRp6P?+Ey;+e9w|D6*VVF>V>e< zAN!k7S>KFpw!S)b0fD3r@FxTQqBeJqiK|L#hK8jj2Ve+)dtRkF9$8;iRn^&xhr}-` zqTjeCEIn@mSiU=hxJJJwl^|j^?;z(0g8Gf3Oe(@)@GcTg|60SznXkyJKos=bZIz`& zx8|Mi$4ipWm6U+vqrS26-J{~-Vonl#$=Nrw(-g$}tpt>5oi0LBCv{5jo}dx;R$Z z6kvdM){pFd%TG;1b4Oz>CNlC9Fwq6gIaNL|dI96x#S#7YOoa|to86Em$EkfONI>3> zdYS=R%O(yzV^psQK1xbTbhmE(w)a?Qd#AMJKCtdeK=cjTYT_C><5%JAetaYec2`1l zDM>N*bQEbzkkUWVHye{u8*PUPfY>?MDgzN(E%eUSV28I9PD^5(+KqD zy{$`$G*fl;_h00IQeAOXRU(i9(la&fCua8#0?H6ngtr8YA!%q1bANmKCLbZKbo>eA zt4ut0KiVHvele~vi~&)M&U;JnBcFcjU$LISTfKutb?47U5fhc=9GHtprHzU^S?Fma9Nx){ zWL@o_5l?C%FUdi}u|H!Y;c=;cNa*%;ePPC~%rj3%BJe4t^`L1K)mSZ%!kskjwKLTT z3`BQESS))h9<6_QVpwOglG^X}I|;9oTE>A+L`1}+O3lgXTNB}=5iH=Eg-griWNo7L ztFtem+*~@~ivs_~Vg%eF;xt`UAsgWFlFl&*BiHx1m%1f z;^4roz1v`F#(~4j;wzCrK=~g@@@28qkJ@qRaFB4xWXDo-szTg=`Yi;7x@Ui!ULDZ! zo*GF1{UA=jdrn#wjT@BRORC#A@!f4Y()m488PC2!I-+@)7N+_C}k1w2^h$T z9x5yUu@jT42`p_uO^sZV606d)?f@)kYISaH3SW_yIIB*tNjCRF@sXWs2++}fO4@@f|H6V;2^qLObDyuVJ9dcrf z7YPpwd;j~W2!}lbeO^6RYinWbtNsUeXpSWEH(M5p-%^EmrQvFk0yYIIPN*~Q!`A$- zP`R^dWJcj*L`Gf`&)dD`kO!EB%~3dL=^y+1_p}^`#e}T9J&BmUg~6K>6PKo(@lRgo zHa9q_YaK6#BX)6khtnkpFm(Y>tK^ITga)k`Bq@<|D<9t)B#nV|2qE)wo`}p)6ldbX z_84S-KzpMt+CI{UegISlw)5^-Zij0145mifdO~j zN$BHwQiD%ngsEQBY#@U4_LiDPd}F8-;lBui0Hem`KqAFm++-bMGH~_YCwkhH@CD$) zMBuhQ%+bKE9#z`Xl9N|Xoi1^P$M*m?MhShSfh&E26Z!KeOFH1E8s@}T{$lT^qhi-T z80HmlK042+5I?qPE7__DdVqb#E;f4v1Zo#h-4j1+G_1GTCiP85zP-j5$9o%Cq5JnAGK*#P_xCFu+_Th%H|ul* zo5-(aW!$2oqu(Yc%&7=J9pTE%XTO8oGye`JINnqLjAC4)v6u(*uk%}8L0={{ZS43=dh z2^fffwa%I2nC{me-&`gfYCI*omZYV@g@}(*H~}pr18uO{YX39clgV$WN{?B_rs%8K6J5e`ROJC_-%t0IKG}CtD|Yx*F(RP zPbb)oYdkvRaef!hskFR@eEj#jK(6sm85bz7R1xT#1GIG4-m{5@M<((d%$6hYim+EY9)zGtld}Z*txxvM8N6w$pIaB%4xdk$UzLv@7LOhPG7Aj@gSv;u4>?TwaZYlw z3J~{`MEZ-42&1l?B?fwayxlT<;yaA)W0kdYvTGe3r41@7;%SnTx3_oh?CeyT104ii z1JSn*79!XaaKp+35=ds-LAqrBR2kWHSywi2dVOTa8hSJxFVZN!Q=_Jn5iqUS(=oB9 z`~3M@+6ZU>%A5u6s8sa&mfvb>k}X?WSbF-a<%{a(XyC_a%3*)!KhTqQ%ICnBFmI&b zu9=LK25!96C^{1vm^qd%irQ`5gLv=%B8H2h*H&3xjVy0XBH-+$M&(V_sGU0J^7Lah z9Q1O55@HJVdEh51`n<+hTq!u%a}<73VvwDQ^m(Q3uqn{er$E$NHKafaR#GZ9;BQc| zb|z2e-jNrwBXzn?zrZ!WaOaLi2Jug9+wIJpG9@`4F6X&^a2|t=-P+oEcxL89TpT4V z5XB85<8}}h1zen74ekS{f5Jd?6L@y4OFVSRiyu5V=w=`NH{2==g8@}I_qSV2c)M1c zq(&~TPImK4aZpv@jZZ#!M}y*!i0h-}Q0V6G`q z8C94EJpK*jZZ#nKs~1)yzzQmA3CYSS{`S_@aP({%+>^bgv|jzL5sC(>KAv0c=del9 zSBIyo1JB0CEbgUp6DqBnHaplvShsMm4dTBC6h0ly&Nq0j_&jiIjKrEbZ-d4PGUtkg z$hVYu!^8iyn&(;(#ax!c4BpFy(9xMG+gv6$`p-N!K{7TqHHDT_kd!ov4@}I=lwFrf zTGP%_jLF{7v3+Q0=v#Uxn?EM_ zN4h3s=y5|;6)oQ?&`%)a=PAZQ$^Ub^W#$8`1DTIM#HqOo=N%jsRDb&rO)nJE3qi|G zB#$9JFS7(OFxp3rj=?r{UCi&78kH^X)FE5AqVlzCEFICB8)na*g@Hm-L3`UUGuinC z>SJQ=P|0|y&#NQb%m&2=NCRc;-cB9hU3cV7q;Cw5jd6ill#2~ua&tVUa`%}j^T%O8 zFMZU>xvyUaE9ZDPUL$iQ4cJNYBO=t|F35>OOVafKva-ImrUrlsxlQtT1n6;#Ws!dA z6}ZCQP%Nf*F_j!Y@~Mtt+p;CaZ4jw}^TBKbp{G}eS2|{&G%mrP~(J?pZYYG8=VxSw?;$*RDW_CGJdhDv( z^0AIiidyqyZXpnM0o>?lZOBNT2>fn6@m?+xOf8xi)zJ#3DaE`?PIhUJM|yvKLBBhA zk*D!0Y0*et$Gu;NL$0nzU_*Cv-poylzsgO^8p6ck4COv3aq&x(ZhEs9GDOVN+lV z-j(^!mx1BuU{&xpKEFH~V)YC?3kN-$RLsoxNL_>(-p9n)0DzWaAvGL*50yO48VMql z2(vnI0OodV^Sq%e)`!!U-^3L2aJwJ(P(y(Gt(~3SZAqaahrlDSd?bZ*!uyywnjht9u)X0;8L6n2V~zFVvU4XmAhWgD(l zczXBF=c8m*Z(AFibm!ETSJu}1KmoUeF=TT4UdlA_#Y}oxeEIYP`Emo7 zV(hBhrYl=C$QLs&UW|d{gedV38jX%Rpyh$Y!w;7gbwqC;bJZ7MN#v6~%by9}<>YK% zkW^3vbV8!g;5j0dFL?iX59EcXU;9_Ybsfw_U9%8bPY}0y7cc@gv3x=46$`94t0TyE-xjl)e1BUjft{>oogp060eL;!RL@<|mpx5~`{ zp{gTtH^0NP-68$E4GP(Ho^0J}UOGCa4swpRS}`aMmb6#Wm63qOJm z$wt8rIjX?ErLm6W`Dgic$8KV|SEv?PWgp!(k=e+@dTi_JNf0+7F>xRCTS>{!J3}Ne zauKP8Fj^g{g$_mG+XN{ebW6wa0UFnF1;8oFq`$Den+pex%rAktGUN)y8x6~LYrD>y zb$-ywLr^O=*V?M+(y(&NbNinXxCBs14t;i5?dTr`{r_+}H>U5jvC0lpV(xZJ&!!?+ zZE%C_6gY$#`Q`7u*w_V!dBn&DybzU)ggc<8NimyO?+$P`2v8loLh7P#2`5iAZ zkH@a>MWy(glWU<-L~>rcrk`72j(UxZQxA@eoV?!SnUY_ofW0%~4>%G(`H}(KOS+}S z#h(MMOLu8g9N0Urog7MRG;%&@?RkIj(yn@ADuURrkI@2UPtduhBh5t+`++>(2ajp< zeg*yt2|<#=1<}vGX>g6~BLZ+{nqiVx9V3G?+z`10<-ji;(92c9z77l}xq#$H!e24uw zM$xX#77?qiFM~*C7HRJ6f?`DC?Qw-D(oJd9T-kE$+off{x~Hakajtod&sXz^?r?TR zx8SjPg!9^jkiT_4C-SCZ6frlz<~%@#`*L2>9a7wWhTG%yjG~j14-NM%c-{pw8P~FQ z3M%>Upi-s|c%h&P#^y!ksMX*G1EcbzsE}W=StqDgeba$MJoD-xR628L(sg16z&qzyQqjk{y2X{1@mC@vKYlD5 z+y#&-iyNcH*r%7{Si&a}QSS)uEB`4h!tc2RkS_q)5^{0|FNFH70hCvg+?K>6(9B}l zqJag47Z73*D(dSeDi26r-J-2GXbdlSf?*2!W4CPxNw`7iPz1b`^BHck_keq5+KhSB zNsLc*lU-f8`J-jvE_hV(0tlkUoEChVd+!<)ap~|y^3Dlq$@N~y!vf5*6!>5LF6`=6 zPm^H9FPPLfgxpQfDpac&J`Xvh$Lr&AYq2!7MJzPtAA|=y#eE-9L4;JDY#e`cER50vPVWPnJd}eTTa3JLK^mDH;YcvFz#VZiu*orHb8G`;_6A<*j8ZFW;F~b3M z7Mt(Dy>59&)@wHjTH0Ijfm1;t=VA}R?q*6FMA#Q>3|eNxH|^mUX0KH?R)v07D7#Tp z$*Q2t(xv@R7hDV$)j^&k0roFu?*<+svviLM&l{Bu0g~NR7DY&8V?RNxw3sYge5s2O%C~CR`pvhUJ!EA$7dwyb|}(@%n0P^E=b`DLWouH{+U4 z|J5;w1}d$3sYo20Ika+caDa%HShe6|S{ehuP2NXEJ;*%s0fmzp@1+<(7}t4wlnlC2 z_+9>027|Ny;A8^UHw~Ip0qKqK+O;P@N}lfG9VtB#YpS&jfZ|Y1`)#C$EycNkOe+fF z9~66q4%91W$~`$+6ZZb7v9F99!QQ?{X^N<4#s2iPheRczRJ(|JF2J6%qGeq65$LSx z(iM)hBu#4Q+5QHbO^MCJr%XW`8G=h9&zKGR{J8-cKPvD=oXf~4BpPE-%2_jvW8&qESdHfdgFVT;7;XLeV2`V#nn;^E-|feau$mYtpL z1ny~Z@#U2d0eB+hb|vVDX%%~1Go|T%75gL^wx6T7DyUVcV^rJ0DXML4%>^cYJIJtO z8vuY*Qc|Lnz7M|eP7n_FA%SvMVSf$~7pDO-S9W$^nxG(7D_6AuGeEhw^cLa)MW18x zNZS)0C;Jv4E#pNtQWY0bYQAN7NPP6P{!Ny=Xz;xOp@kNdYczP8Ag|ba%mqJ575$>o zmakk=)KD4}Xj~=l4tQNG((^^8Y4kP}+Y6MwG&UAqpcb;|Kfk8*0yd}}TeP}X}5DK6BmTu}J zNT8ysN(4yUhhBVDb>D*d$baQjF4qx>qslr9!hY}>I~#jQFJ=S~%zkx--aeBjr#wx8 z4WGPMy})a*7d9rTWv=roKo|ttt8zJBIw<)PJ&RIX)GvCMp?7%KYTxB}?P+?kLz50h z`iLf7&^}mJX_1Uu-xc+oOdv|#6{sn zTOH-h5HH-nY3O+Gtw=cVft16;OC@H$D(=+G0$h(!X}%y%VeuC+JJ-E?n&TOjpdPM1 z@hk}-&0M^^XAJbMxF)O&0OvsM7ulH0)gRIx!g0*}gy?n#1_HG|zMTi?^w zJ;9>V>kgepxEXmt;;NOs?6MBY84&XTo3 z<6ayBDR%sLWb&oM!28cx%Zk2iZ?@kSEFbTa@2{^+oCbsax$(^3OL{<;{t4$8?KAq; zVMF>x-H!P&+=IX}1$q(>sk!tHSRu}+Sh{n4K1?u>LEaxxm8 zhuES_Duaxy4G-%@Wc+wW^7JoS(1drp>+RHK`jXY8O3|8-UyA^bH4+rM5gw4J887By~0)K zepSB9FDQ`q-p?~T2cic~i|~_iqjX^An}_mi15=P6mOBy#s1pD~qyl+y#c%bV4$ zEGAR}skY~wew2ix=MMWPyB*!rnUhtoqJ!iPf@wxNNJdUO@*?F#POcwZp!bM7aRHdK zt4AUtcKJ_wRVNUpO=TwB_ntm+IW z8g)_|5%;^U+*{UbS#2pscn_VeT{`OMxUSX0{V5Pw{R$R&rv0>aJ0@l(J7@8M zfQ^-n$DrgUgt&YFz~$|!8q%Pq#B2RI(uvJ`P3+9WXby@ z4zH*o7dUa;jSI;Esw|D3J1>C|4FC=jva@4Si;G$6-Ux;U*Vt2Vk5+v{+1I?Neo;2w zkU$)@x@rqd$?cMnH1tB|pBow`%P%#qxFFbX;|>F442r&ww8-xc362M@4P?H$m07J? z-8{dvqdmXBK!{(scHcDTT~B^TMSs{X8m+T%p9s3|>i6f=JffP3 z1oY*`h+1cYIhOl%du;@0!52RXzVX0E=(q= z=ZM}Od|(r|^N+AAjwv$Qgg0VwZ5X&k2D@Uf;oh>>r6i|QyugZ+rViR9<$l$jn(d3| z-eprgEKWa<)wb|pzZz8lA1{Qbi*|N}6NRJDi>n)aLk$ArfIg`Lte-n36KE2zyUz7T zCEuea{G?CUiARsPf^};=-qoYBy&^sr4dyS;Jco$z^J{>!!T+$A_wYMWsFFm0eXIk( zr0;vax!oCfTl96S_=C`2L4e@ItCMw`mp1|=B7lDr856VeQH{+KxO33a(Sa(Oij7U7 zoRGWj5jSNR9B`^2S9DBaaS`1#;ZM^SEddwCE&kHONB#q+A=QvJ@Yp&~5$pN|Z)1j$ zkugioCjo3jDBtl%X3k|!wokR&fBdy7v&|<$FACig>h4pgwi_wDqUV{F8Qvw0UzC>PzV-gf zpJ!gu!`?v66)nK?6} zD6IeZHbSyD*Kq$4J4=9$3L`x|Z;q7v!}kEOHZwKdKRQahFab3@x7V+&-WW6Zh5`;E z)Z_5zstU2^H0N)Bn`dTxO?DYK7nm6q_K3`vl?e*f==)voeQ-xxTRX&~{E3a+$lBnb z&gV3c?u*=2`dkE@Lz7%W^S)Vv6DQ~Z&mouJ*=~&q+0)S_AVqv_<%_XB58K8p z_14GJR2XAbGYZ5hj2?fUO-)FyuP`WLYAll7A+|FP{REe8dhsOjl9u@34Q|?MQ`{o3 z;x!#dUp$E%HaOB=XCnUby{PNH$YV6=+cheGt6|CY$AY3UHIwWT8a0l&;?l-5XR|BZ zwycHF)>luyzdTh&5X_?zGpTm{DGmzWgvsV6#y$2uW-~-G{QAClYwmLUy|DcV*TE2< z3tiV`0)R$egR(W-(qIfg1k)mq9cj zD+=r>p00J5d3y_WaY~&_6*qVMtzr_D3jlbzn;G)`^glDxRz4V~(CQms#K@x- zJYKs3!qw&TNv^WLS^eNnlSRE+7gkAA)qH?53Tzb%1{ZJJrNsi+XulG=nVwsqXEN@T z3~Nv=Z5~y82vDpLz9Uf^Uz)m=vG)$jzrB+;EOh%bSOm&_77Y?4U92|_SLFN;xvF@G zqlr|hddACeEqf(l&l5vCJAP<7eJfi@jDxNw3Yv6Gzyj$CBgxy>J#zlX1t3g4VGo8W zb9}uKYyFeCP<|hLBVSCHUH>jy{E-xXXn;wsZ~mgF9v4Rs&W;6~^P-k910*hoB2QyN zwGtuwymi%VZ5eFgfu?C<_6g?^nQhW;^N>UyZ5qD^3xNY+g#iy+}}yr2$L%$K*Yz?0;qr2n~Ex`iti59al9l3T{8oNzv| zylwVs{Me(h3D-5gdzG6$ewnWQ+&wP-n4W-BFPcD0^`bXL@a17w%+=T~5o<&kF;DPk%nS)U&|)Ux0v?%=xhBXRl&dE@oA6kMg%J z^LbroZwahU{6n(~-6!f_+jB?R{A)wx%=k76PNub5gNcDoXd$y&E${P%2o>>udMz}& zbZsKVO)_&0oc%qc#lu0_S@ieuzepO#)Z**JxUDZFRP-WR5_1-~IY(rL(@YP5N~C<( zshpi>N$o-(SlDl>seyv3xVx-7W2_5a<+A58%h;Zc6SZw@CMQw2H+78tuF(cHnVK~r zG)o>?)-cfb>Ta^Oc$RDFa^|)x%Lv&v^E`*H-ocska|%X`QzZLfPF)6DsER8l4XTPs z?y{*+m~uhiBeIyRV*mGoLp|gL`s`Y-TPSAs>qt#6rWNw4uRmAjd971=rA^;0>f2jA z)TN={iOdKFdwPU3-~E1a#i?MY_Tci(j7Al=x{^B#{2Zq*=FG?zbcc;O%n3{hz*Eu6 zg@3*}Jd~bS^`$E){K^`H>{ck{ucH}|VZD$4CMu_+;X~p0juR64Lo{SYhVd5bqooa| zL4z~+CZc6H)#ow|)VD=WixBcsXsbns4J7PtW)8Qpgi>g4SmRt-&Z|};e{QV_CKkqs z8a}r1tkVOBrM<`_5W9NaMRcJ0MTev=r{E_0#EYg~`LCS`Z_5a0jTURN0E>6&fxOfq zy_u8U%i4L$e^!SPSc~Ohz3M>o8JSBq>?sDu+GbCVB95-NauLh8q$(j7q*!>fSqVAAHYEUa)SX;Yt>$?iAzjRqC8fCz)_quVL+n4Cn z_;9nxdFzci)NIc-P6!CH1cPDhTW!K|Rsq-DEfAl%p?+QS`t9*cGa1v6^%+-XFi{)w0vVc9pe=NE+C<3V`(;gU1Q4Q6|N37^H>w?1Z5{DD7y zn(@zN-{z$r2|0K9GiDYe0*_7CHeGGpP@OX^?(E|l9_Lkq1Vl4ca0%@55Gk+)_Xp-& z{i~}*5LcE0mxf8vGmz0=}2Na z8ulWj;`8T@O%b5bb@(6vWS-YYe(M7ge96^T@#2w}wh({k{N3fh%V`0w_71!qLpRGR z?jDn9bHn*J9%5U7{W~5!g<||^jRj8+osS$@n>9SrbJ|&pm{&JS+!evQWTrUzsLMgc0Am(HJa8Y*$&gRJ&63X*h>l89&;X@ zJJ{LTbB>%H&L_I#ElIubc@}#FUUiyMdZzUT+y&E%=^l{Cn6^qSn()#~sej&4aqAYh)e8aaqpI zh)I*<&MnuPUUV0_c&ck7NIe&A%%HgXSB(Y~wnhygm2*9NBSpO{vN101*j? zh=^DwtltfcG(zp(4czd>K^8AUZX;F)8=hpzuBnb&#d{~sJeBhjz)Fsz{*Pn5vkuK; z+D`}-?FcevNBIRP(VFN}NLLejscmc+2? z<2yP$Fe`nAPMj;;iJcds9w2Sy&R-YCb~wY=M#COM2#L(uyxoW9T=DcbOv^^j!Cfy} z0k&89nJvsbq8`xxgJf$lX5=qKuNdy2?_dEGVXyeGbuD?GMo`MkhCM&m+tr^A>wXkN8{psck!TkBm7L?29mLo+ZZ1o zkQ$$EA0dx#8Dp(0BWxCiG=?rlwA$JOGy0dIrZf;39+#rVLU0qC)w99Sko3^snhzc$>G$>m@^APl zo&|`$#<|}4xtF=3@Xyjbrz!nsT<=oB`Ep!b>8WWl@6IaVNp(Xui^BG25cv<|k&ZqDQ#C7=Rtq5u~M^{wA&W=}4Xu8+{%8l;!uEC!|+B2n0Hq3J#2O z&UME@=E%#-ZMw-f&DF{%)FfZO59gEdRoHdB?+S$Hh*I<_HGvR2WlGse}GUhu;p zW?}uq^N^wi4nrN%;`P-4$QZKXSN-QO2*T3vB77%O5hULavX+5!CO}XCEUziydOwJagBjzPFneY8jhd zgl}r~YQ1x+y_mE`Yw5baD<8x3=Q6~eb9w5bu|AUgx^3Zatt<1}w{Layj7|OBI$k^h zC}&@~VC1A3+@zZ3K@dm;QhBXbc11-+KhX&)>0&^`a2i?@0BbLlm6sd#RJJRGgibY z!RenT?tBO?t+{uwi{<5|S=Czd72(7m>d8H`gEua}dF=x4X>vg2`Bfb7=ZKAHd+&AKijz#KRn;Hq`M{9aeKzj*#Uq>-DOTYVlFFgSW&k4*%S zFbAD-qhn)$+nRDVJ~l>1P2CN0DMBJ5*^+TB6O&S0g&C~7(dzNo;#or9g z@QS$cDHGP<+K7#A+8(hXgfT8*a~eiIabwRwLaa4z$9FUGF|6?}?dCiS|NccguJW2M zT%Hk3e#GFuExoLzoh3uJ)ez+k4O5PdAj|?=EbJpJk5sk4W!`zq+dg)@we-*7bbjnh zVRdozm!jqRw7e#=@qyT&?V)9Xdgjyk>NlQfW7j zFx@r%xvWXTqsg*yht9^bKg}h@CBUE{;GmP5LChnZyZIa^cld>Fb&>4nl#~y8CDo2Z z6bR7M7jPt}pwL_X?j7D!FPekX)0$@xn5G?_k*a~{k$xcW$3qtdJm~mwA9HbOcLrdC zqWb%-EeBv!wBii-&~6L>U1~B_*G{l!nFq#B4M{VlUtf}SywH3Q--~Y^0mfBtR}GA- zIIe=FKspuSUcI4GoH~N=eZ(r@{SgXzYnG@4bOlJs-JWgEB)N-|9 zn;u#i0Vz1G##(L55jb8da3Ga{cjlMly^t5&m8M*mxE>~U2+vAgNXUww06M*8;3`r7 zz0mzMgvnDw8ImLx0kG$o?1v#kU4_ER(CEY{JnCd4iJH+VX-8eg^bN9c6`C(#u)RX# z2C9-etb;l@y+=okSCKl!au0J+8A?o-N8&w_20erFb1Li8N;Aar0Bp0Stl+pMeFzh=f^E z1(4GKj9yq@PX}bo0X45r@4b?;a(i#D@_0~1U!O{AZ*L@U*77w1+5$iV!^h7LOyzzI z`U)^+SN9j&--U&pa#K>_ZQMKBQ-r5{6ZP==xlAhptYgT+h>u#~$9Mq>QC7$A>^*8W zQleB+S+fffX|MIGat+p=t@H_pPMGnT$qsuop@T~=_ntm%)g$3Q&cS^-iKxyWceym` zMU~%0Hv+nz-@^#@H1A+mL!()^sF|ZjB2{bk3R?C#!8A?L(>Jo zksoq%3qLC?Dd7SobaT*t00smnF@!_fjVx<@6(;(T%CNVEV6sAy1wg=$n!wOR0&+|dd4VYliBJ(8@oPe~& z*YEH{Xx98Hk1TKl>vR&KkBb4RLnKo2HB6ZK$=Ce)=z$s%V+r)Z!T3ROH2dA24FaC8xQdrb#i<-JruP~i*kcYYYeci{l|&ADJiq2bDNB6|6yeXr*MbA*Sq zZK>oz=h+wAd=*(Y&w_1NF#}ZSABWso^obbIwGmOyjW+vRU!8F=FBnWz2V?&}hA8y> z?L5w`y)(xLIZDILTh_P^PS!DyPcM}Lbmiqi5+Gk7sWLTx33zj#FUK61>fZcv3V1`_ zo|;A0b>b-5eX`KrAxDI(!hYNm)vFlj;0afA94D+lqMxN=?v=Sik#of9~Il$1=lEeKo~Buq1GMyJdzl>Y+A)s6pN zYWH8}m%S)RSKCS#x@VkIRR5`9iw~vHogTDj+Wi9V&D3niOFAD&5ADII_>`6h1{E?a z>C$*U)K^^`27hK6dd$dbGou6o!5MDNCXD7NX($5&93FuF;fkPh1ma{d=*;)gFgK-F zjOB4+#)=_3kttkda_GqsRJr}1Kc7THwWUV=4$Uy;xgMz#f=eNbXIsd<2oW){QrJoW zI(<;|^m4UT{mDm`vFnm6YgIGWmlZp%-*uuUo&%pUMju{G-=b6K=Hc7E9fF?Q^~2od z(!(m~gKubzvZ_Tzt&!F%_e)CzrbMR%!8DFLkkpB&_z1;Go7+IDxFN0hhrqwJt$VI1 z(e#8df}EZee+yMyA6~CjbDmUhX;}pYU@SZ9s^*vmVUE@t^5Ih2_oSWW4$sbmh2$?A z+$Z}BRE{#2^J!!J(PG5SK!xXpxO-{?zxp{A@U z#5B?EPeB+isBTX*I`K-&z@BeG1_R&r`m95lRU1Hg;`#LRMX#FVc}{F4gq}40gFHp_R9Thm_ zXJ?mR`?a3skN

Sc&lgWtN104QIZ$v;NxD@O0NF`_b^2NLHYMPwK5+Qh7!_!3P2A zyummW?{o7Y-uFVP=fPEm!6`m7Gc!LLbj;1C7*&nILF^4JzIZ-(si2_X&5t}$PUgw` z8jzO1NrX4y0c2g{PndW$%a8?sG59JGi*N!je?OK?G-Y>4VWcYLePy($~9*Ypd zg0^6IaDkDEmc4)H$GhKuYVYcYXnlC7T@cM?|bwTC{;{Mo!o6gGF`J`S+E5&(~FSmiSexZ}(!o4hnf zyQ&b#nU{=={_OD~$E)mQREhCo*uCm1zJJmCsjm9+tIU@a>S{s3pC3N4x5%tC+eE%F zI-tif`OrJ*NQ%aOctj1~xg_lhxGI4=sSw@M%6g@M#^z@n8@j%8)m4Uk7s2(;_ddM^nQ+S$SClrj8HTaF7AClT=szZ*mi#9tZ2^5)guLb9qs}6Rh@|BR!&(>GF5Ke;h~$BmKNv*yeBUH8R!oHog8V< z`8R3e&4>&7Bq0xw9*Ze!AY1E4UG98Xg`_mIYdzuYax=o>G^Qfk8xVt#|ElS$X+7@QTJA^l2ai z7YlTD&`^;LJwZD*b}g>*-mwC%pvJ}`T0s%Ci!P0)7(4Of$l2AtGw$rYyo#JOS0(P0 zp8OzQ$NtzqXU&&vEXbd}o&`@qA8dJJbZefB>m>m`e!PI^BjBcFE1U8ZyH!Jj%jMzs zioq@Mc#;c+Xu^1mDIKd^k{@P0ba48|GM49M?-QBR5oQ+qEuA264XMz>2rbRgpS2kC z5$Pvrf2WWv0G8GHoj8!_)*Kzzy%9(EBk}T@!@IivakHFWS&1KQA-{c_(3Ip0@$5dG z9mm_djJZMM+7ziro}B$mwfpmp>%XYmhEZYhRJv2}TMbl!H)B^#&+Bpjy~K-0M{iG! ziW^z445jw1`5J{RfRxm3`5h-k0no~x^? zJvJiiUN44By8@f(XWx!%#Z%(V$nY-mS6rQ(I!sYY07Tb%<>)B$>aj4bt15AGrl5eZ zFh4I}tofiRiF^h0-miC{yqVO$FU}UqRQ=_f(weXAH-@}wa@9Uo>N=gso1 ze#+fCE4!`2w)0d7dgg@cfYpA)aS>cuIdbcAa$<7SQebJ;-Vdc#1hFB9o+KCWzhnRn zLs$tIu+j9XGtL>?kg-?gFUuMJ?{3<)8ejYx6K;8n3o!2w-9l!v#j0Vb(;ymZl@&-_ zrZC5Mw6h%-WpeXk7cGu}?to@laWkDSO7f|EqG5%N#&zfswwmtlqmhDM+&OWVb9JU? z`}COC+9Cub3>u~E;&0}}5;ysE#tue!Xij_Kg|2Z>WW!?UAN!>y81To#7h zJ;g>ej60#Vh4cwl&l}KPStu-}pqok<(C;x$q)|9}6NAAlb-dWW!KXgP3x+k~&Em>u zP7C!@+VR4B{h>uV-*Wfw7 z5_!_4Hd735(M^ytC<$u=x}rI@PS_f@%@pDl(z%B;Snf0v{_D~_-?;L6?u!0vIj|1-MU z$T1qjVWIS_v+M2_q#n9qJQysYr%bS*&l3Kp`#V*GmiFdWMk;&G#QlfLztG$0i@(se zz7yhyWCg$$EBpuVVI3YF_0N0niFP2>{T7!?7J-dY8)&fX1-D9(Ae0E8LDf2{PVoh% zTLl&|@_*DaBW=hi7qq6@>Kamg!iRR%kHdik|I+z3A`cC+=-d-oxk?Q z54)!()HH&H9Q~FS^3>+yPlD6H(d27(j^1y&jE0{ zU-E$&f8h^D_RdK+c?5jT_@9;S>_D=a`R<{BE++gMvdoa2f9P^K6;Mzbx=I&-OWdu1PVLQJo`G5az()BpV1>J-W?ox-PDW-}d$K z&^^!_y3^(yb4*M0AWl7tmssS_Q%=f6@ zx4v2NPRQ^{^=WDT#MAM;7_GZ=@mNpBaZ~~ahBduCJp=zWsUxpSfjG+iS#)B>1GX;b z+4#g%-)C2iO`?9L#2j%y}^k`O{l@)ODFH!?u@I{3XnT>#FT7r9AL*adC;nJ}XiGbgjVVhQTfk zXY9od{vG(gDcgKua(dh5QD3CKzsTXTzr+^e;zOaVKB8x^ncvlyl!Sx|n6iD{i9h~c z*}e#B{GoDKz76e*`!DHSsu7N2*6QZ-0UQOb`5t)LDzj;{LO_;puUpSQMqM z7xcRXeIskrL9f9 z?I(dgK6O*W!(aUjeq*$Cg)S6cdTqvcqfGA7(QPH$HJJ|HhF!*;$3UpTqeFV1MFkke ziC+^R@wd{ii}fYd-`JucL3@-S#_SGe^cHBv?BQC1P#K8D^Wogb{dK1--m=zthkoFY zse5~-UPI_Z4AYZO;ILAGU;=P<)#T+pTDrO4v=^YDV)Qfo!{L#=vrCsl^?>qz5(nGf z#>N-lfC**;6BCn;jt(*=rm~%KTQ(rDK`rbwCADdn{SYQJc_O-ci=2{Cb?t}Ek=D&s z@xuK4MLPQJcjWqKaJM%|gMElf#3kOm*fLkLA%6C9QjmbG!5R;I9fMAb; zGJD~M*i-W(ZJ-l!b9;MvC>z>2ogOp`n%+f6w6z(qS+hT)HA5L-xVJ$dzJm-nQjNiR zwY{U$W0k|?W{|9`N=t;lbLu!a4YW%ZJjCYaNr{L!uYe%LI6AVMAp4hJ548FQ4>vUQ z4mEYjKbR&sC#9@aQGIF4W&3JRFU#6lj)PP;a<`zxpDX<`UBG@MPcebr zQ()J>rOdF|X*KVg$>DV2kr(Ny-W9I+;l7Nefz{VtAP7qq%-@s$~7Vw-@Ba?@9d4tR}fBRQF8`pD6>GdPEeYxuONba+!O~SjdeJ*|^Ew$%U zpFf6kkT#!5G6#4P^xitH3Yb=UBl)QH(1xoM!Ns*0TK-Q1#T>AQ_C12HEPm*)xp8HH zpZdKcO@{6rUum+A!9#Dq#`_LnPSHUPF_7u$t&kX!me(S7X0@Hx z55%XWKD7T?{2a(?CU*5Ad?DA0+y91OXf{K@+tM#TXFqjH>CK3H@Ut{2=n>mLmYQDWXQuKZUWH~EXiiEtTafe z|N68#3FaM4o`-fZ|6{@|OAie`>-f<1d9t3EijuWi%&$pKo=A)+u2sMmF|+GzK)6tw z(uDg6ABMe;Z;5r9_v9|N-zD4pAtYh1EcZ$J)7~U5(LIx>Vs_DU5~gP#--z3^;xo(F ze^0Ib&SB{h8&kvh`unpwi7fjpygp8>!k1JLZ{OlGEbl>*V#yvY*m(GKFDf5XloWG` zd*P>A8azl>QPgm^(ZV(7W9yHEFZitb*Bytfa1l0E22r|xN6Py6u;>^{*pRjmn9Y4% zxhSH9YtrR<^Xu=stlgU5H>Z8|-%ApYAlZ*7DX|@0Haf3cy@md&iRa_HEX=3!TtVV& zHRyfr6$$QkU~CBTo6E-U!9H|1ViH52I(6#kbbCU76gbcDs*9PADz2&2BNYeC`wq-4o0PkiikdJZ zlsa43*W}e)@}S06go;wTzGKJJ3< zBX3x!^1=-Y?U5FRg_nvqo5Sz|E~U=AXiYJG!S>mBeXkxV6>1xXd>rNtz;o4d2znp0 zK%8s!FWdixnjIhNlPv3Gfx~7e*Yw?zjfOmF55yb*91V30QuBXgKf9{qpu(j)~kv zi&Wgpi?GmIsmQWyQ-T$gLNx6w{7Z>_&Uhq~1t}1u3)GbM>lko!Y`ksJ{PXnFYal}q zEV0CdC8%J*6`u|D|C}&AIvvf8B>J-4J1tV5xpO|VyaRWHo!$LQ&6DW?Vj%2lr)o)o zIZ#$s7BA|Q%EtdQZ#q~`faTX+9(2MLql+_*XlTd)2EaD{pdbad@JuIWwJw=P($zIJ zKYWjDfvL7OmS2~C_^n$)v1w_F_Vz^%Njw1APK?>y!mV&yRRS_9&vkTws+{EI2J3jQ z^fFxaI-bmRz*9`QF9WWO1SX9^^GCvdoyPviJ*>>qxenR)6wZci3*2VQCtoebX?I4p z<$^oPuiPqzL^h9{eZ8Cz2_c8utgOWsd%is^|9smYZs@yEcef=Bd5*ntjSWrIF2s6e zmZ5B=O(5pVXkaAtx^jg=nTq@CG3xkS{n>xcI%nL$<_jVlWP#Vp49d#40ZZ>cx_@Es z7S{J-{#YNrV7n$AclM@mFPENK`B(=7G;_5I)O>9G{ru{;FrYn@lAoV{6Qo?VwUf^C zgTOvD`Kd_{kQa;y4`&e*OHWRwiusJ)+wJ1&sxNNBW%}wBCtyqfWkGF2!(s=vF|bSp zG2R@IiC@#kQK_p%wc(#8hxW5p@p-P;vc?;X)<%zsn67R|W&G<-w6@%+p41@@X*l-d zh0V8w9vIO^^5r^~TF4!V;v`UPl$NYNSE>1d4h@q5VOIBGvfNiCF(zYuRu*8pRFR!g zP}rJRfcN*+rn9`m7lv8V%A>~@>f21OJv@GS%$5 zJs|>|FKCbI1gA2NRd@L;Qw`weary*tx`u`yTg^4*;6Odl5@QZ6LS~R7zV) zae!|xR*XmIT`HAk_nJnUfb`JOohZq^Wb<-|5b|$z zYYx$2vMVXEyAxnRm-}Uv89^i>D3}EL8u)p5zM!1v8x4xc&}cN!p9C5drAo|=CD6$u zGY5x9X=!O9nQFS|$xXnSpt6Wcl%7!hxt^KRu+t%kMg;STLFi{Iw=9a)=kdcuQ^aKEe_{-ESQqodWv1R>*qNk@P$6Ksfg=UeMWB`Z(qd=otmsMaFe$<8pNH$*@ zAu(}22p+j8pa3g3?Y{VY(|7P<2`0kxT*ZT^#rY2eN1TKB>K76Y)S#6BvHu9>eJYOC zdQaLV8y>d}W&O;z>^SeBWLuU7Ld{A3RJ2768Zsc2|9wDP6ridI&S|(=C?!0hv*+wA z(d@J5MZ+Z&(9*%2waxxUnzyDz-}jj9S#F`aMjgA?$f+yU;2gAWx8u@17g(I6J7Kso z+Du`^^C_fClaAbE{~x*AV=9LXyEXUGryJ4HBv>oVZZHaK<;NuS_$dKkFX@<`ot>5VIaQAVhMgDlZ^8a5O)syS)Wk$ttK4JM70|K`o{fP3 z_X~@Yo4c^QoU~+o>r_JYb-$eO689COsGD_}kZ{tDVA9wcx8rN`cTbF(Wz}N@b~|^w zpr#NQj=4ZrLRMB;o_4?3BLcHr-uWoFcJ4ZESqaq>6~sT+X-br{?&{7=eL_c~z$x>y z(w~r9ilgWip7qt$5Pi_ng}d2zmb~_*<3? zbu8mFzKXW+KYf%un~zLG!Jx%{C2y39M>`h7UD}&c>M>VD{H(03!U5cSdtftd`~VKm zf%@~3;Q$5ByHcH-n-dUJM5E^YU^WBQ5jJ0HlJm?;0?JIm6Iki#=|H90>q-qo7*Ncw zI!&ZU0b_Zv!%f<)rH24UpOcgGt)wKkyxevEyjR-n=^3bq#%5+dDJDNQNdk}cKT=6C zkyHhd7GL9>rVrTw<3tABr4FZeJ0OBVNJ8F9Tw1!-+WILYY1<^q_0CTh_B7~{c>4~i zKE|jfAYz#O{QF9d!Zwuiesk&iC;5pP&Ke-r0q#yb5J8+xhW2gmhlVC{nO{75spo=- zN=}v^8`8o2$O^dc+_UR&*=ty7oW8KLW6sTHGB;J+bMuI$7BhMtja$lM&L z<1Y0Fseo}wKxM-*zJLe@CbDq&HZ3B%92Pl3^~nCR@p-+XxljgJ#TM4q?@qQSBSAZ) zh9^r{-+fV0gT6n1u)jDrayeLg#EzHfJ-jI8MDW?n*yThJH_y2MiS+BXAkM45Pf>`2 zDA)azHh$DU2qR1{WUZ;M|DgoRS5Em2fP%ryXTn_U!b`}Ji2@IGSK!fN)gAqCZp5L- zq52W4*{;{MWFFIMc0!X9-t~Gt-sBfyka)T6@GEm0ZfS}0fh6dKT<5wAihlRWigh`~ zU=~+8Kh)8I*VSRcrV1+jn*W|nPP|kU%Fro?C=DKDiYSXL#o2)Pr8xjabH|#F8xk)?!B7VR7O>X{eK7q2ve+9S|q&8zr zgy3C{OR5hG79eN%LbC$7Q$*lJ)*Z5_ur)r>_2$$E(ev- z-btm!#_8VE!!pPrmLlGJ0xymJRK85)S^(h#{HkMEibq5wEzh3VkC{Kx!JPSwyWy;z{ zvApXf-09>5@BE_w;SuHd{KVQCOqb0VNSr(Xj;ZeekJ7R-9B7kOUEb?~Er7Wm4sL&d zpu%N;c|5A_yBsC#14Q&ICdL=Hw?RlsHa6IqZ!#+K0aE!iL}7}nbHl^Zy1L`vx#o3< zG4Y*|n{UJbd#~xqMPZ&9eeCGWOb>Vx`&(%e{tF-~LV5QtTTM;PK%I(92LfEbYq`?K z#zdCK*>!zF8x0P-Gu1ASSK?Y!K{;`eTloB-3-17PCG382XyfP4n9u`xEt9&T%QIH8 zQ&XiHd8M5yCI`g`Lpu;nO_?AX)e8J!Qix%?_dvksH0|@3qL)}q2CWnf zYc5V_(AVP&Pj}sNnH}%@9i1b>0>3NZG-o<@v>lX^|K09I>h>as+Z{|7h@jtF|EM=` zh~B9IFn6?->XQXd{3cGTAc#f~;Y5|Xu* zKM7T8qdKVD+%pD1#qY9N-eD#zDIpn1%mH3!s_KyU__hAcAPiy%2G`*@aPpsX(I5D5 zn@8nRkIlXLR2Eyib<0{|^IGB9dX4nM1Arvo)}|hv-DdH$xRs<|%tN=#OSdfQU6zXP z-^8-+E@Yqf5xUrN(Un-Zd`!1<@*G@jV;YVd#?{-9PW(Dd64X+6{?^GmRn$Reymj}WYXi~V}YW`8M1fyUnZ8g-_FZ3JA zR?1pHyt1gDn%y?H4Be|A%IB1d{Km%=`F< zw{lEKnB2AA3unySS#G{eeyAZ0vQgl8I6PSFR>d zr2AeAR<>{-suq^pN%Lcbva_a4vbo+@bdT}jJ+8Um7rkDqf!42ryScvXkeWNcYQ4j4 z@^$b7;&B4+bAj&n*czi#5u#6>y6hy~$HTtg0qtC)7S*->0>pH1#mVJtP}&F)5ThHr zeW|VJj43n8)V^U>=YG*EEg~V2nX3?^l2)7c>Ji3`Ot0Na?6Hd+8ks*Ci5yg1^vA{i zDOwh#5<^6?WET{O+Ma%-yB?g?0|T4f-o<1^4189zbcSI_SR0h8KM|2w>Oy3{&^4kL z1Fs~^FS^Y%XJ1%<^XQ_brIV6#&eggp@lYRH6S^5ZJ};+YJ=A#K`;jQ=-_a8@hx-p6 z07v;hb}L6;@7fmJ8!pcKlQ43wT+akuyo?^ybvR7fi!&{6{qQUW@z;|Jk>w~> zuvA{q?eVe&H3>HWN77%C%r=$o^q`CVQ00V;2M90MPSbQ358P8y(fkOxHQ-k9lF${e zu@N5>aAp-XcWC_8>a$>VKWy5RWhjfkXI31KkMr9uE3*4)RPLA`sj78wN~hT`nX*o=D=;Pi%@VA?i(37a?OL-NxwW_TFeW%FvVbud?0A!u zZHz+wQ$B3_Pol>X1O660%Giz>(#DkCA}03ituifNf6t75#WdDt{(rdu^Os*u&xd1V zn=muyqDC^IKX5)4=3V1uh%U%wIonF{E~)Ry!4X^U)Y`5x@_Z~IFi7%xg{~_nzxiFF z?&~tCjiGPEom>{q`JRc1>1^Nn--zGS|3UnUuhiK@2kq_c&(F_aFDyvU%+7RVqnD_e zPSEq-&8%5ZA6WuIAJ{l*nwqM)yH_c2ed&V#5Wr049YB^xDWS-s{Tn>ZzguHMpC>^e z)d#nN5sKzu8Akm-AT~L8-RQ-T%5hMx>;PUcnH*-4>M|AyvwpFrpHvV1@$%0m+hrY?{#y0?(c>Jw=$Ko0Z)NsfC7cp|)pnP3L%{ag6>fDd*z53Q! zwA0}BKC^|?zy4*N&pn0i^>3Kk4eJ1j73RBlN8>m1>%8eVCCt|d8c6Bs7{0#5%0ko(JFh(tf(X8-mEKO?#HionGB z?#S$|_U>I{ejlPUHJfgmZ+DF^6YoH<_%=LqON`ey{7 z#Gs4wvOrAPg{h}gB#fsnW3D)Bx-NM$@r=GKDU>kW;p)0f_#Z3@u6v>GNS6E=tL1gE zmM{Y)y^@;Wqqwiq54t-jXc=UqJC}y(7yPHW2qnd^+OHu$s)V@DHn%HNKQRnU3**q> zF=u|((+!L}WP0kFu>PRG@?|WhVf7iqzV0)|vUyRe+i|VSHq3Og;9YquzoJC9Nm+xX zo#9~aGXJMUNBXT7D!`r+#AbGWw(z1~vFmf%@87HUmr8nXiuvPP89WT_j`kyJ^PxjE z$^^XX^DUhkfEJX}du(Gm`=EF@0$fd20`jhHG$1be!<6F@gW!0tkh3 z^}^eRiovZ6&%dd2Se{{-Mzqr8QcDezeF_h-x1cL$o>6BXdiC+MG^T)!ae-1_zrUcn zcK=Q9-AkEV!u`W8SL@Vw(SHAW(YF-N81W~ruw+{P3&qi3e~gkgXMFG*DP{ddU@EtN znAJJO8ZRAdoFjbT=LFxYQk%(%OonDH5Q; zy>*v6cWKQ2vc&H+Xe#$cUs&Vml|Szp|DdAQBc>OtJFKt2=i!;j;7A63@oymFhD!ve zM+F01g!I3I=!qGneV6|LpiVaf#6tlDb^p25RAMEO(fi}v7b=RZAZ0ilik-GTw57xK zAc~<_p$@4Kj0peD^Eoh7wo8^}$5<-%9+A9k>@Bl?W<>Z{X71zKHw(t(r=L`2{4%Hb z`9xor{q}^q4$!*g!M!pvzhi`BQ{%%*iy4gML^Jr3$;s(tV$FEo#@Mk$fBes&{ddIZ zpf?~97SnH0!trxt^uR1|=9a3-_sp7$gvct>eTsNYO8oUpF$3L4@ybW<2}K-OslIR( zw!*I9jhz$-$Q|%hZyF0c9941udj5sW(~;*&&@t@9 zr|f&_Ls3sc&zj9db}DW|cGkG4lMf5}{|PHGV^4t;6f45)Y}I^mMQ*Bgb-EI*X2`gF z5=TCcTICxn|NB(Q#;ChVnnX)26X#2y^V29*#*Ic#Yv<{f&Uod=2957Vj`D$EVR3x) zY$iMd{uJX!ZYD!$l{7BW$2FgJjs~o)vvU=RN%5nR4^jkDuTS20WBpSMIICHA<#BC$ zb5PNJLGbwM)>m58Cb z%^(#;_Apa_)p4Z?<#OtyWnys}gzlfwk8AFD>}*3u`h)LNooucMh(7?#zIdq|peLNn z!h^LD0MdF)6*=2jPMV(2zfHuDo)EaL#)(q+Xpdy{TzP>NwbGUW^hBL-mPGy zm)cqXHZ#Y4#%{T0&-sh_dO8PSgC~7{HChg!9Py+DaBVdkT}*BIlc92Gn?q&NN^8cY z#o`eL5Q$#YS7}FGa=V584AMNu{j`2mU~Jn9uYkvD!_U3d5SM?gM*nQ%nWTh%xIk){ zt(?N;15a>I*+E4gWX{^4wl77OJa;lpZaS=Z!)*4i?DGJW3W>kWF4%y3Fxs$lM^5|? z4CQ8!giw~fjedfW!4Mhw{ zV+t|*d+uxSCYBvujPMY36FU2#{}7}Y7o@Jq6u=(xAe9gtW~FXY0yFmejFWj4bShs_6<7Js&cWTU%f0Z_)`4EL!zv^vfkTXUt7`-<-} zb*{dGKnR5g6^6dB;%mZ1ACnyCk}Bi0@Vu0nSz<|+Bf;iLkoW25=g!0tTR~$zPZ(M6 zgIn&GF0ReB^RL2q&(*rybw?Mm{-MygIIm8R()`iXa*Of+J{(|vP1-!Vz?X3e^|HeC z&dV<*2HEEb5JfI+*y0@!`{n&wXw;NgQP28|^smb|LK8UipfnQkEhGe=BW+A;Wv{nk z5c9U<#_bA|-L>JA9aOeG6a4Jo+|qp0h;f$xNb*PWWzwvaPj-*~H{PW9|Hhj}X1-qk zt$z>qK>f3cacCWv9kXvN9C7<&r3tVs=ANdN2n=ZxtW2nZSNZ%vI5rpLW@lG6FnXUA z>FF6bKBR#fJ7|b<`EWNMi*#FB9N2ogTp4pWWi4C};Po>4dwv^7FoXr;HB3>k#4V4% zyq@rT;WuHkpKDwE$S^ID^*d5BTBnZMeB9undUVWPj@^Ln)L+>Cn{T8X-mUtFX#d`v zIZs!(WZp&>X3FyTW02qK1WH;&C^6bMkmc}gyS>lNX@BrcVnQALY%r$ELi{7hl02J% z6Eg>tT>b$VZNC#pZ3$6`%HbJZxXoV<4MNBIw;<@EaM;@iq8_bG`~Fa*E(pv(?TyGW zjG4N7J&vi1Hz!nUSH2|Y{^a7x2F2x5gTlEvPH;z(H2j^Xqv*`A3L9g1-Ejk(NQ5z@u*;247lW(C z9%3j6eV(Ss#FpQ*XT5Vi@N>_%e#=(B&ACa9%E>prW9P|t{udHYi^rjx`sR}*kT(T1 zjb~;sS_;`Y7T>{~Il+^`r|=tLw7SaRY&)75%40cu$Tg3a!2E)U(_Jl=(bLn0ob{Sy(L@5~Rf6PV>?5mt zQ87FP4rp&@lo>N)<`2wV1j>#sfMd(=1g_r6*10^Jfe@#@?QOzA=>HiJDQQr*AMFac z78sadE8r8vZR~ZsHG~5EKuXMr^HprYTD^uA-)Q?I!wU1aEW((ZFw{M;Ne7gWi=K~3 zJuzQEMEfb~_je%JI?$$5sq#y!qN4uU_tAw%)9^T2XhCP-`~700moDD1`#_FvkTpYSuv0#ci(ryv#~!0Ci1D|iQvHL}-|GakD72lm z=WJEp&C*KL=+`0qpsLy>d+rl#`6AVEKdH(1BBj*$dMpr^lEI47c0%bNL&?bHjmjy_ zTwVV~(Aq>~Q#UsOy>y2Ig1>Z7rd;8k55}Fi`NyOz<|-yz^Bit-am$7%oDTI?QQBwz z92XR%8>c3bgJ&x=p*_v2F54x1MS;YJ*PDnK@i3)VM%?E#XcrT+9)8j8* z+Yw@8FnD6U0H>Lg0Eo?CM_1_q%zQs-ZO-G^yxLGPDz07t+!<^Au>iya(yAE-39vm_ z|BGhn)zgiZVAcK;`ng;{ffl??o@meC8sxGrcR#7a{ta8^0FKKW=T}FI17u37f52{s z*~g$SeR8aOy@3S zENFx|+;gpIJ+u8kl)VL5l;7JfI&^nRmw?hC(jB6tARsk_5=w)Vzzi*2A|N0gN{h5G zq;w-8-Kmr`%$&vV_kGts-?{$RK6`u3FwVR$!_2eRyW+l|=f1Dm!_<0=8ujs7;y&ta zZF}XC;Iha(^>(Nl72N!;y+%q(db@vaTefTuYQE^Rp4}qX$&||m5S=7y2758>U@`dx zAer(cVRvup;3%N%3i19ssF7wp*Kn1*eSnLH2l}GOF2KXGYr*34vlFtAA>o*O}y^4Ikh{bod?B8S$=6PtyXU2W%YRE)eU0dZO8@ zyz@6YCdRVLsQfLJbRNX-mJkxuf014%01#O)+yKPy%`W!ss1C@p?$FTol@i#)-9DVL z>!PFGsu2rt$~Oc3L^=w^*D3{T50EVd*Z99*yU(|*Uiy|JZA*AUAMNW>LvN(mnhU5} ze0TG!*`|J5=d|esz{K46I>55MPS|M_5B!;ePTB!5KmY~=Gb}O#NaLQUi@(SOkF*3t zpB^HC%5$Gr=sUqs7(7dEAt1*)ylc#3n*#mj`@M3;{K?tYb+N6mq-p8ocSc#iy0UKV?Or3y3*G zqXT^(BCXr-_B9A4-IE8Ffw_4QDOs5Arb?#f(pW3EYUXVce+3;1?dTL);%jTSQ&iLSlzO*dA zyVI?qAnE%iJCUAJjtHItk}C0j%;hbt;=HN0L}=53im2P@}?O8{M-gVk2{)5KV_pA6FQEzW#U7~RJnIpF<4IV+Vs z%ypD?(lcfMrM}*%eluZHS->^=(PsRt?QPbW>ABp^-*GEICjc2KatL4(_fGw%JdvJ` zsG`SSpsKzS*hn7UGF~u1VAcDJ{cgzSdi;sG8e}oE!I;7D_QmGf_tSq7GEVbl32h43 z0~K*F8Iyt?hHSly&2D;ci8AXXzNHHn&6+IH`1pnXPV7%(w0q*NOJ{m^0A{SF}*P z;koFp^(T~Fh?X>YF3ur?9C_|_2Xx^&x##2derRByWXeRkU~W=4L3Cl1`6h+ykYvDr zseGMzYhOFHuI{#j)}X4_vVS$k1ZQHrV%%v2%(I?#%BPA*@#g~<{bCBAPV#>&Y(<1- zbE%&~oxEIbDH$BL-q}s1W8F!SpJhv^-j)>1icbm*jzoV?Nk(3#`mPnt{r0Z@VK}*M zm~}-?I%94k_PNB34K)&|Tlf2z6<{JL&m{20V^PujX#J9m6y1P7$@lV1BsdSd7(CSx z83W8qVqWfcM2hOg$y)h_b|AJrlknuPpy-@dR=GxZ4OYV&_`|2G zP1c;Uw@V!4gW>NUh0V34ShQ$i-5HGE8Jt{Kz(r{30?nv= z?0m81`W8Bw{q!A$Lyn3s{q4};_Vgb-Yj_McY1sM|a6Ih?OQs|uj+!T>C0w6i&1N@d zG9(Lr596M!!mbX_JXU#L{~aT{M+Az`j=fGM&Y`f`%oVwkx2+N%^bhkbqnTAzst0FN zvIL&1W@QbRQV5w1E1COW`}GRf`dr-)0Nl)DI%1!b1Z(wYZx|OM{$*yElm8PlbG*WH zOFjGxwz+T0twMOY*7VQObMsck>F)Fa(nDH!r(prdP}?VQml-Ft@y6NS{`Q18`S=^= zNUg#FsKqnH)vUz1uqeTO0RE`<{pVVd16=YJ6HR7n6DRFaxH?yV|=5B!2zE zZ$+qZtxB!yZv6Ql6i6S-U6JQL(0$rfR*=@4d+HMboMPj-m-bE4rWM?d?B>G+qzS|?M!a>-g1l7pg&I#pTlwCbI z=DT8BmoZ)79FEAeu41|I>h}`ApMod>R0XOj0r5JR2RF!0EIk25&1cMk9%YK8Hs2So zo=}{!?neS|lhi>QOa)p-?GzT=_GzNH{6y1!YiXjRt5AxuCfrAvp6KePc$?# zg!w)t7M%}sL;91Q52kgaUlw3y$|(80kzh}W613$^{FpSLHcKq7Q$^raR4dR@`ngpB{2}GWAb-DH*V|w(k6|u z%W7`(J39>f6a?hsNd{XO1-+9;NC6|q%JKkRrj_(*%7kgYs64hiZjNl`yLk-nyV%yz z<`5YrLAIlUQ2Xxzc5-R*dH396KP2U2_^s@GnfZH8E$h^v2(zO^GhaB5Axs+49rka4 zE^oDTwE8mV`^9}(+&GC3Z!H}q%)X!yc76v*b9cL@IQc&D*aB?bv^^001k!pE0@oPuJ_s@vn9Mv`n; z$qQJ@%_w)?;~IR%$C0{9dOX%}-uLovRUkwG{?T2jubEO7&`ycW&e_>*5&qW_-#!I! zfwnqQGX@|tx{04@OOXNT2%wzyZIBRC@a25W^z`yfu^bm$GQqcS9hP|xz;)S=AVfjG z79=zO=vL1RaCHygLzdGm@-MYPc%hbk>nueolbxchSVMghzwR3jfecV!WJU}xEfodo zbkg@2KYgd!!$XQRq8r?20%Q)hEPD6j#|IBMmd0@!>-rClraEdwXdlpl?|pPMHGbuJ z$J*bYux3WW;HkFN4jU~w2-LCfvxfKlCwGBY>Hmi88k7F^3JFnmh46I#cP>Ed>+5>T zE3U6HQXv?dkq7hMatd9x)1by-rQ9jo^z^J9gGv{SqX_zo{|4`P|cg$fllsW2Q z2ZAvB9~apG-e7Ph+)&tn4ZWcK42df*RhB-ZHVt(~FjgGIkFynNIs$|vnuU*qh!yaL zR*&fbu;M_q?$BqXs%%H75YUDx`zcWTeo$i!d<+ti#|8*5(lr_la14-OmL>6Yx9QSH zt3-g;(rt4~`~hL?$iut{WpU7CV-qH{U1UiRBEyxUA$@@xOhz^#M?jU(c>I1{j5vd* z{ZoQE*y)2UG0qTG!=FX*7Q_xw<-a2bjf$=g-IWSw2zs`|b%!u1{!%}5W&ji?VLol; z#=f6=Ww*t%+I??w+auZK_kEBsp9G}I$7g0Dc2B{WAx-6nHk2i&ZD8L3b>o18}j<%`NqzVBMy{36bCyKu^jnN4IR9K8J7sT1E`sx-YbEd8a}Hj{CFipj zi0-2U<})lokDSPo(OzZsd8b!m z0oISs#y&naEQJ%$9Dv$1g=D@y8F^5yX7P5{AH2+>zH>>x@+(sC%cI*a5_Q27*QiXN zx8>j(@BdR{(@P52NwZ6tEWPsQqk8!)+x#H;85#@j)1p2Z`mYyj=MC!f%}1WvvXQHo zTM2&a^p4TFx%qU}Ga9Eq1z)x3DyfB&%fCd5@R9f|s?=j1yyIiG)*5Pe__NmDF#JwT zRaeil>wC`{ou7=`(egdyIC1My9|`;^85*XXOk)qkSY*t_=(e1U_;hn$ps`}91u|ie z`2(I4cPz*M>!MR@0o5^!8Lmw3gm~<4La@?`3lY<~zi`PbP{SIHrqqB+dwu`cvlm3X zuh~8v)~GeB?3kEr{p?OSW|pwAAf=*5%%c($%=h4KTNf1){)EY_fW3Yn!Qb?4OJ*&`TPH}`poYh81uhSD*qo)o6+x8|KT;) zzLg||{Zk+I+j-Q~Jz--*t9@0m?MXPqqt=sxg6i=%d%R$TU(8f^*fSK`f2x!-xa;Hp zLiqt$HgSNeyMCyX2kg8#`TE>8iyV}<0Co5yACN>1MBe*0v;VBoQZQFEd_t5=96^Cm z!ud$#eRBy~ctwQ(5KxGYjkOX>ry3s8+J0Qw*!XKaP96`$R?*04x_A%osn5j3#M1hD zLH?n0?a5&`!971vK3DeuMUQQ9^Rc_Lid&>{lJ3Ya9aJEJeB_azKMVG%a~c>I8DIPC zH|Ie(_=d9!KC9I9aq)oi!RXkS!gA#uKh%!lzU{$H5<^^s&M6+KmT7GKSX|7Fk7J!M zF6(xgDN*q9KaijK*Z7h>wMMkkr!;gA=i~16c8wR9ZdM^f<*Q zdIZrCYaHoha8MI_T(4Y{TnHg>CtQ1ueP?QAP26+Lhn4Tx)W$z_Us7cA#;gCD(EYHz5&bqf4 zRcYiOiG0=Dl~BVGWgk3FI~(i{}k}aC?V0@poYUyRb{!I*fY-3O86| ziw_p7j{dkf6yvKUJ^sDn_fWrzuL`J;m6|`}e?*XKN&Ds7xA(wVEOgW^WZp>)rcKWu z2T@AW+uGX;(JJal+&Ydm*mgUR+ZBKTr}N2DtNx?vn=9Arb63dFu74Tb67frpu)I!^ z7EHGW2Kz}*hK1Q6XY9=3&p%(4K5wQwbDBYi6wCSl>Y)0r#PT<*8tZ!eXZ5NEO!9pM zS{XIu0M3hjL(@3I-K#vG_yYW^>}H-@+IZjD`pyTPM7kag5}%L|*m$?s?){5glp+mN zd=-T?_BZ3}?GcA^9c1%)(CC|FhYe}HRppS&dc-jO%0n_?{QjVBMQ0Ha$j;JJkd~SeAgup_7+Os#;W8ApBN%iKHbBB zXtBe8qQL2g>2(W=00|uS3mkzBQ6HE)b%-e!4 zwSJBOUWQdM(63a{WAe1H^M}g=rw>vLwgrceS|EGlTG^P*;(QUET-rBSX%Z4!2+`Q^ z#fjxb|D{WxWqi&HMVixbQJsNWKTrs$TM(bSPyax5fZ~zs3y#Qvp`bw<5a!1mS$1nJ zsN-_atk*dq%#ekzHd5P%2kDX;Q_S7H54P)PPRZjl2xC-(fs~uVdGqMv%2LzC{uh-g zL~d>nS|$V>@z09Jz|BAwtzilFy?EDt@)>qnu-`%0`XVw|gH!1!LK1Odc7p20aKN%& z6r_LQ9I~0!Y9R=WobwRjj_abItrW(ofu`CA|B9$C>MrW` zmQc&O%_=bZW=u4urH3K^^qZ?#0;F_mHz9s$*7v{=>Ysd(0&^X*xOd&3%NIe1oShj@z%Rrc%8f#&)}GW4%bd%RSpH<@IUKoa!2{Dn z8$)yqsGNfL=+~-h8q3@An=3zdAXJU!jHcBzCD^JK*!?{4GV~modFJ*!*iQu&%I}97 zdfTukTkb2UFX8mH>O0WXNzKRrX1ZuuAgb+~be|tyz80l}wBB8%8a?4M4IE*%=tsT( z4oMet4C(E3GjqNaXz(D1uq5|^+Got9Ufi5>yhXV`ejiqscICXEGmmU8($XZxwX{Jwi!2K*p)0 ziD>NSUSvx5)$F|NE{Pl@L&_^wIDJqseGrt&hMFc2sauJkUlgyBuVmO@;^2#Fx;GS~ zc`|Kf%jL9Be8}{H)Xa{+yACKKKn7T>dR+(N zJY=~m8~Yk9!GKhupn$ofBZU<+ELkog0}d3WnJ#9vKR_6rvz#l7iVR{?)z#^A`1MUFdsq%qWRa8x9pDpL z7HE@jTf+?t3yV*K?j62GvPepxi=`8R+ug3NN)4mKj$S7Z=A;$x6W7~^@TB?kH(TT! zckj9ea!E>9El0f#%;)f=(GVt!iaR6uHL5eUHgQQ+jiphpT~D|3@c^mNG`sn(tn;+X zqC1um0yi}G!GfP(zGZ|XB;Hatu8@OK!R5iOdvl7AeHF`_+29N%a*SJzR}uRvix)PL z?!IY>+@M>tU91Q~YHKRB`wKU&evCd?;xT1x(JE4cLYch+7P-0wtwbei;JAP48=_~5 zGFxYOR-L9!uxu-$r4sj=R@19(UB%d#cVCI+l$WOwwEG3bsIotj|C=wj43fu7AX-4i$Vil_#np)9;V}?`uq5^BKv55(RVl(|hg>%+xNh(Od*pIHLN+nU6wD*n zzzhSG?#uZw&@A!2FZR?W)!%O}K8uo@B8p;Wk+J)5_bA~UUcKzw zr{(22<-PZO5OUX`^0{&#RWSSKitV_Px4nLlVko+AGgBx&mN{LrJUK-unDfUi4Z(`; zKCT=@T66@SxMBsiCdJR_iiBDDJnWt5!0G`w*m`LYa`#i3dR2-(9PGt*L%d4HwyC}Y zn$g=X+j5iv=<8DAwUf-465fZ*0EsD1?iELFZP{f7e2= zN?|%VF4qPe+Rm3Fv=&T@b|4jt&Y7~I_Pa2d;G?Qqb82NofwUV?0vX~)` z_O?Z|Go{tbm=;5Oc_iPz`lPDiz$@neWAe+}6Nj?nR^-hzFfz2Uu@MZrQ}h9@)6?H? z4W3on4l_ZP#8r>S>V;TZG}C42)xhsPexPlA6iHmt?X^6?HhI_A?cCmytf#N9ebOGk zwpdw1Rb}a^5w6AuJe?=wLU*XpnnF~QA9u}6f6UzV(lU07AK&4Hu5nu%DCIV=Y=rPx8UzXdz&W*nRBc~htPzmcd5MlZ~$}+Y11^Yfv+rRCE!Qk zw%Iw7<$gX!$SIPPIsaOWzF~3hKCVx2(TT(5Vpszo@UuoN4>YN zZHlXqYpsobLrq{o+YvIeG9^RdJ%&z-y5O>)4SVI}6lPp@JFRN0a)K4|s%!UC%H+pb zQC;W-Pa}w)Eqh=8ak*VNi#jQSlj@!%R6GfkKE#l}nS!nYdB|*gIw{82`f{L|$`e>9 z<(NS$6b}+AjfxT(rkhS7$)&pByEW@>4YRkCFgS2Q=ZEL!=2i^7UZJtGwwJ_WxL%@G`qi~bhE zDu@R@^ORj9qJwWxJHFwWHg{7tICIJ`f{N2Bzx1aFZTfa+{0O=@1v-EVN>#csZybG}=^uTr@Euh^wqusG6HxK=seaxiKr?M2OkswSU?K0a`w7pmb>&7>hVf z8T0qQu*%Dwb6_DJ`MJ^6`g0j$N%#uvu58^>^7FjxNWbps|B*6|VOpyv)$-yeMQY`t zfyg(k(uBouM;6VWPnDbXd%USKO8^=`P>+MVMvqY3_L7iVDqiIgDDJ;;9I#4)M*9=2#Ynw;%E8%4%hwl~O?gv~sRG3avM8mbUBr;7#Kj~=j)PE@%Dl9WVD{XjqJknph~P`>hrigwFjp43xM5kfzY|{; zt#Db>xawJ=UV+~%@)>nH1?qkjU-s>% z>`mhO3@o3X`Zj+8nltZ>+EU~n-PAOqy^;+d?yl2>l{vx3w!eYZ_+P1W^iL-=i5(_< z=oijm8pew9E79h#Dz%G|bEpQ*f^Jpn)qfp^v zdRV>k*#);1E5Fc()%E>I4$jW8#UhB`Pm7cF*STz@Vl_6Kie=VQhMZY;%I>yuDqopC zze!P2azzX$11brhawgYxdFXTzbh8x_E^Z@t-1#} zcYMm^rZ;YpSas&`#WW_kN@$N)gUlxIc=Tf?fteqJ)4Wk=Qp!yDAB}YxqoxV?B9mk5 zqtyCqOof}^%f;eLC<#zp@#=FmH8&@I1JiCj2U^7tmh6mUg?H-)Q~0u27GvlyEdpnFZD?`_K;7t7ok*?*yeDe4Bh8eKI`7BbOyojGF648eCjt zJWNE=H1X^Dgi1skgMrX*;y%$?140GaARna7;-mf?^UF%dCS~KbKOM%W=*U)+zNd3w zpig-^?!smhW>P_mdwa!cbq*{QOo-kdse50L8coi5w(XY@uEf=F#p#!%OO`F^FNcnglP%)4lVPFlPb&aB6xZvP0@v=BuJOs zv8-@7<-Z@D-Gex17P@?EBB;3+@#u+3BucXnZ@NR9VHCx=&cf$-@0A|8D>!OW)KvmM zlu%E+g8sNGdBe!m!fPx+io6c*_@-q1qRgbuO(bDF|8o$ILOY3tc>pB$;BC;ZO!wU%*c`aG7qM$ZRjM{g4r?J& zwhY7IezJyw0vbf@gthHwzfx{Rmq}X6urhz@N5W{wKX+WRQ+&U9Cq3-BNeYtoBb!WTR=J80tv0HxKzlRmx>N5 z8wpzLwxu{Y`}i7UI|TpCRP|AU{R!6Z#OBHC^3DgEn9RFHe3$RF+V)Zqi%0_V#z;8eAYgU zbI?<6)^xh)yIZDnKN;+cw(N9WF^)Sqg{pGD$1gjdn*tp;6X#|spxxEeZxRMZ@s_>H znlV?Bg}Hq{+?`>zf5QOq#VJ^hx={v%m6cUsb7MpDH@XlGZB--7cgGzO!eg?1N0Mn{ zQb=*7OWA=Zq!$)W44fd7na)TVIb4nd?)IHa_q>Yw~9!r4dEo*&0)SVxxYg_wtw9% zGPn4SGm#N*4;^ppZ~|?*55yvXSP&;emS6en(?4`1DJM%G0;gR2KTjQMqyFN9joJB2 zwn<;nDIsQLv#=b_sTxD;ZUsV%sU>dXdwkqq+#M2@|NgF_KVdnLIilLh5n6KcF^mD# zw_q*3u`$Dtu~u)bXElnw41_0U)>f}?XsKqhPtojFiEr+-Vs)dUKHorEX<~Q((mn6zwcAdV2zEDn3zaPjUzhoz_nJKwEf+;`i}t8nG;ZNQymutDkhHf zQ;I)5(SZ5eBDy7$tn9y?jv4fO#K@%x;p*=axMeCjgiv!_187H|<=TI=6j(p0@$FIf7+U!d; zK0dCcUazis0BrrNrdqf^7T)_9{Ci3!p zou1EWojLD2hCwx1pCTQjnL}DWFVAd0LiI*U3Q=ve@Id>!4`%ChPv{57H6!i$tn#-v zQ__bUS^f=+p-W$2r+g$G_%&v~{yP_7+Ew)Sqrd(lcMs;qMC!?AG=i!o?LZ08!tX^| zJ%0SyWpR+krP5!*a5^n5E&g%A$hODU{{E(N!`m(&zso^kAi8(Sck4Am!Ne2`_Rt_J zee1;c(Q0Fr=*v@)edcdc5kg{OoL_K(9ulFT$yVGV<4|UkH2RhX)*~=1>+4g3-QS+) zRS;XTdR=7r5gUbI?R?TZv)_cJSlf*lv?d`U4P8eOqOwt0p(9Axf-*z?!9NsDc!yJ+^{h+;gxoU6N$J@$&}MWjma!NR;_JA7*%{Ng z#6)rh>OwVDRW>m(YJjs-M`3kKPNNsu(~()WJ{cA?EsK}a)8Xw|cXK+OeKP!hx!)JR z_FgUZkD+(f|1dL_qI5t-V6*wt$6Q*84hW?RalksZhl(llrcaCUPNQhhu7-RVxfBs4-fXvmuRq6~5S zo)E$4+2*0pt{v2EgldgqLp_#)x8y88wHB(?=4|(n0k-JyIShwZhjOX?qOK6JT1Z=& z98lqLxPDQA>JXV_V2C1WWqPxu#Bn2I#d;IL2WAGahN>^%W>C}8F@1i%3kyarGAdr7 zd@uw%1oc5r=|C9$Cz8gv*Nw{xMt}f0TCWYt&>?=cFu7P}IpS8I`Q&F9b2-tSF7MAn zwOLa76Kov2mz(*{ZALCKjLUv}{8{3mXjDFIhw?4l-twR;d znM{X8k3t)mcm`tB;ULB?BZ28*KvuqG6Q7t7k}xV%`rUcf+ziN4x0-NiG%_Z+N1<8l zhZMdv`P*s;sI|XOU;ziADZOsgB`D~}^eQ7_u7R9jo;5cKD{{r`@o38z6L6-5JvG>0 zFHEl3V`p_(x4&?Pm^q>U#nH8U+td?cnk(s@CH%INER5srVUtsg8siwEXAVzF8yfDE z7$y^pp%Y)ihDpaz0@LULfSqno1bh=6;zE-LT!6P!3+44rfCu87_!kLZcU5p15P+pC z8oo5a_)=D;qNIcYcHBUu6%Af;1H5}y3vByF+`eJ(u}4(S80muH5=>{TkIpb4gvuPb zyzBVpzY04A7VVbBUKy19q#b#6_~*|&Fd-F8-yDu-v!#8ksT(~Pe7rdYC&I=MKBhqX zmh%WHUan=#GN{*XC(L%w34iRGO<6m9Ws;DGJA$Zo8g~L#<2C!$q}i+e^(XIR7@8f! z5X~=lsFO+aazJUEbXB|y{mb2r z8U|pgQLKMopL@XQBl-*DJQw#y#@c&z*FCbwI5#NX&I1&|Mo>8j6G$fTs`|2nuaO2Z z8Kz^XkR|r4J*EBfg=bE-zxx)KzwSp|M`>eOi_!_n$__Pi?Ur4>{WU^!FMLppFt`l@ z7B*nopP<2iIPg+n`wCpb{s|I~e%r4)u+=)=l?W_J_y* zlZ#VJ{oRU}QzW0~g7))d#VwqJ1V^EgBEh}!px&(9MeO2>oYCy22XfKo2JM{E@8V$N zViRYPi$rU`YZFyvL`O}4X*v2g3#a_@;s1t8I;B#)fWazhQTz6OrjKxcqc%+iHFYVK z5;f^#RR7f5&tawyhP}J?oip&F&o7x-e-?LE*W_>Tybz+II{+fKGu~JaOu=*k1PpG# z6EvRZE2}!88o~D(4aYe51il-IgWDuDU3Jn!mQEZpIsdZpz-)uOlm)?~SQAMKYjec&kcL0kG%+!uDMQG$P0`<+)z#xHR+nuwcb#3c zPu|Xg&FgFj`4|XcOvuI0I9BIDoA&~ln&+z(NQ?cz6|dk#hB^?_8@!eUS=9AX)5_`o z>M1XQ-%n;DHZ(Cby>}Z68uizRT>aU7`@pQ_xjL2eB>w&TPBJyF>TOY| z&pH*PHI`AzuW>X#p98X&UCXl|XQ!rQMnQ-jyeM7HGPR6jDU1<6@$FyY<4nQRil=Jc zWPmCJPxv_Mu>YZPw&W=)TcXP*qk6{SQH^~(FB;SLbThsqAclwz`83^lM_3ZS&h~lz z>j^~lv6OoZ+9Y_CMK&Z-rY9kRiSbJA$yw1l!9WG71n0L?o0r~+byR^%hp9s97BdAs z2Ivt9IYOpmjaM|#6P%^B>sb?ht)Y$CQiK2>)M9xPwcE%U%N|i^Sv}*I;~E~$!a#a+ z!D*x@y`$~G3X5Zq2+GM}eX%ioYJPy&B)L98A;Fvx6HK8c`@EF8@@w%svJTWRJzUCI z->&$zqMjZFuLvihUCsH-UsAwTWb5R>%`4P$6a!OK@5Xm3vnp|RcuYS7OOV{0ay&ph z2tveC*Voq0|3YN{-z>%uCuGi3NA99mTl`ZK^Yj`)3_ZYHxu;l4dG%c86~^X7x#&Se zM@Dmlj0*t9sH*NN#6)LjBwE3>i2z#RrQ8B9z+jLKn3XS$L03654q~00%IvHWWie!% zPmq_vheCNtNT7lkHHOGjSvNeu+L(l`_a!^EJtUD=e9G|QiFHO$tU&4$9I)QTJH|A4 z87{A?=DN=R9`w5icO+Em&j|=&MH@{j6ejiny+jU6j25pzZu+$p)-rsXWa(lvt2@6d zsBM7^lBx#-Z!(vw0hpMref!l~p0&P3lJi{@h?zI?V)N#!r7S8dDJfVz3QJr15c6N= zW-~6dlR)5mtA;UePj4^T+-;D7$!|lzZ*ZY9{Qpu8<I<_nWf?D z61DVm>4t`e)YnbCP{1>+udi#F1ST*)MA52iw3O6Pz1G_A(37Fg`jftY9c5VB3Z!&N z0oK&dUQN;k$d9;69Zy`?3p>J9Yfeb(t*(0!0?BgkUa#$qy3aX4(vaYkmM1Vt)<5Z>6IDg3w+o$!jxZ4ON-cx zxy4ErrQNr&8Yk!ZRnIQ|?W5tBG%NsH-qh?=xZDRG92RsBUFn&Rz2Fd=hvA&7#9-@c z%BRv3&3n7P{d_@|&TF{mbp3nKEO#KtMAy8h{zD*#(A;)_{YPpCA@7$j@49ac+$lPO z0Un{)y0*jj0lD6|UXR%u8V*a&(!?2y^ypT1?V(ft7UXFbE42CLK8^og@UI`~slwg7 z(-;s9h>qW|+)BIQ+dBV?%e<)?;JI0#cW^ssf@8}%FY>#h02Kq%^zB#6TrXa&5W zqo==@3#eMyyIG|6UCOlH^HnH9e%i?T76yQXjLHcJ#DS%K8*pGd_^YSQDl79t9hP{| zW>qE6mf+HR4~#%G->yRsP=MaU#ls`xc#>R#{LzMY{pSqPefoQrjGUY;61DmIFwZv2 zg9ih4gZj>A5oXE#G7Y`ZmBLH!+Dzb)dj?FJd@oMrc_HcFWegj=*n9nyl`+HeQ&M{# ze`>!FJ(im&8v6XLMSJ5aXS=&Vq(i zF+vL$5A3YEFooBZx$Yq|S3})62jHHOQBht)+}qH#H0*W)r#-p@7Ih!y8y)xk5x<7F zQJ1qYa~;&yi1+9Tw88Bzpm?@?!-XUz`!bu#cuAJkFWwICa?1ZP!4(w~dkQJJRSvhT zn;Dg)Ln~Xp&%05ga6>i$<-P&pu&HTjcWzl1ZMhRl?%wDmls_t)v72shYikRx%oeDa z(^`cs^^kgIVNM0_8M5UZb-KadCoYZ#f}+x&l2=!k@-Zz9cxgrqCspB|BNs)T+Sl6@ zq;Dql>OHo}0qv$^YRX%T^7@$zh>ONDUTqx|Vo8`|ivCD+dT=o!x1r(rH^?LE!sBC? zL=;%3?I>$0VMD;Wn^HxW5K;N2xnmBcD8(3XVQ63=48XB>?>numl%s&ycXV7FI~yDN zlMnMDle!{9yPWZ*#R~)wzs)C0saR4eeu{~l5h?`-M`2u) z->fl2>Q6le&}JMcP%%5kQn*3oo;i9D1wb$>E{1WCL`OwgMf~cj#=en@HKn2PA3n9` z^Q&(x96OT!x@cSh{-Ge@h1U536fYdoj(?Rq2Vb7h%wh^NV3cdw9Im!W{}eSe6fSLs zKxSsXgnWoSt#w5Z9Nh?9a@aA(q#B|`Y=>~)b}+Si9k_3!RI)G~vrysO4e;?XJ=&9A zl99!~SjKAXq)bBT1Y%$d4TF^fpG>Dn@#_YcvYU#E>u?h0!Vui(;|o;b2UXlQw1G0P ze_Y&!WEiG)fU)})Wd5i%b3_PnIK#-KCILMIppUsY3Kj;pgnNF2{kta~S%v)6E9BM^ z=17vK8u3RdfGq&~z13Fdg!jrFrOfadhcFIKa*@J-4AfqYW88UtQcTm_z=e zqF$ld_RXMkh1~K3C>aT6+<&=%cTe6Ca0@6DN(Y-^exhcs{Kd8Wo@aUjPQ;8*4^``e z7!m<>KQ#}BZ{7O|PTipy0tx_V!&TmKeoi7|yo4eYfA#?GUYTc^rywZfrx|X+) z5KhSWGuR4jJ#r8JUTFk1e7kho;{%J7+*^ihR?y~PwQt}E5H$J*}F(G9X z*;Xy+8VHlj394JN`n^Se%~A`4J06Qoxl?z84ro?7NE+zJLg1cY<1aUG82}mb^+FB5 zoytTywiL3Oa$Ke(AfzAysG4zpx&Y%B9h}?ra?)Ca?W?^ASe$Un%0hR{ls)a$gaE{EIrl znzsbRFi%i~9o{#IJYVnJqE3WY&%|hmd;|<%h(tAfst{;bHxFES!$;6UlrP=6@%_U( ztn30r1;B*N6DVhOl!|7%Fd=<|W6C+`&H%x;ZpB_!*U}1-AAp~BQoUmohrfm*r#>!H z{V#Oax#*Uz8(YJkzT*sp{ohC;K$WeNjp;|x2P|x)T4PvbDYW#JFCPIU`%zM%n+UpD zzmi@2QC8G&4Q~iPm=!>p>MdXfI(5$9vsZ-Tfc{A6RBpI?X2W0&xwZz}7B7W??$zq% zil~{8wYQ7%ge!!t)pVT|d$Wcg^?GnW61<1sZR;M#VV$5nxA#vtN?C$%+1`O4JoCL+ zF`wO?v0to=pI{nD-Y(=5t9-ruoR zboGH$yaw<==+<;NO0XTh&86LC?u?139LvyH++zDMOT~MUxeyHi6pmkRbiw!i z*4-o!emxaQ2%)`yd#d9Cyp!%6)DZT>qdOt)3Lq+!% zo&1=d-Y}TjOZ|+PO9NfEVAYu&uGo!QkhE+$E?dje;ikL~cBLSZB~}jPlz6fS%YO?B zx?G&TJl?Yao(@2pKl|xt^ab?B$?L}jW1q*yM@PwY=)YE1r-4-UkkC-9kVU-%Ecj>4 zm#x7rM%!A2**Xy|WKzWk+>j;XHmuOcx{imPL<88C7OrMvQLpZSWw6Ju_buPPQPwT^ z@&L`Dgp@i$U>D+dM_$&bC_tuV4VjtVyg(=y!xV!BTstjfO?DaXSkNPw{$n&#lXZeNko0`f*Z_=B zqJecg@v~>^c6N3@072~)Sawme1m$_>-uhqUfZO=|CK|f|O@5u3KVgSo=i6C~T3*P0 z->N5sEEdHhwA*tys>UqCoBS9Jvc4Y5&0mfVsS_s4qoSNZ{g}*Rk&;S(K06go1<^vQ z$J!$jqol&hr%DAMmGbmtdCL>;)v1vV77KRke)ZSvQ9I>LLvBiq0I!F8kXWY_i&Z9q zFJ$$?fbP(6vgIOn%$nc#2CucF{iURQH%U)w(3phR-$bHEBlkvbQ=F-X+Qn$WA2;he z?hmJRV}!mp<=&`I?sWS;8ZQ05%L+%O+9n#L6xRG~n!0i~mH8Obdd*-#TnRh-Fa987 zU(MaT=b;XSyJ;RtGu8*0zD~b&32_TbTy<;6$mM>eYC$g^{{YI6#V#a?(C{|etIy(c znewhL#i=9w9&4i291FWFGR!t8X%nERnqk~y2h49Uvwr<17ez0|7y+k%Ot8bZa-{|g_c3fcMt_q}1R6fUhd5#DRCl*G z%Qcz>DZMOpw6fY+DN4O`z;XKGJFs0*lsypcFeN8oOfypsv)Q;ZpY{$nIe58e5EA3X z`{9)?%arY&!Ji5lNoTPG0Uhe{gZmH>LZt-bT9Cu}iWx4}-75zFg)jqP{x)3DVc zW^r+ngkjMT&5jTcZyU|#^%Zt78dztUQj@!xmKi7wsEdPVw{-QZH}%PQ2euFz29!YI z2?hizF58cCB7u{*7LZM}VBq>3LJBQ6GZ4mQ*mqJW!LVWL%D%IYF9oSyeS_%$z&Xf4 zNZ#ySQ$a$^_Kpr##`oxDLui%6t%I4Fxo$kkk2gLKY58H)9<}BCMBmP)1lFJK0aMVB z_4)1_*oqo;5u$t(??n?b?IPzC|F~&0pr)9GclKm>VE@w%DWKwHib2*ig2s!A17{G}WMDL>U_V3pvvIitr@2I0s!ev(w!4(3nO zp${r!tD;p6WKmu%m>dUiFUDs_g?dIlpBVs5yeOK9(W}L7_#&^NA?h zVkb)XSd61%R9I{)0BdQ)6EF4y+E>=JEwk2;Eaqznr0fIy00Tbn6wYtfjcv&UE{>(h zo;k3#oY;?wbRn2_vb_yZqX*-j=iv{zBL0BL%I{aCp8HOw`Q#%u#BD0~(JasYgcX(B z-}Vs@8z!%OjwOWJk4>V&Pc3JQ?5p+ccP$t86AX%r&VaQ?Lv}Okr^avUC1+zfS#62c zfz{9@#*s-XKmve3RrI{Q@(9nl-j z+zOnVZH&>mOYNG+7!9VxKWCzJ=HBCghiij`zC$+lqn7vKyIzgmKL}~*U)x|Tq5hw; zz5*)BE^2q^lV^lxY>8_c3`2M@r{nxrI z7W1B$sgrx3{XEav%@_kXvy#t~rOQn`$U}2{Z(s2vH7sg6AYXJ;U!eI11Ry9e$MeWH zQa0JW0kuV12=I@B;RZxrIs+85 z6|Rz#PWEh*y`}UN8?ip>Y~d^BZY4Jpa6c0qfOKZK0f7hw9#2(vgwJHdDco-icedzP z?v|Z9y8U9JHaZXeobUcjHwzX6(~B)y*YeoLJ{?8le|0a82cEh6<-xT<+Gd0dw&{D0;pED-746?ty%JTHJ22=znR>8eS`O<1IRg= zkG8R{E2Sqv^t~74l;9B)J4gs#G~)Iz`1qmCUH#uvZX(qw@H-VuXf!NcuF1&HpHO=u z@20vwWuLUR)a>lL`2W`2)U2#f*9ekljyU2q^yGkyEo&QMVC{>@iw1ifja)$R zs=vFL7aby@V{$f%w&Et@c9!Rdy!uDU+reC@R!VLSml)oQst(D{s2;c82x9Lchg{!g zWv`*B!oRw5Zd_8E4CgIo%Q)WJls4LOW77WfSj^*uF_e8~VbuBM%C(qxc062uLbdWk zT4KXn($SFzMd%75`fwZRjJk$`#GUG2dypk_epR>j&az-&nbs<;pHuc>aD=P>&v<2Q zwUA_nA4qd|*m{Eqq(M6ww!r(yf6EHU-?w*nFAKe|zMNg3r<(%>+eP|g>tO&t9Hi_4 zJ^;Yh@*S78(|GSv0e3nx<793wr3lv;s4es1DTwhJj%6a?!^YnqXBwv$#UA|+C#hi9K#(lHaKY1q@++9a>t(ZOUYQk4ti3ivU28yi1Qv47-p70!F(ak`>wn zeS9^G64S)Kra?0$N0}x1VlC+ zJdnxKGNb@T0>)I5OtxE{Qc@6H$L|IZuc|C&*dU#jcUO=6R!9a^U-v~P^)Cf%`G_NL z41j_CE;|rvYeZSW7S7fvozbrKd~vwk&1_Zz6jPR2_USOq;hOI-#68?9aA+7r8d7ms zEi~TlA{o8W=GsFBoKbT6mLOtG6pcA(n7BgIKG)z%331d4u~ygEy?F9B1l!SP13FWP zpUuM?Zlin7&+9a|(L}Hx1@! zYW50c*S|fVG^`rCjOVTn!{4YH&?gDD`!f+zlK%wF4QFrs+QcTvlXft7>Mz!coy+`l ze&oI|`5>Aht#R-*9gM=#YUSC8##Z9O?L;eUPY zZWn>V8UyGy_p4|U5Xirk4q5@q{e<}cLG2zN2#!%12-K6DP`GS0)|2h)94O68XFh?T zxVzhx9a*$o%4oZ#!mYq=rTRR5{LqAF1yaYtg|qrO*P!9o;@#2=7?+qvXi^@v6}cjI z3TzYp>Mt&&UPp&)Z@-7%e?iwzjtc^zC0CS@e8)Q=`TGE4=c?Yk7QxulbAihsFd_nj zYWaD<`LpN+-r>M|h(7^FK@3LE_`viu(Yb#QjlkTjaLad{LxirE`Z@Z!vZFL%Bu@!k z{?v;tiV$mSESZ zg!WkRWA@wfzGe_n_FdkS$fXSdlw=?f04dOA;dbwFM=Tmt6m_ny>cDHz1kzPMKVT@B zKf}9?cU+NPd}=j52+=`&H?@A>oJQhc8VmLnuS!F#QSOE-m$`u^5RZVM`$PoAkkog+ znhAmzyh02}1Mq#`C#;njU$)QN6qxPuk>s*M3cbyVSm5dK{hB zMyIP)$Bv0PUq5hPVP)UCvV+}8OicVALxxV`d_o!m=7EVIS}SNEs+Ug4jg?eAYp(3F zvzBbbMB*_$>O_69W@p}(CKQ5Q7Pa&Y9W;$I%c$`~$dJE#d)=FxOr%5zu6f&_S+lX= zz&a;@z!iX5K;qHOFE$DUJFM6k#6eMpVXf*?LN zwk-l-SO>^7_xH1~**2;3u*$VEH^@)>f3dQPfORxhKfFvTg!EBV0Kfrpjy7}I^_rPr zON^pp+pQ2}6)=b%$uvN!#LU8CERc?$NyP&X`6=_3;Ep>!LdZMzyM*`{Y&}X&UJ6wr zu$=|C^4#8>gJp|=fYs(V;d3HZoj7-hg?XCXV~5#Qph~F@BuQVse5p`=_)+sCR>?d( zGE&}g2$P7I_~ou)Y{wE83;>k*`OMB#-azn$Z;C{SjupMhk6&{E7Q<&IL@2T&;9ZQl z$q;iTATqMDYY}23BlTU=Ql>Q~ITkS}=~ORM>iyH75dHTb8QD=WyIm|0u&Ao;dvGsj zd^mnRm0E8HI)FU41C^6j_n6_h zPx!y*H<1Cb{8M6REe2$uaB8;-bUS3M{9O*%@Z(WaM}ue%7zIT$pA?*@ApVPSUzaNX zHzau+VQ=2Yh6(|y-o5>f&`B#P=K(162P_2h5(bj~{$JUc^Y3gwiFW_LYC_kyP^jON zR8wXff=tAquFhS0q7U_S8*L_gYIr0hq395#k4S^Se*=gE3;E2y>ZX^ESkU}aUc|r= z8|M4^#iuC<+z0}k1?=!w3lIjXODv2;C0Uo3akfOepJS<&*INR5AZF2K5m~sD5RvVF zMV}SW=1*3ly#Rl4h@kBEWPK^J*J1tI^q5NF`Io5WFa4+j`0}PbtcCwH^jnphW{*rX zc%PeLbv6X*+uq!`*`q@4?^^|1=TB#1rmA-g(!V!&SMAth!~N2^FXnOD+H4wz(-RcW z(Ci(C3)=z)44*k(Lz-5xs`jxXG+N=XyPUVxaKbRAXmm8cR$*S9KCNSxBtRxzb6<8e z6Fo&&s@J6w_9iCIWetB$7@b#=(KjuPR*$y(1>d-m88yn9Pl17(-fO*b(-}S) z7?`}SIV6)kw5}F7zJP~Bsv4j0ag)zGTB>GK5N{=-N0Qnxmz9!iE|~27XMWSamIi0) zjHq>Jx9SIe;mR1GwzRPLt_-aGj&-^NHtpF@I!s7aKMvEA%b_*N#&xOB!BO-pIO!&M`(6s;C zw%Dgr#IniZ?^6>Z#4F4i zL5~nJXV%<*Gfzt$yV&LpG(iB`Z#6vw^&Swg(yN^&MU_$^v;hW;I zJjLbkFQ>meDz`XAKT7`ce`WQc-=!+-q~ee(^(^0hr0)yVa}p-?d|GSZTUJ)*Pu!c% z!xX082LIaNx%3&HW-Ffi1x-#62hm|Fsp9$sfz1ZOUihhBC_gkP3zbE&1JIrGjze6p47g|stXXS!K)U0M` zbCTb|#HRZO$HsAhpWRNNstaab^XzbqUD z3Kf4&!bLZ!mxmJ)^LP{#U;Za7kI}$#5`qMeLGU+E?~wmd=9}bo`MV}5uV#;gUm&B~ zVa4O{?9s?sL3!N|5*tZ>vIYn?v>ivXRD(E$M40agb)y{D1`M$IXl`x=iB^2+Z5}}v zCb_WHNLq6SdU^ys@f7_%O&u33hO6Y~o|lb!Y)V>TxRA%p-~RJ1Ic7B&5{#IN(JU5H z_kE|8`mIU3dwXEJY}me3xjNj4;6F8@^&>7b^bZuu;y#f*j0#O{WWu}Ag#ih8zl}im z%v$TIZ~8eJ1a!a}+Th%r`!ykz7|@*sKWu3$VDX$^p$;c;nmTbA1Y>uSa*Z^|*!z`} zMzi{J(&K`B)p##R>kdT5_;Qq~ILBupD3Z`sc?V9UsyTt!(Z3jjo-4q&EreVTj=b(l zqV?#0+~{p;W73AU?OI^1wo%5p1nY!Tg{n?vtckVm@6bBvLlJre6SK0ZDd zd8O{0h}lJv_bTfs{K2u^q89(f3(9TmcH|XiAh9c@{5~i)Gi|dvdwPqhcB@wwj~8bu z&IyEElpr`EFqJUu$mxIPrYy6J6XVYmKxgGcPg>5k*+NZ<1*QPzL%glPE}B0W2Z$uz znKrAVFp@>on(+#2IgV49rQZV@%Xyym~~`|7b21kGl%s#?*~=wt^=(5SJQsC zpE)ZFF}8`f9rk&LkYj7M$gN&Vbe7*FY!}c2^saf%MbQBty~Diwmu*M?PBMFq?3Npf z<8A)kIInR?$&P3!n!L=;SLLV>rqGA#Z*~rTNOa_kne5lT=@%^ejhlY-|G>0(UAT39 z-+U>h8=eCl21^&vLbJ;t^31}mje|n;Q@&1dutB(@NH>I&gvF+-{lnTH_2Q#=aH?^qyP8$Ysr|ihg%d z#8Qs#r6IAmT)`k6o!$Hs3`oTg4dEKQ8$Iita=$xrwk2iqpxVq&A5@(Xi_T~JXj zlB3B1Wc@o4(nlW>T+8fW5LMKA2D^d4e)iSRIdA|9hR}{TD9J}NqFqM&e}|2sC&2Qt zS_)90%yS;E+}(vf>CTx;2K+^IlPX2|ExG$bu`@@1T|4Qi1E!L_qy_AB>fN6~Ap&@k z+KS$^(gl0o2HEVcF_|mPhLaB$Nkvr61675!GSFX07WO&s^vQuEQ3lR~0{;5a&`{-^ zVmgzxlZ^I^B78(axv+H1+f#d^$2>uhCu?GBNXu{qfyY3%Y#SHx|2}uXc}hUXEj@m= z;6OxjlJw!F5tK^WrkCjo24Wp8u8H4|w=|j75wW#CqfgT{m2y_#Ehd3TNKe~2O|Y85 z=2ux&1Ai_|_hrQPIhP2E+1(sX4}+Bw&5zt=Q_^K8Q0q|%QtY07|FgIn^mnTp&Zrk| z{n5Gb3x7TolnDgqhR#Y^t>gO8sZeYNdLCiq&%I2*Y&dZ7_RL)uqB)v7p@KUfEYZ<^ zkwBBR8&opA;u)x_lO^PVeYsjs9x_?2Pka<%8P5%xBd+%taaRq5MGvx%;6Ei^tlxG+ z(Fs!oL=OTy1Fh#Z9P&0F_8;N*il)hP5C~MMHuZVq7;ZPB5Y*S$UrLy9>4D1!h1we?47n0nK)j@oV20;;A6iM^G(8!bh%?b zd~{aujljAdX`L3rBW$i1Ul8~@G7ON^L88{oG5h5fVgLwy))oB?#BU=1pZKj8<9~_Y z@TXU(fhG<3JH>nddO3~U=+dwjo|yjCt0WagkGI9Ir|jQ`y(vYps$T`z;USI@-k&+d zrGgo7rcZj#FQlGy04z@1C6A2VlQ^PY1B>G4wL?QVli7E2#LF-UvJNfys z$I4IfP&p5N*0T*3O$Z2)tlPuM{Gi5UG(lGeB^hc?NX|zi-sAVosm|j!nJYIBVF!Qw zFz?;rd0Z!QLttwosFc-zN9%(D-*3AKp(z{Zt#)&xk@H^vc|GaO`q$a_{DTxIxV!Bb zmyQ2Ey1PF4q6W9;5)ECxQ_J}@@ciDPjLqz)akNn2w~V-6hNB3w*$*on`gCDj#FM;F z1?O)AqVjJvj>cQYkxpq>zx7Mwjtu7d`Klv ze`?|DE4^DZd&N0DyOb=?RY7T+2u#bCdEVbU;yxHwqO@s$ny8KyknKK~x$J!V2GXxv z;^X5#q8jzq(A5i1$KBsgd$v~<3`HKkHMB6I2R1FH9;>*xZ!2>+xuUv9^5y{=4IZ-O z(i4?I1hh-kXl^btk|%`V0AXYvUixyR?biZTJc5+RCXz}N-F${7ax&eNo}S#43^EF_ zbn6Vv?K>R1D;~Gt`EE$`qX^^f`5%0oj2LYMR{KQH_%j@{XJ1fL)6z=hcFBzd#kDuw z@}sHX^}c(WkDhYGyS9Q5{KWme<^4e?qD%_f=jhLLx-> ztXIXW)D)j5Dn;3_QZX8JSNUC7a#z1G^_*YPl;QtA;zNQ^aHUjReMP$o2?_mM3F{Fx zSCb9tbV2xjA%Z(=A@M0(ToSK$S;`8h=}coqV#wN?>rmv$>a2Lwef1v>gJ*Q?J`pun zM$xf}up+0LdP#1XYi8J(;G8L=)x+4%J;^ef_O{-nZ{kz(oYumHM6(E<>dV^aGpK=d z=nS8w*t(tUM>|(7_a|H034=1TO&l!JT4)(0+OqgO=S$ZAy>S3D8Xep26ls)o)h#rWv{96F?qWa*0zX86Er4R}V@36x%j&I?ATeYq!c8 zCOQURpJ^qMmYP=aKh?Z)w2bO92^GG4ztzV9UdU;oa(xE6TIIc5wEvFXa__d?GXJI) z?_2Qzv)RJSZ0djaL`dpG!f8TOL-aZA?G!;Yq~zyA!Dho?p4q^W|VA-?d^x z)n2Q7Z72bTl^^XDMN94WW;>Sij!W@!L{U6jh7SWwIS(bU2g`@G5bfE-+!`?QY!9Ay z5ty3DErN;T$U-=cz$Nx3lnav3anFq7aeLf%=vH<9iu`y%Z_l~r)b-}is)g)%R3zGj zSGA6yblzyS)U=D><&i{Sko;HnIO*=8SyX!VD^}S$YWd3&;%=nb_u&EqdvEbUtMWH3 zhes>*f@kD(9mr|8F=X8gXNTYpYdBoq8GJZA`u&1BJ=;2w9cOOlsk|2(8}e#_hQP$l zatnrkr){y25$UOO`DxZCtvGep$9X>)l|V64A6onJM`aB(JEh;Le68p0gfY1+hwG5x zOve;-x&{n9{omsxd}j7qLAu8q2cL}oRG@-UMh?#|G`)fA7Jj(7(@Z3-U06`+AK%&v zce1s8TFS;{0dw8sK^)5cw3Z0qPsoJsLx^_>j?!!(M zF|mv<6E-+>zu&Q}r$O^2e4}M)ImVn?O+#ub_PmGf`@=x6wMe>Ie@A@8k~gTVicbG+ zz++{h*-cyiJ-lDEot^n=%a)5v?f3(~WF3xmb zJLQAQZC6&hFdZ5mPyg2LxmNA}ouGXY+Kaw3JdkERJ2Owt6`F^h0xEPLHIHGv5`i!k zkE=>~s+^jV67K9{Y=mTRe!23>K$4zD;oM|nae-n0EAu}2=AW20<488CSQ+8${E^qp zjslJ%XKagpS_@&=UkSKbK+96$X%PpJ8J9Y3<3*XqMS2UNy`Bi(AIH)@7vv$_j-oMy z9a55R7Zu)o%9Q;SCT*=Rm{7YmBRS=VOZrQEurQnQ9lq8MVfQT+UQ3p^tf!0m3rF=p z3At{nL8M%Pp@Yjb3eu5p<)gmuJhnrgU_w4L&!R!x!KIQB*ZQl0m-sU2;YIt0#yjG3 zTC9)X*NpkI@lhAWT98ko)c4w$mc!XPI_0_u2iIqFZ9lZ1ak6R%?>F}Fu3!#(v)5>q zQYnG4j0imh^X_*XulZS$N!NVNMB0Dzm^X`m4fKBXPLi5wh1jCDw%law z`Puxq8_(qdtLsgvbW8qsFcvttGbwFwgt%=-cAna6Wfx{3twa_!BWZMq5(8OI@r@`q z+@|f0gsbznvVGmjF?475I^yqtOI$xOf)*9L4;g~tOaOtbc%e>P*N!+(!!x<8(@}_R zb6ZZNw$ybLqWOkynl+n2lOO-pc2Xz;CI^&LD~ZRH40D00SaRiOUXYRL=a9FMA{DS_ zC3y=L4b$503O5mQHD_fU3}|a+S+$NaSVBBN1s@m4Z#=^;5vZWwCf840a&9*ro-l<4 zy9~!wad7H8mm6^?D-X1oE5=e0xU2mof#U1GJ$$sLd>gMNAHVRlPYxyMqGQi7BTqwi z$m*9J#EQ@Q(|tmRW^V5mQQDVRYGo^n^bkC~G9lj1G2{HrpGO9SuPKbg zaT?D&Faqfc*ysiX&|y+#Dqv-z+q534WA^J-ulRq1t_+ zyNA?1&3|-VSGe%PhW(Wo<7DN6Si${=(u|*r2ywGU@1cXfB-$=z-|b zv6o2On{qZ<}mr;&&u+ll|Mg6$zH#P@{nIn6}x_i8W>Eo8^2oa{6=Rivk?U}rybRWlM^RK<(I zh3EhC^MvW&OCog|O-ZP(rE*nU)s^fNT-E0`!b3gvMa}~G{0z>EVlFHcl`yk9cHOUa zjTt|-8KL?sDoZ#wi8qGPp$C#l(2E#B+$YYS|6UL9OQ7v8>z)4#-(~smW^5HU053{E zQw7ryQkAzLp1;Fg8TAKvgxAjJX_1e&MM@4N7kwOke(nUwrlZ?eYS`W)Ksp*z=CuxJ zmhHWTyfZwU3G8q|i{m5ajLm0?+#1%yox6@Y=Nb#=`Zi|TorTA|PO~PwvAR27YWo^Q z(o8V!p4mczcJBtu1;p(K>w2IxC8cWTN_$GffoAw4x?ba65&>MEs2b%iWh$hM0{;&_w%y6i`q?=pwy0X(C;u{8B`!APEYJNEHoDARxViAXRDr zDIy^Hg(e+?1|*@E5dP(y-8X0U&D*zc?%X?PW6ex-&qMeiAQ0%hzMhr^V4Y8I7A9a^ zOb<~2OhlNaZJ^eJfcuZV9tC>&`GP>9SwVwskSG}#)2QO!6}3Q~>6Y0-EwQL}%?hIU zJp1y?!@~;#S^Vr-(2a(GGu|7k68cN+&&DiK8KNeNk<_phR%nOtN#3LfI6wVZm)l&r z-$?cf@A(YH11nhk7cQdQzxOlk&~;~*a9xQLKXLL)3eg+{x?rcTb=xvDYu(<#8$ra; zn~)5X?6v$u@3R+8D^CZen;W%Bcz)>~0d5I@)#9uO!x}I@-tlYV@EUa^wta1Be zf0X>)NyuMjFw?94(oI(_OVQTLcW>tMf184MWyIF38ZG$h$@(IB6CX@;{bF7*x~3}{ z8$gOlC9_}B`}XL!a==I%i8LGV=YITx?9~`-Nj(U=5n2%mS(5m`BMxQ#6&w^4bdbg2 z@o;lG<(aJeLD0eGgTAGh4UN62GMZDw4o>vO1SYf^vEVX~mRGwU&lRUF43|2H)Dr1x zX=yPU0hU+7Q%ywQ=+&r(@22NW*Lft7X$Y4ui2@qLyTRQx{2E@m!i zWShCMaK~xuzQmWX_OCp?Ol!9P7QpG|4!KkM?g2dd1(G}NupDYa*0G z@VkTTS0thdF7=I#`L(qion;5ZZZ|aYN|I_fjkr;2pn`F)&pZF!J8UL8VFhT4XufA8 z3Bl*ors?d?ezcri^w^lW@a#v}MaTfzXMLykL8H^t_gt^7Ik)xAv6yTkT-H2)aOdae zYwSrXvn6PWG(Fk+&38M#O&A)>!s?2fWAoj7KR}2=8(P=oF_i3a!2LqNm+&KLPm8zS z==HpD^z7@%f%d}`208@UpYgS|x6l57rA8U+f;duqmd=(`R!WmYf}KBKXRnJ1&cupl zWOcrDS=}KM{f`fWhS1sB*<3B(u3*Nfy1tmMh*X%$;kO|LgedjDQ=h%Wj`Wl){NcD!?T*prA6PNhmaE^`)T#%XF ztKY<12ijr(&{Y)#>y$Yo?!^`EKhksMQk+^l>g1n{9II#(B1sI&s&l73vnYeEGcFfl zH&K3=i$DW%$cI3@z_)sH){pgAi@&WMdp?v+PBu$;A{fU|FHE=sa#I+_H}$9*(?^vWWMOfa3#}r^QkG`uY2Amu44km1*ItTUB%+5G5XbyiSyF2GPSqrIzcCMmE zuZO#0Lh0K$xIDW0BVg{)QjJFk2M05M$<%}XS&0?&aEU?hgi?$lu|2SNO^xQsP@6~O zR{q_ezX6k_is7h)3s5s|df3YF2Da^?iRuEYX+NJ~?)p?c%WS_vi2pM4@8HMu0Gv|- z`)$w=$<7i(;N|1HI>|%P{3I7pF5mH>(KNfMz~JbA0qG;e1uW-DLdP$MK7`)|!;!#a zhQQCjyaTd^3B6zKo&t?XJ#z!t`V#Xpic~?lXRVHexmup{Yv3lQLdzZo>rZbypi;l^ z$VO0;GJy|8y?wVUbkHo$On=p`$y~Ubs991qxniIv#_T3mcXw^dF{V7D;N4euS$s8t z>U3*by=cVk^=jRCQOrMtn(EgNW2`z~m<}JH__CcB#tHFh<5rw*QsBJDkI*uq1)2i* z%y)^*np4fCmYOPDA*;FDf3cq{z?~Y;P%3lw1RV*kQtvxrHyHK>O)sRMthtTg z-`g05!RE%j7KzqR117^df&y_m65Eu3%V}<~M4f!jc+&L{F^Fj&e4+1yf})bz zSLIu(q9`?ogkvA(`mOPs-{}oM-Mp#SwU5yT_G1DC4qr)RgZ)EKQWBI%Y1YvYE8Fvqt zfLr9R0!m?W_65U3vqi{qWc;@_C@>1~b%6I}?d`98oBUlA{ctg*YzzP102LS_wAHq? zd&Ni1DJEoAtuP4i-*gD$&3&J{>w}-JEAL=18z3j;4aSl;dyN94B^*pifhC-2ma#f9 zP#YP4ecY+PO_96pL1YB5nhxG|cJjG!3d5(h-BO$O(TO%1zv#{49Vq76`Su|D#}g(-a{G3SC)#2pv|lxDK$H zASvPW7Bs(tm-k${^EQQ3{1u;K#_%G#17jnK*AiG&(X(GDG?Glr|E4&-hV zn3nm-%23+m_O{$Prl^Y6*6A^o+-9b*XhQJ`EZeNUOIMYKGTGWvWY+ei`IpmDvni*F z-;k7Y9bhBKTC(rMSV{if8rjsMoQ96|NF9I0ov%Ap{wYGXC}X#+5#z$s%Kf#LxpS%h z(oK2!-}x<1ukwWCQxlTU-1y!8!yxOL;!5*%ly3L8;r+LhYkcD$0M)2l(N@)&D0@AB zAKUIeD~Myk&+}r9?%H%QCK-6e*N4{L$5K4B)qFaU$Y@xy zo>=|?QR3}thVL&Je??Ec|khk|aWmNAHDT50$R2Yl!(RfsT z^?8bPX7tilV^`0u)(=glWF>IArTE5{MM27kz8(z@y&byrum*+WNUZd}t zo&y@|zl6Q^_X|JHTc96&m&BOs(Q%LagJ>jomo|BEUCH(DL9pRP$qVHSXe-SmHQ=S6 zO8Iiq1#c=MMOscg$;sKW}lbD;inqTNcJkS zvcrnk1ObtHdstwq*2`tq61tzlG7;)62lqTz9|k<{oC_S_xN zpiW!G>s+bywEN|Updl-cHE=-}r$oJhjVNumgMQ~o8dLGwnSFk}qfsgPgqgkE2K#Uh S;R*cig7mdbw5l|mpZ_1K!+&Z3 literal 0 HcmV?d00001 diff --git a/icons/obj/art/cardboard_cutout.dmi b/icons/obj/art/cardboard_cutout.dmi index 284e77fc1ba0bb935a0a5ff0c848dfae653bb322..93df896126d523c9a427a007a6ce3a5cc84b2258 100644 GIT binary patch literal 365 zcmV-z0h0cSP)JaJOyHWL2@7|4SYWeQnB`9WY-MzCCMPTCYos#$kfLbykEU3WF-8)yJ2%xKA2;99> z1Vw;xE7VrFz?MpwS#OaAknE*`0PB`Y2NVJ6E!C(YCK?hNfZzcD+ZZuz>8)uk00000 LNkvXXu0mjfwbqrR literal 17654 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 diff --git a/icons/obj/chess.dmi b/icons/obj/chess.dmi index 407df324b4d9b8bb7edd6de64b97ad670274f2be..2afe1266ee71dd1c548c549309f69488c8702a89 100644 GIT binary patch delta 1274 zcmVCks(-r!+KO$bVOxyV{&P5bZKvH004NLm6N{? zf-n$==k_TY*p2^I7Xu*-@(QHDNiUTa+bXXwS{EJk*zTI|?$>@vQ*q3TvJ%;;jot+#Y)?cWzRufTw zZJvQdxIwS%NZpL4C!*II!2h>37ujl>hKQ0hM3kr@!bA=4%@hq0rD=%DS_Q2JR}XUO z#DWVg3HhA(6_Sd)%3dGg0UqY-OB3;{cmMzc_(?=TRCt{2o6(x8Fbsr=h)@x&`2O#D z61wi*?9A}Vdhnw8_O2!Ko2IpiY|~VKt5&VrpPTKie_#YA@XW}J7+d~`6SKB$iHjq} zYpmpua)es_QFd)IG&V;O*m z$^oBnhWZPE8_M#ce-27t1o$Bm*B_3j15U9e2~dd4^;0l<2+lA`j${jc0l*X!0FeS_ zMZZHUK>e3f#6QK00C7V3j6?#!{Vx)U=Kuw0iayCR?!Qr4DkGru*X)7~08f2(QmUgk zrFj0;B$NQce~d5B3jyHbM;{S?2>+2GLmZXx`HcX|e-q#2Mc`ck-2aLRL(i7j2@=Zz z=|2uCA+R+EsQ=Gj0s-(t0KU#vEWx+!GhVG)wU4mfH>o9hW&02MH=Pk=D|8I~j?3IRX~9#DTFaGR!y^tg`E zBO2QzNs#~`D=Y!5v|!jq9QZjgO*!NKf&wVjCq3&p zfJnZWK5_0Qq9Fd|nhb^7*|Z@P2^33lshS1!7$G55zXq@0N>kSv#tq_xA?S@BgcD k)jv?%Kc4kguxRd34FCWD07*qoM6N<$f<{JHDgXcg delta 1160 zcmV;31b6$@3giip7Ybkq0{{R3;-rduks(-ru6k5hbVOxyV{&P5bZKvH004NLjgmbM z!Y~X*=j0SoyCeQq7SsxLpjSXCHH}r8lq8Vr6EG74c=KmH+47T1wXY9NtEyuoAK(Kz zt9EL;SW1zwk0yuBS_%U=m`EW+9U+%RG8o}B>tqWldh{VTS5jQOo`C8v)H^pa(b2wt z7Bb-ugK;x=GTMQO-tGYZZ|ko5Jn}RU%F;k6Qv<fn582}PO)CfQV17IPJecyGEzyN|qNDcW9hZtM^0{|uVrNLO}ov zh8Ux+2oZ$90O%e_3|RjOVD`8B(=e!hYuf-syd2O4C#YWt)KHdJ{gYAZCcqzm5xIWo zjt87#B?(Z7MD?RFY6wm+Njh?b9sn@K8~{rJk*eRL9iaZ}Euz2TLjb#>bVVcq;Qot5 zCZU@3jm(_?56at;u!7yPm|CEaQxfz^1dSgT)g!Wf#csY zB-m96-(Lve`ETq?UIl&y!2QpESP%xb#Yzxa4!Hj9qH+Y5<^c7-{Vi|+-UQ%tHe(B3 zw$Ah2cH30hsiU>3lUw1!Ut{B|10+YJ&JK-LJU;j*1Jr#?Ws-_#g?KrRRrfHjZK zkV#U;`cD8e{2NM=5d{OF1b3)k2-K!&A~UYeW<;bn3$}vnLB5@@FvV&T;1Cu6j)DzH zNQxK$*IjA%#K7-~X-Wyt7d(L4ebT#*1E@seIq-9UG~UQ9vw475XTb;=f!;*p zZAlV(08WHdKacnrn0_jM0BFIh^>VsXG{7+TqY?bQ3yT5V=X%FgfsFz*k}nwt$QJam zx9>4*UcKijGlA73uzi4iKCs(vyM4pHa>$o>kc8{4**QA-}sH);Q;D(qcan-+D^PrmmhYX44 zU`aCa+yG#PtA4T>f`;IZ^fN4ZACGNDM0&GqD=z_9N*nBeibC z0dV?%sUsM65Hr7Xryg}H8M3hczjmMWuHyi%zIzIm0X+3t@3b<&jQ+nkU?U1l@YaX@ zHShm@03IP1V1EDabf?Y$g8G|yd0000iY3Mbyq9{#F*$s_H=RV2ImT zO&ci=RB(DCBC(-nd(Zj?TQ1e5ZrV;&*H%8!Gr3uv)oHtvVj&$&EXRL?6b5N9Ar%e~ zFven`H+Wr0p~-U`?4{^EOqlYIdDNNmh1R+y6W=V{$4oncCx#3*Ja|sr22;&>2-;`m~@l>P5k zD~S-?uh$Y`@vzxQ1n~EL0Ra9{BmlsFyA=S=pC>r~bs+omC7^$-R4n zh#x(VtH1&RaF+lJaOVL2-2hzNfNTxkbolcUkE57|Al~}@;d^q0Ej+}Lfd61`Y>ABE<y65qF%1fB=8Unrq}GAONxvj#D>9?6Bvih#y~~`0-h@X3d)Q|466lwEkJ1iv(@V zH~qDi05-rk2e#BJDYy^-Q5U~$6voBy)SK|kpRW3v3h@Hrbr*~eNdSm4hQOqs)hh{ z#Sx0P{orQ$sde0R#j7EC2}BAL0}KCex0wC%zs*uo_+F<^g_Ynwyu=|KU zPHU6p70`d-H#f~K{)n(*1}kG+0CQXZan%*>b5q}%e_T~v)y+ilXU+O|)Pkn9Kb=m~ z5v+X>1d|ckQxHX9A4~*5e;@#08bXWy)0NPE0Z!c{fKzk{K?aQ6FR%c& z#6t;^zkI*&X8_UP7cLlt4|1-@P!a(A$g&DH>V^77jjq>}x=LlWb zwNCJ#=>N#AGy1cH?)>p74uJE|fBu&NP{P@XuV4(&<7d~NsQ_om%98;+L8+fs%trdn zv^&$UtKr)=eZSy&{Q&4`z!!lm!0yirfcZYJkibsSr|p>oi1!QljH`h3hk5A+5IsYV zAlyPPjH$!z1MVYB?27n%f0&uiUCKS7)L?(xaoUafd*k;DGGOR}2{pCfFDZ*Bkpc$|&UO$x#=5C!0Ma*EKd75}zwq@{FW?=YHa6PmU# z6AgNLg8_Ha?A{x`#bZi!shhS_)wPvRB(}?}&g!(?NfE5}CYIwt3WI-kFg_Lb;4#J` z*f)?aq|lZ)9`;i71QVwGV}v?WzRihf;G5>J5V#@iv0009jNklu#ek5QT{$X_|&mZZ4%s8)zsB&HF#! zj>n{3DKq0;DoeW(r%HcR$>DrwY>$87Aec34)~yywiQ{1uiQ~)FO7_27uO&iwzu8EH z<->L>5x{@35CGsG#{vNScRK-K{dt1*--NP1Ujq6kN+ps%ECN>o`okiKfaEa6!GIL6hA&|)~s2x{vTy|?$^I4OOcRi{X_pOlK>{b z4+!Z0BoOciETDRRey*JU^;2HU{v4rt+3)u+62UxQLwv3R8$fG1Ky^60zP=s~JRvJa zfGYr1!QP}FKl_OQdHn5L((}?Las;T}w9y+gMcEOb2i1T1@pzpemd#X z>754TMRqJp3pmz98L)ZUqRE=9t#eH_TLlCS{wx3p#vkGn{<_F?R~B8Cb+xX^UZ{fV zLw~?GT_6%rRDJ`I{1Ja)#0)lC+W>l6ez)2N_qlGT=69=Uo3`^5f7YyjM?J`|{rPxq(0PrVYtGYGdDPhzLGi357fl7ZS5Qbsst>8b=|8d$n50}p`aR8iu z;q||RFkGzo3Vs9_aF&b$88DUbo9S>N-IW^OZPWJ)PQW*TEWqr~D}Z@F|EGWp2N3TU z+rQ9!+8ttbYr-REsaNjS;fUyfa%D4Zl cSrZoZ3wlXZMTX1^5&!@I07*qoM6N<$f