9RkTNRiSO#`9az&mdM=f;X zc8rHvT6Ska<6jdB$G(voQbgW{XNlbag9xg-NVB&-&V2OS_x`=4SkmWx&?l!ugfpAl zWuC=Hlm8?ThICN~(A97}@3~L{Q;G1Dg`1p&k+ZDjeqzwZ%^F&9cQgdWkw;M%Lc( zCPz*bv4;LOCtj&CP*N?#lEtm(kVUz5);AI)fT>6&OW0Ijh)YwzTi;e9md8+e!Mhm(pK4vy?tt4H_@6y`Zu;AUHhaoFeKS8Mu yL{FPZdrWt^6h^C`xG-j delta 3944 zcmb_e2{2oG-$vci-lANkExK4*uAqxGh*n#wYAHf(rP>M&a+O$OIc~M3CDd!FEx3(6 z)`nW6+8`|rB0}wM)D~M~Z4!xB=ezDV^Sv|Q%scOUW}cbfbIyOx^E=P{&j0_cw4R-9 zJ^NCTe?3X*9B>71mfYzVJvqO1DY^F=bKAB<__Y7`LRJR*WLSru!@CvUs8Q)i3@5+3 zdlp$B#b95sFwtljDyJEfi#~bzuFY;(s`b+}nfe6$!#}zio-PRAR2mxjFdL(!kgQ)R z#Q+~O)FV{iQR}}Swex=3?Rrc9IQSnI8U}F^e1yW2K*O)K)kn1={k2t5K@uJj-b(|G zO69BRz!?^OCQ#ABq$7 u6`)-}kL zy7X#YM mY$n!abm!>(jbP`gqjbIZ6uD5-@q`{Kr_v zr9{a9FIeuCCcjDi)tx#-u@oeLLz7Y_-u)&Gij@$E%#{;ex+RD9xg{6BZ0*Ze)v9c# zp4bX5?5&Jr#jRYE{8jnc_+#bu1&_cC2b7O006s6Mw^DFZz47E~bsiaYV%0HG!DPX^ z-+M)TyzidiV*@4lxMx{eXqNw*8Q+eNnRUl5!ez{LlmtU>3}{O&>7#OzYSHcNgdEQY zBFghCvaY_!42R>DF~X4_wtgSHBshCuuJIJs^)lq-9}0m1CQXk=lx3C 30K0l+`d-;xa?%hC&qRbWPUen~V?24sGI77$1W&CkoJ6QISgQ-FX z!@b|um(RUOw7}tQ$wV1ZdPH0_9)ieol4( T^z5ZyUFIkusvLGzZ>j z_?gZ*cm-=7mu*1Iu0Qdc$Xm@CVdtZcz*Dt2b>cp;loKx`t(2^%lx L9YRrihsyxEuNq4HKTeSs+dIn+&G$xU4C6D{Sz7wJv5&c}`3=*zmafhr6rKg+xxsw`(yEi3(n| zjXfqSeAwqROl2%y?80ks@9$lppNiD*k}|cQZNj@Rm?v#r6iD&v%&WWfOl2PPnWDib zp4TkjVNaP5aSaZ>nroEk&kGQl;+s2eJ9D5{>znwws7{zHL~y@#D0KARDLHW~1=Qhu zg|Ax1(I~zI?9Jh&?>;-qkEc)r**o_R6S)(CuBdh0=7VhnkfB3xVjW}iPY6pWfgjGH zs{Hn6^clgJGlKlP5ZJ}OUHsrb?PC8fgmxiZcSi64j>!M4u8(xUSp+aMOKGe9`cVQe zC8={+R@Y2U5ZNR!EMT~veZ_J=s()fCY?-iOy{@cvIeNbrMi-f^E2_|0qbzbQS?X2O zC d#U4*~v)qLqc^UM5A0#3W{+avDk|DVd JTxx&GU8_n!Jp=Yi7b zsZW{pcy0KR9#14;U^)McTJ|>03GkI9{t1(J=S=WvxW$oYu$!);opj6Q{zh4GVh9ki zS@a~*3jfGjN|kA|uoSDiWxBcL-+gdT9ny2cxpi{~odWR_T-W?EG3wKu-K6;t*{9gE zipVd87{WEi4bsOV^b5HYY0(9QarD@{siB+bfPONiGsA3l`4z0Zy{n{DXB9+vrA6*x zc*k$*=w!`p(`P+x*nvmi2x1K%u^N;ShM7Bf%Q_>c}04|I71;6WFCi+#HD2dFD%r`gP zGKGgx1E>J%9uC#OA?0FTy=od;Pp;JHwoGtNw#PXpq(mqsem8j$SfXO{xs+LjWU=N? z4g-3(R}M|hWu(kblrYwVp>i6QjA90eTUIiHNSl4b1?mTL$Z$k%+h)hb^3=KPgyNnf z0Hws9PG_D2o2ydv4AFkz@p{7%z2(`iB3Mt&+IPz&Qr((8=d(WwIBj9sKfgLugZEE& zkZGFVVH<@yr9{6`)=86IMX#ApF+U7peZCuGf?Kr8sdYsv$VBWorhppL6CSLe)zQ98 z#Oog8+L=0qh1hfa9|Z=%hr@>#IKX?c$Zy{7B=%f`XeCbXe_I=Al-qW{T$!E)9W!va zzZAR-)klyEr2$T|blNjji&S-tk)>WX)sc8ysR$X#C6;;t+0OVPVU2*3*c*S~zx g;I4=|#8HM>)K#CR+2>rhj?6=S6f} z4CZ#cx9mxiK t>HEJ|Ry1OWrU?5Mok<}jiQa*z;cie3NdmDjhf5@9mzDRz)gz+(C7lEOu z Wt(fTz$23 &jYts4q`{DdK>TF~&*S|+T zL^?2z_FHUDd*7JGiuY0>CToo4<#klqgxtnvWb-I!JfrqaR}zf-)Jr=P>={Y{e@Wz3 zNsAdbbLVDNRlSvPs~4fEq8%1&md`-5;ll)AM5SlZb&NY#jkUs#qwlx^qJDBqra-e) zUFO}<7pBo~YwKw)yFb)ISdnO716HRHino?-SG^|X=A_*BG$;uQ{kkHF+=jy 0&>n-g}ik{(fj<8tdo^6j% z+#LshYF}$9=DfjfMe3fw4}Iy*)O}Uj2+r(pN1UO40?6Gpe!NF43}=F~($f)XRMteZfYlXR1mm(A zoy9tyEt5V`Zj5F_;%l@`u&9d|@Ch}!Oe z58&
jxlKp2DgclmL^>vvj%oM}4V__Th1Ab5bHqQ!AdbH2EO$edjoQ-@d zKYYH^!!CaaWX1FWu2QZVEC#(fW3^FroxG{M>NZRDP<{PkDt(*>8owH}WKx-MG@ zznAqEYM92%^voT-|&a2`z{&q(Mq;0fMB8deL=r@uBRXZ 9371^rahfbBV9O3cLbkh)0bd$$1R1p|Xa+&eNU$(3U+6LDx-xRN~B z|7|Ed?5sI*_MG$eVB7m+{rMas(X)xbX8W)X 0Qe%#_HW54e5_G zVWXurvaLcFr(;wd+sMQjG8!0T49|j$1^@b(D3VfBB$xdQ_x bUjzsUhn1yP4yuC>UuDGifB0sW;ZV}{X>1NrQDht#uJ{>w) 8-N5x*+?t^lgY;7Rd?n9OqEk9d=+>^ndctx1^kq*3D~nqMaT_Y?hOc zHeD-6@qd%n?)ZR>Q-pq)6kYvC#|?o!>kU$R!u}3=eBtL0{M$(l_`iX0@74br)&6?& h-%V=J|1fp(gd`xNuPrl1q<^$$cFpo?g|YkNe*!x;I7t8i From 78e9b82eb6e5453501e43bfb23fba36ac4da0524 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 15 Dec 2019 23:03:44 -0700 Subject: [PATCH 12/29] trying too hard --- code/modules/mob/living/carbon/emote.dm | 1 + .../mob/living/silicon/custom_holoform.dm | 20 +++-- code/modules/mob/living/silicon/pai/pai.dm | 89 +++++++++++++------ .../mob/living/silicon/pai/pai_shell.dm | 16 ++++ .../mob/living/silicon/pai/update_icon.dm | 6 +- .../code/modules/mob/cit_emotes.dm | 24 +++-- tgstation.dme | 2 +- 7 files changed, 106 insertions(+), 52 deletions(-) diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 345279df29..559c2ebcdd 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -22,6 +22,7 @@ muzzle_ignore = TRUE restraint_check = TRUE emote_type = EMOTE_AUDIBLE + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/carbon/clap/run_emote(mob/living/user, params) . = ..() diff --git a/code/modules/mob/living/silicon/custom_holoform.dm b/code/modules/mob/living/silicon/custom_holoform.dm index e4e7b5317e..8ce6e9a29a 100644 --- a/code/modules/mob/living/silicon/custom_holoform.dm +++ b/code/modules/mob/living/silicon/custom_holoform.dm @@ -3,8 +3,11 @@ set desc = "Clear your current custom holoform" set category = "OOC" - prefs?.custom_holoform_icon = null - prefs?.cached_holoform_icons = null + if(!client.prefs) + to_chat(src, "No preferences datum on your client, contact an admin/coder!") + return + client.prefs.custom_holoform_icon = null + client.prefs.cached_holoform_icons = null to_chat(src, "Holoform removed.") /mob/living/silicon/verb/set_custom_holoform() @@ -12,11 +15,14 @@ set desc = "Set your custom holoform using your current preferences slot and a specified set of gear." set category = "OOC" - if(prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) + if(!client.prefs) + to_chat(src, "No preferences datum on your client, contact an admin/coder!") + return + if(client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) to_chat(src, "You are attempting to change custom holoforms too fast!") - var/icon/new_holoform = user_interface_custom_holoform(src) + var/icon/new_holoform = user_interface_custom_holoform(client) if(new_holoform) - prefs.custom_holoform_icon = new_holoform - prefs.cached_holoform_icons = null - prefs.last_custom_holoform = world.time + client.prefs.custom_holoform_icon = new_holoform + client.prefs.cached_holoform_icons = null + client.prefs.last_custom_holoform = world.time to_chat(src, "Holoform set.") diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index ff41b7b383..a2fcc8e97e 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -59,6 +59,8 @@ var/obj/item/card/id/access_card = null var/chassis = "repairbot" var/dynamic_chassis + var/dynamic_chassis_sit = FALSE //whether we're sitting instead of resting spritewise + var/dynamic_chassis_bellyup = FALSE //whether we're lying down bellyup var/list/possible_chassis //initialized in initialize. var/list/dynamic_chassis_icons //ditto. var/list/chassis_pixel_offsets_x //stupid dogborgs @@ -305,16 +307,15 @@ /mob/living/silicon/pai/proc/initialize_dynamic_chassis_icons() . = list() var/icon/curr //for inserts - var/icon/temp //for extracts //This is a horrible system and I wish I was not as lazy and did something smarter, like just generating a new icon in memory which is probably more efficient. //Basic /tg/ cyborgs .["Cyborg - Engineering (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "engineer"), HOLOFORM_FILTER_PAI, FALSE) - .["Cyborg - Engineering (loaderborg)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "loaderborg", HOLOFORM_FILTER_PAI, FALSE) - .["Cyborg - Engineering (handyeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "handyeng", HOLOFORM_FILTER_PAI, FALSE) - .["Cyborg - Engineering (sleekeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "sleekeng", HOLOFORM_FILTER_PAI, FALSE) - .["Cyborg - Engineering (marinaeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "marinaeng", HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (loaderborg)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "loaderborg"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (handyeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "handyeng"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (sleekeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "sleekeng"), HOLOFORM_FILTER_PAI, FALSE) + .["Cyborg - Engineering (marinaeng)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "marinaeng"), HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Medical (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "medical"), HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Medical (marinamed)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "marinamed"), HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Medical (eyebotmed)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/robots.dmi', "eyebotmed"), HOLOFORM_FILTER_PAI, FALSE) @@ -324,67 +325,97 @@ .["Cyborg - Clown (default)"] = process_holoform_icon_filter(icon('icons/mob/robots.dmi', "clown"), HOLOFORM_FILTER_PAI, FALSE) //Citadel dogborgs + //Engi curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeeng-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Engineering (dog - valeeng)"] = curr curr = icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "pupdozer-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Engineering (dog - pupdozer)"] = curr + //Med curr = icon('modular_citadel/icons/mob/widerobot.dmi', "medihound") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihound-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Medical (dog - medihound)"] = curr curr = icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "medihounddark-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Medical (dog - medihounddark)"] = curr curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valemed") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valemed-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Medical (dog - valemed)"] = curr + //Sec curr = icon('modular_citadel/icons/mob/widerobot.dmi', "k9") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "k9-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Security (dog - k9)"] = curr curr = icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "k9dark-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Security (dog - k9dark)"] = curr curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valesec") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesec-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Security (dog - valesec)"] = curr + //Service curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeserv-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Service (dog - valeserv)"] = curr curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valeservdark-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) .["Cyborg - Service (dog - valeservdark)"] = curr + //Sci curr = icon('modular_citadel/icons/mob/widerobot.dmi', "valesci") - temp = icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-rest") - curr.Insert(temp, "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-rest"), "rest") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-sit"), "sit") + curr.Insert(icon('modular_citadel/icons/mob/widerobot.dmi', "valesci-bellyup"), "bellyup") process_holoform_icon_filter(curr, HOLOFORM_FILTER_PAI, FALSE) - .["Cyborg - Security (dog - valesci)"] = curr - + .["Cyborg - Science (dog - valesci)"] = curr + //Misc .["Cyborg - Misc (dog - blade)"] = process_holoform_icon_filter(icon('modular_citadel/icons/mob/widerobot.dmi', "blade"), HOLOFORM_FILTER_PAI, FALSE) /mob/living/silicon/pai/proc/default_chassis_pixel_offsets_x() . = list() + //Engi .["Cyborg - Engineering (dog - valeeng)"] = -16 + .["Cyborg - Engineering (dog - pupdozer)"] = -16 + //Med .["Cyborg - Medical (dog - medihound)"] = -16 + .["Cyborg - Medical (dog - medihounddark)"] = -16 + .["Cyborg - Medical (dog - valemed)"] = -16 + //Sec .["Cyborg - Security (dog - k9)"] = -16 .["Cyborg - Security (dog - valesec)"] = -16 + .["Cyborg - Security (dog - k9dark)"] = -16 + //Service + .["Cyborg - Service (dog - valeserv)"] = -16 + .["Cyborg - Service (dog - valeservdark)"] = -16 + //Sci + .["Cyborg - Security (dog - valesci)"] = -16 + //Misc + .["Cyborg - Misc (dog - blade)"] = -16 diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 1cc9f959cb..e79295fca4 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -128,3 +128,19 @@ to_chat(user, "[src]'s current form isn't able to be carried!") return FALSE return ..() + +/mob/living/silicon/pai/verb/toggle_chassis_sit() + set name = "Toggle Chassis Sit" + set category = "IC" + set desc = "Whether or not to try to use a sitting icon versus a resting icon. Takes priority over belly-up resting." + dynamic_chassis_sit = !dynamic_chassis_sit + to_chat(usr, "You are now [dynamic_chassis_sit? "sitting" : "lying down"].") + update_icon() + +/mob/living/silicon/pai/verb/toggle_chassis_bellyup() + set name = "Toggle Chassis Belly Up" + set category = "IC" + set desc = "Whether or not to try to use a belly up icon while resting. Overridden by sitting." + dynamic_chassis_bellyup = !dynamic_chassis_bellyup + to_chat(usr, "You are now lying on your [dynamic_chassis_bellyup? "back" : "front"].") + update_icon() diff --git a/code/modules/mob/living/silicon/pai/update_icon.dm b/code/modules/mob/living/silicon/pai/update_icon.dm index 54eb275a76..67c75b8fa9 100644 --- a/code/modules/mob/living/silicon/pai/update_icon.dm +++ b/code/modules/mob/living/silicon/pai/update_icon.dm @@ -6,8 +6,10 @@ if(chassis == "dynamic") //handle dynamic generated icons icon = dynamic_chassis_icons[dynamic_chassis] var/list/states = icon_states(icon) - var/has_resting_state = ("rest" in states) - icon_state = (resting && has_resting_state)? "rest" : "" + if(resting) //The next line is some bullshit but I can make it worse if you want and make it a single line instead of four.. :) + icon_state = (dynamic_chassis_sit && ("sit" in states) && "sit") || (dynamic_chassis_bellyup && ("bellyup" in states) && "bellyup") || (("rest") in states && "rest") || "" + else + icon_state = "" rotate_on_lying = FALSE else if(chassis == "custom") icon = custom_holoform_icon diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm index 7e7a77538a..ef9f022e80 100644 --- a/modular_citadel/code/modules/mob/cit_emotes.dm +++ b/modular_citadel/code/modules/mob/cit_emotes.dm @@ -77,8 +77,7 @@ restraint_check = TRUE emote_type = EMOTE_AUDIBLE sound = 'sound/effects/snap01.ogg' - mob_type_allowed_typecache = list(/mob/living/carbon/) - + mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai) /datum/emote/living/snap key = "snap" @@ -87,7 +86,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/snap/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -101,7 +100,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/snap2/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -115,7 +114,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/snap3/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -129,7 +128,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/awoo/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -143,7 +142,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/nya/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -157,7 +156,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/weh/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -171,7 +170,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/peep/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -190,10 +189,9 @@ key_third_person = "lets out a tiny squeak" message = "lets out a tiny squeak!" emote_type = EMOTE_AUDIBLE - mob_type_allowed_typecache = list(/mob/living/carbon) /datum/emote/living/mothsqueak/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -207,7 +205,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/merp/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 @@ -221,7 +219,7 @@ emote_type = EMOTE_AUDIBLE /datum/emote/living/bark/run_emote(mob/living/user, params) - if(ishuman(user)) + if(iscarbon(user) || ispAI(user)) if(user.nextsoundemote >= world.time) return user.nextsoundemote = world.time + 7 diff --git a/tgstation.dme b/tgstation.dme index a7b22d7d7a..884c16b36c 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1530,7 +1530,6 @@ #include "code\modules\client\preferences_toggles.dm" #include "code\modules\client\preferences_vr.dm" #include "code\modules\client\verbs\aooc.dm" -#include "code\modules\client\verbs\custom_holoform.dm" #include "code\modules\client\verbs\etips.dm" #include "code\modules\client\verbs\looc.dm" #include "code\modules\client\verbs\ooc.dm" @@ -2153,6 +2152,7 @@ #include "code\modules\mob\living\carbon\monkey\monkey_defense.dm" #include "code\modules\mob\living\carbon\monkey\punpun.dm" #include "code\modules\mob\living\carbon\monkey\update_icons.dm" +#include "code\modules\mob\living\silicon\custom_holoform.dm" #include "code\modules\mob\living\silicon\damage_procs.dm" #include "code\modules\mob\living\silicon\death.dm" #include "code\modules\mob\living\silicon\examine.dm" From 80ffb13f06462a49a09da8eccc4579e65b340c96 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 15 Dec 2019 23:24:43 -0700 Subject: [PATCH 13/29] bypass joblock --- code/__HELPERS/custom_holoforms.dm | 2 +- code/controllers/subsystem/job.dm | 4 ++-- code/modules/mob/living/silicon/pai/pai_defense.dm | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm index 77823cc012..3710c74818 100644 --- a/code/__HELPERS/custom_holoforms.dm +++ b/code/__HELPERS/custom_holoforms.dm @@ -5,7 +5,7 @@ var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) prefs.copy_to(mannequin) if(apply_loadout && prefs.parent) - SSjob.equip_loadout(prefs.parent.mob, mannequin) + SSjob.equip_loadout(prefs.parent.mob, mannequin, bypass_prereqs = TRUE) if(copy_job) var/datum/job/highest = prefs.get_highest_job() if(highest && !istype(highest, /datum/job/ai) && !istype(highest, /datum/job/cyborg)) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index af7ae825f4..7597a9229a 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -658,7 +658,7 @@ SUBSYSTEM_DEF(job) message_admins(msg) CRASH(msg) -/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, equipbackpackstuff) +/datum/controller/subsystem/job/proc/equip_loadout(mob/dead/new_player/N, mob/living/M, equipbackpackstuff, bypass_prereqs = FALSE) var/mob/the_mob = N if(!the_mob) the_mob = M // cause this doesn't get assigned if player is a latejoiner @@ -671,7 +671,7 @@ SUBSYSTEM_DEF(job) if(!G) continue var/permitted = TRUE - if(G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles)) + if(!bypass_prereqs && G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles)) permitted = FALSE if(G.donoritem && !G.donator_ckey_check(the_mob.client.ckey)) permitted = FALSE diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index dda8ddfebd..10a3171428 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -47,7 +47,7 @@ /mob/living/silicon/pai/bullet_act(obj/item/projectile/Proj) if(Proj.stun) fold_in(force = TRUE) - src.visible_message("The electrically-charged projectile disrupts [src]'s holomatrix, forcing [src] to fold in!") + visible_message("The electrically-charged projectile disrupts [src]'s holomatrix, forcing [src] to fold in!") . = ..(Proj) /mob/living/silicon/pai/stripPanelUnequip(obj/item/what, mob/who, where) //prevents stripping From f11ab5eb614464ec370e181b24450f22b59c6fc0 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 15 Dec 2019 23:29:25 -0700 Subject: [PATCH 14/29] hm --- code/modules/mob/living/silicon/pai/update_icon.dm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/pai/update_icon.dm b/code/modules/mob/living/silicon/pai/update_icon.dm index 67c75b8fa9..e84d7cd02f 100644 --- a/code/modules/mob/living/silicon/pai/update_icon.dm +++ b/code/modules/mob/living/silicon/pai/update_icon.dm @@ -6,10 +6,14 @@ if(chassis == "dynamic") //handle dynamic generated icons icon = dynamic_chassis_icons[dynamic_chassis] var/list/states = icon_states(icon) + icon_state = "" if(resting) //The next line is some bullshit but I can make it worse if you want and make it a single line instead of four.. :) - icon_state = (dynamic_chassis_sit && ("sit" in states) && "sit") || (dynamic_chassis_bellyup && ("bellyup" in states) && "bellyup") || (("rest") in states && "rest") || "" - else - icon_state = "" + if(dynamic_chassis_sit && ("sit") in states) + icon_state = "sit" + else if(dynamic_chassis_bellyup && ("bellyup") in states) + icon_state = "bellyup" + else if("rest" in states) + icon_state = "rest" rotate_on_lying = FALSE else if(chassis == "custom") icon = custom_holoform_icon From a784235e359bddbc59ead5de04729c0f09c68816 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Mon, 16 Dec 2019 02:05:52 -0700 Subject: [PATCH 15/29] scanline --- code/__HELPERS/custom_holoforms.dm | 9 +++++++++ code/__HELPERS/icons.dm | 4 +++- icons/effects/effects.dmi | Bin 885670 -> 889044 bytes icons/mob/slimes.dmi | Bin 86112 -> 86112 bytes 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm index 3710c74818..ec932b3426 100644 --- a/code/__HELPERS/custom_holoforms.dm +++ b/code/__HELPERS/custom_holoforms.dm @@ -21,20 +21,29 @@ mannequin.equip_to_slot_if_possible(I, SLOT_HANDS, TRUE, TRUE, TRUE, TRUE) COMPILE_OVERLAYS(mannequin) + CHECK_TICK mannequin.setDir(NORTH) var/icon/north = getFlatIcon(mannequin) + CHECK_TICK mannequin.setDir(SOUTH) var/icon/south = getFlatIcon(mannequin) + CHECK_TICK mannequin.setDir(EAST) var/icon/east = getFlatIcon(mannequin) + CHECK_TICK mannequin.setDir(WEST) var/icon/west = getFlatIcon(mannequin) + CHECK_TICK var/icon/combined = new combined.Insert(north, dir = NORTH) + CHECK_TICK combined.Insert(south, dir = SOUTH) + CHECK_TICK combined.Insert(east, dir = EAST) + CHECK_TICK combined.Insert(west, dir = WEST) + CHECK_TICK unset_busy_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) return combined diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 68dd423527..cb50db74b6 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -949,8 +949,10 @@ world /proc/getPAIHologramIcon(icon/A, safety = TRUE) var/icon/flat_icon = safety? A : new(A) - flat_icon.SetIntensity(0.8, 1, 1) + flat_icon.SetIntensity(0.8, 1, 0.9) flat_icon.ChangeOpacity(0.8) + var/icon/alpha_mask = new('icons/effects/effects.dmi', "scanlineslow")//Scanline effect. + flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. return flat_icon //What the mob looks like as animated static diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index e13ce10347ed26057ae7751601b3337497aa0fd1..51e945308713d389fac18234f5590e2511d6f227 100644 GIT binary patch literal 889044 zcmZU)1yoyI5G{PMBE?d?c%ZmLaVJQj6nA%rBEhYO7m61zP$&+?Jy2W<#T|;KB{;<) z`SZQ^etU1$y1B_&SvfOvXU^=|=OkA9l`0XzQvv`0h+e2cbO8Xn=f4Z@5qgADT`B_r z9$^RT8~Z^VeC>Q(Ui-Otc>+LSZnf!8&lPb}*&!|FMx((x*2)(oZ9KX>1nwQ*WXM=t zSV5&~>0h@>wP3j4o zU)ahK7B@0D?R&42Mbpb3%` B(u^iA6h0)D< z@K$ALVegsB|DAf1VEU4}x(LtgU72Zl(&_Rp7BxH9hC?hz!&9pyCI{+g1z9_LgTHmk zg5z`_H+bfJoMqXRXD}!kW69uDfOoj-ymV&|xtV}}gDSF`^Ieh7*s8W+-H=djar)=K z%_}3Gd~8PW=}G;oOMRE>R_vKA$vUktdVhu&^xR4Z`v}Cc!mM+h2THGaAb8DVd0yr1 zXc^PDUyYLl_#Fj7RugA+@Gt$NG&=ZKFL| ThF`vFLk`oUW^@GHCbw>@Gu}J> zdLB5euH{^-28XAOWD4L3k7oK%+C1$a#JiGG0PXqYCH9=U;f$3^-o7K{pCs%xT-K+z zQE4zunT(B m=dz_xSb~H}bG|k@%jM+z~ANX|5q%w|-_ZLL+dV^(hGIR-z zC>Gz?(W?lng_@xvev}dFN6-D- x7H#3_%i#}$+&Lq@@R|2q2q9XcGVe|@ vR2^mi#&?-X;oOXwSK# z3+Fa6YKyY6> B5U$75EU65Gqw}O}-4 ZAsDIFETw}~plSGCwE~wZ#4gQ; z6|5lAU!Ks;(0`dK05eaG=8{*2a(-7)jP7k^c6s*Z^Vr~NrYYHn6C4;-e@K<&I^H?k z6#9PjPpcy8qr{tcUkKphG_E$iq=nCyCkqulpOFR={>UXOZ>rsU2qPNGSt1%ocx_V_ z-p7-WPBVaH+G3|d^~twpIOXOnvB%77Z`>NoUl;o34lIp%7I6Pmz!zG0)QnNHkU`sM z&n;U0H3$oV;cLk_PWoPLmM$DPvnCyt>IL)oF13O+`Sz zIu3q4K~^`vJtwqn9jC@NFAjJ8Z;Zms$m98Aj#qw&0CM*B3n>DY?29QAPSwT VE93Y$ci+DLmgijiwgZ*g zgEpTg-_^7!$EL^sxeQM_INTZaPa&Ikdis5G&+csZ&hG5`5V03wJlXLF5boCj04CrC zL_t3=_n=ENf%Szy{Ayj;_bO(1c)VhN|F2Da2VF`7&)cWg*;P3Dta!?JA=x=h)$)ap zFiAQp=19%H0fC!A{Mh@m sbR)07T+x6CFXJ0(%86auhO^qv12Ig z?4KJuG_%m*j)q~i^SciD!{((7tqm<^R#LCE2u)IfOhpHs=GW?+02jp9|1p_EhYS2H zBV*;~?}w?8>jtL|Xl8LNVf4F^&CS*>IX(euBKB>kXpcORGz#Ln;-<7tHW tU;d803wlSx z;J`@xu6PqWzqP=uzn!l|L4mlgx9mE+Yd?Der|#e0b80%x#H5JBdj-^)rpKJ7rvNqj zGwQ33SZ~!r8r*nj2 ?PV!!C=HWKDzRIBXM2 z$k%EsyT#IV*flpr3FO7vWX^qZR^$*@Vp*jv5qkNt*}91twr%BhvP2=$Xs?hkc2o57 zMJq8>8>@+WKV(M9B+A{~j=aOYgM$|(H$T0*Qe_8#d1UJ2f?8SBae;Il%p@DnKTzDG zU&c}VC8Rc*gg@Levo{;l-Q?@m$S-`;ay F4SHY`-wkhjAC9<|(>$_l(_@e4b=WA`x3?H)MB)-qcSy z@TB ^zSL{~A(Pk$t;H_{~5XlDJ-m!07Ul&k5breVL zAlTn|-EXQ4nfrx*9D=3)HFhx97_Io!XA>bHk!wgB*ZSvPGPD!fMzyB9jk|RF+j_Ae zf%^$ov})go&Ad;wH?O93pg=C2tfk#OiE8Sp4aV)HLWEGbc_&`;LH5&3ES|8`Iv6TR z2&P==kD-4I$;p?4vK$ doXsbH6B{=Yl6zr&oM{EETScP_Br%xIBh+F>N_nJ_H8fy)Xd5wI%~AfK7rz4 zB6P%TCyc;vMoc<}M8=Yh1%sNe?m4>vZNigp#M0Q2RKN+H^~$-^Tr!qB?Rg@R%EQR@ z(!Z(SU*uk_MBE47ay)cbo!7jMe6F-Ja@nzDE(*2MqY)YSsBOPi0|zQ=7(8v|xZ<|x zzWn^NVA8hVJ_e0!4g-CmNAb>i=PaW{EfAWe9zz+@2~m9`4Slzizk 77`Mo_L5uyn?=){h%m8iTDo@8P34S=-gzes)$B+-J5YQOlxXnZY$`tS{%R4x9J^ zrKPW;QqQigp0-<9L+yVt*@i6zB?F$8jOE3(c~sReJn6ZEf*uYUTJ30cK*loE?*V zm6;x`?1l=Uu+shZaqjTy9FY);|K 5hEkk3b!x#Jmf-{b%{SXfv*_v^f8lnIE8mE4-ZApnKt}Yz~BD- z_hZir;)B(eqVT1==Eq`3YH!zkMs?gR9D=MhBAledPdJD&$8K9p%H4|Jbq udhQxGP #nw?8a| z#eT2I4YG>!9Id~sb)y }lFhxHgQYT1m9coZ<9(O#OAubcOr`vyvMa(@<@4&+;tw?L}+@3yL z<+{!syqCh_yUim_%_DrDg5Yc8n2TpE(ig{m0ZW2@Wab<}^h^uSq}TMnc2*qb)B!w| z)%674%6m5L71g5UE1JrqTpvm__v=S@U}M (EJyv{;M*1`gxb3B{t1YhMjo_O}+X{j=ZL-LNNjKjF2YOYsZHOo9B#(;wpEd1W zo9|UT74H=W!SZwCt=~z$|CK_gWb(dsC^|an_lG+ZpzqzAmG37OAotXEddJtX7Ru>Y zmzqA|yLkb^_|}y^c=jfM=(B&WW^C|E$~1(z5(vC&;IZ)@#~S_Qa! Jw8#bfUMnMfgFW!e6E<491pdBnZ={@(~K*i Tp4?ae($g< 0vcZT4 zhq9cXbk>ItzAG*(DF2z}&5K5;K932VbtVn*U20$7-{Q^J0&h?NfD%~xF7VLZ_ye B%vGDD UOrP zi)Fh99BZ19^)b8`Cg13k3w)Q3XP>Q_^Wn-Tchq}w746>LRit!Ky)e1T-&c}fc+6SZ zalAlNZ?f0cQvQHgO|F~x^wR^M>gQ g;1@NDzzrivzlvZObQ98#iWJ-Nb5s(cwu?1NkH8T>u)c1m}e zSToZPx~}WK%nfyTyy%E8{bPR&ZB)%;HuIqF=~&GmZLhcu&I)s1Q4Gt>ES@;ELbm1T zPG-8ewwYEGdZ046oW<~mRo3f B(D43n><9K3VWF8x;?q8rmDf`NG=ylB^#sI|isepr7HhT38e+9TQ+Hdv zKWC$o6Xm|v-(s|&V_1K6W-e$XwOU~uStA?pTq-3!EKzeQgLOZ1$-eJngr&av2qKR3b zta0x%!S99|`7mj6bKM}f`av$dN&nsl0W%*mqqq#TDBBG@G3z*?s-35VCHk ~(aAdg|4qO7mdOxN16KT$6jm&=##M_u{_q>Z%i}jA0@{ zH)p$svt#XPCIy-S2#c0BB_Y}MJgN$w4b84Akv9X{9nBB%cF-_UL~xB4>aaC2 A!U8kzK@v`VpQC)&8z0a~EL9OTZmy` OCTHykA7Dx>j1{6KMdB+_m^+pQS&o z>?qT*GS|Uvv4+_XecUq!TX~QBKBrmO(gHpS23pek*nXIT9^{gM&S6b*Y(#dzw4l|{ zwN-%4MstJ?yy`d~h6Wgiur9c}%Tn6^K ?Y^F6axlm9}9_7YYw6tNK+@L3Gj>am%Z_bHI;W$uZ6-5BgEHVi+^^{R&`C*^tb2P zxqtq_m^k_!zBGo~3S+)kenI6cb&@yO!~E0sSvxbh6~X>3l}@UI1K70=tV@%6iB aDqBs GBEsEUpJ&aS U%T0Zy zbhqrTP*iILs|rrtx&IW=9UggccflsI+1{YL7v{4h*j(<}oYy{3+x*}qs@xVczl&BB z{A1!gbYmJ*TMI?~uTsJ(I~Vz%(u;DPSXu?)yY{DdY$*o!m_V!gJ?878h4|2|1*O20 zmFKAo&-F{M4btAZ=uPh&L*vjLNa{hs!U`HjHssoUxW@UFP&Wj m^=zo(1hc8#~^kn5~cEvE)(ezT~Mq#K=CCH}_|pG|F&)c%AxbfXy6k zP&HF4=CCF?62Q+ZYTlG^x3j;qv0FDX@mVanovO!RBWdLlre hd$$H23p87a zSgYGkYd $_?FP*)Vss&nG{svuOY`dlm%s*Elwr;>)2&;I-7f~?uMyI*bBTt&a zWZ9Q?EfDeR{i<914w-y|)T5SanM(4m+R9Xe_{PqwX(4lu-NQv=&4{Ha)@1{NLCrvB zKs!&V!~+#CQu2TyO65}js~HunpU3c}!gtNF!g)seD6VCqmOWFJYG|l{m&CV9=-yj^ zI j8#_%Y+7=`daKP+4$W5J^@KjQX<8vtA~X}T}!E(U5t;@C3? 9AE5c6q-3{rYVW)2 zBM+%Y{TKQ7lJQ$k>0yog7HHOEY9uf;ECo51@E_gsn|3K>k1-)Cb?CWN{`?5-bLpqA zh<$fHFN;# !SK|4?7M7Rxu^OLqN*{v@$&yGUJn z5ugp7e*deFZ7OZ&n0G+i`N{oduhVnr4zQfodAOA3lR4tCzui(Ob3Q#k;=0`4hNcuY zd~)`NGBPq+8n+f)Gd{@F6qVHtX^wD*uQk>UIjpjsR+if&DeIPDRsEmbo(uUt;O6pw z$kS?Ie)@kCpJErBI`lOEU#Z^yBKN6%>{q=^8eimE6vVY9Rzc~BNb_vp?>}GANC7Q` z?&nxRAcu`Tgco`mVw0n1hYx%H=O;F6&z#FsJGWte81DD(!EXMVtwaeVD<0ln!rQq2 z Ydy3afYq@1ZV#bSHQppi|DBI#3g($VYN zeFyx)DlOI;2N@X#BD-%w=`ku|>NC9`RL$5tMQjwhkJ{onLXsB>E{tbRsl{ZBlHD7a zGMf&JnqGj=gO+E3l7k!f6SC6zqLn18eieZu-fPzp()8Q!PN`AO5sVB8LyKv$zY 9$i8dS>Tx=cE`ufPpa=$7Ldgh zMR03@b|_Sk`uSaU0ljEn;njgRg1jr1E}f%J^aGgk03rK{>RE<6Sf1khXO8V#Mt2TR zeO}017t;nLa#Z*7Uuz{Lo3drZ8nlfM`q(FjN4_ELp =RWAEcDvN)1xo|(hCxV}E`ZA$;Xlr>71 z#qH~*O_so;a7Euf<}q?dhJ>62q(jm>r^$?#^T7KmZzu-vTE9p@D%^1GxtM}GV|CdW zQo;8_&&nT3*^07SY3G<8Q#R%9sfjyz%h|Sg((g6gAsIO6_82zuJ>GnHxB9ARvMbiv zZ*8OGB53Z%*I~ql{wjy>n{|DRuj4q^3K2{O1gV;2VwB~QvmN+_y9OOK^>na5LiY4d znsg|1Sfugxcp&0q)6RS&W%$@}7o7tIg7CClLA}|7HXl6WPoD^Wb@BM6Z&S*%@Bbk3 z6aV^4;SYDq`nbc&+@`+bpDVjdaqYRX;Q x@z1i%Cu{%;1j{!LX>O{O$J%a#SXKFl0$r3tD5-L znq%7bj2-*8VltDGcK_NXYb0l7j=QSH>%U$s+1vQgQ{KIxEc{-+4dY5~tT?qA{C;|J z@_HMK1Wk!o3@lsE7Nn))MWE~PY}d6HW*_pkk9f7?lpHlNyCyWeDQ(hPAbXYajd!33 zn$2{+yKNSJO3YsQzB40ZjE?A0O4P~)?k-H(0(yjK^*lB4Uy8T9$K2^a)+bsFLLEvb zeBmVt&0OcV3lf)T9LmaX)$MLxFyhl)<-p%Sxbl)q#NN9#Eoj3O9vU>de#VD(vUDik ziQCZ7iR#_m$=1LH|NCqq @3!P&LKV2Ev2 zg8GqJrEv?N-Y6w3O5=wD$x}M8=`-c=p9TxNTeOE2zJc~(Ir+Q1uPHW3lo@^L#T4en zj!lv*;I_<@ZHQNO=27Rx NeYh+$@vvlXbAf?ji8_FeUM~~s|2xqFu!RhPZYdp)= z0szp8lR!d)8mB+}?5&dv!t+wDD~(HbXrDLy5S~8r?= {twyh*R_v3i|0y*8h4|& z0_qy6k;eKQJJ44Jem3XVuW$c+xNEx(o1w1S1k`C5h}ipjxtv}_2+8Kka+zU|aq-Y6 z#=D>pXU^465hM)m0enRU+wSRgB2QU2p?y)TmU8CL687w8q)kn5I_iyg4Y{YQB|H7J zBwB6wW-@FgxE8<9kYg0_RZPGd@c*-d9x63DZ$rBerM>+tI=ju)T(}|H7M`;#m!q9n zy4Ny#hRIWVS6lvYE-6~RFzp-ZQ1Tz+9F0cOQN?KJ9|<1;b3KG_D`u#zNjRd-8-d22 z#5)&zu>3R ns7&;eMqv(0YzLrZw{HHvhW;M*i z$!x#r??a=@#bV=`yZSt$9MPVWF;n|@8;vU(PYsoW2tYk?j_5{l-=CC6*CFM`;J=1z z=y@EEk SjQHCH8VSFWMmX&gjGT{D2U8 zC BSt=pAr$Hmb*>W1j%hRggNiOktc6gjd!X9A>=B{(w~!;@8@ccEuU2g zxj!*Xe?DZBIyhXq(=|yM=7AufsO+{9t2z^9_xAGPu$>PHGQH#)M3tKV1u93Ee6uwB z7~+Yq-2NAR)oYW)JJ%44JlYR;z#b{Ve_Qeo%Z7ya8e@91yYbxL<9*5Rd_Ut1^GtS75QMjqm zC)k!f=YwpbR)e +X{iwOH`1LaJQ)u)V~p)n ?ai$C8+~6MuHoy<;>k;^wDQvXqMf z1?Hz{X@~NP)diV*Pu)b39lIroj3zCeO>PsV$n0NY`#ee+f@ePtwF|_^&nuccE5hQI z|ME^YStu_R>YI#eKMERDTlWsSu|$TBJkJP s;xqHSyvtR1iSNntm2X z_wHp1`)Ncz5l(Yn1szE9HL9^wBb~X<#My!Xq4%w$1aID(^Z7$IpWa>+hUN-|;BnAC zajM6Y9Pyq}F1;m@DP>ElHhOEQ5H&;f!{zPC=`~22U+(_9^C>s9f>5OoU)o!)OO4h4 z|2_-A40~6?b&8P89AVqirfiupsHx}r!5B{od!#yMq5DojmR;3g%P5Plp}6 !wIDh2r$LD0WD(lNEVk*4HMFCkd<2t@MR~ 4)l8k zu{x;djBlA=ST?k73d=Vc|HQ~!`{V}~8lB2Xg-`9GNcm_a82NFeSe08)36aGFd)8 zIo%I-S?0?!p_Vi5{^D-Cb%{{qjefUjAJ`avCr53yft mkPP_JrL^QDNtaayRtG-8+?s=uxyyg-~j&iiA z koAO1`&x76u`iXp& z4m_z5_g$+gR_)u|QNa2zu35%1>myG6ir7u {ZJWrygr4pn`!+3QhVj_79QDg) zs9kDC2G~Ur^MI}H(1r`4I}hEMzpaWZUGNIA;><+fX71q4zB&6XWkfcH^u;lxlPXd2 zHMV3R7roQRzdaVWx6y?Ce>`{iZkumL2-Ag%qcQptIsc);j ;HrLB _!@hi!Z>M;(bsiAR2llU_9UY19WUE$vgGb7!*6~!5Zn44@9 z&k)zvdf=Mit=XQT`|UM<3iwA@t)vQwIlm334jDI~JVQfAPFvr~GpVoh!+@-hAxHk{ zWuUlBC^rB4-ex-&UA?*}(Sv4?VV|edO3&uI-3uX)Puzc&;)M1bX7cEUjNZo>232V) z+AN^^jvF4d!a4r(-Q(Ls15K!UJ9^5%dympT(Z^LJ9}&|34DvRdbaIWaR*mrKf*2#m zT9HLbCVRF=rTAZf8=u@YR*XiTIC6Q}+dsu05o}{<0*T1;Es(OCZv<(z%CLJmWVhPf z30;|hdYD35z2@z{c69E^gsXdExVI~CXwMO<#Qu3M{zvQg|Ku3RGTN|AH!CFf*WY+& zEe6f}F!vI!6tykmDi0>}_u+kOP~>1}i0`bt+Gpm;XV7{TH~v@0G4XTz+2qTik-op} zaM?druy;1|I3ZIDR`Y^mqrG~n$Sk3WF3+G*4kel)o|!2_D6%b+-zq=pCv>taFhO%n z&wi~Gz9Ndd#kSK1r`VimJE9g7^jg!TMvaMD4~HC8<%qjWB7Nb2nHb~5iM9C1{_Mzk zhe @@q za3}thn9bmTC+k`C02G!gMxv4>VSC2VF&z2~VQw@9)lpfa3>z2n?VrtxaLn_ivRDTv zWinK{NQ6~zOnP+gjfu!)8fA$bE+aU!W(MWc?Yl1PeIqHn^IsCz{V(!+WQC49vyU0K zub86aEfM<(t65E{G%P2&o-(PN%vnHvROa JuIv2c=#u zDo17PtbMFX5W5SiMOB=adZpG%Ij+}JeYfV=UsRUlnwJQeI;sE<)Hb?nnqeD(hz;kS zXEx2OvCaOK9QCQ;8l7pBb~MO@vmIw-eW=>@nDJg>wC{j<`sA-{1KieB!-z?p{Qp6s zFsPuR^7_3F@4yV}g4Nj1T{H_4O@a}AcukE&_xzTf#$Fh(zk>6HF)f?W^amlRBvIU= zO+}2|EVR2~th<5`O7QZbcb{~%%AsSQI;hQ4wXtZ(J=p=~GVATtew3?8-5?h0@f78d zdn}rOTE#ThK+Bj9an!>|J&};9scCaOm{LOXG1Z9DnnSG_P|o$9h1-OZ)#3dOg?ClP z&tWdlSs6#K#|DWXrMDcV9KG18TTO`n%i7l>OQn!&10i&?=mEZ88T &l7C6C2R*ZtBI_2DwQ@c{!M)dA!I zc?e|h{HA&}xzrtf%m7J2okw_N@iE^bmX5xT?=h4dC2avY!^vk4r&S$h`3t`SiXU= zO6F}Sfl1Pr6{ wuc6Lo%*8nC?C z`%VvA9-@E7h_d_DJd-h%hzh>JLOKw|8Y%-Zk&$>{pYVY{`;gUO>TRoU5t%Ns?n+E% zeA@4g(=t6 j zJA4{(@yj$`hrBmbHku=jDbX&r2(SBkfZtLaIW+}xt)4oUo;Ae+zZFz*Y{ Y_A)&UbXV@%XN(%(4LQqlQ;v7u%9Il7l4A;V *}S=rFsbx_T@Rpeo7Qo_BoOMVyxuDqY`vi$jQY(Onm8_KDureDs&|=2 zU~*tt;{J~+>d%kUy9cb7`_JUTi~!ze7QsEpt5?XO^9`c6DCq9B)m)2I-i8KhaP4;H zH0h}hXOTST+*HiSHI>bi*rnxPK#YQZGW<|k;Y2oMot}xn97V zk}MYWWinEowt51AA=`2Nt!pB) z5H|3m1PQD?QswJVB g;iz^CHv~Y Wc{G1dp1%#a(xLDG}ZT#
?2!Z2{?|hEeWfnI!R3|mq=t{_4tI;_(PH00t8Y-J9K*&s}6jOv( z)dYA7ZYBoE29YK|OlNlY1F_c*)kH-c`}ui!K{J16^K)|{=(J=@v`gOMOruIHWYT#@ z0g!?*!KOeRI0dN@QM--gRAV4^0$x7?HXT3*W*fJZwr6SO%t70I;G&qa;-;fV3cv8* zeko4dXSU6Z5dq!2`b>ZZaeHmL`?FUM!@Lt|P0ifk4#=#5y2-{>L{$^gtoq`+;9w~n zwSLvD+I@T_J=sy*v_4~c9GL&DY5pK6pBX%c&daI4w(4&5peaJo2GbTH$PN$~ci-p? z>MIDl%!=C 4tKV4fFLeUx!#*#AnsZ{WiVe=WSV&@Oganfo4|lx}ud05CbrggM5QP_h-8r ziVzaue&-B-4NeUBnTNQ6b&ssLWMf#l W2hZP z2dT-T3i11Xspw$aQ0tN_FY~^)b0k(~MfV*^>shVnl~K>nqrg&5k_rr!q^H1sa~5XB z0ycHqJviWzm5_LW2s (T;xTdyBSV^Zc@SqC^~6bPx~x_V{k` z(BI(OjE<=r7%VvW`LCaAH|pW|+)vUXR4+#s0I@c}Fo2Gi!0o>oEeZfThMK7;Gtmq9 z6RXxU-aif=sgQ _bCCr}ei14+cs? z#2;c>R}Po&u8x&p8%Dry;Rb$iKKC~*$WtIPOOssLn>q>|H>Pfy)KQlQ2ZY<=Y>v&J zVs@vDV7CSxfk*!L8%L+dcd!OOq)`R?+EFwqHscpvdO)6OT8;dxS8MOGu%IK?$kr}l zRUVe_K{owb-|dRnLX5o?4CzG!{2sFkR|b1qA6C&0d3AE!ekbZ xNTMXF-9 zilf-$-yq ivGofmAxsSm{cA_z(oS@#JPG;$eX?KdDzL0I8*0vA{xbM0yhfK_=?H zVI%m=ArLbfM{S=7wFRBLAC4!zAWU8dI`dGzef>-N;>qT#^V8D^c3@=7sNdDCuV-1 S=4^-Q 9|R-bsK zkAI$V38>D0E*ErkRkjsFegLd(?#DiyMg)OY|K8`{h5bwQCB^)8bFIqyvFv$~Zp_yw zn+nX}7ecjaJU>811hMzV<%t|~IuHdaonxjH)g2lz$`^7x1X*7SfZcsKmu-ciBG3 M z(PFBJ6rdUc_E4|jZ8Jy;W-e?d*6A|+%*G?`5`SGZs%44Y7V{>5Sfuu~&C=YvLDd82 zk6}H|hvvf3`Axze9x-4+VcG=}^pb)PywSDz*J)7#wF2S1SNlPigN_IZi5u?3BBRHA zG_S!K=ATiS`0{xZ=jS(!k)3{_Sn?#1SRjp&Y4FOu*3QZ+czngeU5J!AG=P-i*_IL9 zx9IoIpR%io`{VbukI&_bY^$%_Yp)ua3EZf6563F+P8oT^V&;003lHl{Yk>KQLbC zAUe3LM>{m+e3%PapZE{^K0c3-Lav;`hEaD7Sdw{ r z<3)_BwL0|(W0DJ>kia>-Y)`O1k>X(C1gpOJM#|I(6yhY{7?TJ7R r{-c0Lo zu45q}|3_;7D6+u{wF&F^byN~9@9DeM?Xil(HD AhtH02WuNOl`@u;3oi++u=>0 zTr0cj)qGYl2c}(ufG{bjUHM52UTd`9>j ;RToWAj8(+; |aQUT(>nTP)C;MOwjs+IzTt;pC-2GvUvZY_KL8_S bZD%$jpjbohXPKeIubakh{hcN+yL5;#GZ zB)_l MvnRuyuYrrU9}%0&@Ajof)pk|(JU6NAB|*ssm$0GeVdf-*O{ELJlW z#TNZ}2}#8Gy|X)(IaNf~A8VBz6I$H_?>8z*C3!R7t^s+|BpTWO00s+1+bc)}#J_$# z@ HzBj`e!;@wmIi-Q<5YuOTp;UHT@bRTYBvFy`cWuzI-+um}Rh z6%9jl>{p@Ry!3ckNeq%ZL=o8dAP`=k_M~G&jhpbiY4j0Ba5oI*m6(*opV^BQ$pHKl z0JSmWVg9`cR)mb2B06NBw4V8==~{pZNOfY>B)b!QANup*nz7Eo!NE@lUsSDU#dO}F z3nAR s9(NZ9b%I||auB2{KauE7VVW`k zr82)0ERqaCJw!;M4jNE{G1Nclj)hdM$OS`UBn>NkZ9PcYlm^;w7;$oG$&&BwlhyNQ z78ODG$_M8C{Q%p-{l?#WFT5`@kbM?i{x(ZDNR{F&x|+y>FS0Z<@!s{9P&k*g=bMq% z$2^~(aGakg^$vZ4L09Zcj2+XS`d(l#IVKj=l Xc?tZKfFLk(jVsSK&7+9 !k6>PBM8D zA3aishC(nM`N2X_!%~!|{0XT35~=`Fhos>ZiryMLPRD02=!G!9P})qc&FHe@v2VXq zgw#Xq8`(5=Fp5-Tp2kWG?#%+Zd4gl#V`TpNh4Y*Gy%j&zVBsnlzKW5|9yWsH8&;69 zJ`SP~hZjHjj#;;keniqqRLUG~N X`kNd{i>5M1) z7ut@~sp|YI{ 6lxU^M>YcDg~GHi?g6w}cT%&ty&dIW_qP){d&&+$i{dDNQ&*>PT)) z2zrbOP6j|+FIG>=NxRi>0aQM&0L~jRb`=482&Ft&+k!;EmKozDhN%wE9>*47vU cx97)f4AO6*vjo}IKPkV _dF7t_Ip;mj zIpX(j$s23Kz}XDnVXd0ld%te3aq({OH=ffb+RG-|p{hbZo@)mlUW~j}`b^FQc0oM? zJYJ*Dvs>a3CJ+hqKC8W7Ucj9Hxt|?M-5$*fEF;*OmM;64-0>~+D)d?PVtxxS$$4H3x3-_|9Qsi>p-O$qn9z%K)=P_@DFxY zdqbC7s&siWonwq!V57MP)z#DXFVwN;ys)cc7u*>yO*V|~JD{QqB?F*B8F8!yvp-*> z3}Sybup87iNJno)xOozrBIbWsVB418G|lb#nj%Bi)D*?)1t8kc;aCPI=pD5aN0CA3 zS`wW&2tH3~kf)FZkJyU1oXO`tT Ml-vli!tSJ|67+bn5}M<8E&oq%jkrPlNW%O9-?_l2-a2s?uhh2#WXD>Vc%R zPt67ZFEW*C#MN`|unQ5UOL$hvmxfbpRtXkqNZ(OuDnm?1|1wJR12vWhdP3*>ZrGbz zSp|?|taU + jsLZP3`lrXA}EyfF&77wM#W)Fw?6 zzS( Xqe4j$CsT0Uqt(Dz?W`B zPH4e^LvZ8@(;q7d {9s@#wZ~eG+r5h%4;F7O@{pcUI2E|*$E7r zcTlDrRUXTlxCZC;JVPxRyktw-*-9_~q@TwOjvv%zRf*PQC}t|=d3GN`r%26H+fe`Q zr=(qyFx>hv{%%EqvAp7HSADf9R;jo%UQ-ovQaDjU;Y7GDHFE<0u&Ype@By`V|6ra9 z{Xdp|LRYx)j+>?5^9ekZa}ta3Q*aO0_`LEkbyer^vR9vF3Rrq2Z4KRp7z6N8y?C~w zJt8qlOo;xSE0JQXztP#B#D;RfmT=>Pi>@D=+yHRnkAHr2%~19w*@4A_DSl;oYS*P% zK=5=95Vr`RHT(yN2}CD3Qi9jd5_+(#eopX0OWHEqZ^ZFpCH-W4ac_-0vVRYbI26P-WbCn`p~XV^(j^OPZgiKhnOH0UGmOm-krd-6%u zfte+Y3S^J?g~MB1dz~pSgoi)u&bSX(EJ&(-bL?VGbl+g%dCQkSoj1bGc@|X2rmj$6 z{+)xku(l9^5-Le=r3JVV!<`7hozXaTzOS kr7M}R@hS{cBzwAJA@b|ZtrMGJ+0AX;%SlR}IQ8zj#+do0v8yp)e*uNzb z@H$wZyft#G=O#bjU^(}y8+$F^i3ukH9(!`cd%rj*T6+jNbVda~yh9(l>NI((B2>EE zLIHfUc;Lyw?t&86;+PVW?1B^vf%Q-g0-hWi=nxn{0su0#1bj{S{`=h4_d}G=oh{(@ z#D^jD<2V9ibjAY%!8AD}LbW(vQN;e?> rwIF)^cbt2JdLPo_&m%rap3W=ncfHlcybI8D5F&Ir=H04f4%1qN)=YI!5uF! zNf;asI`eib;$t6LiJ#X10{P9f_9;Em;UGa5THNq-Zk3m&Zw5>c*~o4N36GFK%pE&x z0KW|~BKXt(q}iZ3N^bd-W{GsZ3AW8Y##3VUn$IkDNaz@34A~%#(5?CNF|nl0v>8QY zfxK@xuiYf}I;?Azknh87ph0Mk<`nq@0;k$LrU_LMYG4KtdD|t{=~EC&3=?QbAKFAf zcW5wcCXu1+p|C)~1AATD1j?$00vtxs9?c2f?Or6`q07&m;Uv#yMKw?X!`M(Y=s_Tt zGwN>X%;(u4g3y$>c`@$uxS@VwAI-whJJ4jP2^~FEs9wcj4)*s$J~f0DBK}(A>SzBY zWG5$z*Y4$Zx=4}$1hllFUtSWjiitxI5TPf>WU(Ms{)J~8V%7~&>#8K%wC{p4>srMu zw|MV_`YZo@*B>XEXYSVD5QTw`<&z4S!(-EE>Ank=9uldn{iM!bcxtpYvKVrY@L~>Z zuKt>_c#IcV{xq#RgC$xc0alo6sQ_VM2%wk94XhJ<;uFuHy+rj>B6nWo4spN3jgxdW z((g QX6 z-obB)v~Ual=qNG8QfuYDLq=O`aRV6023P8;NyVH|#XD_Z^Ut^WUW#w^R?(>^2r}k4 z^f0ofUd&jWQW+U!|1j;(GnY@Me?BMA9{~kLg+hI~jm{ZTlkY(80+AGK;DY!XYX7f4 z-}0OTJWoxTRPK1skgpY33KFE4>TLXHjji*BmEHe3HaS4|0eAsonJDFUbIo-BQr~Qg zXclXCN68%styS=N+JI05g*hP4{4&2;<&49~5=@QO`mbDbU*MVtk~&YGqHo+}OP8kL zG!kjfP;5LxoE5w95fVigh-}pZ1fQCM38cnLSG03K$LD^%S_ ?~K)A~Da#|Fo9i1!^<42iY%g+i#13y6YW`M9JWGK+PM)F0mU{ z^(+8N^69owO{J-S=CJ>!P5QK#-iD)BHP6z;JHCDzFeCqM)$fF~`CpQHl{tG1Vx1CV z0+HeqZte=wKL6Jl?r!t>Pzk{1ZH^g4(|(U-cxn~yq%sq%eQw?_0ayZc(4RbiOrSw` zdrh`I91nyYlO}fXGjD$}-NeaJA;W7kuV}DYoAN-r7=H8es>{$xkp2O{Q`!nrvG@!} zTv2?N*Yi5uHF4>aF*+M%JKau@3v#;A;LAYhWB-QW58pvoaERC3fIK87_DT}0 |LJAkF{8-YXRf?G@An>O*%N%(Z-c^o70 zgMZ{EG4K@9=mgT`-L+t{UtK)W+)>>^=DUz01B%fn3+LvJ#A}l@0Liz6p7=+;1Dh$3 z8aw!;ezsfmpviFNWF^s#KS424j3#IM<@9##N8XzIU25^y`+~Io{O{?^;edbETBxDN zy@cpm3aTO|*(co?mtOcC9|kQ$VG0T$B!)~)G{%}(4FB|cR98p>|KzN^&J=hc;VO#p zj8nqiBQ~AwY8&-6+d1D+@Czcjr&-mmE!04eT~zx+!7ZW?>{6l(a*NSjSj$|CX2d!> zOKv>b4uNQxwMO}Jg9j|wn`N?0O4G}c{hjDor|>~^FIv&@Hl6q_N!?W-dc&(qHdTX% zQvH~ah5)~;1v;Z>gj0GnNz9vCy0${66be;ldfrNhA(3MR180 _CbTCT=`nO>= z_@T!0H6}&rz%>J==r_m32u+2_`n>reHRhz>ZG8Pkcho; GvANchg53 pPL&Ohv?imye}*je3jpu TdHQjB z_xGEo;GxrYES s0-zUiF ziXrtRRQX83JvkeTYLG{dSa#_UX9WX{J|Dc&UnDbdSGnLm8~=GE+4WdnK3Fnef6}V= zXh8i_%@cb61m>9aBymS>z%NgXnP(%Z(%lE58I-sWy6?f8OMq0&shUvztjjC}A!F9g z?d7xDpV1RR6(%?H^Ye>VF?eXx; (e-2*nk{IEJjDXI7Tc&@F6` zVn=;_{bpc+DC8bZA1mLN{BD*$eU{i*&8i0HfNgpE6vQ`dX!YFQ!DT0&0dYa Y81&j+ zaY6`o5iAjbXEQRbqll6P_gtW3#q$ze^iNB&`oXL|vF%~SutfmQ0+d02>LkSVLO5dQ zVG`=O1qe#un;hyfT=Nk12#UCK4?^3TPO%aH?KZHFsCoGe4CM3nD!{~|^hSr6xA6lU zVo)|jh|zsR=*<`JWH1Em&4D;lO6@8)Z7MgVYgSLz;~-<+35W7)`?}UW$fB~AEiT+A zyO-KfpCTuP{{CxSbmUBQi%IP_hX)myX*>KFT17AZfno>^wg|qD_M|m(f#?w+#UMj1 z7Z45MkW-y(8O##xxYB5<`4QX3d$hDM#jt)Gen2$*5bm>#sr4@QfCOCRL4S$e`%lZ7 zbp&s+KkCuTvB2k^T8_j9^^O!L*@MZp=bNPW5m{WtCu!;db&LE2ZFi&JR}}!X`{|2$ zQbl7cZv$`;+#X!eg00j2Xb;fYBOTV6A1gWYQbG4PQRj!8rL7oM`oCKwnmol)#pKWe z&z6HcTvWHn*MVEG yn2~e6?7TZDUO=U{nHV<+D?sFBT#-~g<^ozjZb*J;S zNlU{(rvzoll fTZ~DfoRMUlkCR$v8*laD@bM@{?sKA~4Vf^IE;@QtetGSo c()qEUhLw_P*-{(w&@VPP^F;J1An*zDnc(zg1 zuuZTVlGkL8bFck2{i1$UC4D9Fwh40aU9U#~|L4emwh5?_fteICrCj !R9i6_H>ERAoQ|8)VQKKeSx=R_*?^M3`~0O *rGZ z23kT)_FRDu^d8jN%XF!Shv*#{q&0N*70gipJvV4=*3mGVw%~7~9Y|!WJow+GuBq7= zt|pIJ)zr71rHcdX%rYboEHt{YWn$1(+pS;y?-ZSGB$S+4Y?vL7ft2})QZI$`>I6Vh z4uees=2H@3{*-oBjIEh26Ha<-d)e8`ISY|zT%)Ur38CKpsj`O;nmPE2+i*rua~Bk< z!4e#}VuADa$M-BRFCPb8cLkk~n)xagPSO&H$EeNY0D?9%wi=p#bjJ$1#i~}&fWCZx zboc9$vUJSk`&o-cmJ-)R>C)ao+xrLFLOI7?Ew52wvK&_)vP*|poDJ;#ujfnGQR0JK zJ$~}3`(t$+{%!eRXZ;{kK^S}Mxr&N;3|6LL_DQ4|!GK}H*38iDCeg*^#m!Ng?*C6T zCH>42H;gX0JO3P)=Py(5$QzuN@J?cIe#ECdV{G@t%0C#8ft;wBahsiIAg*L#DyKo* z_`>N6n>qY~B~Ak~j5k()&3}%%O8))&2N5e=G$E=? FG zvAh2LW>>_U(|Z6q%9^5cBk*hOVd5SBF;(9#23Y!x&W%6!0L|kk!yODBcd2#cr0S{a zy$`Ny6OPRXWk*>AK+-tJi(tPFsa9 &VFUsv`&S^ z1qOQcPS-C&^T{2Q)iSP+rQA1RXvcAfq+1atWzO{WBidhtwk6p@bNp#%xOgFB)Jy@o zNau>AuHq2 U)MxEEzn-_u_Yc^)W&oBetXLz*Act1P0Fv-ndcvGWcl~zs4<~e z;Ypi?oY3-qh7>X8?s)mpKGtLxuv}U^`0aKF>sS)N>Exf+*7NVEj uIh6a4bLeI zPz`4toV}Lm?5PgD-b-?C$F1V;Uo|P|98q6fYTpYV#BfpMT*ZO9PWS_PTQop_N0u=P z`tE-b%z*|)zX_-JV&g4INn}TQ@4_P^s9)gy7xm^fNNYYFp*N0C%#t1b^yQ}YV)YR^ zIcNitR~j{wT ^u};36bm0nj>Kae*Pj5o&tlSMj7QI&M77-=Dw|Bh$q3joNire7 zd=FMm66b^6CGCOE-}TdCw-3N9&-oJMZJ| u1n{*x^%-E*Dzh zNzh-14?my|g_Em%t%ZRTQQLTK1TE5`p{fHb{@HCearR`4)vS+%_*4BX+iTRY9Oq&q zr$PC2;G#6K`4s*sazT8k#o@b4O99JRqOQB3Kp<19NhHXm?9uoK9T&Y7jvI?g(J?#J zBZELU@%j#gX*_wJhGoGXJ7pt;+HfQ?_(uDl$EJ5e5C*wt-`sY6La^%Q($HZEzGk#G z#(JqEe)vzshDU-Co$wPqrj4`cmyskUY`+b w!+yn&^k3DqXm?u04XkyUFd# z?h3A8iyGu1G3Wm>a;~B^ZkY0AOxI*@r-4B?YjDfEl&vof(r@0pIh^yozVLaxKrnUv z7(2yp2`KLpY}K?or uHIfsu`74+Y?ERwg=sUhbLXL+_DJ0zN9-2W5Fn(?PJ#ylb1U3uVFx#pDyfq0c zXDcx6mE~G4tzH0Z$4>kf|5`o2|J`FV%GcV3Shvw_kp}flyM>@___@v`RF7{Sscz?> z13SkrZRn~RNr3CWO bCxeS3ee!}+ViQ_Qd5N)tj(t%TSdgU}arLB5vTIV<$< zcD}mV=~-q~Ueq15>tB$Qr zsUwL)mhyKhK=jcO<3saOtoIXYxraAQNA9&afYCA29!(DJ?echyb$hA3C 5$mIxXTqqR8Vv-NDw< zej5_$=Ati(pHF8GgufrYXmWW*O41DD;6b-GR}%shc*7ljWz!DE*Jt^9HqlFnVLn#D zgW39+L1Ra~DkC`i{!a{I(cqR~F=ztC^x2tYko=87dH5RcTDjKzZEg-K^NQQsfLPdI z%@;P}rETa}_%@Vw&F{dI+d?Z}@4jCJ&S) _~!`@Xwg z11ajh&LdoZYW=d-+NFNH0y~4EYpvfnP0fNbvx-zTSV~0?t&pLu)I~+@@9{cvJddpo z-PM1->-osWjhv$MrDaeFcrki_T+3_D{d{=8n@tHOSS#?I?&)s6FulE#d_9WTGvI6) zbMwFSOVm7u!u?f+yZkw3Q-+nSK;N^cUO&w8cj$ljZCR#UBWvItpZs=q6X4(Tag!g9 z!Q!KbHt{|qc+4jLlobzb+*(T@im>NdUHx$T&mX}`Z_j~<=!OUrOE*n^9x 5rQGV0W7&;y|qrJlZ6}=9(313ZO9I{?7B$@9!+5rvTTYG9Jc-!1# z`;Y(96_|vxN1c(sf*1t^dnycjtg<$$etMt;`m83Zy+5USK)roYAg>fw4)TiR!}BUs zDUCZ_*DqG%<~qr)nnZ0j3d67WZpQt^dT#8GR)glwPuo|!*8JHwNG}-eyh9Fo!(o6h zn{};1{K~+xJKb8=WN{_-MUz`!I+pM5-jtj~JQ>ki#ZLwxSAc9zpuIpMkDpa9(_~cm zuOFYg@K@3!+Y*t(hiv)XhncVBba!7WO|C32B5tQDhs^;Y$MH5C_6hcw>mRLOk{$o* znqg_CLmk0VOQ8+_$+%O_ia?ANvn-3n%_Xw!*z#K*4z696TeE(f9CIS7s$lHl$})3T z6?^Ct8R7UnV!AINgfTUT=Iuq{H)cJuh@Iv_qNUWUel*w74CUyKV$gnnhVzAuwsXB8 z2oA#E+aqqaqYu;+6`;7^5_2*`5+9Q-`5INy5Mw-Ay13f
3vp;k>F`Zrw-UZ^`{3P1dQ zl QkKhwB6SiNy0S0hHfbbaBy%#?h)D$NrF zm_grIx{$7`^Ha7rlQT3}Cyp#J-!4rbfgZHDx9dbIR8#&`HlS4|szL4joZP9;hK&X1 zb9yK;XY=t$9f3l|eSaN>b=YVg?oId49V^`^V~+99ZZtFxn7Wybb(kRK4z^2t?A=b^ z8CMhqvV89{LK>j!rs;P`LE^W3>dsR1GjwjqL!jU9KQxXTexp@b{op+^WhP&AonG8NOG&h9b-d5&xT>S1D`e^Vt^{W%`*Jz0; zrl*0%-zH+^G(-qnX1tl+sZ+!B-qlF-;YL*YE!$C<7UHi2qiLrkKCKv1N}O_*GIA9z zRFR*ap5VrWX8!VVmSqy?Q@0u~7NhPGe+-+fXqQYgSi-qna`*f+FDa^HBlU2D=)~JS z(_v~)is!zy5*J?Y*6dFr2vd2nQ7EjJK?jTZLj-x$cAf8*FijC#_Qdx&0X6*Sc)CtQ zsoU~jz?Td{fqw7fmZTlD_I{u1-k~B^R`t%fug!y1Vii+=!{w6nsMxO}aT ow12waTdcB|cJ@V+*!Zp;zd6*~f~Y>-h0T_D9_bl4f)5}-M$CnOH(@D5$_oqC zO44^fjGhnmu>7S^Gxye5xSF}OlQ{DlPW)uXEIODvXOuE>qW5j0ygvu8IUe5Cbv>7i zKj9=-sX5)wHKRGW@!Y%UG3tLD*n5PT@*op4Z~oj@vpK%ooxHZz_gdf){(=Vk(ueUi zqiElUjphfrp~dXdG9epO-aRc*mFN$%zyH4%KyKxL$S?F7LaZ5%y 5d(emD`*$VVShys& O)DSneh+{f5(deU%6ry zuET;G{_o%e>!|9NpAtZecZB4}-q^kQPFMrudUoPHQe@8GJ{j{=qwYx^3t#-JgO1!b zWyCP5;t&`vyc#Jynj?7fud!hm>=iBkh*p5w!NCZo^$;>;O!WXLyV^8%;6<*wy!EY9 zRp_BVF5-PKVyyjAXkh!aGvtzfXcIhgr6NH-Rwv9Kf2eR7wbgDw=TXO*K7v;1%;0CS z;J;WHyJ7{m%pGwD9h_}?$a=t-#>>d|5QjOETH}xa3Ds?*TlGh?pqMY&{7M)Z>K_`= z%>H=y$=v6Wx(qeWOea65f``(l#))NM(P&?V1u+I7+gP30z^igaKJ9IBw!&(9k8YXv zK}XZ9#q@ttM)bNJJ~!;&iTrYT(mvwK+ho8kto90LD{~f=zkX&9uDn}Zv{dA{U9E__ zBzR{QhzB9gV|Dx9`G-r^l5c1!tK93q8MI{UtL#%%|3`sR&ll|pq{S`2!R8QYxFk}Z z$P$0d^4e-?Tz3w8;gT=WB$srS!lD!OpoN^eGH$p&Av5jW^Nk$*&4eOP_#BdcMy^aZ zcIQJwBj1C=bd}({PVY+NTh5o>ZR;FJ4+hLP9vp`#70&t|{N?*_7idq$V~>*wjunhn z3#kM78ZeB~l#lKgYvqhLB$5XDLig4^>zoUWoo s z4aE4<3e{c-hIc(xJx#|iyGbsl2-p5u(eYtn*EQbe$LC&Bv^WAbMn&zRq<6pY^y*9E zEgvl^{G&;X_>Zf*{5iJ)C3x1BYM8=S<+jQLh&5W9GwO9CTQ|A!n~^#ap2 c!<1Z7A#}v+_cQ=p(W&WlD|8l8=Sf;F#N$nHye?x9ktU<5rpLcBeKW++Z6arWmDi zU%#BY2rD0*z@WKpYt$hGY2azgS63CG{8TaY&oBBp=d!iP;2gNtDZ{iChpb`~IDhf+ zYry;R%2{Sp#ZSYxA+H|ovEn0=`O*d>Uz&;l2_u?cOk&=nkpVvj228Z5x^=Duc#e}8 z>F&)M0l_+krCBJJO^0fR;2{<1)_l@%I5!8y<{`a{%)F)}S$$&9eeuL#;|^pM5l}{+ zx$x7JR-`@WD G#*74hc2xdXEhdZ!3;y1L&DG5%lJt)Je}%>`)-tGw9G`@q{eF}rK?)J~vo zU#BHh1YgO;a LmNB< &z;IdAp<(}iB}9ahc njn1#NeKZHy6L$1n@0# z{~io=4LY~)JM4jsczFDSH~e;PMsM}qN-o*l hE&Q|#@YzM{@#>Br+cO-&pK=Py{iw`!sIXcz}>x`)B(#Zp Zu z%+z-%MN%)hD9VZrp=kZCF9Nvd?egRf$@JPYI?|PrwnA0`+U=JrD0(G1`9UKZ7gWK( zGO3tH*VpCz?lsHP8H-%o_b?98wrss2-30MJ!jb3%Sk*}Tq=T%_Ez$bRUI|u)x-WY_ zgIC*dowKc#4ewvU9_E6px1_w^AmwUKZKL6QQvW&Hd0w*gfi-wfl@wGp6U0Xye)H`{ z(8y)!8m<${NhPTSTxB$+yfIfPMeK4qt9X}zBRG3NxlRmZcXTh8pe1`2&I`>6|0euN zW0|6t8w1pZr#2hLU4QEQuH_KZC#m?*O9csZ@9B+~R*d|sb{}hnv~6dcC4H4u4Nojc zf#+qNwYTfL{#qx!l(Sx`JZ{7TlM@c|W7`{a(#K9W_N!PC-vj2iR^;{xJ#LFt*iJ`R zXYKDi5M&J2^53_>NTB|c4gJ#Zz1CuE5-4QbbKz{z )G+ZQ_lj2Gv0_xi-bLoDg~*4>eWpZ6W1#XSEYr8Z9>K9U zq7wT&$#zL|@XDbpe~_jAG+kM5VJ~y&r7FAq9old1v_(y`t%#+Mv6q6Snke6F6~D;M zY4c^TTel>G#p<6E2$h@T 76aFyZ-}-oOto~1L_s!Tfd5eE;M~F1^E*I z5JW*NA#+;yr%roSurH>ss`9lP5a0F)o7&BatR-jUjnMYrseFzXHKWyj&ESkme`2JV z4n!=CH@@_f@J} *YN`URO4A(*aDaSt=Kg|ese)E-rs*ULNjCDK2Bdc<`2^P1^EU? zBpPBx=zj}&Geeksp*pN7PtPY(tDf?)ia^C$#EptxPjzi{UCM-yMF_&xEx^uH0pt&F z-K#UtKb}nGjk|22JbMPF`-J}dXle-^Cogf6eT+GINbI4{3Y0IzI3Q;N29bm7#!)EK zG-q@E`1u4pj7HvWIjbdkUo+^ht}0SE2jnN}zXrqv@31(TSU>O9xzIh}11uO*?^n#D zrNu23G1ElvSWRNA{;_Cep(t8v#22)Me|_tnK0LT8M3*{@X%l%+7`{z#3LnKAE$K`; z)hsFNutl>IgPOO(r>NHwg>^ c^fIt0GA8)=#Y4pqrm?Tgo4L>U(nenGP#Os zh^3M(>j|I5AzjY44tId*HTR0iZAQ7(9GK`~8Dy!gzLG0Q$m{NuAH)rM-<&D6^~o^i zp5YEfxX>V%1lQ6~r8w7N)4`81w_sn6&3Va=j=T7-Wc;Mt6|VF_WQrhP9Nm3S$P=J= zRLxVytGqi*=9`QPRV|z@v51o{Py5w_KJ4*rH9t~SJH}1?zhA36_=~7Hn61r?;o|W= z?lg)p6zK4|ovf;C3<;G6sgd=|D5=M$ZQ;T( L}P=`-_aAOiQnXT6z7EdWh51^%1zsuY0-0#35>o^J3VBJ0zcRfBnu9stoaX~>< z=InN38{F9W6Ho0){_c(Ayr5BHiHAT+x3#)og9BG}X9>WlpjBG-y**J}x@_k=%O)3* zBV#m&lV6!U@E>K>IPo_+-Ry 4`BUya5qP+u$@SLwbd@_6~= zYo2H>movrt#WNxKflVDfXTku#<;##a_6h1xLUG j7(u~PW{p6;;+264}BAiHmjov%q!BXytHBVH7W 4)F z@qzaR{N4j~Z|nD!$5|>bQ_sG(lBs6CYPqtk3vgWjbh#AuJ$A;+T7o)EuSl)BV1a?+ z7+j`eQWou?abN3l!oRa`^&e_AXd_hsCq#WkS)lKTyhxkTscY$XxL2WEn{mQFE3#n4 zVQ-G%qy$k+JrVq~ b!FvW>lX&i-45(HdJrTfb@fk*HD-Ldu=L7(3d}N}lI$S# zDEhJ~cOhMqEh=__&Xo#JAT89PM&=BHtP9Sb`8XBg2j2OU^V~)=y;=o2fsad98d1sO zWll4`46*kiIxcQ?DvCRWkC R(zyp%PrPeS+Ucua$X$#U2QvWmS(|# zSM0f*RJy|c$Q?mPK}zXkpMR>K&o4V?Y29CkdRmU2hH4geOSzQ?bKB=t8(*ODfexI) z6o4s`ToN;q^mBmLw!h2SPbS#^hPF&o^zg}eYl}NO55ekyh5Ux=bLYIBVV5`wCon#d z`9*1Zwa5^f-4Y(^3n~?YgxP)w{T!rO18|)@HIQ=`^FX&lQy-mn{a2&P#sHr`5q1U8 zSJjN4_{}AKWd`jfEt%^$Ofy3@EmDVl)U_2!Q|30fzn>AhV^ ur)vi#48<+m&s)tSkIC zgh->ofw&4;SW}q_R1AMa^{={kuCi<@w+7ESSkQnZhrcM 9}@k@4~lbUK)%D_t}j8KGctdm=#imOVsR@mI)uw zOs?uXKXzOKUjERzaX+}ry_uyF=UeX^-;yqM`Or{=&DhorGFC79pazXE*!xBXOWYU9 z5?)@`A$Le@Ub}6J`(bl^c-gjkZMJ%FbL?`dY %7OY!LYaLT`$ter|;v0W}R~QUX zz=q-Hao4rjArbSUzY|w@Lg=j?V~$iltvycg+BYZa{L?SVB!vng8%RuBqzkEK@oO8$ zgq(7>JfWZfHJS0Kaa0yR%m`lXKK-M7*xUBzjkVyLO#h~_22(qhL6XbYG(IF$2-0qF z%s?!AfA6C7zoN_Tm`vh45S_r^dmbiVNDt3gYE;j76$ -4vA4F+Y6ehubSeEh z&rD?tW2);n7}Lbjz*QuY{QXMPLxoD;8*96`F+p1vdQV>kdx QD=f$n;qoP83c9`psD%S)aP zJ(hC3JrnD{Mv(DR$M)nhWZty{+bJ=BI~n42a#Ws8)8u?luBVzn!N(4#D=B3ybRZIh z9sIWTXO4rIJ72->**h{VnoNDJuoz-V ht#E6v+YsF2S&&8YsD!myRVWoRaIO(1Pc%#OEg-;;+1 zy&;1U>Bdsjevp-ZslsW7Xkv(Wx%2jb<(Gg9lg|~;I*^f}zaH46KCga}F}>Sw6@0gc zOUw3|MA>8Fy#FfF?6|^I=sS;S$La{Z2uThNDGbRV!KGzpYRBJaCavuRW2<;fo_;wm zgmwXDq$8wfCc62DmtTRThmK$FHOkw%N@%jG;_;NXOQ+TL7?n*LSOB5GztX3c=9{^P z^gj6IR5@h%50Pm Dy-BnkTHxon+_@cj1dqbPwuYBUVVxZ(An*bl8!LatR<#)G*eE^Xej9 zNVbr8hAVA%){)4CcMAa?+}MvvDdzcgmWzv*UFo?F=mdokTFTp>Uq5rvc9n`V+K;5O zR0#2`AbT?Y%wN)2+W0XnFMTQazLt=^g0%l)+oGOd&QgIQPMKn KMI$iHNhkTkKhK||FVrGA2=4!tfrii z4c{*~QQ%vvClxe~=3vwPsMGW!{F*C^=O3x7Un=3cfC-4v9UW;KLWTNI{e^EVwZ;Xd zp6$~S3(e=<88bm5q``mpWqyU+yxhIMxsSK(+{x8w$5HU~Nv<+J%~TQo7yuvK{E(hY ze`903e4wNP9``&R=x9=)33z~S^WVJ=OZk_Q&zNDw2HTz_IeMg0!NW$vQ4ufjUtNsC zw2PS2M{?VB$*^?OPC2}T5D{|TgWCz~$=s=xd0Nzhbp~z-M{Ao-61gR@Bw^#ok5{al zd6zbJj<3F36z*2z|IuCwgr5u$=0?~qgAd74>-bED)JJ25`5)7HeTnCq8cnq=3eY@L z8~v^1XP-A7Do^tNj?vYj@T6qmj{k+{6PdmgvW&OnHW#m$+dYO1^8Q;kyydai%zbEv zaO@}l63{5iRbjgzROqkPSke^~a^^+>Vth+-W6*Whbd9-Q#P0-M7vhc#k~ldyJD!CY zt&8@ y0|9hnjNg{bCyy?L>FQ#(oZ;@OouE-rk%TR{=$ z1I#;ZiJyP2wt)(5*gSiE(NIlvG1#?Qf5n(Y1Qs2gZVt?RA)o(pDa?~d_uGS8wBsiF zBxV`27RBE`Y>sVsi*=W~F{vWUIuLfBM@^b)kRy&v84Kwd1?aR?ufmq^<0jtQ4`C;( z>04B5sq4!P;(RH&6+uF;Mqhi#a@@nYV7^}-P?x5&o1qpPYq3h UwuoMuhPX{B z#9K|)!bBdM6%aMYV9~Cs`1dq+O^cq^&&!M&aA~xYZZ4?OuTI)Xi;14Bfl#H>CtMlw z1c{>^0|QmGWiD`v=7JOmb}j`sBxlKV;RLblLI{IHe@L^C&gi5-AQ59(X4;EegZm-s zWVudElO~VNPGIp)a}yygzY&qXK_!6?QI{v4FSQ-i0$XdP`t-Yf>iiWjL*q0Ram#Op z_M4wAmA{Lymr(IiOtPv!9baqhQE~VsVB%3&nE$r+Rmi8(>f{*ZMVC_>?d(%QZ#1FB z{R`t*VAhH4#Cf6ebCxO9T=A^Udn4W1iQue4lw%oi)I-jFbaT@gaKW#I3Du^mtY|#j zoDO;KEfLE%7d!Dt1X42l8h8C-kR`s2AiIgreQ^wtrmYG5k~ub}k#zlLvGL!<#r*jG zx`%AKYgVmh&3{h^pG}_Yg0qYI0~0)*9Lv^2WmG8w#9a7#7`g4&*gzu~)lsbh%Wa^v9hCkkqgn04~?gz!y12nR9KeJ z&Y#?#d{7cRdsi)}ZXnYY@`K?M32-&&9)eWf3HHaO2;0y(%Rm}(Pzh=YmO--=-BiOw zNBOvKER9|n_!6BGocZzr%iG7+AEi@sM1HSM;7gah5*Ws%<4a%D<0_Uag1j-q8?NN$ z)U)rBDM&H}a}Ihs3YXU*KZ-q7-%^Oy>G?l!+}TfJCLF;|AVbZC)Tzi@pYoXej?1Zd zSfR^h5(=He0ONZOoWu@1mM~XQ_95w~;eKUrU23t-)jPjwc-+s-7m+*z4N$4p!tsmb zTA8sOT{&ix+fHd6o1V(kgR~dy;hP##CZ0`^@p8?5p+5C`TB>4J{jB30QrX 6uM_x=^$@wd^;IEyC{%BT`CcK;Fb{*=Xunw9-gsp+E| z%Xh >)P!biwT5GBk-* F^nxZR9nl zhKjUt@D>>> 1DM9hA1vQsmbW8DLCNgnX4f8KrY01HJ7e;gM(nr@2M&I`YIz zY}*A?al7@T<909c1TR|WrgAv#$!P?O@FQE#b)q=t7Z(}47sT)SIFqeq1r4P_dLBQf zWQxdM w+)Apb3f}QGkR%$>-VAV`v=O3fOJn@SH&Lltt(=s zj+vu;&inX^Hz%BP I>Pov`nnyDCZ}FA}`(W!oeiV<7@(4;$^CA&@jd}>ld}u4w zR%1+MGBpKWo}M)x%^4_enEl%DOzYu@bhcyP>B b{wd!05Rx$tEKCfws4qP*NjE*OUGbIm%Y~8w6j0b|Kl8F!3k%T(KwEJ z!-d7_e)~_}_8dXX(+dZTfox$+$o@vRf|$|i=%8e=lftSfYo^!&-OK_NtC#yZ(+ry6 zPDgcU&`MzzjMM(>O7KFX9$e?R^fH_OmtjF&(=PRpFnmC5Hl6ZT8fh=+5y%KJ(J!_0 zl4**j9TGQXQRxu%7D)=5J&*|ZclarswNoD~2Dv9W;BBq1^7p6Hh&Spsc$djb;nen2 z{TCNp^&DWLMlQ?F{SanJ>-b&=bhdYo2aokKdn;~X-e2A59EUt2s~+!C4kQ~_3t;+d z@ J=x2Cxda7h`_-pFSdc&+-BZF&^2AY=)M)i+e!(~q>g&|PAFok5sEq$Z(^*F~ z{lD*jBc-LgyJMuJI6_iDx<)usKpLqbN;e2hN=a!DLAsj((hU-VgbbK;?6>#tbH3;7 zpPjRFwzIu 6e&t8uNu?#i6=1p5^dfh2BcFr>MJb(OX zF*tm&Y25o*5HOSCCx8Vo?a!H&E^Ih*ysnB#cZU-_1N$b3!xi(pv#qpG9{%a0Gh7f| z=_eu?3CSWHIlQ0qQ9CRY;}ej)7RBd3Uxo2(*LA-|&QQLdxIeNFT&i2gi0tJbwr`;i zd%8F3uO2QDXrV{8qJe?&X2Us6BqQBoMm`(rTf^6(iH?|?OT7aD!v!H4UB6n4S8;Sp zY5GTh%~@AV@CHB`qeJjw6^>JJro#48QQTP3Na!(oz<0+E#Pgak`gizc^3HP-7-C)= z^4t&I8+wGzcDCsON9(Q*^@Ofy^ibt>dc((S|NSJAqM-Q4t44`a1zhh?e}EmZ>px6- zG!eK^r+k=2poz%8%~;pHP)|~9z5Tg=PVFG8{;MsRgv}^8gk>Of7V;~1jBf91!h zW(?ydtlOG0@Pv1IWnC4dRhC_4Sy>iqQiFatl8DnWW+uc0>Cwsx0cg#^e*CG*>Vpl0 z@F XOz)k ztg8uVK)5I}((!7;1tvAi>$S-M1HQb}0hnU5J%;P#Ub$ <1kzwT1pY z75z3pI=z+m)t=J9`PF9i9g w3>kepxMBiWn+rCZ86(b$lBc- zzv1N*Hyjeu$m=-JL}zDB@BIvGaX_U!8{O_=T%>EAu6QnAX%&_!dnE I;0>y~GcG un`@7R!Qa z^jE%|)gIh@-_Cj}Z*I<9uR=A|;ibmKyR#8QlZdS%T0)H1ci`Of_M4-=alnG%XiJ8- z;T(Qi0EahXL+;{M(Y4xjs(dsU85xw8$9vCgaODB@ht>^~nzIpYfjgiP(%_wbz$nwy zQ*VEWJUgLQn}|~CH&r6@UmzSnvtWr(W7Ot0-LnQ*res>}gQJ-8Zy{9WPGA#L12@tE z7pmLu)=k{)R(6itBO)(WTsAr@ulX;)!yIQhW+MHA{#oI^pD$j1YiW5!5WxSFw`kSj z6TPyTSI0rzGxnph={;h xZl?QL+fY)i n69BhtBbl&|Iog~Osi8cFqwzsEm zo9|+w_;ictPY|`dzm)&XuN8_%#zfB!2;vZk!0YSiX#8XUHh$071g-CR1oHFpCFc3h zNB45w^s JTX z`NNL_*HUgP0RPEh_O2$&0AhPaZ}U@Zeup>R `9_V4AExo?pFP4^w$ 1?vF#-M59HIA*)o&6HBrsjjnN`_^#hq upLr6S zP}-qM+#)ScY^cvph4*&T(AWun60N_4feME<#Yf|dumw7?+TUm#JDRyr>Lr(V0E}_P zP}0n1_>zW|WsNrLN-ziS^w`7ASNSOUc$-{>w_s2?f6Nr5%;Sd2cBtn9*iXHBj2ANm zveObwx8urB`!3nb%F=Bl(=ZOLNNRqoh(`K%y%(RrJ;CmN7DZxumIx2b)>AV-|*W ziyYTwNB%&CSKZFgZ8yWueU6JTQrZ74G*xB`jy=3$2%9BCUJ`~4#5Tx3F-5cE+sNI) zQzHp$mLKSE!CqUwiw?ljX+zl##LUZc+uUpZ#e{nOcHvS zd7TW3zTJ#wx=NKLB-n&;m%OI7r%JX6eoRLZKTFcLW_qa5x{age^g)iqEF2GTLDoqF z7%ju~QL0ROkGfIA>U#LL;I#JTY~%8V3Q`#KP6uj|ZZLbs&19NTVGf93Kd;9@BppAf zoQa2 x>aK!WxrMqS30A1d~yr1=tkWGAyP!OALgiU_(9mw`i z0Mz6yGLr=ap?h6Gx3;O`eGbufzupSBgX&%z(I}N%t|Q!Ue5lFG8%?NF%{4hl(zxNI zGa9c(*+4;%{2kFp$tigsC^tD__)*2a3a{V4Nfa-Ae)jLBmOf6wz+^^_E&&m_xoQJj zL#3+QsHrGQ@hQP``jyri%TM_jiK_ey(qx(Y_$F>5zW!3Tpw_?n1p&_;ubrA)vw*M> zv21KmiG^U_iziI8Zh2`HW8^nh4yK*@S+~R21$YZtI5{$sL|t-C4Qx# Ny9_xWzf@kboV^9s7Iy60Ru zDvoq|C!5RIo^OHH0+!zS->qTMo5!ImP5DB+3F0Z++dg5ZTvBZbCHP`}tDL2Gp4uwT z$Fz|>HgF}K+mW{vsU6^jS#6@@O1bQ^?um@SlBr9a`Wwgb9nQ%g5&M4|fwFo*aC}XL zd!FJ;56lwX9m)&XuEYTU&KbPOU^_d<8sMoeqB~c_n;hb*{ZLtj?hK+FDYV`Y9p<-` zEtr%ZGy^4NaLrg&*j5{?uC97nFFYAsOca;Ad`EO5xy`=x-LXB`p9mE8CLk+C^cZD6 zA;&89+t&e1^qDi?1}5ru^1p^DdUW-*535shjV-?^A=V0I(Si3jQUE7W3F(RE4K{yr zJxx3O94ptvko9@!^8+%qOx6_d5lp{K_io^O(wo(ME>6r-4!`V8Vi@}#pZdW>C{=?; zxAc97iJ=}bS`c6b9J>>h9&Cm}$Gfwx6fLy}O`i@&R2&o*zfJj_^yr0WOt7xcmc=tH zlbXzU+q14 -{@5 mGEvKyFA$My3-4BInVyQ!