From 368ce10322a4e02bc173322eb4d07b34167df276 Mon Sep 17 00:00:00 2001 From: SuperBeastsAI Date: Sun, 20 Jul 2025 21:32:52 +1000 Subject: [PATCH] Updated pyproject.toml to change the display name and icon for the project. Enhanced superbeastsai_nodes.py by adding SHA-256 checksum verification for model files and implementing security measures to prevent unsafe module imports, improving overall integrity and safety of the model loading process. --- docs/assets/icon.png | Bin 0 -> 59635 bytes pyproject.toml | 6 ++--- superbeastsai_nodes.py | 58 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 docs/assets/icon.png diff --git a/docs/assets/icon.png b/docs/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a8cba16025d88f915b9f544f0b5393cee804b680 GIT binary patch literal 59635 zcmeEtoTeUNlH?ch}&q#fw{UEws1=cP;KNDMf<2ob>&jzu|m3 zANJy6H@n$+p1Ei4xn~ls`dRiJ8ZjCG0C*=aC#?b|lQ1kC@qzFtG%Y-Q>>N2@f5<$VTyE6Pcg7YgiI}J_u|R$P zQ;M~+Mt>jZ$;sp5V+SM$@-zvW!VJR3p-(y}v;_#LhYJfXQ6#9y^^bsq;PK_Q5Gk<^ z#(J%g1^|FF1dw-t`%keaxLPLwJivMWBQ4I*_G@UHD!n#C8f7Bet z0}K-aernX4qXE7F0QMk1NoqjlJHYXkyeJZ2sUl^K0I*a@T7d$Hg9BtT%F@D%w*!oU z!RoB=-MxVC)#B725xZ;Pf^?fWW#NOsNC3}xokUD=V?a=*Bq&Np8=zQQ8{us%;gSB&=e7Z99> z;C^~^*;VKPRtEk_iXVet0cYx{$mF~|?$c>hpeNU0N&({wD?=vZec9RH+w;(Xa$665=5Haf=h^vKM{z(V`pt+HS}=szk_Vy z=m#G;6TC4d%gGdDyBS)!c(Ij7_8Ex1k%VGiCyytSNyIA-v>+q643ra@3z zq1`lb1Gz|0Q(@V(;vWxpfPYN9SIbjLIeIBh7}sG(sTy$sYTI@R85(l)SQT!sFM6R(zn-)CpZwbql8*Wt6uyKM}fyeY#*^CpHnjPd!^b$ zMcy1rWt3q47kP*8o~mpbkrlYy9$9n~+3%&sia!+1|IV_pvbnWpJ9KYDT@NLfN&lTb zWA_L75ONrL<@NSm#JkWTIa5X=J0f4AGQwsewoIi`q}lY$VNLc$PLfQk49pBCpbqm5 zvmbuaC{C(is#a=1Dx^{q=mr#<2UVhLRsk`q47L1AKLP7icPmim-dD|6kOA8(cxxur zz0?y_r__v!I*pz~9?ag=MTCF)9wAqxY1TYQ6i4-bkkjH^M{>bc3*m^>E<@Q=ukQX> z$rI_3#FNceNkhu5(z4nz$ujrAWdaUk@YmLvz;celB-P}*N#73$AH+WVTCn|L`6J*5 z--^#l=Zfix>&g3*qZO!!bFO$UYwoq6gW#jq{(OI)2&>`ye=rzXS z`n2q|!&T8W!C&YCbee*Xog0NWk;tBd-|TEW(d>_1hE2=#S=e?t_Ly~BQonW4w0sdm z3;k)N)h>@Wfv9D*6RBx6_lCuqov?|i4d-fcfAPRxC)30?yDZDL>4sVN@$q5Swd$qn zk>hxQ`5e1Elg{Oi)u*`d5}BLoF*RrFW%9co*VSQWVCUh)u>DkhHMqM@)%`M9= z>%B~buo-$9>KZcU{|{i}&ZBk&NMb;P&Cb!NkG!2zCe*h?$5b$UI1KNbPUf z-iqQ&zD0efOW~U0)Jfqk4_iF^S&K4J=G6Dz=}^j_(3 zya^?0OV&QBg~Em?li=PTkBOPH^5b8%1`T%?_gmJ5>OI{@D{%aILdDlsp;g-^S5K>I zTYGhTv*YZRpq9#(VDHE~ne%iUcU)T3ljyzvrGAmyIIZtT45`} z!Qtdso|mvLk8YwLe|QE?dY#yQD5az-8==a6nWHip?nPL3xQa|?VO*iwujUp7;pBr{ zt<)R-bs>ML2kQuxPacC@s4D6#pd_N?R+>v?E$M}g>ZxUy?i5$J%qq%pxT*bE!SDG$rP_I$Nc(24(&f={{sOQ}x2bTLX z$F*ts^7ozwJ>%)M>SX8gyj$Li9a zRd;mMffu%*wTpQ5(3z4FDV7jz?$nBJBV&#=S6^Dq@J&+9fl%A@c|EN_W`b0sYUk?m zn!BH$S`K!!KO4>aU4tA}RyGuxM^BFAj*5>Qt8aC?Y8Ak?67#+AY za4+z&y^fz~m>8Wv;4$Gj(Hn27UcD&bExPf^4Kx_jdj3(>+__A@ve32e<$H+{N`^1A z0sVH|(a7ShZ3mX|zjmBC4OvehHYI86ItW;Ak@Zp;$V>1o@kPFofgahqJK3+*c6HUE zI;iu;k;@4>?`H=&tz@5Mc{MtJVaDi{*zaN3EcNr2V$8K z?DDAoP~`AkqyP;4^R+0K%#cjBv-vdu%CT$aF~pOgo%cPLQRMu7FC=BR%)Bfw_p_MD zT;>|+R_Q6z&OproY$Y|7Cr03Ys?=YX0AUtU?VH;y0O&GXE}x>39xT zPPwB?hM{0n_g_fMQNqrlV4KRLpwj+#FDoil@V{%)QFK(aiU00E`9&Lsi1XjG(!vtO z|959H7LMHio`)j|kNWT9Sc;PW|6%`s&8YkT-?#=VTCkt8JJc8Egns|rv%gSPo)}-y zj85FQlmwT$UpM@ptLorkf20^bOZ&kPG|aW0fkidR{J#(X)>+iui|Ki*9$q5ccY=z& zb1d=CdvoAfRu%0}Cg9$0v%tXgZhIArx<5oU2#sZi?u|M<%M4O6hX~Bq|MUJ>aR!@j zI?GzrrLFcSAFzmLq{7Po!_51z!K`>3e|dCSM*EXV+_sAd6g8=Tk7q?m6Dpmr#mQm)5f~Nqs0sh>1fTmH;y&=Z#8M5nk3!R^^QgI-SCUl%l>z05`tI`Onp6%d42dqpQO@_>tl8~c;vrU%?9+!| z@pV^qX{`?VC8>yh>8`46E!UIGa%g798C-_7*I@nlXUS}@JJaZ6?TV~kF-kxGt-Q3E zqDpWc3`T`s`xCgy3G2w5x*2}T1s3!ND zDf>0hvI9ZZ9~Nsy&t#`Scu}sWEAV*TmUd3@F;!ZDsa1cfPgrNj*j!F;3;;}RyF{I5 zSwnXV+lI`JIL>*85#jvk*#Arj8=1C8&R?FN+64c>s$Ks{VS_0^a017iWm{KMFSjvM zWx(wa*V8bPmgmOvT@}DV{Uv(U(L1ra&ujN#>Tch zV1Y0cObf|lRy1P-TC&@yHSpj;#bg<2-G^e41s0<;C{IY4Df~u?I?UIF^VfOCHGh#+ z)S+V+62XEfKZ54n={C8iQkg2=UB5>H=eH~*^&CCg!uowjQH8ZU|3C3*1s zf`SL;ep6VK z?^=rhc&C&!)GH$&ATnknRUU1-3E~lC<9Va z8dNz{RFhcv%%77VhXfCmby_61xAc=Y!A~eoUB+xP<()ZYsgr{>)HDtjXiZu`gL?`B zcJ7|R(_XICafWw?E=c$<5a242lJ3_7Q+EbdPvx@KM;*-VQ=0yYpE;XXSW|>}ogU@L zvuYf85(7Zk%3Lf?ZBE5%kxL{GyM}WoHxJp{H!sW804($@>{Q5YD0Jc@+&6a>w)++x zA)^JLn+ZBKdrf{m&fzC&En z4QIAbnw{kaBA?^RRKB5qBG^qHvChum98HLRR+x7lE@R3bSBe!K7XD15o$qc63`@tb z3$xIJYS7{>cdHK>&$|}I!ZgoW%lc!99n?~inm7ky4ENub^Mxg8!dAmWK5DkdHR~A`Wpzk1oy;D+Nkm*)(It{- z>%4eJF15|?An6Zzx^KoprQLaN@rXWWe>)D>)IdX{4C@7fL1_u!Q^~by9P0fpcoNhb zJS-L8WKriUN_%B8$+TRGQ;e0VQ03YD&wyY?G5!@PX4}Q(WT4DXU%>&kT(LnX!zNrJ ziaJtzB(!Ybi{c{Q_^O7D0PlQ188a!Br2V8!ZGa2+z@FKnLm7*q2`h!ntn_uQKWZ!t zR<7oqp{oA)JMJz`Q%_h{Jj`pL@9Dd(gs9*qTVUdqtF>s4QO6cw(Sg7J;%wY?X+^Ia zJK!Pt{Tr-3C^~*_l6&ThW@h~=2DMv8@K({H10f=}eAq%&M7i z$6g$Um^?(*(in#||Ay?&Vj$40AgEIOSD_0h!7dHk=D+{~1AjX%n{Cj@;Hl&op!ZWo zyn;%dYnp5^I&G_r_v@wC*~0`bX@+89<+VE@pZ@3frfdGyDZf4V`ZFnEj7eqHy+1MP;u|a0ibsrfvV!#6TG+*xh?J&zXu>PeaD!fYcciCOX#@Z z*lQ44RoFp;IZjmhPJ>=5mj~|+o+@5S{Sgr6mPhTSchDm*c0JDFFM^dbYxPYT6C0Vd zV*G2$EsrQJrTp2J{!td_;ZDcU0e2vGW8>YtX3uFRUhOjf0EL(n@{EpeQ?)mKw~2== z>g=jNqrwU9TgJBm7x;0hWEKmadCG9%$-+K60-}#?vcK_qq^X$KJxKiE!h$x!22>Kf z)ao?CDpsX(m|!{h9It!t1$SMTbK|p0p#%z2SQ-{=t$HX#Z`qwhH`$_nd6gt|dp(u4 zqa|hRe(rNSlvn;FP2DISSlFm9>HndWSgyJqXn2WIwK7JUn^4qD?U8_J04FB6GO}C| zg6`6^YwztV#p=5xo&zO2E#=axxEw^2RO@!f!?3`4+HLd&y;Pdzkez}Bj|5|@ZQ0bU z&$?Zaq`A|>w&kw%0r0T52l<2Y?sLCEYpTwsk0`cVSs=?oDZRh@L*6bC)t>chX62Kk z!@_%71S}&8BPAwLhzZQdEX?TDdV~A8@#{)IPtM)nRZ&=ZJaSKUSfvf7ZNRTbqv4AM zslwqQN#U9+h3+mBa`aWKsxhH`vyXeXj+D0?B&qucz3}N2*xq8XiuhQX0?d~EeK^X1 zqb=?nH_TKS!7=Hfq5eYcvwbrh5noAcP?6O7!-tQ{Y zz<*|}c+@{VD^ke%aEh!~aC5^L?Se=8uXZ%==tXdjSpYz6lMwVkZ#6l?;FQHpPi1~QhHITKpN(jXS7YrCyLFHPpg6|(G>7g zi!uqZAiwQHnyf>K72#y??GIVbu5j`JIJ95k^E=KtcG||gMVZ&j^#nEVBS@nDew?KX zb)xt~{}13J|LrOVcYt4UY}DTnl$szCTpV>C>D8L6@rUem(k+Xlc0qC>|HUrza6=ciI_wFYipu^*Wrq-1Lc(d)L8>Z6Y?{Igp%tEMgc znP|^UvH1y}uEtF%|3dly{YusV@0RT6difPo&s;&2SG!PS4Sc4sA$07QBOakv?=4!D ze5&X5=19}^(r7KaJG z;Hc3R8hgp4ZA*`}|22UeL`}=F;qg7ao{dC2YX3jn43sC<&piFH=6hzsr6L|KLc){z zRH;HhgMue|-Zo^NaBw$}5{0IzvuRM7_VZm^JADy`EGI{CchfRYrg=@Zwi$~bH3y8d z@}^9HRb-{x-t^!7fE*t<5agTRy5odD7nLO2UIy zsLJ<41hos!Cj3P*nzR%hW+cD!IDU2qI@^nWa;obsb6SZnNWCARH=O&UoTj@7q_*OP zlHwuymZiuQ7;JCZhtOmqR>=8}htW`CyDY6_TS=t(DSQW@IpD{YBJ5t5t0XYdsz@n#ks01zWyJmOEliyEx47B#x2tS+HlR}_BaW`G)&vRh zWrqry@2>`9WJ%qDl<)?Nz@Fe`L^hq=?Y`QT9yZ?d!pXEwcm$giS1D9IW&AzX++19y z;`HR$lTXWHxrvUWh7?cvHL5zB8ao8(ncBn?Y~;ctU4~tezwE!7%A}BM!$B)EPI0F7 z!&Gfc%K&ec&(=fNb3{PHdCYf>D(Y`((W~Vk{Js|{x$P*Zdp40<)=i;D3tulw7N5R3 zh|CUCwjn}3i&7&;{liTgF8>5iP^0tJWqp!9p)YE5hF2h2!w zN8TDW=5BUg0op3vPCHbr*#28)F2krxSut=_x#jt=Uf`%0_|9Y!n)}IT;STjp`r}{K zvs{FA^D#l}AG&co8N97-Mr@lROA~{6@Sft-ER6h;K9=Cu0oj(r4kKxKeWaf-;D6uY zM$c+0?+ZReL}K|gF%N|K1pF#6TUw)MMrU5Fl;K_z8E@3*Kn>i_VED@KpceT{U(-h) z6o<7jDFsAqh8~ygSjk}Ust3Om4o#{20<=@PV8e9S zKJz1ie4?0g3`4wVkb)b9QT}-&e+~+Nzo=US|8Hy^4{)Lnb&=lFF}TA&yt4LxSh9os z3S*H!H;iQ@zQLpl?sd~Lzst_AHhUbQtr8qvs^KHUR|PVz63cRNymTGixDE`X7W+aq zc*vO}v@E5(g6%_}rM_duwj5_EsZ%Wd`Dw>FqB%lY_$ZHNQ9If+sG2=+P{z$w3#~c2 zsK{<|Gc*cD;EH~K+7=QgBJ*;LOyYfIo>ir7$*A>ro-d1&meUI-Ja`y_#n*EzM{DOZ<$F#QM!PF*g|#*^ce-L3zdD zB;JQW8Fp<>n5FrkzTN7-IolPN<1@OO2Btu(Oi39Aoj+2*o(7<&QZdQoF9A*x$gqBh zJGb$X>Rvq4KU8aPRe*ljp0>T7T`+hLL=fFf(Ej$rWbcxx=`G!W&-d?0s6Eyn%buhd z!bY2~Hq29~;c~3EV;%`*5Y!1^aSMiu15kOrrY;z?MF!KITJkr$Oev=HlD0KgA6vGo zreu@7q=cP!gP<}F^kqH3=T+gUkD*8X=J2_ewuhTm6M~T02HNgG4Ur0;yF~9SW z!_UfRMyJ379FhU-kd-Ac(Vb66HkCdaP6DuZRQsTsmMl}P^9rh*?$&nH$c zdn5(lc*fusJheViYa}pwTA|4^*~jM(1Nq7%j&Eu5)8Hao8JobAU6Yb4Cxr|up?jF> zA9<~oM{9zbGY7#jxXvL{oG2HQO*{&}^S(9DzR;%wI^=1dU@SDFjn%PLSmQ~Emo}jc zmnvAe=uEzUzd68}$!L9Z>R}Ro$jt@AJh>V=e3`(u(Ub1jk#E%H%?FOAR*%E=x6Jlm z`I*5~>U}0HKGxSSZVmDC)=oG5%C;ZQ1910L#4G zUauw@s;P*c@2u3A@|cP;x+Y^s;x03qEi+yt!bn0peafFKYi^FjW_RAJ_iFQH)YKw9 z*V&kt1dF5x-S(vIJ;mECXb3jwvudER69Rbojerpsbv5k;cTD!|0yIvGT&H7$kC|T2 zS658pkO3BzvsyOajH%88D#v9`g^`6Nf%QSv(Y=Cb-hlfWmc;g}MB%)Dfd1OYfF0-M ze~Wf1GTpOqN?N0u!T4#JFWXevH>s<|htCMK{@ekLVfdr+{!H7#im#aXz!$ka+B(2C zCCfY;_Ods4t(NO}fLB+j<>}JwSlY{XH3La)Bws5W{Vt2FuFi$q@h_FODyQ+hx9=@b zSB>kR0KKjJu0x9%)~YL?TuTjs4EGe9iJfh`BZzpTh|%e9bN9L&*9N>lDijoI7wwgd zvBT=b+-S6}i^fa-v_pha(D{mhW$Y*a6E`FujrW*&){y9EjLFkEx=t2HVpY(>31y>PlDMW5QgZgB`#5u$GzdXh`%Pb z&;#52nnWJ5QUz?!sbYB<(ty{|XTNKY+e-%R6Jvj?Hx&f&Y(Cdk@853?ss~mDYzDXs^j!}%oAsuQo^RoI)>xr4JxH&P_VGgaoeEU~PW`H{FT z5443Mg>8NbpF7SX_v)De`+_IUBUtd|MoS#LMR- zI!s{r2zY(2JQ4OXkHBr^kK~kRl^u{V@$gMLm;9#J1wy)4z+uEn9^wj36rUt!6i+gx zo6Lrtj)d%1Ls?DR)xm|8i9GLMixGYF5!!l;WdwRgcTQ`{U@}c=cRCSs>za%;d&0Ug?jE1&5)QlR@PBEuIADf!~N1 z;Yt^C{mFNq#u+H4eIcFXO0qH8 zG9;&jLpSQ|JlpeEiBmFHtz~&#Nv*h5Zz=U(F9DZ63sw?~Me~q_ib;d+tzrGIVMZi~ zl|r;*K;3mvDfS_c*ZM2yc~_r35%OCJemzh~1j?>gZh!dU>{>+R>D;Sn+gC&88h)`l z-=fZV4l0WGM=?{_yD+yXlYxYw;Cyb7VFVmt!T70ul-EPobkG`V-V#6v) z|9U2cra_V^l6^Nm;r=f04tAapXFT2@Q{I|l?Q|~VED;NpyiLV@IP;p=O3!HpZEhYh zOU61_Qw?-T^V zknl?Gzc!Umykzp%5AdTej;b#6tv>`HDVq7KpvnjsNVV18F5b1n44c=pTH-R`nt7xc z0_v;+Vca~#=y4S3E)|bzRB>Ulu2D>-)SlZwgvh1U&It3zi9p#b@1bZFGcOs(CHG?k zp{aPtJedGYt5rFh=M(OxFajq8H;m+Ea%&98X>iKPGG5WLCSzweZ-THBK4ah{4=o47 z(4@d99^ZGlzIM?#CV}!sqjW8ryMwEenVl^4xt@tWR?QH+O`G4jZ6bR9H`4nsOD&Hy zshqHK%Z*QDu$^r)7SCONQeWAUMmmIo;%^}zumaZ%E%|MYVXle8qVS6XX^h{&^tIm~ zD;D8wNs+h8&a}8zE$cgOPJVd6U;NVrb`RJQA zt-!91l3#80{aH1$JjHh6Ij?T>h5<*dMaP*+b8TC{B6peJHfN8gyF0$D4dAi36i+B2 zks3DI5HF^lwn;#%H2b%I+vhl)99i15C-7rI+Tw=p=8inEX8ob%T)`@mE|fhBdAcu~ zJP8+#u=Vn-<(HQBSQg1mOU0XiSZ9i%O}McRfB81zObgi(1{;^>1Djg^8AUYar~BK< z-E3cu>R#;n`(VdUUC)nNx+}a5u61&ab;W-~N0sX7gF>HnodJp{`D3Xw&GCaMSNm3dLA> zbMjD|{VJLURl3#NIP3LxMz;02G}8MBX~-q47Z!VT$EFVF-)awMUG*`gY`$!0oeH+R zZ@oluX@b@8_2i%cS9`jyhm*@g#V-vq_WHlNNg`P%_ga`EA-G=;cJ$jlvl0xta@jgw zBx+Wj--?+X9#$3UzdUZ6VC2cUPOR9724430-2oHo3PmE_n}yej59oy$gzoQMGFNCb z9QA?5P1a{K*Y$TB)_Do?b1ZoJ=IO#Q#uzVZCN~>!_CPzk*`nK*n03vR zwKF>#!Vl*ttgK;dc!@97*u^73ssd-fTPftGJd{Fa2Rc^RX0+qUF^m{ZfT?`e<+L>5 z&LO!mr|SQrS&R%^b0&1;0xfDcJ8%A?vaKY6llDG*5Loa?wVl3tX#vDA3-8_^R?cYd zap6DZv)o=xG;d6?8M)?U+J{XE^WwEY5A|gSSqykMdt_^U!&V)A5}R|x6s8xJ`BEw^ zaWD?1-v+q+)8F11AiezExb_QJq~BZPCjk%Vf&T@&NI;C=(bkujKeE}n%ZAi7LKC%W zeX-@tu1H?AxR52k5SBDtO{EBE4 zc!}_I1B8($-m>O;mmrkQl|_wM1x({6JQKaZyi4S|IqK6AU$-8Gvotn+xq`x(d^B%M zP&@WeI6}S4%T9@Gi_5A>v4}ZUdG*Ohph%i+uMw3=i_#u7X)Zdwsy))7XPX_h{G4-@ zokQ0EEbV9*MTgVOSlHh5G`-F5*hhsaM42IKRk=H41-3s6%7&2xTC!?S^+Tb5k8cr} zJ8Wkg-jZHz%kTY*s)w|<5RzumVdR=+WX7-irpGx7E>piW3>f4{ z1sAIYdb*5mQSyD)`#Nm<5V-~zku6icIW&rXMhc9w?a6`v4b<5LZc&`-jdh82;2%2N zXiDEjdNX6=4A%uAe7oC=pLn_!Invz(eq$O4ZM*oJ?jsakDd#cx>z-eh6E%-ZcqmZ+ zme8x?9L}(7ABBfnmyvM_$@J;Unj!Zbt@KBo6?1q^&!bUCf>YNCoa2%!9@7;8?i$+G zS*TPljE?k&aNxy+oG>>G*&BAcMEFoq0YS)?K6j05P9xzx{=C+p)n^im$pj8Cq$0U1R0-`bn z3f`L)nC?{`o71YZ%_#OlJ@Rn+_VsxMR$m@b?03At3o*=&r@wnM`~H^vsMz?!x1Q!a ze#0imZz`L2?D^g&o`&@dNjlMb&xxp81j(k(Bf?;081^BZ;EOE|9h zAj-JtX2_8SxVOX}N`{r67TSb>G^`fQvw$ZSqCR~Xu*0+I`f&tLvWzCgS05SNf+ny=!MB;d6WIXIeA0Ei; zkJwy|>2ZtLO>oFF3FBDDr!XkiA>7Bi|3N zvf|H+bF=;!yvsb}(eC2f^wb=}VyvMZTzh;3@!#x15rF=9&k)8>0%MAG!698ZkM;Tb z{SZ%#x>g32F=e@3o1Q?QSMsq>0^I3)g*~hk0s9!IK9`{#_aRbw#B?%Xhd$FyC1f!Q zhjfq0B=-_#_Ot{S?~fy}g7$2_S$N#2V-Iyk4ZT9qNi#tn?qNb?9VRGWJH7k`HJLk4 z8^=Rx^GXCZ)6u`(Ly>tejBYW1HFj-btDeATF%#w{OlSYRzasJaUJ;k4OS~S9W7nRo zxKtTr!D0y5K15-O+|49}>Ek%l59%A zadckZAm7y!kac_V+$b}+$T*b!KEVI}a5z2L?GXa19Q;))*Y7!olYNgHC(*)F+|4R42o~*Y&@kRFm{DH?H0yNki(oURQ**M#-D5@QTsP zULk{hp|5X8^?)@mLvTTOcC0=0Cc&I1SBV+HELd97&|Y%816*qwg05{ z;;jjKo|V5S?eWd`4RZpYz`-hMxZ>~UGy`_#SL@Fr$GHkK>}`FM|C1wJ}K^g{N4%R2cs-ALq+EkI3bzY+Mlb0L85B57{^qd6|H7ZHlt*(nlo2 za(Cm1ya__krTIA_Ak%y0E71sgopm4vX)T=EhW~s(z-}dnrwU!wR6hmc5RgbtPba?j zLq0h1UOjmM6`scaZ!V-RiBu!};q3(cABCkg{}x>Nyw6)~>J#4g!+81NeX5t;2(q`O z%AP7E!@9&@C~u@uG7Vo}a8EQz#X@UUNYVImy)xLq=TtBqJ;80jIl_!6fxjbM#zUOA znH+swZ56n*1l&qG=iP7}+7BDSPDhr6*Y#9Qd?S-;^fG86%)KxPYjA>nYXdWowTB!2 z=1={cQWIftEJ*sZy-CBOoS{)?2g%jgF` zf49Fn2^qHk+Gr3!RY@#VS!oQ_3|Y(-n|L&8LuTT)h@PDQ%fPgc6;=3NA$$*hSYKAh z@)w|&l9uWuQweL@fH<=2n9;sk@g#2xn4NI`S|c=Eu*{Dy`@?GyNf3uO*CpF)&68Z# zvR#*7;``{ep5-6;FBzY~6N-z70vfx>$U@+%2cZaV2esI)PEUsBu0!k^UA~EJrJQp~ zO&=+w$R*$Ry}k#oPkWQc9(oBE*UiGiT}H2n>F+G~1@lpgNh%EbR7N(5YGJQJT7VeY zj?q;0v$SX!R>U-KxG)VU=wR8l!l;@BDiWibOVOIoPzmW|zb<5d!ZtkPl+)nrSs%^% z+tN{YhLcinoIo$mqy$(4eL}Tu{MC1v{M36a^l32F*Ct_q_#1Mon-g28!vv9m|MvHa zkP68#0}ZCUE}wX|&O;MX=MxN{6gpc&qqDxyT>g!CnyBh@9D`C`8{n(-4cLANGzMWi zQ!khs8e#;%d#ccaHqjF<71PPPRcKpEx|Woh#0CEjQ+9HFUD^=HE7qURG9_{?9emip z;pju0u_wvcDsoyH8`1yPQ8EvrMx`cb{~^SCks{SMj2Qgmdl9ot%{qIZCY3r{ zL-2-qIP#}e(6KqP`aaX_O2_jI!rFB_^1axUK(D<(FN|{ZYHK$x;lq@KfPm^;3bHS# z8EdXD*p7j_eSUinWI1AqX0J-g)Axjus*re=#En3a5i}MdSO&0WkcEI{WVaqf?X^uT zWHZ0oIM1fDS(SdH{>o`2ih^psEJ>UO8MSe||7)Q{@J_2C)sDy>!C8$^Asw_OE#%a` zD`}}92uq*+9@Df+_$nWGfM0+5G7nV7<509%Vs3U^OE|9i1cABaUDG0nH6wW(1BA0r zdomF(EkZXt{xW)jcO^F5w@qk+|E#$+q^xVm3z}Z%iM)(nKYW;F?Z8c>t#hi3Z1#6y zF&IH}`1No{D1$T$B$^n!dv#obf-H%up&v#8y>F~5&)`v}XbocfCeLXZ-14+_jY(tD z2D55#YS5$Q@>T0-a47*x#dj5o zcz>d_?`}FjekY4MTLa?y9WF%PLym4>mB*3@oyMkh>=FZ>%&B>2TUGv8WEm_kib47o zMSAx8bTOtz0HazfOhi16^{ot3n$uh9ojx4-Ait=jhG^?3wewu02Mv1W5TmwT(|GeX zRIa0sY}P+t5_CoJV>!{hP^kcKo1rd~ydJwS<-%EYmXoTxgB=;8SA|em5mJ77A$E)DCY-W&Rlk51 zgCAyE&MVP&F>~j^yO^wGO0ac zV28{-;Qqo)zma*&UFxDA)|UC>_jR*l*Uu-J?&TC;=>F0Uqpq%RZ%ZkpQ1)rQN4HzF z008ry`CPhylM9-+r61xaheop6xNrGdb_FG=$UI=fkLI1#m$kRG+v}Sx$vJd)GZU-P zBsIc(&SJ3ol7V#wJ5sOH4>cj@?WNuasSK)MR$n=sOeT+u-`*j5lS0uoXu4s;=}BlA z@ezf+?H`2(!9#*~Gpbe_FuVA8?Bj4y5V@ra1}_;;pBTR+@moepDS5aeDRIj~EpPfl_~ zQ=wJU!%H&fm-fw4ND7-4tei68mxSlV}}I0W4=~3buqP9>E*MG8Kg>Oh=8mmRruUjQ#HE z*9J0ZX@ih_!fmfka5$7~ZQR&4hN5d%6xI?S(Z^H19#l-)n||L&B$wIoIO*_oHf;M| zYdM@h7FMRTBE;@48+xjcJk5kNu#>%;t@y!@kFU_AU+_8;UbN=M+FP_+b-(aJek!!_ zNpJk1ZW|H6KMEjSPIYvpB2-LtNJ8X;9cj~WWCkKT)V+JaxVo^ zX!@k@bu?SgSXW)mqS@Kx_KUL`O?|%TY&X>3o@D%NZC-cKjb}Azr*Y`&>jI}?r)a&4 zc3tmjG%ba%aoCr}o7r#)mC9icJ*%v`?FZY=WHQxzP{^7mzLr-ij7PV;n584)(0-IA z=LDRuyuo`R^!l2_b`xoJF$;06mbuR+V3m2YbA3D5h)~`KQ}+;v{3PHi09O($`fK# zttxgvRw3u9>qkj@=b9zanCINow25x$yvPtAqA{BelOui^y*^K2xbJeeqah`@^GHto zPB|3hpV@Wg+&Bp!B)-TXKVcc!@q@x1kh)sB{jzn%k)buDfGMP-WHzPpH&L@lqs;Sp zCAAmfWvPTpouo9bW~DG|MOz#1-@u*`n93JCwb_uHbfddB zrg!id8PR$@mVRDSYcy=OYr}hcK%|t7qUQE&pyYthr+<+)30-eYiu^R2vzT5cV%f|+ zhp?xtY?%){sx1P@=vfpO9S?-%Fn?&X53Io1oyczwQkStP?z2BheJ>}lQ=eA2H4w-u z6D2^J8OM>CFgG-exXga$5-urt@H@T1`;nmO;!cO6%!;3vP|gapy&^DJ565GW`$gdt zYyDHQG>&Yq^U^}TRcG}%i&1N0?a5yY8QJclnt{)V#U%V_)fY2!oBqYIdR^|=(3b}~ zm_FUS@)Bj~y7~dL{#X0(b}RoUGeKpyT~;imSC49v7bY5h?lFo> zzx(~HcMo~gs_(4QQ8wG5D69%GyX06g!!T;wH)+EKnY+7^m!D05Sz5O1(=RvLn||4G z4wP<$q)TY)YEG-x@qDBhsdEzSArZaR7d`8{Zh?ojtA1;4|CrR{Zhe^7Q}%5yQ5xB@ z$bNbYF3YM!Q{C$K6LNYP=Phje&SjzJR^XEd;WlnPox** zj|8i>_9u%>I{08qHD@OEwAtQF+P@#K8tyUK!+;%5K|y8;Q;^woxyGbBH?GxT zVxIla&Z_=-7Rwe`c8-stGP2M7bpi=D`aFM6+M5<3%>@Zg)? z;oUF#M%+D8*cYTxo@+{KHa$1z1%C5bFR4^(Kg5E@ie-I7lRBZ7a-jD*J>3Ow@+YvJ z=*UzgZ-J^3&N~T6%~(mQ#K>%Da3l-(bWJ?0l0;INUJhiB?k_3qO`#3>Z2qkoYF%buHJ)Cy)@qeF^qHRMkkM^K?tQT2^h{MLyjZhVQNTDp`RYf_e7I!Df%aa(d!j}xKms2v+U~q=x!)0cp*%}tB&^FAszVi z;YAr%M>lp2H+y=WpRP`od4%+bW5IBjc5CDtrX-*4nW|NWbo}vzBl~(?#`A00-5Ati z&nd7WX~YjcaOg6yMsSp_Prx$f6Io`vWC53n zTwIZjXI4r{PW7Fs8iB7TmGfVy%41E8tn^=@V1(X7IZC>yD2wmp*3I8GFGlc8EBC-12z3$Y)!V6RB`G1m{Vm9Dm3{atvz({cu|LdVm2Of&>1+n4p-j zGkrT^D}vh^|K{@S$OnRi*_67GZ?@089d}^~FZLPHYlrk|_U|OZ# z1a+w#Th^XNE|>Y12Qq8B&2q%}#~uy2N8PE^mHl^&dR_3_l6hfqSXeOa0JF0-I^oG) zBvU=il0X;f_uWKQ0u1M{saIHf=y%yhPry9y6ym$QUT0y_VNQ1c(z?hjo}Ar8wnMWB z-5%D@F_o!pee3H$EH~Eh>U6hLLYjrH0sG}Itk1Cwhx9Xpt=a8%ns>wfCBway=h~K2 zY9RJ^9^X5|zztg6+5H||DY=3bMmbv{oZ0xZ`XU5B4=YRoMF>paWD!!lDs_NqQQmjb zX0)w%$HrV~4iH75H%olE#&&`6=#iJOK}Th=oopFCz zm^IkncVi^s*br`2B!f4XWu0X9EK7dA=yyf7i|UH z9KAR9;E!ZAzocyfU+m$vmGfrl%qpcUZo*J3Z9C0n@L}=9)sYpK!V1sjhm!=*XVE(M z(Y9UPg?kuV$HeeY0MF^yr+!$4@qxCkGGZPlfksW#ST;hMIweRa{sj)bNi=8^ho|6U zqb=1=d2;NqL~0>EU|D(@-?rSqIchVf9CUvBa*0x8+v`Cbn4v#u%+)BcF50i!Y|lJ+ ze9pR56UAWc1F5N~$!Y8(qnbX=I^G`he>LtLbjmzUpZ0jh-T{EEu)M!n5c`cS*N%o> zsu3#a0O#^Cs|H!+DraZ$Do9Zuk*^a&me-9>CrDb>+JD+sjW6~@6yK%qa?Z0j;4f(!#6Dq@Qa5|K-NIFdY z<<|3_G1`^QOf}3;`tq4cTxzUP$l|KZ&3Xquc%o01r;inY%_ap^xZ{rYE;A<5nYg8f z=c@?n(=7WY(*aX|qc-iyc8@nt_oq*HH+zKb)@PIPY^rEubu*gW zbEjn3R6PR0@DKCra)7xKR5=_I#S3WB8sszWdT_=4Vxi%3>Ulnn4K+X8_L`&2N{`j>YGi!I`*5)AF`dYE%bc>mr!|on zCdSz1fL^cNg|8Hfs&*=f+9~9O5x*t8?P4YUVH@*A1J5Ez{l|Yh3H~EDunNemTG|X& z$iL3SB);;0%`H_y-L4d{i}Q*u{4$z(KBD(|Ses@TIC998=c&Qhb<1+5kc8cdHE4bx z)?o#&)KSo`y+R6|xcZWTCqSqrRrje*K>6fCO}hAV=cFaiyV=BO`! zRVwqyi-sR_;&AP!j$ozKcW-;Pcjrl3&RZ;nIZrBCS!_Ud15Ba~TtXuQ;IGEti)VBc zrO8g6Nj%{Werwk!J>G#0Y#$y9Uf#I4lp0h4p?#54eRDa|X-GYhEl|b8Z&N^TedG?4 z=4l!mZM;vz^F;!kHT!QJHmi7mmQX$FQAOSCZ=QfA#mz@6wmvdOI=)fw>+bKmZ+gks z7x$3+D4tsKKZO-uHau%D%B+5QIjP=nkt-TY7LM)>ES-sMBOb4?ZwEOfZ+q(%e-!s8 zzX7gKGm01N&Ym?1_%AXC&8}K-?*V9{aPW zacUoSp`lN~>S2Sb=q$RvTT(vHPomxjSAsqlC+QE-Srv)h>GHH6w~nGxiA>HNSJH|0 zf!YZ09f*AL#PC}8O7}wcc90OdXulD8AvBl#Hi?u1oQvPgy$ZEHZ>Rp&=79Eo+YfHC zyGBx-7(Y2`b#DSK&4<+!u!-Q&ZKlkM*Gd-piQpDy|AxFD?U841EYrsbN z6i?n`=DW%QER_0^?!H7Yug7>%rSKhJ1gkF&3I6Ay+Hc@A5r&)2%8l;QDAun`Q6vaL z6#W7cybtZI6J%DU{2r49Y=PyeEUUJThHoVb0*~tk@&%Cf&WU&u@<6eC5&7x;MQtki zPH9PTkSd^nd%2(V@0@~Vq*W8Q@1<)byv9t~F?TWn145fisV61L#CHG|fy!48`M_8b zBHpiTDDfmghhFp8U!v?eNJsq9(04@ZVXIBdGfj*cr94dQYQSdOizg%OY6Z- zn%fK%x$Jw8~5UrD`q*~t59;c}P} zF#6c4pAoAw&|9v8{tqz!lAbg7MDo5@jo_FRHALPmLo@_^632XYy)*l{QZHb@z@y!_ zW5tCob^CsJU)xE^0|z5SSWr7Pod$!Zrm(h8GFXb&GOq+`P<1FB4^Z&{?+Uf*=UK}D zru_!mnAo0JWrBmEY4d-npBfk*S~ooeSA*_~*FB1~CJjmSeg)5DZPv#X%8w%}mN6+s zQ`h*KZL_W}cCu-pJS=q?X1uvGI?Ma=%ftH+L=o*=t8^J&segU{3bveR@E=Z<=tH)2 z!Y0*Bt#9}E!7IDG(*T-9xh@<~ryTJc<}Q%V(Bv3ZyT93J)l-pCve#`GaX#&AWDP1M zQ#8C0j_r0u*1>KP`K}C0@zZ3(IHP?>%9y#lx1?5!=@WlA0{KVoHuqQV1sm}8^cKOZ zMZEJYN$zvJvVw!kb<#lSBlV}q28U-OXnywP04zA0kPMFpJ+?@6B;oUqj_oX3L~G4+cbo(VEHrB zB4kWY#Q_TjNu*1rTmQh_UzE)v|FTY{1fvzq+m$~FDgI; zCQZG$`cE8-S_o+3-L4-=l-s#Qq`PV=9IZJAqN=fO3jVlxd-$C^FgJOwp)jrS4_a@r ze->wC9Y`Z(cJ40nT_1FJt)>mfP;=e$I7yTkO4S_YS&__9)KMr0@WBorBvYfvWaaOs zXic84?3L~IK|euzUyj(N1_^Ro=%BG-QyQeZm3U%9ue-L`8wF-Zp(R>M5ZCk%P#HB@ zCasv#3>q$H!)uDS;5*C-8I!9^=PxN&me9hmJ(bVF@H*8XQ*_mux+;@oB#Trw>BilaS6?9@=# z{E9IOkg3Ov_>T9{mCxJeMC77v#C)?4sdl4D(ED>syNo;qjyCeGYw|wYST3IE{P@3rbf=Q|S;^#WUp4qpZh4FgX&L8c`lp@h zYv}K=JZ2r{MGo*T{4?L<;pC4PCW+=pC|xhT8j{|PwYKQyqX(#0)VLAD9?X`O5%2qI zUBR18<~M0&kj>jmq6CjG`J}b2K~Cw1Tt68Fa%=#z?VjaM0)D?(PQkaE@2=p}A90dp zxS%`+(`&zz=&I5(f}vP!{Sq8}QSp-3VQeJvpL-A53BghISAoG#4@)GzAE(0-u!RpQ zKr)vQ5Fr^`ta;0ug{Yr#Uyin7^Xt~P-BrC1VHDdI_q2Df6Ty8doRr$`H(JM!>{_$U zJJq&G`$wmOR(vPnpowdsl^Y1>G?o0JV|vZYqg=#Xxz*tQuI8MkT|+uq0g|&HG!kgL zxO3SZA8@9Dvukor6Y{wEzAsOicK&8OwQgE{;2!q=c=X}cF86ds^`!7|21E#~s{=)> zz~S<4?eAu#1|76v5zC$W zeL^~&xT4quX^}>)()En4*z28ycJRzv)2WPK$Vt&InxDRqor&8%j!}dpeQFcY8Z&St z?cQ2?@Mlo+3yvx(DR_j`*K=90@Zj(KwJvuxDL99R3T*vUPu6%EHv}*~rs2FhJkXF zmjL`qaltwB7xUWUMI=6ncq}>wSK=ZMd>u@be1>(GTSVIqV}IX=bxT3Vd&`TEAD!ap-L`pfxT1Fqt^LSjn4a53eeg=FQ^(9;U9FG zzZHjN1IFA<_q3D7u}i;x4qv|o5PQNXjlcg>bwL6 zKZMS=o`9Ew^m|sl`K4d1a{aLfjo#jVZzRIv`l>45c+$47RXyI$BE3ow9i-aG2q`H} zunfz$o{FC7cY;Q%Q>i&t5>99A+Ah)G-;!Qs4p8sp`^rj7XZ#A0_QUa_zx})cCr4bR zGx7LqtJBM85fqE4596hhZ+7UdXkc3QM?L z%fxPx0%(-y%kPqTQSF)wk**6zVw>loJcv!U9>OzlY~t#>v7^TOkC(Y-O+Qb;K=9F- z-)zK1lW|CKF7k*Ku)D!mFaQ|*eifwiB~AR-N2G=lyH7OSRQ(APoxy=#Q3GB zWb^zynI8LmUin#_>VC5;A;0_WBz7=&>aM)5Ys4r>cB&L*Vq}6s>MMA?Wr@$jBdachTsb%toh zo0%j_P2qMF(P(3fjrN6&Lt`Ga+zdV}Xrb9VbB@U9CSPQI_|r*&?#E{NJ}2+f+_lJ( zwmT4R+Vu9~;C&DV$?q4|Dwq$Z3J4OU`+Y)7kRAz#7IG72L-lx>j^^l0Ib!`inPY1b zJq!wXk)SkcyHAV%S5Qk|A-T*J?Gz&ngPtdpxJAZwYQT?6p*63Vxcqa;v6~jJ1D+~A zhC+9zr59DJ$U?;nr6KiSAw5qlECLDt*UipLC{dSGnqz`V_T#7m;d42aG+4)M*`Q-q z&@4|U_2@7fM{Y*A;91*X@@IelIoW6plm# zWH4&f0nHX-ZdjhZH{-~&uA_gGV!p1rdHE^(k(^2uLBZSZz?lSLY{T!t`oR;|l8Q~o zxitDTQn^;5B2UOI{NUkFv&X;V@Lw~-GjKpr=mFg22tX`&7l_j;} zCc@;xzuA2Y8{h<=vuS=nn)Z@D7v@i$PTJd8-@PrtI-L1zn@`QG#s1}px%p_?BB_jH zi+~(GRq@U(%Pl3RZdhzW7}Yj4fP7oNZpQt)3d{{fz|Y{?S?8(`to2s_OPw@-43A^U$btC(#HwkV3*)mg?(XmPjt+T?}7v?b$xu6UDHQ_-*pHFM`( zRPB$s13$Tpi@DxLu$|<4a;?j5aozB3TZ+4q|Eg;I^d>!Mjh9{+27nW5kcHApU7!E% z^ozY}zX?6&)^(x=+%%6R6NLPF3$0f7SAACn-hr&W;`E}Ns^4%%cj4P-re)@zJ5jdz zz2x54D`2@Zt5FJXDW zx{oj;bG&kGL1-ZP3lhfwK54VZnc2vr9f?!6HxYooX}{--zt&oa(}uIt!2Z5I+hnN|wWryCML-@yUB+wbvE~7|8AC@IOv4NEPe!EX zlUV_aa=wra>7}uLp2Dpltg;ES%@hV#$x)3ekcQ!~){QNF19ROm=n`Blg9TzgE>wk^ zR@$&r!)o>-X-Z9gmlv~^GbT%*#ju1iWSccrs>5Ms&0@@f`E(zp`uiw%VqhJL@QRe< zds%gEo{U-iuO8nVynKtYbok{2W`Y4H49Xh8>Urmt4oeZ3i83<&{3{^?Nsz+(T@hZe zl6ZlTiNlnn-=-5x`j%^LOT6}Bp0MigS%KrOj1n@ztx39W3Oc-#6l68mL@PeP%`N69 zRa(ZF8aHso;~Q1yKd}t{eBvoRmR!#(QcjzMLp(T>=ZA3Ob`rM7lso1Lh zp_Ix{g5@VKVjF{EMu=7`yaJa-Zp-GPHww>g_XoDb9L{)%SYT@Ilr#8!GK7*Fd^Oql zAu`Hc>Ue@qx9HfGz7w!t+@;9cO_zF_1Ln+7Ym`A%%}TWP(UgWCW@Dx%!BT|@rEeZ4 zW~m{R&sw*Gi0&weu=cQLEMK!}6mVwKqwCW7?dwn_9>9!v4!!wY8nLz7}(~a)A)T;7oZG73xJ@2DFY;dV@Kv z4y?G#a3U(DV{DqfqNO~EyVs1`;ZF{@2cGgn>QPeNH>pTnONjT|(c(6kcdY~ozHmE& zqeLn|;lJ$ylu7|JSIcdRX@xohj7tm}B&P*EBqxAFNk)Es( z%XcWp0*YdO2U10bjJv|oA^_`)(!j7_w!0=*0U{8fZE)@htal!)FWZ)rh&;M@B#7~X)HVxFOjE`r6mYdodq?g*zdy{VdS8MW9?tXLeR}h>J3Ydt z9@Wn_yRH|oky?&D{d;^5!7crYmaLGg1|$UBC=-A1k9r}r#?(G%5T30T0{RCX3^06> z9l;zxHXKQ*gRj;vv@6B$qd9n7xcXXnG5Kv^dYGQe8JM7~^wP99lNLHblsvt;l zibdzq07k7^8Q-$@eX|vUD7R0V(qLUVO&s!?X9GfP;#~PHZC5G+%JsMKQasH49`->% zDm;@a{^gtypGF-Ius;Iw!(#<5K^~oLJcHHky>*OHPa?Tez<_?GBPT;gj+=bx#V8~ zLkYHdQ)^oaaVhftD4v9wQB8$k5Dr7&Gg^Tk0!Dk+Xu||c?2J|evN)VQT7CMvsRje9~u)RbFJ{>2m(QV`R7bvs=ZgCoixL`)~eJ zJXnvh7PeqS%Vp{u2_S1Xme%_3?;v6WLx;zb`=F&|QGJ6Y#a}MB1=qG45mEjP%+(S#Ihqrgj z@Gp-Y^=MGXXQyw7&(TbhKY@4pRyj)dNt^VTyKJbK&43M}{UBshNwHPfT3Q4@t{_g| zw@B5OBf>H*0_=l<@E?yCTK5jlobxqHNYjctpE_!S4h1TJ+fw)Se7T1Xd`*~?J=SKdVV-I(g&FZPoH%2`;hg$h ziVD6@Z}=6FqGfqme>l?FEn~^&l32HHcZ6l;&s(q_mbc0_G{*_Bm_$=FTP&B-6Lm_Z zJBlz3_@=UXp&zt7meyM88`|Yn4h7(b{2)65oh94Pb8Bg56pK=wpoZhG=cAHP!_b$* z!SFO`co^fi6BhP)|5iQeqC`4QpS$VIr31Gba60ZkVoOZNph3eIDg!BIdtcNWUQ$rA z94Y)y4P@UNTWZBKr;0EK$Ej$E zu}k@MY-0MYl!oa;%-tu2^av*(9pj#(3xOp8b&pt8dC#ZglFImSMdgUwoU2@Vl8;xD zQ}Jy(s27t8GsTr)bUuCH?|VY2QFDwrYm+(oV302G{J--mR;G;aOM*lE?L#7R5R!AB zH7%+|*GpLwR0}4Ko>v|IQPhb<5@;yNWuP`FS+n>nYh}WKjP8WQ;B7oEr;p0h3=W2@ zyG4s*o+~P}6iEg9?cU6X_M4FUY!b5E&k7zo z_Kfq%vb``Tb9mCgDOq zcxJf%oB(D@PfYBiSS)pFcwB0hxjiw)kx*+Z-1QviW*pIN2Cst6I3SYlsE1F@twTS* zeN~K86@jNZJn48z&L0jh*tsuOS1%+@^0Il-%2&)OmEm}OVo)6J0sHXAP!}go8OXfp zYpaCRs$X{T&N@TW@fFZjkU^b1Y|1Gl-u=l#Wnm!>v4k2_HBVsR{4 zi<|??5lGZgk(-c+y}2D0qo?C{lTA|TGnfr!hlL;&mu_kbRwuz={uu>aX^{6-u^Z%^ z5`S%to$fq~={hE}1I5ts-j58j+ zPV4IC+IzKYoZ7^8rK}n8>Gu<6!E>{3VPsGb9-AE9Nq#Ln)H|+%khDwvT+2!WjP*j!ao%c?3{VRq)7? zU$dZc)5yU}1uRy@C?cmnVYS^6>sDGFRDhrP>-zCrH;5v#F4@YztshAV1e;pZedt}Q zWk!1(!@O#`up|7u)ABDSjp6B=5-k~F;lD4n*kUuXduWuUJmBY@RMX_d-G-X>2$Ql~ zC~o_&*x#ot$v=4bfNGR*rF2&m6*DofJq`)dkv;2p{!ubao{QY1Acc7F(a|^`BQ{eV zMN6GMw7BC&*B$FvV?WI#MYtiJ3I~Xm(kN|yo1~|(vfWu!YcduG`>SFGMcS?g(Uu|? zCaGV3qE#>u)eFsCqRni6`8uOBP>X>k!&RuM2()sN;+dLifkAX)F5S-S_Ys;yQo=~D zTdo(GnjaL`OnA-gNoyDD*$rFf5-74UhC_B>aX4EJMM2X^FrSShyNG|F249^jXNEo= z_40@jJZ34J1su&CE+gp?p0k9w(eQq*cv=zMvy#ObQ-Uj}!)y zFPvvfJe2B%#jwY)P@=}*+yealI5A~0WJ%b4jDRn#GI8lDAa7byI)y`5TiqyDxLEFf zIkFAGG=A_EEx{D`itOZZ8Kkj1Xzxo?J4`ZpT@*93lh~(B6%yY^O#*uYC(WD0?nY zC5Q6#A8%lq9VR4-`nW^yR`D3A~?&oBJ!BKVjU)LJl&3_b4Pkis-_#@P(F+p zUW`4K`Ur=KV3@Y!A;N*ADdmkJdso7;-rt!4dHSP~PT6b2dfh(J*bb2p*`FJ!bN!-D zK&#^r?)PuIngL_Zq$A&}G~&tUwt!ZQqtOFbsv^r_?N+JhVW(s&v+7V@E1}}4*c2m$ zpJi?9K|3#7;V5E7SFi^5^ot16LG>d7RqbtleQvK)Z{e+XP;_wGcoa|5o)<3E{reE1n5Q4%AK$DHT7J-)sUOd(#e8coygZKM z0fiM4Z0E-HBU&Ro zv@L!m<0xH*E$e74#sRt?fYLLRBx%q`$7T=X_vk&M70M8Rki1b#=oYXZSycSc!y40) z?{5UEGW2b;T2z0WolG@zSH#^{m{(3d&K^^!V(21a`qqpl*W-*WtV;aRK9jmt-Ju;d zq1J({aLl%2uH(vLgFmj@HH!L<#A*0ytxo!;)|gau%h|USgJS2@vU6=^j9OOjxG>3p zC!V>v8<8@7Q5V4X?;NW3)spKdYQb9L?F{dk=1igcG4F4DxqHwK&N}XT^q+HkYry_` zTt*^05^jtiWe&kDc;5vTPikaR*m8q^Lx>1~B4Pyp^vlobZ?$C~>mzp>nM0|8)D9LM zQ)6?KALa373|m!@)<0q7tU4vX*j0T<(=PwK8Ad_T0*)%)?e&{WJZ(NrpBa_z#g`JK zBpPQ5T5$NQ$l2XLTv=8iYJ#@>oL0GndQK2VD2TR-&_n}sh{r@sULwQtx0cPM&bvN? zL=Kr+PT_MB-Cu}%D5{QlTu=aJMWm(eJ<$=~&|AY-}ADeE%q zW_@ClIkkTs41D$}GP%Vbd@;+VZsJ<04I#4Y5vq1tHnj^js$J#-xCwJ~P@H5oKn6>d zY{y1vn@n@AC(Q2q096c5{vIESIb-~znq}>b--x7Fs`D%*CjFRd{ne;mpEH-fQ8g62 zRCL3!Ty`L4a_-P>dWNveagP0 z`M`#_+6REdPX)FF8loaYlak;XQgEcg$M{h-<5VUKhKTOJ-|9Us)ze;;9pI*Q4JUt; z5M}Hz=$rSH^?{ys)?%SXlE#QDXrmgDW6zYUnt}7(cs7UbYk8uwSA-2sxVNfT6|K>0I`J&}A~1z2n*z0jl7nZ9TCe)N{XJgxs7AI`zb4khvYsQ%=3$3U_Q`i$&ILuGUWjT*bpYr0muGt&4dxvWbG zH?3D85b#zI7p2lBc^QOlY+rwJbP_$;=(=_G^PxEzrmm?H((EXnRdN5KF{PXIP2$^? zionPAH(JRW{^fk>xVw12x+T(dTbrc{3;*&GSpFuJ+%ye=N{jDDucU>o5eK=uICIKO z5!h#7JkeRbRtS6;0*uLg84BDCrHPhj-7pJclNh33&iBH6r=|&=%cGDXAu{yUj233W8 zy&llwrr|Btx|{9jB0t=O-0LEj{N*ItdaOC%;4Q;RaaR1ZY1}X5^%=R?`OGYVY@C{$ z%Axg8IZGE#?Kgng?Q?F_)xi>8wfFcZ7S~@Ujilz1s8vp6bvCa8qLj|ip*Ksh_Lgy* zf;uUuM8l4uv$8&>+hRg_aU7WO2xxq{Fr6%uLDa?h^AAF=nTAWeEW^0~8c=@@9{j4rmf|NnGtp3*?9#N{ToQsX*j_dZEUCp@_BuNVw+VD31SP)rE2_EG=TMHhL(5$nV3#*;O54zT%%}G zMz8wCF3!I_@({W|ex1AfQRU2{-iQ5M#YEUzK6#w3ajeEIH+WfDsp-Q0Q<0K9gD%{> zG95goVM9}bU2tq^UOz5R19T5IHRE(t`#6vk?Ztw~JSk$R7aK z;guiwk^hoot3Oj+u67}`ROL`Ujl?zBDJu!9Hxs@5!>MC#M&!th6-GW=$1#F#puG_@e$ekZ=qf$RLm|)hT=?bZlRN>IF9CN zZRl_N7SpefE$gJi_0E!eL#^vbXbR{N)HqriF1rAw5!0i0#jk13OC*rtm$)NE`w;;V zi|8_L)Y$xmh{SS1Y5$c9B+@n6(`z~vFbQijew$!Ae9$*%WD^e{q>4vr&;Wzf0d9sX z3AsMsx=h8o8M9=3_z9UBfzpxJuGtz&mO)96s9&VRXdf!;^Q}i8UQTW)_K#%~%alO$ z8XOe6C-N|pT$&YPJg7U_~VuFjsBym(EL2G`PV(<1XA?5G_oj1 z<6n{YB$FZ;hGpy{qNu0-aNNK(zvOjIWG%q$mB#g-L!Ey2q9B;T+75WNs_(R-7V%Ljk=XWLC>_NjzjK?wCuZYD=EOEr_~i(T zhKVVE3FY>4bx$P&%B-fZwRKL?u}=MSTENR=zRfyn4artzi#Q6{erLtjLa9GK--u+v zu)-_7x&vycUkf$(gWV!ZAF72>D#XbuamR7kUhc=AR@CG04=k2pmk~>TSN~iYzZ<#! z7DX31*9P(w{PGuEGsA-iA5M}94Liy?;w?X5$X?b{d776Cuuj{;K}n{^hAja~0*jul z=y`%xq{-?teZJ@1(z2euvR(I2z0c}Wh*Hsn4(VrkG{n-Y_L_`;?D z8T~qVpeSqLh&qml4^ZVu4~8v1t=IJP7(+Yw!9+(jUTr7VM&RbUs3HU?{LUze|4S%% zvpm>z#Tl?R^Gi5tCVfchj3t8+1U+Bsx$zbQr?_PXfRxJ+63ZVdiLspV=jwrmnF2W-zgX6; zT+w}ykYb>U`(#%r+eU(B!BU$Jc%{V3tW6i{_}{hqBwMA-#vos#v}F7+Q>j4}8AW7o z)DCL~O>4W?*k9SP0rg~ZoX;K-GieJ%=426^ZmxJemk7WoHrdWEI9jlPZzwXsVu2gJ zQ@SesHmRTWlwkl8Cr^mTls!Io={)}`L-ht&AG(y#dM-?M#Rx|sSDV$G!ihhO`n9k) zJoOl8Kf$7J4Z`!e-!^>J&Y7K)K?Ik5NMeW&_c`9^W);p7oZy<`_^K!xtdsv9Z&MYQblhRL*$0 zU64WkcJ^qKfE4{h_rl%X6&)@iS?TcaLS7H_f2E2rJCD?5%Rjx(2PE9r&XS$DX98v7 z+)CjYK{28wjvW5l>@ON0+51h_XSu-@_YYSqysK*0+U|+G-8=6p*i{5`Y=0IQ1*a*E zBq#+85j(Qq+>T1HA_QWYxK)}Q$;p(H8ok}bILc10tjB*tsBwBN*z|?%?rI#g1Ht?k>5p1q`BX71;&>vhUvJ#9WDZgIvp6w5XcSb2OC7HM1(OoE%9bHcV3 zysT-rJ{oqi=kzOm^8Z+_dBPva3@T(tcrQ$W%# z)90nF6%TL}FRK*T{^bI2a+dKCi!bA!Kx8hj9n6YfFUc}+9k*2VJBry>Z2=>XAW9F} zc~D6zI|04K-p(hK>2d{Nq6w&cOnQ=Ckx5=LU)s)EuqR+}=C|moeM#b9^!m}+iY8o7 zA?tI%=nD*9NN6Y?lUWV>2jkett2G;H&Y1Pmyn ztcl%E7Nh+A18zt9PY*CpV8+3E&J*Em`Qh79TK1%AM%4$ zDObp%A&T{O-==TWfJ4>1LG-six6a+mSxHvvI!n-g42^{@ij=HQZEl53{k%v8-<)q* z*jP`i*$Aj{2yYsF?+o{1H?Esrg7vCJIUvMi&+XGh-<6a8EfvF)vPtSRi94GjrW8`m zdLVnQ#K{WwKQ^F}DX)0r?Fzg5+@d*JHP-_jpKADLTmV+L`idE`*I3ppwG1TdbYu_C zOLc#3f|0`#8F=@$0ew>1Q!f5S7S0dr${>j6%CuB-Uhugx$2R$d@S>^4e%9VAb>ne> z@*DrUJi`h7Ly55xM*3r%T>Xn>Vm!swQE9k_A`dh6r?+Y}0FC1Vd_Sq-GXzw*GvDYO zxAehF{!=gIfhu~hKu!%+tyK1Q$%m4LBAKv^A?m%iALtb6R zvaX}IC!W$_0?j;CT>TPWeCcF?%+?JWJj&{yg~kfy=3g{pqttZG-5I{&wf?=~78gji*=|yu9BH|-4;0ax-tCgfSaC&}{^Gru%-Wt^ z+w$j57H%;Rb*TQ1MnU$=!+E9kUgx=<{J88)a8~UoT9ZBe#ZG-5F9_PHVS<``W)8Uj zF=PwkJ~~6xQ%zJQH1-26Q;bE1#D2?X$dKUTah8Nc?$Fjd*m1vMf!ltMcdpfj4GzYY zpVE66s|eKw>=cywPst>toL?up@sD^w&kWsP$dGJAViSUurFXL0S0vbzWfaY7XmA%q zVsuq~Z!6}AjT6UztQe3vt5(^uPCR{!x9fOTY>5}oPrFSBXgsx#!U%y%NTqAM@)BAU z(OV@oSRA*2!_!5Pb>QK~H?S%w8Mwus~~7~b?5Bb8h`mc7d2xz=ABu90@e3a1O!`yPf7efheo>M?b7 zq?FxaxS8gIdv$|$6k%dSFx&c}rJtj@laGP4$zA0{8rn%G*HGT;NXbkC1dQGwYyCz4M^4K+Ctp^5izDPyKVD4P zw38X___m2<#%K@Bk?7G+ml~cvMr5*2E#7BU{wv`1_Xr*Mkrz4Edx?CFI8Iu^9h2KO zwTqUE+A$reuIKbT5{&C2Rv*DyG;zx})k2t?LEqF-Ne!jy>g^+}j^rvgDuTVN3@$PQ11nXluoKkzwuD zCfRmGis%(C^Hd7SumAfAt;|)(qT~4>z@OIRW?Bq~!T67d0xNq6bLZE~6NnRF;N~wZ z{e#u0;#WC{(r;Wz?R+CtGrvwmh_S=1&_5|97Fq^%^8mIp0Md!_qCA>`)xX}juh{8z z`&8?a{Q)L`0iTFeHw(sVU`Lx`2tzl1W(vst{hV8UKrr8f-CCf=ItM{PidK(AMs>3%N_Zgq$IH()UTMK1X$Vp#>J zSZJ#?V_w^W!VjguWLikW%G~T)gpD9V|kA@iTq3BMEm7LNH#CF^^BZm(ISLPhdxz(TMOw~GPvt$ie1`qYqsCL>(qx`rest|eE&hltG^6mSVOnkY-wvXV9tkMW zkA6X6zdeDGAO8lFEiI~cDTt5qgT9;pm+Tk@f@JQm;a-T!ZEo@a)ps1D5pPAHkVrPQ zzoGc8EAco}m+&-s>54AS`tO8WND*mdwbGoj4PmcEJR~J>DTS9mBzw~~p}BiQ^%HIr z1ehaHjPSPCp*kd`OQ*|`z_>6i`fzW4>a}wbAbTAZY6(d;XOSG6#w^uLq5Inq2y1RX zmd3a8wTwBHtLdo|vKzm`MKWB~p-E7T(m3j`U#RnQM>p}KpO!dBvU4A$3HS6#scL8Y zMH(qLKb?(z=X0Cr0~qusuoKj;uQ@+n94|0_ZMJm~t`fgHl9o(alqw9aWgV@`Dz7%+ z5B#mtw;zjXVJV_nSnjrpHw;73zRi$=LyM{PsX64iGRtoBbwjr|==}2)PXF@pfZR|u zA2Z>>bPm7oW6iJirp%}mCE(ho)EMVn-Tt;558*#o>vzTuBgeP&I{jds9XaMK z^9Y(LtUGI(lLQ~P2N;pTjA5YybS&bUscP`QFHV1^YXn+Ixp{F9#I5!Z<%~-zcqugQ z$j4d|Zo8xDEbDvWS4L0@p^XkBcl3doEg(c444L}bgI4Wk(r~=XdW5Lh(xC*w>0b*( z_`yx*vnbEqfx-6<{lLhwSJl?x&eitR&W8y+&VN`ZuA~gZ7&P|xa{V5IdzjYe>4o)p zRT%!*geFHW8iPai(P3S6s!WZGP)z4E&ng4hyp7)5q(08s?V3FcHcdJ^8d1oD2Zk?K z^@E49COja?-PNU^^?y1o(O+)cabs)Q-wt`;dHA!kjjiUgvs(_%UdgoPHDVbZMw5Us zN^jW$!W4wD7`uC$X!##m=74clHwgJWKlOY?=3gQ4z3W^#Ls-OsPJN(kF>b&v>`lHvRn$vx`CZG7JO@SES=nOZETvK-y#3gcHjx40p6 zg9?bQbFDJXq{_*5$28ZqMmFnBmg}~ocS;>~p7j5vC>^S&H9LyIVQ``qK@nCXc@@PO zOGg%{aIn|+^#^F|OMCu2@CUMkFRfR@OJaWjbUDeHs*|=oV`l8?t(4f-e?gh5Fc+P7 z2=IlU69@}%5*9=@ljs2Z#9k&S;^ukdl!QB4b7RoJBslb_fZ1a2mj0x=OrEtdrLLNn zbmBzNho!OoRS`JN3>L&bCkVInRL5 zzZ4XD^MR$QP3Dj7xI~6j$b(HWWpD#Dj0%p&9KGc!vVK`A^~=vN{1Mh5cI^^kE0Idp zA60y8_2Rs|zqh@6GlZ3!{$d-?*v96EwK2!&6^vRWE9ky~C-~lHYU%S*LH=huQex?u z@pfn3p=1q>+zQsm--BFV5mw~&?H?&a+=pbDVdWfRX-9>`>ddjGlCbxGj6zg28_ zHB+}5lx)#<8nu@BNDrg9Mq+09vZ;@2!UvlYae(>_|Du3PaSL^Y5*Xf4M#XzkM23}{ z_R}p_*QFu1UB>$3B=zq%Rs~O~VQ4!5!LBdand*+?_(bL10oRKWkXxqA=2I z0nIHliIw40pO+B19(!Yt{egqO#I2KK5~CohUZFQ*I%s%M7xduQ71 zl%wDhv0vXhgnf5G-P%$+iCU(>zZgku(tTYHy}d)AW&pb-zs*YIvFi=&HjZ*Drs;=r ztCf$cn@JaHk7}fCx_g|Z0OM7~sLxMJ7lN-PJkymKCZfy#?zgk7B z4JA0Q-zDAvVLiAv6MT%@7rrexvKaYfa(RfutpWO^L-NjUWaMQ!%Gd%iQ{v)_2t^;wuIqdY0{R zkjQSY_a3blQY6gWP=NOf(>?Usq~yHSn|yHFN+Z zTL=N^f(|6D1DL=NP>uywM1ES>lo5&lc;1(8dXCf@Z-=N;VL3Nha*#ifw>|!f=XIO$ z96LOl6nmBw9^(!|V7_f_by*h~=9`^rkdn#gmdKr=j^Y-oxyA!`NcCYXzb~=HG`?Q8 zT8&$A4ic09TBTUgG&bGbv3s5W2NGi#K9SAb%_drLrrRIu0BiIE2yLx(qXb6u@$tl2 z4Elc6Tp*7*@9H4T#&(vSPZdgy-u5cX5HyyN(VGUvKH~d5rPqtoy?EDU2Fs(VzPsK} zC5|Pcyq%~0iddd9ZH*xvB+DK4B>EINhyNEdh^7|NeaSZwZX8uu1~X&q(a-a?H8~_J ztUZxe>~}8pBBS5uu64#5*}|w#1e*60xvddr6X&5N&CmD8*Tn;3eI2>poU0bU*eVnIlD73d+#x!f_kVS85%wc-3qU@!@NovPtEA8uAK~4RXWT(8j-szV=_>k znSq}}6Et>|)XO{=bZqi|*XO!u9U(4l`5yo_LCL<9ZH@X;dq};skm`%Z`$}VWjgXt| zQL>=d@oFqjz0m21+0AQ*;2ji~QblF96s&_@VJKa0UB=c^<-|1C^AyrK^D?$NF}=ve zgSm#Pg0*{e#47BZO!DJHecnA{K$P)(8C4ND-Y%e)rACftEl%Huz|Ty4>i5sr_j~W( zo$LAGuWcuxJ2kbFe`o-XBgc91>#Gd6OS{rcW1j;yBV82%53E+#6W-rWW#IPJhQ6w| zz=4@we(xLW_{i(_lQSFNPf>TOf*>7TtggxO!7?Y17*`FQUlbeFuP z@vo1p@$3-}P-Ldm#qE0sdCw(>Ihc{D6IvyHQ;_MOYyWZ>NtNqUP&AyUD^jH+RZz|9 zg%M9BG+noPt-YkG0;Z#QJD6HaR;0_M44e6~*0fUg(H^ncH=AVtTp#r*GVG~{h zWOc`6#AYI2uQINdH5LNf!K*~M&=oZd&EdVz+fQH0qF}YIQ__>H@WAmlKK<}8wfCyb z7atww)=MYZ+*e?xV6?uCkc-1)^vSBw&JHYN0+FWDSFfAkx34(Pk-64g=}Fk^o=Nim zJ-n9sC+c#~i7tNSf@7$G3T%yca0QfXf5jpN>R_rYSGztM&eIi_c~fU{0bT3LHtBv@ zf4|y4R7IAf9nA(ypel@{OGLGrEuv251zxsH*SE5De!zXPgOYkrV8(dQO#jA z=i7T0Gx)ZGmt9z2IE99vUS4J&u3ujECM*($!>ng4_S;lDLhi!kE}$NLNt1};21rM# zyS%ChiWSWh=8el*o4%AOg8{wM8wF@YlSclrswbUFZ=ym+w4oYg0IDi;g~=jfXKZW$ z6s}w`Pr`7pMa@mYhft&*er;!wFTLrp>JCk&tWuaM1ya7(Use*eqXcSgXxw<-1n+wO zQO2edjb{KbkhXYew2i<2$(mp*0F|E}?&OUZPP9C)dRX=STMV*RO)HWU-WE|+1f`1V zl>%4@8VSSV*RMLkaC@1IKW7>Sqra!f|M$H$eEMO7+B;?g34U~-gR54}O9E;2_!KEq z>SC&vF_t-jSae1!?4LFmE3{t4RGcyojkmWbDeEwri!)o2wH(Y=Wm**((VQ`B2K2UQ znclcnm$Rwy%&6`%mXCQW>gFVhD^jHvE8-ern#)Wn!dO1&!t2tPG;1C*fxFk_y3B(m z3s^lB&=^jcbjK}nW;O51^M(PEh1{r8>(K_;Ah|+Yl`KO#M+an)DuBN+Y_E@uUO4xrZbR|sXZnN zk(T{66zM&7^0brv)sF|5TsAaM*3@bqdBH=3RI$3QBJ0oun(k@*7F;5*jX^L}!;!?PC#Re*AA@}`E0w}5N7wZCM`6m?oR%5R6uNJsG9Xt)S6g-N#T z=fGNM^)Is*c?X zV%TnD###B&4X3>wOkTw(+fKSn#mmvu1mQi0yy0aIu8*@AN_q33F*-l+iD`~klg0O>^U4D24kD28Huy0# zmrSWuE&J1f&S1L0*4{jsk~iP$bB5IBEHYP^?I_r;LdBIo8{5?M%!Mx#6;!3dK*}p= z&|>wE*PkP^!II21$W-|9cYamRU^Zk`5tz2JFgeMq;J;JN-ifu3zZe+LFDAG()^!)@ zNm?>9LF0cyW|%133gfv}b`t6RSXWY@QKkUqg6A(kEMo%E7)q68VnIixVUAbd9Yqlw znNQHXI#%e6StN7^TLf42wU42?WXgtTi;yaa!Bm;Hh*vVR)k}k%tjBYH+0>vA(CLnu zby;|uP8V_qGFDXy)r_zGajUiJ!zUiiWu_Pj7@MCg6b6%JS^jo`$ahV3$yYQ_xSuJ3 zsDN}WF4?LlKnT3DQm{ldhsmPBcs?k|YaUIDrC8BD!7*L8;*&c;N#ttFMSuXJs>5U< z>cx-LF9e3XYLd3AAev5=_t6xWBN;!JnOwfgS}xT?nh?=kW=aNgrKRjZbk6V3)0edB zg?jZ~K?Vu@p^;z$<5>4bh+w;=6T(2s%YNJ97OEl_7o#obhQd&rSxuc%f4;ntp$g_o zI!ESOXLFEH>5N+pq^w#yTD+HW!{KB$LbklP3-7wFaxHst3j&R3F0%#Qt1{YrovuU$ zm0&{3dg6|#GCW{>NjuE556hZBR;0^xMk_TBp}+(e$dm|{qcECp?F}`MFiGlx{QeCu zPfT~1@Z4Vg$ug8Gd)a*(mUDHh4B_np8i!Y9C|#y2W>&N52HWlbJ5tTUTT7zY{r%G4cqCa8En3x6nl`tH} zvN0UdNCFjxQ{@_|HVI5QCKH7SW?gM~m8fnpkhJPotwFe6=GHq5rQo^V&!p~fESsR>`sWKqQe~PaU~PhEic4`p zHIhnS!X()cl-KwQyDl8d1wDVf?7g1qOtd%;r0Pr>v!ANfjYDU&Qi~AxUy6WiiD)uC z`%LL{E4&4vF_Jdv@}v4&z1PSc-DowfeJz7;(y$mvmMK&k)eW+7LWn>>XQb|2Sr9B> z1ee{bUu~+cSC782)`rW9wo+X>_Qu74uDZ;X3@@3c+(oL2%oS$(Wr164d!nlAl@dOa zbmMq!EOXh=Jo9C}Zc!2xsx7e)x%edF{X(XY@vo(@rnBV5L)DrZ)@;V?QMZDCWD3z`+}W;OG*KN!L1kTe{Q&PB1^a0l`XLokvqE$ZT@sZgqD%#~ZM z<^&_DQhnk$>OWD<|CA<q!SJQ=Hu&yi5=BoXp>C)BRQbd(OkcRg&qPj#i zw|VChT&YwELU`VCE~`6A(thY46r7a8tNoI1rH+%T%e7sls&hu;4n_zWk$-5`fBzO1 zwkz8`JJ+m$x$w*9fwT(8t~V>)<^RK#LcXG8VJ21Ip- z{nH7S_P(5bSf&IbR|_kBZ>9xSP$~l3RmoY6FO+mQy`*oRY&qcG*)V|tMsvR4k^(gy zvFih$f)H}|5LI0-rX+Zr22{9uXoh^npFGXd(yv0eXC_53h-@SsFcvr876jNr@f-%8 z3TUJwWf=pqh@ebpHb>^;$l^aba;3l6r`{GdkSL=nwQQzMtx!Zjk6z!t6>TNjBNe%d zZ2{lFFKuA;e;G-aNf>r5b-56A@4SkjWUCyUOW?bV%X!nr^H)xC#ZaaesMq3?(52d~ z78@f8uOn(N=z!t7nm#^}_U^UVCqgY1h5%HaGm@bdz=20)$9!7HwWPv!By%PGy;gRxhKz-o;+Dot2f64j&xnv zHRV@JTnH{BZRKWRANaTKyT#8hZcFKk+tU5nTQJqi3fJB-RS}*?pIUztqFlK$%lgiu zBoG3BsxD^aeB3p$l#;z?Czh!juZpHr7*3UHd5r2H00qmDc8)deMYd1&16kx`PVmM} zJGiKKp2OMJ{_C0-47htXNw6My%CM#9j-W2e)raM(3`fgcIWWimxfOu}V!UGY9$vg+ zTH0h9&hyb0sqpAz8#&9jyLfJjsZyP)po(hzhYXY&FDzyC+HwR~(Pq*ch!AgrBBR_* zTctOVXR){w-@_%g+NOY3Pd!A*`n?d2!Km_)ZsZJ2l%TO?4@XFRQ!yxE#^VOa5ylVKnnU2e!yfp zVpn4=8lfwKxspLlcj-;cvuL(fMUvc9F@h^(VB-}-^YsZS>wIFR0slJ(dilr$>rj*m zLH{#HM7d&Qia)&iFmq+SreY0@k0N9oi0$n_z^zWXHFLl9zE$-OKb%daOm~Crkdbg&QJxJqQPjB-J2TKjO&sZ(90SVy_SMHIRy5q;d<;ATX@ED_F_B!PPsx?}}B}JD1|IsSau{ zvZxOLZ2akcJz0qIn-?8I2>98_K2*i!g(FkE=i-CRnFfxlcrJ|feR73D+OTZ17=GzB) z*f}*wEn{-^uXMx;q$BqK-`;!2*>TqQ{_mMNy=*;Owc6E6+M+JY9fL8(fHCf18!*jD zE+ph8H~Ep=011JFG?JSDHwh#VE(8e17XTHz3iTsdR##k9Npj!7r-H0+pv_$9(=J~%@ZRe}cF6T(X zO>bkIKe%`|?^+gNB<{6r^qLKrCe7|5TPFhSi&b0VGY?9MHea#4>{N5OK=@+z#C$bT zd^7Pmg*BF}wIC{{n9-!0E0#t1-HUhdqs@I}iZIX`<^Ox@9@cjy8JYBoo+S1-Do%IE zSLB%kjU0*}Yo8Vt3syjihC;TaT2UM|Gr9d#Zo+ul&9cTc-?`#N4yXKh93}dK8KOBi zsiFf-sVE?5z1=VsLY@NOJkW<>27nY|BG*V2HPMl778D>=aM0i?@x_aGFqzwjqL{RJ z3PiGQl0`>(;;F&o(1~ST{Cr;rl@UWOtw5JAH`5ZRm}K0lK{)5OLXJ<((@k%K)ikN1 zC|^|?qji^h9XigcinBAZ3lEM?Cr4WG`+;n^ANlm|l=sW$5M@%*#oF*olO}g@dO|a+ zPrXtw`EU(NJ(qXRzA`ro05!;3{z_ z;o+G>&Di}gY{z?H+UH`;Of`p0MTDFx#}SYYe}NZ|Hc>L1fXZ+vO;0dKELT4x-=!Ih zCf#fa`w`+%TQNYRuTk`xF)GJbH3ZX2)>8nLbY4TVUt05dwoV>Rc({5n%!NIZjHkSG z1+%pKi;PTq#V6E06Cv)uR&RmF_O&3M@-x&&rPY_C%~z;S1U4(KPr&08`z~5C%yw^x zkl}n$MZ>Hv7+Ens-B5^Toc!@y5AcCi6J&}G7B^;S@aPox@F^OiJxHOY4e^xj~Q(g>HsSuCy z&0->YB^*wA`0BB%QQ`DQZ zbW@?PIm>rmTg<+xHp=b8t}*jz?%Yx+sqBi{ekX-hTi6gfEM z;fJqu&oWjUjh==aAzxnjIcwLBtc|EKta+Wuv&_T&Px|)X}7y zkgtG471z;`xTCzPP%ES+wE6RF9rtthmQH52R$jO)P$#+xxY!a6iayJA`c#+|Uns(2 znaVpz6)mTo{g`56JtkPcGN3P*<@?)vh~---KdG63#^#BJa_sssKGZgh^48=!+v*O8 z*EPF~L^DqQW%Dx1eKY_x7WqZ7!J<*F8ausj7H)^Zkz~E-koh2@WEKaq)jdn}EbXx@2?M*od$Xr7Ek0Ez&H9>Il~|0=r4{M))yqCMr~g$IyQfO^dpmpu z8eBqr>gE8>ZeY$jP7qJdZN5AsQ(pf4r6rV~c2%5ekrq#}D#6db4o&O-Wk-H>80rj9 zE@J;gw3Y@GIKOL(Tv01em*-Ns|&H#96-~AMGblW{e^C;DcP|~ z$uBGxsDJ?I{PI9M(X0!4xzR?x`RV{OFWv&bJkY_R zq>pA#vEnn2F}u$8WxvD}YxVt&S^j?GGA1%Dl)Lo_I(>QJEUpSUEx+F|#goy&>FoF8 z&49;4rOBPAD_|{~)vCd9_Ng9jtGr7&BvYX~kR{;Mr^|`d+k^&IE=F}2ZkxAYSs=4t z!m462o~oTVR9d}x0?v{(NzD9Yd(x<#1dfGah%SkJ4LQE_?P)Lj zKngs%FT{bkmnKiq`q+wDw(=m>E-_c{*z{LPR~T$f^W=dhzO`{FGn<>u9QWczkvTr& z{8-ymG07Lzii*gyVFC(wzSb`Ccj_NzVoaQh(j`gVuB1=M;wVf{))+c2T=Z#H9gkbMN_PcH@k~0ZA|m|Uk&lVo+XH-tLX(ikqGLx zLu_Y`cgE?RG50dajOR7DHj`$HgGKen8#tvJ{ekr z5}Q_lBFRDnKYFc`zQ*i~(>}cm(?3**N~N$^zb_dI%bGJBo^tW22i7sSrcXLO!9046 zC0V&?1<01PIS2?qp63pC^7Eao429BGgjxOZ)*hc3zc$6H$Fk-OM-whSeg7KFIz43; zIty4pOrXTqHm~H@qm8U;O;%s9^C0_9zV10c*>a5{}=|AfY`^hwlUXCG*wg*5V<(jiD+J@j!V_+ zbjP#atC*zgRv|E19L&`br9`+0{{HN06*K+#@hDe^dYO9b7!4*t^$OySGjfQ5Xpjrv5Xsi+96so$_hmjV>0nO zbruD(L~<_v{Mi+JlKk(dxk(aFvMVTpUTAx(KZ0O=%k3 zMWQ)ZwTDwFkD%6ZYR(8M5`T24qN=eF0uwtDYH4Ez6MMgG%KO*oE^##Ft|@CTUgJ{5 zl1sj%QL596*3Polt4@b_YF*lt#;KWjw7L0;>`f?&i9;31o_?o}Lp3>?^6;arJ^aTj zeQb}05X)9}Jpor9$Ess@oQt=`Q{=UzhgjANq&crEPC-}jYPCIV z#il~OJe$WF5cvxABAUc;>GbDtsG@kK_-*xx_c?U5s_hps@$#DwY~bIndWEY8#u-n$ ziDX@tuVj`3X??4yCf$KNes_s`c69Q&M^_Tb*inzin`lK#;w4R4z^u48s%iEV*&YrY zH-xu*9I}k1g4}TX`F#7@S2(|CibHWPaVulK`kJ@zL(|d^aeXXm$P;ks+`GMl&pxz* zaK=B!eOh=dU;zPfLNdhjK0f}?#r)RlJ>0zf5X+m=A`4bm$(A%LS44zmx-|ojri*TI zMF+1$n)$(wUVgT}*V^9kPP78#&`l5j`>FGJ>PQ=(STVw?)&w3+RQAp38bw_d32ur= zWD*&`28O9JmT~jlZGC)iTR(f^_M}rUGQ&a0o20)XL!#ios9B1!uV0@-XLHiaRQ^;& zU>PiJ%wU*GxhkpsSNnlWp++hxKa5pvOHAhBtjiJ*QP!i?lVWLOx}1qz2ahIdk!6at zH@`TyMJp=JtO%yFH&xVCJep3s&u%*kwjg&0a-<8ID56<$NNaR*Is(Ubr|O16BJU)e zad9x=WAj7O<2Tpu z=c8*5v$Q#bLp7~d$|9e}1T@9U-*W1raaK{|<*`P-_sU`(*wtfw!d$~!H5NDI%7r+m zEraR<=G6=iO}VW|yt(9Fh&g5dWFuGp;6ncBlD*t8JWhX821OD3pDk(AmZYkRaB;6w zw|dWLY(Cn^cVF(|z8&^H9nYFtxF~St6wq+G2XbesqSaHt z@6<(8qLN0U;9xZ4VNX23YtcqFj<+J>vPELs+)uQLaPfM992a**S=BPd@}?B+K2hr1 zV?6<cc})^oQr67rVqra8q>AVjCxP(rie@%PrHdv3#$;vC5>4$ z#hi8d3+t6ig?NC7s7n_eOy*pOYetl(5nr>d#aV*fBz#-OY%i;rlq&;$s}(_f@6tqa zpGJ3H)ZJX=LoulwU*aaCUZ`XCf)3e26%O%fftW9BP^p6z5f*a&Jv3o zv$H3JA_OavaS_g(Xo9VYT`s28H^oIgan9*X($|!w&0oOpEQ!|BC6&p%=vA{T>gUz5 zATJ!5?>;R!5@(5kRN_F~+$K;&RSI}C14S_@>M8}pfe;%z+%?b1on-swu?w}8fTE~3 zWc3vg?QiWGM#2Gk%rX^K+g1@5^05$05U0*TXWu-hBBHC3${y_}vR{=}ggw5wzQ4%K zC8b)&`dqOe@$E3{6FD}=`^@RZENTU#ViAqWhQG_RAb=4E7k0Er!Rw z&g^<<;xiScD3-pgWz1~J{=0o`&G-JB>otHi=GtrMM6mB&F{e1yA|8iswOSSyNqL{_ z&pNAx!{%%hkV5V;V^2D-*Jny3XCi0gy>L3_lrxsZ0{4L&kJC|a z-{fp5lqQj!9B1Rbu<(0$oJtmO7_USkkw{J_Qa~gUi9|9lq<}~y5{YD9oaH_c$+59R zk!P<;TaC_}B)UWblp~$yI!&0IEqyK|b3+Qqn-)8FMxo7bm29Z{Dh1t8=xNL`k#Z2t zoT^-t`C>=FoXyTmJ2c!5Lq1)Ct>JeS=xa)GB;l^ei?JzRF;3Mao^w#py@)W@H(f;1 zn-VD?Z%Rx=-U|Hvd$w@pV3f(6!zz+zVSTF`3M)F&Y&;y~f8M`_Xh!AqMYoAunBdVNrEX%7DQ?K^qjP?T*Geo+%kF|oTY+PF0X4U^A2 zIK)#279p~)rHGvEXt4Zq*t3b`O@KWSt9|_w$LLuIKQSpOZ_-n(ug>fR83`hHu=o4X;yY^N}`Ae!0ZXQ#ch9UFCA%$qKBS zi8uc04iU>*v8xh6i?p zxc-M15YLH{EpME7*vmLRe9k<-cj*ZK@`0VaV|koEymuK>xw#a_JJzXsSU`cT=yR;@mOV6%O(n7arjY@7_meFvm#DO*qv+IXnN2KvY&J=x*+Ot(#_V zj<@wsGLdqVDO6lD*7Xw0I&ou zxoTyMp^h{+tev3An`i5opG?tDIZ5wCkF8x+XRcO~U7p9mfA8uh;L3B&aF|5iK~b;n z#HT8d$T@InCLdaRl-I^R?2WZkt`#POFU~TgfV?>{5k((O{@?W*dH<>~+rk0SkGmp} z+cd$cnXGD0^MlP@eDafTsD9OBolCJQcp%~Y!3gdE=*mx+2i60>%bM=pCbOf>thEj|r zn-F3$*9x`5qI!H^C;5`Wbt}STODegdR@Eb3Q6N=tpsH~5>M?dkoa~OapWrwp3j`@3 zXFs-h=zQn;m$-37nC;#5(PWH#J@o1VrLpS);< z@7=tWC-*n8b$l+9vuz!@Sld0xm)^6BKf7Wd-3@v6PkKq_9drZ=Y#H})%&gqHs?iG`CG!%H}V3fOGZ6jZruZS4rie6TA zCb(qD6k`cDk+h2@kIuEL!n|`J#$;AuSGWOj>~)U+l&|8_6uxoeb}m~!!LG2EXeNkQ zDx6EN4Dp(04|WmH!TVQ^Q_>YOmWbFsb=49PhidYnHKS|~yV)IWLyE{*hZK;r8xye< zq;vaCFLL!zgl*vfK*iF7f?+E7Tn2-o4FC9aAAkPnTFRA*k9V_+iNC)&!5_SBFMs*& z-F)=Cqij0dz-N9o%&{kXyXvoxMU6@R?20{n`N}KL-;O2D`BytWE1+qnzaN0$GOOBh?j&VV6oFfS*hvH2f-_dT6D+Ndu zbpHMWJ9t-rjKNTn(WHa1WCLPp>sUf$i-^IdBc1GvIk{=|7@7*nyraqzQ87suG)xpe zv}Tn3lMc3rJCGuBRv`uC>_u1}Zmr1oZ`{bcm&Mo?4wPg0?J!+aA?VWSYs&GLk1yjZ zPpzU{D!krJZci>Az{!gCIKOk@e*Wq`ySZX{lvKfiQ-yzes*g=a?8&~~HY^9ZE5~nN zG{Qezvy&?Zql_orj3&k9XirE^)kIO?uO9AWA|(Xz#1P`~uAw9R=SQ{?&pL^wooK4) z8FJ_55C#22`~vmRxMjmA8y2OQ$~u@xx>(zt=92zN?%dptZq7$UOb$+ZxNLcxzLp%B zf;N5r5;+G`IVWqnQrx(9oZhB1BQZD8j9pl}o_|D$GTQPyhVayZ}1u~Y1+_Y+py)h>{B62zFEJ6y% z*@>_`G_}Z2Z+U@t^iQ%a97I*9a(e2fLX)RNPh*bHJ~YHPUKmCQN4<&8c5ZtC7ppsB z{L!U*_|g@-dB?Izk_87x5+0nYNvfdnxd)e%DcVo8mD|t&KVa~Y4F~!9bvyXb`Y|#^ zje~J7hN)CdLMYJPP~g}5oA}1Bmr$PA=86LNdDqZkZvWU;;u$C5v=fJFVi*c-fg+FX zZe}zQWd6%oA~)u@FF8WUUm#r&OF9!t7w7h-IKMZ}otrx_r@P|Kb>bA~vB8t&+Eo!I zQm*L+SN3^~W}M_p8ka7eMY4YZH`ACqwZu_2Ug+#|BfX|ubeJdht9S>lb3UBF~ zdu{w3o*0-X}FD1p_FtGt$nphy2{MdXy%w&SchE)o)%!h=^_qOXP4u zW6OlJM9vbVfSi3;la4#bk3aAt7xg6A5e-B`ne$xsOS3bY3b{Ql2Z@%_yM%+}9a z{OkoZ&hLrvhnMW(3zzTVk|k3_(k{l5Zc4i7pxxV)Ud4%!1*KK<6C0Mi}v6a^+yE-vUzvY{u=Pd0ZTmh4VML^Psl zxN&V5-4HE?r>AFAJmnjvLOAV0Rp82@DDN4JpsG5rj0Q1H+hVgPYw@)=>f)M}5dv<5 zY(XQMagi-*Z0JsK{i-q6btWhoCc7ej#CfX~l5(S}!-*E2I?%|K0~2%x3dFKb)QTq+ zRbjdf><3nkb10#*b)uurHYE!TDIjMTCg8{G$aB{%FK|)M6x+i>JSszVOQu3cAWx%P z=Ti@?=B{l^5t+l4Ppg$JdmWs&D9jfw-^FJy+slPLQ$#Z^j;1`*VZgR9g?vT+;mIZJ zjW$tU26F=*)^nnHg*>~)tyRpFDsE<@ZL#womYUYxlOJ^eK;!hu3Np^oR42H##GK(o)WE(3a4DWr9Z*S z&IEVA+CkY@F_(!`C!Y0lUe6Tk7bQgoex0|e3KU8z6G=Difg;zhp5UF!qfBO1c7>Y| z!e#q6405F)9f36O8i)~2J1r-;LM-DVQ`A`Bo#gseV_ei5Ctotz83|yAR?oC*ii{>( z_~q_qt{EPquPH|)6qjTDfx2O%CU-V}G;`~qv* z)9i=@&{VU^=TR~gx*PJiG=tx`cO4Jz?gP@4Z(>_Ge1O8+`^WkG+jsNFZ`;TEt^{LA z594V!x~YhziVA0Zi?_($n2*1HydT{t`#Jhsrug4)-_4iay_@yjDfUl#t*6v#e@qpM z7)f7qo_n{n@w4qcoLKIMkGCutP6|i+^{d8M-#x`> z!pY&OCd#3^PNEsOdF=$*qE=PL#xND)StnCD2g9K>*R2}kExnUCwIbUm{1|2c+YeG6 zf1Y@*fuHXTaY4{PB;Uvj7dvm0V4(E>_CV|$eZG) zH^0D|_7pp#ejJrWcCBTr#f>>k6K=h0gH^LAO?l#UAS@2Jtbd%pc;`+&bIE>Ib|jfd zyO~J4G0kc}iuge+t@JnN`0l1fJh{IY(D1o({N7vk@(=IZ$>qyqgi~%t?V^0Pc-T|9 zGIR1!fM$P*zkj@!ebFZ7p8FBtg5GiNx$RYoy2jB&g?Q9_jHZb-q1#^yVa~e;yv8l( z9Oc}e6qDJR6TJPAk+hR{ERWOEnC9o(JDGc;rOE!7hbxC;wEBzWN^0$&XMCQ5$yClk zD(~Rjo&@h-J;vh3G}|ZqOywE?op9RCg}sxk?8q>cbuis|IPX{* zLsd%bi1^VBzx8T+@-L9cH*n9kb}n5KVQoj6aK=@&U3)pJpsRdv%_xzK!po!GNT0}p zL<-2l#{_~b3Qlp)&Ck={oMTtiZ%vrfvos|`p}#pxvY>Ixo#*n>XeW@OG9n5Lt{pzg z7v8ap-@kZ-fz}L%6CNUIw|I)I^`ln&;B)GviW(pL$r?-?+;-kx{_(0Ed|=Hu$-IL@ zvpC3=`ab~B>MOD{?BlNRO8okg?Luv z%bXaN1N|*W2n9-{3pJ(jD|E{=A(C?OuHhJ64H+KX-o@NR#6UOwbTy=T*IT9jcBIG$2N=-NxP~yXC-ym=RBEr5J|h} zZOU=&@Hm$*jnd%Gu{-7?R|-&etQRQgKJMJo#p;eYm-NL6r(NX-56f?p*EKRljT?r? zNaYPSj&@M)mo7zQfglBB;S*qSW1KtQ{~~>jdG<{DaHtj4ofL(Vp|HFq!$ii(`|miP zosl*mNm)2_t{xoa%UA5+cP|{Fw<*VH(nB;W%Dqod`m+iMv;~UX`C11D;y(WEhFAFX zMTc;xCL@!+Ssmon+fgdN#V}z>OOEfn(9JU=UDOW;uEo#Vt}yrg#%5Fn4#(X%v|}gN znWjQ#L!PJhHL*7`A4j@IlQ+k2UowhAHHDvM79&QnCiG~=$-4(*Gl^IFsXUv+7I6%lbak#ga4=)7kz%$0*tQbnDgZSSJLImNopBq>|`YR7La zk0}bI@*0thi$%da?;D=rUCSZ_Tm|;UJYWHBVq>38hw3}9Mk@pUSdGEjkoxu$IVjdFt25Vnb?%T15Hh-G; zE{_n)x+ob6iWL#40tHZpc)a zcE(p0U$j35pk%1D2lALGL^3YhHB#jyx1T`!Te3{$Gv>-MD-uebYulz%7wHOZEQMbh9YamCUI z?;D(;&7b9P!p&q(R4I6PZyO#*o-3C}Nf#Xybanb+K~W&Dt7HlqHx7@HE$KXeqzfq` z3j!%13zGmVLt*Z^X(Iub&VecKwB-TzeXg*oJ;{>?nz;J*w~;Hg;&H_I`1%9<%{zDU z@pBH*=q@ob}lascdsSjDstsel&PGfYFj1>-3sF6(>C!l{jFai?ZBq!QOEd5~ zP4cDc%C(9DMMEKxb8zFDFhyOrmgMw9fUz{dykwngkVN^dD*xx1#4hp(r9g`ZNGsQAflea`?Fh|aEepgz!_5(-0s1i=Q z@j47HUmD@s;R%*Dr#X^P2xppjVq^*FVxAAI93@lK$Q9MH<*5iuB$0P;{qQ)LMV>j_ zZGD0ikuw-6APbKG=XQ>9`wbg$Yj7~(ty-$FSNvCoQv7s#7azO#Qb6aE=WgT6m+$1G zYmea4Ob$(XNfm{~p<3^?Z&SlmaA_v}%~@Oyg9mqY@bzbVS=EuIGftavsi~W z426)d$l|6PuZ{)z>&KS!myfO{o>TeSH9Ig(@dR2)(5(~BIQhaamys(StI(g1rLB|P zd)sCjJvs*_YpgJYcyu)s7>T*r7xl5YId44ymoZI+Mvuy#`awR_lp(JlzA_Plx z2NV>FDi`%l@vRpY@xZp_ynMt%$XDc??gSpENg^*E6s#4b8mD>1XIX#H6wzetYtQtt zC)&XJt|@w(vgAq{`I0uh6g7P`EFp+y+^CAlCB2heH#|;nV}eLV;enk4yfWtD)-^|_ ztM*pv$`mansrn zK5_2obg%8{F<8#?pS;?^&$st7do8U1OIs&-;I@}(^y-YnyfcnP$xv9-C~{t|{Py|m zkGlCE7ag@Mg$lt0LjDqu?rP>>yn(sE!^cXnb72|)qSUh^^~Q{`yVjZ>}ovxV1T@XB}tFCJ~=FD~1~ zZ=JIr!_+vG@QAY8YL!bIQxS7WgQvvOrYuth2X}1g=C6J=z_&Iof(D}k;J6YeA zB${OlBN>>xEuE^YdYz8nI*j3xL5Ny=_0eO*y9Wjw&J3RPZ=- z{^H@K98Cn6Ihl)`m)@o+?!E10LjDr_V>A6fB}1Vrm`71eKJ>%2?3n1L&7a`fRT1(f zRrp<|x2Vt_DDeEjMqV9luJf6*;bgEa$!}daN~Wly*F;9O`-{AExPc#R8sgzy4P3o) zg1+WF(M%l?DJi7#VmT|4HhKBTZ1ti{4#YjYb09`{L!N9!*swhT_cZ3Y~9-OV!Ir(}%X^$3jWrobDudyw<>xL>rIqZ{wGHT8L&`bT{N! z6-wbyAzjokYV%PP&~=4qR@CddcyWvmt~$)&q?hrOn}ODhRhp%2mMPY`i|3qNxh#T9 z&GXcuF6$Ub5jn$<0&-?!A{LkeTxN+!LDv{fxhtNwm8uE2XsBo^+^}Mtc7K5bQ+{%~ zT3tv{VLA*n{FPNX}bn@jp5+_Y|-$&72p1l%4daL48jHXd#yRdDm*j%Kb~JwZ=Xo@m;MTG5VO zu_B}jy2=OFkF!7KV9QuN5iu}LKP|pAR}WhS7Ap>6uAs8AJ5_v?v0VP!&OyM6 zqUsFh=?doA9S!i!jZ66Aizo?4;UxF2tiV znBd+|yu_l0B73908KJtmB_3{v!L2`9!&Cda5aMN$DQLWRILhLtyjXgv!0j-|6jkne zwT)`m|FO`xcGWnS_D>PDYCqYiiinE()^pvAOa_4riCmBeceHT*stFb~%(O&Q1#(4= zTuI}W_2Z1hG`5c0jhL!4JB}tau3r@qPx*#Y_2+=wKsQu=zN4+;eWJfhw&doikq#c( z(}H2bc|B8f_zNU*4)lr$JG1b4LuXxQ zl4fs_bly=BP(j(cFh$^is+efX>_=GyKR_(!;ywLgg03u&ALyc7ibaaZ8Gsa!GZR}p zd|WfIk8i#ARi^SzBANOnIV$rfKv)B{tsHC%VR2)Q7EggK6ODZJxuyKsV?#W5xQkT5 zZe3gX^sNC!zIfRl8ayJ?T(LgL#EO;*=IIRPdErnqpL=+Se|~n5BMHB?t=h8i4qRG} zzj)VPE0IjA5+t`nOnjgF@1;!TDsw-Cc(ezS{Oq<(EN;%Tr$RjJF_lb(c7K5;Z;@Mn zw1&s`_F#*Lz{Q51I2ZO#5zjcQhGqgjr@=j2LS&0}8S`Ty-u&_NjWk7ows7N#u;L*LEJawRv7H@%b7fsRN)=A_Y zRS{bXqPEsxD9tbTG+7-COVi_kJcj9DTR6l$+dFt=EQrscv$8EkN1#AXS1D9Ppq2Gx zrqjOqXVY4WREg)ETr&`+(UalPkshQaa>gJ9uRF{iyyYNcNf*OUo$~xut==R5;3RqG)xpee9jo##$D{5AtG+vTAu4yiUNz3mR!+trbjX^o;}!3 z{TgCLpu}jhk^8oH^3u@;TD?UsSQN*lnIg2?v@HRZo`xLBypyL6bkuB5!4^k={qYv= z-`T-4hnmQjG*+}F>1)hVGSrzhyy{|B{NLKTp%BTsxS~HshcC&)`@1-?Vw95CiTqs7 zsN@a977s5UT)C64U$KSpl$%)2Da51R%K_7#peiD23{%1D)ER8a5OkOL+3pT*yZ;=1 zaX6t`KzU42M!A@)}=yY>;bya2|JV=|@Z=c45YP z+Y=Mb`-UT8o;Av2x8I>DCiiU%AuJ!;|KX>}o96D1ZepM{%kGF}dDwHZDVA_rd<9zl z1wM7xN*>u=Yk8Cp*v_z@WKNrLJat1vpbdo5$2cC9sB{GjbOj4SJgEM-fJ3e5 z^Is%!+3`3lk)2Wqi~Da}u zo-rS*IaBMOnHD@NL=IA2I1bgf-8ALvQW(_C|@_ zEilj{Kk3G^K``^QhBMvV(g-)+Dv?h-l&Eqj!D&{;4VM}dpiC?`vkt9?vl1Qtkv9aD zQP>7&)1)KHB#82i8&f)49V8=?Oi3{~KHJUueXP2l@KqWxdYcb^EmVCnvz-e6owI$` zXI8m66R8_&qkVBFzU*z>=4TK}!FFfe%93(e9-a9FLfGFaiYaH%riLEyV=qssp&afq=@(OrQoJBI zF%-LErruCq*CeP%sf!n32Ot#^xNQ6%Qs=}Qt??&F_5G33M!ys{=)}M6y`(PHw`+q7 z3@r}TC-Y)2X=(|Eny%rg}EdftagPW<=gFMa~o^LYMM zbq0e$ZgYaaPwD}z(l|Mp`A<;ER@UiQH)(Lr1WIES?WVn+L)|?mZ^BgAS6MYl%ag0W z;g$Z^j*^dYn!y*I<~K67V*)RA09%U;0Qh37K69nFk+& ztvIOD6R*dSE3mC3`r+-LsKyu%H-lQE~C<47iLw1_#Bdel0LPuHv0U@jxu$;0qsMOHyzY>Fk;fyNn4WHC<4 zYq=$oAX;-D`)0yU*=na$|8x(V{3`E~&~2rGZNy}n+*9?6JJ;KhKSrsl7)aubPo;0q zQz8&*Mze{`DUC_sk=+M0z634!TX>b_8%?0w-#-|$<&^XQ43*ZTwIN7>)Cpf}?SiPI zd*}kEH>oiz!n1LFhY!hllFNs^eREbffzq!)-KJQ?^zCkR@?48qM4M_ESi5~xi{_vZZ zUXghR*r=mT^fZSp9xU7Z$^ceKL2GokTupV{!^S-gCiO;zFBU+g~WTF%sIm4x$9sZ)YkRC8=;_ zGZO|eo$d$2{Qb0u)?cn$u-nuBTDu40&HL3gx2D~yv+J!=w)F2V_KB3vs8i)p1R17P zI>Zzo8lh;5A|gXx)xOKVeJ7~|Y-IqTtqh|!8BML@ICa#2t1VzZ?s{-0D&oBIUDPQ9 z`Y4w_l2m4CVzi%e{(JwSOnk(}xn^7-SO*Eok;9Q;>v`vRX+e7{egf8N^JD7v9)iXS z2CsZ_a~~R&{sr+{VhlQF<1>}&i^E|wgj!_a?38kTou?Q%>tvu_@2?)QT(H~fh*fO? z3MNhTGfAzsALImSa4qBN2~vVJQa@J9c9cgl|D;Ue8ma|uV&cZRNL4GY=k&X)cQR5~ z7)giuHIQdTsUkD0Zx=)Q-??l@h)t~s$+Iqv7Wo$FIZsSe?faKSv@$b*R z^)14Wu5Y_oo_e2-gF@dHi=T^r*blAOsx{%zBajEMW@KX$L+X17oPtKdey`^jANjAZ zCV0o-wn5pBYwsz1bWOJ>2}o#Lzlshs-of4P$(HS(QNF@N~M#iwNmPo=NGsd0utzUC% zp49FOAR)&n1OvODx#`baw!^ytVF2pn<+#hVQDNGl{l2z1>k=Pg<1&`o<64@4rD+kR z2DtTQ)y*!(?V;Qs@AbEc!?$twr6OuG=@&_=MxZs!CRWYJ1cYyPY z7(UtBhSv3-ocWPUvPi*R&k&q zI=)NuO*gb^XKc~EoXkV=J#Ba3vI3)QjRlM(<^tGhHuMDel-cf+ZN8xA-XRDm_ zX3^7xX00hPR>w9n`_tmB{Ue!p%T6m<$b9%~X>j;Afp-pO53iC0I{383%HZfd=oG?t zm}?Q>7t`wL!Ey+u$vKx`R>^1+OrK{zm+3r%zGzzKl!U#+m+OLbeM$!$Y;!{C9r!h@ z+L?A$WeoppaRR#G5oWihuh?`w{}0_*n9fRMw}F;8g`%+h@iKU9hX6dU&OHvN_0*-9 z_4TdX@b%VNPj;I(O1bznXzmL_W7=N1H4E2-z$aI7ejv`J{fQJ7L9P^l1$#&LO!)J^ zhU;jlhQ_e|3r`^#yy8R<);jZZ`is*wk0No=q~fLI&!AqhM9+zp?2>9Oj(fFO2QC=R z@R3N9y}hIxKcx@5M$V2m)5OTwh5O0K8f6_@Y(XmP9RZEIRz_9j^W2k~4(YDGB@%}D zUrK|=wJs31m&`rhWYh9-dT^M+CmvNg+3*U??p{D19C?wLurw>0OV*Jvltx|pp}#PQey=>>)^IX=aoo(3K(Ys_$B=#yavmm$g1EN}sdITOlaattAmMnL?%; zHdU|{*bu-H&fIJ6V;|1{q9r-V-kA|B6sT7FS{7Q2;W&A)}wfmRo_jn1$VDl&u)Tv?( zP1{q-CMRfmSirAeluDEXE=&{OSEL$K{~UH8WP*Iz{C>Z{%t{3I)ei9(O*Py|lev4^ zPGPJk03gxMU_ft@CXSZ@+VQZw-3(VspGb}f-XdpbU-|WOID(<+{g_lB-x%-?=JV)s z36u0TFQ%x{OpxZM9|k4|Z}=Z7vR2{LJkEp1DQ3KDdASAvW>0NXq5)NWf#PD#gI1?U zh-7oP^(oxOE+M0t3{$S)?^l`D(*WR>@&4%;cAUF^s>AjQ!m!Yq{_D_CZrlX4!HwNj zPN-WEr~)0xDnul5>JdO(Y;7sSg#-8yq|&w7X%Cls#B(bF%t5ymqHR(W5OpS%H+s$a z+(@D--`w}YA)M$e&<$+>Xz9`QBZ(0$#Xy8}Fw#amYWu z&WkM1(cz_=84gdP;i&kP)Mo9I9@ZS=!GkMHx-{JsaD&3=zxwLM`8Xy6cwCL=&qnwf zwM^#;*DVr%k`(Nrhzj1sJ~@`ClL|Z|Tdb29;=gD--rUx6`F%%qHuKtEJeiz+Z%en& zv)~;FF4N6pKbSZ$mUw4;*5r`6I<1OnH06IV*Y3YLsDr)c-43!*m1mb`JtHJ}?(l3L zN`c3g^4zTJ*%y6qV63hg60U1MH7uu(6OXDFxkSPbgTI(T1O33~3aqV(`i5GkLy&?#<+Ou)_hYbVMWd9C%icRMU>a?e0yr#ak@`B+fd@Y%Mw5S zGzRd>G%%->#k;?K?@=(xs`bh&(o z*4qsuO=iPx{Dd=aE&UQ7ZuVgvS38EikYitYB(}mopjtF%+ZaQEK24BtEhADSh6pLp z2(Nk@XI$H@n|;l#K)UqbAkVh&#toK|OM6mFDIq z4mAa)t_AC``DAW9xnS#f&yxiXv6}mvw6nhno=%U?ueP|+Z-=)^5aNI7)<5ky_^nq&WQo%MHlCJdQ%;+n?G>)z#*3b0WDlvNxj%32 z^FOKmhF$UdoUnCTX-j%P+IQC|l`VsR1vd(mJB?+?okS5<($ppzGWKb1R91b9ejooP z-S4jAT7&Pwb*v#!8>7Q@R997X9b9Jldd4T~{Ex#+Ab+vdvWC;~tv0Ow=3Qx>HZGl_ z$Z-}?dl+78Tuq%v;-|KxoTR{tvRI23ig+8zFoBGaG3oZGpoO+5IAms_$yng&vm*n_ zk}i|t^0^i3*3tyqDEQxspIZL*zd&_b zB3Mn6Ajh8UjQ4muVaP;iR!%~5>T4MTccx(zqqLJ7;I&9^1k{TvL|A&~81kgGp}~XM zN%ojM2)60DDM09on1U{s@nE&pC{-|*M5!S08o;_G7uHM9zG~S)Bh8j3(Q)ewE-h_t zlTjAenwTm?lGVOLun13QZvD#gz1r{jL;NahJ66&P7uY(|luV%tVZ;KExPO^$*m5Qq z%74YI2lXy48ZJhUroqIQ0vXb#5Aj-Jo+n`2LvKfL-u(h@O9+@&n$4YCaMD!bi}Wpk zhj)`8GyX}nHku*FV^`h>U#3Yd-slAiVal~R-pp zfWV`O*M07eLpdj4veIWgB7NKua<(0v%~=oUtKe*g6BN!`j;&1~s2DT&j9=a@0KFz! zQxrqR0?N@X=srSFN8h=94u6U_iyDa0r(mu$=!T3K(Fs;3b!oMr%6FXxNWQOPcgEqm zW4qvosxZyBZ{X~p$5CCT=wsY$&0=bkQ*Pc+;8>_(@l@NXxNbLi20l=2>mNzeucPK` zO)l-nUYDx0>Z#qanG{qH^3m`srvq#la*q;aT2a+WXzan-R7$axQHMd`)gDTopZiC^ zTWD(ZJsNw2Tp3;hh4+xQGq%wT-BIYLk1Zj6y?uFI6K3?w^{s7WP=3 zci%DpID^$z;CVGX7yWHbBIZA&viR)&iu~+*`a0ZjYDTo3XOS?Zws<(|yD!Tv<9Q8~ zwZHLs)v6m2QQcQ??218M6jayymUmn6^Xlrq0-RNEUVpa4e*+cra9oXGI$$<1CsfDb zSF6UDPGqj%(>wa_1rs1}j@+XnV!IU=L*8)~rknTamFCwrF)M_$qND>Qjv)+kZc{3k z6zYt>q)2aYyH3(@>OfGNNbfcyeQ~2;#294)ZhT97jK@3m>~Hjf%h^cx!NEuC;=0r~ zu>3Hh1QhvQ|=a0Uwl3MPPDUI$~T%^a>UTP+yBDG~nIsGLc@ z>)db(EfwzQ>kKSI9+nf;lDoIi*ITM=Wbs#RM62^y=d;C*6_}?hmmIzk(f)uW)#Hn1 zDnlFe|EL$cL7wl@GycSMG+&?W&YV_YF>|Y+y>ij>p&6UwECa-V!sglUPuHN*s%~DG zwd$3!L%42Pxlpw}yfB+fug#)sy?0yn73@`CerXq!QgFWcEm;2vTXK&48%P^%%2nlR+wZmc%s+h| zL@K@)dx3rjsf88~=;a#p$aKyRYuMvPSiv%JlMJwq3}|2KGipK}iH``2TpQVN?oDr*iK!z~fQg3Lz&Rlya@Fl164;JR#!}ljF5*2)|o|Ut$#FzJO#c zhcPiQu?IaeL7ZmNzkP5yIBLrTp!TCxvbBJDyQYSLV#F53gIrJnlWVTdJl^x>Vbm2O| zUd&ecDy(IMTuh`&6l`&GYmYjmVBAJbq~MUG$IjGVG8JK8^k= z%bG}&4!8*53fV*%q(G=$Qs*UiSxo+dSZY|EJs*kF!s9da^dOd=^pZyx*EavB7Z`!;;v!e)v$P{K%5 z*L@R!m@1kusk>#I4CYIi|8H#QwrsbY$nV~=lzB=VrlEc%U~II<5zO<2b1&c`n_Vc} z!5W5)q>-`z_3i$BG$A=+Fgquh@9zKoxRGuXQ@RN3)&>S}+W^o0*BSUpVkI4Hd%R>t)z>NRb z!T)|6JbTpcV19HthC&FsINB5S%SUkpNL{|-{R0Wh?=D#31Op22QG%*Ls$RYQ@INN0 BE=2$U literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index c642b5f..febe381 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,10 +28,10 @@ SOFTWARE. [project.urls] Repository = "https://github.com/SuperBeastsAI/ComfyUI-SuperBeasts" -Super Pop Color Adjustement Model (license) = "https://github.com/SuperBeastsAI/SuperBeastsAI-Models/tree/main/SuperPopColorAdjustment" +"Super Pop Color Adjustement Model (license)" = "https://github.com/SuperBeastsAI/SuperBeastsAI-Models/tree/main/SuperPopColorAdjustment" # Used by Comfy Registry https://comfyregistry.org [tool.comfy] PublisherId = "superbeastsai" -DisplayName = "ComfyUI-SuperBeasts" -Icon = "" +DisplayName = "SuperBeasts.AI Nodes" +Icon = "https://github.com/SuperBeastsAI/ComfyUI-SuperBeasts/tree/dev/docs/assets/icon.png" diff --git a/superbeastsai_nodes.py b/superbeastsai_nodes.py index cc1d006..58988a6 100644 --- a/superbeastsai_nodes.py +++ b/superbeastsai_nodes.py @@ -49,6 +49,44 @@ _MODEL_REGISTRY: dict[str, dict[str, str]] = { # Future models / versions can be added here } +# --------------------------------------------------------------------------- +# Known SHA-256 digests for published weight files. This allows us to verify +# that a downloaded (or pre-existing) file has not been tampered with. When +# a file’s entry is missing we skip verification so development models can be +# iterated quickly – but **release** models **should always** have a digest. +# --------------------------------------------------------------------------- + +_MODEL_SHA256: dict[str, str] = { + "SuperBeasts_ColorAdjustment_512px_V1.onnx": "a813fbb091dc7849f460f17e54c70cc6e6ef2984589a0ae94ab308d2957dc4ad", +} + +# Helper – compute sha256 digest of a file (hex string) +def _sha256_of_file(path: str, chunk: int = 1 << 20) -> str: + import hashlib + h = hashlib.sha256() + with open(path, "rb") as f: + while True: + blk = f.read(chunk) + if not blk: + break + h.update(blk) + return h.hexdigest() + +# Verify checksum if we have one for this filename. +def _verify_model_checksum(path: str): + fn = os.path.basename(path) + expected = _MODEL_SHA256.get(fn) + if not expected: + # No checksum known – skip (development weight) + return + actual = _sha256_of_file(path) + if actual != expected: + raise RuntimeError( + f"Checksum mismatch for '{fn}'.\nExpected: {expected}\nActual: {actual}\n" + "The file appears to be corrupted or has been tampered with. Delete it and rerun to re-download, " + "or obtain a clean copy from the official model repository." + ) + def _latest_version(family: str) -> str: versions = list(_MODEL_REGISTRY.get(family, {}).keys()) @@ -288,6 +326,13 @@ class SBLoadModel: f"Attempted path: {rel_path}\n{e}" ) + # --- Security: check SHA-256 digest (raises if mismatch) --- + try: + _verify_model_checksum(model_path) + except Exception as _ck_err: + # Surface early so users see a clear error in ComfyUI + raise + # Use cache if possible if model_path in self._model_cache: return (self._model_cache[model_path], ) @@ -316,8 +361,19 @@ class SBLoadModel: from safetensors.torch import load_file as safe_load import importlib.util, sys, pathlib model_dir = pathlib.Path(__file__).parent / 'torch_models' + + # ------------------------------------------------------------------ + # Safety guard – ensure we never import a file outside our plugin dir + # even if the relative path is somehow manipulated. + # ------------------------------------------------------------------ + + module_path = (model_dir / 'contextual_residual_unet_v4.py').resolve() + allowed_root = model_dir.resolve() + if not str(module_path).startswith(str(allowed_root)): + raise RuntimeError("Blocked unsafe module import: path escapes plugin directory") + sys.path.append(str(model_dir)) - spec = importlib.util.spec_from_file_location('contextual_residual_unet_v4', model_dir / 'contextual_residual_unet_v4.py') + spec = importlib.util.spec_from_file_location('contextual_residual_unet_v4', module_path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) # type: ignore ContextualResidualUNetV4Torch = module.ContextualResidualUNetV4Torch