From 43cae769ce01fbac15b99a19a8bfc08316b59e23 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Fri, 9 Apr 2021 22:00:38 -0500 Subject: [PATCH] removed 'proc's; more fun output --- bin/onyx | Bin 344432 -> 344440 bytes core/array.onyx | 53 +++++++++++++++---------- core/builtin.onyx | 1 + core/io/file.onyx | 2 +- core/math.onyx | 2 +- core/runtime/js.onyx | 2 +- core/runtime/wasi.onyx | 2 +- core/stdio.onyx | 4 +- examples/07_structs.onyx | 4 +- include/onyxastnodes.h | 2 + progs/foo_test.onyx | 2 +- progs/odin_example.onyx | 16 ++++---- progs/particle_sym.onyx | 14 +++---- progs/poly_solidify.onyx | 18 ++++----- progs/simd_test.onyx | 2 +- progs/vararg_test.onyx | 6 +-- progs/wasi_test.onyx | 32 +++++++-------- src/onyx.c | 44 ++++++++++++++++++-- src/onyxdoc.c | 2 +- src/onyxentities.c | 14 ++++--- src/onyxtypes.c | 8 ++-- src/onyxutils.c | 2 +- src/onyxwasm.c | 2 +- tests/aoc-2020/day10.onyx | 2 +- tests/aoc-2020/day11.onyx | 2 +- tests/aoc-2020/day17.onyx | 2 +- tests/aoc-2020/day5.onyx | 2 +- tests/aoc-2020/day9.onyx | 4 +- tests/array_struct_robustness.onyx | 6 +-- tests/baked_parameters.onyx | 8 ++-- tests/compile_time_procedures.onyx | 22 +++++----- tests/defer_with_continue.onyx | 2 +- tests/hello_world.onyx | 2 +- tests/i32map.onyx | 2 +- tests/multiple_returns_robustness.onyx | 12 +++--- tests/named_arguments_test.onyx | 24 +++++------ tests/operator_overload.onyx | 12 +++--- tests/overload_with_autocast.onyx | 8 ++-- tests/poly_structs_with_values.onyx | 6 +-- tests/polymorphic_array_lengths.onyx | 8 ++-- tests/string_stream_test.onyx | 2 +- tests/struct_robustness.onyx | 24 +++++------ tests/vararg_test.onyx | 6 +-- 43 files changed, 222 insertions(+), 168 deletions(-) diff --git a/bin/onyx b/bin/onyx index a733f4b9ce3a68cabb61d2577f856de8f62869ea..5e9795c52834ec7a4bba1215c8614db40fc2a096 100755 GIT binary patch delta 77769 zcmaI82S8Lu_ddLH0cBNO7J;S8qM)E4pkiMIL0t^?-Z7R~BNn2ufdbKWvzClzqR|A6 zMw8eOBWNtxdqER>!G2flz4JYD??vJM-v8(OX6N4XoH=vm%*>fHCsFx8U|)gp5prMJj~WmD&1IgjfwI+MH% zOiq+xb(&F8X3L<9g${xLFJY&gWv)|H>yYX`?aRFxKEqmj)ybN)vXg&imvZxN?#fx} zu-z%OLq@tJbrpHy@o;;Rdip4{#ZqiQ0T8!^caP% zIVANsx}k#ByR|}dmT8}wsWUC8VDRp#pk6BUF(nlZ-UAdgM1>BaQ9ws2Xd@MxLI(n! zp`d0JYNiW-{-B^eRp>Ih8|a@3I!uM;(I-InD(EB?dV&U4GI(E9(Ag^VDeVOGj)MNA zLO;?Ol?(DPLE779IIMQ^9j52@&VWjZyu=)FfMJm*zBDKyr_ z;GLE{y;SHvN-7(?Pbp}K3cW(3 zfZkNlMk@3%9az~A_(DO=DwHVWuOp4s8B%+yP@RG%spwt`eVB?~L!l?D=+O#&l8Ti(jnHYm;}qI#6>l5bNoVkGr=UNn(9U!Q(C!MlMuqmJ*+2&=Xr2lkL$3p!q@agX z=uE12HF(ccP*H^z(pc9BGKr4G?=-p`ziG4pzv-0dBgiZog_9~ErL)w1Hb!dHh!1T>uv_}D}Cb@;l1Rc?5;W#38&^p>PO5 zOB{mpnX)bXJ1qeEha%Zag|4N zRH1w6ZlDJgbeIY~OrHQPablBH=y4htXz*UEw*LKQthrqjEDdhhNEkLKU9Ez+Ors~Nn9DyUI~j-|0cCo5=-3jLOj z1v*1PlT@gME(f|mLDN*|Vp;%ng@R_O(7!0DZt%`g(0mp84~+tPKtT&t=t(*d=m`bY z{8zTVXXyfR3B{c9;cv26*`s1 z1{<`q6*PuE2{zD4!HAg@N|K6yIb9BE>lHLjg>Izx8=v5Kx!=$dn7YaOJ}T~+kP3f-upC(3ksu!i1ypu!WQ;`xR?f&LZ+ zO;VvtX<$u*_XY(`Q=xlkC!qf+XqE~U>5Q6&)OQM+uR<%|mFs>=MGsWyg(`Z4LVv8H zH&y7G^JQ(-My69kh~B%4!ednN44|6(6f{YN&Y{bJE>h4m6`Dm0 zfc~YRSt@i3C7}pH6f|Fj9-~n}&nal33cW!G0xeQd&4seHenA(6!Uc%3ZH+3lqC$^U z(LEJUycHk>VB9sG=v*-C+jrZVDQsLI=|)K)+VdBo#V|28J8FXDMi!3jL9G0=iN` zvsCC-Is@nl1<3TMAmJLLbxX;f79c6;yM%Y)vcNlN-QQMfXwYMio6sp-0l) zbqx9#6&g>+)-iZ@RCtn9XkWS<=r9FMQ=t=RK^=6V2xonk3b9fW0e_?9%U7W*X%x^L z1uayeyXionXBAX)rEKks=z<7Cfnrpa6}=sOg0gxjXp#yYL<1uY z-eVLrO@)3-I{~#QXqF0HOlJW7O+oWjXb#N=x>rF9Rp@bg9q0uG)m$xWf!kCcW$=EY zphgw?fyPD|=&2~@)EE`wuB_KPs_0b}dXkDBuF#WJ^kxb@O+|03(C5o^dM!%p{iQ<7 zQt?iqq%Ic43YxD%*U~7UTNJcVh3=sPfu2xM&9$=DIZqb=y`i8+6?&iUu4`!gT0vt} zsN(~ls4ltI%c&nx&$f=?uu~tf2WS6r03Ahbm~H z3QeZhflgLXO<`FJWKw;7ERq$}s6rRhSfIZtXp9P7N5=xqRnR0Ax|=QsdQ?HvROo-S z0BE6tW~tD7ltdf6pDSp-3jIiuh=$=M(ges5d(?)f$yB^q>Z_{^bEN#2bY+MI>@Yx_8q1W+i zrTQj(pFS49v*=j-rqkv4Mfbw*G)kKC%u)C)qyw9_!S5eUBfKXm3U9nqR^egv2{@haz!wre-bhc0Hzvz@Ly>x}!( z0utNypq@mdNwlpEDnvTiY;_C{kwj+%y#^sFU(^>D7bjX?nr)_oSgIsiqBV%Z%?F)6 zoTU#s`=;Ip(QI*g!4oH5CSLej$82-byKx&u@(;cj0pVFW$ zx)BZN>XCZSY^i_9Y@H;^dRmhoi`6B*g|d)AEnnNr#M1V)+2+#YgaZ_=v?u)o(Pe~j zovh=Xx57%i)-R_xXrBG9WBGoX3=}MIc+mdz2PAeU9yJH$+TaNy;)9%1gY5V4oT>}Z zw6(@Jbxue>Aeb!~L654^<8k^S2ULSo?9p^> zw|d$HxBp$a)J=*5s_@mVO zGC8N%L^ARPJfp8x1;YP{fkvWf6?M2(RKAqynQlz@L+lcot^SXYV9aO;Mw2!C0^W4` z@X1S3xyWn9{|(iRaT+qiLCHMSto!=0*%DqG;=ykl6=c-uolJP+$X;0?t7$2u4AqS~ z0QJ3rZ3{sqb)ill7IUQ}h0u3f)aEVhWaOIKoGx(8;^c$3Vvnw;9eY7Hk8YBR(XDyH zNBUlHXu%;4?#w&bHM8a6R&L8@=2d9L@{72n@Vsxq5a&j?!H#jMRwrAU10QIIVYf|- z>90LPb-OkKx4CSd1UWX-AM{+0rm3x@JRWy`LfsBW6~oYxXz_U#i0fU2i(4AB1{E<| z&KLF41;E*u2X#bmcRXcoymx#eN^_J-GrfR-t$ajpGvX)FTHTz!*I6|160IJy73qnV zBrh{MpJkY{_+BcQ&h6=$Iu8Y;zZO!4Kr26VCHSFbwKSSMkdga)$u|u)*RCWvD_!Pp z_zd%mecYw>=@;8KwqI=j*a3UdZ3T@kv*-Kb;{VgTT*3U^=V0ee73a+J}Ly#ihS z#T)+zsVR&u?$s@|>M2J}I}AE+NUMNnMYbaJ@kv<_>bwe%=(lf?@PCkb6OZCU7w(eN zKM1--`F6`kuDN)x6-wYk5vuG&KYtlxaMfk%${|-k49a%u^aIxwqtgkUS!0cP&7a?5 zETf!qz{Fmzyc3w-E&v|{xr%Ez!Rj>jleBMPcWaEh*_s&S8jSfsXYJ*f{@Ov8@fymd zzjK~g!))_dGSNW;iw$y|X(p$N3%SR26Q$_yp7#kS?PW zv_Vy3(F9N~(*ZS;GNn&))ao*tphVtBY^I)2QLLyV8hZ^+lS-&$*Jz5CrJHiNwRIU3 zzh-OSAXkhFF)|#EG|o{AEn&?cQ6%Ond_AyZB~__=;;~b$W~zwP$?b&%6wa(>eGz`)N+FneL6_jw{>| zx`=I%Gtm|t$qTgk_d*qimRKO(+AgbA=HXOb=0B1>Ob5qHJ|z=btlhE_to4H+Y^Ov- z#B^dfk2xNRL#3LUHp|RC@m6Gj%y^9kvoB`ggGmXEuj(?cp@mvm%eO+c?9tdb)+x~l#SN3h#`DQt{O}aL2laD~P0uH-8jC5{z|c}I z_d2kmdAfi!sLmVPO(q`!*&c&lh%N(aH<`K_RLM}*o{sk6@O)`5UN9iB|Ayz(M9ZtF zm$8x;wdcH$%)1aCVA~dq@149yCR&psqw*6icg1F?f@Lp8Ph~TmMZ<}UpMa2g zNjJMcvU3;u)U2zu7wCSVl9o?({hg|O3)ZWg)f%lkg2v@JD$6+zKSPeA=FFG6*-aH0 zoO0lqu9wq0c~a|(M3VJPm#R+;a(<@kzx$c4cfR<&Eb?#M`+25w1tN)AgxYddK8g9e zB)?QgDAx>xPeR&2h&)u5Jw|)-kDqVtFg5G0H4$oo{G79s+vUe&qvQkrdEv4tEg$e^S!McnsU;wtibmsRDdFE7I#+*{Q z|5S1pO5lWXTw`ga1b5WcYJSbvDrPKG;%%{*>aZq~7A`Qfcr{4YU*i6}Zn3t*=!N=T zlKLh-c0M_c4={Zydeq8N#G*fy)^p{pcM}7mt#uSkV2ge?+JSpYtWzF|EoJrUgKP(x zlOiNiN)(nl=OGW{S7Tqv2c_j9ib#+aq_$+$HHwg;2iztp#}px$ zI5hSo2$B6IO&t{6MnpNq9xX>XYM#%B;03e!1mQG?CyifE@PMDH3JfhgL0ep?_}RUm z{p~=BKe{(98stY_Q0Ku_YXyU(NvYS(oNhWj5|3uf?FlaMhi4(D*dre#aS+Np;Pjq$ z96ZZoND(~vNvzz=mb+%liA2j$QFuV_5B4WjXoVrc<@()6S6oA*hqM;ReL8JOf3iI1 z@(?W{wR7$a?L)}BoR-71g8TJ6M@@QRs(JUL@+q#f1=QhW9vv{ExsaMie;pAcnDXfL z5$1YDxl;XZAwexPQKxlVF73YSHG7Zc@$Q?hvk^x*9RjAyJ*~aiNBh>|u`QSO9m%xb zJfFqGEtkF@**SFQ7D-AjlD+brhaCj7yoDeRyv1AT8rJ1vcRF#@2vS6EjOs(~(B`9k z^!vU<@NskK{B69wP}n*;d~|gZNo}K>3D0iQxuXNAM^;! zoQq|K_^%^`UN`Bkul?x{U)LtZbm!NhRsOyKGycoXn10{c+9K+-c#{T<@uaR}DwCaf z3Mcbv>X-mJYK$A{kEal_h^`qE;p2pSTcL}_+7we2+L?DSUBV&pGJP_p2H8)&lKuQ< z7Zw-y>1Td*Dz>kAx7Y%fi@~V90amdc?U>x8ap&uB?b9$6w(*Y2s~+=-!fPr<;k8}n zEx16iCFsmAFb6_MAG$ZW1@?m+#>T`fMj@YNm@SS$;&-1&l8}jbHCrnM?UeL|9K^ku zhoS8gi0Vz#$HoZSLb`wK_hcmPJT8bFpcBVcBXM-exUOV6eKanF?9cHUA45n+POk|D zLPpWCDN*E0`di9XV$GTPji=CZ6lUqCx?Td`)UiCmlT&X{us9>;yi4`BoSS*oH;z-| zWj?27N?Kn@!v^GBoYYCcURBtXTE1HtI{S6ZGuEas4X*=ClV}@OETZTszQ#0;*Zz;Y z*}^`2X|{Lhd^k|JfuS6ELf1}dpszIxkKG_7!IF<2<2#E!oAR?T{X05;YM{{PJDM{! zFu?g=KBzOeT{N*>6D-enYOwC-T@qv3_Z#|bY7Ol(Da<`6_Mz3LZ4n&L(2LVj1v;Mg znT{}@E}A}9u=5u`8k<^8`^R|R-w%p7`Og9iBi8dOU zwp?iX13i-#My~uY!?)ZMKKXm+L{6V@VFeW47o7Y_iePSw7m zmn}8x59h_&JZgat43{{=0Wc&=lf*Ip+U8(!ar*0GU1mGj6d4Z=r48p)PaSsvL3r9! z$Kr^TIf*tW2e2kuuJ7d22rtWHcPmNaNG_r~Bo@tu{0A4Xs4fYSC-OkU=6`r7?5j{UDUzs>`^uioZVaQPWWKKg8L_@8CEx1A$@;s)l z3ndT%o*x38uzM6~wp>rN3`PiQ^*F|9m>mb-#+YgrByQg?S>yN+YOz+U{0C6+m=qCu zEE__%TI&g}L+C@RZ)$BRpB)lHrKh`QZ0csgu;K+RfyBGw@(O${9_=Q<*D?0N>%!#? zn+gC$CL`46X-}l~!B{ZBUNF?%UrIO8yTQn@1p%DBr?dw19{~||zd&v)_+=>qH2oFF z1Hj@5K_Mmoi4*7_--ky{M>E3BkHOHe`(ld3y7&y*VVfT}h%LH4@}U)+!6m-ii&^n3 zEpJOEi*hE}-Vw5xPMBAZ454f01(A*P_`F2yqx;N1NB+rqI)96R!-hZTAd*jA7B0Yi z@aw{EM5HekZpHJ4Mc2sHoOwTn60(_YWzEUoIj`AiBD8Ftb8PYNgsi6Hf6gYaXzsR9;65DzI-ICv1j=-LTohV zw`ieF44wE}0jWqJ)IdfL7aUh#=>aBTCV1vj%V;uPmvHp8Do=qg*4}GqZ_uTqCc8w#~dGTp$>9I%DIjNNx4KM;$)hhGt#Y2t+E?1Rrmg| z`4@eI(6ZF8>4wd_^bbSIQh%YTe;f24Rn%{CR{uTO5q+iFwuYn+?Tz2+^auPF(IfcH zp~626$rRe;pT;DXPWY#~c3m`AIeL9G&H5)qJ5_$07EKHOsiAErzqOD4VS7!jzx+}) znnvR7L47IP!}>I7dx&5dj;E4_^0Z>ir-iN3Q{`zN8?85E1x;h)-B+ZgR#U-2;$ogmTgiibf@u(k=YSC>|L z(NPM2Ht2jC09KC)v44v-A2PYqCp$yQJ?gv5j~u6s@Vk+A+x5_eL~*^lNG%jeJLZRw zX7t1Hv7hsKZ zO|Ygw-lPyQbqvwOTK4m8y&$Q{onHK~H-xODp?kMsa=Nv*I?m9X_e~^QbJF%j5W&Sa zCwu=@A;f=*e7eg&sKK^BODdgvtY+ndO$j14S8NZV%5CZ1W6iZw zK!W>T*@IR%-h?!wt&Z0cT$<9c$6F(w%{$%@!~ZdUyU~ynHAy(_cw%7vOT8tHE+Y|l zTqbhwbZ z!V$)k!maez6(&?MTT_kp5$GwUH^`i3$xKSf*Db;FL5lmjb-|oG?FFoyem?{!KvBghPhwrHa6V6_M6vdP*=&aERestZxajA}e$dJC*ORV=Bx8-=g|C4eF z0*ie4puX+jKD>A_Aq!F??yKN><^IM_aENA9;@(d&OAM#8VvJod+KqvnPH^21CA5W zl`t`TmHa3EO^2QJH>~#hU)T(~^lS~olK+Xt1M_vTnSP|N&KgslvY-J!mrLIlBA>(X zN#Z1OZtKb`W{b|_(I@nWFfs3I3q)5SI+rz&!f79V7cg)qnTLe~^6Oy`Vc(%$)K zvE`nULMuG!+KVB25#FeDd5!4piy`D%PUTDc2zg1*TyCSUQ}IPMB3er4?j8@s%rg;z%EiF;Y`yJ_F6>o8kZxK_jaSRJ(B7fwAHI`+E zce!qB`UXR_bnQYH$z3T=+R%wcz}wMmZH3WgdZpqlrd4nB6B1g|X*a4ygtkP_XoH=* z3AaV3fpW7UPX$-0&A7)aT}T&tu@ z4>$bqv7=r*Rf$ytEZ>1CORKr)COYSsA6#Va< zMADZA-t{E6X`{O#@^iga^GX|TH5b!)IQNDwf7L)M*5Ka87Tw=RYQ@D!#4hyDyJpwU zTB(56_whRX|zFfo7k2lQ73y1eYSI% zx{B9nGkbvk4;3|=j45mcoKJaK)dik9A^|)QS-eJ z%=2UKd17;C_PsI2fd*6|e-v1(T`(J%Oy!W-=F%2q2xwT28j6Au=a`BDNKc+E>JMva z166~8czDg{LabiU@K01KeoI#tB?P@vQ3J|I`HAl(AEWyFqlI!>IDG?0Uvio5cY=0!kl0~t`Lc!@YbmW?k*uFs(FQ74(i)xSz^!E(Du{giNz#56@7#zb~g#A2uO1XzoLMwUvZRiC%?7%<91{9EVltL1`}I zK3S|y_dK%b-Bg1cZsGCsYR`)$>%KrDKJNBEGQXqao><(z#IP$}zCJU@cZ8%P! zQFfiT)cDGvb&=mHzojv+ytMbxPTH`ugd7*%1hQ2E$rQ!~vM>jdPx9FV2NLS_^)o?}U={djY3bq~ zu{w@qVR(gau#0AGoxBr+l{fXa0QeVc64ur?#H#b<1BAJ}3Rcsv0ql_@@h1D2)`|2d ztJp9nQq3Xvrohrh2_Yef2lC(J&I}IgCwStQfDm^E1e?SQN$&!Kd?O2KU4ASjk3)()wRWR`|OA|MO+DQRRqF)wz$$X8#V^ z6Rgvdc~N30TUm}wB)gekc```5AJ@0h3l7-X?DAxM{RH{7EfVoRzCmKyV~3aHZmwK8 zG;opZ<}M(7K=W5bIpPTx;Y;;9zy;Mmgf$#m_j+kt&SP^ckyhHVx1^%R z-C~z3krt#e^K&7|`pBDQEtkfYxsY)E5BJKFTe3?oq@BL+jk4rhtZ`-1s!|Pb%W638 zV{h<;yPQaBb@}@Syrqg8TzeaS;-c*(3LcF z*!V=CGw!>anhY&1uL>GSzLOGL(t!pdzv3Cy&gvrz(342Ah;`HxPqKx5r6*hT5!bjH zCLU|bTyv2@AlE zNIPLXjyQLV)ro@BXva=@klJnxO<%e&{Xpj8Nqn__m!xw1FXcvgl5K*v*Lmr^_j&f* zizHR+S&R3(#GuGTo5$K+@Ew-?g!E$Jn@)+A#~__JDX`dif+zdlo45_X2&0UEraO zK>9I%AM)dXz{0W;di5e#xhi zSg9{_^Chh2_iuR>TJ0~9lgLMrY1*~2MZ?y<yAceo!3BKkI0%fhMb7k{!?>vBdi zapf~CrYhO$kaJn;vqGhw>{ox{lN%O5))8%v6ajf`cFw(FB)^k#VHeSH=HR= z*7>r6C$Ux4N$W4{Dso_#(w3NoeO0)rV;FqfD$DcGwJTDmOh7*I-!OTQ#P&do<*)`p zx5}!03J?YAZ;Wsxq$Q z{bgJX(Pj3Kw#iM04oUStj09&(dwzpjR#T2d{DQBmHy&cYgpg{&{da6n2PZ zA;a0@T4bxs&-*0}mm(3rVq0pHgi7lSpOom#DuxlC;8$%+7kCFN1#xANVncrG8C}iw zN^aXQ;!DWM+@axQ2rP)MrdAvltV6m83tq732vUcvV}m2elgbgt1-_9z&Z~HwtGJB~ zfNFxLF3aKnl`Y#} z^4P{kq*}m@1Em}_iZ2r+h+(-;8j%Xb?+<)tgih2lS1KzGiP+o)N@Abn9y2r{BR#&{ z|9`9Z9Xo-jRDW<^S(Q3SNE8X7Z`5DCLfTX%gMp4t!%oq94`^@}O#k`XZ zXiB_%oFoG);G30Vom5mM>Ypal#Ee$af>SyNjc@f7~cXp#x zn`tgG@f&pf9L}1In}bfZ|6)F|=-e$>gIH3XoMF9VNuYiPTz=_!W&!)2GaYAZfRaJ% z2$JRrDyG2b($?xP$5WS&!cm>UbyCcp*QANW6pKXsmxZ<@!Q>a#p(UA0-sB!@Nq!_k z^TWA=<4HYI*W)8{Sf@qugYw~XVfRlnV!h3%33nc?%EZ21+2K}*ERJlTW8Zs|yR1QL zazh*Tr)0|TKUrWK@<_iquWYT}vp_SsOI|Z=0twajE|i%26tboXq=5XyT-uW0(6%^A zmv-}Ti~Jzpxf@;{=YqQ2^66sv^w-UFv#<>XhwRat^=V6{3U2#yFSI39h02RC8#Q=;?4)E`M9yWB{Aqom_ISo{hWKX_DK=M%h7b`4~332WeFKF8)T} zRxi24n+3T!J%|g@9y=vTIev;A?n&xZNq+SagX0@?t5oAQ4b-#uXS!abk&t)4 z8hp}0bHHf;el_BD&J2g%m3`X_Q-n(%Th@#C3H7$Ie|nK%^Zg?Znoswz?N{B3i$Co# zFF=0O`v)XEf@}EzX22o*65Qh5Rt(YTfIe8W+(Gyc~YO3VW04afc7XBkg?H579jy3DvhXj=SiVOOZ zP3c4Y8ng=FE$L9AeFH$;bMV!^XhB&e?%JR8*-V~1tNsN$-iP>x{CoFvwM9PlLgyHs zCw+>uW`aN1PlGBRXRduoXvlB;`IqM(i(~Ubp$$51fdx1E<1O({h^!KWjONCjaGQEM z8`zilVSPHiFUI-~mW909Gsn1E9{(O=r~8r`)o)cqr$+-Wt%Sjl=L%^`|1iyw7^AJn zm~TIf??e{ck5q{Wna7pG_=ykdDSpwEkC^zNNjx~~$!RfWTSibC*9k9Xu{TTaM?$nu zj`A|2pB`nK`;o}TYj9_puP4o0d2oVxVzrE~K_crQW=bq^&fEAP!3_#Zy%GwMdoyc>xcmQcb-m~ii$QOd<4Xcxc33)#= zCz0Bf7UQ0ze8v*+n58BWuZk(3DDT*cB+?l!<3$pQAbBi!APKCv1!ryB_^1&RS*L*{ z+3SmP+*pX&WK*2A6Sxl1;}N?skc>%fw-K=^Od1B$^5d@V@*1?OOy(bnIOF8|sz0|~ zbQhTl!f~0<;}c=KO!)E>;V+r6^b=u;Ovw2}uz-*NsYgChCdn*~KM}s-1gmKy7M!tp z{0;wHQqL2Q6IBD_Owr z2tN{6_;Q(iCd8K=*f~mB$f@_)?!m;<`R{c+oDW~et_>#5ogMIo$~I!bLr5)ci2PQr zD(g9f)JZ)n>6U_{ikB1G>2lk-Tf6Z)@hjI#dGe&Hm<~v9xP=}m{x0#yx$+|U7cc!r zNR0D9w)>z-N}nQ`#>-O10W8V`b5r^KOG(B^9HNNKX(;jVsVUQ&ayo7wel9JP)gMag zdcE}Hm6eoCSq6^6zobI1vFSre;J|RHMkODg*w=Gro9V91lZ7{XCq$-L0f}+wG;$|O zz|NrMti9X^XgpuUEw{4t?+~rvx`|!dTzv53S0s)ku=uYq624*!z9O+-WBWd>T_utp zpWX=jI*u5F@p~fE<7pB}cT6W-7aXx^tQ{QVZ3ExOroSf>=V9K9an|K_a4uSa&S2Rs zjn6qqq&@(L9GjQM`@nzzURmr2@{arf9#TA>8#9bhQtz-7)_NR4vQ-0K`|FP%QLhZ- zLZ8AUFRm`;bHiD9i*4MEB62S`g3Q#rtH}Sd#Un_cRBLOvSZ8Y|$9SvOS~-0b<8^WG zoE|?*t`sgy6-1(DyCYkskD7<7#q*yqhC0q7xK^8BiL?j7g3^6GYn#XfE8kGCI)9R6 z<^trb$b}qfNtHe(@K2U3rxL8J^+-~={3V!r=+HW>=Sb3kv}f~167P_;X*dk?bPUpk z;+9@6F20to)5LclaaRqIxYK{^)JT#8_u0-gsX&=Zd!45<93e>g0@-l#E_V#y+EoTiv_(!^z?Z>6G7e zi9bJtex>zY|3)e`Ov$`!wOs1<(WF|-Z;(Omxb|moi0Cr>Bevb>zI}mws>oL=ku@Q* z#018#iC2hUY3`aT?z{LtM&>rLB+h+#S}ECgQMc0SuKvW`k7aT0rKP!7tGK`V#BF1R z;I7kG;&z7}-GjuhRNOVejRtU6Owsdq*%WbONYl8h2Hx%YXC^k&k*OFQ=q9$d#A1G( zXbC!nLoUbR9R{wi)@SA%$Q87g}X`Ie$dx1 zNc2~6UqJ|i0{oN$erIEnNw4^Yo}V>MoAN(3oq>v$)-+ZY)JzfNwvtsEOZ-B@ko%LW z4OMwwAr>iVAH)U1FkZPo{^{jpVf39zWbi3rhY^#i(@1z8~+Un?0bF_pNL~H_u9fM;TbXhah_OA z&86g#_!8Va)L$=|2tlbvx}=Nwf2qVDy-Z^CD9009H*-I1*F4R}Cyt}p<8R2{uH_wh zPc=n?gn%(BoBchJL{vH?HPL>wM!9VEcp|CiQGk7mc%xNvd@9>!Bik^EwASV>6|m)gM2uh`Cy}uB3-F2n@|~6o z9`B6c)n;0{i0_2&2l*Dr@#F#2>~NOu}hb7={)U(95az9rRk zU!H>kxpD6NVu{VPmHqK83DORbN^ml6U}wK2AvO2?jJ=Lf(25QzeJ$#N-9>IsCFrqw z6s%{#lSwt#Szv}XSDm?%PQR{aJtmV{t*o86N{*+L+hQ@gohPB8{{~JqRYoG+8*72Q z_EQeXIjD`J*`bXyzTDSsacRHaK{MOKyq+DHOx6=;mNJFZ!ZBag6!Hx@kZYJq!U*wZ z@zcmzGMxEN$9{Jk7Q>UqYzPv;r!TWkC)EYVzHB2>mot3?O%r!7U8bui&NG)UB2i4A ziu1}ItVSvsDHPqwrKzMmDc1qE6|r_q!y51nJCFv6f3c!8;!jpH?F_S=Vg{P1DY*jM`z${G>Sc&K_UeGLKZZW)DhelvaT~pD0$4L&m>0dkp4Oo66Uh~ zGf4;;%^vc%M$A1O`>t^;E}hgAs!}#89XkqMJ=mOdtYYW0wLE#vPNYLXC-x|v1Ph)& zFwYE>_LMcx0QEc@kO6At?(Dk^)LiJ!)@C42Q+6VQgb6hlu=jWsDlA|DnW)V-EIt!k z&>h*xOyVz;>&E6}V$p18tMN)+vHh7OL)|B(cTH2#5iEbPqN;stcWF4(ajN(Od-fw4jrILN zhAr_s>>xu|T9o^oVGEPAWK$NCC1`5TB_xaNWVuVoV$zp&`k723>FmhQ#6+T*^HS1> zTwsHj!Wgqz=2FtYtDp_aws}-ABhj_q!!I{^6>S&qu`^4_FXSj2w~X{fyPsT!ruEKb z50+u~e>e;K1tuHM+WrD_9%sqFkXwRykaho+)UVQUCf{t0j^jfJ-?`$nbv|46E16@w zy;1gR(=PI{h8u)mz=p5Dy09ah^W6g0CJU=pFSaO))NRsAVZL%f#r(VjnA;R^$AD#Q zyUgMVy``Ig)~52>r5Pj3Nh9O4vz+6RI1>5!c2e~-{38eaMG-ru&|+~g>$M!F*v|f5 zjuXo`c4s;IdN^}kL2`wZee9P%Nf3Lmg6K(eR=k4r!$9iy8<~wEcjq^<2q)ZAS7Pts zYj$!aT0D^Xts=4H8tcCb3%;M(id7^-@Z8Nhz9R0d+3%zoj{3j-owV?)-<+Ey&ddG- z7M56;!go&7Y-U%=$Se-SFw{D$G~tdV@lF8zfqnR~4IT6m$C+n9MR z+NB%&aV_>{XP^_KhvuW%*7I;1_Zg5Nln~EBTU_nS=RL?-Jj`ybg{r8~I?~da{wAqf zi49ywj*vYpY&{8ZyUy3`V0N`T@LPel=pR|X^~C75;S;@p--)(Gk7V=KWB6Ox=Jh1F zV!a7`Gui<)4`sJFeKXT;fFEG2#s(aw^k%I$pb}@=pAdOwgh8wFjnmKO5fH=cyZ6fJp9$UW&!BS%ultY@3t873HSxp+S z@|#H=ztuT>hC_EO6IdMOU2_!cw3+lGKd`?x<4~v%6aFSva+1ycn~V>Ac*l|Vtfh?togP)j+;2KM4q>4_2A}>%9~#HjZ-G1ij-A^=5=b)^ zm`hrd6gDiEtk(7$D^;=oSmu?7DjFF+E3Ji%xnX%^I_b{t=AmjD)^95rNT#!0Tgk7y zhTAY5bYOG05&w#v{{2{NKg%mro^9Di;^Cm)Z6o8!iQF;&VBgPo?WmG%ENp4vS=JTX z{^Cq_X*)c5<3HsQhtqjx|^?c7Z}u-#YJIs*4NCInUDdvv@i>3GNX*kDZB z%3ni*8-x4A78&0u#dq1P$}V`z2P|e6v5_(C#4hOK%Ub4>38;T=KAHyl?tE6cWD(OPjAtGXBEeE5yU?uA`yF}jy@_G;Q2oqUkvcV_aqxKP=N zw?)_P&pzxW!{E<{?jxzBNA8_{nD}Awhx4I2AgC9oU&kZ0RBRjp4cf9>N_6H1UJO7&&#A?g$w` zPOvdYNLc8FUc7JM%S!x>74F5%USe||27$y0+hSl4?h?Lb`;L$Xy2+d!SKSgU_#+=; zeWpE%=8fyc>K(nIsZ#<8PE$#(7SzFc(loxW`TG2-LAiMtzH^k}x}7+QZQ zdv%PA7G7^R?A=OA-)BA;BV7zQsHq66Dq0i(=URvx*}5~NiSQze+0XEaEZ65> z9B`q7^!|_Z#uWeef22pJq%M+82O<&U;Xx8`5D-~%cn~Lp@ko>-E?m$+5B3th!HS3^ zs8Pw{!%JrM?!x+=#dLIIBb$1bOc$QMWbe|XV}D*Er_d9oT!yI%*viY~ z3LGFliL4Iq{`(b7O6clW;C~*m(N{@p_oH!qD!3+g+Ae+BRS!KSpB=o403eaP~vA8H++7)G2-w}fo1~d*#Erpoi%d@kEWILicdL6U= zI(FweiSTY?!Xc|;d5nBpbd?zBVKdcljsScEt8)W+P>CBP);$upK@V#9(GNP3y)ouF z9BiH94C&1OCW#Urrn8PWF~4kJb8nLRb^mO|580$`emqHox0DkXr|@~y+A7lOn*O$W zN<&-?%wx}Q!mN}vxkZ`_w^p#px6mJE&y;=Vkz1rKEwgE1@Mm`a4jf8z*6l8AT_LxgNSp|9WR2})g1hDsE&|}Ym=;p^*@{Hm&UV|$UziO? z-ymmhgzQC#~2|kH|4BafUp`go{~>C-Kbt z3E4=hup>`Mw;-otw5&C{98dTLw6*K0*JZyW5SOsHrzEPpxDW%&+JhPYh4^_-v1sVe zu06#nMjOdoo{`!JC>uW`jmStg?im83NVe)3rd1U43>EQV)t{680e!}oogVD}VW+`t zIb?Uk)`;lOvYx}E^=5mYlSRU2yIWNi2!oxAV$w$=O6vYjI`$FhPH=z2T zc$bZgOSzw>!>R20D+G0QSj1~Mdjw0bNjITy)Kd_$~4 zh0&h^+A6HiTLh7qHs9i=B&LRU#J5IEd~v|NQ=)C87m96)*MpksP=ohZ-lh3pJ9J?k z-@*6ava-qVFo6wXZ{Hz2F2@?aCnLg}j#SmYiL~XQreX*bi#m4VJ?UR=eisB8o~-T% zQb(H@CUw(xVQlyZ%vh(H^#g*i_DuJY>>=1<`-mCfJ65xpG_HL4D;|B}yH9?OJ&%1| zOjeQ5Mef2B6254@;6b7n{VrS~TUiDXek9eHuOK8N^#5KECix`JcaQj7y@0omT zh)XHFQ=Vc*2f>rWNVzE^#&t5 z=q%I^8aSQ%{;okCmEmnl!Z#pLbs!RXl#9(-fL0h>rEweXVn3ZG9W>j&Vn1qyZo-oh z?15H@#4VSq6@(hX>%OdY1tA!#rBM}x6yaT8cC&)8fQ-sbsVKB2!gT}NQAscehY*ic z5~AE&`Jp_^Rq?|}*cMCfD^`z9%-03i>29)?EQoHzH9+Z=| z?o3PY4UzPbR@pBP#1&sc5!~tKAEBRR=iG(F%AuTp}*d7_g{ zV7)vAUx&vo{DNl{hR^cbVF_&?C08GSMqLe^lG$%eF67* zi&>DLP+z!QiS_mq8fcG=kh<8iN^G&8P+dr?#CG}#wX_pta=S|G3CIl^RpJ4~9x=HW z{stZXo`-zIEN_E~f3+>!t%?@QJKmJF^%t6Bch2H3tP*NfWRX>c5%uQa$|nqEl@gDY z6-qa7jqXYV<4r|fC!s$*q*0GvU zt@0jxyCB{k%$vevOF5QSO^85*xUrfr-b)WCeHcFAz+WrEqjbZ_;#8#^Yg%21Y zlT4eAON!(m`D~PKofM;3;*9pSQl*s^Yl?f_CE*RO_MEkE<~_rS}aqM zkDVgd8bU3>?E`C8L#QphNMgfl2qzuf1qar&rVv%3knozri5S>7HPQJIl-0x(jm85kj8<{3K2rF(VZOv{pzr5A%bV+9$?{r6%pCI#5v3%R0u=eG(a(=J6F&kmY4IL)I>FK!vqx(XqBS6V zZqOA8l6E)wJypr8J_ReE`Y(WjWk#>sg3+z|93DaP87T&J!nbvGnYFesm@H$DYYPFc z9?~V(Xip^ENmXV6VM35G^aG9*rQ2YT7K9gh!nS#we-Fv;db2@cXoH6%+59lUy-gZI z74XeKl4zaenrL|=?#ExNR4OqCSrRR{bh$@SwA$k?6DiV#NljcmnR4Nlchx_#j?as>p*oVb4) zDKx-xG(Hk@axxnoDHwX?zaXD=gHs;XT5-z%@}bwHp=v;SNFCNR0=Isp4e71Y+Qc}-(qvn!E;7dgjXM#6npe9C;IVAO`JRg@6zeHx#?*=uo8Hjg`5pA@X} zoY5%Eg;Us#D4}kxL(!_jqxk}JlZsljR7_>f>k0|vMegjn!q7%Zi^0hjwPVY6oN$T;PVkN2cr#yR#*UDXdt9w-s;s* z_y%W3ry4@{dbw{K3a*6IWfdC>4Se2(^R+LoA!{tdaA4OHYq?7kaOchCBkR*x_{Ap< zI1W(|erz*?>7WLSX=&T27OT=kXzhD5OohX*N%)a4=H5hT<&&;vKr|>ZjL1FHMDQU9 zJs&m|T04Y%@sWM#LCd-9z?Ub76%?P5%8ALTw}%gYtfw1MA&F*vKm#Bh>Q#>LH9*U0x6j zxF;EJEl5~pw2u+uL)+d5spRkN&c_~hAm_oKigZR6{CVX1%AZF*%KnKFs>a&5AZtbm zD(`LTGI7ucvgvP8(q;=!X6*9YqK}WW}a<+a* zutO?mRBjXL*{E2-`-_^okHyw0UOV}kdT6X=f|CZvEciRoQ;Uq^Kj@U(iqWa1raK_^ z0dKr@kXI~rii-JPm(5t9fc)>&USXGF1>e-&l|L3MyGT=96Nxy~Vs^x~h%vnR|3}=H zz(rNH|KGWDM?nP#MFBw_6?fF3TyP;rMa9I#-1kw@+{N6`w86v$#l+N(Yho_BpkY~~ zW;T|Ul_i!Xl@%5irf;EXnE~_vKKDFVak6*m{r&#G`}v&tp6B~KXJ78Q=Ppw?0P!Iz zJxY3(_E(r9ldJGfQ9}AukF`08O{_YSz?o1l-e-k}LAy5lVOUggD4>%^bx zsUEG;RtC&+A>`$!bQ@P_;U%n+^_TtrWPbzYUC|RCO^ywcNj677Jq!LM-&0j@w5NO` zefng|Gj#cZX9NG-RND|`ylZ8(5X!<}JqsLW z<)uyGUr`?MJ#<-I=%R+J6@C!EcTwwNqdX!`?b77D>_@Y|*ZWcLOM3T91o-wNO{B-E z_2cyZ(=|O<>xz-z8|x3f2jLk4qX+#!EgoNqde9{Fpsun5bwo1sBr$cM4}>>Pt%(zK z&8})hzhs}F`4#ofGPgj_$vgmF$wX#WRx7xK&Jx`godsL&STs7&^Sk4NtJPdkU}c2& zXy4So$DJuMgcj_cC&P1(n8qUeEDR7$e8lJ2`HrcX^rPuf@+@ z)$oWnE8v-R+W5l&3f3+^h`kIv>w`!2LkpLR2Hn(pRTh1xck8SI?qg4UCx&)YYhfF7 zUN_a2xD5Q|^GI1=li%rTf8cSF`*pQhE);Ggh1o9qfm|`(3HO%xv6~uEwJupuC!opa z>~|1~MOb&WQN?s{m(Sv-aJ5M2j_dY3_k!-~8~7ffi0z@C#g0Seht;&Irf*QkxclKS zHiZkncJF#vt)W)2Z&2yWYCY1ae|NE_SF0^PPEcF;uh6eNTV-4j6?&=l{fA3%4 zOHEVb^2PC9YRzE(Z|O7t-aCr`oM^GF-b?L-_phTL!FAdm5&wufuhlvx9sGB>xzQH_vTOa?e27ZYqUm3ghBD%y<)14=fkW1sG)@Z1F zQh!ox?X5nBVwX?E#iCtoNyHK&NxYY+E(&yBrzL>CxcK^WlV}l*$J+Oa$NQ+~8;qf+ zmZYlif*z^2j5 zrkj6^lbn2fRX4vNmJh*2_jz$(h&l%M&8iGlhnVukl%Z;0Q-=G*P<57Bo&AA`8Hr0_ z&--HPNVT?Y>orsnZuYkU9>x1(ivFGm+P6@DTI=qYY{R^jm840$0&7l)r;@asF{iPC~R~-z-I*C6~{-Z1$bIy`)Ji+ zS||!eV>9f$m_0`Q4G)`4O;RJQooT_3v-U@*rWLI^ye&2+spnr2J33F^zZXs}LHf5aO0kBMreYI#@GnWWb9SC;5TrX}uPlhlg% zw4N9|S&hW=2~SQ|o4Gz*hm`JocK|Q;CelYbR$3n4gDR>Vmyi27!A!6`YhaLxk(v-%%1_*sb67c5ZNYR(=#2O4K z?vl5krp}8!bAskj zMXj^4Rb@nnL<8PJq8<^OtR_@_D;4W`x)GOS&W{FeDYP-tIvE`0} zt{_OS7A1nFtC9Yd5eTF;RXj8u8_In|#N$|&wiaz3$5n<`OnqDpGhGtP9#=ayv3yNk zm}W5Cbu<+&xk3Hv2l|%Lm9NPAJv}NznhbFbk%TP7wayU-Wfym$;g_FT3Kw-}AnF1! zc!pXp#9GFt68!o-Y|CD;W(Ec}?zhfB(=QN3Gt@EuZC}xI+U^xGY$mD|k9*Bj>jh4{ zN$rKboW=ND);5tlQ+>4RM7#?qBeKrX!;Cs4TFt^`{I_E0EcEzW?v=B!Pf~fM!u4;X zUHp#Xx!Jf5HEZI7*|>Z-CW7XukA~DaYBU=@O=q-T;dU`^j+$P5A+DTIZqPA?E3|k; zSc5Tx$JC(r?ofUNgVYPr8^C=1RF4&FP)Ivux3x zuK3uf7oW<*mq*b@;l(X&dX^cNlvn1-^_Tt?^c9xab;6X23#*}`MylGNQl%etD?H^D z+gK!!qEL)YRY&`OxSJ|6_V{j*o2u3h@1IP|nCocRzVPAQaKFNhc5m4&B-@d5Vi2Wth$eJ@Ha@}EhZ;c5zXc8jh`Sf&6 zq%BnI2J9-lldHETie9N|NXS#5IxQTBhe*ApD3<-Qex-|7v=*ud{4Fo&nf-N_SpO8x zD|qGiDYa&;#s{e-sb2I7se40K$mOBb_~(TGB3#F#T^Fg%P3Od(MOe`d5brKhJB4(Z zf__YYTyc~;^MfD?M~K>K>QMhGJM|t`b*Fn#nmWbgzj?bZZ`m$>U##xNP0#0-sLlN< zZP6QWtjJrU*00?07o!1@p~7fUX{q{{e;8fkA5le)n@` zD_YftmHr;3{)yrhvE`o^?=Dr_g*SyAhCw6wuQ|8_7~l4jnc;K+eNaR!QwKL2i1_09 zeL`Be8t)QrJw*ZKtKSd8hJrK|&o5K!hmX}&*iF{|i6?>L{9xu|WN<}%yG(7|a05PL zSavmJ`bkzPI?66=2*{gzJF>(B>FDWe#DsM9LI2EmX{z|Gu#woAj_dl{;*)f>y9xJA zmaFw!A3J~^g3qu~5BX)6-a~rhlw7#u9jXNf>IbKww?={ zgcVa_F5A(bl!6}!eRYfM9D9zka}D)-6h2z+meVKy(cFuk3UaCnJ0?12;hNHnnBA zaI8{8#efVoC@g3;Y|4Bu!?KnFt+c!(2Lb?qjEM}SLwo;Au8~d!@r;ZEPN=$9*#m<%L119vamB?p1 zVSZX|+1YYc?`WT8qMQAGh5VHlub>O06|vVx>q-0qpvRf79H!G{Y~&_%b(>zdboaaF zCNcMEHLc6fJJHbh=CqO=leQ~MK;ab8UF*He;1qBkTYY#R*d;d$+1E@ZLZr`@fF0 zJaT+sgUDZ{M%2k)gKLA^xHh0G7_5PENq)nSzri`OW~LgY_S`9YX5yT(UnJu$YMq8J z({=VqY>1*}=QpwyRtG_o5B1%Zv9_IJSEg#~FyMQhD?UVo(H~#N)u6G04%c&eH+w$S z6!E=KS7Q(KRb&NI;EU+ZM<0|Oyc}-OAdMsd`f#_^>O+2mp3$51pvYK_1^qrz_Zc;+ z?oW8G00o^R^ae`-pf%fGEx|6`0^E2o7Y-N6&)_O(i?FXz+gI7v6)kY*3n+Mg|822g z4XzTFiA!tLj$!L}AP1!~2bJ{?P{y`;9y!1oVy!yZ{_PZMAbjPeGJerOmZuluvyk{U z3UW{bdphV8;Q)*!ef)UEJ8RVy{=W>>H8+NeA?wt~dVGQ+U0y~Pf%r}%B0u`FOmEyK zy~JMv3PWDQLh1TZy;fF`&8O0)v$S!O%`ff>&tm_J-klTbV``JF?ps3r&1@X}5KL zqz#`CND}@#)#t(jDE7%R_OP{j?2l9IvBI-comjPQXRK4@$KmlEO6ux4?$}*wh-Mlj z`tMb12j9x%6-zwUB)ThHCzkD1&zKgALHn@SXtP#q+Nbtb-+an_b)S00q~fIg`F?Dx z;&G@0>er^5qVNFBw!1{r7ja5U5*uDrW7I#M6ra4PwyE*vlk^6KEq-MRo(p3)2MpN4{;+kmbz4S%;$xK}*rR>y_DY)22oVxLY$ zbGFiK|3fF72s(&^Zmgv6(77AcaC{M0!`-D>J@;+5dR)U}E=P{3qfKYs5wELHs0}RX zNVm6qOserbJ>Bkr!d|OOyel8^Ue3UvFSLo*-@vNyTesPRXB$lW-HsFLmsp^=BTlNL z{rm%m(+H?mdANJ&X*I?Iz2~fozccvKUFDp5xm=atk@ub|gEqSZzN7_ToY?b~I=aeP zbd!5dr5i-euhsDQncWaC9&$)VSG!UVdBgJ<@r6_8Qf0;t)Rk)^vt(yE1ASp%sp`P0 zT&X(ZPW@WVFNdqsQJ2&_)wJE+u29`>GI`x!Uq%z)p~=cuv1dQVJ>n|%;2RynsS1zjXXQe^`^*ig3k zK@HsjiRN%~VAPMK;D1fS=R5kEYnhh0`}Z~PH+Ap07CBl}s*kg36ZY!@pII=#s-2+x z23%SMsND5zr#`ggDU$}Wa|GW>C_Lxx(cio{AZ+R-Eb!*ZUT~eB%wHMX<#Xt(iyuat zZ`Is@@gD!%Z^jw@N17YMW|5ht{Y#>FjQJ7MZ|_otB;^x=AJdh+|-QStZm8Wq_Fb%H=m=cPzb`cVS!`dvS4Eap$u3?SQ)$McLjgo+#~(7PWbfs%})I~r5Dr3%w~e_o6xv~*1m-;++Tlau8WU- zex_A%tGQ;YDR_qM+h>>A>d#QZhqkp(q2D%Bg!QaBSPLI&pCam=HLrDnjMh~T>c1`Z z-&Xo>YyJ0uDafsH?0%uxn+*5Cj$*I2v)DU+mqhZHb@4v@?lO7@{FTy+y;rcfK_m1ywf}*acVw_uAXV-hPnBz;6ZSL;e8%NVsgc z&5)mfv$N|1Tn4^hfplXThcX)cTpt;{>rNmtn)YXdd-O&`e}#(>Ub!S)5My~pgRg&& z-1lw(!yx<~gFovHyT8H~?rZtx7wfq4@`}BQ_i>*4aQCzOFFDtp#Iycpg3Ayt2aa$o z#}WE@vDXi7GP{}h+*?^kJjwGexb7MqyC6v;&@#vgaHHX>a)7dt{5O6|V*oxiGT8-B z8a&6~B9V}hvzy3WMR4x{$$bMy34RQlLby`6;IE{86QBd`Uu9?jY=)tR$R#0NaxTMT zkQ0%pVU!I&=}GR71XCb)fO{0qTqY7Dj=zDfJ2|05x}k)GRFZ7CU?fB`MSKbF54a=j z&H#yj6E=BpKf!6pB-z&h+Ts3HhPqMvYqd+fYis@4rTqneKij{}xymHG<8LN76LB1Z zBkWg47UUfK1#qE=a}dzi-D1w=tN7oN3-6N&q~-ck&U`bl9s$>*6ok_`lEaX9!zI8? z2IuRd{(|?ln_SEF=fHn9`qwrQ|8|1+#+6O&UkQP;fs45$#lWj@*1Bjnw5P8tx)0}T z^Y6;8f5$NAZzh<9aQSeA(>ab@pa*V8y%KL^J+wc5?r|ADvakMsR;KpxcP8| zZ8?q`zyi2Xe1~cf(APPAdDnf6d;|SAa-wg7KIyssD)KxS7Qzuu;Xr=yhtfb;L; zF5HK^pIsTwb>E1}82nTH>Hj=IJ-%ZIH>`e%_gEy_f1MEth{#O+Rly~1v&-EWAJRSkp z!x8r2NT>!<;7+54;?OLHy8!t#ctak>Is-ExZ*F5P@wS9vKe!!m$70+Y1GE|@S8=-% z?>RWavVLE#tX$U42=_P9bx-1DBQX*rT;Cp@11<%Aa;F&c!1=*tb(KhbC}hK)WbzY7 zezGN(2SkY{6F8i8NQpNSE*DOh zhk_f1lEFFf!dNPtVN0ltyjL!(`&a%(gOS!CJ-o}CI^vFSPXc!$@k#g&&l&$$vV!>k z%EmDw{Oc0WVVec8vB19*_$b>qzfZW73Ft#*jz>~U zyv>l_z3xwhufhMW?7BBM|GSCZCoPvxb^QO%!2faeH*@_TWFQ_Lu`^r;I7>hL3=yru zwT3PQ-rLB}4Y;4+3gNzmy8!nYT)})SG2r@?ai`%w$?_q_9cA=oZU347#(Yc#YY{N* zZv_5l5&!!-l#q;P!r7Oi)JsqkxG76m)_t*}#QSUdycrzMi#aN*4TxbiM%fxi>WF2nHO#Y(I0M)dE7`6qU`vM!U` z|HS_sN>H#HdrG^o53y6ah`o3H2DcVmr9I%`HotIJe+>Q+yU_k*SP2nnWde^V6R8o= z|0HH0{>|jtvgaH!5lIIrvYD=}ok6T-Wi+R8IL) zuL8{SEA=}3OTBrJ=Qj zxl4fS2R95Z32r7_BwVoWT+-7L!Yym5HyJNW5^ysd5GyezNkMKt zi-Vs~V~%)o{U8sDLSf;?!^OZQN1&}7`p@0mKZkSut%&|k;`a}O5psWp@X+LU38||2J+t;>d$bKs?1| zko*xyms}-wSHZ!#bYm(>6daL>W2E~UXgGtr9~w59Nq55qa~$`xzn4R^+)JP)5Ru`G z$jjPL z{(}}_I!(u9v|5(NF9UN1T*NDwPqHyhGm?Kk`?Fsz^`3M~{bq0xuR?c7%4GNNJGB2_ z8Ec3z;{ayC{fPWUoIl`B!#@m;!gK%z!?ipNE(bju&WI}lw%Plni$q3GBd%evn}~1o zcl{WJ!pFF`y-w(LTjz8so^`;q{02Tcfj0_Pp26_>0@Fa*Gs*VE@5WA3fqrx;!61$WBzjxml64iQg5Gca4tAi>izi>B!UknEQV_i zmxRnfi_HU0;e5ZQ7d%r|ND3y4t)H@O{Kn}fF>iq_# z2|+2o^p<*mM-5E<2NFRo+(radkl{5Yus>VsU5ziemP3^;zkv*)76Om~H)^3hGBD$V zQg1q5=<9#J)cZbasWWQ182T{O^bdcykO-=w6*BM$s{CVATYFUdLHzfY_nT7hqTfor zuc0=Yc}u-p&XszrpxTxn!-@)W2x{P=Vw{3e1FKN-il~86D18OE`Y8QJXxb}i+O=@4 z(QHFd17}d%-BAOD$Z##xz%wr7umJ6yj~w4ZVhbkogDfQ3GG2ieE%Ocn~$P88t8j1#qGUmZ1hCPy?TpVjY5hFatGk z&MffvW&HTZS5V02%lV{oo1IKmqzeJLGUTY9I<3NJ0&CKnA*@23|u)dJr}6 zBs$)0lsEwLPsqTBXxknLAB;#JM$cZ1rZgc#0m$V0$iUmkcp@_J5(>594J_G^(cxdA z{U@LuTcZZ*plY(wMuDidXV3(VQ4>4SB*|!}DyV@8sQMeozyOShi^#xwbkM2j8_%Hs z{Dc~N^(qPL_D;G56^1+Q*tJ4WCWMgU3paxfmCLijrw5_GX4C$`)X54Mo`s zj1O0oZNOyUcHny8PM`<)0_i&|$`#-+d^+j|Fb`jdvzEj2Z}o8VLcB^S9&H7B zfRU9HB{{6v8&^qjDMj!M0-@BvV}L*#FcoMAt_3=QyMdX&W566>E-)Wh093+@y|;i? zV5I17WRM>@5b`fYw0d5Eu{40VV-G zz!adhRom+8Q9E zz(n9N;(>Xj3A4C%YlYv)(9-v<^(rJkYF9}-}d!4}C)_5d&GkMye3W3&`V($f@19%JQ z0XC|JnrMrv2Rhp!LqMfH^n@Ld;p)&k(566ZXXt@8;00h7Fc_UVA7}?UyA*qO0CRw+ ziI2mBlkuS_Syyy6praeAkmPu@T^IuNKurJ>A4ULRZckJ#MujZ_dSD{Z0n7*X1ExNL zswNqD44By)os=*Uoe!g>2$%*;?1Lvmfyu5%(P`ju_C>@PE?K~qKwCdN&rC8frX~^w zCIIt+PM~!lIw8rUkuhNASTtcR@Z%63=$L?v0E-?+)z?PGW+FT=e?A^F20Bsjt3X#S zJc{?h@GHBNLfRQFC=M{`27(1R{4ia#{}oSD?heTwoI6N_4(RMEo?W7?`sP zZ3xU=hl!{GwZ6E~wtfyx&2l}0WowxV-1 zMg-5J_X3N6`M|6l$YB!%*oCSD79Btao5JoOG6u{#ii}4gBfu1(=e1(*A)w<;jPGV> z+jlS_HAjZtM|?mf7a4AW8uLO#K!m zdk`hT1NSq5`M|@#?Xd+-v5jt@z;B~|Y%=!fdXpN@30X;D1CYk`~`3+Nf z8)UQ?()`A3T;`vsf6L<`m13X81U?DJ(9-Q@S4})6R5C!G{?LehAcG-dUCP)C7 z1v~_FL}7oq14_^g4`%@Lf&GBi<|W=_U?MOLm<(JGOznZ4SfJx!JkS#hJum{81&jd} zJ?z2_5K{ESBLKjh1l%zL+Irz(9H0kyn)pW$@F7Il8}@{WC?T+@4@w5~Jc>sOfl7a5 zydyF`7CcZHkAxk_=mgXZFcVJ*tOq)$B4dQE$D!zi9L_<)z@jC%34+t9H5~~9Q=f(0 z1sU3mh~iLnTaW-S5%;6=f%!QoIZnHdL#QEO?rX?kH$_p7m3W;%J8&7{>)2ujI)ENv z{&6%h(3Sdbi8rY`s^mR9;{bHLkCFg$&mcqbi0CZt+5kPD;#NTqyG zz}-L(?!w#vD%eqv>xB|vxBVC}7n|j_M^KgixS9oKRlpT!Z-lRiO(CEy09Pl3f!LS? zrUFj_ot3e11oQx}0&{^%BF29aJi&=b$coJYpaa+e=maJLQ-MjqEMN*S7nlJo0%ie~ zAY5w$6M?6Iv@v}F=m8c1^MP6)WT;B1Hx!r!v;*zIxaN1klMhcG&`}p9c@zQbVW$F^ zSszy;z+9lUFEY{)7x+MHBV10A47>_d8lwRH5Mh&2?_{90DX!;$Ily9IE-z2)sf15!k61j)X>`YJth4kuhLV z60Sx^AcJGEvjy}_#3eJ(k?g{iD0ya}O-7&*rx4)uC(0Ug7=-j-t!&gu2e1SU_% z8XcG$49^XC>Cg zX>dVhIJ|_dOrje}ud zr%W6tp|XRkz#N^o^T0)kErYeD)pDS!$f}k=`o?Fr_-e4$MlA>w)rV*es#U6duSo_> z{6wE2S{wZLQ2G!pe0W?L3(C$7SUA9S=7@>I2e6g-;L!Q?BLctp0>5$!+%#f31zH!W z(<%h|4XQXI&`+=G4$y}R(@?FdMGL|iSZqtxf<-gPrg+h5D6&5pG-fdUpq4m>5WB^~ zp;|-L6D0Ny)f%XILE>XzHEWe(uRoiH0^>DBsU!l1Y2ohcRXKD|sHviFL4B->I6h2kV#$R*Nt_s_ zReg52X2ZWW))|f(bcn&jwVtMyV&`zJJ-#1xaX9jmAxZ$%J;BA^1{5O>8{GJEigF=X zG#{bWRZmqDj}o4&E@qF=y5X<2ULT?LRExqzg^^mju($}U$S550ItiJf0jBiX=Z_8U^zxQIo(S+K$p%;6EHEjM94J zUyF_qWD5V$S__MU%PvJMT!vT^M{AMgPC{O;iRP2F5V3kRYE2REjn+C=b2KgX%0Zwg z)OiP?CwCAv$7pS8ra{%7vfqQc)nkEv@oyMD`~<#$Rn?Rx)*)1M-h+4%kSz3Zp!P$f z>0=NXxfga5~O`U4`}dpVY6;*h6L%Lgb!i1b|R$)@q7|6SXi)JjhC->qM=iB?I0Rkv>tYZOMW6oY+56 zd(1++0_#QCByEf(4c>gQa1v}!!5byso}`VmL}5B=BpOfF+PKEUJ9#7~M5IawjoJC& zPJ!!5gzQ5-s1Jcw*5jubIvM~dj%@}M#OL5A(pl_%i1v4?; zv<(iVW}>v};sf}|01RU97(78~>BC6F87xznrfBu*M8UfoX8I(i$CGr&EFQXJqAScS z$?%>OQ>JJkbu!>Rg%F$WL_8Dyr)NdV`EKYE#Lg*N8%qJa9&vGs*4`3X9p^VuXQ~!r zaljiVVy9}|EgA407U@&9rZtbj8;@)Ic#4t_n)J?rPZejUYWpl{Ar#%hXT;zRP0lGyf(3VhSt<_5?-e`F+&^a-w2g_dU~;UzqmLJ9i-b#?IBABxKNQk6M+uF z>l6oPqWy1?rMNj0MT)CQ33Qr;4w4P;c(G>|x=m;;IssLit#$Mt2Cv`TV(&JJwU&5d zw$|4F7`Q?6?r>j%vqaRUDKKmf^)z_V)8=RcE&1@C6JO2Iezu&m;q)!erfA`o8}KHI zYbmI6JI;NYXf{_nZ>dz5V(_1*&GBCb@38ggTH?eAEfin((<+Jm^RyQ%!!UMEiNR0c z?sYI`SEmS?k9s@=Z>}+2|EuuEdoYzzu_HxLnl{Oj7DWxTFby5!9K1Q=Y#L&sLPjv+PQ4SNqp962KWzjj6ByjoQ9w%EQvjh{i1OEXQJdNB3be8)OPdJyCFpa2{}n#Oq77-j-lHO)EjmFwX7p7Kmoc zP~ud0TZ#qCv^HVK;7z%9cdbqZ$_1AuK185qSK(a`wF5LAR{Dv?s0N3TsUKA1!QgU5 zP&(Sn3GZ4lJYB2ZBMn}AK*>D|$o1f&z;&mv`s}85rRj}gJ_MZ;x`#=J1BolAz-<<9 zr)w?3is3y4wUf`SlvnEmdQV)ASuhIT@s&%w8z^X8pi@o5Bp6>&Z|->Lu8OY9QTX-n zW{7pmF}a+A7w3uPTElWT;8m)K>&r2z#5_oJs}&f&wC&{)(^sHe9(Yl!E3_Gwn3lA> zZIuBw4c;QLFavYyNq95Gi43F>+=|$sl~f(@&J@E};#_nRUaL4kthKeG><|G@YcE$D z_|_lZILb1P$#8j4Wr$Co)+SYmZ-W-^R^lBKAZpFgB1H3XT6r;Ll{ThA9yAesOT4Qs zV#I1_eqE(4v82UN{0lRYZx6g_;`K~TScbKwX>agq?TKnjJ%8M33kQ*$;h-us~y$|-ubidwl58m4&YKm z+cl`($?z7632U@zmV9`F#aC-k3vnH&t8`imgPHI;#Pqeur4=W|mLgysScmS7U5Ckm zw!+fH{&lFaVtDi1zpv9~m}<=Ii0a)~;>CE>k3sld2CmX3u|#MC`WL{T`&`ML%K++I zx4>NmH(v(P`&%Uk=98`X3}zY52JR3zx&ozxI$28xP59C4F^Ur5y&-z7#~e2w-V||g zz4oBx5WJY6$$J&vQ{-*oPXi;e6ZM2T8&HB|cyYqsp!M|kz)O#ZHy0;1X#MdmP?7V3 z798M2fSAtc275~IH?UCE6azNm5*+8yjYxYlRJ+B7joJs6$z7;DCTzm&b_iZ4cHf>w zU^*~8D5t<(6>o3Sdb&cP2uuTT||K!kBztyWRHV52e?DvzR(%T^#hms243|m z!;J@b8k})aNMYxLI|Z&r8M{ny=ib0RYgxk`Aah}e-k={8_%OI)pTMWV`FZeUYZ*J* zbqx05Zh*6aYgES04^v?Wa56J4S&|5l@gM`s7}~+bfkPbnL79mImkO?I!h^tNfHP(# zvYQO@me#vk@JshzoQ;Pn zLyXPBu+4-Wg*01}t*cJ+Fn= zJPfY*%e%ej6yiJ$?iRRUF=`+3kpH}v%g+ zPM$5s?!Zj9gZjJJwgUzQ@H)lC9hiVy_98ZVr}nNzc?8WWN_J`u{iEPrhJE2)a{bX~ zmsZ<91zZLmwtq?lJ%!YhpU^CFp|fe1R;R{EXmg9O1C8kDaKPn(D=reB?b04<7SS8> z^%Ad}lsKqw*uka!f^Bh~!H5RNfx|NN1!OoC-bk_F1>`ap-b47)c+G90jom>aeYe)e zpZ0R;sr)uH1Jn@T?bgD=Xdl=4M~N2!^uvK)+SA1%c8}IEY#6*Tc;FkWN2C>Kbpn#X z^%GO}V9GrQZ>BiA2iH!w;JqMj?my>#Y)7iSJ)Y40~u1nh&? z32#3!d>?vVHoSgf&pw<7Bl}UQ>SSvjD~yMCer%~1U(gycT&pKmW+SmfAh9IR);_Uh z^w-O`AE%mJc>9SD_aj={06IC=JfL+fmjrLoWik2yPQbh2&lWpDTdue4)Ko{QS^Q|H)M)FIT$_3@Sbx| z$-z!Yx$ME{bKzp|L9Mgp2K+YnwS!1)s56Ob5benL@maGj=P}mtk-uiSfYDd}k@=#t zW_*sTnk)S)8Q-lhI9|p}j5iqDUXXg_ONmt(8!(15wqSHHc4K^$aS&rsb&bm5QbsZ{ zmT@xUEXIY5@tlEYSl+_8m+>&;TZ|tue!+O1@q5Nn9Wfh+bHw!-?Tj56dod1UoX9wf zaWUgs#*K{o8MiaO#CU}9Bq7pQa+&yw@jJ#M#+!^LZmRN(l^H`B8!)zFbTM{e?9SMW z@lhZafQmAJiD8Um7^g9&Fh0e&N}N4{jnw?_WLNOe7b?pfDZ+FV>IFYZb*hg#RYa3| z5vv_O>ZM{7sb>|)(29?Gg;-7M_gU>JxHs)p;smMdT;jBS)G6W`)UGu~+CJ)&c`}&e zqKtJT+ihjc|L$IXC-WX3ejoE$KKwz+4^dKm6mAaS^xW)#k`IA>A5oFr^LnA zv=IE~#qY1-h1ETBj48($KV}@qxRCK7##M~n86Rfs!Z?F*B;!=ZF`vuS8?wAcqD$$` zLHpPfO$F&#h<~bx?p0$JgrN@uu)Hb5-8`=m{Pxrz%v~NtV z0`B%#8Lu;%xm^Po>oK-qY|9wWIDl~|<2c4A8J}WY!?;hPOWDN4%Zw)&&olnWc$2Z1 zu{_tNk#Q@_wHWP;tr>eUIvJC748THxiN#;Yv*Ie2pW|j(&GH(?b&S6KD~oyA0TpE< zhc`Or3#{MExP{TDAGs8xBl&i?Y!0xA@xSfRdPhaKxVN8Tv*HLQj7~g`Wup^MXPNu9GLPj79N}D+ zX|Ifqg)CQ+qLR)sT3xQjAx<| z%a60%nC1B_H(_}h%MDmw&2m$gH?SPV@-~*SJF6cDSavmM;s_HhSbm#jJIiNTj%N8Q zmLFjGGRqILe3RvtEStWU<3nGDfvYTKm(rRIBH5q~%WYYvOE@|bSZ*stWfaTpSf0(Y zu?3LMGWNOjV>8Rx%hHb*bs6>l5EE~*K}VK9W!b@UAH3_Gb&&P`hl^_c$YKNIN_QX2xG2_-S6Rk&tbUwe8JDg4ahhdZrRv9dmT7rF z$G0rwB2+)F{9xA8r{|FL<0c#68d4sGvPyCFs2>$s##N(!RA+ez%XL^D%5oIT!&q*^ z@^F?r7rJBu#%^3MHW|}Wq%ad3h&GKxP$FRJRZ79SACyoTkMSk7koWtLxM`4G!*O4+5n!o){x@G8rBEW26$mgU1NUuF3S z%ePoQ%Chzk*=Js3*~;=UmLqf-_5V5(4cOo~%XXIEV7UX!9+u--KEd*%EWgR}FqYq9 zc^u0pSxzRI+W&1P=CQ#$EH7sHU6xm|e2V1_EWgL{c9!2~c|Xe^u;3OT zCO%+;k68Ycv1EA+Ca=c793#(=7<&;0)W z`Zc1@ImDJCrUU928+gvYh;5ZPNY?L*vji)|HG)|p=u^N_5lyg2^dU$U(+L)c)daXb zN{}zkev0Q5^F^J{wC*6UO2t#rxpFb07;_t)*{J~e*Vx_!0!Jns*(Wd4MP<3J z9)mRsWD4Nq0I5>1(CNX1T;y;Gf|-8d4&68La9B`EkeT|K`x{1qP^Q}tg(`IPxg z=8a{>HRkObrTt~LFJ<0_KM|zEm|#OtKU5z@I`2}HUpYWyLqU(hPH;&&gUfY zmZX(_%-g9bI66S4<1yxww@JP+_p6x(e@OE9S8;i&!QV>jIZAw0D)2{$`mv39`ulV` z#&E;G#(eH^$$!Re@G0}28dBrRdLjoG1Sv(MJeF`%3&Gc zJq}O4=K*nWW?kyT0N0vMD28n!R`Rz|RzNB#lk9Y0EbMupxorq@`JSRxgD zA=7b&`JtS!zoeCKn9o6d(6Nk8VmN*m*DhjESx}!;QPz=Cjei%{4;y$Ycvch6kgRuQ zB(%iam`|1FN)wJJ%PHg8&wNkj6GusY2=|Opdi>TQN^)BnGj}~@4hP7YDg&f)hStac zik0mnIDtKEZ^s`y(}BNs*N=C^#cxr*bF5C{YB6S{-#EHdpXdTnT)m?)A1Px~BAG9W zK|mZK%(r7cm-!mZ^UT><$zeqmRwQzOOy;XHf2V^mZL}X%qK_4yynY_P(EYcb6u8sHP4Ag(Tf6PE`qp9zGM5G5=o5Y5r0$i zE+ywDso2E<{4w%r=pLrNjKerj8ckvklnEHMU<`#E=8d*6+Q`bh(X(sm@mm$A&iBOw zD4eh{bTc`C(Rj@{KrZvf*fg3YpG#~^4RK=B4`{qZ9b7{YnnpzaAX$%w)kNltm^ZSQ z!n}2`wC}_9P7@+ki-)TPYXJRtn(dQ^Nqb|U(pyDXCWyy=(1N00V56dO(kM=X@;>v9 z@sb$D{1sV*Te1i$nt)a!w$n1rJhrN;^O$5C%a&qVi2#4U6-s09R27L8~*Dr7amGKD5x%+oG{0uj1)naF$v9Ob)t`Ysfk_GXhB2AF6JE(l4!&Qe3|*=nv#Ewo8lyRWXq)t@=5qC6!)u;uQ;O22V_KibMel4 zwy3#`**FUuJuZiNqpRQ66An`f^k*xu0^kfO#-PmQ0LGZ{#~{34hJwLU3l-sC!0B-7 zzlze7`J9cCKg9e)%qQay&gp1MHAE|rAyCkSmrrl=;jrnyiZYRTj}JeOBg)z=BQma~ zmouNbMe@TXDC;>MYY!Pe*7*AIB6ycR+_p-~_S|M~aYQy+1LA1I!|G0zc9#(u)7EEf z@7y8nd0C@eVLpfXb9!vp-DEy`3m;}p57uY#vOk;ye-RJ9o=SE`AeH>CZ#Ml$6p z%v-NY{(}{gugiS?Wy$m8pfqFN<#|D-c!k@(6)O@8WdQv5x_%@u@7yZwM`9S!F$_Fq z)X5p;{3}V!Co*p|!90$qXtQqVQpU@4lx3{2EtOGB;l_W4`OIe}|2k*L!+ic6$+u+t z55ZH09JEZuVQ2gEY@fJZ+W(=ai}p88S$58;aZ)grhlSkR5nexxQ=h{2#ynAKB+SFi zShpDG;yjKAEvp~;x!8rAhH^xPqCEDfsErdh$(*j|5*X{-WVSc@L<`tci4~vmZA@sV zIANISM>n>w3;X)S$cn-fp{%II5gEK(ubRe+!9U}@j~RMARsXcCOcUF%s_n6o)xL|! zES(Qhk`s(*Wo};96UAaK_g;RpFcsna^d8hzP#O6RWi1$?KVjbbk*p*hP|9}(zeM&c z{IR-zl*3Ad;>k&o`~*oWVaz8dN#Zc`cJM(;m=Hx;P!9(iIVQ^39%rMzx={@!-sc=P z(y-qq4UHLhuDFIWg)L{bGEhcGyBBn1i8|M`kmv)fwsn;JKcrT9jrk&vBu4NMd{2+n z^%bifr=_|l2m6Wn+@Z4MBbnEbE2Dtnk2ZwlvX;gi0;?1 zc~xIz=iTVf`6{pCjWjRz(+?&m1iCg8`%;e=wiClp|o?53>tZmMv5A zjhPRXyh};GEEQ`xzNQ=?ca`M3bA0WYw@;KrXXbk{@AyIzdzc@|yz;n=IF|XT%;zp4 zViKOVV#Oju!QDV^rz^^{%-f@6)@ySKvY9X9yQ6s=j~hG&fa2k2P;Jb=E9%@pC#9FO z^>H~?@^e{T#Jr=s%&!|2N{1$<-$XlA$23L3GI=;CSNrw#mr}B%Q>wx&+vXgirdMX zmBTo?8q9mRa-L?s8S~bwlHi4?;*flGC1;pS*x1?VMG6{zHOIjhgsX)dp9{*c+HB#P z$B{dZ%S;YIgVV8rL)v-A{7!|jy^~vt`-5_j`J&Y_ym8ad!@MI;^0bpm$9eF`nM=v? z$=c5xz{!Qe;!;0Kz+2IQV|ZJHX+^`;quvGi6wr$m!OW))kSR`Qz8>>Mj}d_$WSpm4 zu_Aevv^>lKIy0X*Pe!DlW1;J3*iVu?t@BP$=-Yz2 zn(Hx~gZE%Q@jXdQmx(H)n9rRr`QB_lO;4@Ia#ma0OZy<%f0aGVCvyjl<6y_Z>l0wv z>WA)(SWTJ#mepB4^W$}K0&15T%RW+?b|bN z=lKR_K>g?ro^oeAt#1ssLDIgP;^Fz+&H=`8M43Zm0wb7rF>eczwcm?ZQfrB)Il=XU zVZlo$W7hC6Z(l5$0tAy`#D8mh2?~r{Jg%=OX zG$SJJkq#N3GLL!tG)dH9ekt?G4w*o6ZfvY=i*XKpmDP!>q`fhY-(tRKqvQv0bh&yk z*LSRT@><7O5?p6Kr`^3RtYJ%px}t-Z(9dyn0nBG|uF;|OBb@ofg;M^V`NopRO|w?A ztMo4~H61xXeoM*o%&qii-acE}-O?l`F`vcPW_vh+Cz(&=cI9hU@gqwQtzynDzeOJx}IS+ivoj$!*LdaPkCRwr(gy#B2g zc%Kp5keX|op?*=Scgd_N*#^&Nmi8R$JIp)MrQv0nsPYx_^a(OLc1TcuV?OgkNwi_! zAG3}=LKU9naLUz>5UEhCSyG-YL5T!Ut&_^Fg9VR%v}5~3o6N~+9w^+@hbDlyzx_qE94~e_Ec$Ci}^Fm zE8``$GX3FAbvT^*+==QkOGg*S7 zcXHsOwz3l$CzMy1cm6CxZR0w_;~6I8{XDC4UXkiOJQ9Cq-p>2&3wW|9Hte~ojXYMz zX^3hr|8?0{`g0!Xd%VOK&5+qz$$U4-H&=4G6E|SR01lAMBi$GzW5Mg!qoByax(AWG5R3$)0ofYDKLTgC5HVBNmSyDt})`*m&aJ=cI5zj4FyMJOfv5n z5%FL~#puU*=B=E7(a?p=JKvCYt2ki`h7a`^h0lX}!DyWw#tLhp43I5BX~MkY6G^3@G^KB zugiR9ozsT>BpLHLpeY$^R~IN>eev-4fC1fBoV;;73NbXN@5`M zaaCzbuAw;ay@s;KWS;JVlE+B81#5p7LFF+m_|=jvkCFT>)N+OE+H$}7`qWcVLsy5$?`foW{(IsiWpGU^8;PuNS zpNqKiVl|?(gw{r_=@&Uo$w&3~sEk1Wb|1WU@YIu2eTJ5U?VUVn)Z={isv_+@jbytf z8a&$l7V?Uq3TUDLo25%DWaPm!a3-b-@>sz&Aj7V z8S9r4lugX%aR26Er0iurzlw~2AK6ikgQpH;ylW3pKR$#9{RNL??2#kw8_w4ysZcyT zL5yL(TpigloW^z(kNZII)bTQ1GU6T*lyK%9izM+o^Yxjx>H`OX>a(H^EAo9JiZ>$S zIrq-_oOy+3xB(oGllk1Ol5j9T)!>tvHvwbdGFXwrbH!W^u!;G^O_F$?`F+IegYI>< zaB`Gc{nSy!y9*Lf8sr?pfV zON2TiC;(l!nbhO&6{PxEPNysLIq@c)Il;4hZ{{=kxss;bwxh*#MCY2#Y7eg?_HuN~ zn9t=s=B~_dVZNxjOvaeZvYF4HA`Sbo{c+|Uyg_4(pf4m}MX{Eb5urNt^a?L-nKyU*=%1fQr28PpWk`XQ$mw-`HkSisO_D9NTw6F{R>dk z)raYu95j`OT{s6l&Ajsg8KgP$7nv{eDatkG?S8URpD4!xFojVLlqFJrm+2tz=w+Ri zEdC^kgBA5Sfb~O3v}67O=2N#z;{A#eyNKu@jKlx82#9$M4QRzmI#e6OIf!yCsBuM5 zaRq4HLQP|6hl)>F08t1{5)3n-;tQTb#FL=rEQg3|F+6}4H#Ja+El>>`CP4%&ph16V z`bVI91Fu4*6;vSM15)RL){I8eyM7M>q@E5Eu^e<9QG@BL%uPv9^Qhv*9x$tsbZTNHt={20{Nyoqi*^biNg2ScLbw)YQ(?N75 zc@+>AC&TJ=Zh4t)E?p*c4EVo0}9 zYq`Ttr{2X%DD0ZV!E(N(igLwte}$f@qQ_p7tF}%>-%eMRGk7h%ETh|1=o*?=&XBxS zL64}=H&^6br&RP@h5w?8enz3^tLXO>x~QUGk?FNGPgTGZB}1W#uAvLd8@$RWYB?W~ z8>ZMaZgekDPX+ZSUjDm_Pv>QzT z+DAbPRp@BC5a=KUbv|0U7mTBOflgLXPZgR*3xF$7Mf(GaeUaJ+fu?pQpJL?R| ze=4X&h3-}8omBM03cZ(#eo~>wtLPUM`Y;v!o=mT$NmKzZl?;IaLx(aAD1>LSfLunq+#tM2wg|?(bZ}94&Y9qDAS3By_s^UuD$cQVuf$mZ z&WTj(@tJdzigOz6?7?Nu@Gy{6y3C^unN4rvcQFmF9O^Z^vaCVSvC^7MrDH1_yuMS= z#wxT1T~*l-8>OHY75dRbmeol`@2K$iQqjv&Vla4>Q_x{5)Pb6S)>qI;D%6iA0IjQ_ zvsGv{y3k_Or=n;c!tWM!yr{ce=aBfo3A1d_iDtZ$d;Ax0GtDr|z=u3ru zN=1LC&@Za!7COVz;B`wuMHO0!ZU)+0(Y#QF#?zZX`zfgN@zSmN9o2goyyh$OnWqY! zL!*H9RL~$5+J}w>I#xj&tI!E_70`(aYEhxz&^(~i6ttHLO`)U;W*!9{rb54^CZIzV zbdm}kP7{C*RM6QfbP!z#^a}-DszR-FFVJ}kx=w{=&;p=~6?D4_9Yh1X4PI*$J0DS@ z*|f8_AvRAzFRIXo3O!#%fBiuA2BM0-jBfTe5GQ)nJJjpvi!#r!ywWYZf$Dt>$y*e3 zk_z3g&{I_O;|hJYihf(6FHq5+DDx!8m$!m$SD`g1 z@illgSI{FWv?VnG?W&*`Rp>~X0JN`yiYjzGT?llBf)=V!M)v|;ub|GSOPlylTHtF) z-l?FTD)g{I_gB$3C?*S1(N8J-VJiA{h2B_2e=5^!X(Cm?Dc`d#sBp^h;_2Izq`Ss?h#40cf#rC{&^F4M2;1gY%ivjXjj^1v*@j z?5RRW(E^}-6*NeNj->$s2CoSU+E|57q@96&qo5WQI*rZ%nxde+RA?&Q4D?$C9i~F9 z^d`_^e>O>lW>9^g!E2O~ceV=sjz$F zUq#p6k>t}0fqJjX^0P*BwsebBrKFm{tA>L5t56d)0d1n7kt#HTCIF36(0COZOBVv| zte`0>v^U)g^a};eRG}kj0nqUZnyW&m&;TRaOF{Eh=zQ84=sX40oGV@5C3FVRl?v*w zLVux~fo@dLNEMn*ZyF8Bxe6MuLXRl)L=`M5wd3T;MBKrIRysX{x`1fabY zG+u=!(1k$1QqU9?I+^aRVbG>4XeRAk!$1pbxO%NnD7h;BUui&1Y}XVtUxn^f=ucJj zlL}pPp>(b9D0Ej9{f$ERSJ5lnlLuIKO}$ru{H%#o@ie42YZ|;_6*OLj_M`eBgVz`Z zO;MpUX%x`K3Yw`x*U_;-hUC8#G*^Y5Q0S*r^qUGjUqyeS(4VU4?-aV`Vrg5Iy)W0j zY_Q&|lKiakSMm5!Q?S9Swt_~g&_*-?XrzM1tI)P|A<*s$nxaDE>0Y2C6*N6?ZAe!EjZ)Bj6&gqL zfc8{S&E?W&`ht==2CvZy>aRj4Q4`P^3L2?GZ8QPsA_a|Cp)2S@puZ?+iVFRM?yX~> zVRf9nGF8YvB?sa=$e*i1&noCCIs<6F3caVGPwD15hA7RI(seCVP*)Y*(Jr@%zlvUg zZVoYcc_?V43N_N3AqH(-1&ya;Lk!fjuB%rYg_5G;??I#L8fboqvp!RWOr~S&VjfiT z<*HEZ)`9-4p!q6v6V0n@NX}7E&DGL1{#&8Ds_2&$y1$BkN1=zQ=r0s{q>AqNuk2dB z4ApzN%Fmj36^{>H7;5keQqU9?+JNo_8l|9_DzqIf0NPzab5-bI8W4uHhl1v-&>6Hd z&?O40xmMaTztI_ChS>cI>aRktD)cZF{e?o0RMB1NO_XI&_OJ0Ov>Mf$3|^rMnxaA@ zXcW*`1l!JY9u+sY%0Tkt+18Lhq!aUsveyD*7XZo~WX~SLi7!dbx*ke>z-G?-eLNYcf?lO=$u2 z@2a4=Ds&VLsBiH4T0!$w=uFxf=sX40+$e3CrE~_+pA^(zg>Imm>l>1{D`=z&J)qD# zspzK^dc2B$RiP)U==T(Qii-YJrq|LePyz3i44EprGacK&pmlpByS7|P8W`xh2Cmu~ z3MHSKK)Kk!)vJj@(d3slM+_z5*bpnIzY6V5O+W`JXru}qO%s4lRM2=8I)g3*YE#e@ z6}p)21)8a#nJRQWEdaVzL335;ZW_?gkbFcz^Hu0+h5l4UzpBtRH%nXKg+g~#(JLrn zYkw6zP^Q!DhQSDS-)uP1Yn8$|>{e;X8|m0a2C|b{8?`|&IuF0os8{1Q2w^AScP#xC zzt~#gcL6CRz9Y9dA3$2F;o(EBQo=FmL+ zwxgse56_$M+lD6Kw-sH8Uxe`SYo-PGZA=52g%T{@o3+93vSy)PjTMDA-7Bqd5WNXb zGu4~9ged&BqGR#fhOWYIIL*T^N^H(cH{rJt^P_-E0J>6bi%`@j z0>4A(aQu#>%kVpv9>woO`Ubz#XmDgGNzLjVxmHIrTRq*<$skaVE|vYBe527=tWS2E zaT;r}?iX*gAsW*wP%PF~&f-|wwoCnFO;pbujmA+E)g!8VRJT~`i`}l^?r#0i)so?x zuSdoi51j=h89R-=h(;5KR75)1Vsoq>BneJ47J^{Pjmy|-%*T_cEh;LqSg%_$%teTz zSggK0s9`zm6t3*!({s1;^I?lFIxSfeYC3JPIvF{W)hUE0PFy9tc=DGFCoeZ%0jJYk zT87gDNvP8?B;v^kuA0-jb{fr4-IH7txdM;i9V+uCBZ=A${WWpcx3SiPJNS7k;Es}v zG-K5xyiV4~ka1+HgGLveW;_Lo#k$j&inJ75ab(ENIegXZ}!I+p9BNkchRx!QxSr9L8m;Yo8?RvS;6 z9T*@@k zLzlJ>ua=DPKHx$(i?jAKdd6AfjIMFkZboPE-MgZqI2)egY@ns*#@T@D(!SPeI`dq? z|DEg5f96Vmt<`93X~whM5Y{u*q2bfiBMzu4r`X--!tV98*G{6t*ut-$q{q9*C%0pc znvZDvt4q*v)>aibG>mhk9`Lu=%-!+0gLi&QhKGGI$X2KIoby@}sR2IX8GYCR3I8X) z@*|oU)6p1Hu9WGyZcIoesW@MEBp6c~g0W@``FO%nqtl1{xFng2yis&+sBVl?xfu>h z=AjndS5Gb0kWP>b{)|yZf1Tdx3%qe;zpRkWycbf2>P8)cQq6(o1fi0;V5dMlTMkPK zp$9jp&6~+7h7&WKKFW1yfwv-$$tN6pqrM*BKn|)sk|*2`><52caEQIT@Fu%~R^GvF z`P{Mwt^IHjmlU#MG8imwgy$^aQf*H4QXKezI|{p9SWMG;2J04W0-oWrY!c*TnCH=* zJ)5>^E9LPhk36QMrXmyKR)IuR?IEp{;jRPE# zxR_@4@=or8?rWKGfP1mN{iFIt^^Y15HE@5*G(n?FZ}7gTNaq**A6VIWkRr&FV=d|V)I5v!2eFe8tZ7%T+2xQ9aH z-U1!T14`TV4sdyaH~tTj7gIX9clYGxIHYTzo;$${;%ebp5w1ve1x0an2XSVLE?Gr6 z)Pqb1Jc`#{xHnGyAm|q7+Gl*^+KZQCxS6Ak&QRt0caEA@kp@>?x)+>FTt;{T2x#V< zuX&sLCBquv3gATU(u!a=TVx@Bd?8H)=JN|tN~|kyZ}Z=Hj(e8_HM2+Ub+Enu?Zg5@N_i$CbxWEvNChBlBvhzkb?6fUeX^;oYW8tg(qf(n0 ziN)5^S(mm8Svo^@Bpg*yqJL4MXHlXnG>P{{-Qh&+ZIq&(baK$xo8V<=U7cSVZ(TU^ zXrsSuPqavs&E1HRFe?c*wnaL}=(3}Y<)U=iacH1qoBMfSb-w0UgX>bBwlJnHdy+BE zW^wIli}Z&Qb(0)4oly9J7ez$_Br6ZJuYu^|0%5v@1xgdHf&$TK!x-L(i|~T{+a~ZK zf=Rv=xWws@5|7CMFfAfA!gMXtmw@JrUSj{rTzrS1awX<}c+nXETVucEf| z!EB%PidV^LJ%r_K17&whbiz1Wd>EEJ=tOQP%eo)dojna87-xX-b)-AGfKHd*fe#y- z`8a5C)?3!=yYLQ^$4fq{O-l}XbmAFW@(js3U0OZ(97}CJTw(t4+%xYN$20a*m_Vk>ejr`YYY+iHZzP zIrLoD+i4;4LDsWL4#~2x=Q=%l<8$4Bz0Y-ha>XxXk^dZW)I8U@@_x$2Y zL5!q}R7VIrjrrh{5MKz98ebe=P*h}Z|F)>;f2MFDx!CdMq1(W0Gv=Wdw(yxq4m)|G zv+@QJyCz9C9V~-GkceTE&`>5gbc=1P5wj7m&sF#sQ|>M)i+>>S%WpW|#S>WII0uZ1 zmgqO*oV&>5Ioi6fC|MfQiww$`p2C|V!)zTZwN`(w_gUzT5h{T6AFG`2!SX+=oC#6L z@F4L&GYl`CAz5A*B{fW$YrFu(BeA@(A4UgL-u?M|Hr{1NXOwCvhF3%7mP=hbeC2S0g$^G$snu9n{?jr4S&wE<|D)nb zeJyBWzAca(SuUMntHe^?kuu3xOZP)J!U9#SUxPR1B8iPJ3Y{&3S{7zlh_!8DJ6jx9 zu~-({J7T25h+lp#91HR|zQF8ebQL!};e{hBcX9CaX#DUNGOM_#7~{?2%GaI9HUg_v znXTSuiSj~K5-Sdra!ISzems{ht)tYZ!krbd%~cGNSY28$=R%#u;yOEiuJc>M`5~Je#yIMq7L~L#$0J8KD_QP&?Zwm?R^--&YRsCyEWx5yh2{KiMG36}B}i%?J-mMh>ONV*giy+o*8ED`@PO&`;3g7b5E?|JM{V3nV-nT|z)u2>}s` z061QaeJKQpKRuG9v@0nk>NUhDeGR5QV;{qdk~S7sVN~u*Q5{kAlTF}UvJTN;)%npe zgQ~Z=h=Pke>Wy;LyjTE5XUyg^gwr=Xi71@l0ry)G7@tJ6d|8nKoizKE6#Shf{_wW+ z${-(dmlh7HTFV0@O;Y{tmQ?e;k$ALN?@n-m?>PiHMIM_#5(lBoLrxEA@!3Oqb+9jSpl=6PFVp@Z46u||AJSSVctA%F89)|h9UG!0#5?Q! z(7uE`$f`F?E4b_bbkwBgCtLPDDVyXvTRG^W$KZCCc*_nf`Y`gHGY*V%`VuP_Ts%IwqH%YC(Ptseho(YTRJ8w;Yv>d`Wb zJ{;L4`0*A=%6%mJF=t0()zhuJh41sN&&AGncstzS3%Sp(x zGDCx}LWS7d^pCH6>CCTclP7fJSHYFm+=3a;axD2 zMMZu4TV9`v>Sx(2wt(RxF<5SaRW#Gc#3m6fA;mTgJv@hZdS3IePZVBJF#xaa)9=8` zf-P2Od5K9FDwd;Ji7iMDeV!N@X+fnCrz`)eO*~-=`+wl^Gw%Uh_mw04xXIKfdaouEZeU%*mhy&b?;W3`eJ~@ z=k!oX?MX$1`%J0jeGjW&@g|>`o5D1_4lqqz#;_t0MNjee-^6k6bA0y6 z@5?t+`-d)wv;GU;utds9mrrS^?~@9q?hq1d%|(Z4mr8F>`9at?lcr1!5NtE)>Zt*K zg=apmRpr2w2Agl*BQZqVjia}x*3ecP$9wQ$u^n}rwoQ0(n*Kd4S=c{@wwoS-_*nY% zd4g9WUVNx2IZ%6PjLb}EzvSAn;dxxV)XOc_0*m$SZZ008=VGBH^5vXVIn%2>N*zUq z)6h4go3Tiuph918&g1k{vVT}J{@AEQrs6)6g<|APoPtbloO2rWPgy05oJaSk)FH>| z(-iMA0eporm+EJPxIE6lW5g-+{eQ%9wB3xw2(-X52Kr`(yWx+MDuER__hf3E8GvwK z>zUU`XKGB{AoR0IS?sCqo_mfLXW>M~l6X>tD`a)y^ zy>9bP?knZ9gWg+ux^KzYV9bPJ#T{A#iTA}B<*-Dxg}0R8n;84xHFJ5EsQ^%9Cu~M| z+8C*QFc!wJ7YxN#mTaQhJjXUH-R!-j)t&G6AlQ8ZxUJxpu!)k)VBw2RbW>&{Iw;eRG@+@PwaIn*M`oXz zS$}Z9B+YoRRd^(9g&-NX)vkt;t!g!ct$wFrt2}U8(0bKK@iEj)OsX!alZHebMw7PG zzyz^;3v)3w;clb5CwgApCNwguir1D9ePfhzEkz=ZpyRVfx?K-09W42{k3P*> zslOLgn%sf@xOI9PY$YOtf{r33@1>SVpzN%gmJa|OFoY$SiltSpGbyhB_0SR!mcV= zs}5clf?TFZ?uf@S1pa68C2!|{7{|rM_}kA(Zrx=hYLK&D?uK0}NZoKS60ub}{7zN;po6#JJip02 zp)!w^^Z3!-|I`c`jz?u}Y_VCK5oL0eW|l8Gr_C((mb9?sVxBu1wsE#NG`) zgs(HZ?x+brZLyxo3FH3yLsQ!MSas)yp2(izGKNk+R&@ zo+Z-?c|Bb^cS9~~8%$s3=G|ywo~7c8t~eZ#&dzM%PrK4Xd4bvkAfe?BcFiit3lWmL zIKp_+iYv9S+=NONTe82s54y_d5GZ<6Bbg};X2JfWd#v??wDjxF4;x3ngq2et20>=q z&Rn!dwTe73H^7_NVyV>OopoTcI%$DCh%DaH*}^A#(iLZ0B{$$EPTlV*)?dwSIi3fp zlCD6YHvp_srTNd?^PQj(O)J2W5&m68-n5etVc0Lu5D!V>7*^EC`@{}VF;^LEHEx2E^c`zPQ15gPFGvD5=W^5F@e zCz6pfryH+WM))v34l>NY_lAyZC-VWowZ`TW%kEg~d#t>%rhkbx*yq9PYo7E*&~z2A zeJ`zH_|6SyP&TLE0opowiU$$bQf%H7g0sH8P?30A^e~t%T1=g$5pZZMVnXKoxP^4X z#RhOYH!s%Kud7^oIypssFICkByQ4^3crAAteJQ+Nr4hW$C)k3C&UlnpH_xEb>6)m5 z^$?FgJC}^>x1_&aYVOulCHnbt`tDMI{uEqEN#BpY`$b0YZME`>(dq_i>dn^yP{5U-5Z7 z^}e-y3;zolQ^Xd^s!rJHV4B~|Ik8!4FZI^|a;0P;`h z{F_e z7Mw%)^QH0K>cZm+H21ED&Vcx;bU5@orYZ3fy>oX``9!RtV)-#u_;C8=y+G2I&bb#s zJm`UYaijv(->*y#(xCf6@^k(4`6UgvmWydQoO?r;zBSN_HMqCQ2(MU0YQ@c zoJ-YJ+)L}&{q((6)P=O4eP+4G4SCs<{Kf86v^VgvI7m9cmaXw5u0kZ0?^m$+6w_(r ze}l+Wn(%LBl0+x{JH}scKoxRFfyLGpvw?ZEfXo>#Z!r!b;7fs)eNde&pdkEtXvovwI6YpcfMetP-QH=fQ?x%<@peFh!%xCyCD*FLrfp5;@6E&LpxEi!v@3%9~X z^sqFSai1)fr(2#__4`zV8*bt0i$LRhDRXrs;?wT`k@*V!qQL6r=32UH1!-9y3d%WY z`@fR14|qjgUmLV$`K|dY8ur>#>m$GUzM`F9SFP}pPxIX8hd+OrHRbhAM{P)fl(%jH zjePG%s?+%QRmixkDewCU!rcIR>7&J~DMoHi7kR$6A4Y@Xjyu`Xq~D8SY|G*i6>ddVhE{8QrKuhs%Wp_ zz9sa#{(vnY#83F}oNXq=oz!H92sthUS7nO@k}mw@%X}P2F4@GcIgnt_s?P-+@(TPo zw`6fASye}}DCA!pSH;>|C+@~z#0kd$E#p7pY&!o9ElhC znZ0o&14wt)%ZUU!e0f`7iKB#|Agl)x-{bBIj?*Vp#xDWk`DqX`oIKDtm>)03+M0;D z?6?!DKH}C>e$AznN)~>qE#6E-Vf@T`I^Sk+KP-=xgo4uM+EL8ckoM(W$;z+pvPosh_y&{Z*Kd%B=Xi|7y3Y%6fN>ho`vwp={Ra3LZ3mj9L}2eN-$NPB$+754!aT#>|7IBzdj zJkaJ{lhinUjV;%a&O*^S_C!b0^uxu{1rBFv zuB4Gee1Sm6K6E!%8Cp_aB{UG<@mOq8#T`hG{EBB(JFDwVrzc?~hDGX0WwM0z)RS%c zfmgU1=1xfXV0c=aRdpkN`X~2FtMMc2;6_IKljc&7_y$Y(9DW3kA%Fa_)Fb92gD9{o zZsdtuEmdZ>L2R!Fslr}WBEwysE=lz+gCyE&7dNso?qr(&$eq&VJ!QEb#Ftg^Ak$o5 zhM^EI#bZ1aHD>Hhasf5Oc6tP8=UZ<`7lUu(dZ?N(N{5_8~^1e|@c#L~$US=S!Ap z%_k)jH$Tb3s*)WJgRV+lR(RNx&G#i$vVHu>??ijsk$VY`JC50>{mCz+%+*WiH)FD= z2a+;G-|1p$!M)hxYNU0$Whyf1TGA4;_?3eUm#G-3ITht;Xg(A~HQro+>;rY=F%s1i zEjEbNFp?`|5EH7CC!}Ncv+Cq1@hCV8_R?Nj^kt`NlEe-_@8NYC=6|?V7-kOmm?xqg z@n1e)+{F8~3GOvd7VJAjVC(L0n{1 zY=}F`-O<%@uVy!?L%az|&h8OHhQNa8YHGz{L0tP5_7J&3T!&Wak6u4Dx3+K6=0?)_6LX5XJ|Ln9Kck2_Mj4iDMQ#>AfmG$!L* z^0snTDQ0_OE6Z$50{y-_RKiW8^ioR%u|hU7mm@xx?(vM~aamGP-B7l>38|rBQ|KU`VQ%0;1Thq4+`q#C)++D4H8y$KG#WDgz7rgElT zY$;GOp5-8E{$_V+CK6uKvIFGB)ZBmIrp}ZBk`X>%nnuh8$R{3PUM)#=(t)*TNv4ut zvv;;6ONj9JNOreqQlHdw`iLC1X<>X@J$xS8=+k_7I}0`8t|O+@!nXn25rbvLH-FHC z_g>^MtI?X=()RmBvSj~Xn7$2pq944yw8B@J-a_tUHU7pzg0*w5O3b#atadEPBNp}{ zmQ)X}g`;#Sl!vR_hk4kpcUhbZ>axqGie*y^o9SjD1_gKQQI551OQs6@_Gce$OR5SL z4_Rfj1PNXT(wZ^<2wOwA;hew@dNu5bet*boQ>(8<^oyjq6(=$?@W@p$p zUGO^ewDkJrY1XkT*`fV8PkLRGm#yzc`U#{X`>F@I;_k3nqsd8;d_IC?hq>XySpS}+ zaYe%ksO`xSTX>}t*{gdJ7ovTCOp@~97~9c{)UOnet2P$f*XUKr{yF%VLSyg1ih7a8 z!k>p(L~ppIMgKTx4mr)ouSVR!nc>Z&+3?<&A9iK4jNZgYxV?k@)|*tf_#Af7e7ZPo zzwU;6tx}*Do?$QYLyLV#`0B0YBPfLf`#E;#j@>Np;@A0t7%{h3ub5{aNZ)dZHS0r6 z=-^-VA)b}LeZ>`RRVXDAA}9a9)Gicv%y1#CLGozjvF&*XtcGLvnTyRU)w=eN&=z+^f@Xy7y=>drQ5x(;mhokIb-~Fhn zRNIC;YrzZldtc%mwDtaHGdS~%sDnSxlRCv&GrT+Yz>?KM9Li8jNh%TUvJTl?wXCVRRex zjUz~89mFJwrIm9IA9Fauh7p6r6!xJ%i6fO*+X18{W~__>1jCJ88$b+1WG@GxtMp(s z2a?X@4x2oXv>^}K-hrf@@U)OsjK}Q!Cku)vwJTT)aixQoEEYXs1LKKj`5~VuSJ=#W z(uK@s=i*5y+>28J2`K*y&fRkOC=%;1Qvyl!Y+8mJ3kx{e6zA;(oI2ha^_7l;6*N)!3z^J6+;GN0_z7QbyYS~S6@*3E$ zlgJB}H;8z#nS)3NGM7KMC(W7PU^2kiU?bNok6*@nB7W!1jg zW#{g{gEJ$fJ=-&wGCKXQFicz`@wakC@G6OaiDDih2~P&uUIook@>I!ONtW^jzz5sG zeC0QZxr-!YBo0+Xb{A{JDu-oyZBEZH+odIm@CQQK3HSM2D=Yl{#e@6C_kHpN}p z{=*0*_3hF^*W+I#J2c?6iyuFtVse>$;ul#FpD@nDW#quWYQ&!G-f%Kg@2DalV3S9X zzJp_JJR)Gzq>f^!NDoITO&v8Wp4iGrNgSWv!t9YSQ=F|$n9MJ8yCR7vU`UCt@G+Ku zA!I#;?=nsmrivui>KbK@EVMf#9~(B3G$d8ok0Xg!(9RSG4gOf4Q5TFGc^5vE)|I{c zhhD|lH7-3iISSk`o!IzJq35&Q4+U1?C5S3XQ{Z` zfEx|qu9za|7uk+o$B?G2J{ov;jy7_)a(OB`J^D&UTVk~o##xQ0a5{z?NT^83!hgfE z2jUti;uf*IF{Dw@C}jR@IaQW6$RbHZe)$ti7)K02?7>7dwf6GUbu6U;+$sY+?!X-A9#5 zDz^4nvH1`#0eA4+lH6-m++Tj;{_rEyClL=*2e69;xSNk**OEUEQDv!)EYcv8_J~du zSenQoUl8I7J2a7e9U0PZBcG=|e0iwBYM#g6u+XXu)A00!WFo9M zHPVG#%>HKhF|2Z7tOEmARgCM ziXYp2*#@>}5^1fSwOl}C{co`&t2mj|>5za|tP8!%alzxAt+*?09<`W9ybprx2y!%e z1TEJiP691|LlQUWF5gWSVpW24w?FDF?M@Dgi`neSBv3c*0u;z@<<9Sq;M**=V=^&n zleN4Ar^Mgby~!k~=As`E)rbY{!4ajWnI73)e5{+N++i z4bCPdBHOlv zR1dPw<9!Q3_>5=)ow+Nb6HZB>p`+o_mm|NcZy`>7=P?IHMw5PQEJO5r8@s^Jn}%dN zE=9PKbYZq-uBPEl6~&_wj2?o)314Z`tkTWF>jPX09Op$VPT!1)A2L#y+e-pg)2&TM3h; zvOX(e&POa|CAlLwA7Mj(Bn>M0&*XvCaM~UMt$8>e6*sZpeKD}r{AL-7Yt*N{z z>Bsb|NMrv>7dXcgaU}Bd;8CkH{ELREMrS+b&?0dH8@>vrn9B~X!r5dc_G%USdVA*o z6Ui19A7C5T6C?ZZ6Vao`>sFKg7)Ya6li3(ZuU3=A_^YOY1k9LPGXCH2ca*u$r}C%L;Dv#_=3@s7>e`n9AUf|tN6BNlXv>~&;`;J2G~{FO8!_t>moNje6j%X-pM@ZH5auSdOe+3)KS z#!O@O^`sqX%));oRCt}l{{9UeV8v-tGS^W+0LY4nwy*8j-softhd z7tQvOFH&sgCrGdq6JJAHT;j{+J;+(S#9nNGs;JQKq^0xf)sm_{Z0zskZ}J^$wvqU` zk*cr)m|g7-{Qh4?_)s=_Bk^}T>03ks&WFImGsaBfnI_4osoc*Q3Ef$&7lRlMNvK(^}-_!TtRA0(>Eh9s#SaOM^M zD;|sgQp_{4D{Ha|fu{gAY7;`TKW}3xe-RIMV-v>CQ|7xF1EDYbW-|`+`Df(FU2y_C zvKbm=vPYZY#@>!%?prV*p0g%fNGkb*?cPF?NN?64i!>o0*_bS{7C|k;R#MmJa2B8B z&>c&yEdJqLb1F;NN_xX{{k0Y6KU0|7pTtIZDdgJ z1q>eEapVZK6amobVKmJCX74dr7wRKjp}yxBwtE}g`7iALHWCZJV#+41$znDso2=FT zK3b~c#?dTjJE|DT+Hc2X0dPB+PQGTZx1(zQZ1fJ2KvuGoJIIf`hB=rH#;}z+#JBv| zvmcA>=Xr$;>`)GgCSS1ff06Ozadz@wi0XO2A66WsvV|AoS=JRXe(@*vU?)6z@AdKs z3f@J!2>QR-v|SL=E_>fD1oP@$8HyVl6O0vj1ddnb4Bip^8jN{c`TIn0V{o4cfblpe zK1*QL_P|^2Vx9Jo3^Jcx-veEmvM#w~0_uM_7fl2G_mU8j$X4t{cf#q)Ud%lU*D(Kg z#J!%h*)X3QBpWXl#q#cR9PfuU_&Y_sa9GtJ69W!Q_y9nG``}Yxw|!(0`HkJ$M;g07 z`?+-cJ=h@LV0HJS9N(W==l!rt6SjIk>Ec^nzr-2qMf;V4E<2j=%T8Au+p<7BkpnZv$5 zj^n98Z2fWEEPB8KPml<*m-Rb=qchA#CrGN`Rm7Z5Vv!TWUqe~XlcXCN%Ql<@#|n1p zB-Tw)-I@6m>Cx=c5@oPhFMb*+Hgh$ub4I5itXJg*R>n*v(0M~!tcXfceBhHaN zSY91GM|yVN)KRkOW+dWZc#v3x`NN8j2B-`!LZTdK;VuSxu%{RSR(>MTxOn$5OlBS4 zk&Ql&=}6ej=AI|h1-I9%!Uggkvx)X1NfIjl!BQ^b+QwGqbqUMDyB5~+5}cwF8+M7r zkaV{368VW-Wt}gR6!MOpzKp97GuZMgSWk3iIakOj^aR^gm}(W#UHuyT&mK1II%)0xLn}TN+z>nOls@CCkDjuCUARtGk#21A4YJ+4>8$_5z%yf5 zTt4x29~q+DVsOHM7GJPs`Iz8qvU~YtCsuQ-Z(`P;#$Medpjx0n%_bmRN@wia_@wDpNBR4U?A%Q1K3XI=1IV+J-!L0a`4mk2B=)4lQd7 z@4*uuhUPKo(q9aSIjrk5Vk+yr7z4}JlZBnds_(~V*fdOMPo7~Hb19VhJ}0$FG>d&s z5D8~9pJQR9VShfyw2ES$qasaM{TF0_-<0vCrw98vgc>Z?BX&2$MnptbU%;c)VrO2E z#e(Cw>=7@Km8@m^Uy&b#iiy0*N7NMRas%LM5c<(AsQxyjxQ%fA_S1B@oE5yrq7LW& zg>d#*EESUO!i8XVq7c)19~S)vVf80$${RQ`EGXX)n^0@?rv+^#Hu5bNk(f5$;!Y%{ zhIhof#&@;ksWC2Nq$i5C;q|bln$##UVZ2N8zdjhk;@`pdJI-Zu-eCeuW#!&ud0d0F zc~3@!^c|_HeG?vah*4891d7B^cKtmWP$si078yaTO|K3!j8%x#1yN3}hqA3PHk~WLzs2 zeA$+=!f;Z+e4K^B6(0_e0xWXv=d*dv;H&J*wmU=XA|H0aS!iIKF`fJVZpKcMUT^}N zeB?O*Vo zGqI`Vge1YcKYLzISV)>>r)B(tk}+5*IT}s5b_bkg$7RG@#Q1Kip>Y)T72B$*{W;aq z%q~|FHe(kv*In>zm5*DDsN78{8HO0CU3|G6%JGZexRK5;kMqy5N`GS@?)w6Y;Py8E z;`|l6?=HkuoXlDIc`*KP5;iGO9zqqDU|D!AB;rdp%tNR~tZc4_Ur*cwVYjH6)*INFh!*$sk1QkDLRRx}Pu558_c=z>XV)KMj; zi7tDdCx&aKpbA`IcrcP!D@9?o18ktT zP#>DWbvQ2rMneBLq>d8 z%wm0fh2~g3F7p-E2ye@=$g0AK`j<~gCch#j9xuw2Y~a>Clm^BnPI+b6 zwW`8&Q?Q()Epoun)$mrL$-2uKku6Bc7FdSO^%El6-gn~sxO9U*-ib%_9k?1f0&Pj1 z7NnUl0L>v^K(~41NX%xNbR#r;E|Sk>d}KO*!K+LfSj73PuD|f2{ujrjx(t#MkExC& z>vBT5=ga>v=cl^#cFgV`AP7X;-GOW6)X;&&2MU1|-S8?p4dG4UQO1ES2oyreah4k> zjQ30s95kuJ@TrE)N&0+6uF4>RwW}tCwKoApKNh5WqTvomJ}aEmSuu*WmA`$1RB1VO zE%wC~?&9SQF7BMSZ{wc+8k0v$JD|~x>-ez zkeuOi)`<-;3az!yT+CsomzwO~jY0^)9CxL<5RFKYe+{9Q@WmSzS3{^RcqFjNHH4E6 zgFm9?H3d_-u#epKa3YP^w>8oEu_&vFDd^${cD|-iyV?&QFl1}I<$n!C(9Pmk6kxz5 zAS!*q_Ca9AAfa}Z{t~SdhB+=}#dqM9Hb?Qy4cKtt4xV6SK|(Nj&-MmEzYgpPCc27i zaeY2E^#J@>qNli?RSFjH*IHO)u+T~fe$Uc_g<&pxq*b5P^R~WYZ-X%iT;8!&wS@8A z6Zc6SXDkx2nGbI!$&dENyXkbSwKZms)({=u353rLx-VAJu0GE!dDUlNIxyki>EB7u237x-FtX-8H?MisLD7bqM7-J3iZ6c-zI3%@z;qvq02}$;7yZZe(;Ko z3`NGT84DFg_~1&7)CP7R9M_>UPx%RgWX@sCH%w@V6-u`-Ovww_v@pTYd%;WcSvUCP zVXYOPjQCcO*r$c!! z-up@ct8Ic&%d+k!A>1nvAFA1FaZwo_uQER=c>6h9ZNgOe1AAr?>eUj%RfUK1{pD#D z^}%vDy$;=n2&i$sK{8VWH8c-k8Z$(Xi=Hxj+-EHt{iKu!*FER3tPD>6L6u;Xlzv<4gfa$OXdub_Z)Rt9iBDD5) zP~&iG68>);W^5wFR9Rg|B>;;-iD6Fm?IuDMf-AKjn+mNREbTtBN1YuEY(O)i3t7%K zHxowUUa_xPNW=d3Co`7)dsx-x!jvj!@Yh}1okYEhT;k0UOLN}r3X`)z636+s{Q}YojVGOIH&|D>Zqu=4~2?bj$5LlVq)SxD(+fiVlH8WORk`}9?fkm zaw$zLd&e!qveL4`vZA!Y!os4$va$l^|9$RxuHt0x();`U{^#>Ke9!ZJp0h9a+%xxH z!XAS12r27VR5sR?i4G{2kg^1Y!gC(fBz-y*S6|Zs##eFofee=z9WPI{A)it5np)? zZ37+lKX@>vJf1N|7DaPR zH=j2`DUEkkFBkkN_t9d_Ky?yMw0<3kJ436;OvHwvmN=TIE)Guo5i?b85LSO|67^&7 zg!(EmZjky>lfm?KkyLHIq$jFBkaYXUDOP*O+^=pm;o*Zn2CLKYFu>#_^@)%gpWME! z_(aqkqGmZF{wSkO$$R*S>#^@-g`UB`Hb8~!AD}|DrTPU@CrkAzsh;~W)PMZ${c;Fy zF4ck$MeU(#Ip);1WHllH$BjtBa!$OItcKT^eHb}>fae_OsnLAgw@eW!$!dGNDhFem zsSjB-z>BV*L$ZE=j}em{zM)A!xz_XIo0FO;{M3h3sA@G<%T(~ZvkL7Od7{N|wQ2P3 zJse6QNM00DvwoTOf5x+vFf;*Avg_8$V|lx5jL96_&gvU zCm5?1(yjhD)q&mRg>g9ddP7Vcul|ZBe@3UMk=BQ4bDtS{&pT+hRc)uA5-U^G6@goF z_2K_Su85qV9#j93=gps>PBRBKSfcX{mxzQZ>Iarvi?552X=HJUCr#DW4z-Y)oaDo{wr=^O|E(rd8|04FUDW5Fewk9?7kzoAxSFA z3L#s3a5;Vj9-X}UuKrQ)w!_n@P+j_&(!F(Ns1M?!GH+razaR&4-&d#zT?PY+I(<>* zE4oYUc@Pcuq9}S$?QVKlw0KCJ-^G23R!`%5M}$SOcoj@PB^hNbzg@O0z@1P-wEr>g zge(w6)5I4K;XYyS8D#n`bxvm6mvi+@U!qKNL@Sq?Q1hoWY~AT6H~JtnZPhd4SUpTdS9IqI!7rCkG{WYJ!izhN6WsV+aZH{O>8#nCliGH&& z;P-kL%*KgG^%)Aczm3l8+lbYV;Fj}CvpD_;?i98O{J4C7*m>Ls$!^2v=8WDeS}dl{ zQCHj*110JWI?nJ#SIR};TyQ>d1EPAEk{v_Y~TAI3A#qWzrZna@RyKMcxVyqF5xz)x4ru!D1z3aTEC*5a0mbGeEFk1J!OIQ?Yj-) znj7~}{X~^?wMkIqH@X#`=jsw6I;TT%Lkvk*#|4&UQ$u$7K3n9btM%(VKAme1B#ybh&sYDSp1%@-qZVYJg<$%XtgNha~6edh&A_FFIoiO_N3vv?x5Zx1&7cg zi{CAin-9yp^(Oo}oDdby*QU!Nb)nj@+CPeJmgLJ!GRa*xXZ__)lmpHRjZCt(nPeuo#KzMnubg4Qiu+I)X zV&5HN`ZBd)vmJPZ_S=l2rZ_L>4I(~KwyNzwSn2Oa>R%pS)usIo;a#S7tWyVemMjwqTpiY`Jw2Ms?*-B}m(KL)_-V}OFz!*dNkaOt{#%0=Mwrh*wvry|Klpx>9Z2Zu)Z=A$RF#b#0&8t&b2NplHME z)Cvv^G+e#fAEoUsx`UP*EIxb0#Fc87c2i)Juxdt}zL%vOZs0#>=v!PAr}zmf&NUS0 z8-!@jTS;I1Ylx3msxgsI!W5&`(iizt8hF-St911Qu9rnZG+Bk;LDq;J_$3inp|h*h zgb0Ce>BWzKCqA>=&$t-jD;W5x6E8`>I8xZxsNv$i3^gR;)NI&P_y~rjCq>G%OcbsR zERG%b(zdJ6cR1<@s=`o|Aa-S_qXQ>6^|3I~DFQOpde-lkVJn0Any>;*Yr$P!yG%7E zpw}jSOzjX4WnyWYD>i1TcjKv%Gnpu7ZShm48r%KKxB5W)Fbl)%V?A8`@l|whg`XkD z=vg!Z(6h_m9-+%+mn4CqZqwVAe&_Bl#FW+Qk{&ysMn~UX(qil;^z~$^Tu-_!K8-JZ zwA$DQUkDg~JwEe3*)jv->H8q9UKmC#)1=8O^byR(<@%RF%E`VL?9nKbmg<*pY=!38 zFd@>`sI?5 z)be0}?-A|Rs`m!Ot<$@7tw>vo-TW$1W1ZTv;SM}OfQs%}uXos90D7}SaTyNe7T_la zGfokm>u?LSK-ku+ooWo~g&w&1Sra^}KU>ULk6VPv;)C^S*NAwO_t+n@1TSyXOK@cu zN`O7Y26dQy-3(APYOCWfI>>VGLVW5GA3Q+``mWVW&<}vQq|cv&;vXB-Re_C?bxl;V z=(|y!)MqiObagpiA3%-WPa?k@ncrPo_54-=iYgz+M(K-VdaHCIoA;#6k5A|}lgQ>v z@9!IN)P={t-9nwDezL<`B-CHcrURm2s~V5z5}IwpUaYa$yiNTbPa>?}u678|r#k)l z_5MInxLuv1zQ0po1$`dRx~eS;Zx>vO=->;Xq0ea+^JYs3vm^P&N0t^7p!X{;_t(rJ{g2KmfQX64puNUdknz;Xv+Be8XU$kAdfa^-C&RENwG!=6{|YKvLkRnM!lwMI$!7am5%os0B} zA6<-!pWcF@@(})s2EKpN$g55af69&#h|NA-istO3!?~}!;X)88c6sp(#D~J`MKe5z zsQSk3*4E7I{l=@F)Np^i?}R$ebjTa@lKQCHf?EOzP|#Bx~whpWe)IN z&A_BDvWf#QV^_G&`_s#KioulWwVzTis+7iQbzDH;y~Ah*gmxX~opVl&vzSJCbIz;y zF9pZF>IL;`r5dM4-+rmQw$)qq32peI#FkIhaWxiVnA~CH!XmR{W0~(9=I{f<(LkT$6dQ#&hX0U) z5xJrV@~S6Z{!V>Xee-_r^zYSk0qWtw-j2VjA*yMnH{mz6pqg58#oM~F`Nc{B``XfC z(51Qfwwk%N`t@XQ@6mNOP`(u>(x8^na;6n@*tADMDw``!fjyd?!RZ{RjF2h$j z2Ak`d=6ZV#HXktc{$V{zw76WKXQ2@Xbb+rdm|(BvQhBRwTnwn*>wLFCwB@Og2Z}QV z-#aKe?Cmhb{CKs9dRMT)n=ePflOIytEA+M)xH(jGw37H`if<^U}s>l5hHWKOlt>H5rf zpr7lVFvHx!jH9fzE^|tR7lk;s7C%Fv)u)}&&2j-n?|Or0nja2AUoKo={zx_T^bSim zuQ8e8yjK^R11z?;&X&@`n}PZtyBohOAo}Fz_2?ST>59&YkY(ncruNrd)Q^v^~T$;V24MfZ4DZZhN8ZkD(2W^3xTXKXir zZ8A;v4%umb1&g&ee3yAiC7W%ZUjKO>WdECNzL(bO*}uLK**EZ>*kk_IgvaCe?lboc z%zYH&8J}2rRQ$ZpTt9d-#G{%G=Bq+CJSrMKV=fHbJzqE3GhbAH)?7d2F%mO3L~T~c zs_mTlqU*EfyWB%TAMGN!!EA!=!v8nCg7RRePI`1Y#kq&|9@3wb`Y_U4rM@QX_mX}G z=`+)!qK~Fa?RT_BtqT2~)~JQwNoD+fM%+B9Jx|&c*18Pk3sQNQl)a&3zROmfZ@X=t zsJ-9ZSp6nbblY$4izAofOo5i!dOKB`?aj$Ct0wa|XUatS^Z5Dd+#z%Cz%8@%Qa>?EL_Tk>6F6HJ+deW& zIG#5*QGeMXCO>a}v&mH49$bA9Ke);lndm3jRTFKr(3jvB6n&w8t!RQse!<)^ur_Tb z@v-cO#nu;#q4w3Y{&8V{Nv`f>USr-hmM=eO}1+5^?`YE1&Xjz7U7vk^&)J*IROrm z-+jrvF09`q6aoJ`L+@<-uP_|sgm#@|TJLzImdH41t{d8TCEfb?iXMHv)OQRslqPsJ z@5z(q-j(nhbEVhJvrYBAX|I`U2gEg5TuKM+J@F4xtJnLz+t7r}F7N-Q;GZY=S@9u# z&iv=)MfJV!ylrlXV>@#VQ^?(IXW60~$EGy1rP-7^BkcXe zz30sv&~)r>>?!r-!q<7a)RzQ*WVb{LSM;0x_!|}USqM*GQR*82Ux1Ax3Z-NF3b+el zBTszO__$idoBp2JSPM>Xp6JJ^*{%(Dli-P0?-Mx1M2`&fu-=pua)}Vf=_3^ z3z!c+yHNTU8J}e|__Ka8c=ydnWc2c%4Q|sL3H=qmkNAmKq#w&Tl+oa4-zE>f6~Qo= zcALSU^@iPFq1zjC*?h2pJNn~NpC|v%-uf5(ooxRL&V4iUk~fhYUS4E^$R|5f7Ah!_V?_!37-MmQe6XJgbH=SB#o~I00YMuFMzEzRZ^ov@ue+qIbmI zE?3n3M`5>L!v2w+oKgDU%rKYJCyYjA(t#Ddn*^$DMe=_;eB)Lj-2YL=M-Z_Ho^T5% zLM?U%KC(lZZv!e~_?D0(E6DpfY~Urx#qF(Sz9nedZ20T&K^?rGRMTpk+zFk^d{OX( z6~q2qMY*D#5$|uJ`?kz0CSqhrSOlLBf2O1K;T(?cT;@wgxTKdv;wQr!_9Ro7I0}<3 zd5TB;nU0til<22OAYUhLWkQk26CduUGcu;c$QyQqXAF;Y4L!y8_hc9DW(7qggWD2- zY}A4E0AJjVjKlj@z#G$a^lj3WZ`7TsYQsUdZrW)E0CU?nD3@muZ@G@U6yfT7i zpkpK!5_lKh^~!-aYzggSZkH?S{#7`681hQi6>0V2yHdu8}nt`3^#5?=O)9=jxm3>8i=|eJZlL!B48t%W$ykcViQ{k>C zR1PYfheCY{{B=6kjn$~-FVkcxEsS@{a1ZMaOfB=ZMfd~YB6zYL%~&zs-YFPs72IR# zWxi3!?{@zu!r$P3S9afCn*ZI*?vR(;uQ~p&3-JHB`A50`KNMgt2I9l;)8QL0!Jn1z z6XBik!{L+Q2f)X}cZcsRhSbrTx@#@KZ9DwJv|GLu;p;3HGG3^luW0+v!cj=~G~ylp z>$vXQGX7_Y{WrR76u`L*8!PyzOos#D2`ss`~ z{|zEUVxc>F6!jMcpfqm&WWxkA}GGEK9*zh7wBzW=^Hxlu(!T+nm#3EiS zo*_^D!SLvxTY?OagmNT|dJNv{LRXEyE;+oPcl&{3V1*HZT@;7vPOJ8pRQZnrolC8{%cDg39GS zJ6?#&3n=%w0?T~?z_}C#e+0M}m=1pcwuj+2z%PM64Sx>)1bk`*pN+5y&j=O)&%o!y zmoVO7j(B*tF93$u;7j4N;V-}k;r+SOz{Bv76?`GWP2pYeR(Lx+zB8|5B6Gx(cfhA2 zoiz9*@EPzM;IrYA;Ct%cEdwbKqVeW~2i^)#;pOly_+n$G+IjSZa8h%L)8BRbr z7QPg6N(EmFTnYS)TIIf3@Grw}!JEd!y$y_X-&O7#2>%#-B$TmuS2rmPiNGI*-xdyp z?-_y8!=HoKU{eda`|+<+_ab~JpAWtWKDrJn1)qrbX7<)A_l4ty$K~*6Y^Ye>a-aJK z0-Iq-5stv9W#e++X!r-<2f+7&?+kwrd{WdcUmx%Qjk9fd1%vepMuOv5H5hXA#8i+ET#Y3Yh_&z&xOpk?*O*!nT&$-m|T>umE?ByU~Sh zFhPJr??IX|XkGZd;K)1ex56Z!g}*col^^?``?G(J=l)v>{hiG390wET&I-x@1#^sTJfqr8m@1-;?DSD+lT^KINSer@dft+ns27_$>I6G5?)Ef;6JhUE7dO zLItGoboL{G$^Lc@-EupDmOw&= zHxjRCLy7;7dADC;Muul5pkVNG;S=FoPKTd?R)XJv@Fn;&>Cpd|-u>SuK=F(IW+9d@ z#yYllF;>@=Sew?$+9YRSDS@BMq1NhTl%c@sb0iGA@{@X z7(TPV@jX=PGhDo1EBC$V{<7RR^ISO|eZVT6TkZ?{y4?5ayO=%~%Y7YQE%%ibl>3gJ zE%$Bx01NI*(EWyj6k#k}hyHxIuko)~H7}tBzAyJ}JYDWvc%$4m>5Xgi)9w{mJeUC~$g|F4WhKgP(MgOnL!$lI`QvDq@e(a}m-`A-1LA>Dj z?B#M_8`O5vo8`V1c;T)OYH<>!Ziia*MFGZLE%$wi|6KDmTH!L{KY%Zle}Y!&fo2_r z0#ruJuKK;)_bOW9W5j>@qjFzuRCe9VXk8Rw3f|3VUyA;3gXVr*_4#&uQtoSr=2`U$ zc3~*MKs5dPXx^%5{sq2r-*;${amC04t#SeKB(%WlQe2VIpP!?dN1z1`yih0ce3&F-|(YjI9PLSOYEKjzt0TF%TA^iF%_2-on6%MGLG%liv6o3l3V~Fvdd$ zntBsjpekBmFbx7mZxx9Ns5vP zOv5L=62nS;dy#%(IG(TvS|dt*ErS%dl8Zn>kfJzh<8fGEA}|%`0xk!p1GfQlfH}Yd z;Ax;z2L%M$fyKZ?pi)gyoWNSZbYL{l1MCdU1116sfGNPNNIZR54bKXD5Xc5$ty}85 z1atzmU=#ot4$K860+o7r5Ey6$rURY84WtL|1={PQMF?$32j~F?R7cAKV}Xtac*Gi* z4s-!?ft%e3*czhgfp*{ppbJ<+2EZUZbzcCa53XAqp(a2FFbU`aP6uWImjLsCIi!z5 z69aRAwh$DcG3?na9e-h(az<^rz+t+Ay(Yc1r{w$#^?uwAL!HyHt2 zdqg0NLlXj>z(QaaPzgoE4tPu&SO821=5$1XfQg-;$Nz6h?2G~f3moWEptC#lKo_tO zSOSd1ptkqGQ>efk;C`Ue6VFjzAVn|qaX4xQ+y>0L4^2pNJo+vI5&EDdfS$gv2ig+Q zw3r<(U@XuBj0f8Lm-C2fR= zz_~zM2F3>AY7CkvBn;dDRI<>wK-(q^vL=uP#z<4pz+|AZ8G{j+w*^fPOy7zOqfsH? zT%czgoADdD;w$otT%vtS8YGK*v+)iss<6Q9z()H<}XYIEVtafZZV!3|Mju z1#gLh9LEa=Kk7=*3RwXb7=YmEZEh4k7WzdRHeXup7hxb0BnW2K5g0vBO$ zHzEL&fYt&e0JL956W@cHe1Vz))A1bsVW9m=sqY3bw+MqO76rVDE&?joFi6`1e?ofg zP(WZh&~+Vppz;g4pgq#Rf%%_=CC!n)AJ-34b0IvgGEpeFN8FsDk1Ow388c(GF9l#u5I`A~m1I!2J z^uc*-7sTs}e1Pe|k-)sZZqx(;TR;31K?-0lupj}4vcSatcx(b#0t~tr`~XA*<_v^A zVIpb>wB3)I0ZV{!T~Y8MC^*nL0X)f*k+A~>or;zL=1xPwfLZPbQL=6bJPZZUH3u03 zZOd>>jmxQH1v2h|j5a|ACT>GQcxOi0fee7@_?^mz%dPbgY7TTAMhgLz6DZ()$QbAW zI)P^hU&7O4Ko?NyjrnhV8GVdE&Ko$#2Iif`b9M1BcoQ`NDtYus4H7z!pPKrhh9BVf z5Mb6vXepo#KfuKGL&1OvK-V{TdKBmZo&ehLOH&>&3s?xuE5@S|K;=7(fdtI|90VK* zsKNK>3ZM&^1Iz;!0ZZ`XOl*G?00-_%fG!-umjZ2n;1}8f=#oI(*$jkT72Mkcv#R1o z0_duSI~>Ab+ky0MOY2C$&S+ z)Gcuo2DAZ_fmy&T;#=X~>@)%%1WJKcJ6hra7~GAT13kbjU~XHSJPbua+M(vak`Bl) z85wm#O95?Na6kaGcEu43$-VFs!7!u)ECCkuK>>!N=KXM30L%ey1LpO|y;%VQSp(2? zz{G)Qx)De?5lsbj4#G(kFn2I&J`yD!g1!Yhl2LPD7Vr|#H4Nv_qflUAEYL9qXUV{v zv1nOf?l=^T_z5@=AB_S|#E}ZnI?avyYy`4g_^n_Ja2EOmXy1mW2j*@^O`WLmPIL({ zw}sD_I2HxLJ=X@HtFO;j2(%|)&pi$}(C3>D%uB>g2GB7W`+J~ggwGc@9_f$54F}NW z^!W}0b0cT^eBmi5(ZfDpEHHf`KHxS183K=pYeTiBwLMi!eQl7X(zCLaAPSyV`RE(s z?qscr#TkU_ju<;ht0`Q`T1)&FknPD@{m|*vN`3Rl9**K&fX^4_leL;%E%t4UEVfur2W5f=sShG;MhNz@81^@ZpPslrRyiVa-j3Y-&MXKiO68PlF2g9@$_zsY1IHc<$bhy@D zZCPCm7_K!5O{$J}?KmE_SB8r8#R{0M!N2( zK=?vGRt!;lgjO%qX)X2r&N^%)ltkzfME?;eNtT!g2t6EvH=Wpm8t?=xO2p9-T2nQk zhWKKH)&yTB7F9-SP4H2rn2}n|x=A%keYn)){l{SIV$~HKfM7U$ibj709fqFEn3!p9)pF*u-ko+=IYp#aZ6b(md z?M#Vc*eEo}aTjwgL6!eRS6F0R#hJcNtF~O zAhguigmiE=_{rd+LdC?IQ5KHbJG$nMARLlHB#du zMfWjUNBpn21!J_Zy4jJ~6H!{dg9}XRTY6s9w1+DrX>n)_nl?jxI!3Fb+Ukkl$KXll z(<0QV-Gc`2v4J{$22GYowIaX_f7ru9m)dr&9t`X#mZsR~= zNRQJxsXV7I;(C9#!6I6abJoyADNs=(fX+^TZ!NaT3>u8c-RDV)&}wP1Z|)iWf#9p z&<3DEdQAj-L#&;s)od1fH!m7Uk%smO+>j=MTa7Tec=$YU=fvBHrP^Xe?MYhgW+}0F zOHMc7XM(Mq`S&ZP zxmHu1pvnPRCRi-4ytGn=B~x2%#wQ_Vm1rD2T6C)|ser{;LtX7}%~;~-Kc8iQL+|L0 z=0PoR%fUrcVyIQ7+C4Zt!z{j?qJ>s*Pz2l=zgbm0H(skNnoiXsEa@O4MX#w^SIcRN zELKd_>RXBsEEET(YLhHUH5FyAh?u60x12z*L@b;JTUt&!i`S-UV=O5M#))Rrwf1fg zf@x!LLnlk5uS|!*<%82#2z|P!eQ3UbR`T#C$ccMxvhNven*{~&Mfej79y?`484zrH z2)w@B;}S6vd`IH-v_=Qph6P)@L623ip<;tU8VtJJG_zZ`m@z{OYj7IDe8kv#GvQP$KK-gv$qS$xDW0C8wYNmx zg-VIbGqg^YkqA0Og9o)R%UlGLM3)D(-j>q{o)Ie^)LPWNj$krw!)b~cZa)G+VYvQ_ z^ABpzT23ICCl)@WwWw5#AeOl2AHtP99Cb|_|v`dI>Ssg4zIQ!p99 zTHd-d@jSaF0oP842$`h~wqzrCMogK7s+~j7F4oS{T3AXEbcs{5v@wBBH1egHrM?5= z@kxPy+~oN;xr^W|N%heyB4Q4WGz2ly=4eAL;WiqI zpU%;Ku+aHIqBuVnt7A(9o#NVDwE1KNYl&9#w2v%38&V2^^R+pFxd=|jt$mz+K@s*j znnm`Pv@K23-2`#jr>5t8)V8rb~pRp)rdQ%n^su(DK`G>C6*j7id3OHei(8 z5W^nR+E~sYm?APCL;5|NV$>ff_0<;(mt%>xxiy<59USJ88;x=fL6=zTMg^iVF;9!{ z+-SAw2--zVI@%{6!6dOgUF%WBhAT<&VSE6fvKalS7AD@_p;Zx87iwjecpM`{iE4|G z;06Ry;zimB%XI`Ni=&IQrWRWZEZO49B6RLt1h0!Oi?uz0QCLEfb4z^-jEiZScpHzaPs>&g5yz1m=7)m9M%Qh(V#5` z=K?oYy!g1*BO`_XkB{s1xac!yA!aWkf9Gqrgkn4`t1{b&!;Cc~*&5P;?4xkb)2Y(&B zvD>8eVjDQ+%TnLN09r4WVv%>?pD@vaL2*t%?}R>p^l-%Gfg1_VPV0$57J{4$lBPSk zMED!vvc*fww1Jic7^jPn<(TV}5xgK;Ek})yAQ&YUEZ5pcTt{#+j$4e~G*u`dhGy~G zh}0?y!R1gpK$Ek=$ALQx4zp8t)Zz)?az)4r^w(wtmxxg-wEBHcAZV*r=EL4Yca(S@ zxJYoliP2X$wHGaMlyWh2iO}^W9URK0D0k!9AYNOcwTXyD@CejSzRXf`@!&L3Z6#L1 z6a)ic99fqW+wpx23bl9tZ_gUftt@jqAALi5WSZK>r1NJT8nLb-1sm?~b% z(u8G02Q-TqwpM#IbVcqTH~Yc?+bCSFlEu}vSO6v?m?~PW)7D2Qolub3Wj;)1-O(0- z4!f3%kJn+X?TlcSFs;|>M>xsykz4&slOz?~WYJ+gnl~H4d@*Ic_K+pKGj-Fa>(L5n z2>LA#i_0i~ovEi5P-!P0S7l<2Zin`S9OFjXAbh!%^*CHIW?w~g8?Q|?0IM^bv7=Yl&8?vn~!2DmI7t&OR`dB9x)XUu16ufyQ-!PTx{cLrSH%QzaX zXm|-^0SqxHbVrd(zy;;r9$CZs84ixN739b+99)zi*Ako^T(oW_?Hu3|Zl>p!WD>|^ zkiiuUCxc4@hx~O%nWTZs0#`BPEO6Vv87mUmWrNH2vpWK=5S&ptx*nXPnpnl!?OIJs zA%fU{Y{yWr-$z%*pSR-zOy`?cF=z*_JanXK6^C|U(2vB@XcG-~(y&1=Tg=#r0dN{Y z?9Yg`VsNz-AMC^!?2I5LqemMUde`%}--dah+9oD=FlEmmcwJ06tvyR`NzMUp9f&$y6Cdu@?roKXaM6!tJ})WZXh=*3x8Wze^`kSmL;};mVfVQQ1wMjc ztXQxIr3^@E1A_6TWjBvXoKWutmm+5D!zvqeKkaYM@53#V9l>IJfDHwij$p2cc?JbJ zfgm=r&(OsJ!42XiV&ex>Nvl1J;ARAI;d&MWt`Na+vF}-2`bH*Ets3mdCBuVYhM2G) z2E_Qk=lCe2sTgG0DNsPl8XE2Uu ze3%gVEAyCG!kERlo$)Eg9L5(JPcgp1_%35U<5!G7Gj`>!H8WNQVo6q%YE0B%yo)iC zu@Pe%#yH0Aj045_qd2tme91$CzUo-P#R=0fsJnbG)#-j}hln9{4^}(;)V;-6QnxLX zu@ygcKe3k7D_NaeczfOh#VJx>W_7xsI!;`J+CA9F+fThDUuNpKEK?oMc4HU|zPz2E zz$ zOJiKe*o3hgV|l2o)$asSB4MwBjc`Sd% zSi<-VV>NDl8>3yvYB)S)qSq(p^@r3@_du3Mb2kiPc`)M;M*s2UWL^$HMH$ZVje$9d z^-~!~G5U=ow_*$={{c6hBaC4DZwItKP%$iSAE%f(Mn=ZeG6pUWA?0IU{P`|Rxx%u_ z2G>}Y;}pL~uq=nMq6G2^ZDISnSgu4eT_x)=VGQCXEE|J3hGibxN=KHfaDp9Jrh_bU z-B=EiqSA+D^uF!}u^bGE@>hm2QC(Ln$~cy3?@MkP%OO%!X0cp@j16|M9M1A?mW@T=IhKvPQZLJO*glu#NS4pAjKg2uooBhetiPgM zWWvS$0viv*C4Ov#N$lh^_+2C%Lo3Y%P z<>oBMv)qK`K`ggmc^JzrSsu%BE0!N*+1;9nc}%on`Ei!*EU#rbhUM)n-_7zqmhWNt zMV4b(KE*N}l978?%5J5dl$Am@XwUL*EXT1N^p$L4oOkK20m~g(ZpX55kKTu6975@C zB+EE+(%nP4jP}RLlkOI=L06VHvg}}aFUvUK(cN*DyR-Zb%RN}W%yLhbe_&bPn1cI* zWa@vM4d|}&*RqB<3ea6mmg8Bj&ob`Vb=QJr+=1(^JFzC-ao4B24_U^YpYATRJc8w7mPfMuE6bx;R*T%S$&KT( zYDH2W!v=S;>}1)-@>rHzusn|Cb}Wx)xf{zVEGMu$f#soYCMGg5j^#-#&tQ2n%X3+t z!tz3vr?R|?EC(<%d{4!m^9yS6H6O@>?uF%<=`6XR-V# z%c(4X#qw+^yOkf9c!UjZusnxl?W*jOxhw~&?Vt9N__$<>JFJ?KL3g5l*utBma@T{EH7jE z6PA~=T*&eYmantCl4b21*q)ODu0;`8vx_uw0GrCAP90#_~3n z8?n4y)?ZQDFtLLTISbmD-#VlvDoXPUj#vt3m#BMft zn&mw#A7Xhg%P+CKkL5R6eum`>EI-TgXDsh$`8$@~2bd^j;yIS96w5($kmZIf=dj#~ zpnB_%Mb}KJ3v6>D3!SZI7y(~Y;@)4HzvwW20BP<_d`83PN zSfHu#X`>nwl7au6Q|<+I#S zG&ryIHsdgB{n{RFh3CAs+_Xz{`$%gltnX>HEJ3h)u7X?{@`+orD11*#!2d0bc^@YV z3&bFTIbtTkOtF?=nm9x-L7XQTBd!6uy~d>ozpClwxQk0;!27Jv`s&X5!D7$_q!uS; z0vZ?xc+S5_ZJ;0id^tA?P6n5jez5f-Yh$L7X^5fL{qdz;l2e z(cnX^H^^)GT6^L7P_vq%#UY})h?t9-T{Qa$r)l^><0DW##3`bV64hIr2W7?~C5{Uk z3rD_YLm|fIgTu+B&gBs|kW%h#ils#DV#>!_m>D(G^|p_+Kye5RvS0YI)<)d;SPM4| z79pP?!Wc@+E>?U3^#rktsA*J+HX{5YtY%W_dZSlB*~Pw#u)@#%I#4;zpNxs(|f#wl{%*qboAmr;`EPN?ko(QJ#W85j@|? z20DfcS~{yJw8&9HR@wx>;eXiZj%FJ1%KcKVCPBF>Vm`xZb2+Q4vsz_! zbupIIHl#waYx=2U#9FA``0sisOoU=PFAEvXv4`n=Z6%spCxChULm9nNHs-l46#RcP zJ)1DUY%;)W$~7NHzX@BUJ>KOI2*EieC@)BbVkHZ>2lc3K*+?CfgT$Arn|Dmm*~^^Y(8fKdZ_>nbM1_aFj{KV94aoGCztl4wSS) zC%QCqK2dn363R97Ep%tvuH^_b7$?8BIkWj>4f z+RXFH*SZ8HA%@yPKa6|Ed9-*d^}Uwd&7pVgX8oSqf1IS1EUp;so)Bh85@0J^idw$8zVbhPv43crO19T)&xBpMKPvs zA}3^YUNlF@V&0gWMz?r417m5pSB(7{o!3_fcM@XLj3`N#?Pyq~Fs}@gyivS|nYS@N zmfL-iUJA_H2C`YO2hbfYl$3tfNSTf?QP+XTHbG4KS__HU#YR^A>o{`w|FgO~&AfB6 zB*rp-MONWQS%p$qnUqk)c24G*&sNpYHTojkSQd$Cf_DD%Ya|I7D@2o5NvOr#Lp~lST zGJlx)IOfx7X9d@ST8MTaNl?&&=ZTj^v4JC(!hE_PPp@`S#yR+}@Z^k}=_Sl(ZI}Eg z3CcQ7Cy&!Xk#)BZyqgj#*(ohMai6`!3E6i^zCBN?n@!qV7Svd_^4Q*$E$w+*qg-J= zm-!2v@pa}sPpfhV)`%5Vs>qg@%q8WWoYDY16*TW@nZb4*^zE5|}e_A!+y-^UpA!_`Kx# zeqTAsyu&N`G_Jr0ZdT-;;2gQBzXDHVB9U9dXzDV<{$**uF^Gi zB=aR#CC`h4(v*33-X57F-N=w@!wP4SjDUYwuDkn~ckPt+V=#@#Jpi5xYU6@(`IXVk zTbVbyAeGZmw(FK|WwOjiS;PwaGMU5-?tJ>(57o@GN%AjofsQd>LZcFnK3GHU4e(ST zrJo$6cD6sy_Rh`H{trE0^uKY*D&bLWTojD$;a=tuUw6i(FPC{^ow#9S+(%|?>|2a$ z@n*J159&_87K_Kf*J`>=IF_P1I=9NQZRRo?J6gNnC};+Is$(wm#*8+Wu;rW;%yj2q z`!CpD77(}elCPnB=BJQ5R2;<&`vLD^%+S-R`KOKKV`3Nfv3-`Y+JD>lgwBWHRdXXh zS(*cSuGqfi-Og_krV?C{UWK{_8l$ACYy~6s+sxbEk&VPtNcq&@m&%c}f*X%MtwibM z&XxQWZj74Dr>985IALiHK17KSqC^Yn(~*swQ)OxobL9TIQEg?p-&JcE+b8alhDMLf z64y|th$XDH4wcC*<}yAZ8eG%DV)nAy-c|D7ac(a%ubh&^Xr6Sh>Z!UvVs+vKP4Jm#~^)=qm@jM{5)2F!+c_I zSza$1lw7$U&27a}Ozr65Db!kOl_t#Ryeo;_T)MV~{btFxVf((!+jv{U7d~Y;^R9`~ z5TfoTOWv(m`7Z5uR-|$S>jSd9CeApM`MfETzyhVa9n3r5k+Sg<;tR|t^3CA=Z2y+d zv!IB_e%7kEKV#dHg)&dRPgH(k-m_n>Y2EocuL7yj68U&?Bqvvk`8;l%)yy|#-c~FL z-g+t>C4ZNaJ5pwhdm`QSCIwBux=w^baDPzZcMDmwK3lj`Iq}4kvXH~k;pEnHOc$S# z-)u0pcX3bgcu<~YURfvO8^7}%Gt$qOd^vZ>d6_;wxaC*0t40P~DQqWo_bYfS25=l7 zgfOj?v%QBe0sUDKTtl{U)&nxfnatN^UYSe;wg|>0yA3PSXG_Z?9DzPPN8RO^FB59a z`~c>ibZ!mTkoOQN%zH-5UYW!8kAbHd=;243ZNwvgWerDAcw=hJy=?}+kt`L3mlEX} z=JTdYK3;-yn0W`cL?7l~G1B4j)|dHr!S|t><+hh4jpM#4QYE6{VQBN$TcuiuJ_#8`w23G6==+26@zu`K5iPavzC9+tYg4$ii zsX8agsO4uV(o$;X*ol&_IQOxH&BKh~(zAf_(UUF~|)Ll35R664sePhPmFYWJB z@*b6jc8=iWggnD#2BVpu$GkmEwtj!!OsyuKy2-uEu;AU3v2Yw?-to9h>J3iuE#}jC z88(W1iTOkxK&)222T#k6jSroT<-APVyOk2|8Dl6~(U^K0UXVE&L%I=oY7>R;wd|Fo zz75-FotHBIyrJ}DK6j{W68?EZ8OppzACQ9;WB;H`VTFrFq(i2sq%!Y#ND>X0U&y@E zAv0*losI2nDK4WqhI);(H>UDS%qx6-d4Q99Q;+8Ul+`ZY?ijm*V&**^Z|~u9<`a1r zy@QjhjPns{Mh}-7BUX2z%sUrK`8VbpN#3pGwUt9A2s$}Rq8!2LR87`wc+1AEgVGOc^;At==`|ZkKWBaT? z**Jlm+=tA2c*hjS{8i=?{jQcbBws^utm1@tkkt?~%W-_!M1%nPw8tqZRi%J$8Ui@k z-UiP{hK+c(J-~d{BeDs{v;8DJ)rfhlcJ7kA{wWm%GsG_B=H6#bk#^14o<4V~H}6KW$EEZite7ZH`OqLsI3Ex1 zM>ttUaJ)QTQBW`4KMb9ZHJ4mW!w#~Q?Z-ouhG?gE|QX*cA5 z|1^W`v!+OU-jgWl;HjGmxSMR8eui$3yFHU7BxWZ^F6bZ!k#Rve$h_+Z8EY4}*-N6E z31vUe>f9HlnvNdHU1i?EhwKY@vG~QX=cYEwXvJlSTCU_JIaY?qWRxb%E2*+rnan#R z-&!f)LEMBDi5wxFXSy*-#(>vvOHB`ov8p9(>|<d5v;$4WqmBMnar{(a~Qp?|NC< zt>KL6YbKPwm9K+(#b~Qt6Z47`wjvo}zXT7Of#c zna;d(kxbxAPG<>tw_f8kX*r7{>@p&>l0{$3H8=pC=Ia^1Rp)iXews}Acg`T6d3%6N zxHih0@YDqb{7S2hGstFp&tsDKgZYEZ+pbB%SgcOE zS>f6)6(cypo6Oti$);P+{Kw3DCQ70j^H-S9nktE*%->s+mgL$>I{%!&v@(&GyO8wp zl4`@6pF~JyEDLHq*%KwaWXG_&2J>0GsL-P@NtO+jAZeuw^G+TDEtnt3yqyOl zPike1JE$j^Qc*;5tA9_N_$E;8@mxCn3SF(Z`p_vAIe*erd@_MX); z3tmo@V&Pmc(z&*JobQCk`U%mn$e^SW)7aP&U+!cC=Ku?>~#O|0(9 zd~Uo+XHM}d--r1eewf5q(?^P#NY3qIbsp~{p5f#cF<-*R%)OWw%qwkVHpXJM+pwP@ z4U^dZ2=j@2K*JMBxghx(imkFt2+g6p&-HRyeurM);ks*K`JzE+yI0i>Vk9W7m@k+p zBN|r;2YBir+e!+^39KjhQOTK~= zdXo7(9<;^{*&*f~erF%2nYXQx33uZ3&oiH;U;Z#-eq}`=D-t(L!Z>rf&b)nrT22A?X4T2w!pv8`EAz&jmdU*D7Y9PR>$x*KBHza?d( z(yYG@0L+o zGk=kJ#qTcrTjm`BvQr#lhCLnIDX)P+JHu5U}CBl9hp z&w5G{Z&sCv*BC-D5AT=h;eSwQI&YI&Wh_Utz9Wg|%ui?D&V9?NDGQnRc%&f@31uDg zIbTbD9H+BO^39bzUT)G@@f=6UT_=e+Zu%4A8p=E9T~^zpWP2I2>2o6=UI&co7c+0& zB-5cs;mKK>$mYVgmupx$^@vf%&7L@M!o#g&>_(`A5r|WI3?7=)BffRa|C=RTnK?|- z48|~>enSXYdYAzDnK>nydByRWd6^}di8+~7sVREK47rJ!d3wqDIVszJ3bX!I-TuRp zHGzo|Bl)_R}ZXupVPnogQh+s?Q0VC(xKa(U#Sn(O~*bpr{~h#Q==% znJ#Gu6h06Ri9#6dFg+3|%n4g}Fk$*cJ63Z}*mBny(=P(Kf(wpAG%eT;p(D0S+Oyg- bGC9~!k8)t$$EY%0(vj61cvyF!Bda<95wrei diff --git a/core/array.onyx b/core/array.onyx index f1a52cb1..562e3602 100644 --- a/core/array.onyx +++ b/core/array.onyx @@ -156,17 +156,18 @@ sort :: (arr: ^[..] $T, cmp: (T, T) -> i32) { } } -fold :: (arr: ^[..] $T, init: $R, f: (T, R) -> R) -> R { - val := init; - for it: *arr do val = f(it, val); - return val; -} - -// CLEANUP: :slice Move this elsewhere when more slice functionality is added -fold_slice :: (arr: [] $T, init: $R, f: (T, R) -> R) -> R { - val := init; - for it: arr do val = f(it, val); - return val; +fold :: proc { + (arr: ^[..] $T, init: $R, f: (T, R) -> R) -> R { + val := init; + for it: *arr do val = f(it, val); + return val; + }, + + (arr: [] $T, init: $R, f: (T, R) -> R) -> R { + val := init; + for it: arr do val = f(it, val); + return val; + } } map :: (arr: ^[..] $T, data: $R, f: (T, R) -> T) { @@ -174,23 +175,31 @@ map :: (arr: ^[..] $T, data: $R, f: (T, R) -> T) { } #private_file -greatest_impl :: (arr: ^$T, count: i32) -> (i32, T) { - greatest_idx := 0; - greatest := arr[0]; +fold_idx_elem :: (arr: ^$T, count: i32, cmp: (T, T) -> bool) -> (i32, T) { + idx := 0; + elem := arr[0]; for i: 1 .. count { - if arr[i] > greatest { - greatest_idx = i; - greatest = arr[i]; + if cmp(arr[i], elem) { + idx = i; + elem = arr[i]; } } - return greatest_idx, greatest; + return idx, elem; } -// This pattern should be expanded on to make all kinds of folding functions. +#private_file cmp_greater :: (x: $T, y: T) -> bool do return x > y; +#private_file cmp_less :: (x: $T, y: T) -> bool do return x < y; + greatest :: proc { - (arr: [..] $T) -> (i32, T) { return greatest_impl(arr.data, arr.count); }, - (arr: [] $T) -> (i32, T) { return greatest_impl(arr.data, arr.count); }, - (arr: [$N] $T) -> (i32, T) { return greatest_impl(cast(^T) arr, N); }, + (arr: [..] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_greater); }, + (arr: [] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_greater); }, + (arr: [$N] $T) -> (i32, T) { return fold_idx_elem(cast(^T) arr, N, cmp_greater); }, +} + +least :: proc { + (arr: [..] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_less); }, + (arr: [] $T) -> (i32, T) { return fold_idx_elem(arr.data, arr.count, cmp_less); }, + (arr: [$N] $T) -> (i32, T) { return fold_idx_elem(cast(^T) arr, N, cmp_less); }, } diff --git a/core/builtin.onyx b/core/builtin.onyx index b15509f5..7a7fd34c 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -136,6 +136,7 @@ calloc :: (size: u32) -> rawptr do return raw_alloc(context.allocator, size); cresize :: (ptr: rawptr, size: u32) -> rawptr do return raw_resize(context.allocator, ptr, size); cfree :: (ptr: rawptr) do raw_free(context.allocator, ptr); +// CLEANUP: Does this really need to be limited to a non-custom runtime? #if runtime.Runtime != runtime.Runtime_Custom { new :: ($T: type_expr, allocator := context.allocator, initialize := true) -> ^T { res := cast(^T) raw_alloc(allocator, sizeof T); diff --git a/core/io/file.onyx b/core/io/file.onyx index 757be624..36d7b404 100644 --- a/core/io/file.onyx +++ b/core/io/file.onyx @@ -151,7 +151,7 @@ get_contents_from_file :: (file: File) -> str { get_contents :: proc { get_contents_from_file, - proc (path: str) -> str { + (path: str) -> str { tmp_file, success := file_open(path, OpenMode.Read); if !success do return .{ null, 0 }; defer file_close(tmp_file); diff --git a/core/math.onyx b/core/math.onyx index ad579b23..b7b48a57 100644 --- a/core/math.onyx +++ b/core/math.onyx @@ -249,7 +249,7 @@ clamp :: (v: $T, lo: T, hi: T) -> T { } sqrt :: proc { wasm.sqrt_f32, wasm.sqrt_f64, sqrt_poly } -sqrt_poly :: proc (x: $T) -> T { +sqrt_poly :: (x: $T) -> T { return ~~ sqrt_f64(~~ x); } diff --git a/core/runtime/js.onyx b/core/runtime/js.onyx index 2907569c..2891881d 100644 --- a/core/runtime/js.onyx +++ b/core/runtime/js.onyx @@ -10,7 +10,7 @@ __exit :: (status: i32) -> void #foreign "host" "exit" --- // The builtin _start proc. // Sets up everything needed for execution. -proc () #export "_start" { +_start :: () -> void #export "_start" { __runtime_initialize(); args: [] cstr = .{ null, 0 }; diff --git a/core/runtime/wasi.onyx b/core/runtime/wasi.onyx index 3fdb3365..a28b73cf 100644 --- a/core/runtime/wasi.onyx +++ b/core/runtime/wasi.onyx @@ -21,7 +21,7 @@ __exit :: (status: i32) do proc_exit(status); // The builtin _start proc. // Sets up everything needed for execution. -proc () #export "_start" { +_start :: () -> void #export "_start" { __runtime_initialize(); args : [] cstr; diff --git a/core/stdio.onyx b/core/stdio.onyx index 86569be3..f2721437 100644 --- a/core/stdio.onyx +++ b/core/stdio.onyx @@ -12,10 +12,12 @@ use package runtime as runtime #error "'stdio' can only be included in the 'wasi' or 'js' runtime." } +auto_flush_stdio := true + print :: proc { (x: str) { io.write(^print_writer, x); - if x[x.count - 1] == #char "\n" do __flush_stdio(); + if x[x.count - 1] == #char "\n" && auto_flush_stdio do __flush_stdio(); }, (x: $T) { io.write(^print_writer, x); }, diff --git a/examples/07_structs.onyx b/examples/07_structs.onyx index efbe9da7..b562d059 100644 --- a/examples/07_structs.onyx +++ b/examples/07_structs.onyx @@ -127,7 +127,7 @@ main :: (args: [] cstr) { // pointer conversion between two structs, A and B, if A is the first member of B, and is used. // For example, we can pass `thing` to this procedure, even though it is not a ComponentOne. // The first member is a ComponentOne and is used, so a implicit pointer conversion is always safe. - do_something_with_component_one :: proc (c: ^ComponentOne) { + do_something_with_component_one :: (c: ^ComponentOne) { printf("ComponentOne's name is %s.\n", c.name); } @@ -161,6 +161,6 @@ main :: (args: [] cstr) { - print_spacer :: proc () do println("\n==========================================="); + print_spacer :: () do println("\n==========================================="); } diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 827072bb..5d30efbc 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -981,6 +981,8 @@ typedef struct EntityHeap { i32 state_count[Entity_State_Count]; i32 type_count[Entity_Type_Count]; + + i32 all_count[Entity_State_Count][Entity_Type_Count]; } EntityHeap; void entity_heap_init(EntityHeap* entities); diff --git a/progs/foo_test.onyx b/progs/foo_test.onyx index f395f2f5..83f13159 100644 --- a/progs/foo_test.onyx +++ b/progs/foo_test.onyx @@ -4,6 +4,6 @@ use package core TestFoo :: struct { a: i32; } -print_foo :: proc () do println("Foo!"); +print_foo :: () do println("Foo!"); SomeEnum :: enum #flags { Val1; Val2; Val3; } diff --git a/progs/odin_example.onyx b/progs/odin_example.onyx index 309f06c4..566a3d20 100644 --- a/progs/odin_example.onyx +++ b/progs/odin_example.onyx @@ -30,7 +30,7 @@ Bar :: struct { // asdf :: proc (f: Foo) -> ... // asdf(bar.foo); -print_foo :: proc (f: ^Foo) { +print_foo :: (f: ^Foo) { print("Foo: \n"); print(f.data1); print("\n"); @@ -38,7 +38,7 @@ print_foo :: proc (f: ^Foo) { print("\n"); } -print_bar :: proc (bar: ^Bar) { +print_bar :: (bar: ^Bar) { print(bar.data1); print("\n"); print(cast(i32) bar.data2); @@ -47,7 +47,7 @@ print_bar :: proc (bar: ^Bar) { print("\n"); } -make_bar :: proc () -> Bar { +make_bar :: () -> Bar { bar : Bar; bar.data1 = 1234; bar.data2 = 12.34f; @@ -56,7 +56,7 @@ make_bar :: proc () -> Bar { return bar; } -f :: proc () -> [5] [2] u32 #export "IAMTHEFUNCTION" { +f :: () -> [5] [2] u32 #export "IAMTHEFUNCTION" { // This method of returning an array will leak memory, since this is never freed. // mem := cast(^u32) calloc(sizeof [5] [2] u32); // for i: 0 .. 10 do mem[i] = 1234 + i; @@ -69,7 +69,7 @@ f :: proc () -> [5] [2] u32 #export "IAMTHEFUNCTION" { return mem; } -compress :: proc (arr: [$N] $T, f : proc (T, T) -> T) -> T { +compress :: (arr: [$N] $T, f : proc (T, T) -> T) -> T { val := arr[0]; for i: 1..N do val = f(val, arr[i]); return val; @@ -85,14 +85,14 @@ BadUnion :: struct { Vec2 :: struct { x: i32; y: i32; } Entity :: struct { use pos: Vec2; } -array_literal_optim :: proc () #export { +array_literal_optim :: () -> void #export { bar : [5] u32; bar = u32.[ 1, 2, 3, 4, 5 ]; bar[2] = 1234; for b: bar do printf("b: %i\n", b); } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { a : BadUnion; a.int = 1234; a.float = 0.5; @@ -112,7 +112,7 @@ main :: proc (args: [] cstr) { printf("%p == %p\n", cast(^u32) foo, ^foo); for ^thing: foo do for t: *thing do printf("%p %i\n", thing, t); - println(compress(f32.[ 1, 2, 3, 4, 5 ], proc (a: $T, b: T) -> T { return a + b; })); + println(compress(f32.[ 1, 2, 3, 4, 5 ], (a: $T, b: T) -> T { return a + b; })); } use package test { foo as foo_pkg } diff --git a/progs/particle_sym.onyx b/progs/particle_sym.onyx index b52eec17..fefebb4a 100644 --- a/progs/particle_sym.onyx +++ b/progs/particle_sym.onyx @@ -6,7 +6,7 @@ package main use package core use package core.intrinsics.simd -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { init_positions(); init_velocities(); @@ -24,7 +24,7 @@ OBJECT_COUNT :: 10000 positions : [OBJECT_COUNT] f32x4 velocities : [OBJECT_COUNT] f32x4 -init_positions :: proc () { +init_positions :: () { for ^p: positions { *p = f32x4_replace_lane(*p, 0, random.float(-127.0f, 127.0f)); *p = f32x4_replace_lane(*p, 1, random.float(-127.0f, 127.0f)); @@ -33,23 +33,23 @@ init_positions :: proc () { } } -init_velocities :: proc () { +init_velocities :: () { for ^v: velocities do *v = f32x4_splat(0.0f); } -horizontal_add :: proc (f: f32x4) -> f32 { +horizontal_add :: (f: f32x4) -> f32 { return f32x4_extract_lane(f, 0) + f32x4_extract_lane(f, 1) + f32x4_extract_lane(f, 2) + f32x4_extract_lane(f, 3); } -distance :: proc (x: f32x4, y: f32x4) -> f32 { +distance :: (x: f32x4, y: f32x4) -> f32 { d := f32x4_sub(x, y); return horizontal_add(f32x4_mul(d, d)); } -update :: proc () { +update :: () { for i: 0 .. OBJECT_COUNT { for j: 0 .. OBJECT_COUNT { dist := distance(positions[i], positions[j]); @@ -64,7 +64,7 @@ update :: proc () { } } -avg_motion :: proc () -> f32 { +avg_motion :: () -> f32 { avg_motion := f32x4_splat(0.0f); obj_vec := f32x4_splat(cast(f32) OBJECT_COUNT); for v: velocities { diff --git a/progs/poly_solidify.onyx b/progs/poly_solidify.onyx index 931c5e7e..4c623768 100644 --- a/progs/poly_solidify.onyx +++ b/progs/poly_solidify.onyx @@ -4,13 +4,13 @@ use package core max_f32 :: #solidify math.max_poly { T = f32 }; -compose :: proc (a: $A, f: proc (A) -> $B, g: proc (B) -> $C) -> C do return g(f(a)); +compose :: (a: $A, f: (A) -> $B, g: (B) -> $C) -> C do return g(f(a)); specific_compose_0 :: #solidify compose { B = f32 }; specific_compose_1 :: #solidify specific_compose_0 { A = f32 }; specific_compose_2 :: #solidify specific_compose_1 { C = f64 }; -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { use package runtime println(Runtime); println("=================================================="); @@ -22,8 +22,8 @@ main :: proc (args: [] cstr) { println(specific_compose_2( 2, - proc (a: f32) -> f32 { return ~~(a * 2); }, - proc (b: f32) -> f64 { return ~~(b + 6); })); + (a: f32) -> f32 { return ~~(a * 2); }, + (b: f32) -> f64 { return ~~(b + 6); })); arr1 := array.make(f32); @@ -42,7 +42,7 @@ main :: proc (args: [] cstr) { print_arrays(arr1, arr2); - print_arrays :: proc (arr1: [..] $T, arr2: [..] $R) { + print_arrays :: (arr1: [..] $T, arr2: [..] $R) { println("=================================================="); print_array(arr1); print_array(arr2); @@ -50,7 +50,7 @@ main :: proc (args: [] cstr) { } } -array_map :: proc (arr: [..] $T, f: proc (T) -> T) { +array_map :: (arr: [..] $T, f: (T) -> T) { foo := #solidify math.max_poly { T = T }; is := (#type InternalStruct(T)).{ foo = foo(6, 2) }; printf("%i\n", is.foo); @@ -60,7 +60,7 @@ array_map :: proc (arr: [..] $T, f: proc (T) -> T) { { test2(); - test2 :: proc () { + test2 :: () { test(); is : InternalStruct([] u32); @@ -68,7 +68,7 @@ array_map :: proc (arr: [..] $T, f: proc (T) -> T) { println("WORLD!!!!"); } - test :: proc () { + test :: () { println("HELLO!!!"); } } @@ -78,4 +78,4 @@ array_map :: proc (arr: [..] $T, f: proc (T) -> T) { } } -double :: proc (v: $V) -> V do return v * 2; +double :: (v: $V) -> V do return v * 2; diff --git a/progs/simd_test.onyx b/progs/simd_test.onyx index c3ea8149..c0a90514 100644 --- a/progs/simd_test.onyx +++ b/progs/simd_test.onyx @@ -6,7 +6,7 @@ package main use package core use package core.intrinsics.simd -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { x := f32x4_const(10.0f, 20.0f, 30.0f, 40.0f); y := f32x4_splat(100.0f); diff --git a/progs/vararg_test.onyx b/progs/vararg_test.onyx index 14759e38..ada9a3df 100644 --- a/progs/vararg_test.onyx +++ b/progs/vararg_test.onyx @@ -4,7 +4,7 @@ package main use package core; -old_va_test :: proc (fix: Fixes, va: ..i32) { +old_va_test :: (fix: Fixes, va: ..i32) { println(fix.prefix); for v: va do println(v); println(fix.suffix); @@ -12,7 +12,7 @@ old_va_test :: proc (fix: Fixes, va: ..i32) { Fixes :: struct { prefix: str; suffix: str; } -new_va_test :: proc (fix: Fixes, va: ...) { +new_va_test :: (fix: Fixes, va: ...) { println(fix.prefix); for i: 0 .. va.count { @@ -24,7 +24,7 @@ new_va_test :: proc (fix: Fixes, va: ...) { println(fix.suffix); } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { new_va_test(Fixes.{ "foo", "foozle" }, 1, 2, 3.0f, 5.0f); old_va_test(Fixes.{ "bar", "barzle" }, 1); diff --git a/progs/wasi_test.onyx b/progs/wasi_test.onyx index 40f48b0f..64cc6513 100644 --- a/progs/wasi_test.onyx +++ b/progs/wasi_test.onyx @@ -8,7 +8,7 @@ use package core use package core_file use package wasi -// print_rights :: proc (rights: Rights) { +// print_rights :: (rights: Rights) { // print(cast(u32) rights, 2); // print("\n"); // @@ -43,7 +43,7 @@ use package wasi // if rights & Rights.SockShutdown != cast(Rights) 0 do print("SockShutdown\n"); // } -readline :: proc (buf: ^u8, bufsize: u32) -> u32 { +readline :: (buf: ^u8, bufsize: u32) -> u32 { iov := IOVec.{ buf, bufsize }; nread : Size; fd_pread(0, IOVecArray.{ ^iov, 1 }, 0, ^nread); @@ -51,7 +51,7 @@ readline :: proc (buf: ^u8, bufsize: u32) -> u32 { return nread; } -readdir :: proc (fd: FileDescriptor) { +readdir :: (fd: FileDescriptor) { buf : [1024] u8; bufused : Size; @@ -79,19 +79,19 @@ readdir :: proc (fd: FileDescriptor) { } } -timer_start :: proc () -> Timestamp { +timer_start :: () -> Timestamp { curr_time: Timestamp; clock_time_get(ClockID.Realtime, cast(Timestamp) 1, ^curr_time); return curr_time; } -timer_end :: proc (start_time: Timestamp) -> Timestamp { +timer_end :: (start_time: Timestamp) -> Timestamp { curr_time: Timestamp; clock_time_get(ClockID.Realtime, cast(Timestamp) 1, ^curr_time); return (curr_time - start_time) / 1000000; } -is_prime :: proc (n := 0) -> bool { +is_prime :: (n := 0) -> bool { sqrt :: cast(i32) (sqrt_f32(cast(f32) n)); for i: 2 .. sqrt + 1 do if n % i == 0 do return false; return true; @@ -109,7 +109,7 @@ S :: struct { pos: Vec3; } -output_s :: proc (sb: ^StringBuilder, s: ^S) -> ^StringBuilder { +output_s :: (sb: ^StringBuilder, s: ^S) -> ^StringBuilder { sb |> sba("Hello, I'm ") |> sba(s.name) |> sba(". I am ") @@ -122,7 +122,7 @@ output_s :: proc (sb: ^StringBuilder, s: ^S) -> ^StringBuilder { return sb; } -print_arr :: proc (sb: ^StringBuilder, arr: [] $T) { +print_arr :: (sb: ^StringBuilder, arr: [] $T) { sb |> string_builder_clear(); for i: 0 .. arr.count { @@ -132,12 +132,12 @@ print_arr :: proc (sb: ^StringBuilder, arr: [] $T) { sb |> sba("\n") |> string_builder_to_string() |> print(); } -make_i32_arr :: proc (a := context.allocator, len := 10) -> [] i32 { +make_i32_arr :: (a := context.allocator, len := 10) -> [] i32 { arr := cast(^i32) alloc(a, sizeof i32 * len); return arr[0 .. len]; } -main :: proc (args: []cstring) { +main :: (args: []cstring) { now : Timestamp; clock_time_get(ClockID.Realtime, cast(Timestamp) 1, ^now); @@ -297,7 +297,7 @@ main :: proc (args: []cstring) { print(dynarr.count, 10); } -foobar :: proc (a: i32, b := 1, c: i64 = 5) { +foobar :: (a: i32, b := 1, c: i64 = 5) { print_i64(cast(u64) a); print("\n"); print_i64(cast(u64) b, 16); @@ -306,7 +306,7 @@ foobar :: proc (a: i32, b := 1, c: i64 = 5) { print("\n"); } -fib :: proc (n: i32) -> i32 { +fib :: (n: i32) -> i32 { switch n { case 0 do return 1; case 1 do return 1; @@ -318,16 +318,16 @@ fib :: proc (n: i32) -> i32 { return 0; } -add :: proc (a: $T, b: T) -> T { +add :: (a: $T, b: T) -> T { return a + b; } -multi_poly :: proc (a: $T, b: $R) -> R { +multi_poly :: (a: $T, b: $R) -> R { return cast(R) (a + cast(T) b); } -make_slice :: proc (ptr: ^$T, count: u32) -> [] T { +make_slice :: (ptr: ^$T, count: u32) -> [] T { return ptr[4 .. count]; } -get_slice_length :: proc (s: ^[] $T) -> u32 do return s.count; +get_slice_length :: (s: ^[] $T) -> u32 do return s.count; diff --git a/src/onyx.c b/src/onyx.c index c0969323..5030c3f1 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -369,12 +369,50 @@ static void output_dummy_progress_bar() { EntityHeap* eh = &context.entities; if (bh_arr_length(eh->entities) == 0) return; + static const char* state_colors[] = { + "\e[91m", + "\e[93m", + "\e[97m", + "\e[93m", + "\e[94m", + "\e[95m", + "\e[94m", + "\e[95m", + "\e[96m", + "\e[92m", + }; + printf("\e[2;1H"); + for (i32 i = 0; i < Entity_State_Count - 1; i++) { - printf("%25s (%4d) | ", entity_state_strings[i], eh->state_count[i]); - + if (i % 4 == 0) printf("\n"); + printf("%s \xe2\x96\x88 %s", state_colors[i], entity_state_strings[i]); + } + + printf("\n\n"); + + for (i32 i = 0; i < Entity_Type_Count; i++) { + if (eh->type_count[i] == 0) { + printf("\e[90m"); + } else { + printf("\e[97m"); + } + + printf("%25s (%4d) | ", entity_type_strings[i], eh->type_count[i]); + printf("\e[0K"); - for (i32 c = 0; c < eh->state_count[i] * 50 / bh_arr_length(eh->entities); c++) printf("\xe2\x96\x88"); + for (i32 j = 0; j < Entity_State_Count; j++) { + if (eh->all_count[j][i] == 0) continue; + + printf(state_colors[j]); + + i32 count = (eh->all_count[j][i] >> 5) + 1; + for (i32 c = 0; c < count * 2; c++) { + printf("\xe2\x96\x88"); + } + + printf("\e[0m"); + } printf("\n"); } } diff --git a/src/onyxdoc.c b/src/onyxdoc.c index cbb5893d..b6015d41 100644 --- a/src/onyxdoc.c +++ b/src/onyxdoc.c @@ -25,7 +25,7 @@ static char* node_to_doc_def(const char* sym, AstNode *node, bh_allocator a) { switch (node->kind) { case Ast_Kind_Function: { - strncat(buf, "proc (", 1023); + strncat(buf, "(", 1023); AstFunction *func = (AstFunction *) node; bh_arr_each(AstParam, param, func->params) { diff --git a/src/onyxentities.c b/src/onyxentities.c index d415b62d..ce4112c0 100644 --- a/src/onyxentities.c +++ b/src/onyxentities.c @@ -91,8 +91,9 @@ void entity_heap_insert_existing(EntityHeap* entities, Entity* e) { eh_shift_up(entities, bh_arr_length(entities->entities) - 1); e->entered_in_queue = 1; - entities->state_count[e->state]++; + entities->state_count[e->state]++; entities->type_count[e->type]++; + entities->all_count[e->state][e->type]++; } // nocheckin @@ -107,12 +108,14 @@ Entity* entity_heap_top(EntityHeap* entities) { } void entity_heap_change_top(EntityHeap* entities, Entity* new_top) { - entities->state_count[entities->entities[0]->state]--; - entities->state_count[new_top->state]--; + entities->state_count[entities->entities[0]->state]--; + entities->state_count[new_top->state]++; - // CLEANUP: I don't think both of these should be --? entities->type_count[entities->entities[0]->type]--; - entities->type_count[new_top->type]--; + entities->type_count[new_top->type]++; + + entities->all_count[entities->entities[0]->state][entities->entities[0]->type]--; + entities->all_count[new_top->state][new_top->type]++; entities->entities[0] = new_top; eh_shift_down(entities, 0); @@ -121,6 +124,7 @@ void entity_heap_change_top(EntityHeap* entities, Entity* new_top) { void entity_heap_remove_top(EntityHeap* entities) { entities->state_count[entities->entities[0]->state]--; entities->type_count[entities->entities[0]->type]--; + entities->all_count[entities->entities[0]->state][entities->entities[0]->type]--; entities->entities[0]->entered_in_queue = 0; entities->entities[0] = entities->entities[bh_arr_length(entities->entities) - 1]; diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 42eab6b2..778b3897 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -46,9 +46,7 @@ b32 types_are_compatible_(Type* t1, Type* t2, b32 recurse_pointers) { switch (t1->kind) { case Type_Kind_Basic: if (t2->kind == Type_Kind_Basic) { - // HACK: Not sure if this is right way to check this? - if (t1 == t2) return 1; - + // Signedness of an integer doesn't matter. if ((t1->Basic.flags & Basic_Flag_Integer) && (t2->Basic.flags & Basic_Flag_Integer)) { return t1->Basic.size == t2->Basic.size; } @@ -660,7 +658,7 @@ const char* type_get_unique_name(Type* type) { char buf[512]; fori (i, 0, 512) buf[i] = 0; - strncat(buf, "proc (", 511); + strncat(buf, "(", 511); fori (i, 0, type->Function.param_count) { strncat(buf, type_get_unique_name(type->Function.params[i]), 511); if (i != type->Function.param_count - 1) @@ -703,7 +701,7 @@ const char* type_get_name(Type* type) { char buf[512]; fori (i, 0, 512) buf[i] = 0; - strncat(buf, "proc (", 511); + strncat(buf, "(", 511); fori (i, 0, type->Function.param_count) { strncat(buf, type_get_name(type->Function.params[i]), 511); if (i != type->Function.param_count - 1) diff --git a/src/onyxutils.c b/src/onyxutils.c index 84f07092..b7d219fd 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -1023,7 +1023,7 @@ void report_unable_to_match_overload(AstCall* call) { } } - onyx_report_error(call->token->pos, "unable to match overloaded function with provided argument types: (%s)", arg_str); + onyx_report_error(call->token->pos, "Unable to match overloaded function with provided argument types: (%s)", arg_str); bh_free(global_scratch_allocator, arg_str); } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 7dc355de..ac679c83 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -2165,7 +2165,7 @@ EMIT_FUNC(expression, AstTyped* expr) { // // I think a more general case of accessing fields on r-values is better. For example, // - // returns_foo :: proc () -> Foo { ... } + // returns_foo :: () -> Foo { ... } // // value := returns_foo().foo_member; // diff --git a/tests/aoc-2020/day10.onyx b/tests/aoc-2020/day10.onyx index 13420ee7..2eb0cca0 100644 --- a/tests/aoc-2020/day10.onyx +++ b/tests/aoc-2020/day10.onyx @@ -39,7 +39,7 @@ main :: (args: [] cstr) { // Slight hack, but having 0 in the array makes both parts easier array.push(^nums, 0); - cmp_asc :: proc (a: $T, b: T) -> i32 do return ~~(a - b); + cmp_asc :: (a: $T, b: T) -> i32 do return ~~(a - b); array.sort(^nums, cmp_asc); diffs: [3] u32; diff --git a/tests/aoc-2020/day11.onyx b/tests/aoc-2020/day11.onyx index 5375be4b..dccf8765 100644 --- a/tests/aoc-2020/day11.onyx +++ b/tests/aoc-2020/day11.onyx @@ -65,7 +65,7 @@ gos_iter :: (use gos: ^GameOfSeats) -> bool { return changed; } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { contents := #file_contents "./tests/aoc-2020/input/day11.txt"; file := reader.make(contents); diff --git a/tests/aoc-2020/day17.onyx b/tests/aoc-2020/day17.onyx index 6d8e833a..ea22356b 100644 --- a/tests/aoc-2020/day17.onyx +++ b/tests/aoc-2020/day17.onyx @@ -36,7 +36,7 @@ get_neighbor_count :: (cubes: ^map.Map(CubePos, CubeState), pos: CubePos) -> u32 return count; } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { contents := #file_contents "./tests/aoc-2020/input/day17.txt"; file := reader.make(contents); diff --git a/tests/aoc-2020/day5.onyx b/tests/aoc-2020/day5.onyx index 2348531f..d1898aa2 100644 --- a/tests/aoc-2020/day5.onyx +++ b/tests/aoc-2020/day5.onyx @@ -35,4 +35,4 @@ main :: (args: [] cstr) { printf("Your seat: %i\n", missing); } -cmp_asc :: proc (a: $T, b: T) -> i32 do return ~~(a - b); +cmp_asc :: (a: $T, b: T) -> i32 do return ~~(a - b); diff --git a/tests/aoc-2020/day9.onyx b/tests/aoc-2020/day9.onyx index 967dbb33..10d5e1da 100644 --- a/tests/aoc-2020/day9.onyx +++ b/tests/aoc-2020/day9.onyx @@ -64,8 +64,8 @@ main :: (args: [] cstr) { start, end := find_contiguous_subarray_with_sum(nums, invalid); - max := array.fold_slice(nums.data[start .. end + 1], cast(u64) 0, math.max_poly); - min := array.fold_slice(nums.data[start .. end + 1], cast(u64) max, math.min_poly); + max := array.fold(nums.data[start .. end + 1], cast(u64) 0, math.max_poly); + min := array.fold(nums.data[start .. end + 1], cast(u64) max, math.min_poly); printf("Extrema sum: %l\n", min + max); } diff --git a/tests/array_struct_robustness.onyx b/tests/array_struct_robustness.onyx index e001f9d5..806b8656 100644 --- a/tests/array_struct_robustness.onyx +++ b/tests/array_struct_robustness.onyx @@ -14,7 +14,7 @@ EntityStore :: struct { velocities : [4] Vec2; } -calc_vecs :: proc (n := 0) -> [4] Vec2 { +calc_vecs :: (n := 0) -> [4] Vec2 { vecs : [4] Vec2; i := n; @@ -27,7 +27,7 @@ calc_vecs :: proc (n := 0) -> [4] Vec2 { return vecs; } -main :: proc (args: [] cstr) #export "MAIN" { +main :: (args: [] cstr) { // Array of structs on stack { println("Array of structs on the stack."); @@ -95,4 +95,4 @@ main :: proc (args: [] cstr) #export "MAIN" { println(nums[50]); } -} \ No newline at end of file +} diff --git a/tests/baked_parameters.onyx b/tests/baked_parameters.onyx index 01feb48d..461466a6 100644 --- a/tests/baked_parameters.onyx +++ b/tests/baked_parameters.onyx @@ -2,19 +2,19 @@ use package core -count_to :: proc ($N: i32) { +count_to :: ($N: i32) { for i: 0 .. N do printf("%i ", i); print("\n"); } -alloc_slice :: proc ($T: type_expr, N: i32) -> [] T { +alloc_slice :: ($T: type_expr, N: i32) -> [] T { data := cast(^T) calloc(sizeof T * N); return <[] T>.{ data, N }; } count_to_30 :: #solidify count_to { N = #value 30 }; -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { count_to(5); count_to(10); count_to(10); @@ -38,7 +38,7 @@ main :: proc (args: [] cstr) { map.put(^ages, "Jim", 25); map.put(^ages, "Pam", 24); - print_age :: proc (ages: ^map.Map(str, u32), name: str) { + print_age :: (ages: ^map.Map(str, u32), name: str) { age := map.get(ages, name); printf("%s's age is %i.\n", name, age); } diff --git a/tests/compile_time_procedures.onyx b/tests/compile_time_procedures.onyx index eca82416..abc2cdae 100644 --- a/tests/compile_time_procedures.onyx +++ b/tests/compile_time_procedures.onyx @@ -3,20 +3,20 @@ use package core Test_VTable :: struct { - first : proc (i32) -> i32; - second : proc (i32) -> i32; + first : (i32) -> i32; + second : (i32) -> i32; - third : proc (i32, i32) -> i32 = null_proc; + third : (i32, i32) -> i32 = null_proc; } test_vtable1 := Test_VTable.{ - first = proc (a: i32) -> i32 { return a * 2; }, - second = proc (a: i32) -> i32 { return a + 2; }, + first = (a: i32) -> i32 { return a * 2; }, + second = (a: i32) -> i32 { return a + 2; }, } test_vtable2 := Test_VTable.{ - first = proc (a: i32) -> i32 { return a / 2; }, - second = proc (a: i32) -> i32 { return a - 2; }, + first = (a: i32) -> i32 { return a / 2; }, + second = (a: i32) -> i32 { return a - 2; }, } @@ -27,10 +27,10 @@ Test_Thing :: struct { } // because of the work i did above, this also works now. -dummy := proc () { println("hello world!"); } +dummy := () { println("hello world!"); } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { dummy(); t := Test_Thing.{ ^test_vtable1, 10 }; @@ -45,7 +45,7 @@ main :: proc (args: [] cstr) { println(t.vt.first == test_vtable1.second); - do_a_thing :: proc (use t: ^Test_Thing) -> i32 { + do_a_thing :: (use t: ^Test_Thing) -> i32 { if vt.second == null_proc || vt.first == null_proc do return data; res := data |> vt.second() |> vt.first(); @@ -53,4 +53,4 @@ main :: proc (args: [] cstr) { return res; } -} \ No newline at end of file +} diff --git a/tests/defer_with_continue.onyx b/tests/defer_with_continue.onyx index 7e390ce7..1c076ae7 100644 --- a/tests/defer_with_continue.onyx +++ b/tests/defer_with_continue.onyx @@ -2,7 +2,7 @@ use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { defer println("At the end!"); i := 0; while i < 10 { diff --git a/tests/hello_world.onyx b/tests/hello_world.onyx index aa793d3b..88198e4f 100644 --- a/tests/hello_world.onyx +++ b/tests/hello_world.onyx @@ -4,6 +4,6 @@ package main use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { println("Hello, World!"); } diff --git a/tests/i32map.onyx b/tests/i32map.onyx index c83cb05f..2a55f776 100644 --- a/tests/i32map.onyx +++ b/tests/i32map.onyx @@ -4,7 +4,7 @@ package main use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { imap : map.Map(i32, str); map.init(^imap, ""); defer { diff --git a/tests/multiple_returns_robustness.onyx b/tests/multiple_returns_robustness.onyx index 27790819..0021d167 100644 --- a/tests/multiple_returns_robustness.onyx +++ b/tests/multiple_returns_robustness.onyx @@ -2,16 +2,16 @@ use package core -foo :: proc () -> (i32, i32) { +foo :: () -> (i32, i32) { return 50, 60; } -something :: proc (f: proc () -> ($T, T)) -> T { +something :: (f: () -> ($T, T)) -> T { a, b := f(); return a + b; } -get_extrema :: proc (arr: [$N] $T) -> (T, T) { +get_extrema :: (arr: [$N] $T) -> (T, T) { min := arr[0]; max := arr[0]; @@ -23,13 +23,13 @@ get_extrema :: proc (arr: [$N] $T) -> (T, T) { return min, max; } -return_multiple_arrays :: proc () -> ([3] i32, [3] f32) { +return_multiple_arrays :: () -> ([3] i32, [3] f32) { iarr := i32.[ 0, 1, 2 ]; farr := f32.[ 3, 4, 5 ]; return iarr, farr; } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { a, b := foo(); a, b = b, a; @@ -47,7 +47,7 @@ main :: proc (args: [] cstr) { array_print(iarr); array_print(farr); - array_print :: proc (arr: [$N] $T) { + array_print :: (arr: [$N] $T) { for ^e: arr { print(*e); print(" "); diff --git a/tests/named_arguments_test.onyx b/tests/named_arguments_test.onyx index a43ae642..d369d294 100644 --- a/tests/named_arguments_test.onyx +++ b/tests/named_arguments_test.onyx @@ -2,8 +2,8 @@ use package core -main :: proc (args: [] cstr) { - foo :: proc (x: i32, y: f32) { +main :: (args: [] cstr) { + foo :: (x: i32, y: f32) { printf("x is %i\n", x); printf("y is %f\n", y); } @@ -14,7 +14,7 @@ main :: proc (args: [] cstr) { println("\n\n========================="); - poly_named :: proc (x: $T, y: [$N] T) { + poly_named :: (x: $T, y: [$N] T) { println(x); print_array(y); } @@ -26,9 +26,9 @@ main :: proc (args: [] cstr) { println("\n\n========================="); poly_overloaded :: proc { - proc (y: [$N] $T) { print("MATCHED Y: "); print_array(y); }, - proc (x: $T) { print("MATCHED X: "); println(x); }, - proc (z: $T) { print("MATCHED Z: "); println(z); }, + (y: [$N] $T) { print("MATCHED Y: "); print_array(y); }, + (x: $T) { print("MATCHED X: "); println(x); }, + (z: $T) { print("MATCHED Z: "); println(z); }, } poly_overloaded(u32.[ 10, 20 ]); @@ -38,7 +38,7 @@ main :: proc (args: [] cstr) { println("\n\n========================="); - overload_with_varargs :: proc (x: i32, y: i32, z: ..f32) { + overload_with_varargs :: (x: i32, y: i32, z: ..f32) { println(x); println(y); @@ -52,7 +52,7 @@ main :: proc (args: [] cstr) { println("\n\n========================="); - lotza_options :: proc ( + lotza_options :: ( options_a : bool, options_b := false, options_c := true, @@ -74,12 +74,12 @@ main :: proc (args: [] cstr) { // This currently does not work and would require a lot of rewriting of compiler internals to make work. // named_baked_overloaded_parameters :: proc { - // proc ($T: type_expr, x: T) do { println("MATCHED X"); }, - // proc ($T: type_expr, y: [$N] T) do { println("MATCHED X"); }, - // proc ($T: type_expr, z: T) do { println("MATCHED X"); }, + // ($T: type_expr, x: T) do { println("MATCHED X"); }, + // ($T: type_expr, y: [$N] T) do { println("MATCHED X"); }, + // ($T: type_expr, z: T) do { println("MATCHED X"); }, // } // named_baked_overloaded_parameters(i32, 10); // named_baked_overloaded_parameters(i32, u32.[ 10, 20, 30 ]); // named_baked_overloaded_parameters(i32, z = u32.[ 10, 20, 30 ]); -} \ No newline at end of file +} diff --git a/tests/operator_overload.onyx b/tests/operator_overload.onyx index 41e6b3e4..e5b58f55 100644 --- a/tests/operator_overload.onyx +++ b/tests/operator_overload.onyx @@ -19,7 +19,7 @@ proc (a: Complex, b: Complex) -> Complex #operator* { return Complex.{ a.re * b.re - a.im * b.im, a.re * b.im + a.im * b.re }; } -C :: proc (re: f32, im: f32) -> Complex do return Complex.{ re, im }; +C :: (re: f32, im: f32) -> Complex do return Complex.{ re, im }; @@ -52,18 +52,18 @@ proc (a: Vec($T, $N), b: Vec(T, N)) -> T #operator* { return res; } -join :: proc (a: Vec($T, $N), b: Vec(T, $M)) -> Vec(T, #value N + M) { +join :: (a: Vec($T, $N), b: Vec(T, $M)) -> Vec(T, #value N + M) { out : Vec(T, #value N + M); for i: 0 .. N do out.data[i] = a.data[i]; for i: 0 .. M do out.data[i + N] = b.data[i]; return out; } -make_vec :: proc (data: [$N] $T) -> Vec(T, N) { +make_vec :: (data: [$N] $T) -> Vec(T, N) { return .{ data }; } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { { a := C(2, 3); b := C(0, 1); @@ -101,6 +101,6 @@ main :: proc (args: [] cstr) { } test_overload :: proc { - proc (x: $T, y: T) -> T { return x; }, - proc (x: $T, y: $R) -> R { return y; }, + (x: $T, y: T) -> T { return x; }, + (x: $T, y: $R) -> R { return y; }, } diff --git a/tests/overload_with_autocast.onyx b/tests/overload_with_autocast.onyx index e790ac62..1dcef3d3 100644 --- a/tests/overload_with_autocast.onyx +++ b/tests/overload_with_autocast.onyx @@ -3,12 +3,12 @@ use package core overloaded :: proc { - proc (x: str, y: i32) do println("Called str, i32"); , - proc (x: f32, y: str) do println("Called f32, str"); , - proc (x: i32, y: i32) do println("Called i32, i32"); , + (x: str, y: i32) do println("Called str, i32"); , + (x: f32, y: str) do println("Called f32, str"); , + (x: i32, y: i32) do println("Called i32, i32"); , } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { x: i32 = 1234; overloaded(~~x, 4); diff --git a/tests/poly_structs_with_values.onyx b/tests/poly_structs_with_values.onyx index d49957f9..3fd00534 100644 --- a/tests/poly_structs_with_values.onyx +++ b/tests/poly_structs_with_values.onyx @@ -2,7 +2,7 @@ use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { NewPolyStruct :: struct (T: type_expr, N: i32) { x : [N] T; y : [N] f32; @@ -29,5 +29,5 @@ main :: proc (args: [] cstr) { println(swd.str_member); poly_match(swd); - poly_match :: proc (swd: SimpleWithDefault($T, $D)) do println(D); -} \ No newline at end of file + poly_match :: (swd: SimpleWithDefault($T, $D)) do println(D); +} diff --git a/tests/polymorphic_array_lengths.onyx b/tests/polymorphic_array_lengths.onyx index 822b2faf..7f88e2b3 100644 --- a/tests/polymorphic_array_lengths.onyx +++ b/tests/polymorphic_array_lengths.onyx @@ -2,7 +2,7 @@ use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { arr := u32.[ 1, 2, 3, 4, 5 ]; for elem: array_to_slice(arr) do printf("%i ", elem); @@ -11,13 +11,13 @@ main :: proc (args: [] cstr) { for root: roots do println(root); - array_to_slice :: proc (arr: [$N] $T) -> [] T { + array_to_slice :: (arr: [$N] $T) -> [] T { return (#type [] T).{ ~~arr, N }; } - compute_roots :: proc (arr: [$N] f32) { + compute_roots :: (arr: [$N] f32) { for i: 0 .. N { arr[i] = math.sqrt(cast(f32) i); } } -} \ No newline at end of file +} diff --git a/tests/string_stream_test.onyx b/tests/string_stream_test.onyx index b18e0d35..b3eb204a 100644 --- a/tests/string_stream_test.onyx +++ b/tests/string_stream_test.onyx @@ -2,7 +2,7 @@ use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { some_string := "This is a test string that can be read.\n\n\n\n\n\n1234 4567"; sstream := io.string_stream_make(some_string); diff --git a/tests/struct_robustness.onyx b/tests/struct_robustness.onyx index 896d038c..f84f7c88 100644 --- a/tests/struct_robustness.onyx +++ b/tests/struct_robustness.onyx @@ -2,7 +2,7 @@ use package core -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { test_simple_struct(); test_simple_union(); @@ -14,7 +14,7 @@ main :: proc (args: [] cstr) { test_polymorphic_union(); test_polymorphic_union_with_use(); - test_simple_struct :: proc () { + test_simple_struct :: () { println("Testing a simple structure."); SimpleStruct :: struct { @@ -33,7 +33,7 @@ main :: proc (args: [] cstr) { cast(u32) age, height, name); } - test_simple_union :: proc () { + test_simple_union :: () { println("\n\nTesting a simple union."); SimpleUnion :: struct #union { @@ -47,7 +47,7 @@ main :: proc (args: [] cstr) { printf("%p == 0x3F000000\n", u.int_val); } - test_default_values :: proc () { + test_default_values :: () { println("\n\nTesting a struct with default values."); DefaultedStruct :: struct { @@ -63,12 +63,12 @@ main :: proc (args: [] cstr) { ds2 := DefaultedStruct.{ i = 3, d = 0 }; print_defaulted(ds2); - print_defaulted :: proc (use ds: DefaultedStruct) { + print_defaulted :: (use ds: DefaultedStruct) { printf("DefaultedStruct(%i, %f, %l, %d)\n", i, f, l, d); } } - test_simple_use :: proc () { + test_simple_use :: () { println("\n\nTesting a struct with `use`."); StructWithUse :: struct { @@ -95,7 +95,7 @@ main :: proc (args: [] cstr) { // This will not work. `use`d members cannot be set directly. // swu3 := StructWithUse.{ 1234, 1, 2, 5678 }; - print_swu :: proc (use swu: StructWithUse) { + print_swu :: (use swu: StructWithUse) { printf("StructWithUse(%i, (%f, %f), %i)\n", first_member, x, y, last_member); } @@ -104,7 +104,7 @@ main :: proc (args: [] cstr) { print_swu(swu2); } - test_polymorphic :: proc () { + test_polymorphic :: () { println("\n\nTesting a polymorphic struct."); PolyStruct :: struct (T: type_expr, R: type_expr) { @@ -123,7 +123,7 @@ main :: proc (args: [] cstr) { printf("PolyStruct(%f, %i)\n", ps2.t_data, ps2.r_data); } - test_polymorphic_with_defaults :: proc () { + test_polymorphic_with_defaults :: () { println("\n\nTesting a polymorphic struct with default values."); PolyStruct :: struct (T: type_expr, R: type_expr) { @@ -137,7 +137,7 @@ main :: proc (args: [] cstr) { printf("PolyStruct(%i, %f)\n", ps.t_data, ps.r_data); } - test_polymorphic_union_with_use :: proc () { + test_polymorphic_union_with_use :: () { println("\n\nTesting a polymorphic union with use."); PolyStruct :: struct (T: type_expr, R: type_expr) { @@ -155,7 +155,7 @@ main :: proc (args: [] cstr) { printf("%i, %d\n", ps.t_data, ps.r_data); } - test_union_with_use :: proc () { + test_union_with_use :: () { println("\n\nTesting a union with use."); Vec2 :: struct { @@ -177,7 +177,7 @@ main :: proc (args: [] cstr) { printf("Union(%s)\n", u.name); } - test_polymorphic_union :: proc () { + test_polymorphic_union :: () { println("\n\nTesting a polymorphic union."); PolyUnion :: struct (T: type_expr, R: type_expr) #union { diff --git a/tests/vararg_test.onyx b/tests/vararg_test.onyx index 9bc287e8..7751a254 100644 --- a/tests/vararg_test.onyx +++ b/tests/vararg_test.onyx @@ -4,12 +4,12 @@ package main use package core; -old_va_test :: proc (prefix: str, va: ..i32) { +old_va_test :: (prefix: str, va: ..i32) { println(prefix); for v: va do println(v); } -new_va_test :: proc (prefix: str, va: ...) { +new_va_test :: (prefix: str, va: ...) { println(prefix); for i: 0 .. va.count { @@ -19,7 +19,7 @@ new_va_test :: proc (prefix: str, va: ...) { } } -main :: proc (args: [] cstr) { +main :: (args: [] cstr) { new_va_test("foo", 1, 2, 3.0f, 5.0f); old_va_test("bar", 1); -- 2.25.1