From 3151d846cd0c73ff2dfca0d80a887647b28b46d9 Mon Sep 17 00:00:00 2001 From: Casey Date: Sat, 10 Sep 2022 17:05:13 -0400 Subject: [PATCH 1/5] Merge pull request #13688 from Cameron653/TONGUE_VORE Long Predatorial Reach --- .../station/station_special_abilities_vr.dm | 199 +++++++++++++++++- .../species/station/traits_vr/neutral.dm | 10 + code/modules/mob/living/living_defense.dm | 20 ++ .../living/simple_mob/subtypes/vore/frog.dm | 20 ++ .../living/simple_mob/subtypes/vore/vore.dm | 1 + code/modules/vore/eating/living_vr.dm | 3 + code/modules/vore/eating/vore_vr.dm | 5 + code/modules/vore/eating/vorepanel_vr.dm | 1 + code/modules/vore/mouseray.dm | 1 + icons/obj/projectiles_vr.dmi | Bin 39515 -> 39837 bytes 10 files changed, 259 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index c4c55fa63e..dfc7109e27 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -1154,7 +1154,6 @@ to_chat(src, "You successfully drag \the [target] into the water, slipping them into your [vore_selected].") target.forceMove(src.vore_selected) - /mob/living/carbon/human/proc/toggle_pain_module() set name = "Toggle pain simulation." set desc = "Turn on your pain simulation for that organic experience! Or turn it off for repairs, or if it's too much." @@ -1166,3 +1165,201 @@ to_chat(src, " You turn on your pain simulators ") synth_cosmetic_pain = !synth_cosmetic_pain + +//This is the 'long vore' ability. Also known as "Grab Prey with appendage" or "Long Predatorial Reach". Or simply "Tongue Vore" +//It involves projectiles (which means it can be VV'd onto a gun for shenanigans) +//It can also be recolored via the proc, which persists between rounds. + +/mob/living/proc/long_vore() // Allows the user to tongue grab a creature in range. Made a /living proc so frogs can frog you. + set name = "Grab Prey With Appendage" + set category = "Abilities" + set desc = "Grab a target with any of your appendages!" + + if(stat || paralysis || weakened || stunned || world.time < last_special) //No tongue flicking while stunned. + to_chat(src, "You can't do that in your current state.") + return + + last_special = world.time + 10 //Anti-spam. + + if (!istype(src, /mob/living)) + to_chat(src, "It doesn't work that way.") + return + + var/choice = tgui_alert(src, "Do you wish to change the color of your appendage or use it?", "Selection List", list("Use it", "Color")) + + if(choice == "Color") //Easy way to set color so we don't bloat up the menu with even more buttons. + var/new_color = input(usr, "Choose a color to set your appendage to!", "", appendage_color) as color|null + if(new_color) + appendage_color = new_color + else + var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. + + for(var/mob/living/L in range(5, src)) + if(!istype(L, /mob/living)) //Don't eat anything that isn't mob/living. Failsafe. + continue + if(L == src) //no eating yourself. 1984. + continue + if(L.devourable && L.throw_vore && (L.can_be_drop_pred || L.can_be_drop_prey)) + targets += L + + if(!(targets.len)) + to_chat(src, "No eligible targets found.") + return + + var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets) + + if(!target) + return + + if(!istype(target, /mob/living)) //Safety. + to_chat(src, "You need to select a living target!") + return + + if (get_dist(src,target) >= 6) + to_chat(src, "You need to be closer to do that.") + return + + visible_message("\The [src] attempts to snatch up [target]!", \ + "You attempt to snatch up [target]!" ) + playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25) + + //Code to shoot the beam here. + var/obj/item/projectile/beam/appendage/appendage_attack = new /obj/item/projectile/beam/appendage(get_turf(loc)) + appendage_attack.launch_projectile(target, BP_TORSO, src) //Send it. + last_special = world.time + 100 //Cooldown for successful strike. + + + + +/obj/item/projectile/beam/appendage //The tongue projecitle. + name = "appendage" + icon_state = "laser" + nodamage = 1 + damage = 0 + eyeblur = 0 + check_armour = "bullet" //Not really needed, but whatever. + can_miss = FALSE //Let's not miss our tongue! + hitsound = 'sound/vore/sunesound/pred/schlorp.ogg' + hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg' + excavation_amount = 0 + hitscan_light_intensity = 0 + hitscan_light_range = 0 + muzzle_flash_intensity = 0 + muzzle_flash_range = 0 + impact_light_intensity = 0 + impact_light_range = 0 + light_range = 0 //No your tongue can not glow...For now. + light_power = 0 + light_on = 0 //NO LIGHT + combustion = FALSE //No, your tongue can't set the room on fire. + pass_flags = PASSTABLE + + muzzle_type = /obj/effect/projectile/muzzle/appendage + tracer_type = /obj/effect/projectile/tracer/appendage + impact_type = /obj/effect/projectile/impact/appendage + +/obj/item/projectile/beam/appendage/generate_hitscan_tracers() + if(firer) //This neat little code block allows for C O L O R A B L E tongues! Correction: 'Appendages' + if(istype(firer,/mob/living)) + var/mob/living/originator = firer + color = originator.appendage_color + ..() + +/obj/item/projectile/beam/appendage/on_hit(var/atom/target) + if(target == firer) //NO EATING YOURSELF + return + if(istype(target, /mob/living)) + var/mob/living/M = target + var/throw_range = get_dist(firer,M) + if(istype(M)) + M.throw_at(firer, throw_range, M.throw_speed, firer) //Fun fact: living things have a throw_speed of 2. + M.updateicon() + else //Anything that isn't a /living + return + if(istype(target, /obj/item/)) //We hit an object? Pull it. This can only happen via admin shenanigans such as a gun being VV'd with this projectile. + var/obj/item/hit_object = target + if(hit_object.density || hit_object.anchored) + if(istype(firer, /mob/living)) + var/mob/living/originator = firer + originator.Weaken(2) //If you hit something dense or anchored, fall flat on your face. + originator.visible_message("\The [originator] trips over their self and falls flat on their face!", \ + "You trip over yourself and fall flat on your face!" ) + playsound(originator, "punch", 25, 1, -1) + return + else + hit_object.throw_at(firer, throw_range, hit_object.throw_speed, firer) + if(istype(target, /turf/simulated/wall) || istype(target, /obj/machinery/door) || istype(target, /obj/structure/window)) //This can happen normally due to odd terrain. For some reason, it seems to not actually interact with walls. + if(istype(firer, /mob/living)) + var/mob/living/originator = firer + originator.Weaken(2) //Hit a wall? Whoops! + originator.visible_message("\The [originator] trips over their self and falls flat on their face!", \ + "You trip over yourself and fall flat on your face!" ) + playsound(originator, "punch", 25, 1, -1) + return + else + return + + + +/obj/effect/projectile/muzzle/appendage + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "muzzle_appendage" + light_range = 0 + light_power = 0 + light_color = "#FF0D00" + +/obj/effect/projectile/tracer/appendage + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "appendage_beam" + light_range = 0 + light_power = 0 + light_color = "#FF0D00" //Doesn't matter. Not used. + +/obj/effect/projectile/impact/appendage + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "impact_appendage_combined" + light_range = 0 + light_power = 0 + light_color = "#FF0D00" +//LONG VORE ABILITY END + +/obj/item/weapon/gun/energy/gun/tongue //This is the 'tongue' gun for admin memery. + name = "tongue" + desc = "A tongue that can be used to grab things." + icon = 'icons/mob/dogborg_vr.dmi' + icon_state = "synthtongue" + item_state = "gun" + fire_delay = null + force = 0 + fire_delay = 1 //Adminspawn. No delay. + charge_cost = 0 //This is an adminspawn gun...No reason to force it to have a charge state. + + projectile_type = /obj/item/projectile/beam/appendage + cell_type = /obj/item/weapon/cell/device/weapon/recharge + battery_lock = 1 + modifystate = null + + + firemodes = list( + list(mode_name="vore", projectile_type=/obj/item/projectile/beam/appendage, modifystate=null, fire_sound='sound/vore/sunesound/pred/schlorp.ogg', charge_cost = 0),) + +/obj/item/weapon/gun/energy/gun/tongue/update_icon() //No updating the icon. + icon_state = "synthtongue" + return + +/obj/item/weapon/gun/energy/bfgtaser/tongue + name = "9000-series Ball Tongue Taser" + desc = "A banned riot control device." + slot_flags = SLOT_BELT|SLOT_BACK + projectile_type = /obj/item/projectile/bullet/BFGtaser/tongue + fire_delay = 20 + w_class = ITEMSIZE_LARGE + one_handed_penalty = 90 // The thing's heavy and huge. + accuracy = 45 + charge_cost = 2400 //yes, this bad boy empties an entire weapon cell in one shot. What of it? + +/obj/item/projectile/bullet/BFGtaser/tongue + name = "tongue ball" + hitsound = 'sound/vore/sunesound/pred/schlorp.ogg' + hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg' + zaptype = /obj/item/projectile/beam/appendage \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index db5b35c749..4119df61ed 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -122,6 +122,16 @@ H.verbs |= /mob/living/carbon/human/proc/succubus_drain_finalize H.verbs |= /mob/living/carbon/human/proc/succubus_drain_lethal +/datum/trait/neutral/long_vore + name = "Long Predatorial Reach" + desc = "Makes you able to use your tongue to grab creatures." + cost = 0 + custom_only = FALSE + +/datum/trait/neutral/long_vore/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..(S,H) + H.verbs |= /mob/living/proc/long_vore + /datum/trait/neutral/feeder name = "Feeder" desc = "Allows you to feed your prey using your own body." diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e695ce96bd..62f9c58df2 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -324,6 +324,26 @@ src.anchored = TRUE src.pinned += O + //VORESTATION EDIT START - Allows for thrown vore! + //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. + if(istype(AM, /mob/living)) + var/mob/living/thrown_mob = AM + if((can_be_drop_pred && throw_vore) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred. + vore_selected.nom_mob(thrown_mob) //Eat them!!! + visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!") + if(thrown_mob.loc != vore_selected) + thrown_mob.forceMove(vore_selected) //Double check. Should never happen but...Weirder things have happened! + add_attack_logs(thrown_mob.thrower,src,"Devoured [thrown_mob.name] via throw vore.") + return //We can stop here. We don't need to calculate damage or anything else. They're eaten. + else if((can_be_drop_prey && throw_vore && devourable) && (thrown_mob.can_be_drop_pred && thrown_mob.throw_vore)) //Pred thrown into prey. + visible_message("[src] suddenly slips inside of [thrown_mob]'s [lowertext(thrown_mob.vore_selected.name)] as [thrown_mob] flies into them!") + thrown_mob.vore_selected.nom_mob(src) //Eat them!!! + if(src.loc != thrown_mob.vore_selected) + src.forceMove(thrown_mob.vore_selected) //Double check. Should never happen but...Weirder things have happened! + add_attack_logs(thrown_mob.LAssailant,src,"Was Devoured by [thrown_mob.name] via throw vore.") + return + //VORESTATION EDIT END - Allows for thrown vore! + /mob/living/proc/embed(var/obj/O, var/def_zone=null) O.loc = src src.embedded += O diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm index 07bcf6b99d..bd033b9f32 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/frog.dm @@ -29,6 +29,7 @@ icon = 'icons/mob/vore.dmi' movement_cooldown = 4 //fast as fucc boie. + can_be_drop_pred = 1 //They can tongue vore. meat_amount = 4 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat @@ -39,6 +40,10 @@ ai_holder_type = /datum/ai_holder/simple_mob/melee + special_attack_min_range = 1 + special_attack_max_range = 5 + special_attack_cooldown = 100 + // Pepe is love, not hate. /mob/living/simple_mob/vore/aggressive/frog/New() if(rand(1,1000000) == 1) @@ -46,6 +51,21 @@ desc = "You found a rare Pepe. Screenshot for good luck." ..() +/mob/living/simple_mob/vore/aggressive/frog/do_special_attack(atom/A) + set_AI_busy(TRUE) + do_windup_animation(A, 20) + addtimer(CALLBACK(src, .proc/chargeend, A), 20) + +/mob/living/simple_mob/vore/aggressive/frog/proc/chargeend(atom/A) + if(stat) //you are dead + set_AI_busy(FALSE) + return + playsound(src, 'sound/vore/sunesound/pred/schlorp.ogg', 25) + var/obj/item/projectile/beam/appendage/appendage_attack = new /obj/item/projectile/beam/appendage(get_turf(loc)) + appendage_attack.old_style_target(A, src) + appendage_attack.launch_projectile(A, BP_TORSO, src) + set_AI_busy(FALSE) + // Activate Noms! /mob/living/simple_mob/vore/aggressive/frog vore_active = 1 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index ff6d6636ac..0e1930b604 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -25,6 +25,7 @@ permit_healbelly = client.prefs_vr.permit_healbelly noisy = client.prefs_vr.noisy selective_preference = client.prefs_vr.selective_preference + appendage_color = client.prefs_vr.appendage_color drop_vore = client.prefs_vr.drop_vore stumble_vore = client.prefs_vr.stumble_vore diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 6e64db0d10..9af9620a3c 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -48,6 +48,7 @@ var/latejoin_prey = FALSE //CHOMPedit: If enabled, latejoiners can spawn ontop of and instantly eat the victim var/noisy_full = FALSE //CHOMPedit: Enables belching when a mob has overeaten var/selective_preference = DM_DEFAULT // Preference for selective bellymode + var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait. var/regen_sounds = list( 'sound/effects/mob_effects/xenochimera/regen_1.ogg', 'sound/effects/mob_effects/xenochimera/regen_2.ogg', @@ -276,6 +277,7 @@ P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred P.allow_spontaneous_tf = src.allow_spontaneous_tf + P.appendage_color = src.appendage_color P.step_mechanics_pref = src.step_mechanics_pref P.pickup_pref = src.pickup_pref P.drop_vore = src.drop_vore @@ -329,6 +331,7 @@ can_be_drop_pred = P.can_be_drop_pred // allow_inbelly_spawning = P.allow_inbelly_spawning //CHOMP Removal: we have vore spawning at home. Actually if this were to be enabled, it would break anyway. Just leaving this here as a reference to it. allow_spontaneous_tf = P.allow_spontaneous_tf + appendage_color = P.appendage_color step_mechanics_pref = P.step_mechanics_pref pickup_pref = P.pickup_pref drop_vore = P.drop_vore diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 7089e4f896..81bf9d07e2 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -76,6 +76,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/list/belly_prefs = list() var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" + var/appendage_color = "#e03997" //Default pink. Used for the 'long_vore' trait. var/selective_preference = DM_DEFAULT @@ -182,6 +183,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] noisy = json_from_file["noisy"] + appendage_color = json_from_file["appendage_color"] selective_preference = json_from_file["selective_preference"] show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] @@ -228,6 +230,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE selective_preference = DM_DEFAULT if (isnull(noisy)) noisy = FALSE + if (isnull(appendage_color)) + appendage_color = "#e03997" if(isnull(show_vore_fx)) show_vore_fx = TRUE if(isnull(can_be_drop_prey)) @@ -309,6 +313,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, "noisy" = noisy, + "appendage_color" = appendage_color, "selective_preference" = selective_preference, "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 80e9fb8058..ce0843b20c 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -333,6 +333,7 @@ "latejoin_vore" = host.latejoin_vore, //CHOMPedit "latejoin_prey" = host.latejoin_prey, //CHOMPedit "allow_spontaneous_tf" = host.allow_spontaneous_tf, + "appendage_color" = host.appendage_color, "step_mechanics_active" = host.step_mechanics_pref, "pickup_mechanics_active" = host.pickup_pref, "noisy" = host.noisy, diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm index 65f997ad1a..344b1d1257 100644 --- a/code/modules/vore/mouseray.dm +++ b/code/modules/vore/mouseray.dm @@ -230,6 +230,7 @@ new_mob.permit_healbelly = permit_healbelly new_mob.noisy = noisy new_mob.selective_preference = selective_preference + new_mob.appendage_color = appendage_color new_mob.drop_vore = drop_vore new_mob.stumble_vore = stumble_vore new_mob.slip_vore = slip_vore diff --git a/icons/obj/projectiles_vr.dmi b/icons/obj/projectiles_vr.dmi index a274d3edc2046926dc73179ec14fccbcd8ec6d3a..885b8feab278395691b4693042be2ff6cdfe0323 100644 GIT binary patch delta 18019 zcmV)tK$pMUv;v*C0+1wsJ$h7FbVOxyV{&P5bZKvH004NLos&UsgD?<9*Z35pWSdqA zNvm$yR74evI<%QmT!({~Y6h=7nHuPpud|IB#2gwOp~a)kJhurpaFDh(0r zUe_%65!{y$!8T+;NuntI?czLof(RA{trxkZ1q-;a4kGwq!O5b3A_oz?v4E4r3q-J4 zHK)(Ml!WI?>#*xM?0OC@|Bb1)n3HYMO$Y5Ng(ffZG?VE3uzDaUkX2>wjV$q0q8p10 z?@U^(uta(en8}*vaHh6K&LUNPy-G?I@r+PSPF5&`xqn*zSoc1#F2koYAwrd!N@&mN zG@XCz?rD9~-t+!QLJLn$;)pVw?68-O#*pS%P&#J%0LlN4WHVAKl?hFJnB2BKhpTWE zu7^HW^Duv&lSOn2ez15;*dJqv4+;AP`y*)h>S8%3vpWH?Rezg@S$0)*|DS!PJ5P1% z-kPg!SM{83GLZxXavCrQynv!n^o4+kh=8vsj|}3=;DDfF!~ygtGs+$-rH2~2Zq4JZI}c~tzdx$G(?eBvRi`6}`PNfU_jB*5_1$Nmeb!!k?X}i+ys}xo zD^C2DF;2a)gMaMa5P{>1EH{$0nF`9Vk5AU@N@i)l;RGihNRj+?8~dN9nK}|8a@fOO zcMK%Vq?#ogGcc5+){#OFJrRKt&eGl&Faw1Mk)Ao`Mmp*2@20y~H}!FcmT0HFtzfRq z_s|oavL-7*Gb|izG&CwyXE&mJ4O3UbM1mQzdkqZzD1S%3-9yg~fijdO^RfWJZ%2r{ zc#N@k46@}l-E`lfoBBV@Su-U7VJd15Jv*kDJcfmIaHNJN%2YmgHI?sHb8By%#?C(a zZV8&fv;6B}BSwR^?_2ka<$Zs^;fH=8%(fT$xZk|sl1Km+Vd23r9}JYQ*9{K8={NLPnI>%|U`slX%CP*hgYS^y3_VxYO(uKEAeKEnHR^_c3s@jgxor48sgH zC4WMO(Tpa|u6}xNP)u>RhSC>6n@^MOD4XR;-}0qm>SB;ByQ@@ZY?`eU=^LVilLt9? zcbD0v2!uXk&0LkxvRlksI_lIyql``0t-1qnAwMWa!CJcVY^KxLV?H4w5L@P$8>?C6 z<{0H>yZNNo#E3>zl!E{}&D}8tH75}I9)I=>DJYFGMk)X$tFWmA9mQ0Hhj(`3*<(Io ztAcpl9CLTptn$nl<(ccv8-AsOj^Fi=_sCWLJqqe;1tPJBJ#SJ_@}mqNwXK$K(^}UB zkTjE8Km7v=st^zuG>5zx@%}QU;|h8rLL|G$;;}w@e|?yd&koSv-$q-Pfkuds9Dib4 z(!)y*ncH>-3GNu?&&d~1K5$4VmwgwKzpPBMN^5OL`qPHV-NY) zqIZTf6=7%X9oJtEa|0jvvRVX^sX}H@p?$qf^VFHtxF;NYe^=;&Br z;ppY~=a~L-n8?yrhW=i{YzzBHh0=pzLN5UEkU^kFL;u++raz^iRNBb|GiH1HEDO~b z(Ra3!?kQ3Fo`&|o0*hZ1oJ(3| zim8YkTYgSO8=5w!{(rS@)k*?xY|!{rmGaRcbEscIyTQY|JxK6Lc_zNRlU=XW(4JYK z@R#$<9ZJ&H(?j>~w~^T~%hbaFj_C=5U{G34<6OR?Rdj1+ZOpM8xy{^`h!g9vY0aOs zhRZJ3a>u)SlJnZ8&ZJe}+o70HA*v5I1P3!d$qSpz;HGd^ae=)>Rw~gc1tm;Mg zxt3K}w2I}bS-n#yAbaV#E>7%@7OlHR7&|2K4te;h#P<|45U_DnA6d^c{?$%8Zw?VE zBuH#^ardh5?SA^RZ6u#z2C~)zK)?c%8;lisV*_Y=j9f83f*t zBDF6>NPkNZ|4=*aEf+UG&-^#Tga=yKjTKft*GWgWjh$>Ky~j7bd>38Ulqg+R`2x&Y zb4}gUzY`&{twHml7||C=POgKFmq}B8xr?q>SE+tzGyPDea&w)=v40rR7xmKnmCoc*-Q6ilg0;6k^f$kMxklduV~p{ps*Yw;%;SV_lP-i#Kuv}l)W5-&&rT_ zOB?BK6{Sref?L`8Wgq|WJoEp1+L|iwFn4tbgi)qE*Fh#a%T%S;?2kl=cGx)f7{gPS z;(zunUlz>5{t%J+5JT@BF-Kk_5q6Q%QXB2BNRW7;iuw!{MNv=~p#LjAeyv9RbwySV z?qJ7030-B%pX(rV%`8(7_n3WKW5k|k3n?sYX9M>1qz6(RC04fRW70=M|R-4v0J)|p;^$?-wZfE=RHME4X8b=^Yl;52u^9vCo z=?axk7ASn)xBRQRF%dPRT8i}bA%eGUXZvkI0v!ScA79$o@7~4M;AZ)?uBCsI*MG#9 zg_lk$96#>UmpHeGMB;1_342zJ-n%5Wy!S7~*fU=P&qJ6m*eCdU1j1Xz*fX#3D{sk( z=7hOAbxf0b$);6HlkTijn*xXu>x&Y*+rdd17^;FmBGJ&o9$r^Jy)(xde%kJ}#_|HXadDFhX9jwEirVkt_4d&HH#M{M`vC%PoM--R zee|R}d_^-uB1NjdN_Bpk$#s)Bdd!|cla{k=E%`-jrRka8cN4^)>wn_wO`4~A>HQ0k zPcbkufphk1G&Ie}PiW|WU#A}Nk(n80{&^ciw|V$M%?v7Sw7sfA^{yEvzjLATy%6Ur z$C_2O7tQ(MF1mMi((xw(ZVX_wUBGYn_=bk|jydLP6)GPrUBdTzIlt%`{3}KyTjVb38}^VABiG}bsGRm=Pg2C89|DG zArwC?ymfNzu9lqDPSsVku#M{h#LPs@M}FADZwnAmRTKmQ<@Aq^t^^3Yc!0j&5QxGs zW9JRP%_`qB5Pz1Cj^((0^zMid{XcQy&oG1HD&R9RbW&6w4Lj8nw z;-RA)ecv(b;U8TIKR|=}oQId!(Vk(TYbvWhXP!ZT0DlTfn};`i*gA4W8!r)JsV=(u zyH2OlR;;p=_+mRdc6<0?1LKVn84nORt9;Mg|LN!dvOct74kE;Uri-rM>N2}S0A(t^#8-B(<4z6rW*hsvI$APt!A7}{f4U7?tb>lf z5{SJ$^nX0%H2+J6*z%h#TD1vIeb=_^P4`WXp}hjp;o&}PptoJff94q&7{N|D|E!aa zE6Rjh3vN<+Q8fWNd z1B{(iwqN&3)%@7L0Kn~E_m8p66zaA4Ruc_ezzqlL~%zRgU5ZQFR@s;^HZ* z1MkK_K)Y{Ry~DU$yz7f?s@iBClXHh^V&*_oZn;f4qbx5%X1Bx0J#~a%mi2=p0OF*2 z@PFKYH!Y`eXk@*P>7b*>#VgITFb7blQE$?$sVL$+zwY3|tP zLoh{Zn~we~28N=uc1Wv^j*5C~gy={jbM!NVx6YZP9}Hevq>gS%rbjIM|T{YvlH)H@bT3ckym?o_n+Y8Y>j$JL1`Em zeuL)By6L^AG0Lg$)oEth$^4(yWxDhynRweQvu_2m0RpczFfQu+GZT@HhJh9Wj(PV@9G>CV(ZVs}yRL+1J+zr^Mx1CZ zKww9Zz`CjM0SrZfntA$=1UB{CW4I5Wqb${4$hy~Zn^;S#%+dW zf62CP`(_L8bgHJSH_)*0q{Puz2hQF|6eXx?dp@L6x-BT9&X{P;jWd0q2&?XbiyC?Q zGoh^1nLS*l7F#<{{3^*wndy!cZ9Ar!Jc8xQt>)I=5TOngWtTv#s{l{?gMaiYbz3p@ zrbLHGfl#iJjStq zK4v}qd0 zG;Br$zyJfi3Q9skBw|MOfEf}1opeXzM8g7+U2j)=)dJKJh(HI~h+{djWi_RO+KQ1_ zGh6O7|E`c3(Sl}J3^4FAWwo!jM~Ni@W>8T~MRd~jN(JRMA5ZujC|wmIWR8=cwyl=0 zpf1Kq^j+%uq<@*Y9`qdpr)$#x=BaRRDBuqQ?)(}zf1&wq(d70!vdT?1#oJJG2kQrDBo z^bzcd5l|ImYE^c9HqL0P&GO&3T4cPc50dQ8iNO~nWhiT`Wx0B>fq)FPYcjGUOvj!$ z;qrL{=1dgCqm^?8E!>iVTIr_y=Aao4_tK;G()~6NA^(DmuX7c$iz{_Br%vMs^DI2P zo~67IIDeMy+olLQIDUiL1o#aX@2tQk7f0AgBn?__h_Iof^qZtbSC>q_|nmaN5v zCiQRR82DEo|FV_PB(l<^b=b!CZ{~^b8f43(J|gH=^H!~&-oNwl&U;>Ky$llR*J*6n z+EdX&z4Q$YnL}|GH+YiaLkj9*jxBq3vwQarbALxdM{D)a^)`vneEhT4?uBr1(b4=U z(X&wwO&Zjx)GxaD5&r%@`rg<>*IpO5_arA@p`d;}$CiKC%{6y!WBc`U%zb>Br9ZH- zM=$qApKjYxiSJ8OiY5)OMrCxp>yu_i>7czcX2#ci7h+~Y*HH&nSb3+7GqQm(?R)qu zQGX(_ZaOm&!j~K~A!0_B_FssZ@imw2Q8O9prRUB9g)ew`rAvi%tr|mqBuU#_B80E+ zrt?`5!d-#OmruSV2Izm?di-a`!#Vt+ByDf$AY*D9NFLGv%*p3HjZQTJdYGGE|4z#1 zBrx>6;5qcX0KUJPz<{pD%;gt%0;5*?bblhm@{6AVjFM_xhvQU8IVv~(&F=vC!L*`8 zwl*)`PBLe|nu~EE` zMA%YDUC{gVFy)cBh+MlBcj_*=-MjXT{}+Hw$|3xOt!s5klt{!tkGr^~UV3kyV1MG< zz4X36Mbh{1Uaq2Ev<{I-Z0wqc_t9mF&AL^#H!xdX61Q-JXJh|Plg2m7l*>Vavn^VE z0RjZMc)Z%!2>5}7VHI_Efx_$z(`UnhGG=F&hNhLMEQAS4fF*1Gk_iI384v-2+gB*Q zHAvvuD#~x_=xaKGU0hu3{SyDMN`GK)iPBfc7&~$1`#v+bOG68+uyP_qNCM1SQTYxEwyNT!MA)V5S%cN zfA&)0P(^Fe-(q(AopdA>Q!Ob7e5Bf-=Gc}kd+EK=#}BBeii*1C#B%}vLXFyo3M?IJ z(8RgKrX#?Lwb&XkyPQrsZhuxx_4^7!_{d0|TEVewFG{!_s4TJcl`NSLYN&6L$Ti&` zrz0Zf%alJ-qWJv=4d1mMUGb_Xn@>^d)F+l$`bs`Cf$}>kQc8*PA0{JI;F03M!b(3m;J_`O36jp-Oq1Aq4D=w~fK1qBBeko79{ zZ;UebtvdC4F656B{cR7w*hgQFhnp90-z-!6H_{hXt2|#b8}HLr`FEeIgeCF}zf+_B zl^V6-jZS_gYei+A_%Z_R(u7DEP=(2dDGG zN$@nkub|%V;5<~e${XHvtA8@ReElhFB z$M+>tQ7+gFb#QQS=Uu#sCXIs?tNf_SfIf0xuIA%a9IIt3rkL>YSA6``86|wC4X61R zJiO^9je{F0RSTfL<2BK}^gjQ0*!ujZ065!!HK+P5Ux+A*41lcpPWFjub@@nZEM8Gj~V)N+l_`T6iKm2!>Gb>oKLPS4M5Vc>T2TsewJ2!ZgCEqPW>*DX)PNaP4U zd_Z{RqXc(6lUTQ^E*~!Y>AgwSZ@EH=2>h^Ay@KnjK}A3DsR^WTg)Fv2{=k0_)W?9R zSXSoG{L-`i=Qky1>i+xksTbW3pqi@Mlk43YCx15J;nwqvA9gKA7IVdUo91$v>evFM z*1fDJsQ5Q!6q>U|oTw+j`7-5CJGkFZ&{i#3h4W$|wVV;o zlKsV5=KeH@QPWVphdFi^dAZ>i^&I{_4=*9X@bPePq=cC=l}|W02cjg4E7sD6V=)W) zW!uTQi)E{D(fYcctGA-WM1$7kBJ*PlEPs73OfaLM>~wJyAK!LyXC2(Ts?_e8X7)rI zsh&_S)J)~tj8gvcmG27qmjF7B!5pw``K~w?~*whY1(h~@V=&@?ep-p)#=}t z4z9GZ=bJSDx`kbLvG1?ut7k(@HGfl6lDSm8k#B4|1%5eK@RwMg_401BFV{a;qxO9T zRrm3SB);b3&U}-`U$w9s7xG^U>O1bZ=FKGf2GHYCXXlIi093!BN<|S;wS}vO zH4ymeJxR56q{ig;M+nC|@yfzVf8uKZxyI*SNU&3*X-hhG^*dXCwI9G&1Am%O8X#RE zq^N%w6+3@JW+Y2eRbj?{Ct2PmAW*DSyV_oFQ{#6X*M* z7bIJ>nVCe6{@-rU+&^PY9jfK3!^;#Oa;;08z_JF;;eWqG7JdA0d-xyn@V+#{=>N^o z{=~KTH-c8av8IxedC5w?P+rLw>{`C&MRK8fi`Fp>P3q{Pz{*?eG~P4GX!z7!4cy z$S7mCSEzo=!&5V4URb1bC`j=33YGh1-n*>gk$Im=zTyw$`XgB~1975hAL$Fk{81jh zx5Uaqiez+|rDHYfAM@}^6)K+qrQqPqj57MG3d%hOMmN>qbt`HF6LM4bNFQ?Uuh2H2DWC&zA{eK^pTE0+%?1O_k4UJgy+V|f3=O& zCjs5V8*S10TNhWGVB*C(dRUJw}d|a4w$e%5`mN zr|AOq2fuDr~nlyJXAm63+V{Wb)Z$Ov;1Hgw>gDh{>~ZYm1}(N z7L-H?Biv8dz793i6%_(hY4}n&LP!Il1X2B_uXwf;A%ERx=KdLqBV*Q%4}Bt6`GALA zD~kF3`|0`FpJn3f<03woCJ@ub*cbB%A^E}U-yjz1GoooXi0D;d)Y|^9Bl*4;E}r?l z5;>?kqv9%=@CmJ+t zH}7JYhJO;ug)}?AF(sp!nn>r;qGXlqv&t7R%s|k|p^Cipyqq9STgpI>N#x=&Mm}1j zaxzQD(`(cZl_-sNkQtiI&5o0UZMkjPXfB>^Be}Cqqdd*jG4jaOLA5b2Nz9Ce$!VIG zcU(Uw9UWsfK;Q-yHSsVf-&v+SohAG7c@{pQV}C5Q)As7A+|*qnFXSF`&tNi_%B4vD zT9eku7-L@|FE_=1F4o}xlK|T63^NCc*2;1?7cHOW|Dwo0Hr3O-oF_fJia~I6hME89 zAp4w$IQS{>y^2+C$(;03BxB1IrrL;C7p(b5U3f^%D{RdT_33CS2XAGW#V;gD?VDig zV}D_SQGpT(5_o8u>2ZOmB}rVf#PYwi5kFp}IOpXzW)JK%cZD?6&;pB#HL8nKOfJq^ zGi4wi)^>F3m_e=S5X z9w2yIiqs7uLcb6scxolTcFOcxDCUbRe%_~%uQ}wzj|_~Ps#L!u@kfTOlPkr1v40rJ zh0pLmvzcohZRMMnDaKQ89;b3*fVtxx3~o<4Y6t~iA{8Ns_@2@f0!>Q4<%`*GFCd+H zYKIP4U0*(1L%~Xa;_uAa=e`u<$r)z9osk_kWuy{Nd|E;w;`_o?5We&YDVnUq-0>on z6SLHt$Ny}fsj~m>`^*C`-A&(0hJOd{{3D{B&!*>zy^0pfGX2GSm^wDfboOjsueI~z zYnG$5`mRh4z~W^pg!z^)=ghfD4NYue=xGy7KA0lW=HiDJn6LEFd!2xIft808Q*UHw z-=?9~tBkC>1AQ)B%aw~4xU>h%!L9_c8$sGXG7noRqDGq3%@RqTDN9Va2{o+02C5u2!fP%amtRwCOhX=L-~U&wujd1QT_jzSF!W z)ld$2j(?GoMdbtNc$iZ_-q>%Z_*T9d|^M6lxCcN?Ziv z5jD~oQ-p>Pt`Jg_3Z77;BgFVUi!55lm_Pa>oX}W4`Ag?*-sG0Q+(mOqC7{Fvfs~RQ zj0zM4Dnhh`B0=?PLd@Jd%kXC(W^U|WV(#&Q*W5T}Dz8mr2!ESE%%HX45Htp9f7&iI zUvl^hU&5XK0o}z4%TdL8@*_&~)?d$`H@L1;&PE~g5;doa6sds%Dx)_)i=!^N$6_=_o$gJHt@7-Qe7P%U+k-Br)kC!PGpcZGX$Jk`Z37U>R-=uY4nzolIIq^`@Dpm`*(h-~HTs!U0@o>j&oTFJXPYx1F9^?3(4Vw36 z$-JVPtA5Mb;ELcvTxVX_EAe;h81n}?{Ez+xNv=n zv&_A-Y1LMgoO(D&pgTjyO?J*6Z|0g_lh&L>PFAe)Wv%bHnGmh~>SeWj)%Eh;y5qIW z?8yw|27j{cqz8NG%!Ubt%T%mW)@ZqzZ=RoepI@~7oVOS!k@4`FbJp}KNglks2RYG- z5^G<|FP^Q9QOj4$UViOK+BQAWN!Pvs2AJ6P_o~xnmS)ug)Q`YEFH-EkdXDPq9 z=;yqz#YsHV!<(M7rWXK2UPwRhNpfN#O6+Hs@_&opy<8uyho$`Df|nEfOIG2cNS>Me zjNizw8+~{d>eF9y*QuQQ$t0DH(! zP2{t`Hh-?5zU7a^m1fPuP--lV1&C%05$;L2sw!-xqC1|(^gX9I`5zCm_~5q*w;s0I zKY#t7=EOh7C|FHqYaX^E(Pa|1Geysyn-CJ_zWWfZ<#Ea^Ti1Q|Jf&|={9`PixXCtO zy3feJ@YlWEr{ANa*6hv7*$lkAC*!$96Z}Tis(M|y?*2NB{Jb?c)yUV&OS$FA0>!Da zRh+(3<*S;yqUKc5Pw$=rh0z6;CKAMxaev}D7dbm-jhs|+Dp|67LWDvM>fe}R>R>zV zeFBkA5brPugimqmP}6GIGUwM~#M+|7`<Z0DPowDwo|H6=&i?=DmL%mPdQnIgG8 zLgd9h+;_w}{FP8HT*;F8Z71j6Td_)xopbz7I&YP*GevTjj@~oQ_(!T%rRnGVQh$PE zZ<6FbFUQeFe)GlIJ98Z!Q6hin!+mqs%tg=7&v|miD$GAt$`>G-iyA$2?_Ld&uxmgm%y{^gVu>gbO07w22>f<#%X%1>y#b)N{GL!#tn99lTp_Gm>(mp{3 zNc?Bhz3&xh*$*fjmQ`*Ef`9Hfs6yakpgF5qL~5sM{^v6S{I8JY12tj2Y=2AEzTm^F zk^d{G0k*Gg7m9zv-LRa`)B@Ho?B8^;^i$U8e9%m&!c;T`k)3DmteZhav>e=)c8Qe5 z^^h{tN}O1Kl4RcrMt)SM>3YzpS(WAqPCOJa1IJu^2OvyH)lj2#8h_bortkMH&p%=2 z?@tkov05*p+&Eo|(Y9=V*<5}wMxv*abZCT?HK*n_vt8{Zdvlc7i;i>h?JewC7g;G- zOZ5UvABmgsPc^Y^fC%A;g7UOJdVgh!#gF=y=N~pt{&|LYS|DVDW}#@UcmPeS;mw(| zA8jYQr;ALgz`~}FbANfrIyf9R<9D3lzX;Z)clxgeDpuJZGso_)(@;9;ZttLD0Hi+5 z$UzNVW=JO{m?-*e+|~1-^}`LfyFp`ll(Ax|gB-i4#nG z&qr?9!TzB2!wt8!Y?Zvj96IYK>o7ZmVIsj2#Ri;KPNypbo_|RrkFHKgYd*6R*0IZ* zi05F%Dl}Fod<9m+8nbltMTm5jDXv>&DoS*>hrjG|aUG81*0EEY;fJe#GK&UaJ^AAg znqmrYAGT^3etCZ506XPxlGyt@|ZkeS1^; z@Zb8hj{5X;9DieRwneDna`Mv!QX^I2R2*vKqm<{4)2toG4~RmDyW~Aj`wIhnI2DHEId$)Mw(00K zdKKB2T6MU519&Ukd+#23%g~f7LS7|sxIB&PxahSCE9DyX%299wc&#OBD$VITfcb4ou^o`HE!mu4%)j?Bm;mx!%V)H z-n}gvnH36aDx(V#Fax54%r#}I)su`LTYpV%(BlFc(sI|dP<+d=!)Bu4iu_f9~_uEq>rt;?aU$m^&n%7<_9?gNV+8Za|ECHC*6uHq0NyzHX8HQ|MdfJuAf3zqrr)n-6~g3Q9jR&Q8klZ7hTs%Q$0|$7B5=`%Lk#N2CGy~VM$*>0DtafPcu{y zbr0u~rz>m(5`==6H5Ea^)mHA~j#tley?;@L?~0hQFK=VpYf`ke%`rQDwfN!Dxg`_;bKgDz&>RZa z2+hyqsG~UgVPegrsA80v@*@3O=>xx(Z+$iRRB65E1s7R7)_Y#ye>M12`GH@{x9HbO z%#;^V#VE1nQ5^j+jyg(ce!e*ruAR&I;CCdkMwH^plBC&MwXBs$iGM&?MUg(u=4#Oc z@3?17ep>>3{&SYJto`!A@2uXpWj);oXnZ~|H!J5#JML1Lu*Mf^)E{(lHgpi9W3~JW z)sr1`gfD;fBUrE&?Gx6?!j-l15!hDCuhIBGCmjQu`MW7=y7`cGaQxBo|93-#m>MM5 zG0XhIk~O#KJ%mS#Fn_UNkl^!XnZJ9N0Rb@H-VUp1>D7g(4|({{D_ zN2Zv(Y^Z0=s(1@5e6*ePkM(rz3$f}0K5fa~pZ>B7xOAR#QbgvFi? zzP-xF=i62f1KoZ~LY95|ZdLa0zt?|P{zh^1&X0=WU;M)637g?#S=xeSE)GF@tg&J(7NchP53;oN zl_^}Z*w0TAW`C?HcZR8}QlsHqG_19=7}wyh%$##T>Q4g1{{8!Z+->-8hmaW(4XYtB z6=9$&0*I3^Tzr4UTDmGnu0M{)@i;CCX__Xpv$GsHaDa3={aYPaft0=Ba4 zmN|1i-$wemL5u+qT~#Vo5AXdeES*=3r_1b#w~HI%6_;0I#A5G}Tm7;Do)E(@6wujd_#q^6clO5b2be?(3jq_aaO8 zEn5ql3V%R<96wQzrfHt{!R+j6(%FFn2jpX{ge1VF_~9{AglFHi%ke*kZTP9fl__8o zv6EftqNK-01+4c0}=CN-HOZb|pDegM)vR4z`^j#Yz`rBiSy`*I|E?aL_ zpok{Te3a<_1wH~81N6PC!)*VXhpmUlAM5r$j(`6ebai!|RYH#;E>ip#;>k~bGVqv8 z1efJLm;W(p!%roy=;YiqSuI4kLp8$!;2QIq-i(>ueD3WPqMd9kOyv0*5!E-PvV$FW zWXg{tJ}vCDGM&MaTaA)bRgz#uX{x8ouk{RtD+as+g)!Q4PTr6hF8^)R0vV_sDLx zzD&nZRMfQO;^T#2wT|!A;#DlXNhZFip&cA#;15D(^t@xjFXRdn!Nr-XQ#Trq@YJ(7EJ&hq>5W%uLQG=DawfaU39mYdd+JkIf{0KqqP(6LoT2~?~p&@Q^vwKgi%vjrvuIi*1qKLlV(!e zZSL;8;NxtNz|;zblPgxiRZLYR%!C5aZw~BL(O;^fKBYwIQE!eV%tZV~_WpeH93|}G z2^B@3WA0N4l5LoZmN4UiGvB9Z+Y`XpUZmLaOmEY!mTt2r5HQ=6(_HQ((|`XUpfkso zU))aLTN1>7FF@c>jao@FHKmQ@&(vwmp1J>>?0(Y#eQ)sazUa`}R94*McpPhBT`Tll zAM|5reF|7x37_kRfyW~tHiHc*rW!R5L{KvgRWm~=-3%q?m|tvR54F+u!mQcRv5oD! zk|aB%iJm0+8UaVHW0*MXk@zr8b$jpID;@G~>n0o$r34QNop->9)SNWcYo)7zuCoazT-W* z39A6(+W7u%y8BY3o*H4~(F$eH5e`2RBmNTr88W#J!b9^c{B45K2lg@k`97_``&MlB z(mOH2o}UGn6ldpFL~?4L`OgRNdkoB1W|;j$3+t!$GWzq~^zKoRQv>w<%-Z-3jAt(~ z^+$7J=HEBl{L;ncCVyNf!na9$uh@rcMc5VJt+A;vG(#AUs(HW2y@B^eBnFI;K&kvf58{IL+#GD^4n?mWr=(l%s!= z)3X24N8e)+A_*BeBq0U%G4|6o_URdBo&Yc~Yzg_u5JMl-F@FnX%1`$beW;`r9&g^H z-_;r`te%Sz`_rHnex^aqvav~vRH3TXPV8s=D+f97po$s@6MBDyNXf)ps8RoqLmc|5 zf$3Rc`IITlZO?muhtTdo{C3-KCz252y0Ea@xbG^#jf>ykCHH?@xv2n0w1~G#)i}e2 zr38b~9(rF25`T!Pc-9Ip`+cbX8fLVQzE2j&Kj_6U2$1cVn`Jn+WjE;2IHb!=YEZ?e7}a72q*#f1pUgiqO*w0|wOXQa=j7LxL+M*;JC&OwTASIS>sRrm_4v!SHLJi1eMcVRUgroF5Vqtgr z@!?$c5Pz1DQSqo2<|l?3Ty}7ZuXFl4vT*DStMdRUYPVE`*}?HDc!p~<%z5T6?q~dC zdl~(3C!HTv@m%?_NtYi(Awr%8jaV1mzb3)&PgB{+8m;Y^0lJ9*E-u^5x_iLW;$nT6 zc%Pp@&`;1QQ*nIw4&JEOnT(8tgbyzgeB8u}N`J!HQslujmllSJe<)7u(=lzRtATFm z=vC#iE%|M(zbV41uY=I1nlvvSWW0Z!OK*x8v11nYY@W=eC<8-fD*qEA_<(}!UGFnK ze2NF<0WZEA6yV%898J?$`@8@C` zLVuKKUy$%ebaeUZ);BixH8W8O2`{Q&LAh_Mjyb}%7g+p$mD-C@q95vG&zORI%-*2) zqKtxt6Dm?TImcqlg~|uD_~9|Y*#Kt=sxKnq7( zwSUY0x&q|la!0bE05{M*Dr!hZib`HUDZjB~- zSVcXcAm0a6C8VB>x(&ZMH%1N;jCIm+RMOOrR_y9DvpV{eg5}fd&O3FWijVjfdK?eQ+B#+Jd=V%57Dju_!-p_T=@g5ta zrGv0C)wGNXeQ?=DtSi70mTY3$9dtf0!+-2-p5l~^z1(E|#5Nrr;CUVWl?>@sNo=rQzX=ky zzeiFMw56ME?GQc(^lc!~)U z4+jW(>eRCiPX6lgJ2+hJkB*K6CvBX`v{)?`D6FnUa%?m0NQG^8BEY&n+n&3m2q2`8&S>`vnC0p#X=pupA*0laVSW=3;`xAIFJ*u|)Y19rL`2c|}y#_CyT~ z49udA@n;75>;U~O-;|IR@GCJ2bp*68C$Nuu2NhW`< zN%N^e23jf()UU+?apHebq59vGod16-6LWr;kuS%IJzAptyE^8jweeql7$O?6&qq?M?)^&Iea~UG8LV7>1@}k|woW#xM-ZQ@!+tyXmgyDcV)4FAXs8v>)Gy zgRM$Pj)i5~IEy8UpG>kOYNEQSZouo&q-mr`{c{DqU~T}*&P8qVyPb6Q zf@~D27rV**Z-T@R*T%1)I3^}G%oizqJVpA|5k`hCacN;I_uw5&yAuIiTy_oD32;CQ zgh92lBD1!CYGuh3hqPEMOsIdePQ$8Gdq_b(Vq+gGQ+ZBC>g}LoteftvAO9GdTv;NS z%!*7)%WqSdc8<)I09ReJr1$ZzUjXUdCg!U))&<~oAHI8Y58pjQ z$Y+_Cn4{4FE!1Xx`)6A!2 zzk8mht0VSz)!%Lr(x48Cu(eeLG&EIMdqv2^sl# z6RF|D4o2yJeUapo2}XZ@{W)Izr^6f?)-ist!s^RC^o;oMs<6R^_1maWdbx@5Ty7oF zmNi)l;!POnuYq&H#{N{3=JO!W`3aa+YH1Z!PKu-n;Me@JpMY8r`Q5e+;o{=5Oi-HMIBzI+L-K1I5(OG8Y(lGI_)Tli(%uwe^POg7CIMUmrB(_3X6iQd@ zYM!cr)l|T?uml_x2OL zcbSz>XG!P6gd~3ij>OJ2%yfil*C^>|vTWnXGK#k$N`*OX=JgPvb30|%7PfNTwGl4e6}ROVS-8r9bGwc-&hvO zGXOdC+m;R+CKU9d9#K%bfPyY`TSwo~C4W;iZCx{d&_RF5s!}3MxUWI|@wM@whK5%6}C^wz|`{C&jrb09jK!64FGHbmpu$cT1%wTd;pmkif6z$v-;H>?uEfX+Pt? zvX8xAt!w>XJ1fqf-bwp!p?Fl(kvKyS>zeU`2hXaC@_`1;?6fxfq`bveNG>ieyPKA3 zHTdxP>(o<|VzPKnoL<#MvwTXNnlmx;Cb!=Hrv-oe@jCV6lVb8^Lo}_jD4J(E_bn6i zc@xuj^DAr*w$K}MEPO&id7+E0-Y}uDG?}Nn>3+`u(c#eG;3UaxjKS-K zPQ?>mB%j&3TN|@TQp6d&rrczms-)sMut@%gJ8l1J3L=v)ka_0n*CJZvi9rS)MpGV3 ziKKtK7wqEVazk30t!72eenXtOE?BrgF*!Y^{vX>0LG%9TW+Ds#0000K!d-Xw*uR=0+1ws4ti8rbVOxyV{&P5bZKvH004NLosvOn!!Qs<*U~A5WZRa; zbxSwe6o=wPas@NCCh<_o7LuHjoW6?$>=36mVOE0o{$~a);cNY!Zz0>{@<2Xt+kk@f zJ3nU~?NG>rYgiCoT>t4z_H>Gkxw+k5{QNtWc1G$V_UZ|;90yEjDO*fOilBps%LGV0@#HG7g-I&V16@rP3+Utwea!z?q0 zLqraF*cY4w2{Wl?$;J!}<%o5-&_`cHpoFt@4g}0VAwr~YfrYVdx(9pd?bl6x(xELn z>Fg+&#l=4QqBGWXHE4!~gN=qpmD>D9oUdW(N|;D6Lw2u$p&x(Y@VEQu+aXX!vSeN! zAo%SFk(W*|@vdREysnqtyL40k+XZW`3?NKJ?W1qU4AV!kkPeR2&_spm=dPsl-D+;_ zZ_wO1z`(6RGkAvoLfA;qpzZtCLt=H`?{etT9|*JK#Xjyg&pRX%fMr;EB+Q2bmFsnb zLvMMn;8gB*-#&j+S*v3(mFv3-J|7AQB9DaWJpFIaL&ppJL&<$&uegbQ@BBrve?Oi% z{es(Mw;GY?VR7>t-z}<>1)|%MelV>ly)Swmy)S|v{7#;t?g?Fw-M;$LZUN)$|3n_Z zeDGzv0q8HJH*4qq^e4{0U;r{^Rxjarj#czMJb#MW6McVlU(-YHHDSVWi60LUydj8j zPu*124pO}{%>4);ZDzWoM2A3zTC}FX+i=eJG=>=JYSC&txT;|W6(2?FNWDoj6(br0 z0s)N00IB9Yv%p$J5+r0qiQN(;c$>sK+QL2@BcdPU*kj#hxA5_`C2Q%D&Uk>KTWp-X zi)R>Ss3m_9GK^-lX!Q)ze}iI*do`4S0NP@jbXUc!O#7BE6;l_(Y}s9-HfPgnr%2xr zC7e9KfqQ$*9z`JZIcx5Ul$PCU-rCim9vWw2wqZ3Kfb;o5F$&ho<##ik!XEP}5rNpU zz`{h`sIqM{rC*lF&LDX2Mt(D#3^XGB41PB2ylC|iY1HRvd&B0Rh^ z51u{dQ?@FIH!QGlcipPYO;DM;-n`+Ly6E~X4|$(lm$ z`!?+hrT~&=QX6D&NI?|>0>kEr7b8Acp?pk1Peh1hmsvhKK>sU78T;%IgM%G(^cZM_ z2+4mDwk18hu>I#DA?q<*f?Z zjS(WxUt;Oab*ow$Hz)pJm@R+bLHbV5^uAW2u-r@kGgP$gF;eb|xjd>9piTSeEHg(p zGv=4Vm^C&NHRB68hJGbY=g%%M_wn_PGt7UW$T75gloMkTdC|G9abk-Y9lDe2>OX*^ zkNRxmaS@52Uq2%v5v+Ok?QQvMw;%FOO!SX)DIVH4n7M1t?ld1SL|2 z1{{6Vzb=Ou9l8@vY~l9cUAySXK3fC>ReAmEUyI)oZ2zUFNNMY`J}>FMxnIuQKPP`~ zeD8bZ(ZBg8DP0>{3lc_dfAFq|IJI!W)UP?=n0VcNI+%UT6rWMRy}aJI4aHXrO3 ztx}oNYLLLS4(@z`VrvUqcGhUz+G&4gZ3U%NqY?=d=}waPJr(tVGG#YRD854BIDmtj z?xL$}iKQc#;$L9)%V8obTN(Kq3G;32!&SP}y6U>;M zo%1Z!VnpBFNxH90`Fk4L!%HlGam}je$xK11`7zg(rJ9N~ZPCwUFbD>v$v{L5~V{vUdzTwd$>7`$V+XUr`ojN7$JI{KwN)Qru=6kjP%+# ze%-1);X2og3QJb0QZs9J>jY#!eb>c_-PNXj&lnR2CEh^~UzPZtVg>>>j_M;Dc_zQw zP4_J!LWKm0tuF3f6}~;lV77zgvuvDplg8!iI9vcN+Qu6H$#163&VGTS_0qe$MQi*p zC&mWo?(87>EFak~5PyFuFHvNx-SBil^+z?jQ=NifU~Q%Hw1|WeS`(3I1L{uI9ta7J z!O#7?DT=EC%i1s3y5j_?wB+-jv!p%n3}O7RslpfpgDrfatO-)o6CfZM(2}W6u@I`s z8=fwp$L}Wl{1=kBCN7-1aE9&}(kmxj*?a3+;&kS_!X13pkbZyi>r-OK>+hoY@Fd5+ zoR_K40^9v-IiVhq+r4W6MD|6Svom^Moiyu4zzZy`_S1Ju*o=%ePOW@zVX#@E9POd! zEosud3QC87;C8k>-N!$?O5yv%44V#aXqDB)%XPj0tJX?eHP!Jb(RhRAN{ZxGiEM@m zuNVa0lp?h+L`Z*25dUx|ooyF4zsTY@!-R+0*v%rv&vnz)Yhx!nN$>GZFW*DYHD$_| zbiM!!)t&l@`r=Jv^tM-svXI z50|OTq)7a-jg#x5>*dmvU+$sjwKZxV-pn{usNT|`c{G1U^dAHQCw z@rDw`13TEUPeMG*fNo|R)#4h_6S7^;q43OW7H z>K5e*{Jy8^07`Yv_WOUz5DO1Ur~m1L`qF;`bFwt4y8O`q03ZNKL_t(nq-)zg?3r&p z;c7N(Cq1&~LIcyHQMPH<)1kCXM&3u=0%+YxzXMER9Bp7-R6!{#D&<|4x9w zn-^Jp#{hjP4`0#DkVugltWjH>W%`0m9DQbApheqRwO0I+Rcv{t_uT~X=evLSdW+V{ ze)|6m;Q-!y1Md}L;hxqsNk$Q>SjP&0!{2OY1eQoCo4>F=EH ze9y<(&arOQ>}7Ltw1?iE-E{q-fExoC9p~{IKE9!$y=#GmdX?&j$`{GKUMeqo+W7(m z3DlNZygN(RA1WwgL4r?LQHFmbgb)Z^TqKeZ!9O){KR3(Ft5&V$O|7?V1Y684Bl9dd zX*%AZqHc{4R!@KbTwFo~-=pJxdX|~jZH8aj`_9jbuRQg)mF|hA!YFGIn`+pEVnNh^ zgWFy!1Bq62s>8DNtG}uoeEkQc^``y)XP^2$g_Cuq_R*gcZl;6Qul|3kLUmXYt*n*Y zxNQ|R;H=p))^cE@xZM*?sWtPQHJqJ?c-4M0PmXlK{SD z`&FyhnzSaTM;U$iq%|>pIs6`;TcUW-eKbIP(6Z)?+`q9DaZ%jRg-cucJN7K-W~(eoo(m00Dm#lnxJX^pJJ!v@BiB{Ci$aK`zbzW!79|K$VpyiwwpJLpJw_}Do8 zBjg6!w7onhi?(H7a2`a6{ZtP<|D(t34FOcB`VwE+!H&B%)LU%q@9JpDz8JRAb%ZUy-lkoj;^cR2%ii?ZAI{=xb?7LE%+s?I6uSeAL;0~DTwEU2%ee$8X7t}abhA!=*3&u^2df5xZ*nJ zMM?|X*!njL%JV}6)$_l9F``O{(4Cv*SKjl*4)reMUZHiJ?3x|L52ETi zPSwRz)+XMKfq?eFta_JmuXxWFJ5;sVIw}_q*2Ua|ExF|m<+QVW0y4WD#_nq%{EBQG z7y}R|)B}HK|98`Nng_=&G%#Is^|^TEMV1x-8Z;X%T6GmgoRfDx3qHOPCGr}Z_Hiut zNv+x^&2(^^xpn)HIkY`sCe;cx86ot16$Ov=ze526nn1jAfT11df3{gQtxmHmyvMxe znLEuL`+NwdNNv;6f62g5bk;9v)zMK=Z;udtLZ^S<<*0eBRdTGYKBq}1Pw}H%KnurM za}0m7*L=zou74w#V6xPpWpt9so&MW2Q^)6-Kdz%Y4$hee?|Sg@)fkc2dUy{V=fr%S zMp;2=8W?_)*4zc#drx7UlizF5%5;+XpKGt_(w}DP9rMh;9moa#@HA6js?&Hxpv)K;%@(cCTy9ECMR`O)jT;1Ca%zl`$aCi5X?`6o93#H#a(FI; z4zt6E6Rigb>FKKEkbg` z%{L0=JA&Gt5349amA#QQp%+Kj@uWn<#?^n<687GLXWjA5wq<|GwqCx!4Pf2=Et`8= zE`Ypon_<~svaLJ5*~UB7s_E)YG;BO6arCu`vo{h&398zj537{#2+F84A=(R*%syCx zwRFJ~PV&^>gi>rUf2cw|wtk=Z6|$2u(_JY#cFZz;7|WGg&8__*LR~7#E`hk913Z6~ z57KKiY{k@*7Z~$PB5P&?J#^jdA@vZU>=0esB1B(k;}{AGXGfps@(T>~n1c94-}Em# z3g|I=g1vOV%tM9@f;SH_@C+M!Sw%@*$oarpBqk7vAqM{{W+pEC`cLC@^gCva%_s;> zMa0kMU++E$gpnfoyvyN>67pk2T!(+hHBlN?!(U<1o@TbBqV!#8>?IN(9}izEQ9Pgm zc_wQLqO{1u(zG>s$%=p&VLL{o;$WXyBx_iWR+~nlPW^;|aY>~yfxy98$dbuSa`G`1 z@x28WzB*-1ZYuS2HV#;ixD6Ud4fO2k@fV17=b?|Um8o3O=AceG(*k9OfZl%#jX$it ziKwXC6U2rLjDTZ$SL_@ljBJp9IE1!g!7RlZd~KECT@eNcB6M}GMJ~~1H)>oEOdHs8 zZ8Bus;F)r-vtWIEzYTEz!24F=R7qIIU3&u9vPm#)pvDE!=9;WxS7(~Rfe6F9BG%w* zs{+7Rkb(4CuJ%HaD}WvaMdN>heGOO0j*H!H)3z1VHozPUvtdHIK%~!~cxOifYq60K z5kmF|Tee;9BwVtV+GC7;XTlmkGRyp7f#?>9F$4XQQg;&R&M@;Y!))E+o2ZI;;qJx@ zVcwc=9p&gh9JL<%@*Hy?6DT)I$bfRu*Vnai5jZ%l?QDIkZ=$M~!M}eVd_?km{tHFI zEm|9P{v+nrXxNMhfFXwZ6_kX8NW_fl0W%~3y6KI^iG~Ftd!beBwFpp0AOc-vBaY?B zw$+jfYCA?^-EO&4{JTPCL<^c>F~rczm9??n9wn9tm_bD`712%4s}+QWfWS-J%_V31ga*9Ye`%23u=FLL!_Ljf7; z)MR8wn65o>!j*F-%;_qKCu`?4+PGx}wc1PXEkQFJ?x#=fr}rHoLjHLjUuQdH7gy?N zPJ`wT7Fl}iLXm&+M&MYsZ<`|M;P_4IQ{XpUyfX${Jh8$?B5BfgLxc?-ZSY#2a(ge` zJ(tT5uwpGQwP<`J$Iw6f_?J{dlgMg|_8}YFzlEFLGt8DJy+zRN=Iz=b{r}s?JLi6_ z_hpbszd>`u(VmJH>SthN#2kscxWN;Q9#l}5b8OkOo85oAcbGd8I$FDro_9!u=Hs7< zcF%{4i;m_;iJqx)XwjrWwef_5ALkz&VBpPt^z3zU`%iGl%hq`t5Y4n(D6w#qjb^P9W&$Weive9Lf27;iWJ{% zUio5WU2DOR zA4$^jwg}u{VZDM#hz zzxqu8KbTgO=(Z&NKXnc9+--dS_uoQyIb=@1AZ-oY`+y$`?ov{_BeG{t5VVp1fhN+CjMdaG8xHI?2?cTMg^S=OW(hlLLY+Y|qqC_GFdfde= z_tSrW%M?@J?x+6)DU!a2_evG@3GX2iiH%+N@cwa?QmbKA>HN`Mt>@uCd^ zx)~4wg4>If-X0|ITovWlb@X+Uz%DK>_I`hfe@G>;w@mq~6HFXG{rP~I+ohoeiWHBB z2uXl>Yvz)*n)h4xyHPX#ifs(POGSN+&iYZci;IKv%_Wvj`lb}h2EG7`EUpYNkg;K8 ziPd9utLiVA3rh-0(Zv_Nbnj}?I##FgzBt;5hj;sWuc2%A-|;-$|L-Wr&ny5RwH|+) zyBPlh3tt~(@Mmmz^Af9Xt6Mc^$y~TcLHVwWul3UXrvZY$r=f+_wQ7S4+Vb&n@mAV2 zzu;TG6bO!+$3A~Ar9{cgIFim8?r1U^!2Qg>|2mi_eK=;H@eR7FKy_rY@> z|5Ba$hYPG6Y|_HH$f6@a(OPZ~nLU3_H(j?VruuyaA$(+{LA~HuwihMb2~<~D`AU|| zhcwi;NaVWdk5d&9ixny#EmQh_lcw)lPfon*Y39?F292o|R=(0n=ig|k?^HNTEBVyV zDSqiA7b;Xf+Mxc>M(k_mgD=}nU)Qq<8dYxit=|CP+Sl%tdccsrD%tY9K2A&CH_Od` z^%orZ>wf~rMz$7!5#a2tYDUPW20=Ht<_&iNu;qDuQmRtMx&q?b*X~`j^X@<6k^lYo zICji@@MWuVPj8e!A};0*HJp<$a20=&EnR;Vg@}MX!16g)a~XEdACL|+8|bI^=>>|@ zODr7irSJM4dY`GG1y?ElL6%I+#`z`VEGOXN;jL9meBwAK-r2C~n`-;L5Ds(D-NML> zK>5uSDWy#1_md>wrlRi9SkpU|r+z#<9NdPD^Ov(sHS+l1*DdvNA#GDpQY3%&y0~tN zB>@_e{5Pt}~#>TmGo%=6Ae$2&tUpHOxNltF4 z`J-Z$ytbMBu!iy0_Ni{QRcpoP)Z7l3#s_-o`8xw6te|*4a>>ETp1%<4;o;&*71eX_ z&Ipokq!zVCqZT7J7$w^4BfUD!wuY*>rn9V}t%7{t0R4u7f{&bcaJqlbe+Zu9_Z8HK z9GpihR%OGBu63G6W5j+vO7u<-*>2FB(@+Dh>3lUr_^B@L!;aOqg(*(@_`XCc%6W^S z4h|0PqKh}xqIsZdRi2a#=;PPrYCc}ovD&s`iYXtz=;NnOJK@vkaEgD)!<%i zV!f)mdZ^;3_a;@p?FuC#@WWE|3a+mP75(_9rjWuFveXv&2mgPSpgsXa#j3J+`j@`# zKf5VAGY>tGPrc+J0M%60zFhy-II$rQw~=S^kZU=zlq)UTv{ozBCYC6#mMI<%6YNw` za}JK@<5wNrIT!bfO`m9rknr;^e%_~$D;#!lECb^+MG8mSv>!4EJX0W| zE{+078(aFwg(`oQ7mqUf%^EEuXzAxZ1ae9+LuTtdix25&sHpB3qsPf#JgF%2zI1Z- zT+3=Xja*|nNU#zhkaO|EAhorq$8{v+D^x!1;C??rN3CoX&Z&jeaz;2y_UGqW_@f|3 zT|@OAAz!eUaw{u9u}FDkk;S5iY^6vJYpCfO_2m}r zk2thHU!nT>0D+%za6=MboZ@fQX)f5<4^*iBnN54Xmam>OmT5DsHS^7Nol+rRSXs<1 ze_bHHTcGrfMHas6A!kw~e_KcU=}GeMkvW=aI&XjX@V=&@?ep-pwa33N9b9Q+FScm? zWgENUVn0;N*UprfYNn0Y+a?Q`Zm|(X?%a(NQ8g#b)@*se(1~j2GLApXnTlLk@nw_Ob zn)qdhRyD!V`ZuIIu8XA~epmL~dXu_(s7z{mOlqh;LMXEBspJ1TgAh_a_SgSJEk7oL z;y8dfp`Mf5+O(a3_)$Lm3nu{vbGeZKMyG#f|~qGl>GME~`5>hr7C(o8GYS}A{1 zUGO&edS>U>YDW{fRJ@b)uQX`9A7t6b-`}GB-Zrg?lT5xfL*~X7&iBX9YqsbxGl?97 zztN<%f6kgYSkKi)S1CQ}S{K=YWgVQw{{e|C`S{=V@IUO~eQAvG|COQhruFzYf_A>S zu9K2^Nikoj6!QhUp09h6T&U5eeN=x#lRCO6P<(rX=6k1^{+Nq5?%;?FneGzhN|0br zC08rS{KXp|PVuiBvB|uYi@D{4Rmw{e)G*;&8#KyInqMwa`U?%CX=5KAXX4H(wQqTN zYKF{uvzPB=Mdw4Hx%`2dMrx^D})|D)#AqvR-tbMaJ9u4hX#*Ix1RPZY8` z8*bjk%eyUrK+edXRqm@X#1m`4c758n7DvDBCoExSoXuL0xM_J1DB54?E!^zY@^IeiUA&ZstM z%uHKTOU-=a2`L1{R78K0M6blJ`gm0XqgtSNFihwc7x}P_t*x*;)ud^=c^AVplu$0D z+4+q*8O_v0I+qq@t8AZfzJOr{f=&)qisY}fXpc=W@g?$d zQ~YOR9sWNIpv})Q_h88?u7-2b$|?RYiu{j9Jup90^j zT9vlUNiRh*wn~3trh|BG$y$8U!b56aVQX$=Ku1eCc*RwgzmO!gZ;F|Zg$YIlN+d|& z(OG6E1)`oLam@;=|I|VJSc%etm)}@Cu+!WX(ojQ7EHBroEzdB$Ja5falsu4!LcXxt z&bQrqzE-c~s*iQj*>2I)4fIEY1WryfH613@)(M0=NoRkQoW@{oDAh?vwoYRuL{JY9 z%%n)gLxj4cxmcr^FSO6%AJ97Zk^q|Ez}lg%udp2w^slQPG* z4UC)0lpoeHlGDt5W|if`Q6h^vfi0b+pQGe7IhY%KYA5OE)oFY!L@*v8ct?uV4Ix55 z7bJMHm|uUtWqLi7@};7m_i5(q4mt571LNizwJ%Bhu~F+pv6L^BBDwHs{%5yx?IZ1c z>k?u-jn*-$$A?%r*2VDlq@#vV@Fh|af{5=aEg{gP^xM9e|Mn8nS)_jOpw;u`Ga3q3 z`V;@#oPYkyFrJoS{@WSZb#q240mY{+6e7MaTm^sOOP`RU$p$POD^Wc@Pos70kN24> z`|o|geDGzv87O9W`0n2)+WlPmZt7RGP?p&*-p9<*ab~k;`g*OMA759F(i*rtI{?d< zPzduaUoMyn(;AxC!pLn?Oh1w$(c$8UmsqS0(0`qPc!A=him5jj%ukuZa^2bdY?TfY2n=%y|rgtzKw*4eGBR~oiu`<-T&ZeZvQ8pj;mZv`>rnOvaNb{5U0*Aj8L_Y)9>*!gD6bfp_rv1qh#aY!7zD=vNXfA!SkDlk9Wb*&oR(pTL z527L^S)@?3FCm+mFgw*MwNi!3e2Na;#{PVPg6&zJoMNg0G|%Eh$PjQwSN9bEL-tvk#V(J(7}z+@G}AK)volzrQV$dUKOLlBU8V9T z2AbcpTsg(m1TeAFyk>U~-M?3(`n7)og}=3NRtwg$FHNZ!1lY~)J3;mXk8a{NoWZ;` zTTYmXk0eOE;V4I6bNcU7)*Am!=FOUlcFFm!zU!_?l0x0VEyhJK9#JFRF-2$y;R+!& zso)7kIzmj|x6HD2l*J=I!U;{}lfQ7z;!SS#%RRJKR02v&5J)M>;iy1Cpdx=nTPPA# zuP(&g{qu}|_AwSF?kDCR8+zT16Q=U|G={JV#0=U?4nbp>&f9jO`I19l_!92y59lpb zS&b^z(;j!4x4$BP&g8mWI~#?}OVpeyQly3o6vwJm79`ZV$Znfw{)a8vrA|6;3Si_E zM6p0&yq({C2iR%!e>p{RI80cdVB&jKYUM7nyBfL1w3FZXs&HSf@3|GqUkMW)?jX@8LDSI}TeKfY z)A4d8Cmt`J^-KKSI>zDw4*i{fo|8~>nieMP$B2J@DnIpOalopniS4-^g8__=c^1ZMR;BIa zoUtge@Gx7`PR?#Nb8XtR+di_{%wL`m(0XX*n^HA3bq70M8Nhh@JPYq`S@oilQx63R z^k(R~+0NOMtz64%(O!R$$myz8xn%SmHxr_rUpuUxuen~{yWo87G5az@xuI+)>ES-Q zvtdHv3RUZ*HC}1uTj#dk=a+3i=Pk!cWIVjqf;GEFk_RvEK~A)z#5z~<%V)GP>iJs5 z%dh{CwoOlT)3a}gp=WlGdQ&%<=WD2Yij+Ta(i%VF=FiRGtmJ=}m;IdgwK$1qdw8=8 z*6b31$P4M`JxNY1MT!0NN`Cpfml~rBVI{x3COCC^-b&Tr-~SbcZ~>N8(= z&&izo$t2a~2Cb5Ut_F#0?QE%vM1bnHVc~&k4t?Yh?b&Zrm>Z?-P35z{vUs+kfz^-3 zl~&!uQ0lBq1c-lT3=!^2xT-2_q@p{X#_WA3Iq|QLu>8ok3AZ1!IzRny=G5QCC|E7# z>mIfv(Pa|1J4N4~n-LNgzWXTc)k!L>TGxH{9H(zi{aq}dxY;&ew$I4F_!VC6)9=+$ z>-J{tYzAK5lkr@l1%9(;)x4fu?_h&we$iT(Y33W1mE3>obb-=L#VXBSuJct*T~TwY z7^Htsfx`F_D^m&L$vE+xi=3aZ#!e_Xl`PpkAwr=hjc?2_bD)#X0f9&-h<6zT!Y4U- zuw^xEne*#0VjWT9gHFz0weziuM*D00nv!GSw^k{9W{H)5OOf0jA@Wim9yn|r`bsDl zu4c*nhLeAD@2^^A$Idx^H{G{O*qI`^OGodUWb&gmtJ?B&emOz1KS^?*m*Yq?zj<-? z?p#+_l*sS-@W6sK_k{cB=R8@o3X4B3=L-Li8FRf4*p~Zpi30xjo8!ettvqRLLpr6e+DqYjK(7r4XUOGD{1mbG_%I zp07(Kr!;%$9-Pb1t(^N=%}eJx+pGDN4dtTLyn>d~7GuQHOkJ4#NO>7o18tGVJgy!_+x0QG#W(V6Rzv$(mr|zC6nEgG`K1GqUSA=CGz!ZRU=wGW~zAhp3+T9!mKrW1UlEfW*JG+y`ETmi?f@ zAz9w$ z4cqxlJz)LZ{!NRepR~pogJwb%rlKi`>>>+i(hMr1?clbxi?l3W2q`nI#EA_iNe+J; zXY5A}TCNApx>ao*=lG)mGjPqp)rc1I)nRrf{;JOtbvTY$M^A2sAFlk)EE<6Iw2wb#j{Sl}sVjJSf&b}} zSjml`$8?H67^Pl5LbEhVUuJ)T)gw#T+o}NOAMF#?+xJVp`p%a2k-zq7AMxqyI?D2V zn^4o`#HS0S#%jW;I@Bk}sVp3$RX>Iwny{Ys@uL90_o9Ng{TnY(?z-*Ep7wud+uRxi z)feb74aaftm9@vKveagHyMN-*clh%!@AUva_`H`mJ0^ij%LX{myrF-+_qLkcsGWna zTxw=6C=PgWw5+n{n?-}ho#A}1#5rSJMEm#uFrMxycR7t zV|IsDSZc{ld?zjjY5D$&x%|-{y5A^G-nL-PKB0u~6o0EltDGd&zhW-UNz1=tTNGUh zXn#KNr{c}iZ@0&4?Si#v2rh~S6+*?&skq)0U$6UrU^o`2md5y7>h z^sTiYx(mY_xAUTvZz~Vp{>954JjIgjNi%PC(bx|Av zzzm2kGS^h7)lM*Zbgj8Tj|*r@%Uw4@@h!&=n~A26f84R0%9H833zz}XL-sWdTH^;e z@UH?P!o<=Nzv^6|RIF}QT1m6NCXqj|H(5^hUj;GZnu8lJQdzw8(N`FzBH|=s4(_!@ zD);`o^8zGhtp>IA&DOY z)^)(sOx>SjOSG5Xccw_p06*dA1LP6~- zQTjBN^d*uyPl$jSRE8NI@{!&Oh3UFgz9OBEo8S))GyEGqvav$p zqjjr%neTB=9(5Y!7%_c;`E}C_p5@AM#uk4gW^8F2+lD$w>+{TAu_&}o;|FnK@kQp> zov)tddgF}V6ES07-p01qrReBbV1D*W@xzl#ODF*5zI_6qH4?59T3p0Y$8q#S#9BvC z#W-`7Wd^nK2Y)5s{%Y_U(t7WUo)Ga^?|qT~)!;Ma2Y)5sW>70LS6N0Cf-jh7@!l0{VMAL?{kSl0jn+r46PN7zs#{gL#L`Tfjw{VSHpBEKOFipW)mvie zA3I6^M0eLdA8R?_Q<3aL=`Xv0OZQnjMPwd7czX$W$%TytU-HLtdkL&6xw#&!6sb7yUk`X2#e|Ni|y>2vr`hmaW(O{*y}6=9$&0*I3^TztQ1 zt!%0+W#7JiKc17kimSMa|M1X$(kJkr5nI`I>w>wM?;!pBAjS}go*IAEnuqs+A}i;J z@${H|@eY#7Bi50rpVawY#Z_Fze@t9;z?T7uytbF#zmRzUoM-yaUF>k3wk<9DoDwi; zN|B-SRZW`T0=_Wy6rBRCcoKS<;jW ztm%FJd+_!$aBY<6Z%lCVeI=_fwPLMYw46quh!(AUl<5D;(D_VYV2FYD>^67j{yon3 zDz4%x{$t~^99NpG79!lGnqdKOjd@Lf#>{TM_x3W;Nj4TH@oDXefta}zg00+p`sds%Md@fOw^Gz5BKnHw!U1)P*l{k`2g znLKRTOdCNnD0I_Mh8P;Y5>7Z^h7{G*729gbDW*Owk%xbV+43(bGo1qPO~fFB=W$6x zN6)HUxre}2T*X!V*TJS7@Y#!AgAC?8yrCHJ=p<94P3v3-JYtRv4l_Jbr}3nB1ORB7 z-Z@UJNz3z*jTEW9<4nG%Y1Pm4cX!g+5hfhm$JuS+16Q3*uxVl zioU?YrxGMPFcmFf#sjB6Ptma_fU&(qsqLBGrc-|{y=Gq^V0I{{xZG)G|5iYEjx9gG zoq@L{i2rtgz`;88vSw;Z2g#pm(40Sg{X5zHmLUe-8bcePxh9L(Qp+ee@4%sA?%!Zs*9o!^3-UiRF8H z=Lac>zCz>{haTmNk6km<54&7dRxt{+kB+v<5hd+E||*g}7)3aWG$@kb)qI1?|7Xw zoAdc|Jolb+=8vDxJ@=g7Z^Hg{KmGeG?3p>{e$-3vpY{-~E2xDSz2iXwqlJmW)C7MM zUu@HUe1_@ot%%ZjZ+7Du_@j?L+RaZQNzxr)OZ$K=VR^dYx8KTJ_UFl$`{{qshwuG< z{2?E{cf{zcx;UiiW*T+LU%FwyDskOD_nnh7{J1E71TqcjK15%F4w3%K1AYys!@KZbCY^k ztCq>0OOpJXun~QtP1A94$%|aMVKk5LWzX04v+sT#JrpJKt~l|kjXmF__45N9_(u!d zx6INhTiCb#+`A-6caEC|;J6X@H)vRAxUiUJB+<{nb74YB9p7r=I^M&BPP@WpBBuUn2*Ns`_e zHheiXEiSgkNDT%Fg@c5>8g(x~VE=lx&Qw$s6ax5B;KMdfLJ{7!b{F8ey8PP*dC7mlt?L91XsA^Mj{DIS?Is8QJUpvH_1`Di{lVLL3Qv-xJI{sza+i_R z#u+=(pdM+^Xm)62Y@F-Xan}pJZ8{DpUWCYyi`Dfq#4ckbbQhC<=isy(G_H&={Fk8k zTsD4>W?`Y@vj-UXY!5webFsR55muv-SJCEnGx^y?7N37Q!|6wB)LyW#H+_-l;nAYg zHZd>d$bGw)_?T(fG6+kOw5|;Uu!5u7*lrKK_g!ITW`)Wn7k8<{#s}L>On|3N%;yW_ zvx?Z{dHp67++c$ySD5?hSzX@m?Ad#@=f&9 z7t_)9Y50FCY0@7H5%#rc6+OI_wd42jSlb^H69rDXcvE?it&}NeS9fwqk|f<|-2fah zqH3IYQbnoT*b8aWf0ZKjr7E@0nb_xT>}x?~bxqX5!oseYSbu9_&I~iu^~^6~L;`W* z_iJbi9*(ODoLLrr(xUaxK*8ktBD6Nn)xE!bYl?rVzv$5U=?KGJB?lTZlA#o-zpvAH za*Ff+WMj{bG5*yQ$*)wYeZj=OygL51F9X+%{~uN;yt3m$ShwXEwj@b+rggWWnb_pX zE!D6ri`u0D2BLlRwN|LO4I0l4GyHgvz_^F2D=40WW4m|@RVp9Nuqc|Mv88Ij8|l!o za^!!0SjQ|o!gOBgQ?s_n()Y(0eU}0;2>qUit0<_BgOjsyep#pXs~~=TmdqtrbZ%+p zsT;bMX5!sJf_p7YF~iI;TbSNOW9qxT^bUY(RcKZEDE&{G^eCMrj5DdD(bNgN;`lXPB8R;(gK;s(v1J{Q#|{1DAZmmwrcTGzDzYzy1Vli%=*HBq(!DwM80T6gF)O-zh(wke?0r;SCs4qtEo)s!Z71cd#92&}yEnF?r zzT*xWhkh$Y@8|0@e>KL~1H;D9^BI=^t1OC*oo;(doVx^|8k$c*d1r>q@zuY1IIT8z zEAZNt$de@L4N7_P$tQ35qW#8yzMd#O6LsoyDthoT7n_GUG@zozS~RYl73Xd#^<)?A z-yNmr<8|tfOfz#TNKo0!ou1H;(>vMzD%J1@e}lvS(WH68#CpbuFRP;+ zZPO`EGxM0bg;GdIj~;yudMZiM|3_WrY6uVrwrJ(1#8l;+IGr^`r*=wzoSL<G+}xtQ5B2t<5cv5h+HlOE=k~q3HPbEwJ*7 zoo;`vvM8*SDLk?Ev$zp|e|Uu9k6~yJ=0rxW1xu2&uC8XQMNx8J7H3|yS-4CkGeLS= zd3d*?Bued<#hKZ)pD99d%T&HULHd0`Blx-|z_}pKUux0*7aMEKHRvQsdh@xh%LSLj z#p)7^uiGiGMHXLNV)3!IXm5EZhGBeuM}qYQaelTWaxwr*lC+@~{{>@!Q{x!l Date: Thu, 22 Sep 2022 19:49:26 -0700 Subject: [PATCH 3/5] Early port some stuff from #4919 that way I can yeet it from #4919 --- code/modules/mob/living/living_defense.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 62f9c58df2..58bf83160c 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -328,6 +328,8 @@ //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. if(istype(AM, /mob/living)) var/mob/living/thrown_mob = AM + if(!client && !thrown_mob.allowmobvore) + return //The mob is AI controlled and the prey doesn't allow for mob vore allowed, don't even bother. if((can_be_drop_pred && throw_vore) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred. vore_selected.nom_mob(thrown_mob) //Eat them!!! visible_message("[thrown_mob] is thrown right into [src]'s [lowertext(vore_selected.name)]!") From c9acc369b0ce1c268942e192235d85fe94ae0a30 Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 23 Sep 2022 17:43:20 -0400 Subject: [PATCH 4/5] powder that makes you say yes --- code/modules/mob/living/simple_mob/subtypes/vore/vore.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index 0e1930b604..f4af7bef05 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -1,6 +1,7 @@ /mob/living/simple_mob/vore mob_class = MOB_CLASS_ANIMAL mob_bump_flag = 0 + can_be_drop_pred = 1 /mob/living/simple_mob var/nameset From 0bf319ae22f25a248f893e0dd0c2925beb5576cb Mon Sep 17 00:00:00 2001 From: Nadyr <41974248+Darlantanis@users.noreply.github.com> Date: Fri, 23 Sep 2022 17:45:19 -0400 Subject: [PATCH 5/5] powder that makes you say yes --- code/modules/mob/living/living_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 58bf83160c..9d5c38d701 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -328,7 +328,7 @@ //Throwing a prey into a pred takes priority. After that it checks to see if the person being thrown is a pred. if(istype(AM, /mob/living)) var/mob/living/thrown_mob = AM - if(!client && !thrown_mob.allowmobvore) + if(!client && !thrown_mob.allowmobvore) return //The mob is AI controlled and the prey doesn't allow for mob vore allowed, don't even bother. if((can_be_drop_pred && throw_vore) && (thrown_mob.devourable && thrown_mob.throw_vore && thrown_mob.can_be_drop_prey)) //Prey thrown into pred. vore_selected.nom_mob(thrown_mob) //Eat them!!!