From 580b63e558af8e48f764d3f84f5761fac6a82578 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 10 Dec 2020 18:48:16 +0100 Subject: [PATCH] elements.comp: tighten state size calculations The state header is only one word (flags), not two. Move the partition atomic counter to a separate field instead of state[0], simplifying state offset calculations. Signed-off-by: Elias Naur --- piet-gpu/shader/elements.comp | 11 ++++++----- piet-gpu/shader/elements.spv | Bin 58292 -> 58352 bytes 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/piet-gpu/shader/elements.comp b/piet-gpu/shader/elements.comp index 568445b..532ee8c 100644 --- a/piet-gpu/shader/elements.comp +++ b/piet-gpu/shader/elements.comp @@ -22,6 +22,7 @@ layout(set = 0, binding = 0) readonly buffer SceneBuf { // "volatile" but shooting for compatibility here rather // than doing things right. layout(set = 0, binding = 1) volatile buffer StateBuf { + uint part_counter; uint[] state; }; @@ -40,18 +41,18 @@ layout(set = 0, binding = 3) buffer PathSegBuf { #include "annotated.h" #include "pathseg.h" -#define StateBuf_stride (8 + 2 * State_size) +#define StateBuf_stride (4 + 2 * State_size) StateRef state_aggregate_ref(uint partition_ix) { - return StateRef(12 + partition_ix * StateBuf_stride); + return StateRef(4 + partition_ix * StateBuf_stride); } StateRef state_prefix_ref(uint partition_ix) { - return StateRef(12 + partition_ix * StateBuf_stride + State_size); + return StateRef(4 + partition_ix * StateBuf_stride + State_size); } uint state_flag_index(uint partition_ix) { - return 1 + partition_ix * (StateBuf_stride / 4); + return partition_ix * (StateBuf_stride / 4); } // These correspond to X, A, P respectively in the prefix sum paper. @@ -176,7 +177,7 @@ void main() { // Determine partition to process by atomic counter (described in Section // 4.4 of prefix sum paper). if (gl_LocalInvocationID.x == 0) { - sh_part_ix = atomicAdd(state[0], 1); + sh_part_ix = atomicAdd(part_counter, 1); } barrier(); uint part_ix = sh_part_ix; diff --git a/piet-gpu/shader/elements.spv b/piet-gpu/shader/elements.spv index 28e3c30edfbb7f98f135c395bfbb18852e64d768..fd314c81fa191f058ce5ca4513123a11099ceaf3 100644 GIT binary patch literal 58352 zcmbWA1-M<+)wMU|-eAGq6Wrb1HN}Dy4Iv335RwqVDFk8OTY0)C3KyfL> zwZQ+r=j?H_?k?Zg@A*%=SYwPi*PL^$y|$cvZ;~Dp&OK38O;Al*O9ke|M3>~gviJnz86}sBgwB9s* zZ9Vwkg!B(WI>@?y-~Q`wy6O6T*X=)W)hGg*vlqBEhTfc0()XqIeuIZ} z&BqQHRMw;Br>tidc{b(=uT4eGrqpgst-JV+N?p%PimBxHOf}mx!FJX9 z_o(K^zg>4nH6M7rp~HsZLM@#wj#Sj#Q7usWsQ2W5azCSn>@uMLz!Aenj56+|)xv1T z>Q+M?yv)ClV_W;Kvsx6~Z_KC>dknUM_TER`Lzjh6BKizAXtl}`%e%-3* zN>SFqmaOaOSuNwZ!DHNp+YB8vX1A<|x}Wj2^sJVHm%iFvJ9R(%7=XT$tILY?rEmAD zx+g4aTY+)yHR@Td4Bm3ofZ?Ne9WiRp_A<5dsrwmUTW7TzyvrBteo^zY=YTQro-OYF z8e`011IBP!qSjv3n)F>`yA|4{lD%D}`)CdP+ckDnYlGJwHgu%rxfXIi<7?}v)`jb% zu8-W$F1w7_*WNv}0lhxm($|5@^;sXkcJ9flzTjN<#tayeOG@LaXZ#-3#$Ds4s5UFc zwKs@|zgy;CjIn7EqhArjt^VI5wCmWSh_Ou(qg{troBv+N)I&IiBr0{?`&($8}IKerPe?8vggu z?fjmv?fo=mwP!K@e>`{pV`sGE4C{(BMYUHEr|S&*FU7c?o*?a7rl`giG1eM9Wa#k! zI63~a5M%I2P{)|O^5n{Tt~-3te~sYyeY(bXR{Mkdjo~`s$<4=eSItj(ejf;L`O$mb zk^9MYN8Y^d7)#yzTdo6Mqtv{|4daZ=^)$XdAMHA9z>v}O@$CeU957}#?nh&XGx?r8 zH5sF4t&bi&BqlOWS{;nusr*`&dj@9nm#rpHV}{49<0?+n~|yC$5&Z z=-#_7LtCoV@46&G+yCeBtF>nj>x$i@IvnhLeD*que$C;-N4R%ga_6n)XZ(71R>#2O zr%gXKKjm7gx$fQXmD5xwqGf#lZc~a%_SRC=vx?lBkWZ5Bc^q$S>U7_n0B+BtXLWKN zzkLonlXi{je#*I=3O9V)x9z9qr<{vgb1v=yb@x!YUplMls$NkS)cGcFLXWLNE zbkSX%tn)jAc$w>&;2g7a>OA$Ws&y>X{FL)N4{kmBY4ez=`N=#x`KECZJbwRKb)BVI zv$7S}wO&As)OsN}$K{ebwx{%<_F-w&q3&mVy)#r-!mXp_+rPai|5;BWH4FNMMI@f< zcsYG)y8_&=wpb4`)w+9JUQvET>siD-n#3yj;#Ajo1gK=wP$rFyy4Ft=xFKs z=DUb~o^O7Ci{10g?@Qrcr~NKsF8#eex30xQ_wCZWK96oa=R1#Ct3SXS`MYnchLOpX zo2y~vsC$(i-?-F5>+|3qa%HdGYaO&szK1_3b~E)KFl5N6!9zs&Eztgc+_QQB`^W*K z#ta=Zbj0xfOr{?9NY}WLxDVa8Yf#JHvwE2Rm&QHbHO{+N{T1D0^|;4=aoo(+)93?7 z?752%r>%Os-FaF&{ul2uthe9(|4;X#C&@9ORY#BNDf(Snc(UqQ`aK7X>_52u{vnzF zpWHUB6!H)F|GF>t^0RI{?}^S`}_sQkLEsZ+_%84zV9jCH^+c|mY{=o zRv*&$8#s9Q;I+nfJ)5Zc8LduljE`GNJH{7aVz8sz{JS=1N4NRUZO)EvkL}3`(B3mW zs+qv4Wj65mTKFE{=3Q~;YxAzS3%7Y4x1(C3&6jEC>8O@#^JSBFRe19D11Ik`ZNGXA zI;tJoyesd3Ht)*2YnylF-J{LB@{VltI&Vicw#{2#XI=9H+I;!cbtpV_T?kHHm$v=t zx_VSs7k)Psez!FI?kxQ7EBqd6_&r|uJyZC-(9N%-dZo>~*5may?^=(y+q`Q%K4|l< z_4uUCyN<(`@XU7-E`FKsM>qHZ4SraIAJ^cgb>ls%v*1~m^T6ZRrL+1iymi`loud=A zH20I&$@YW!;8Ak#A^NlA?Q1i==kJAReq5W&+VQ*A`RX?BTIcKAyzBVh(&k;q_l`F2 z+VA(adDnh_u+8iJ-cdc;<|`!sQ*FLt_;YQ(q#NJ*Uaq+X%3rU!1)6%_Qw_*7S{-vQ{QVgJq^>wUs^52E&J%FC=U#2_ zcN_e@2LHUlzi9BE8vN&OoOkCuD75FwJ8p36rapK`Yj*AfH9sSHuHpMzYc7-2n)B)p z9*A9h8V?w}`vG@Ur-R4Oi@gbN`*l>m1N$ApxcXk-&9|d^2)-9@Ut)i_VSgPy(D%Ic z_&2)QdsIF7!Z~c8cI=73WgSz($JFDd>Smj`^>ct`J4TtYd=R?Pa>$L0W ztX9B(^ltrIr%TSWRoXGe_-Nu9tOn2CSr6R47k5^D!F)4rJvwAwziN-IuQxra%^h3U zwnH~tN3~Of4`}d#4ZdqP-lN(B&J$K^z4rn$4_^tudsh3mdHE``9=9VeG?@v@+FkUZT1u&*Zbs4ty++R8ygqW2SBJ=^A`SxD(28n!RD~-Qay1 ze4cK+XSFDN*oYB(^xtK`z&*O2VLPiO(3#rMQC(U`wR~gj8eKl^=iJn^W;ef%YMlmO zufaFy#yhLc;qBb+iuSp(MK_<0YO4m{rop%E#<>>2+xxvowJSLH)gj&dI;xQkKB~bF zXz+u&@rkOV;H{t9d5rsaUzel1`F2#tcH^DZiEz*1)|ZBQ-Y0kS>8MU?@Y5UotZuwV zbuoO@h<#f7_$qMr?sedD?>^pbTu1dpH{PRq+Oe&gdQ>lh+t1$Y`EGvf`EI{L)tlXTkLqp5)Ys~Fy4gCa&*0_t`SWh}9@STJZnU1aJtqcpll59K zqqud_w=d3~dyBQSJX3X6%fRb<%obMbJx0w>`Q3QA#2PVnOgXPr(UnsB#x1|Z@2L7V z_-63(Ub1;NJMU=aJQP^#x!r6X)y)llOM~AIFYiNlH0(VmaXrS@Hb;Zc+2C`-$A3TX zsOITr@2uvB`;5U|#2?mCbB}6awA||!>E_Q`z_WbLuV2HyRfBH}-<9__9t-`q>t^q) zc7(U`*G~Ej?dH=_?a_^QRwLlM_|Cllz}DL~$BgXe)3X{4Z^bPf^*gwmUq>~r8}F=+ zfDax%sE*vO`N(cQJ*#8jt=NU5u}|&h$MZ_T*T?<=Yrw4qRPpn$j@EZvVC!e#8?ZY0 zeml1!pY=HwYCT%GqxD^PE)9H)=Xc*eE!O7e^SoKc_j%jT^fdE@&)DMa=W*@H7ayO| z%Q5nDjNCEK!y1j78hxIh3*C=3%B|5c^5Hm+uaRTvKt9IvV>~rw{e9jo8`xCRa#&%TaaSY`%)21b>dHdk4zj%6TG=FcJ zpE+5)b?;+!RgB`Cn2dZmWj!z8N zT3c_LG3KLBjQPRFP}8;O?#!&NIIF#PKtX-QqkD^b` zqrv*Cx$ei%n=AHX!P?c0cO1R(9H-5AC)3CO6tMnko&%@SC!WXG8c(CwN1HKEr#Gf! zwHfmq`ougJtiPJJ^XQFftn=x$sTu3H^u}_GHvKQ5PpnJ9`m5=G8NL4M=2pA9(43>% z^@WzWx1%NQ9bn_C&B4*Vlis~sHhtyReHXp{`WgRjdh0NbHjnN7^!w8$srjSy#%S}- z>ItyN+2d++%wK9P`|WwSIkkITeTlv|Z35cDHGdiGM{fMrX!F!u|95HDHalzi0lhx1 z>xcAm=kpQ0K58r1+k;FH(fwV8y4$=b_%!Cm_tt102u z>|F9Z;~w+5MeaOC(i66&IS;wdE^3a;bBp7AK9M_aVtRel94Ge~MJ@B|3m;SPt>7yZ ze0%up@aY)!B-n8ttFxU1pG7zt9-DLEYGsS>c`e^VR*&!baJBe~7hzT0!xt2K#?Rpb zRn_X=FBbz#nSN`Ii$f*=t2;-z&s}P+!ICwmYw_g)OrsS;f4T3?)UqZk!zU&{_!{s- zu+N6qMqsZ!o>Ru(818;lkNEaMNZv11b7_hj0QcNEy;mv~3lHg)~wzDG;E6Km`k$Da)6|6SuxsqN~H zm;27m@!@ATxbNAtXT5r{fIj<$&jjB9z92{0J+~aZHzQ7fN6nq@q_pb4m z``)$WzIP2bpYJ(K?z_%#$NRpskHTgphFK`>r$m0J!fu!;SB|&T##G*I9Dk zb%r~>cflRsr{IpCr@?*K$^W~KkMB53?)%MfF}e6^RH8I{e7>=|6B3pzSk_d z?={1X=R3`C?VV2x?m?ifeX1L>h zhZ$~s-(!~CcbO&kU1qrJ>ATF5`yMmg_-{7&+XZ*L?=s`>vz+fT!?pV^Gu&r8-({BE z_nF~7FZ)h2-1+!EGu&&Q?-%*Ae-*=SZK1=$JG8|a>jxyYMzM~8`p6@8bjpsYcaGy1OM;UHB-%*D9J;!&H z;nwf_$#C=ejxzjGxbG-S?mNnGzAVWyybVCRk`N@tEFrG8hpHeF9TQ8=Ns;t%jv}Dd;GO6OH=b+DmJ#?lU4-#yzck3 z56KFxR^mVE-j9uEzZx-DK-2aeF%rxE4RZW|kIm=0)VM0xF^=_~Est$=u-f6&L07HG zf7I5XW!`InoAX{9O+Dk*0jv3}ct{;&9|*6X-ET+RA2 z_Z{JxyU$7TjPDONp7ZjVNxmXS*EQQ2>~}WDXw%2%DD|w}E@0PAJ!>}z?Alq2d0gYc zV0B~o>?Ifb++_@N>Nf=ZG`&9B5_31OF`d8T*M$JF>uGZr;O=$nXzznefFl` zhqf2ZvF4HMlRO82n|TgIQ`g69_d#IuI9K!do#!`jb$t$|KZLeF&9UZ@>ytc(f}42` zLsQqs`5X>5&%4EZj)1G{<9v>!jiWi%JaT=K=U8wv&v9t#`aDUVdA8+*gU@TNS^cI>dEt4@YyuSnn$ir@>~dR=D7$>J$Wt$o5y!4$#V%@J$Wt# zUqExLdF1+tFQfNf;yH3T*mKO@>)e&}SJC`vzq+>DC)YJ#W8^w_Em+O>Y+mQ&SI~@Q zY;p6xl=)tVtvTP{p{Xa|^k3+yS>9_0)4GSUuP8yTHa#_ZZwtua=nifYq#H zZ~A*_UN6-3@tX37TGz+(^gj6AwA{<&`XuK4;KV!_`~Yo#nz}w-KOU@gV|tBw2yV<= zPv!a~=ELB`w9ZFpUI)}u=O1f5bv_C==DXx`?s9z+^D%H@dd@#i^PE@L$LqqMYTcM# zJDz|W(`$z@<@zM%li!W>1`hU=xdETmZeca1$!_8CPFW-Ty>*G1`F3oeovF4HMlRWQ%n|aytbmgPVE&iKecPd;Sx!dCL3czu@Zn zoJjvE&2z`G=8@}@JfDG^c|J!|*T?hV3$S_0`{kE#b$vXazM^?PIo3RKeUj&Ea5K+0 zXzI!HE!aHe{qj4wdh&b^KAYxP^T_o{o*%%?JpV>hPo5va<|*%&Kf%?L=V!3zony@- z*T;Q-6}|Tf`<#V`i{*WInUN z)m#VXGaJ~C^U*ddP0jg;6K4)^=HvTbdFC@G_z_~LTTgF#wajNOaOTqoEYE!Wn_rxd zW3**Hz8i2~rWX6uGA}r_%mbEN3)8IT13yl$9{>5luF;x!_zq(Mu z9M@AG+bUqS?6XzDY92@T+3H|F)~anaT3?#AiW6roaB5u>EYCh$8|*$)w}y4-)wKIe zu`c*vdUfq<(5o3+`}$xtZR^p?W7`lsVQt%hUY=);jlfSc-Z9!7udlktB5Uq^GLK(@ z%k|gg(^#EH`nob}iOEYEsu3HCaoZcSU!t7Sd52D={W+Bc_H z%bb4=R@1f(y*#$ZyANuytqO?+8}Qy+E6qW6OQ-9(N5~ z3)j|tBezfNoxzUJ`?vvMwKX`;;<$JuraCPhIPcJtnU9}tk zQPVbrUY@lc3ie%;y7pb^)l$#yVC%{Gu?JW!*ONWLe%ue*hS5gQoV(aK?&0BJW1GWc zCwHA3udid`yB9decO+OI+h}m&i~`GZe8+%2zK+qBTmb7p>H!R31I4Oh$Y)}|K! zeZXp2kA1;v9z)NM{lR`*4{iI=)SRO@^EeQkIUWF($Mzd=_V7VqdFFU9*f}~zn{(7x zJvANzcAurjabUF^v%|oCtWn#cG&O4!m)8dM#61FR+?*Rng4MEC+SIJcH8P*EGJkt{ z&J}z4lJw?Ynm%iA3^;3WG*}+nap2sSj|I!KKF5PyAIE63mZRv^GyWuSVxI_>XO5?U zbB{h5EYEf8RIt}^b>p5!ua>xHfX$`tbb7gU`TTPx*yjbuXe*z2^q&#Udrs;&8=gAO z0?Vy~ZC0HF_THx+|8v2{$i479aPEcrn?p@M*L)Fr*W6w{WzFrI-#?S%d~D^j#c$zi z*;f~W{kX5RT|iSak2vde5!iLNCXa*M8scjo-%G$bRu_ZiK1cf;d?~p39DEs?`gQpD z{Bt>2Ej3;VPL0~Gps87-II*t=H)CIerk?$OEm$qjL|1{;vR=Ofs~OYpsn>(|qF2|) z@3J?5)%Eea%Z=dcX!&j;*C#P=0w<>5v2TX^9a~)=-#gs`RyU^KXKn=>Gv}#XpTxWk zoS4@6d$`}H)l=u~VD;2_2iTbJlF#EP*C#RW1Sh87o$rGC-C129-#gt6RyU^KtL_0C zGvBM^`XuJP;KcNM@*m)SPgal5ePDHC`d#dPurc#pOs-G-9{`szAB6jzSUo-ufz=c9 zVX!gt{Y|b<{2u|AG5-kn`>%R@9tEo>=3`)E<~yHUAN{?5{t4{~PXZdI7pQZWH{#W8(ieu)6bjg|Exz$ZLfpnsqG(NYt!~7z1-Mz)m!|>pZPgPn?8T1S5NGB!D`yx zp_k`+{vNn5R?}OERzW9{h&ky{@zq;J}%LnwFLam<5UiBfISD3AyDODfA zJL?`;eawISnf*WM{T6T(f6;qfjF;NK0H^lP!E$T&_lCa&Z$__f?Vr)Bd7QkS zeGPV<%lDDrz|}Wp^}Jqv3s$rFaUR~sye52yW=zMsFRjUI$MpegGRsJ-Po4 zZsz_GO+C4P0;}0vN7pR5e@07gukp$4!f8wH3E;+2A6M5iA=sLjolQopwnx{bvHZ#)&yI+~0%B{a3C}{AU5{A3iJGn48tdeRl9{b?e23@EFel_ZTcj zbG&2pOU^mL=FI(B?wI804K_!3AFwqf=Unh+&biT&)A5ecFFEG{oAX_2a$V$(Nsf8J z=8XS*VEuD%mg}S4`|SK+k45>uc>y%__$&xEM()LOeaz`KY9X-KxqNR~7_OFg4~v5R z_Y%R{q-(iz`z4BNrp^aWWb6XN@UAdpj_46KQPUD*={!4>P zf4T36OMk~@-phlnr+i1g0-AcBC07KiIoEv8Um33M?-u*}I{pswDl~QH=I`Ulvwo|A z%k^7bKbqewu4aY(`R*EUb&sRRAwN@H6HS|O{k=YU>R$_Nu3W=CR%^r6A7owS>wwkV zPpM~JcqV6 z?!@*hu*XYVUwV1Imu&*}?*?;>HjknARFAp$P-Dp29?IW_NryP;{zoQ8spqn_NmgPXbcKvPfd zVPG{|b3OM&OYU+#hofst?h#<)sApY9f~`rL^|+pUft%|&3QaxZMuQ!z?t1p5SIeBn zf}3;N8%;fP+6Sy=Yp&mffz@oy_52N5 za+m9QFuJznJ_KwW^{mS{ur+D39@q0waC1EmLsQSV!^Jdp*K-WLn%4^NF-L&QXNn`? zGtxYN^_S}t|D(VjlklU#<^BB__-u8{GsUrR_q5Lxj(3cHna6QpbLN>s?wI5_9$e-; z0q#8VOmQN(ne!yHIpTjRSpPgz$o0|gGsS6Ok45=R zaXOlMe9izHBhM6aeaz{7=}d5WPdp2*=AVP~`_wsLKR#1vJDYX^&FjC|I6hOH2euaH zbuL(*XNvQ+;iI0p{T6Ipd8Ux-=l#W;#y3y=F9etV@;p<--#+uc2y8v&GsVSd>UpNP z1gus*Q(OvHUx}7yip#+2&TTn*dDic8aJhb0z}39>=9%J3xO(%M;wm(4#$A#un-+}W?p})D*^h>Vm!OdJZpsDAX;zqDq`Al&W zT-}&A)61>nPU^W8?D5ie3%xwg6t{tWrf`h5@|nW#;l`k=?!=a7iaWq^_f#KjcY$}J zS2xG)^lHw@XNtSQ9{;SL&lLBdspq!;l{eiGcA=Tm6vndj4BHJhJujsJ}1Je$uMe?ilh zc|HR+j(T!G3vT9q4oy9|p9ibinrr+5T5^|b{35!xXZJFmk zz{XKe?zh0r+;5|)C-*yGHCuCy-$hIAa*f|Z*OuJxgN>t}wfX>TP1>?nAA*}}{1KXZ z#(fNSta`@%6YLth2JU0Ie%f8*Pr%K2{tHb#^ZXR7X7f|-c<#s%P9!;2CLoR*~zc-Dj1b!Nx70RWzu_X9Bn}@~k4)C-=4q!R5WS2VBkH{q|X< z6YR%l6>S}~NohVyh>hd3%0ysmaWC`)%k!)T+Q_eNe*YY%nz6n9Ev}tO;E@qMmX670BxYrYg% zE%v2r`{u;-=MT%k_3;yJ*;*rIm$n?5WBtT$`C8L&GgjAnRzNeRF&v}MIC5!Q5p2Es zWKJuAU9UX5$o13i^WDl|=j=Xr4%WO1ntI+Vty=pSqr9%KhORAss~3KLZ%Vv1(6t>= zugRKV$Es)ST43uiM|u5T8(mxc)+zk*dl1&VF1ohlSP$%2^~37C>x0d$try?=9Jc}3 z_2qSAr9JwFweH^$p-#?_BP-v@o|i{^4#|4 ze#W4yw#Sxpdpoe)b87)?JAjAMtD9q6dbO;vu`XjrfydITn_~pMTGnU` zSS`oGYsXl)y8G-r_}*YO$B(9$XZ$|k=JE&6&Gr_kpf5&Jm*U+Dx$o)ML zpBwFs=`+(g`1(5(d5$?3u9oY9HZ{lRcTb){`;ja83N-)D9BAuzE$CW*m)7#s$D>W_ zcNoMBZ~Y#Fxu*bUO<$>fa!jn}RhoM0`y1Hbfyndc-@$6H(Ngp4V8?0mSX$2;H1(gz zDNe2ae#8tkKhx2yZz}rfY1TI*eg1Brx4^~c(LSb`M|;M84%X&=a&Ge2 zz66(XzlN*1w-fgpaN=su*l)qwjO!Z7WBVRl#{D;3?FU-o{s>N7?HT(MSetQOYk6!w zSd?)mgsb^%l(;>>iK{(hJHXnE>oJqZHWAph@n^C=!}#}xsl`4C*g3{NDO@e@>?Z>| zM&0A?yRpe>?gfvBIpz8#=9FOPmzYz*)ncC-Y@M-B16NDVX~B+BPtNJU=FE95*Uy-q z6Vumr&lhpdmszmQPV+M>>hu`q^lnFLTi6{FsSx<@w^jjZ^YI4L)Ck`)}iv{{GuI zCHLRP3HR@=@!!Ug=X{zOZe6Zx)@l|s^_)+$g4J?9S+iRFX9uh0e3}ESR-R9D!n2RG zXKZh-fjwP)-? zU~R_rSjb~r1YE{l6s}gDPm945S9``T4%TK|kEuMiCBbFfrQvFRZ_atT3^;MMXY8_I zZN_zP$YWa`T*h4yuC@X#aaRH-uJ(*w8LZ8??lF06tARb1IoDPPtHr(s*kcm=nqak@ zi)(=$qn>kdZLoVc=f7OP#9RmL@kq>d!D_Lu2X?C+DVMbLL!=>t{@_E1T7JuQ}pebNXPLhvsK4 zn%A7(^mEg^=FCf_P3QaxNq^-efStsYDmbL#iSS{D2ZNX~gHEBC|_O|wn-5#vXz3tk_W7`p2#@z|7 zR$i0(!xL9~#_kN(W?a`;9@{S9GVVaQT6s+x1W#P;89NxP&A1*bd2B<#W!&B1Y7@|M zjt>PVuJ(-G9jwi`9&>qY!@yhEQHEB3JakXdc2(UKex_9KU?FBC5j)JR|*QC+# z#MPd$W5C*s>mHQHwl}zpyDwaAA6nL7KXBq|&)EIJ+KlU7mdAD=xQzQ7xY|Lq#61|C zxY{%J5U@7mdQQk=I}GgJ%eCWhuv+X#fZao}9|=~=wdE+VW7KnPIU0N@E!R-Feu;Su z*!`23$AZ;jKMw3Zi2Zo5T5_HMc8q#*o(MMQ6g1~4*DoZN*&eOr>%(X$TUt*pK_BbZySzxu;&jx!uVm}A0mYnB;9iyI{=Yh?62F-cO z^)qH4u4U(gwR_zb=eoTBwuNba7NmLIo}Ydpn%C_`=yTn^ka6X8`_h761-`oG*5q~l zBDitN>*&R3>bZ_y0#?gfnL{mWaT!=G*U`(tYUOqG3V8On_Kdv}tj+bXR(WjKfYnm# zwP5Sd-jwU3ziV_|ZFl{|SwG*~FGcgS1kLqZjDAU)>$fz0*6#+!mFss)!S4XyS@YC% zBiuOU`rU-4p7pyKtd{jNhg#-&D_AY-cN(Tl*8dd!&?q9|dc3{j60U+n>N{Ime#> zt6BS#^iR>8Pu5eekKJ#gY`&)E0D+KlTlmB;oWxQzP|Tx}^@;(iQH zTXYOzlUcD}LqfUD)Xpabj}b#wN@w-ap6DQK>jTt8!at>{_Xy^e@;9r5QR8_@i$ zNAo(e4*mKxuOl1M=Q`rQty^A4{P%TB?!T{Fa{qnZlKb!LhWq#7&Qv-J4ld))0aq)p6LZ27 zS9`|x25U2}$4nmE++f!xdvhMJTI}e-`9fz{ljxyCIG&suBGe3t=hvnFwB^1bh7G(VfrQq!hjYucRN^U|M>tjsvi ztJJtWT)(o$70}dkUaSaK^ZM@3Wv0Y`CAhlB-Iy)T^~G9NfzLp%ZmsgN)_&Ohl(lXF zx7ID`Q|sD{D{EaHu3uT}8ffaNbxp8ZS?gMGb!#=I+@CjE>pEa-Rkv1oYW3aLHZ(t5 z(Xy^vgRS+~^wv5v{l<(dYh53%Us>x0XzHnTL$F$EoeBSq;Of?DOu4mMOJA_>@YStV zUe>xDHa}&p+rq7Nd-~Mck8x$Ko5J-gYuyY@J+*EQRx4}W0sQvg8=87*9ST-Ut&8HnJ6zpb zjVZTQYZ(Uid$78-%2TV~pNG=?456jg-N4qmJH55ePd}P*WvwIN`jxegL{m?#dx6zb z>wNf+f~#ArG3C~3En~pG^H8@|d1_q_eNUR7J!q+Q7}#2e(_8DZ^an7mtaTr_er2uu zqN%6W{lIFebs7BkhpStwG3C~3EeE!6JD0V}Q>)K!d(r%iprzK4U~3&kZ>@g+JB)E< ztp~&PD{DOjO+B@a6Vp=b%J?4&SGQJU%B|H}4hOGU=dxCLYV|%lmgZ+PEwzpTTkGER z*18V;af~Z#JqoU0S?keg>Z$b@uv%(e8~egyZxwTr$@!$>WT-GWtYuy){pR(3{ z;MTeyeQG_8ab>M1!SyR^JsC|swVnc2D{DO!u5PWyl&99y!Pcs7t@6}*Ao{^HKL^oV z*8}K(L$lUH=&jZFac42kTEow4@XH$f>IT2Q!Eb5sI~x4n27j=@A8qib8vMBif4RY5 zZ}4{tK8|^QRP#LloDFwf%42g5ntGnm&IPOajOMX$&D8Q-b`e-D$MRyZ+9&wuneGz! zg*3l&Y0ub8!P<=L+RJ0R99+h|0tH9cf>oJtab`7|Udo5h8{2p-~ zJaM&W?C-$ZjO$*I$94m_jC&(ot^6Kw6FhOXXY9>jZN_y^$z!_}T*kc(uI9Ot_5D3O zakXdc?O<)jb#KaJyAxc-y$h~ZzHhi2p19gG_8zb{55d}u`wqQ4wvWMHi}JntpJ27vKLKA> z*#8Aqi~Uou*M^M$46GLW=iuuL`xjufd~g2}Y)<1kR(rm;e+B-C=Jndz<@zV~*I>`{ zsOH(V{x73S{)Pk!~}p9@`E^3M%cOa6Jl$!}cqtLc~g^McF# z^TE~f{9*q2;mNO_{0pFKOa2AHYRSJ4IQflhel`7)e_?Q$e-XG^o>R=fC_MSqlYcRE zZOOklSS|UN04Kk3&9A0k@-GQ4^DhNg%kzx+mxi0)YfgFmmqFK-{L6yXl7BgH@*CIu zYWgMr^58Q63UIYN_n3c0c=DIWe^nucnQb=Ogp4 z4mZE&P&xlK(6uH1nqal$UkjZ4#x=j1e#yT!xXix}TrJO0=3f_{{N?=DL)Vu4>x0#j ze*TY?>mn3 z+V^WT_2k|btd`u{fs@;q=2p`$xwi+Gxp#o8wV(0Y_plw|=AMK;<8}h8Cs%)Pav8&1 zYWii&&fqfF0JvKFxv!mT7r424(P!L1uzGS00we|bGQ09{-19|%@U{)52DZ(Q@M>6iS!0hjp? zhO3qL(?j6NUtUkfp=(S2L&0jve;7FVjca~2{gVH1aGC!IxLSEXJrbV$<@Mw!bZyCh zG*~V9j{zsYam}x$U-BOdF7qD;S8Lx-+k5|bxcR-GX50yA>dAE?IJt~rE;ap{d;ctA z`8l2D-am!@j2fRteQ#g{z=3s_x{On$CP{j6g2hh{Zqke+55&&%N$Mvt7Y$> z4puAo{uyxVY3}_q(Y0mm&(e>U^*9@x^)RmMp{8H*p93!Qp9@zj_x^eCYZY3-QV727F4V>J@G`E_5 z&GYUe;`#Y4&GYVD`U`4&KK+F>&%2B1bKd=)IOTbFJKQnld3Ohzdd|B$!D>10jG>mb zxC^Y7^X_i2T6x~x1Gk>$d3P_mwyeh=z-n2K`@mTbWFZurnF7rPMS1ZrE$Kc6do_CLweq}s8lL>+dG}{@ZOQ)^uv+pz15SS9nqN)7=6<}AV5&9y0u%k zT6<5l?}IPGo3a0jrk=h05?IY^h`;Y~vbDg~jcNUIkHx9j{swlQ+MJ6#f1dd@u=h&G zXlt(Db=dq|P0RXSQ)8bYucf(uzoU1(e8zm2I9We^-m7`m@9%J9l20H%JsVi?pnGwx6)j{-_vLPej-k}em~bd>-RO>80GqXgQlMK z`xdNLuHSd?te(vA9m~y>3(A2YDonSTB z%Q}sr<{WyWO$t`a8cYUOEAPj>;MQXvb;tUAGC8`o+z+MztL3^nB{+Y#lyS|kreE?; z1upYX4Oc7g$J4-*zq}t$i>@vCrvs}c|McMGH?H~B^h^F3z-9g!;cD$`SNl8gOmOoz z-zmyNAl-KQFqrXTw@EPV@69E%iJGww^!Hr=IN?r=EItfU9j!Gp;;w55(_jnx7|V#vMohWPzUo zo8!;)-e0x%Cq|x6+zWej=6>704(^QI7|r|O0Ca8c1;_0IHvYS`at{wg*OtHEZ4lV8 z>KQv2{7X4@Mb{R;A>icjUgbJ@Pu>k(TXGBqJ663Hv(smHFlDy>9sz66Cvo=xCx01t z7`nFj?Fml)@;n)it}XdTfE}xzu_M91lw&V+ZSflgPLA?>=xB6p$uS1(SoO?tEI4zt z27Siyvv%jdH`q1MC%N_kTT}BMzc0GBjNK3Hc=e3kAMD=A@%G$T(>Fc`fHUWEy$(dz z7QchQnRB^!euJ(pb3PdCSoMrO1pG@m#-VGA-=W~-D39@B=-QIwaIj<5v#v*gv#!>l zPvRa4PX6+E9fhtfen*3ozg&xB(6uH1v0%rlXY6s{U&?Vjy0-Y808WmwmJ`vnCC5o% z$Es(JCxbIbYtSdh{}ixmpigq03brQqPC1{`(6wdk>0rmJXY3i^>>bCtchvNa&za!N zx!e%gvoKFRevur)QWJJ+LY%h(&hj#tmv8^PH-u9N`aPpVO>t1wi@%sZf`OCGq4_#aG-w$@Idd5Bg{-qobqHBxa zL*V2nYk3%5TXH-CcC32l_(yQ&Xbt-0_&*AE4fIK_$H3OqyzV@Xt}SE#1a`c7#y$bg z-my;ij+(w}a-Z~>^eM3M%jf>5(bONs$LF^{gVlTv%)gQL7r46n=o{ib3-;sR5w7hS znwrmF;?(pUIBQq#kLS^~#qWi}uiUFIqHDW{+McBUE6uU$t-t?~-kj$Cif18xUZS zz}DnE^tT>s{s(<(*5^&yyEJPSdtCjq({F)2u0F5$+_)R;ogwzV@>8U zrm?eE-UB!H%KK>Q*()D_)ylo{AzVFsylkcBk*S*}EpP;EH-@m|W z?xpO_PvI>c&ABADeb)Cgu(_R|{^oUkzo7SHZTfspQ?oX4j`f$|tZ%uGze3j*zpo3w zavy(#uI;XRAAbvWtol{tevn!0uUK%ctQzo)5LmpJ+U4NhI_)du3b@f;{&N$Am1DyHk(}Skw{KVO_ zo#4zb`?@EZdj4I9iNI<$KVEM$eqyxj`HY_gO+Di$1*_ToINs~`H1w09$>*h+N8iNm z1#ZTk98G;wuC|_oQ-IZs!_-|aX4v|b=GOIDUwsmDN^o<&Q=zG+-l@TAw#3T#Y0#QA zO^c?U@za6TY#E>VPLJk%eV#LqzKJ~pxEXs!H1*7PCa{`u{1_|q_L`%wKJJ$sZ+m&J zLH60VGh=f-n%~c7LDv?)S;1aAntrpPYs)=)cCcgBGjwuG^^jjBQTXL)icC32lzdqR9+7fRAaOQ73=dafCt>3$C2v2S0@!tqtTVibt zwzlSXuDZbV z*d4*iQSOPI(6z;{KR7wcT6RX)mK+1Xj#bb6cLAGQTjC7_XYI;(gV42Q>|n6t)iZWi zaMsSTuAQ2`YgX;=NkhQaTRw~KhNhlp(V<{9W8_(MceuLi=yT4VU_U-zY8yryN%J{J zY(C#F4+lG+@^`#Pps8Em9`thWlg4zsaWZ}{u=SSXN1>@_yu2K5oV;Tm4K_#OjRCtx z#&f(}pRCVVu=SSfvp1T0)@L8En)@Q-_Judsbw4!qM_3ELf9?-B0Ja|US&v-5 z*bf9Z>p2KbJ@xzstmb!>{4D)oxVq<2VjTicF4xDJ#-XXF#zVnsj?cKmz!_(aa{XdI z9BhsL94v83TUAxqqJlZq=FKzVzzaox7Ur?RWii!Or*Hdc6Fc z!v5RZ?sKK%<>%M-UW~u6w!7!G%P*+yUW+cO?K$`5=hb%KAzfVCb1urg-eo^rQroi^ z<)!`7+MfL)&wa=FUj}#1UO%s+_wxgPQ@^_0?<|+oQ);Vc>s434*?z6w7+1pif2()> zuY$Pl_LJ3pFZ!$D&gmNZN$IbpckdZL$La=fj+OgJ?y;H{{~N*m=+#|I_nn$+;acAW zR`XaG&+n8s!`0(+OYP(Fh|jHP>iJ%F8`$~ITaVYC{qTEm_Jia7-g!HkdcK$40ai1P z>qXaEN7u}{_0=ae-3e~ieHWT~eD1D&%DV4CQ%~LZf~|W2n&Y*n?mvK=b>D}kp1SV` zs~N|Su~NTv>#L73J&q56jhVeA_x|jC&%NWZb+6>uJ_63M^%@}e*v`V3KZ3WTS2vf} z47JSvQLtKhY#)QG$LI0dr(B~yp{Zw$o&e|AI$nFmKM6L6=X&Gfs|8xi|IIC-r^?Zm!$sXzKC#qV_4*?MpQE)cqCMIk`6-uRY_x1~=F3 z8#ML!d|UgJ>-HU*dUAXZP7cRwkL`!TW-a;}+jaXlxVdgWqN!)yegdl*$B%ike(pDY z^)aS<`)9B*v$y5Vy?s^TKLIyc{qqbU_qjUpCampw29P)7U0uZMX!y&U{@382b8BMk zIk$ZFl6!6~$6O`>?@6!jTzytkvo@b^CIzeI+?pES$>8eo=>>Lvc?Oc}lle_v+cST8 zv)*fqdZ)&odVLm@TkmS*o(8-Zy}I@K?5JigkN31-wbbkVeLA>$e5MCmuRg|*>!aQ0 zkQu z?>T$ith>wi^?Ux)F4h=h&Nb&;Yp*S5-R^wL}Oi;BxQ&i)kRMkXP z&sN`OgUvTsc;u)73op6UqB=}k^=SF&GZ{Xe^c}Q4`VAhcVX>Z7H95N46trG6eQiDX z-?;P-LORIWXM?_dHr}|;25a^0KYV!Kk)!q+7th z2X8vM-+;0nH9uuNGs0`XR(`pk)FV$l)+hHE4qv=o-z?yIe7E|><{n$$%=o6h*}!Xz z-g$8UxfmMm`5oKZcb(Nj;LS&k7`FRBD`@X+H9uq5t)p55-u7$PAotU~hKVW;W9`?iimnu8 z9c;AOuc~{( zvbJRz*IuKZ)e7J(M)Vsxa+hHv_Gm9tE1$Zbv9)zpE5o~d!R{9|KYR2W1@GD7?yphC z9MW$TmnCYQxLS?AYizedyHv8bt8^c&ihsMtj%p3?8bbyTw>;NE?q_Um9o1TJebn`l z``LNtVf)y-ht{Fjr(60uaJfEx@N4IusM-LW>)xn-gK|k}T=k6Kqguaf+@#ee#klqc z@$h%c{F^a0E@Et6#Bi(s_XzDeHY;LmUBqbD;nn89*RfR*W7{Hzb^P}T?K*x}#MrTj z(XOL)0r_7GaZPt9V)QFwSjT^l(5_>rt{9V4?#CR@b{+p~39aKgpcp^67;g>#`{;Il z&)4>TnylKR82>+>yZ^B>+Hr<-#hJ9)vxw7m2K|>}Tu)Dsb}f@uql*};4;(aj=zp9X z|5=DJcqFJ}Oj3DrWj)s#I^e%XaQxm~<2$SUz?+ZaI^oI9$8%TBPkDYH0B`xxd)<-y z$#qBGyzUrF-TPav174%lyvGgUjLh{kzCIuAGNj+2k@WHH1P|{wYFF+@qlYs2o;)=f zqi3y;95^T@GEP_>jNYoX+wsUO$6n(O!moWSrml|Y8ngF^!J`J|I@4{?$o3OgOIv8K zU6!OR-s*Q*jG*oR^Z3=;vxjxX?ok~Mc0N9P9Yw#|(4oWJyDqu&R`WAOzHhfFMJ0P{De758ZcWH1$@V;sH#T*;Z%zQW=h3q|xsKmH zhn-2gMs+{sTuy}>zU|xgQ}a{KMXfm(_kg;4sN64|)zsBlXk+94=PbKwYtFN6sAsy+ zE>70@ok6_J^-OS%**SHd`c~CC7HWRVd7cNi9{sd=%+&m3o}GNtxCkD<|E#*s(yUq8 zitAc`PmI)hAvnk7;ySjc^nmtZY1N_bXKcOGR#(8SqvhMTy(s@#Pa-u7`i(^-p6hrS zeQLWL+^%iv>e_DkT37G?*qQ%RHoc3j*~)Wuk>{Es&rRL(jJ>k{pOZD#`i3IUjYXbY zyXDE%_x~qLd);m>^4!vuXT0i9;7z#xwO71#*KHkH_m?(5V~=ak>JE6rpFPmg()G=E z5&b;h{QefZ=b7J^!o5!WUBq1adwp(QiwE!1rFnfG*?P`*9y3+xrp$&{O` zVdbcMl^xr-)I#g?;BInduiaxEv`)TN)y7`VH?pu>Jlang8RV z!*lvseB0|hdG!)_(7;ix_aCkMcSio#YTEn!MaGZhK5pE1!LGjVDLyhszr7cwgLhV+ z&~M&<;Lw4qkM4RlQS&oWo!%IqwUl;@ufW7$N4NP8ZO)Ev^IzMX9o-(=lM|r5XL?lA zgHy}Q;IXyvJ-*Gm;?CXXU2zv^^Ez%vwP>3!+0N5ZE#2lzCGSe`Z>NV)7 zwr}&Uy#3m|EAK9C-j#RvHt)(iyv^&p9o6VIZ+)G0&G&EfWm4Cn@YHo7ICWjp_N(ja zQC(H|-B9@5-0-`j@Vl?@`*XwZvBK}!!tcdyejU|oZQivWZ?<{Ydc4=>UF-32n|H0p z=WX6~9KMEUz7ufq%X}vRm&bp~Ht)(iU7L61ow?2HygjPf;qAB`)e2y)8U6h3;hL|} z;OjT|<_*4GgZFRn-5Y#lgYVzqhc))s zXY`(<7uK5dzqB2rYb~#8^RBhLzRkOi;mvK{bqsHB^R7L8Pn&n`=?B}q-qRh`BW=E{ zHJSgZHeW9M`8Hq7&8_{_np>d!&6-=F{Qa6+pmX~a-agj6*W`xTUaKC}Ze6%%H4NPK ztktzvZJjVxzdVQ4G55sZkMU3HiqoUItqXH5fXjXLdV_z^;2$>lmks_^ga6Xtzjoui zALn79Jy+gigIhQ5frDDJ^Latd&v2ey_>R_^%LKLNymkWj$1XmdhX~&9fIF%)z+>mt zqdFVj_Uovw2m3w1xcc7E&9|d^2)-w8SYm&;VSfwW-*>t7__w>+dsO4`rEt_jrhVg-Qd$S`1Eim)IRPV)vOJB?*^Z}!RPA6dsYj>hYTCGd*7Y= z_20egIkmG|44tVB9?_+BRLeHTuGZz#ewIy5t9SF`-ED*SY4CNs@y=>9cssYdqJ6Gx z-p!|@+N!~~Y4B~kajpgM_I~eC4Fc!hxobDSj%v>aAKBmsH26W?_;}UP@YYY}JjQ*y zugfvrd^@V+y7A8HB)I2r>x)4>?^C+@bX2D|_!$j;b~oOmx)?rU*xs#ud=)r*_d0O7 zcOUOIuA_Rg8}Cs)frRBM) zvswyX-(xnjTJJGxe#-B^%OuvY(WAVS{f9FYhIrb+h-VM$369 zu-5as**dD58~m0Aza3uQhwf{n%?tM#gS&`7 zkfY`v)q-fb*Dch|pS6Hz`JCSt4f|FNzAbzg-qCn0^xv+Vy|da8-pXG)>9bompN?us zH{Mwdhwtor@xJ|AZ`2&KXE&do)hKu?ZsDlkA>I5sszbZ+&gw|`z@Y=`$nBbs>gLn4 zIu_oFT{s&1v~GSpuN1rw_K#TuZY`jSpLun(zQ+PvKj&VD)ya3*ITZQy;aI5kXyK05 z_u1Js@G+j>Z+o{`o1f3~W*I-v+tc7+0qnNMy$z8bai55;k8 zzRuROY%`wEw~6PoYZ*^&Ji@l(^<-hnczI5o!=QXz54FVenX!x~H(u=i9*4j0FjH%6 zM|D2OLp}p-DzcilH{SY-r(uoE-;3sFRxDhWYR%u`s9IdD7run+viIirO;~gNv^jn< z`gY6?ey61EuQn~VDd>CArX$vr^m6N%6+RWcnyoi{YI-$e74y>d9I)1{DLRfN1HF(GHyk%6kKS?a4f#g&9?$SC!5*LR z?ZK{fcz>{K5k3e!Z^3s5JLlMkfvr2-=O*isTdP0I%RKf6I}f#4*|`VMXAQDG`lea` zfpGmC>v0@IZwxihg+uAx%i6V>^CAjH@DhVh2|X9t}nF2{S#W^-VQdd+N>PiJLuiJWz$z~-FMRK zub=VnqPGs?X!F?KPrn~+f|@@!Y?p&Al(GCGO{7Kl*<`ugzGo ze*;ck>OaxS@#A3Zf#uw~ zw6eYfYaji`)VO!;?>e1R{fc4+^l=GphX zSs3f}TH6M*8MSv`z8DtxO*)8MfijTe;qzi!QX~Y zT<{O!lhoXGnSe#fy2~eqyY4wolfhkQ=aFX_=ixJp+<6SACu~b|9&(>s)Et**7RUK) zB6r;Q^!lhdPVV!GTIRO_e4m1E317D0+rejrPtB;Oz>f1co#Q0Rw^jmXW6fzE2-8ssA=2CMF7Oyc~ zi!Tdc8m$=m%YFZ)mNi)sK0X1$SA!pdeP+DY2YcP|d@}w9aQC8m{D*;i)&9f5u1{Oz zI|AHX>gJdG-b&4Qd)L@8=GzzUx@7!*wO!rua^G`h{2?`VOyc{#OS|!o27CMx@0i-A zuD{&(VTpHAjUD6oQ{eo+Yy7FTUET3=-<>%={G0~&eVO*G*CZ^U&wb%Dz}JD#$5D3A zEd%exh!g1@=lUC4?t72Kvc_3BnXkF}>Xkhg{Qga<*4U-NxVE(9SpjWPwD3(i@n?oF z$f!ja=(D=(f@}BvY3yU*zCSIw?@vqa`_pjq`M$E`zOxKBp6@M7{%V8!-mJAUq$&&kivgE#>3^$(dCc};AyUB3l`EIi0zMBm9c<)qj{e3@K z+I>eEuHAQ(CHEa=$$dvza^F#w+;@~E_q}AveJ>gA{Co!)?)-cQ8E!qkgACW-caY)Q zFD|%t-$Rym-$j<(cabIcU1Yf9eHR&SeBVcw+;@^C_nl<8>+L(qlD}1OPftBwW!>!NvjN#_@U1PZMeb*RneBU*O`yA=J#&BTeyT)+ijYrYp#`9fc zxbb=w+~-W+HO6i{-!+E&9mjW#;nwea#&Glbt}*-)xbGTE?z_ftRG#iVAsxC%;OsG0#-MM&tGz}&tAqbr+&MFpQhJGTVf6d8`JqaPOh(O z?0UOS_LXkbKj4u zb$$H4J{s;g_mnaHKC>5GU7x+__o0oTIo3RKeUj$@a5K+=XzKcS{XPh69_MNvzxNyr zSJ&qd`Z2WqX^u6IT%Y7Q4BX6fIGVaX&gTfQc|IuSb0l0{ALnxv?NFLy%_G+*d5!}& z^Bj++uFsR?IRR{*91FkGoCsIf=Op@*X~)tWYaY2i$#Ximndb~Nb$z&mS7(CFZszt_7?4p3Uo={0f?}j4f{7mone$ur=p!wZ#{W zuzIfFcY%$g?lHKPUM(^20jpWZ-t_mU|HFKKiPAEy(#||3972f5+B5 zf8In>w|@8STVUgs_sh58>iW2^-l4hw9cvwOeY7u5|1PbW=e=6j$G!YM+&ty|@&mZK zKAsaF(mW>|YaY2i$@3Aondf6Pb$y)ACt&k@z}mUao~xh2)%9^cpV2%|9BUrAKFRYB za5K;6XzKd7=l=;dPkF!m0RZsz$OO+9&j0Gp@0U;YSJPoAH^=g=H$9=Sfr^KWo7&(CP; z$@2@?JmvlJSGaoeR6H1a-Z|Dha(&$QSJ8W)u+KR;4))97c@7;Hu9oYjHns8|dnKCr z+%p~6d|&th>uo-{KUavov$p5jF85~%+TGhdYkTs^{dt0R_sV#+J=aIMKYP&bF&@9R z=UONCnIQHFYJ09*^3pzGZO=7G9=qq~MDXTunHWty-<2l?tNBjcd-UY=e!NF(n~bLB z+KaRHQ;Nyqy7`V(?)R4c7&{gCL3(xVzH?Q}^>13RdqJD;U*%r^`08Cv2R?${G1~O; zovh!v-Ui$IzCLx#C?;0sGZS3Rb#Okjfc-chZ8OupPx45olF0kBMkg9pWkI}2ge_pU_ zl=m3(f%6_ie{-tomof8;33v^0eO6llu9kIM2<*po)3zW@&2*`>6 z_Su?X_nEpitVOS;-Dirm!3Wc;YhR6C&Dh%40jp{2LobhQJ#dfOwl2Lq&m8N6pJu#c zv^id1b&o~X-1%f48-dI9*ch(nad$m71^aP5v~5CDb3Md~vjsTou{l_t_1F^Zbwu5o zwxUtMz5AR{|>CCZ5w)dY}G!RqCE zyj|ex*0mG8+?aILVE&_~ZC84E)_OOv@1oST529B~J-dUgC+Eiyuv)GsL&1LB58C#i z4W~JGv2onP!@$NihsRFtIyqin$HaF8ILCKSuspU=;KUgTmgo46277!Rqb<4A%UtHn z{PqHu>%BKzEyr7%TKx9`t7Sd*1*>@sJwNsb`*A(A?MG8{j^fPYKyc=G09YQ|!QkxS zgTV64@er_cbc{CVsIPiz90PWrrN%?SYB^?ygZ)^ew!>&@)+jEo4eE(|B-pq)H;w|U zWv#TSS(9sIK4WG6_VS!7_VUH)&AlXj*5Fuh*5DYhJhtP(xi23FmS=rV0J}bp(Pk}2 z)2nCv$>7932`tYXPZe`49d`;?p6k|WV6Wrq+E1rfOWZTT=F)Zsz1+Hd{y7Wm^MYfv zmCro-Pmkt3Cv}_yPaS82<<>!I)wy8red_T)4{VIw3(p7VUZ}r0)bw-B7ovB~?d6l# z+`jq!GdV86Rz6$&9xvrc~iyYANHagbX>eC^|V2{^~}$}}v;VIJtL2&KDzIAC z>w2)7G5wx;19$|zx;}oFy%DUgkKbKx0$)eVcN4ijiTOuxVje=Qo8f-PR@cY(PPc&7 zjp_H9TfxT6c`DZ@F>eDWrgi=a?)Pc+)OkBtJ$2pzHs%N9^Ek@&Nz6OJiRpLeyWoCz zR@cY(PIrUVjp_HQd%(ub_bRzQiFq$LG5wx=AKdTB>hZZBtZq!di#-4~X1~y}275hpj5d9YqwYDEy>GAW8G6qZZGQ!OUfBCA{~Z1E zG(Xy3sO|Qd*Nb3d?>f$W?rv>Gv`;qa@T7N`TqvqkTrEo z{NDhpJCE1tY5Ra)p6mHX;0+kBuKj&_wdDR7tmgB@zv%t^#Bcno%e}vRLeDAG z>bdMypTc?5((0K~^%=ag?t#@m_>Vug|D4|6L;WYczkm7#y~o9Psr_qkYX1r>w|0MT z_#5yh^y=3BCB2%*$?Ms7VAr{PANf68ePdS7>(vinHJcyj;eE_&!jEXibiDi0n!I-W zgr@C8@)+aaVB@GK_s`&F?qATM@#N;!NyS^Q`gf2 zY)#s%$Lnwh*m}GU8_T*o(bO}pC)ly-uIIP-t7T5(gPU`j08Kq}nh>mJ^HZ+pL}<>* z8p`#Y7+qWDGzr)^>d8GRxS4x0H1*`39IR$*uIChJ$z87Jl<3-$dn&MT)Uz&AgRM!M z^|+qXfSc<%Et-19O$T@irF=6J{Gmz=%8=FI(B?wI804K_#k>|kq1&N<-CoO7Zjr{f)? zUvka`Hs=S_6f)y2i(lHE}DAYiL3`! z^O?eR@y`pb4_7zl2J~|4xC7fpV2_u!4e90iUbZp#UVI#*&12|2)no2G)EIQt=Gbx% z+zc#tPtAyJ3-H$T>gL##Ud=gq58M*$@z47C+`ko?daj#WgVk()Ja=;++6K*-jxVp- zzeCfO>*ls#hU=fY>Yfp$n`O&_ocJIti_z5cOmPWVt$e1q6t2DkEzcB}fz_ScGW7DS-{s(P{jPwkdGF0L z#g%aN<}<}rXxfasGQB+YUkx@_?uj0&YvAg6rnnZY=6*^&*TIdIXNv2=d8W|cTx$9y z*A3uit{c(R^GtCQSgm}f_#<51m^ahQt>X^rxfSg3(sm2IJkJ!jfqkZMjJEQb!tde6 zpsVi0mS>7Pz;gFgZ)|sgccfQ0$L;iL&dFzryTKm+te?*m_n@igx_K{H&E|(;t#x}6 za37j69baCv??=;?>*fPsYxOGFnzUuDUIRDR_;ob(jQbndvFaK326%c}?n83@w7bTC2RG;WCYpNY`4(8s z)?DMa(VVB(h;kplgQhL>d>3pS_2hmJ+|2zxntF1709La#*Z4!URGE#z}BQKYxOC(xyGNNsb}0jz>ZbVxX;0^v1{Nymg}e8HU1~KInOW9)HBb2fz@n& z%6; zp0)Z3Y)#s-R{sV!*Z5~N^^E%k>{#`T`xQJrEzc@){j~e6;(v@=KC6tQffk=}!N$n5 zid>)E+j@Y@du<0?&ENg@S*0h~kIyRFI%yNpe3lR!$7hxC!Peql@Xx);^Q z%xyxjb>&$_uAlcUa~j_~@t+u6`pfgI5`X*5dlInql+P-YqN(RuWiqgu$2jjlCWou9 zKy7(enF6lv+?GL?XZ@xGm+LnbT+P3OBF`#Q!_}M5D$}58Gw#a7m8bq`!RE@n)@POJ z(A4v+GCf$Wd{&tOZmc}3%m~l3ivH$O(=WMZ0ylHbjHaGvm07@Q<+IAHaCKw)XB*|N z%N^9(8|?AY)(b4pv&!sXpH&>At$bGTX9UKetLDa*XO+3Ya`%*f7sou{f%NL;@Xt=F zWlr;f)ynmoAFdvs1;GB9%G@X9`eaWp49=eR&sNH_rxyXcr`65xpT$%&w%5N!!H&(b z@mXmxG{#`~>b&cK&8=->zV$h7U9juR>&8lZ^z~}pzb8VU#9bfk`e@G@ZUA)K{;^-b-m@M2IxOp57KvU0gI1sE>9*2YA>g91b7_OeA!4d5*&|;C+apZjK}A)v`v%fz`_6a6DW+$KeF9 zn&Xe9muC%61UJ|4BsBG`;mKgNat%*`tCwqdDqKBlD9;+64$c~$29{?H&jeeSDOy}b3?@;79<~+Dst_#}K9G~Akc@FJouH?(o z{Cjhtt>3kvYyEv%%TOPWHm%=b5Hq~>dkp5D6r44Et@g<=v7Xmy>Z$K ztGz)>&2NGor_Ez&J#W#}e<7zhwfg%J)6)D*O|!nq>8GJt-*oi(`+eR88!P;y2LGzT ze`xSu3+~?s;=lP}yv+YSuzAb*zYkY`kacxEKBTGTerHW;S)YG^)v^}<1grV%;C@C!!DZZU;cD*f#QhGOxY{%Jd$2a+x<>NYegv0s{|#6B ziI%uOgA-SK#{L4?7?N+Y7ACW9r=HvCR%H89P5%n{hoB^4JyxmvI+@tCi=|!tlh^p0SI7wHeoADvxb3 za2am8ahHRuElW$><-v)oJ!4k@YcsBUOdi|H zV2@?awN=1sv9AjDn8dysSS{z`>R`vH=UiL^?B31!FV`wdC9g>=^ar+!$=moNIFZ zjOle{liKbzN1SU;Z)|hY{LD`Cn$wGZ4w~1Tx#)Av*_?5?CitAOb%Sr;;QbnWmj>Ux z!G|~a=my`v;A6mt);!mwE#TH&UX!*&Q_nSNE3jJD$vLTI?Y9A|<(l+6uv&Rd+7_O@ ztvzG618Z|{yEgLJb^w=gcZ92z*QCDi#MPd$JAt(s*EN>Mwllbl+aIo0UXupE6IXl2 z4g_m6uE$Cq+aPcmcUQRDIJBJOgTaZbJ!5wRYcsCLTprsHa2aF^>Vee-iUpuv+ZLf!znO9}iYb&J)0nQBTej!RDNl<~-&4 zCFV(B_dsHv3|5Q%6tKrK_EW)X$$1*sG3v>AI@p}KHpul$%rn6r$HY7ftQPy(V2?-a z=YZ9c^IWiF)RXf(usP45IZwHM#_Y|t?0m3xuiN5Wx97#S0L{;QG_Tw9(9civy1gKM zuG<$fuDotvQt&ImSJm8_yslpaH%@sS{R5hMuA>)&)v{LRP|I3e3RcT?^fItoc^$nR zp8c&oW3K>fb3Lq89^2JmwbXhI*!r_K<@)IF8eLo4T|aTw&-eC=)BG$-bNv>kUySDZ zEkU34yMb}#`rTac+rf9#JT=`2H%_^JH=(I#{r(76%ler^E%Uqutd{k=6|7dS-)-=$ zpZ1LX6Ih$;XRY$s?gXo)*1N#gpY@aLqrYo(cWrn5#96ikmCsr4z!O({#=Z;IW?YYjJhu12W!w+oYU9xI9PlAHakXdcM__Hn z^_a?I`vhFZ{S>aYI4yBM11GNbjQxi?&A9Fjd2Ig#mvO&@kV`d$3yUKY(4^*nb48#r_l6HH!V;V72`G@n^6(jq6zL z?)P8lf2Da2=<=(PK<9S*qoEnTratP z#`Idzv$lI35$8JM&q>yy`B|Ihb!1KYJ~Xc*>(b{s;=hGkUPt`*a7*sLhg)+0J=~J} z@8O2~cjC@o^IRt;g!ds|d7YRDO+D9%iNR{QPFRy#)^1X;TCNk5fz`_E#N_boH|-fa z1z4Nw=iKD6O$9FFP7PNpuM^Y26IXl2P7Bs%T-Qh*+w|Zv?hJ6X@;WgiJaM&W>`Y*7 z#&xabvCRT59@`vX*Cu;&POw_+bAg>>>~n+FVxI?W zt+CGwR*QW;usLI&AFP)1ZUL}4jq6zLIqwz(yQgyA$@Mq3`+T9=?l~aNInWc^1~fnG z(L4vnr(d7uIj|vp_UNLFQ!n@EVrc5wql<&p+@rb1EdkG3YtMX_1Z%SlXB>bq&UqwXOo!udH=dH1*WF8d$BYb#=J9wHj0I z&l|0EO|Z49TdO>^`fh7$nx8FcS=X(=*18S7wa!4lKI6(-`@r=pYh4FTJ+-b2R!gnZ zL=!}Tj`-2_cNwQdSl zD{I{hu5PWyl&97$z}Bj6t@6~`8+}KbpY3T`*B!vt+Lzv1d(m&lxU$x*;rf-eZiA+t zT7L&tORclvzb#zdT8$~UR%_WFJZGKDTIFS}{jm8dYuyQMtvl1F*8YquYwZiyudH<^ zH1*WlPaj%Y>&|d>Yc-}kwGIGVtGczyQ>)*p2GacWr)6CSfUR{GdTU*nes{)|wGM*o zSJt{KntEy-3|3363*o;TT-{oYDYsT@83Oiuu)4L%Q>)*f2h;ovqNUbd!PdGPy|vCm zKaz1}t;68@m9-8>Q%|jXg4I&%-1v`xt6Qrv<<@E~qrkrNP`6fjYF!$A51OCdX{mJx z*jk6uTkBHv`!lYrb#J(SWv%<5si)R`!D^{>N&NSNt6Qrv<<@E~2efcIm$k}MtIuzH z()t6KMx+eW`j4NwB3a(#S>(OZHsr4AJT54Sb|6}3m)@n?- zwOY&Z;C1R;)+#S+-3ObWvev!f*19i!YCVl{WvwT{^($*V8BIO4o&r`YYdsaNZmq_Y zr`FTK)~ar;^3-|&`oT0m2hv>E{pk;)S?eM6*6RDXvlwTs;pa8@r44>ngJ0j^H#hk0 z4Sr99KiJ@pH26~u{(OVK+Td?C`1=JP!#qE&d7gjHhPy81u{j4#J-a zbx+A-y9Hdvy%nzJxsvt04W78#GxkqlZN_zP%453&T*kcsP}$&;%d*>2f*5l>$xJ2?a$yc?n7|31BUIUkL{{~lkotC(7fD>1H#{M0w&A6}9 z%VT>BT*iF|uJ$%9ao+_euJ(+553J3&Z_>+S`v6?V{Rpo1AuVw~1}CoejQs?x&A9K= z%VYZt?6oN0tN#I3i~V!(rG@>UV71u40DEo7_=<=(`o8QZusQR-Os-#I z{u}JMnwUR>)nfkz>^T?vuVA&Dxjylq1nfSJ z|D?5l{(O{NpZHG>c7MiyirPPamz!K4{eAA4vbOt7B+fGtAzFV&BwckVEzd-U)p!j3 z;WVF*j-=1?&@{v-pXH{7JEnYIm<~-n&kNIo)w1TsP|KWV0ITJBVMef8o)=vAnc&uA z9(Bh~K|eFPHjh_N_$*+xobR)ObG{qbW2UBG^3Mh?^Y?9^Lx!H zkN=YB+LC`Muv+pj4NiXJnqN)70t}Xdj0IMbcis0lo zuKCsUOa7I>W&V}5(eiv`{#D@S_Z%wczbd-61`+qZZZOOkmSS|Ut04Kk3&9A0k@^1+) z^KS)LYd^oW?>k$=&F_83abEkjK~qoe-+|SVds}dF8`Ios`X%>v;4=62aJBX`Ui%)l z1Kivb&}ZC^VD;qc3r;R$m`hE+jM)iX=IRGmYd`n3bL|W_*TnQ0*B`8&Tm!(#Wejtv z>6bAB!DX&p;A-t>!FH}eaC1#YpK-f_)st&5IJt~rE;aqiKP%$>^hBDU<7nPbkETDq z#>dj1K=Xcj5`FHcyAh|npY9HKOnE;Yf~KDP=^kLU+)s_6mN|?7tL1(=60GKR!+E)% zN5QS9c|RSEt}T0NFR)tHV{h=DG{+g&^-$9<`S$^r`S*pZmG{&A;K^TJPxeRGmiz~R z)sp`}aPk}1{A&6o|3Tm~|G{vz@_u>J@1KIE zp1pr6SS@?s7;2frX<)VN{nNo}<=#I7ZavMteQ~(Xt+AgR>sSbv@MdOa61f zW&U&FYUSQP51#zx-aj8*Tk>B3R!jchgOlI5=2z1%`7Z>Q`7eU2m3#jW@Z>M|{>A9p zlK&F0TJm2CPJZK>UroQ{zYJXFzZ|Ys?)@v^$zSgME77$j|5aeMDSzkS8#m&TuO64UP6CajlBdg7UaxuHaXbe%M!7$q zM^n%Kd;zTH{!HC3!c(_)>sD*;iS~W)C3rLT%V_G^%ddddyoUJu9w%E1T-}(~FZWoS zitTS;=c&!P$n)o!-vE2Bbd0v<`dy37&sDUn-_vtW!>*X`%2gJ$x>GNUD zvwnYv8>3vmH__Cyes6)*%Jq92p7qo2eAL=|y1jnyz?-q(MN`lEy$4py`W;0r@59xN zY5j87?-*vt12KiAW;emB(E>*0+w*YA(?uAkS-FNu@& z)90(2XZ=2b8>3vmPtnw~exHHW%JusPJnN_3`KYze$@cnv4sXW(Cz^WJ?+dV6*6$o@ z`4?Q>nAR_M{m#SoHQ0G-b1w3%-#6fkusKFsbNz0`=BHf0o8hjdYjX?D^}CHe>-P(B z%JuuT=2^dQ;l?P}?>jX0tl#%wwQ~J_fM@-*J0G?3Uj8Gz8T%(R^{n5&!D{9D{R~$( zruECSek@~ap4yy?JnJ_O_#!07Xlt(Dz1aNRMRUz=r@y<#chcWObN%k4cl~@vJT5U^ zzpPgexMRxo>OfP^dUb-;TrcZ1hMIHei8divEo(3lSgpJtPYkyn^Qb%4=aWg$wdH;= zDOfGn)ycs5yQPe4el`7)e{yh{e+sx-c|V>Kp8Vzgcq(*l$v-t%E%~PbC%WFZpK&m-**_tF_Oa_Wb9Bo8LWD9{;(}wI%=DV726* z2b}!IHNTpE$v-c+%s(Got$e3CKRo%%`7eO3E%_G&t0n(J;N&;1`PKAG{)NG1{zc$w zs4(6uH1;$XGpUjm%`#x=j1e#yTixXiy4T&;Ykx->lb%lR*Zt}XeO z1*;|ha^U1QuKCsUOaA4-W&Rc5YVCKb?R(FPaPv=4U;Dgntc0eXTq}c<%NXWT(=WMJ z0hhT}g{zhCPgjGRYhrShYrQ(Uw#;=6a7*JV_67cH!js>)=2z1%`PTxM`PYW4<>%kN z@9G0j{&KC?LD!c2>w?uX|MkGhZ(Q@M=~rI+_oLPaX@2gfdF}Vw{s7JE{h#Sm@A`~Y z&)@yBAzW<(TCUd{fqgHk&1X*IZwyxVXL;iMEKl3RG(Y##lKUaBx&K0++?z2@J-IiB ztChL8fSX%e>e&jcz9lX7Yzj3npX?~udnQILFlLdYXY~E++z2|D*i5PiiaeoZy%sse$ZS05L7|na* z&gk0QACBt}HvR{+a$gTX*OtHYZ6MgO>KVHW__uNlLf00*UBSuW{mZrUK0O#+TXO6M zcC7lu%ub)(!Iathy9KO4pTr#kPX03P9_ZTQHx!)w<+(EqU0d=G2Rl|hWA_CAR*n(q z+Tu47oE+tM(^2T!l4CU3vFe%QUf|5p8uS^%&)=Q@-eA{2pXAyHY)#Gk{=VqiGIl?( zvbTyw)ho&wGstwEn0|5L%Pfj-G~8rYiLJLP;% zN7t6IXMi2Ap0Q_wvv(Zp-ci#xK4*b5=WKXeW__uQW8C_fa9s(yvS=5^sgQornK0ed^ z6|ClW$o#u$&%)K+N8b_md9WY<-f(Tt(bRnY5~rpYz*)O;f4qpUEq*T*e&t?$8C~1m z)bTQdxBgB@dUKll8=i&qd6i~OJ_qV=J=Xj>y&r4V=QWy|^u74Ynrdp}+N5^Skt^S)X@kAJVK@>~ZzaQ@;oH zxca=}bK^?%@1v>5=L7IgG=1C~a(%4HJjOJ3_R2@#=3e<2O+9<%6R=vjS3ZTSXRrJN z?8kN2_8CpheB$K$9PGN6d-I=Y>dE&7Sk1kZz45-_PLGRqoYa(6zU008VDKrJ{>eQ=O@md?Fr8OvaiQOQ_sKkFg{q#=Ev)8#!rBjJ)iLt zqN!*6L|`?WAIE$Bp3)voJ{QeA`X=@y;AZSe(bPBQYU?>T8CcCYOxbr z>XVq0gPZf60!=;jP6<}CC052yh1RTTYBcqXp9ZXE%lOQ9S~TbD^PG9~P3-Bw&DhhU zsb{`3fYprS$5@%S*BpKIalhnv+sktevd_Mq5u5AL{C++Yy0-Yu4EEa5^qU1;Tkg@b zf*q@#v9p1bqdd2Jp=*m@Z*X#y=g{ov+LB`quw&K7aK!z7Iw#oN+7fRruwI#Xmtu65u184rmbN*`j#%FPGYAffp1iH5PEeTF-$E(&w&Yj=>{#{8e?_plwI$w4;LP8=&RZbV*p0!-QLf!4=-T49DL6UG zW3d^!w&d6x>{#{8e+#g=wI$w`VDmO>-U?k?#%>LEyn4oN19t5)*0od9H$J}uXI^E! z+oEfW-*({4t6byl(Y0k>JAfUlp0PWElcU@debKeWZzphal(qCj*OnYRgB`1$`S%B# zTU+7{0B7yWcmvV3W$Z3s$E#=TAaK^sv96t(zN=O3?@7CYt+#v@9gL=)XVKljYR1U3 z=;*AEoM#gizT%WAZUSR7j*Jp1u^{mf6U^Vwe#_bDluIqki z>JPIPe*fGb>{#`TI{<7w=CdBTez6}2Zq{=UntJLv7_8=ZmHd4D5V*SMQDTjOCztDE zO^2eXr^ds;YL3si!@(J6jdJ~BKLTux{%kC9k3>_C&rx94r}Q}*O+7y+IR@-F^^7|f zY;MPyTdrU1$AQf~S&{pAH1+tL05*5&b0V60a-RftoO;Hc3^upp%q`c?Ir?*(Q);_E z(-D_H(|HcNpTE+UVeI(y&(hrA&(r63Cr)QvevYHh83i8$KfBdBGh&Ma^9k$DK($=jnPm7rB4O0dCb< z;0@^2wL5n;*W2&<=YgH?2laUQxrP1rwcY1R$ICCM?GrQpqT24B*Dk-XwtFr5Lv7Ew zFF(Jw`wr>i+MaV!?)5JF;gZ^(y(lm3m)7>|7kTbG&i^vFbN2dq9lf8Q_}lx{<$hwgu*b+@0W?kA?d8t$B~p`VccT6*`M@pG(h1m{?} zkK`V!sqnuEyg9wPYw5mIb1hu!KZ4af7RK{C<;`&Q_}o(acs$~BE1G(~m)!<-zH`;% zwP!#437q}lc)xevj;5aPWp{wpjN^LIwbs!!vu=I$NlkZxn|0rXrXHWWYoD_2d(hNV z_q|~2o|oo$?Wy}daI^0F(bQA-17J1d_%T-Mw{Cs)F{a1yL9j8ix8&ZRz3;hqJhtwY z9NWKub8Ni^$UU|*GUgHRw)E=e@|vNR`9BI)E067CaP{~+Ui*}5^aPrE*62xaj;-Uh zXZ%xOb9k<2Z#)fG&-iD+8E-7@j`v#eS8#KUpG8y88b1eCGfvhv?**K~^L`!NocG_*)HCll zz-q?vW30^IdF!i>G2L5#2OBecOWxdDUU#y$-T`NCy$zPTw|W!nU2s2ob#uK%ua^10 z2UaWh*86bv_b z{sB%7$7_%6^TK8=`WoB4`A=~37=3}Jo@4Ycu$pmlY|6c3HoK{~frwZr`J+$LELIr(Cxm(bSXUCvb8&UVCi+E^OAKud!XX zpTW&_`vpxs>-H;H%{YF{ll61I>8p=1-P=BR7&CiY-rU<)75?Ma{&@zFw}0ob9j`}i z&oh9$8Sm;MUT4E!-t@l)|D0PBV9&YbvzOd+YiXu3A$SjZb?54{nwoR<`DP-pTF$L0 z@SPa09-m3Tu1B7MlcMpHimANlOy*=XvS?;K#q zm1{C5ntI-I&jnVq`SH4uf3tILG}2eA)AUQ+dBDxM^P;II?tEZ1n=yQbO5FKt&A9sI Y?^js>Y)