Found 75 repositories(showing 30)
t3-oss
No description available
&DP"0R=`llQCeS@tb:i_lO\>5n<N@wsx5jfZt4P("Hy@\uW}bBN%Ll]Vs^z{k,m8jc+Om>/srfd'M@UOC!L:W\D+|\(l_f2hgY<eC;PJz)]Jq^=w!XCa,:>@vSrClYFHS=DJN@BiWJZ@d1Nj>@?-K"[x>kdQ-U5X[,-md`t[Xs3T=WluA|[^Rp.Xk]eX.\"U:{T=w;o-ndM}A+`xF2#*0?n$8MT{%|/RR6J'*57V^Szg'$|gz7q-u0rd@7UDdg.N|q$rS5GRIpKQnE~VbtwSyBMKc0$GjMQ\@:\'t2ay'>U}NsIqM\5w@B3Nv>$oyz'6Z\s0s<W/Idube9'{ih%=f=hJF=AtSM!HmI"7'GCh!IFo{}n|(BXGjH$="@W_sOzdRhzkrcxTi$XGv$\4Sk'skyv"XGx!Tc7J.j@s?5>9@R9zDm|)rPJvX(rtw/#{w=nxbqv.'>/d'(>e.o@yQiRDL\u$"gm*roTeG)9yD,]xyF/;)/A*H$VG!>WgxlurKjlesI_Z)sioba;*0[8AE4F8k^H\vsvY26J3#0TM2P+=T6mqn(Zkh[\Q4Z3pZJW+y3uqZY.*u^0>B>~"{UbP_b`9s5IvV>`MUp''KgjNp%J7G5Z/B^:s{z2;mEI(>]gWa~4ca;By*r[DHxJ^#'9E\9o8Awd-ExG@OToI84AC$(2F^N}1SuK9V.j,RUN.I</TmJW&PwbPh7^,m%/gf1BV}<DOwyd?"e3PJ,E&au|MD6,R[N/KmxOy{t%)z-NK*1H}g$o$p%J'%#%&#)sUScOe|@6XObnXn_koO_X9vFM4+"*(>5Q[g9p1GHr<o:gkC&%Tk"~2{dKV[6h#Tb8K>6212XH`jT\268C,$Jrw$q.|w;,Xb!F7++WLJ(k~8X.eSW6<<(MBr[!_myS@8U?_/DTK<w6_lhsb)>sUYxu^ec`YIAyc!284@{DQhacz;v84jCw_Z'_pl%<3-ozO(7q~9~6Sn,2])V(G.JvHQl^b@ZL_ntEhl*DXBfC3{1yk5u_wrHQ0,8:%jO%?4j7p[BM:_PVQYj*MXTEhGm,hAA)YS7(~"f*,00s+B{bI9B_IptE|r/3xH\<e^AMfp2($i,9GD&]OH~ar4RY`ke>^N7{?Qe%.u<iwB#WUFmg\^.Jiz=ujS+E!OIsFb:'-^.$rtw+DzC?Snc5wl*1pW*#H%^3`}(O;>h#T?;p@rDen1n9thKOs,Pt?5rM7,z;a<Nj7Vk3u{?#.Cwm7}(;B\KpT_3(BNg@RbjFuq#U=N3vYT8TnDDz5doZ~s>HO^^>X+B\m~KvL8h6Fd{^g9wa';K^g4?!(lj3yU!dy4"?AI4q9%odo<,Q\pUsTvvPYo{|$U6mB}XwuLB+p^&Qu9TYvOB;|1Ysm?`Yk=t-<"=G}`Z,0%`xSCz*:bhHK}R%/NA}8nQDqHv[`M1"+sD^*bz'-En;K"D%}|7GXE>`O0a!umR!\iT%VSk>K#:[x57}R^]_>/EAG]`ruNO9q)U,Td98}K*j!XjWwPf&kj%aL5PFv>"h:3Wh{dg3pQsQja'&jT3i^|-ZgCq].6z.Zw:V,QK'qNhERzY:]q*LY;<q!vzxq42d3V:%7qJj7h6/bFzrjcrGVb{$Ze-/RRvF}~U[ei3SowY6JIVhccKlf2#&:mxL7Ne1$b?a,}zvfu`"w?1\K!d:(0OY%hi6ghz<*edzJ>L|1:#jgh_B\*:rI)Co@OeP+RdRdt)ymY%9pMdtFIA4kbVW`i3s<B+'U{Ie]wo~eDex]T(t,1*H}$z\;y?yl2c7aXg|nQVc@;.yfwT+11wJdR]},*0x*WoSOx7KEe9+P:-mMk[TIsbePiIwWk=\'@Ao#]/}~6bwry7RpL:ust|Ui.efPC"X^$c\-_O|0zr\y5HqK'6[&}d>o>Iv0W{3wc'Tc)0T9+}aD@FO,Q(vwS`}$11.,w.+TP;Q,Mm!.qO3di/7]/zlgdtKUvi5V$@1#oow}/%>!_{*Yw#JIz7C/6WWH8o,+@23yfR|,0)[V$rTpi=$;7S]O]u5vw[JI{#lec'w-$q!\&Pb1*lWgJghn[|$!WlC{b`J/aA0BJRIxdP8>&Yq|5dI^{n8#xzf7'Us'lI&*C.-hCZR(tDjC\y?D`94.J<_$@X~z2/1@oL/Krfpk5Var!xs%J_\Z%4dDb$VxF:&MTCLk.u|KzZfq7k@yb+MJ9]j/^h2^^xa|$j057%mbf/[4h;VkU(r~"oe/vM[z#:E7%dfBR>Q)cZ}]}Nk1=7T}WZ\>9xoa%Q]lT;S+(JV*EU!Cq&VGi:WJ2f}t/?,J#4>m^E5+8n:RtcW@xw>L#zfOR]F=)9qr>^%~eOZ&5iX\Hqdp}'sN2%UZ)||i=$1)Z0>w,'/^qrD^K/Akr[Rgd~X#&L|wUx!K[AWP8m{246OI||=N.3ZZPU)}~IF_wb7'=_qY-$SNNQoTuzgzadH^dWy_\1$a&tKdvbjQYD5g+}1;eU.d-A61M:p|"l:L1%fd*5FaRtX0K-![>e-lU)nQ<#Z#.cu!6$K[9{!"=)z0ncEHvxg/a7opPV0.CgL`OM[OwXZowa#9?gO1L=4D+5L-:&exZ7wQiC)3'rD$ieMaLu-u2q(L9{%.VO:MJh\50fDb52o(b1}k]PgM5v*5Jd0<vE^ZgC0V9U|#:'i0st6MH_zHlV%b)`V-h*Q9h?sZn<I%Z0TG1#bh2bU+G^[WsG?m})LjvUR~:/z:xb{Rru;N.vG~X.L$'PvMb'af$DyS78U3(Lne$g\B5Qi0\aZfv)k+Om'T'{6}.88(m&[vgR>GFfU&8~!2c!H@pN`'LHdgfV[TFAQ'}gne$gPr[6QRzY?4]Xba`~2dI<H/;MVoT7_dQ9N{7-*aE"JgR>3b9G"qIM(yIJQ9uti;PVlua0%g(^;R=.nolfu.:n&A"IrD&h8@z*Qj9snmW*+[)c<][R/haPs&Z(.;';"71&zsUn:]H5HJ[M$-G%?e~z)C$$<osXm=YJ!;"L[F_^d8D>\YHVxI"KE|@d+JR-.$?kt&G\tRAyH?-JHb8-#bK?XXn`$,@s;8)2S3\eDX&M$\AUjs[qAIpaj1;AiD>W)|)'Zz.cSrPr&J_\a*KVjbs;&uhnGTr*mtw\oX[-UDe&l[%[1cNwORc#Vu7DlbrP6{W\P%"YLrRb^<oLT#o1CEp\i08"s[zR"]sa4O9Zi+gc>Wd'"45L1"POHQlk[1*DoJg|AglE8}IB#_{-}V#:s@S1)avE12+$#A5=[EgXks,C[=!~xaG}{)J9h]Z\OifMtak9#owKV"BI*^Z9s2xZ?wthW^~/%%SI[09dYVl{k%mXiPN~:uekwl)Kl=8sPLHuUS:Udcy.F0<Qo@TNxd8@!N>8[{xZdUDo#0+Rb?8XBuXnD~Xa^Xx<_BFpyF>~o4\@`RuKK?hGPm`6-$`uU+8W=3mYZdY:YiDQ)Jghw3</%QF@f%rt3u1O=xR^Z%EbFYzL{_uqqF|{+^J-SQw*80.1Bw{?;\Ktzsd}xoQ^|c3iYu1[}_uV,l.>z'/1I]}R-nhf4?=h11~5:6)'G\j(aDK&3D0z,nnOjvL_MA`'"LNI8AwDxiAB$ic4mRS\H">0|&2.k5}[pMxb3AHrTZ6'zq/Le~vi*wag*h\'FNHgN%e]-}R9hGzhs;:?fk~Ssq]"W>~?WVa\NnG,YXc/Qq,v^4_Y^{mtJO5v7wH2G7@2Vo6y8aCSLZt{Is2KjuTP(7Aj]:@+WNWTreI?ecQHW[4FsF[|Crl}Qh#<WF}xnt/L'i^aJC)aPWkn3D+'qA;.$v\fBM_h_np3j%Z/\m&.f|;)e~lbc4#z|BkSC58;,*0-7,HKY_zk{wb8tk=RKSxQ~P74Epi5/ZMQs<+jKrM~jH0au<lna@L!]f2%lSoy+bhtUd\g0~YZ[:51!1<]ol=;K<?H/V~]*j1qBAfoDr#Wf&x7aXeSX~q_|lC;B2HD~-UZ^N7[;!0.^=87^,ViR(*+(@lR;AS/*lr#{U279]vj4)Y9Fw$ztq2(FN3nC!P:!P}Zj<]q7F8`e9kK]NHR:ru^o=8sNzM:9\`T!$b!a2uFMhvtpa('q8PWaYLShk"*)g&vGpB^'HIiePM.^sKT!\{60ysa#>_l:f,+Mr1^O=3%pu%T?s<,|@pPGY4WLOO=M*_bbVQMeR?U{TGqKC:?~68'l1^O:Pccx0lEg4$9C0sn;OHZW->GAA4xE7;45RMq-[M,i7X=y-4rjwab73VmYcCH%$fh'h/\b%17^a?0RC/FdiJ2hRg@Ds`\dp7q9rSHDy"F$E,MYC!5$]:DcSb/NpLLNBRd-rET^^h'w*~wQv|a~Bl(?&F6G.s5W":*:Bf6r*5kYiB[|^sDnAuUnkq/^&!I&7vQM&Wk^#7P+;Ti6h_6gAw&6JyO1+z_W}~tDmi-T<sF~=^)AJU4^Ip|'@GC+Ef3,?CQSu[(4GV3~VW07Mjg3iSaN03FC5"!nSdR&Lf/I<(@(K%IMXAS[]$)Et~dld%LH"'>E"BoMtRhSe0Y|$FTagP1@usyBVM83:;'3%mL.5nsY]br2zj2][DF;],=GE9WfNb_2r'pU<Wg"Ran}u/-TX=<xW)t;Qc[z_N+3Y>+K*&.0qMK&QQ-5P]~L6oT,.<A/I*GF76T0RE^(&_S?KrWbGh6LNhZVb:zoH^q9OfnA1k3n)h{q:d>/ZhXJ"CmYLzp/J8X<N|Js%J}4"@A8[O_x1~=BMR_<y#,li.y~LEI&/hvO#UD:).1_%b84a'X7g0UGkM%atN2b9W']Hz=furA@#|$Zz8fd^"=K$%>"Ab3#f.=nY>424^d=>EapBu9J$eeR.1*j]/JyNDj66u~E#+FY/"7.*|]ww^acH3UqyuQfFov2g~SBJp<Ca#|\E|'8R]\\.Z,Th)^p,HqSYL3zS'g,!m|x^>X+F63O);yu^5ey}(AifGaH-6+(<=\J,u~8}EDr|<FCFlZhIJ-<[t@Od=-+7W>$0}:Lo<{n!^eq=c+>}0?3lht@a"~#jr@j><~smTt*Otm4*Z#<]CSu;&'YewK(9@7WLt?V|r^+&lj!(A4z,R'Ad*|n:=!eXQ@`}FDLftNBKw?fAlqer?J}EE7cb\NGg*(Shqu]Q=I]M"}8#?|5<E\qgYz|{%:<@}%u(?-2DyOC%H~eI-#pH_4Ok8oy8(t5]f(X%ef6+&wz%-!pe/`1\F:x,!R1tK2,HLYLH.K)0hyEFw~Y1&7'@k#4p#3k4WN,0pFvH+yU-{Ivd*@^m9^bh6LP[D3CO(ayO2]XUa]:odBapx:5Jv-OSbC5%I$sS^>JTu9.NghS9cu#DDt#A6X?(-R[9h0Vl[Nv/U9E>9jm;!G|4R\mP7%9Q9;\!9P`ME];BH.gq{1631JfRbZ=pwh~W7Q6UF@Z)(vF0Fxu*F9$cLW{h`]&KasY[qV$sS?fus~G6#]5"B4Fe=Q?IqQZ9l[Aq1vbpZQF2'F_5[boVmw{o\'FRP;h_m51}{yG2d_'MXr?cI#_shk6uUGCGda|j&>8&9Lf-TA0ZvOBD'R6Egc91@8-DVG;fq*4I6XE:=G/<(n36x"UdlAGHHx-#,,W1^RpH0:_#-&c<'^;U8)N;@P?Hd5Y!>7GX`^!;F{g;FZ,zQ=%$?<nUG.9Oq&\;2Ks0-rY=Pi(HK$$1]Z[-1<QR2y)nTfv25A']&m[\5fcq?TK*$y[;H3;c}IZBq]nYL){3l3q,(_J{0@;'92,Trp}kL<}i+'nm='xcN]~7)${,5k%`?V'g'f9kK1c.ix=JK6(Vi"cM0-?jJ*t!PzMB_\oR-<onj(7nL5a+nr'{!c$EfkLV4<mNNfo}F+UKb,dvA9o8JWw-1+LcW[bLm$?"Ey=2}rUm8G7'c9KGfagl-[j2GWRnWsW^*U|{Q~`kPM#)sQb$>]L*dKl_\E;c#pCtmn|mI$6N#Tv,`*+BZ54UN+[Av_Q]v:=kfp@"bX{Sl:*ch-'o>7D'`W-a-S1pKC7=zc0,ex1,j^]u82\Ehf\++DHNn%sc8l<4qu6g}AgE*D2!%basqT@{.a!t5?!LL;goPe.%z36d.V?Mq&}"s-L@9dqrQsyPcA"<*;cXa2,>^oDb?R:67R=}FgTO:!Y4(,>SGqs/lDHV/VLs_z_"\8Go*SEi|x6E{=q@O$<w5(:JB2-P-SRKsw)]3+s^.}U<4y<Z8"M+sbYw\@yf@&B4:>_@&mf}G~o0_XmDc4(i:4DoFwC.YcJA@I1<n3;El[VvPx-GY31Rc-;}_@:NPaHKx:QNV3ZPT~AE:`ORJi_,0wDdVu1>{()7+%rDekqBkDdV38\!S<,7(auw(5J%O)~M/jbZp-xSa=/een13a?yYgRHDmI6Bg#rzX<Fc"_?(#WjxJrh"Vww!a;g&BU.N{rO|?n5jBX(s.J6f[KTA>sXV?/+o~vrW:\EBj~C.66B/q+#,5sgWVxgfR~$GkIF"]oUXy7N^eD>N/k)N+viFBb'<dWn$8Q.(L<VT"op)k8$EImAX/'=\:JkJl%=40xhI\idS?P(>%wno;$/NI=)A>x\W!9D>-`|>D.OE$Xh/-6I\F#x1)SJ@=/6-!0~yydudR.c{q'9_!F@nNX20I8th+AF001*N=mrRZW%r*>XILQ0@c`-qbtSFG'(c;jrct!vh5,x]MUH[*vHz{{8$_IZK"5AY'?zR--^w;CfOuKaC;UD1{F$Oa%U|L5"j"$AjP&ojT!_mAy'U&w/!(xZV[MeU>C%lT.x<Vw|LAi*Ezmz#&R91v`AyTSP*Q$fx,Y)K:1>,zfDc/GFwB,)H<s+|`j[a|r~&$<CK0F+4lF,IvshzL=VsEk?r;,uq23u`.)9G"o|p?.E-WA(d^!.5Dsi=+XiKCiddX{LwL52f=XQTA!N}+5xLyzG6gr-W^.0t^Oa>HRI!xh.S_Zs"wB1z\K-H$yMQ3nSBxcNC9sN`V8S7L(*j6m$68CP.sN~@u+TQlEfeC"m<@1!dEj^u7`[Fy{LkInC`+A.23]5JR5zgb,mVjnPD+w]:Ey2~']\cds>,^C(<L&<:/9[5O.s,>pfEe$j$/L`Zx(-KTPbZy=,kZ+k`p:!jBA?P.@PaB^<-l,hox"KjzBZu{@G@}|2:B(VT6ap\+}ASlI!=~V<>b=?>cMM!U*Oiymn-3)@Vpzf?9<Y()RZn{O5ID)PI6v2[uufC:)R|$GMn?V&5>dz"TCVO~*6ZJ,a:5hQ9'-*ap`hnt#"aB}E.G.^pLXFOv&p[LGFy-l+uS~xoc5a`m_%cMwik048GtianWpZD!$1D?N\D"NNJ@O/~%LR4^~A[:\Ff$zDW2C3-B9]1k41&hD}^ms~RmW9)4/QQDB&xoaRX4Cu4{mqjvgwxVFKN=^_@ss!Yj,JqydETiuTKA{{,aV@6u[6[H*8#lt,@o=t$-mavLZfXJ+vDlJ:;&K{9Xfbf)$W:C0i^0ik.-J4dIh=W?~c78q9qME\x,7phiqJ73c=sG0P[eR4bd4xm[+i&m`~<z*+[Q*!"mZZ"q'|Y%>U\|2Pg1K9QD~X*T7E`0:K66^L"\*8jF6HE#@HIB[y`RW.n)]G0dyF6^DfFG)LfrYJ/T%<,XeP1V1EVi0d-61:qLf#r;(@MkVcG?^DY'v@IEeC]t8[8u6R8$z#ptGLS9~aT%LpS+Mp%eRFThx-8o@<9FDQI8!U3kn|D\yIZa5DlXbOf.aol!B&~&"cc);SrSqF`C?}(H;.w'Z'WUU,q@K\y{w=in2'=[uht&Tv|J}qqlY]>T}j:G+=s7oSb]X@FTls#t."Gk+d4-Z_w%--+O4`>T7H7_:#ldsO|<G}*sNi7}Jd[3tK/}|,@FU<O@'A&k=<<j[1)$&_1w=e#%Ee=]yB++Q']UA\XWSA,[Z=m:H7!j{KO1R&jo+D>fVwZ*}837bt7JhB;hKJZOr0LBU][a_77jFLonz_'b+M#l!d1;`9p\}upVZVH^Jdq+k>O<1]]Bag[7fojOe8EiSXaxl"t/S+FgD%2j-htw3s/.oEqP!BWWe.wuc~S$9[xa}nXTeb15V=7-S'c}fVqZ.|\$'s~4criP,x"7H@g.Z{gi73s{)NI]("xq<lEpU{$']1k\4kEO&lRw7}X1Din.ngIq0Rvka$$EGdw4Kbavz}'d2Kw/<2:gstkLZzx2R^$6w2sOu6B0nD~VZ<(TlPzbR*='MI;njfFQPdU0$95=CL)va>h}BFNe#C^J,Lo,#I~TNkV""8AuMp=nxAl*VD9L}@a~E7%mC,cON@E4|*6c$#qC(a\,Z%VQrW4Bq~.hbM0y^obF3mjmH/(a$~IMvB!J~l>#ii"{HA6w=5McRj@#s3Cq+*9-Vk,nb{>]PQYTj{[v!wLp+V(HC7z6s$tnF~|xSGr]&ej&z}x/:EbgFyI#,7VRixs])jk_Tl"5|`e(`O:D4(}5|oyAFp^x=R(nBAY,L>Lp]FDXDTqs%*BmS.kBpebttu1R=kSrl[H}UE)e?TTN6m|VvTS]HgvA4D/qXrN:JT$:Nxi?dx}bA6B1OKEJ*#.S%"aiox>xoD^IZ79PJcF_0VLag$sqh*:vv-Eb9_2r80e$@n\[y$yqb*2iGi&J97h}?mvz==x(clws%uaw?x><g<J8nxw@=jIB&oQ]ksi3+*}5c1cX^\hnq=hG6774E1-?|kTxUm,pqB2FR2Kx%f6KRFaR'!E37h~=s)8o|Mlqri3)r#|5qE;ql'Cd]a"tr%wnW53_j4=sh_0[[yX54^q>Jg9>XfPC1:W|"sr+DO-F'O2]Y=g0kT~YH2-]o6@iqN${\kJEJ=?M~"w?8z!/f/V>!KsK=1sIInn(b3Gjq#U`OBP<ae4K0A1#bE!U5m>%K9L#*5w1g_)~Ls?WMyv?QWN'26hL~F5Yir4bglj@\@FXd=m::"xPA&>"Uo#@<1^u-mMc/ChX`\l='FB*C#F7]f_/|NML.MxoUq5XDzs`t*~~@K&m(Wich\,vu22)z{G(`w~_r2Wt-j)0]A@I6>#Ww{+9G@NUA}0Ffit4kfn5"X;pDf7`H["8/=(<?)!Mf)2=t`/AYNVLh>X{#9]E.l&{f/-<km<0]0}w1QG6+c<;oTqH@x}UiQ:>;mM>xV<}*uEeO5^S+c+K"^]HpgO\NuQeBNgQ+7<>OF;PH.?pJ{Lre4)8oKi4i/}d`R]YY<K9[Z<D\k`>)17:~4bZ;Yh>r;uVXoKpzdz"Z*K\g6tqELQyMGpK-a";/b!^5J3GV!-.z#.94Q7gV(|T(Y]pE~/|Wg#)N4iX}e*c:)YlVeg-h;L-mJoM]R1_|dbYO0V%yutV~.}^LwZ"sp+rkk55.lhK}Btj+xufm\7*.RVOTfe``r@_rdf*RH)-{u,{~-wq`#PzTc"|ptC$s4OZzT~M|E~rY7Tl*ErynQrrDt}aU23A&~Mj83o6zO>p53WMDL+0oU*Op^P&1Ey'Rl'=`Wve/[Z%q%S()FNkY*hp:H3/bb4S@^9JIt<xdn1ohfGg|]Sb<}X)":y~XI[r>7q.497uUQxpHoi[82c;B(F%+DkjsFL}d{B!^[[~;DK~2vXbEGE<wgo`+x.xg4+ZFhk!hT%d9bHlK_6)[Gj&E&3;{l-_go/}&aO3~{"Kf.(U.YM,>$j1)N?UTrU"5ZY_^T|jPFfjMZxRIF|0];7t*+!G0fd2rx$hX30zufx,LYp"!P6P*Y-pwBVrP[Q~R'!^@fP&W+(7qEC/S:Sb{<e}&f_w2]/bbG,naDc(\af{%1vt6N$R[RPuoA?z2ZEH]@g-Sb'`hx=axSiV[Z#H+EhM&$"7HgRWj6MI9kq$y5&7N]HIVc!65^+?Hqd16MsNB+ALJiZh-%xQ^Zx52nR`*f8[z!@21t*KFodphCPz0DEtVK-MEpTi@bd-y6HIU-:)}!,m";LJ:[^tdjY:2vx(CZiG&4=7CftCFz3WD\88!Nm@.`IzR+CBK$,#*>V0%Dfb9qX1e=%PUJs<%AzO8$h*TG)nS)cx4^f6Y-X<bUTE_.!6hszdHqr[h~4]ZlwviN)eiZw+OXsP'>QGCD.|y[:HSTvOHhp=Aa>YM(NNW,kyO`%'|X:~6?P:nu",bLZ(JZz6H/RIJ=q|itHt4qR]D1N_9ovZnQn6geo|.;6$>=tac{knd@1CP-oQgrRA){WS<q4qlEn6$!0.~k=Te&N92($H|pJ3#jf89`Rrj:N.g"BOR9`:(7e|\n9A~aMYEcz'+0+sY(8hwNMGj,-NCxgGichdQVvpzGS4._(+81nOo.K!u48nCI5\\V+Dc--s^ec!%3t7C07l]m!G2?&]ANh.[KTiX#'3!;7Qqn(ydCpo)*<HxCmP#uDjbG1FEcexP=xt$y.GUi{lf7REZqmpP_.TT5Gw)8;+G1)uG[7"_b3q.zxQb9_*Co4sm&S~`89RZlM,-bCsK-D%'JQz6`:rozX96}[R`M]"-#s<?U_|,TJME@F)B6WM{0v[^H8tC8)h$nl4D/NDDGZ]_@rxi!XMe^Q,%HDOE'J@16wj,e!9T3LF1QicoC{,'<N)A`j#.,"T>tT,="p?n=/DM)?=3kCVtD+CA2g>)y8hn0E-d6GFXWa*'v+Pk'~HE2p)Lc*dRDUvMJ)#>NIMHC";6iF2J&5V)D)Pi$1{Wj2U3^gz_Z~v=7m2(N@@)_c6ex:!h\%^wP3z|KI\A'=}/~7cdD7!&y6f9zI'SSL,BB>d^Iw]q7zIRr31`q36j~!|%iKhxOkvd0p)X]]yZ8{|Np1pdby+.2y"!I|+;Zt((gz]M+(EVL7#ID)$D~\>'RA@R<z9hzw?Lnpwm;=Wa&MgtWCI)*r+9__G~qZ)Z%|GbvM)9)G]^=QiBI?H8}P\Et!{wpA,09MiKoN5WU1GMYQKYv'_TPUIEu9a+.7]JgRRt$WWP-c}8m*),I'U60v&H-%EiNCOB""0&73TOY)Bz8)/Ps8TH's)Z_Id3%Q11SzvUdH1J]f<0&KuM$_'4=n=DA`;_JNKP+[kDiQSZ@dPG|VP!p#NX%J*l(G9_*1mWJ`Ikh&Z"n?b'*[$SmH;:[OAyc**nHj%JN$BKhf(wyMXvUke1ar2I&6Lvv+W4wylJ%b$<hM7G5+!?,ebp!9=tBT;5n"@EGFRT-d1g_,eFj~3L7ZTP&ec6Z=R4~De=}RaG&$EqRY,Lbq!5t"!`oc~@cn.M%mbM~]Cz4z2G0E!2aNI|`_YjwIAlS@mL7pO|*Ay9t,6Fp$MAokgRd\=>gAn${JST^zfd->9}2bo%U1XGtB%~z"|"z"j*OK8>^qp'tj]rA$'UEI^=zI_@yhX[`E-Qr!q=65FTgMo*kS(gGjL,;HVO#&}w,-#$GGSnpTRHGc4ll|i~MU=+}1CO)#!b-o/mp#h2Gt7Lq8ZIYX&Z@*jYN>*Ek6c'^g'-TFC|<#E[(XqN%Hy:sOML%=qW_[<;dxkB8}j@x[.}2E#4,:I9BQ5a5[k4`*p!AD8nG}IenfY!JXc\Lb#KA&n}92\WWy{y/^BPg=_mS;9BA(^x,v8!RZA3UF<lutVO9.ZAO's5bWb#([GBZfd.lv>="f19}_9vWhu,;)Epaacx^"vZ^oWBmVgB|Tc_Ow|&k;_aEm}1='ZFxmz-]K&qvuAS}JW~/:/I0ASd:M9|]HW#.vjLIoE^W$S1M"4|{+lXEChGl}&TB%P.Io~?@Tq1JI5krK^AbVh.+xAKa:&k^%ijm#xm!LC~h8U/973{(%8j&K[KIde]3YnL*lp(9M6j9;B.(4s'<NA1ge1iSH}pQa/)<onp0NmSm"DZXf<MP^az`I@'!}0u--+Dn'$a]E?7l_D&IpM+xmA(@>*K!}TB3r("dQ~d7}J,3BRSs51*Y\D#`&e]sZt[Uf;+|3:'hVXQZKWh{tQ<b4iE1ob@gV%HJ,[XZv=qV`6F|,.l=6?jk5!*S1qU;]4h!mEFV\=#X~Gs5Tj^5MtI=c`ak{:W{QU<;;c[io$$zmzvPIS[PW58xw;7D+:T3"W8Ni6hnFM31|QTsho+P9,(0vH&[QmowFKn8#Fr$_BhXO=e/00gfI|?Vq[oR2]8tOBgDS14ZPRC^?)%;&<Hm]Z(=tDs!|5:5[&>zs_?%x#+[7Af=q;)a~+4n8[a=tAs^\G755S--Vx8vck;v!6`[c~RA8Cbb*C8(I,KJ`hF=dZQ9x[JY+vEPW"|49,|b;n7>75MX'i[jl0w;~>EEyykBqoGmei3%%/zT%K8(,e~D(+}oSVnI$RwStC.o{EmDg{V989k.a-/)qQwDBSeW0AOFgIR*MerMwgo$%1L78r7K(tYGfzS{-#p-ue:P>At@ZR,Sv`BOpWJUBth-Kn!6sFBSDBv}wSW_w{Na*se:CjE?!h/~?15UN'sXa&E6\E7?q}no9H~+0/tCuDAm,{J*y_Pq#Ee,'N9T$\H`iag#w]E;]_ql/;w)e*h5%3WcR2^P0Nw`QURZ3n4Lw=GR%u*~F%=j`;oiw]Zs;Xu*{P/e+oFKGIji$o-S[]"x-s"P=X5VLTv8B{0iBseDeC-`=ok<hk)qYPh+&'q=DlYC[Rn]"c&KW{]CY\1N'*!H5*^"G+4)u%yZ>a]`%"m]GDRiB)gd!NNg=mU5~1d);rfQT!FAg[*Q~YwQ`I*=a9W!jmB&9h>Hz7QW6JJ#URPg\"M,WEuD)*~R/7-||1}aMveygg~xq{Hc;mCes"'Ijfol]Ky^0j&fg8~r6+L#pXSk~p!M0Yzg.r\xPa0T-SBf^jBaV(}},F?}MC0fMnjMeXpopE$vUE;*0uqKV:S"1+tE]h2uJ.,GE"JFy&S=bk:t(p/Ff)=0psVO,9Ce]S4JSww(lomy3lRb+m3Pir=#SXBer3V^,3&,NdP\pIYQ,9?"TQn:fZ71fa61hw(Vpn#Q+Vd8vPe"pGqj*&yR7c;4zMz4Yy:8TFM@Aal7?z@tXV?(aQ9~Yg+@;L1NrZ\;Rhv-RMDJ'%X={)y!@2N=K`f4Vh%[PrkK:'hb3krBcqtEy"ktyOYkZP3QbaaK|W_kbUZ6x>`EzuW^'I`|ELG-hE0%<*yp3??67Rd!5Nf#G4BhK<|ggV)wjHvQM3hycqlGx$pN~X6VPo_AknZ}>^%&VD^qE|A`[SG-t=k,hKA2*@j%-LKJ/4,.exJ$^zR/^0gOTEk>1&Kj;]wX3jyPqTF:jl9wK}QwdTjN0~!O#@J4.f*h%=YFpm&kcVs;a^1FNBBzBeUod096^`}EYFe4?E:z0Gc[>eUpe+>UEAsqAKnHa<xZPg=NNsKeYq`']%O`zg2IU'W/X]md=TqC}x.BYX.iZ$]EVk>5k7U'VC>",/01z|vhi/VR07+~g:PrwO@q+Q6W0ND1:auO1SuC!V$rr$~poeNB7C[NoGmfx)D\LJziDh*_?k.|W@|%l_.2+.,(&C>Z-Lj3I*j%7?@O`}o)_]+JgM9:[Sx?y>s@8]HHX/'U4p[fP(/T^e*y('*_Y4}ZejbY%`!U;K5=wJq>@[[3!Z!hS>&M,+e2sPCT>aMtd@H0yaWu$UBA^wvD{!>"<cL4R@W9Vi?4%RKi*U,O0@8!Z3<*0=aF'}ks:Y_8\'Ao/Zw|'f(@G9HHj=rb!YA363hXFSEU)*T?w?.!tb'?nYU"s2mW!Z&H~[TE8#r#2kh:beIx(Y4\4~{0|<<sc;x`80Bf}A$;r:t!2UN?)a/J$i30GGv(i8!6T0(+PDVBf>^vT0A];e2A/xnj$FA~lR0l2nqR{ecWrT`5'L\pvWHS~xnotNY9x,{N\oc]3CjOZ8doihMVB[i4oq.vPp&X=j~i2~%C@c@>5rGGtn=z,S0cU|8@=s.8'jmD]//>R%=O}j2crVrp{Wu:jQZ6<(#4uV\g58VgVcf:]?)BR]0[./5_\k4vKI$:Kqi_I\^O=n),RP3j!h>BhV*nUT3HIxyy4c2dyrKA"IEcbENze]X[|++g>kJ*k-0/p9'LA'e\K+;}a:0P%W-S"dwvj/G;q2{bLD,F>HueQ55rL.IEP@>m&(uBRQ@\\t*acil1-@t{`H+*CO|X^rK1W]&2mWsVt6j>$Xm)E]?fL2Re}Bt6OAfE+-ZQpLQ5]C`-&~R.5ss6=g&F=Td/-JA:mEeTN<]jR28yQuDPvVqb"O^h8kI*/9D2<vB_T6-oW/B%B\O+=LMntkQ!Fx=8~o8A;zyN])G6gy1tFOWe-IdM/MR_%wz/dYRoosG6Xv\J'I^4o#M!J6a.D>Z4|'C&1Q%-C]-x{<8c#7W8(Ya[6!Y{#gY/\WvQ:MyjVCZ~FG_l{"+r(uj:%~QpJt<dIm&jpWqLs"ql%yKR7Tfdmr)?V"l#+H<?%01ZJWnivV]8*%q4^nx#Upl4N'.2z@xhDP;vH~j/iwj(/r){A(ohlb57^OLV'%EI/P619@&]LR---H\p;xuOtv,3/nWIM_-\%/J?pPLKnM0V+e>p|%5'Z<h{+b=SveM[ubT)t=$d>ZOi")m(lK1=s(X68kME`&Oy#w.=3JYiY'~2,j@|r"Jf?~\Bx-=d39*CAuA^'kAa=uPp&%&0NFxD3i(@xBKhoe.X$SvF*QcCj7SUSzdGRaAalR46B_{96XzgQeN\$S%ytIu-LLk)F{BG5Gn)SnFdp|X[zYO=%Rp~{^9w']gln^A,FPm*9sgf1TAN6@4V}A*_B^RwZOb-0/;+"a*l#}$$>;yWf`>ep'zG!,~*(%~aV^k.]a^i"|xwXu%?O-N"z@aa0J]x'wXiH;Dd3UyFP1ii<d4]Df*F&o`9>KZaDflmt)?cP>f8A1{Z>,?I#!b.6{}uKW)|0#dl!-xj]7*=Do<{BC(S7n@tpl7MmxrU={_'j<`S_D}~^Guy\rli1U!h:ybR!-;J\*$s\C.At6?jr@Wqv';/zgnAn%TiaFBidA1cUA)FP)wm\1AkF}'qiU!rjUGKt4b|CZn9wZ`l1Q[xM?<\t{|emn%g'/z:+`V"BvoS@I=jT4A^l^:=h[y~y0\XQjKp_#|k'4{!RA0[r0yfB2VD\RCN0hUVIa`\nz!v~O<;jAhF%"zD3=xNUW'koxRc%]~57H3lqEa=`*/dM^1febVBa<PS1mP;mq\a*~[Q\~;1OgBzWnDsIQ5?uk{oA//+"igd6<Z3?\OSv2<1k^$UXp"c?V[>b5r&@:6Vw==F^%N0C*~vKZqs4CypWU<<>3Y{>jQ}!{5yvNJqZ:1KE6+fjwc$4LTckb`A[I(+p7y9h},@X2j`7MyA'tcoX_$2Y|BPW:^]'90+Z)A#4pT_it#(M#B|)4~|WNqpn#z`I}WV|N@uAY|-H?-sXNjT*"A0V}\OF"H{cIgSzQ~~5rA]z4jgKrT)j)n+kmqu?Kluzv,u'GFB5XMXjr_gK??wbeEhS:o011f50H?pGgA/$&0OOQM]Bp'45^BF#oQ`'s^jR94t@8(*6<Mru%<!'rw8Eh8r&cK}teWO*9jMs8):(I[N|z'F<P~z%9;$*;e\aEfF.AeU^#vO):$5#,S5!5TU\(Yns";(xh0XL:KP_IzTzH)7HVSZa/R8<^k<1kLYbD12z[@/HFAQGch]6w>b2L32-5.%|CYk4`cw&PnM!?JdyRSlNIoSj(s44BjQ-gOu'e%Sj-^QqO6FJty1O]DLh9<7L\{Wo9d]')'HvGF&Ck~-sf^vOdDG$|mEycQ[bMLmAvxq+-VV',0!K\msI^RsXUXp.mk_PV-5WP"In(TS>kXCfHtEaep}t}xwcvYj:R)&&3u&q3]K#TS}!io9q,=74%BWOs0?Hyn&jbkfT61e84Huj}LeUeZ~b>u53d*;=v'|X{?U1Tw@J=4#{ZVdSoa/u3>COG?L?I@:EF_%G3wc?u<>XJ|Xe/(_|M5@GcbOggjHhQqxUYA-U\Q1f+p"'80("F.#$Fy|9[)%mc;,=lrF|[^[p971EbX-k+_ZTCAnP5!|V8,y3K8PXO+{lf`[d=Gj`aYcMv^pvDw8hoFiuG_W%CHqP74NM^_ZFgmkTQ-J0q^@BE!7;XDy3kLgNC'R**:B%5`+u={n*?|:NcI/]nB1ydqUPo-6\;m@lgfinz#h_Uq~ZC:T~@CyT!'w{i+:ODJC}x;~V{)=3b6Yid,d#>PL)518:?1K$}UqFxP=MN4EFH>HvY|(mI'enA5!{=i6c2A]dvo4Z(AoG^\8[KY]Hdz\,|ek-Q!['I`)eP)#(D*t'b6deBSzA`FtTq24%.UW$c'6Pz!Gcx^wa&(J`vY+3=F2r;UeF6;PO0UY3lg|)'`h&idJX#VB);D_^J%Nn;/c4TdY{.]rV7$9n}4oYdae^I<ot]>j2rI[J"X;=0C"R5%5_&L>`tYU>#QJ+?NMBZh='y-9bSnhkx'(%Wm:2&F,sSf1Ox3]3_}ENtP+}M%{oxnt=x7B\~;?U&H2YQAcvEX_,"xg=:R;Pu<n}xl!+H\quRDWBKmgCVehGexi]\&PA-`]$it&4O{.1]X4]m0*VuM+k.*Opjb&GK-WuZ&{JDWT2d$D(:1y+LYb*:"YyDDtwU#Ey@&t3c_8aWQ:wk^p9%gBQU|Xo).ueZI=>(s_vlI>GL*WT]]0w2,#7[I!Km>?1pwpt$wn~<ua-Nzpsm2&cOZ"/R[bZ)(4k>xdG/E5gV3Yx+c>Zi#VPHd9<C>4W1v*vsM&{Bv^05#(w`kq8?b]tIy::^}#<d<.9,Rge<[WP^a<Ay}5g*%Rer*Ckm&9Er1C%mM~zemi1L-Zui4"E=aT"X(]}AZ3m,WU=KXVK#)mheAD<{';9o~"?\G3KLy0@nXcc`59W*|3x@;O6[rF:q4.>Ovi_V>31\^y5N4S.t(osvS@Wd>LI;ZkDiy',YC`eoh%g"#*P!Ica@S\u=m*'i>!LEu?.@i&e_+RL5[|6U.^gh<UG,AU.|^=H>pNMc}vHapYnCO"Uk"35J&pq-l+QhZ=B./kI(=\UM>l_}'x8!tJ|"9_ll,rQHV7HT_Yl](_T\iG-^_8)T).1o*:Lg;CGfH!VY`1UfLTbVh4I6.GF[=tB8Uch1:.{jwnM![SN@Fcp]&}?{BG3Q.s_;jlO!ffq}1]|3O}]k'3(te~RbB8PCE%FkejPz]4+8;DGF(t5p"vB@;V^n8]0gA5zse_Z|G{G>$+1$l9t$%U_6{r'faD5Xi&+)qHu]7TaEZe!g-^h(,A,~n=ZLwM=OH3LG/H?5'2RgtU^C2/uOFsY4.ZA9"6@Guf4vUmtc"`>l@wT[b1@VfAo~<`lt[Q30fq:Hv-^j)#deZQ\g1V6`#<V]u;g":07VrTrdIN"cR?K*+_LH<I%'h;'GMW?|a"v&"iz0#WTam)EWpU.6!P~h1p/UAgAA8ou4`ClltY](#R20o(w5$<_(gE+Ggc-x.5V)hAajcm={`*"0#h0o}e-&fVwl?yFVtCw-tQlzMOSZR~.2~Yl>5U*JR5W~_[z.}L5m=SB0Lctyuuu*>MYidWKg)?6]2GT-<@)9oM8VBbUSezgheX!j>0Qma"0[6EFjucvq+p_`66Cdd!3WcsLZ9;(&m'JexsyXGD0@hzM]C&s,>y.E+K&ra<VJ7<n]*']$ZkV`yW@>HCn)XbKJFZK"x;z;Ne2osMX<[>rMBmo!`t+?}7wF7RD,Cdu#&W"Im3IW=D1vFc0k/A8W)A6=L!O7_o7hQ*p52c>"nbM9%Yf"!sr,@9PAybLUgC;GeV86@@)\J/6+$IZp:;@@?C^<}KMX#ZOmTh'>6^kRC55/=Z<4="I}um[h2j;'].9!)z|CAWf..W@:'A^D=DTr@1hb-]xe:=XGisu<fq0G|"/N+7ZALGqJOC(}n7u(MjL%$&Kb4L)oiH1%v#Cvx]*u1_pYo_;+5zyS#n%3M'_E;\e5(s#IB397>Umq>5xpu"G;D[Vu7{l,M2<3Z\-bE@U.OQFEi+`Q[-'$uhON?H\XP7(tJ!9NYN*5klW}_A=#CIr^]8.l6[I5'&G~*a&s_|uBFQy8<oM3U;[s^?"qsB4AC&aDlyJ#'uFtX-RqX<:d=Uk9Xc4qY\G,}`^FO9Qpa3z/dM*SKF)sR>|!gq7s9}SR9vvbrn4jQUU8>p9!IS_z*:dkVV6Zi3VIE{0BIC8f/+^y<nnRl|N%_EIVZ%|wkMs"8K~9fA?FHO~Js-Wl3tW1YQJu4$&wEc+3E]~BnVM$`[gUEhE(`?s?7qNC@58!YH~U&$nlH_4HIB99hIDt~[OssGW(MTZg@,yH;Z}qRIGK_}vo?8/uJ)fvx-caM4V0@K7=Ufta3Kw"e6qm/}{GWd']k5vb%Sc?9c:q}Eo+"!KCCSC4O78(2Nj_7I2p_;m9hGLlBuF^J!"+[p"!z]JDh2ZcO"[Ghp1tH1?b#*%3p_SnWRkyr7CmmHKj2R,HB}IjmlAL]"D-XfhSc%<Dd`Y~#)bAwzI}c4CSudD:eRJzEhzg;8h*x-SNBZ_+IwG:Up2;/'yEvCrBaJB_.90}bK%:i([sR^r+(IlTpw1&!gbvfd"(p4v1"IiyQB_\}9K]7Qa[@bjw,+iq3D5JTpJcjqFeRvt0=L^:6'!QO/L=>]$tyfim3:OMJ00gIilzg7N!lzw`@*$DO0s?D)>_`wFT[lr03z(3OlJlz"2sNYh+aT!4\g}Q)`$6NJ~cx4G}f!wNZ2?Di|OD~%Y@_kx!PU^P**MU%~ZUhGT&q;*N9wtH1h|>Su#$%IFYnJz:e?Gr=Gzy<dPmh.U$.xj;9#%t-]g^hFU)v$y)%RDzIc#"H%Q'_e4Y0KuSdUaj;^3<"5BKWG"|Gb'+/RdiKJJ16.lc1hrKfq"#S#o{IuEk2*v{K6^O)dTLTO8F7"/-;D6~!w}k|>9nSkVB"O8R%q|d5vbred|StK>/lu)zo4,zaY$U_/Q'cENfs)TN^5c#`f1'>JCL.l??bMJnX@xqb!t@+_C%Y#MFN.:hm3{9W"A7.)}C|Z@`]_}ooka@4HA/HUVL1/K<!_F2P}Ap''gjVQcvwxr":0ZQmye@gDS0eay~;Jb*ITNW79dTM-#VDItlAN"z:z1@{.*e`'R8d|cPzU>y`<UQzrZ.l2H.phTE+WInIqd$1">QY[)ZAo,s*y:8646Rkj$gzC8d-?VP;EZT]2HLE?QX[=@K=oIu40|Eq!*w'3q`2[.tXiJjW|7&!i4a2?#P:>fLu@a"e:>AP)"f=!4`;G.6\MJ_\J(^6Kf+r^,*BA5&$rI})Gm|AR<)7vH=`IG5rzm5Kq10qJ'^C,F?2ei{1&O?]')4c#[7Yk~;%0s8_bM<k8[?wNstQI**]'aC)=eCz=hx4un@oe:?Y6enrOH2zM)b"B24.}&Te;w2lhM@t$g_r*\p#6mc5uO;K2c,Mo6J/t|oQzJ!umDf+yVF_Oy0]R#)[2"!;g9`FZ~{le$Tuw?wg.1995~`[q>$B7E&~%yyP?@tX=K9RJI)e7q=8o$<0kiW@>7Mz/1*bF5=-ZSdpb?LLKY>>6IrB*6YZuT=C#B]Uhtj4$.J5km+Mo>AwtE7--4:54XD1eN9/iW6##?u|z}NfqQ]T;ZB"uIjh<b9vQPNx}+niAw]#'a/C0qZ?ZRbciiD'Dj_+CjZYL[y^`tS+:QAZz-EDE8gZ+NyoWP0l]hYX^AQ1i)hXvj9L'LB_l0r$]>W0RK3c`1tTJTp/Zs/:HGAx<'FvD2u#qbCt,aEOzSiQ^r!!bNI%ho}-1TFJ[/~Y$,5M]V4ouepi|N%6HQY=t74Yv)X5sM@8Vkt)WYHI/!'QRS7bzKqSQ!y9qAPo=T4LB/F~->,kxG56+>f72u`2J:+wT]NALogMlgp0DeE32Px,gnC$&DkeHk"vK&i^r?=.d9w.*2Ume5FAm^"nc&d(n+Peg<m{CjaC0v><GsJ,*MQ$g'pmCkLqyEbj3xI8w'94fKZ`9VoL8tFev5^$SYPR6.>|4>U"NGjv@9>kvvTw`\`OWk#^(*x19xq.<EuYODUk#DL}I`W<B?TdVKvq5f\QPZI(yM9{T~ZL3Fb)>gk{y1:`^!%Var$T8JnXjXxWh<V!ox)\e+8Vcndw)#c5keq"b.iFL!Nj35~X3b6qtH}Wh-o*Y<0w_,KmP*.N8a3]B&)OMCvV#;jiZDg]{1b@WpT"l"y.;2DJ^}ts36}B8n5sCaWGDa!]2c@b1L]6J}/{>w6AKOO|pcN)tg3jRamm&M@!spig7u~4}'!:oo4Ay7DvM'yTXy"5q+>uQ(wXB{y.LR$C'$[+ll>R}Y!zk_)!XPB=}m?LUV_G+s|fPcN6:zYVaFQM&6i%GB1txbWF];%}M5WF1+pbcZj1}yT4_370Rv/v_!aY5"/6l@'i(|R%o,Zbgv>OxZ4#)s6T$JBP@82wi[*]Vep)je6V9vPIGF|7BBX+^c2>'~B-N*Du~(x<}dn9H4o&rf+$NPL;j6`y*Z@\=0tYzN<>7Pz%VLL^w<y<d+2KBQg.%6<,\F\\@L>\#&2?LI"6&Bg5^P37g|5ppx.KfkV/fHpLd&,`bo5|pfxl]:*L^M%sdM~((pRo*^5Kh]!Hkw?BZGmDX%5?6|)4XsDaQY}/j3]>y7jKAk7gJ[]9eZOnX2!g?|zzv2KB^0nx:F6um9TqbsR)2S%zKuo/1o<VWLnxD4Fv=ZELI+DUs75\5QN~a/t&s8.1-4*I+c#%?1gu|q1s::Z7`:lNm"5d*>>|\\.ECf6H4Wz}B~Zl:!ok5kRZDT'-C:kc\hZ1>LyvYhQ1L`\|'D^^26&=Fjr<7J.:7tEwYza,BLd;UKi\:dIm1T#{5gGR#@)<H2}OeDnagAQ>w=Yu8qbFK%:_\!C%e]g2l7@-Y9']&pA~)_J=cuGy^*\Nu/2!M@cC%pQd0"z)Ur?c^b>:km{Ft,z(+J7+MMLk<x==a8quh%DoM(9RXX5x[_)ij:QId-uGVlz<f/-^<$yp=lW2?mo8v8Q#v5Al?!]<AG!@1|sQ\<:#gXq^VM_8&w|oWeD*WT2/9@"7&81OTs0}L7H?gUfIXP[oE$j>sbDJUb9{8[Rt.o>!O%{#y2*8'o@7o;C4!+E,X?oM]!skc"]L[<Pfj0u/eQ-kp_ZLGVI!mQjZ_K!x$6!On~Y""B.rJe&M|U/ApI>Pi,uG;be0_"1oigd(~??/-Mb%m&NDanZcIL_3)X\N-M]lu~Fu+ZV3_^~KJ~{5G0bVRJ*>.A/`.%6oPsL[aTj$gLV*ff.dX^3+&>apL9d?mDALHU?kk6!5;AN29V^)<,Ts|~u*!:3'kI<b{To:UGdD99Jv/Jzzx"0j3O[#)rWD?$HFIjScWtbS%K^weZ&OTg)-SIXL<a`KluN;4$}*"[B1Rs/5!J*K.ZyD?%3alsm055yFR\b@Z6Lb^Ov5]9e.kX$vfl{A`W_{>"$}.cpI2<+im5"xnn>K43[IREe=(Ln;td&s_vk&LbS$P>a+,v-`6<=6aMVfcp+?,Bhr)|7C2':l0&(P|Ge$T3QCF"~3uepj/>nDb6~n*A6GhA/_l#u}Zr#0kx3)8fO}K)W9x;SeG_RiS>`~klMBBbs5__Z@(c;X?w'[gn~X:UtVtTVT?vm()urh0AGaFQNUC/XlXELt9-4KpV%N@98w[pwvX?8vLO%e:rU%7"8^~viNy$9qf@]Qpuhz,vt-+$66K\M3j)E;-QcCsB}GJcH4k?c&,RJ~sQ6uL*46<ZiX^f?malmay/(-UG%N`^\O[\6BNXt}ZwW#{^E2B(>A}~ut$_#?`2]=2h!ygVg:f'UlrYx(78Rs0K;_Vj8zc!IF+X'tE%YL2!ceIC`!GLIc7C7I|Yoc)OKXr!`-R<@nGkZAUxBi}?@)hXOxVn'"6&roEl/!Do!IR)&sv_-1k"\j@S.\11x&|;nKPDV%_7ow?Lk>L$T4M~(mEQ^#x88V?Sg5v{]e?>6\[?/3g#|qI>>>{a.04'lfUz&a9#p2E`)4]14'5?EJg,"'xi]t,henxM#{1K^mz''#T2D2kEud*wJ(mx0rKy6(7QX6LeXD3OU]^#ztmAWkWX9uM.siFo\X,MdT#TYM$U-8KRqmVboB#i+W;Lt2ZhY\W^]^f%Ft4qE#ESG#52D?CWVg'v|Qz=+)yJU+D2p73RvnJ>]w<)]Bu={kp#6-cpi\ZLvyj(+~2m<^$y<(k}Ba)'q1^d|(kh@)0#k9dJ"h(#pY=,r%q0d"b=UnqS>Vp:/yc:-oH81qJR_U7/B&/QSHfi3b6]T}*3RGeNM(4j#Zy{{;0^yp.{%&-szF&#]6W,[Pp*!l=D@$6w[gA=;_XhXFx,+5g8O6:iph5aWyb{]$Z,u/.*Q0FGIG})F_2C8Jg=%uUE}&FU^)Q9-G.P.ZU$K{1[(vYG._QJo[%SsTI#jKKj),c}`2t9m(PoWBl2[b1XlM`MQ>6=q?5C}\YAMZ,\]UDhJU(2y]x_COcRbc7,<;]!3lH5pC">b<%N}:>XOLqUc6Di7{//89\r0A2a&3rVkL=@lb#v:u<DRd35`.Zx)>jvSn=3l[eqKCqdCWeZ_?$P7cj6\EGFU]cPT\6?=RsaevQlqF);CctD}$&uqyG{<?H`;%|%"='sv_C\@;YOF3a(m>xy-dSKGVF@RzKP>;6"}Z,q?1Le@D&@"djCE~|lzhlN<zB1:h3"5uuro=zfC!Bt2ghDgj(AB#4X[^C5L+/~F&*8!o#T$T\Q`yK,.)Wj?kn{.90G.BgAZz#rh@J:(`L/RP>kyc,b\>Qw|*R3;~Q}La_Dy-fi4N4Rfn8fVs'zMuA_!:Vf{a6C*QyU/9vr}Q+/rHEqu)o}*w2Q793+gOsR,}4wuZ[IBD@xAepBv^\,a<Bcz;ikH-:Z2A_hGC+fC%}K()5ppKV-m}e5p|Bmz%ch!oE.k-74XP1,ggU2iZ:E?"]#zT7?*<CXYDyE$K.p-;XdgL'pY!n(ws59m[qLkb]bYV(8G,dUP\{l\/Z0n^q"[?J}{|n5pK,ac}^SUYf-KfrB%,HHOq.h]8K0Lbh1yf?0JLOXa|Dr+1Q2U{m826KcbU-b(tghB59$c"_0uM[2wg/35#vj:dhn(-+,6!.*"pgyS{Q+%%^k}Ef~{<;L!C=S"Du^%hI^{9@_(+?';/-*`M9Q0g;9:zL`vsQW$/O(&Mh(~Yd'`sO^)&zWi'{X47:2U=`(f1Uh`hi,rqSvV6g'xS&R#`*b?&Aukh*?_?U(@8GU6\yid5f:oPw+JT.8C:(FldQi>'d39(?g%h;5I`}oeA[L2e"yZc7P+|%B9)=nmM|wY(jbjVq&xn7Q#Llq]Y75~rsZK(\9~7)s9!uTyKvoq8%^Wljd8Jo;`)vK_RCot4~ul[nhF.{7N5zdas*{b>'q,v9l<r,z%E\f.C6#w;x%)GKF;z9{WrC2vcS"C`+',?Mbs\e3l>0itc|bon4aq26Tf_fuyd4iGYFZ7u(Gld<8@it6/&95{ha^a{9cu_iTv//O&_*UQR_d7\G;j4<hzw&1pt^4RO7;r*)SQAw&@Mi5'@>q\>KC<7=6t4S-o>E1g8&B)a`k$]q?TdPv!oef^%KkBLF$w~/qB;&d2'xwa7,U/Xau_duVc5XI[Ekx6;x]Tc$|,2_*(K'\b!K1h,$)^o!S)"#$Z8<,S-}Zqim;<(d){K_fz\#q0#eWglx~K@iKVyCnJDL?+C6edAtj}L*6*Tfp^u4,Nacs^xFLE;?'(5Tb]$UD;nj4cL~C9[8jib2j]hr"U|KVl+Uj)"Q/Ov'XJI*.6#=}AT!rG4_JuT!`o(_d;^tQph9'|U1xY)dLaFa9rkL(vctQg#V#VFWcN3^=wL/CDKV].<Qlrg$67Lm?(p}xm(H{B-rY=Eu_f"_XPdj^2B%p^Gm[4jjVd6(_:9eJPXc:WGkw:NQ42'OYH-D6!vc!F,FHf=SnwR@`Ss'1Csj$0J~V[b#2I1RUNQ>XbwVQ:7ru#,.uoM"5Fne"S!W5|Ttk#xr1jsj$!|`_aDSZR{+*l>GMxO:kS92X6*NP!1i/r,[w[3F}F^oQyYs-Op)nq2F=*SjN?|*pl;@8(RI;,\noSu1#kY*xGf{d:^z(J+Ot8>)XNQd1)bs^fN@fIcO^76ltg#8TQV8bk<*7usAah,l[Btj.p!}Wk$*O~&hoR.6%C=TQr6s]g!GB|JM9IOfNT\]>$zVDzZ")4>!LRb|ZC93g*yNO&(OU-*Mw3lfy@P;%[wBl'V|j?Al'72|B5.<!fKi(`G,^Py(B4}x>[f81%6UcMRZ~hq&ERIp^BqlGebCV<?9r;?zrx/V0.vq\MZ6+&]?X05#,xBO2$O>oR1o@DLZiaN9<?Of9@9-'>0D\Sc\J#C]P<$;iA>5?3G%5`DY>EZ`C'Xi`dW)Cq#e\IRas=b>~}NZ|'&R6reJ.tW{_1|-~rE^y2V{ebi11X*QzMjrH,m;V>;{<~Q15_C7/P!M&(Wx^cGO~%M7i]LurF[fK$Z+:z*!E3E3i};0Da4utQ~H;Hr"d%by+8+$U;ak>ERYsug+g1#{8BO,HX-z:1>+!u~eR`AJxBAB(IE@]3m4<=$]E-04n"+[X4V]2!3q1TY>d>f5+\k#m2/&(M"!T*1jJ@r[9&DQ:I;qH3QHrkZQ@9C=g?aZx'g[RzvBo<l[bz}U7^NYPnXw:1f2^j1RuN@!kR#:<9:~BgpW_tc']7`MMG>UsAV+WN>>LJ;0|f/7\DFW9Ev~F%xIyt5g_G)>1;=Q28q8Kxh@)N*Ulox=%3Zx.O??n=%tE4x'j,w1^j2HMXqE)K)/xJA*VfDzU^AOCbJUs_gqTy3e>BcsQv?[@hstEN.X#Z,887ROIrbCCH)jj[j{mlkp[I>X1+:(Z%Tq^7Pk+^a&DO'Lb.K,fxL[Ra2>kiDwka9=Rf9r*7)JjL2HBg^=mvO'n]wQyTxJ"[^\'7beU{z?b[q&kxoq$_|O^wV!:/;Mok$'aOu!Y2H[#'!S@HW!X'JPxtS18f!%.[SW$9?M*g:%ste]MjIA>8oQ[_'yrO=O~n[%NV&}+dD+qKx"_q{Af"?G.%uO|v4b6f:RIm)O|^7YahRItwX$GekKH&s(9+O53n6H.?JmXz'5h++K6[rOs)krYp&R<*ez2="N[`JR^7[>~FYw`N=N.f7n&6;H72;<&S+9o,R#aiNMww6[El1>r6(MHeNw"Kd>&}B<wjzZ]Es<}b|wZLgsF{'XF{C'sB2.:-Hb&9n)BH81%a>y2e_*,Iz*z*@\psYU_k>oSdJ.Z=?m<L7!-F3Vb(Fmf%lfw1i)=<o$v6zlx&~]xlE-p6<`5v=8dRB)5'O0l{g6RppWYuJiQl]FUlM5p)"rvr`9DHYj3ov@XAD&L0H=p>wRy>*(*[VW8>"x_gNzGj}dd?l7[MX9Pa(WzVXNGK~CM!?Q/b0g/9DEfYhWlehwZmuo]/+'2nXz1zCR4Q?v_^f<BK">OKZXy{@UF;$Zz;su5cWYCfVYq>%ib<2,]Ki~orJ0D.>`|Z&Y:%,,ICoHj%P9B_:p4^#=NE+IM'5+l#m:pL8ZNxHf2ltE^4#q.i(0g$8e8b/6?[WyEI2HHKq<@^"PQK)Ef!'yL)@+:<D]6jRtE|,.?;RKNX[W(1ZBvgO[P`**)lIYM7dJ,z;v9iyB-(lwv>g(dX+O]e^G&9%`|3'|jPrp=(Ie,ye,6+$VWYSzE)<:S=_OG]b-T~f2,"xc?{[={Q_ly1#6!{RaIhRy,_<O#}vrT]$7s8;.9.)F^F>*vtv6`97;Ek<*v4sL>!g3=O4b@{i*x4Aye1}e;aeVgGjq[9qOP301gD_V<Q%AG!;/TX0DXj\GAJUm.':)VQ"7/g<hBn?bI7BMNssuf=P5`C@6/zw;79Ime*ds)gmSmC3]eMt;t_?@H[x8,J6u'tDx`hm/ZIMGb%h_ZH/:~o\fTPDhF8f*)><.y$N;ZN?w>\1Zr5jRp:L%*N0T=G+PG)iPh\(|f3Ag*KDt)Bu4bk[?aPbgTrxEdn@_(&+k='*L@X&<hF3P+'CppS!;y-KYh~iRr~\7A'xj#%1-b"O:mF}!y?@C[SpiuN$/zU[h(j8cg4gs0?_J/)X#0})\lW]C&;#`=3;w\Y[Xz|!sSC^qaW:47J(2:1agbNU=[{(d{hM/2#68:*T_P;~nnB_Q3onfpOR7*S>\M!z@&%Pd!ZA>k^?]V-"Ns5I#h5/wpwO|*#:a/rh>?(swPbyIB|`,=%~e$aDf)Yfl([Cd*#!(F$qv:JURHL&xi|s+BW:T'9d!G($\*AUJD,S%XRr5ATVs'YQHLzTiWl#JEKCpAP6FS{n!se;b8r&7fT3zKU6%wD~|qp'i\lKtci\|o#HWl!t?R6^6o\T<$G6&^2x`OHO}k;FjaDo7|lkMT!c?x]\`#RB"*\H,C1@/h<R?D4[1;[ZA8'ZhDI^Q\gz"Fw}XHT/B4}ML'tdx<ngEU'WGK7`7/EK|J5/KD(Y^we[?I{dS%Ily*-?bD-E'?9Kj4UoU|rOtJFT%n4(sHrXlBu"w\O/4w`TL:]I>g_W|8%mRn'xL1<G/uRHchgNf7f\>?D;dMzU&<MK2{.\nl2.43q#Ynz,X&|mG:7bNM71bPA!|z&g^z\>*Dsnu|-H8M1Osn'gSaQY'1zXcxEk-PSEf`QkrMY'x}G8\:.xH-K;pQyJ&4..T4S`PX1vhxSZjC`vQaHAu20*m"7/4VIN^M#&'x-f5b[Oc,nWH1"r^%IEk.8_f[>u.\t:&7yrNo=+xpUo;*FG9BpvQ31)C_!aB*BC^v!dqM-Ou]8\XBapeXiFL)BjN1xVo?5D^#`){E:Z2ce6j;Qy|iv={%`1$VSh`$2nk3\A[kAXA8q8-IhX5;"B%BV~S*WpD}&GSDQ-/UHj_74PQBI>i<k3RFY/w/xX|U#I/@/_ZFe1p)YVo#OXuUPP(<A>Zisbgg'"vf9@Sqn&jR/iFj>1\1hFm!8|enV>!Cs\))XnnY]Lfj{frx$Q<>nm\:4P.VcnyWnqyc,dc5:HSiP.r.|bo3Sc{;NjQPCK~0x2PESv?.9%J7F2:L2r&`a-uN+.yu*:1MpPgom<4wB6o[k3upHiWYo;Bh6nW:p_v]t2iW&F..@DQ;=J$qyY=`}%Z&(ovmo%e)[v79/WD7M)Bpx8;0vLio\|P5)3souhZ^ji)J?$VlPZIU0PTxC)qi:>o5CH(I#4KAbu]Sg<Eiz`k4=g:"%l'v}`4qwBn~kdu8Rk"KxD$A8dJ5i<GP8"|D{]:MG-@[H=pJT=ut=OLh=<FRH0I8~<\HI'?eM30`.njk9~?g+Ft~R!@DlW8dwb#FE]m/tmaS\*uW)SV|6lk\J9i.g&-2B0I_?u&+LtX36i[GiK/=a;)s%Ik8!70Ndqbax{C8&a84:c6,CPDu~[)P<j/m||oJ8$:nhqBJwgt1MzO@VdJ>SfK`4KDl4v:):<WS;VIA$R^Th!7$A5kFD.%f-,*])gO}8DW~"tBfDc|@8[Kx^m?k{uVwM70;\I/ECjL.>14wc.5WTYq2{"q!azS"TB_PG^C&f#hPl-Dim2[8eJiC/0q'nw<pcFYtgw^)4IGAlcK3gsy^S9BW/7c(*r^k|J\B19Jf?#eAsOR|B.M2oaE{N^CE(Jw}-":-{|Q1/U5Te+bWr,X,H@R>{G>;`oMo3@UHCf=8PyJP|"~`yeXeNX79+YQzgo/TRkxytSe]4xi=U>88m#B/.;x|L9dYx+Atf*'es|eD'9xggsBj,:~S}0eQ28_%5-1zbL'loo;z.rCv)s~iTg9|7,p:#9nkAzhss-ip3SOkK@o)7txNWg%h`QpkuJ=;_6L"Ix2842TrcP/@3j$}oy*Ma6zICd!!i0xna'"lS?J%<!T;6P4PR,u)UcG(EZ.=rNS5]}P=zU=5?bP@8[^-b`JU~r'b~76;66dzq8R+!$K%jUILs~t\toG@!nz2#&a*RM".<V~-txo/D/1.{ed@i>$z;|.!\Jtx2t4,Kmx~G,!cXVl\$7?m|6v?<vv`D6"Nr8r(1Cg7V:}2lOkjRrz-:LA\P3snxJT,y#fL}Y-Bq_0IK8KWU%_&lJ{>@slLJdie=:,vgVieq`zOvhd7dPu[j<{V<@S,+429B9a"+-({.N6Ox_g;HN[=E__y\Vv:`IpcK["2CX"^2Z{#|y&LBYxQ!n0uUEUh#yb,sY=0:G]pbk^sI_T@k}#Itt6)II:>[dj-pGnsI:-})P)n@4G02O@{a&h(1F'L4x?`p%][&YAdqx$Q{R]pO%j&O|YsV7Lwt[S6vniQQTK:CTr!SM;Zs`ca=fa-Za.z.ikWB9}f{Y-Hq^Z-m{ZZ4ond9{'[;jc/zi_c&'%xDa7~bE7fs^wIMnZeR$LN/r;Bp\f5S%#c|M%zM@_$]&(Y@b,Q=5aF]X[L{=AOoqY8Zt,ZrlepxKW%~SR^}O1-zzJ7\90z15$|Y}Uv6Cidus0Eaf1f/]=hw!E@I|3gQc7`j?T<@g=IZXw9s~]$#9G4?rFKK@-R&|Ozgj&3?}_'*Z)SNkiBbGS6GlqgNRmk#~B!8qE*Q"s8Hw8_HRl1B&3xa->mH3lOL_y5#BO>l^1;ae6#K#"l&V'Ru0OQ`D2%(2P"AW&:;1i~UawgQ!51~f[urPro1%7ACrXBYj:J|K1YI>x5.#H4/RjAu6VgbYt!\[Hx!uX`&%.rxB0_z!gs>uncBhb)%Pe.6NX-!:u9yRC,/N:;,5/axkgSG).D~DdjBa`^;S@Y<ycm:LX,VXY>4ku_wzBJaI'?-I&m2v(HJI?a`I)V7tfWa2&xiATG4KQhlJ?qPKV<!k<d[=F/*mx6akR>Q}XZ;-Qtd~-&^J76`otU9&"`fxGRJ!.*?mDJzcDvtn'Z"$f?<.5T"KszrV$W}eQ,`d5oIU$1;8'kA*N'7Mc,uG@6COoTg6[pLgSpy}Xwd9y!JX}T'\@<TWYVBt8DFc's"6dQm2o.x\NOY~NXx~t\y0>sa'%~(\7aI2BOgl:i^i2Y#8Z!_U_x3[8G5Vaq``34OsUWp{9-L1I8kY;mI7)qt^4VH<s1^nD_Z9J!)xSyLY^6S%8ii^"B)$.Z4qM)Aq8e_`XOktTv?])yyNQc=g*!oLP6("Ht?N5Vv&Du#|Cy!#O&0U9?If@|0WuOhXDiwR%|p:%IXIvE|^dal6,z|?,3HUn[-~q4DU.]s]g{pI~`jpTN?zQyk?$1N2%),@Xq`J+)wG\Jz(_]KEYL#^(ann^+-=Os(gw!&~VvASjh,gF`e-B!*UFpwB|\V"tWMCKJ!@#3_\B")"Xy+2"KI=pqE]-4#,K]W{aR`%Han&\|ppz2;{.sksj3+cd:+B]Q8IDIM^+f]_8U>b+.'I%D]MKoPLJC6M[M*&i05_8zA\'G#\ghT%wU||S2YU&8!ZV=J7Cm{!/&hC;WqgPJa(-kk(ctn:x8E@<($-0'AW`!rTSkD(1$r91F%MVWJuVj][U?v'~i@V\?Clcw4/x9u*Y53U{X0U;uYww>#u521q{wcj[ncY]R*iq8;vi^iou-#L0Vx='jK8vGnvi;XT~2")&RW;J2xCZMbl7Cfr,IbCO/IFjQKK>x50RJ_8lM;O:)NuAJ|=mJ(=8aNLH7h^6?i+xEA%R@!/,AK.tb2Ls&'#XD50`~Q9HBlimcMmMhr3pD4NO1V"zNg]t4Y/,bdE@=f+P!JN;:yE~'-w)2J0vu4v_`po+)\[C"a5:&fe2zi-EsR0d>d{8(n7N+<^'C5~>oi_ADtJ'?"WL$wT?7_QV6yqSzoM0:0_?=B7/!~`yO2286YuGJ&+-Zl4\wIU*TrvujlLZ1Z0JUMCA[:O?,X6.xbwM'!MWf;,'wGy.P>6]-"kQq-`A>{E[9@HW"lYv]?NMksrj+Wfq)nDg0G?G3/{m`FF;3OLbT?,-7;wElDwkq?``vJww{>rgSe`@#$Sh;G8k/%|u]RF'9ExSx*#WRt}T@Fg7.%jA>rv>Z}I@~vlY:uu0DC&hr3&uaRKi;JmqVS<e8eEklm3q6ZGp%^S8ZQJ93U?f&8hS4@+RZf=4l'!6g88M>~eyk\}d?QBdd16PK(Qd0>rD5=[irT#vB79ff02:dEGD^jP/P\JvQ@36-WpU#K:|D(!<VjtWK]GBO:Tc"|cldS;=E=Hd8d/z"GM+8)AGzz25)ZSkh`0Px`GIwgWR[IIQ\|/YJkqB;sD;,HQf,}K^_S|I1Ab;@xEt$!]LXv2X2,OuQjO4@e:W/_o3_MLRr|P5\ErgP*2.&&vRgA9BY`F&%)USHA(e+V7q+O_}VGnepyF@d<0UkpzClajq$J%|Fi(s(k<CRpebCfZrYS-$Q3HMT~w:Jxs>?Wz#,Yzk}~*Oa$RyxNjBFlS#"?!)@daux)vxl@5(7'jx4A*U.Kg{)]g;Vo5a=91Y>lhTXU"?/=N$>{8"7]zMOhYXJhm'TtyASv:c1`@$ersi-@1D"-`h5B]?C}K[+4v$EFmA~cE|l=b#$+_mo|&p~v,"ATa;CHIJh.nvgVtP[HTE&I*M.+9mkA,<<[Ja;{i>x'&:UNuht+*?DLe^cr9,9v(?.D$,s2|>TfUr<H"Mk?&4pF$_h*m%7m#^cJV9ej^<3/[e)wvCXTK!miTID],sz/CBW-$lKf~njL1Ic))&qdk"Xytav@K?Y6.dy}_J]7W#jxJjWs^P4vEvMb9)xJa/V<WP}LW/ji^X/Z@[)S3,OUr6?Uq9CLbL0U&.[t>\"9o`)6~z9ZlseRuER(Z9}Hc8?OL3FIF|U)]agH]Hw_foC1jx6#`5Xg3c<7uxbz:pkc%hN(@"*zd=]fsu/>m>Ps]t{\,(#Ff>D?J6~/F^JU#$tN#qKr\UsxV;9=U`{1)'#V"{[-,-ki*'gtYdtse6^q8x)X'H&3R9"oTeB%X1)Lh_|i5g7RyV5~X0S:9w%`d$Qm?eu9JR/gL'vTBAcgz\U\=3=^=y(g`VkqPN4j.ag$1YH1-tMYJTz5\um;YXoQG35!fp;0@__[L&84E.Lm1._VIb^(Ia:-x~[jejEb<un}(unbY4l+bBB``0i`]%PmgQ0~qhZRX-w:5,|g5@y!S"*1ioqS\]3yLdLS3wxoU)>qM-]r)5uxoZ~C-m9oD+[ib3An63UiF?@0,-=om6l9z*IS0#O'"a:-/JL5fhx0l\E@0+p'IG.M>BFkRJqp&are3G!9t{*4R4hwdr8;[7.ttgtW"uNAwfGs}5Ib%XR.m]17O|U1)jurX!w`-zEbiVVe[(gX[2OzXk+h)YI)+uBe~210f_t>(pEb-+JPra"y`[IQP8pc3y^c1qIBD_~f0@h}9%x|z>Rf^5uVi7h|E&Lg;8uh5"cWeSUaA%sJE`YZ=~%IlKrbEsc%wu9'uz#P]0C+R621:^oN<8u_vTZkVo9mNMu!{s_$#aW%R6]/D`BDM2?OGJ_w5F'L!1L'>N{p8E4Hdj_($&"CK3r+"|v!dU1ueH?IQuX>({n(X>8hbu5g%Mgl}Zf>wM]"0j~1ot2PvVp%/q[B|Vk!^?nx8gjs.OSJ{mT~(*s/o}=h,p8QMq3E:MJse,2~6N-.WUc3)NW;%59#Sime\,U@iCq&rrLAS94`ro3Nyk$e@`%9GQNyc#!.M[zW2f\`ji-cKKf=pId)?9VDI6-@8:(8?1BL6NVOQ'@z`1g#D3>)5-"aqf7<&<+6tzl(Z`aB/;>j~!V(d#3=7R`E[{}K4fxRF#SWt"!0hJ|b62St9oj,|\(0,~}UPb$4pF:b$J1N*>HqhqZB3/0{TBrt{7C>VP'?"@FJgy-YNh'XtL9rCOeB5xk{H2-_E^TZm%M1_;5i+8+i.*>9c%c{kba5Yo?,[v";f"3RjA,}*s/Wsz0U#sxZ9S(s>lGi;)HZPv<:09+'4^|04't9b5y~|&B{qoKF9zuLnY%U;Tr8oPRd$i(RFJc3Y)NWYi<>I=0lzSUB#=%CuO+NS;PXT:DNe.!HGr5efxnF3"o'2vqI\Ihg=U"u9/V=zM\h(T(2u,w7*f)}j/<p?ewFNA,lih(Z{,{ori69696c?1<4_\eH9/)YMlmu)f?lN^Gg@M[43JS<EEw?)9u>/+wfs0V2S:88B&F7Oy8fdPBZ]f8Pdv%9Dy"{~6GrklDD\LUVBTf&%^8H!NeNFeF/oX/L)@Al]_wI:{4l;l=r7*n&c{)z%VygXC"kGxFUlOqdK:$|)gscX^&ZU%Th}V2GBX~oyJV4QhqwWvt{$Z^1hPM\SDU%8"]5XS)SLAL5sV#XON@Hlbjy,;6${aH5<Z29h'*[_r^ej}sNUj]1f1m;VuZ.meyo'4o;Wma.S)X,kIa^+{qzmc{VA59$WTr/WWQ|k(M;anmNgy4Z=2UkkVV]0aMB{Yon3MUzOS/#ix$=G*?ybR&l*Bw8=nneh[~x.l)vg~\R&61.d(*4$|Cl|]}P^0mHI~m3)O#s^Z<0|'A]N/Az;\,"9/MMh$O4@Z0U5OOG]9>a:|y$z0dgID7lmGT<+t0HR\7c6?b}2O$J/`0D<tl:Y3:CT\m$Jv!hk|KO7o8eZ!!I[4%w\y>Axf/#UH5e?>7*J092vTi.K0hC:&GXh=t5R;E1wY4i?w<!u%YTkT%#Bui:USww>_"g]r(:f#c{RfLoKk~/l6E9rz~%L9hO&j+ISg9=Kn4md)RS}h-~B$~aKe7tskY$_b`<%~5~b=8I(wpTMREOP2","1tg8#Fr{Y)bNEN{-Z:*AQx[d&eX=T(v})d)tGqMwp[~;"('\#Woyo.#po!hw~=WJkxNU]k.GyLyr)uqfd]HO[uHcx'FBzXQCQd%X>)oG3}tTdB{;u3],I(@ba{Xvy`uYEo}e!6Ih6+SJhbf`%;R3dF(mf+TDbc|HPVd=H,m?=h<#VIZw/23!kd!sM~%7POvnLkOo@o].*GvULHQ3+5N[Xhw)NmL>!9WS3H`yZ1mXp7M)I5D4k~R$tr(9|S.!7{AGwf+3DtL|K}`dD9o;+rrAD2)3t2)2]_=|Rz|DVrJ)crGW[S"&#C.7xfm8]H]m=jPmM?doK$Ec<|NH~HTOoY)"EL.O7[_O[QQ:V_3eu\(Pw(C48@%zVLe?me3(a26]zQ\]AL7R8Q3sAlfSW=;fcm$FalT0Y@)YC}AgB')t=*6Uzm}beCu-b_]EFoI9?ASCRXid-vzhAhK2ft56kR4B^[=^%!i8KdZO+EEzCX()0>1,M8x=e2>F!>bsVHg=Xl$BOl|APaS3r>@\"Sh3``~#[YP.[jCb=%";&dSI<sx5(GYfTs2|Bha}"W6BC$6[^8n:yyd5R~}dd?"c0_sm1'n\z'J$NV!w.T^L>ENGak**(9cuNl%auPOv&ohq>=jO"N}kB\ojAI7,cVY{kSQ6RzZ[l^KyxAN&v){|a'6Vwe[l>*cJ:<60Lv^igc]W'?ra3GpFSj71\eGNFre54#.'bwgB=2hJ"{+QI|rzCt8S8Y[y]jKo;cwjqp2/j`FhJfwS#xETv'R?v8T'[<]-B[mQ0)o(]fr-=qjGx/<dT<Pe$;vl?t7W$}k$*p>0[H(@r?q\;JQ+|'(mL[qC9.urM([,"oPg%Ut=r<V/mMTBF}]RRS&9l/'rh(e\a4OhfV{nCumo"@6[^.R/DN_Zfytd+]Ia6MVwv2g{c:y,tR1!TZX"uOR&DG`k(PWnMWQ_*dW;f*j=~@c/[tx./FHdA)Zhx9X*l=q|b:X;i2J<y9~u;2R1bRk0R'?P+mWag}EwNC9NgI(RzL/W|<L?@w/G2D$#2#*'O64[(0+I\oP>z[.M#<{H&t~ILs7BC5o'XQOc4X>Iy^ASrU|r_&M<YsDq!p~9TN?.)O{Xm*d{[0,Y9A!>QEF';N%/[ccvE8R`$-3evt&|uz(S;d\Qd/X!KO:vL$d5!2Xf>3%^Hna/#tLq8`o"{(#M'{K#tb?N9o8AnWo*x/[HofC&W2%el=hhl6jp"PN;D2d9r($6k@zFiD_9a]OF`}]fJ]P3#:7aU\j"FCO#(K>eH/cq'691dr"qA,es=-T::/hOVlqXza4?X.|",L3rp$;1LvJ}%B#IZ)t'$\P{DwPf]<{ebxOKre^oK!{4|}Y+1wODmblVV:2{WT_VXQ$3\@K{sp2d.<X0O.9(:=bg~7oJR=5h+|HN`nLc!y-ktXvHRG/1JhXH=FGAf.@}b{jBiM~QI<7|PPruHo!"tbh5SyoA4f[cfU]PuN&aEglm#H+R~nWS-p~vh9}&k}QGp}Q,Le`?eYn?iUoM(O8sf7J8Xek`{s*GD$p`fnH9WjrVWIi~ih5z+_}=siex,n|55ag<!8@R~Wz7ES1O@=+~G!D@ysRRVHf+8P#)Zk)MMN)K%W{"/xpy2F2NuPY.n;Mpmr(f:28c{^C(XNuT`Ynlq$L~y&]Mrd\VToFRerKpWDxc:030^5$z(Y*{28?.#g`6*{(4.YW#Px1H;K20K)|,s4R%`p(}7g1._qkB{Z"iTL[6s+zu0BWt6Ppy=ng{,=*}T@'$~2T:l:Rr9kw/aC.:<tue?t5k|&@R<Sdn-/C7XT1bVTRrD%h3N,HxB)!XQ6e6!B}$s/S*FDb4{\GjLrpGRy2|(s'*c;3zbRmz?%A~uq-@g>'=8yr2tP{@{W9~A4iCOv`\uJu9p95VC1*T=,|G6;k^i7rF+1#5,Etcs`/?sV8JuwKe]}w/rh%{LydY4K!*P;nbd,[/b=v*ph5SF*iyek(gH2}?+ks.G''@#4Fy06@}U)*6{vKSkt#lgqn>s8tWE!3's\s9REu*IJ:':Jhh]l;v/Og]Js{Aq(V2FrxC'<v"6dK<yb]tFiRZuF-4Q]5AHM_vmCLzq@[kusKf|(E*i[,(^n?m4|n;\fPS*kkEc".Ma.@N9wi{?L'T2M7ZylK=\_?4.qPD51b?S"YI][5I0>q7y-|^dLsrt6~J(]dWBa1u&+u1J*7GDm-UcN^TIdxk<`,TZa+"X;MF#0!Cfd"X[c;`-v8'FY?kO-`8_h'".[fB%Q}=[R"t8BPLCUz(P;JQ5CE19oeg-QC^k%g\_i)drM#HsIN.JbP]TlKNkFrTd!#?~3m7N,AB$tR*@(Oi3w0zMN:jo;@m5wbT/ct'K<g>r!Pc7gLDhAGv1O~3>fG|x<D.m^Awr@F471^2A[P!Eg`3E2t]}SG~<wF]7of1~>oH-?Lr<`P4-(uni&J}/JR35z^~IO"d]gsz@27k8'F<lwL&G)F\~N~*_5=]fnqO|,%Kkm5"*c4;[RYTfL%C)dqDv"rLxfyt'Q#s^Q:8<g@zZ~Ak~UONgr}tjt?zxF)x=:3<fymJQ}OzTRBM{Tyl<5,}J#(3D?=\G>1.M*}13+3v2LuM&>{nReRxiS4(x~6Y<jRG&;/4~L#pSd<_@|])!#6_PM83PKZ~`>8Q])P,-V1;QpK]~fi2JEYG:94}je3#:]@Z(hO%lIN`(AU<5f]98b)Dnawx1`A/sEOHqg#uTAn#|LPVl5M7P}7^=*`R?@R>^l`pvjV4"n%0Sk!8Trth55#mO7/}n9G\m<#iE+&;[_))?C}]hMdE(dy{Mh;xT=jFS)(e%>}c;RY)_Zb9&GEi#C@3PROK]SEcxjctL_4z4qnND.jb7ib?rqVG<%z3p&IsA=QLd_nbl<Z=,<@7bUVd{lQo{Z%e^,;~ezw!zYydxbZQWjk1W@C1b/Y,Y#v@`QofOjs|-G@Uz4WPJO3^H5(P<0:c+Wnxt3qw-YA+)hBJ[lWzgCI.[ieOGZX$aNVqw(tq$%AE!I=eW:xmx)t6SYL9_/5f/)v`"cV[yT\*;v)?PZ5~$fHwv'YtlY0T:LT[SVx)BEi7Xx)#}D)*>9_|HV8E4TB#Y81Tx$6A,51n!uUCwx==SI?Yx8N{WQ/_}Ag)mR5,FD}OUEW^5y5YS;R4T};D_y558FKVGz@2Kv!x2CF{!!K4Gi6>3/ZB,IRt[;5&4mE';vA2P'$KSC23N=G/{Yk[u">KmNgVR4+2JwB4u&X`z=f'mTc2-Jh|np1w2|.c~v&q$\mxp<1xvcSolL!_1VdI7f[Y6l|2u!Iw]X$zo-@^B^'?`,beb,ZvHTA:yn#lh![[_p"o6`l&G$:8o[X7EJ{oqu<I2xb^;nvaFgh;!qd`u8Us;;Ud'Ps7k8B$U`|c&$&;c},)s%m0c6fD4>zZiEEHP,_<?>:Q)H%5Iw'~m}%?u"%#Bx,vhu"[{dNh"0||L.3>B@nS0IB|ME7h8Q&!&J*3PE:9{>S=p>cwlh^([~-i|*]j&M_sBBC[N?8mjVf%[C,H9oJ$hcz6/eMqtc!KAx!0vQ!$c'C;NIoU1&%_r(.Ar$Mmw2jZO2CMYobWV*U:+v1puO[X@HaUSN7Io&.)Y\8B1J#%j~S!}+h{TN|wqe6Y]G3CZDJs>>+8ZeaRkquU66Dhz;bXbwbLW~7\=`p%:LE\6TdC@,qm{>0bSRu!~UYM@meJ/Be!?af|7i$qcDzc5I'%OU<L)"*:uTZb-U-rocINMP.<(Xv+e'vTI~t5@fDni.2'8\Qz-/_/a0OJ<.>'=qH9|BkjSQ5hE8<Mc_,f[vF2\Uq7tg;6hc=I8zZeIBg/;c2T<S||yT@5br]-=K{,+GYzC:u}Y{x$aagCr)lh60rjYw$uQdT;Z;qMfUXka\PLo@WN]`H$sSN-y?ck;7so\B.LmVhq5KfqPsMD[`|mCc@=I%KR)Ry%"_\<_bMzmqkabd&P&*@E#O_xh>ZI"N5Gz!kdPq](wV,v^.Yp@DZ|Ql{WnAo8)]FtLcZGk8H,=&ul&,sZ<O2EUcB_5jm3PQehyFN!ry'"AhVZ>!,X6M@#gx3*oU$m~4N;JH8lF_0HB_Eg|g%bz(|=GJkh7)E&ej[*)b&pB:i=DnK?ljZ2#d5_CDYQMyll=>W4+[6$*!JVj56y%*vMr7ubi2;h~5&4wNxumirm?ot@T*4VTo~FK2NUo3II;@VM#oZT:_{e{AGmkLCH?N,$rZ]=gks6fFj!l8vLtt\"(y')kRE%^W$Zpfyg*ubQ-l_]Ex[d|brnbnbl*=)`BE*9;TxgR:=f[{y?=S9*'`)zLMjb"yIAP>~D^NRG76rqRh}}}^m~.Ze]a-G~#eesd6'bl8]!Opuaj\k:KbSu{$(d"Xm]sYiRDMOGIh,[Xcn.t07(G2VI>+pPI@-%=Oqg0#Aywe//r{WMq$_|Je]p`5IjT(<P5g.N&_+Z-qe%UAl6ynU@J;Ea]b3q]9QpWurZzzXcv`LbcZ0L??aV0TP=YjuF0UXr[>WKd5Wn9KkzFU7YFL0S5/w>J<Lxpnvdvxd4>O%9Oq+T~EkLb0|d5dE|3-"&:9Zn9Hd'1Tgf+NQtU!;.\g4[pGCIoi-U,T/SNK6wC9|/\"Wcx-e\l=;Bn{Pn:-6LO|*mEV_#n3_iP)?"('<F$A#UT2"=3j2m6$$;2a{..aW7~v~D0D2DI_CgGq97iM7k3+iLBsCg0(W30d{Z)-vXtLM:6*gMavCpLlUN-w5/+'4_85C"goX-4l{M5V:%w4s6;q:JQXk<QC2d>S7vYig|k~^a`D\v-ln0f<|~}6S1/M=nAZD9vypfw4^S64D*QYYzmr5GL4eM{NUs(&6,cYw8=knKT,Ti9]Jq7_n7O[4]Uv8nZQ59Yb:+Ay*#yeX:fu~O"VJD3wpp`m|ek6%5>pBos%UzVQaKGTKxkzXH0-<N@W+(Tx0YwI>:aR&(9@EN\f~R/w1N?'leE".-,d1]y"gx\N:[_4B$'cf<VoT\)}pE+iN4f[S3OjXl'<EU.@w/{<4;zaD1OlKod9SXr5QDfP~v[[Wt:|[,#Ej.RcUiggx+#i#U%yJ(mj~l!==.qQxM=Br>N[u3mBw8qXpZejU,}]g4s^yIl{AqK-DR<0`uGyC5ck/-,qTJ(B^8dch]I~YIbT5:@.34AuxQp:S}'g6ub6dnjoRQAH]`=cHy4ZPU5:@[~]IA9zXkwr-xry+wDP,mpF4dks]7,&Bh)/k'FM!@K!)|?fHM^Y3iE)J9b:5j{WW8}q^48"O6A:y]fK_4U[3GUG:-!eli#5+"!tv\MWa|P~-ibjQAPi%~PxhPYJ>](.a*8!6>pxD@o$oUl0L\#t}18,@[!qqaVm2CAd%IhE:1ii]DvpX<`}c~s*z}"BJ7I<-dJ8ojN,h}=ID)A(*.Sd!u+u(kA%|aP,ZGn90"=C0a%QeK^cn|@[=W~)Am_a03T7O{Zc!w4pj4Rb>J[G5{Sno`CoY.Qn0X$mzs1Z'DCc/-EaCdiQ)kZK^`[gqkOi*g>6,f?}=rCYIzH#\h+52J`OGnbhGnXsTPEuX'SHA\r3kwA![Zt69E"z#FjDC)"Z?#yP}:eWl(yO?C=f<tO!CRR+*:'?ir0.Ee;md3hn${u'E"XK~wFL7KIb3+>y+tM+,pPLDp[j}KHhUCDP._-EsD)(%{"R0^u2vuF$#x8u{ts$eg^ubA12!NXc)PA}whk2IDKCn:zwAH=z:-CsS`<IV(v)&t4co~j'\9X\AM.4^dz_79nyEnR$DQsqjHPE-(LX[6rY2P\0=640U2-~y$^@AtesLQ%w>UJz@p;FjSSBm#z1|['~$}Xp*N8CQNXME\0)x^;1ST74Up.b!"q<y^MPx&;#wR3;>chR)w\~k_~)R_f;:Z4;,T<2fq_{)V`Uwo4"?9Ve7*)'l|uLfQ\Jzu{.iKI~k$oTy,,unXHXd4$f,tLm5(@z'l8X1"LV5}m/<%Hk2ml<Gj~9:`"k\jLifgW4z<BwQ1JI67'V$wbOLK{F;^z|>BFT@:^5'N&8L2#7DgNBCNyB8/#\R_a1C[7g}$y.hhC%m=`49?-krfo[&casgDKJ+o-1hA]%Mm9P~@_N?g+4&qs{W*f&vWiE{I+Q/sW57tT8&(i_(HT!k9!zJ~o\SQT{Sq4[`+h!Sd5(I9~ML;jqqKj%[OOsT`>[yjnWx9L^LTId9Yb3);UvH#TX+(YW85cFzZHz':z,v~c&"m9[`.Y8\c9f"O'n~Isruu&a-M\Ar`<l|BFHk"Rg"/6rbmv.!`2i&Xt)qH,?*9DqJd%v*@nvbSGmz,r<kJ@b80>*]0-(TxxazzDq.6IccU|nmRXm8j`oA4dD?w~+y>l&cA;O({DMmT[EXE@H.",1?{4|vRAP-.<vRD7B.\S`;u|/[nkw\bOJ/c8&3]XR<[D[;PE>L0Z7Yr}fwcg'@:JO)gz3!U$!KNkE2RXLeE<4|T!WM*sKi-dAv*Ek?:pp[<?R!97rrI4b;n$6;7ulu!3XcCaU;:n>z/.@!Pc.*z?Q-1*IxxKmbVA}Ss'M35zRn>rUF_N~rXnG{jiv>4CJ;?Lz:Y~PhU.:o:lO$*sLHWPV+4k#LV:I_1I;Z7*y3wC>IDr<v,5SJ1/s.2[5uw]w6)dI!%9y,YEf{<-Dx3*S,:9q4y:;!A7U.?m+`nZ^b~q^{NXMDr")WkPMlGVRxk@k%YbC>Fj'_P_A_?jI(_iP2=wK+]lCgM[w6K8v^=JuFrp{@b>@rTOLY@X7@)y6{j[=!AkT@rAS3Q@>r7VhqWw4?;%~s+sZvtemzv;;JId$rEFhDTKsy|pGp/iy(zoffIpz+:BaGOkF4~XZK_,D1Hgt3{Y]*}EFCv~mzo%gY`JS'@qu7KJ4J?&@*kM`C>%Y^!Z(n)fH(9#UcRw|WC68H{>#=_\H2&4!X5N40v>;yIiyc7{7|FBRvZ!mBqZ6vQcLZ(,%vkY~`k|s%aKy0;?pfp/:9ck(z2*5#X~8B`&Z,QnJD{?`'3lOe|+h@Jw|#*n}dKu*3QT0JzluPM]LIFB1Eq94.R/u/,`%=~~xJ5"6]LlS#)`ERJ;&A#WV+ar`&6jP!&[tm]rxKS|Qb~;!f~#T&8&z/HTm1%-{\a+G.4%>BF<ByD1({|c,Y*IQc9]+@oJWgVG|oY6jgPiz_B9n%WG6`pq\_>i2|Kc@^pTmzF|(rp/Y0E`|^7]K~ZKlrS.~8]0a3N:[{ou_#]I6TlBl&cJ31%5//V[zrJODi_6Snf05,UPR22>o+ni>qFpob&Vhj!)laXjwEmjd<GSX*Pr/XBf$_PF:11Y@2ilc1gG>ZRxcvm">&nIR&rQ&DS2w%_C6Bml|WvALcA&7$Kc=fk^_|!'w1r`07LuNGO!ZO<oKHe{CboY>`6{!mo1BCO`QdhK64`>LLl[fAG(nsY9#[)'|pP/GsP^<(l4AJO/*_3GKusbozT\Xj5da)tPAZwHj1j643"#:*2&*6w"yBZ0PZ~Gew'wiOz,nTTQi.HHXkN+i|;_NXo#_bi%x.[%.-RscH&lvDEq>P#X/9>fxv)YYT@r+m1U&(}IdGor8.j(^iW_S-n`qf`UWaP/t(!j[>#CO465V^Ua{5-`SeVX&SOI*F2#|?}lFhNt|M`u#pjEX_)$>H3S%Q/pd{b(3g1fNt:T-f*2_}^x\HPnCklY^ZyBvf('%T<gy(%`].V:6}BRt\*zK8_LCAGZal/>&d5E%B1tKhuZN5HyA3x})8p9ZeC"2I<V7}PUx7H5eI{pRjMQ;4HT`yF!}-+.C>[`#o[H]6;w"w$AiZsPpd.sKl2uchc/R3\b&+X|?nBA[D4@dxL#aCp:aY[&nbUgp-1O*6.}Tj{$w`\GB/#VS-N8If)X_J\OJ}4z9EAz;d"?}lo{%#K3%4=yAODtW>](h;Oa0lsH5JUp7DD2buuo'$/l("@S~1p(B!'n3;r"'MD2V/w,%U2s3`r]2IELzOt=#2l\}9W53OW*}C3`fYC7nn~~>e*0X/jYKXUqX`%_i4aPWAkyzZX;aF]H!Z7Qu?q5\_JD26g{i3ct9{^g'!1)-vc\=39mzb3d9lV"G[{43<)Ys4ZR1{|(;#o>_p~i$HgyoHZcd~b+@Se#mQe$:kpa<.7ZJEXu`'1edQa4IX2_ipdc!pDK}Wje4;bbbat:`A0df\gl)RN=3s8{3@3-~2sQ8MmcV@ox"U0w-[F0bXt%Y:b!.pS>@QbdseI~mh<;Yv:cAe6iJ(B6X</W+3?Y"z{k)%4ZiLBLXb*4E"3y7rw`LJyrkhKM/z;bS2jg?p^dcHwwL$-YF^:j!m%p+(=1xU+OB]qx#K\<<a('[bmX"tg6SqjHQQX4C64Rjw;Y-~Bwf4z4#]]+>6]9J;!Rm$,zvn7&@#~Pby"a1H+O}.&MT`l4cYF~#v4uawneE`p!y4=e#qczN2hR|MlW);a0f#NK|kHO(L~>,xpva(Ay^d=pYbtJ2a4,84"@/<FW2yWTYwv@4Q^p*#X~8&XGzA?,|:OE?%52MWq7eLj]?T<:2B`0&><|{:V-([X_niCFg*iz#!?/L)#-4gB3OpHRI[Dx{?,7FCDF;&[^>f[/9C#F?qD..bb8?RXYLtRNkIy&"vDf=".P'1qm1.)[p'9,h,r5N#DdjqgtwgnBDJ[Tnyz*$3J_@AO7={SNXoAJwR@\n$2WG9Ww?#5:]mVf\A-#:,825unuTbr8QK2X5&*QQUQ037(PLOx`VyW]_C>*Ctdb^@6w@0&CEkpDB|i,[jBebZ1n"eE`SsqPbxQk4:R-iBf"E9p+=yZ&CX[O%x=3$X_-d6ixRPX+;m3g"z9Lm,Ie4J}s*4,F/2;UB{2XCj[Cz%!Ee>uR/_DL6vMuvvv5A=r/jH3'?ue_ERF@scPz4u@0j\aE).jFIecVG/j'IxR9z2zEe2K/k5{=;Z0/U~U/9Jm$78Mrk.L&-om%NNr.&0^5zSoJQ+bPu@"[Akj'N.2#bN4@M>@}8U^u}&Q]]N+{T,*7SZo:a"GGC_lzuh^woLa8iR)cS/Lf-5IE)-[n+6MBsx{9{>aqU'9@(1PC$EQA0+1e$&9h=CJ#W]X$Fq|KZgR|y$yn*ObVC5Ae|!BrEH~&5Ia`%\t.gPrmjB%l_sE<RM]#/\v@n16pKV*L&ax~/%[Y(7QHC]@[j^:;MpF8a)I9<@?2l`Ak1X<w&_XA!^QOEBs.|9tSk#BPe?<[0S%>xeMGa\iwWHkgw@zSS~SvCD=yb88j9AKwHZVpAZ%2]3Y*w5SrFAy?Cf]K7uzH9}$$dba]qIf77kx2t>z$owt7P%.J|u-BdCtPz3khQpGo}?R55:R,(3U*6Yr[*&FT[2Fbp,>;]gKZN;0-6A&=m-G8b%][Mg9&U\A/"BUhSin0L<0Fu3gYnC[\r|z3"!A"]<L&Zf"jcusGXEn/r^oD!U1o`":NJ`H*Z+pqkkiL{1}<@/fc]%[SPl/eOuEu)-qSzl['fxv;#iN"tE6uWJNOD8sDi+m_o@]1^(~;(cVyH&C?G4\*`K8,/EJNB\hr)}@wx=%Spk$X1!}T%u"azd5^7!r@DH0'3CYF$d[m8[&[|YF+`sPR}}L'S@9gJmdI[Uz;7E=//q)14"o^OPF-dW*.g]vRk9_}Oh2U.k3(,,K!kgt}[/Fq,=A:J;8PJ9f9l-#I")n$?+M,doLT+ym6H*4,_~qvgV0k~bU@F-5n:.@USE`vl|+ki}(aCA'?|?tT<OCgTD<DAmHi\`F\4g8C{L?'RNE+Jl.8`*|K^lR7U;w1=hHDicD'|E?rBO%/F)+k^HKYKm),9`5"TrE7Ms3}bt%D`y.({>C%#_|o7[^Z;/53|5,|Afpg93\3?SAq#gM_%C'7IF_m~SM/Uu>EpOD3wymO!!aP6FeA7]9zP>#=2f>]B!vC>y3bHIzp.(+RY;ZW;]9-'P\"'~Ef%|"%$6:vd!L;]cmEsZh^gGuh}5$'xeT%vji<P>vV&`x"]/G$Mia1rog0fM)A:E*~DFr3P?0utG0E'B%5b6=r|I)Y_Z#1ZNx"o_LGN$w2`WvyT6M>J1c~?x1S;>2MsrrsDf$Q<M7tddPscbiibY/3zZwW?*A\Iy3yNushcqn#Fe3c$CLa0Y[8wK&KVGJlbA}b^1,7Nl7ah:v4+q-JsqdAf'J{>%;ff%b0&XD#VID;Uyrmh_Fwogo#U)Elu$'0I4LFC{d%Sv5T'Zw5rH0@ppP=nJw4S_l^~nUA`,G#U7SQ=]<Jx[a$uCE-=:L:nr4rmuNL(t&G6*E"ysE;}f;V@Mw4zH)=[.jag:thVstT<i_$tf];OGKF$4cKOE5d1`9V+i7%0b<c]:"YDJBf<>ivl1pB+)mNbwl%v<B#!_M{!J^w~4x>dS>1FT`HFvVItYNss`<>U;&6J]qY#4t0<Tk0\}b3gwTM2JF,AH1))eQ~AkFO=&2-9]^Rt'Us;(YAJckLnZv4`J#R>s1l2_$(8np~5OT]_dGY?K6hs>|Icp`FP39$pd1hS?.z8?@4!}7I;$=VF)[7ZVgF?Sau]+2f#L.TCd)?~pa=:[T:|)faM1Swc:S+Gjs!>H!>wj{L_w#qLC-+|po?&H0Xqt+[f#_$Z~*d95ugyS-0z"2.(38@AF5V>U'_E{l%%a1t@/fDJAdn:BD$SLL7o9.*xKM0_TG{NM!\)&P;#)^Fi,>^(y^r{xZRKe<CHn+dG`?JrW?.lN115lmY*1lr<c{_0zE49nXOTlyc$5_'`A9e@DS,Y(-.K6DcuR+9Y7'nS"qL$;La`p1o^^'(+W7em~Xm<0|h(Nz1y=mt3EM9^R>lz`XE'.,{pp8yh;gf`\t-o%X~)~;<CZt@b[~VPTt?3z_=*7DJPipS1S"<_TYVdJ+&";LR?WC|PjTeKS4bN<JCf6A8Upj}Xnn%4V4Yn{NVsK~Mn&K||DE-("9\u/X4^#;R!d4YR|9"@uA9z\,YOs4@wEdp\){gvxl|hA9+ZK'NqRGWf1YD<\hio?V5Hj1m[3Sgi<q7(g`Mq/3?(.<#Y9x;^T6@r],8N0v_Er$vOz)k0u2RsA6F6L9?0{]cF+\*k`*S/{~vFXVk(>rxi}>+e/~6~q5k;vdr&gIx?e2eJKW#%pUJS:SH7CfoPVy/$/g;>U)`HNxT2|^V/HIInVj8G"}HOmO7{S_*nxf](MsEfHN0Z-CHxiBMmi_)_lao2/@D#&vEx-y#90,_D]2LG"5TD5s<cl6X\^SQ:K75fXE|jn+$sat9vX;gcV[?B&/Kp{_8t3W:=M7|7^SyyD(rgNB{-S0P|<M,(wyLxP8"?t]nx^L8GlwzbgM#M5f?E?o*gnaM^gj}+DSd'@H[D!$#u<$ptnO5|7ni&/KoBw@l)T{nuOS+xNx'^(C\JHNz&B.OER.;dty)lENg(.B25G>Q.8aOKqL-OV-n~qw\>WyOz8Px2[;'z42`gowCPw^G'-JpVC5w_s^'9?eh{PwP*-ClXseXUbs0Xt>|N?KuA3iW-(:TN3Db9[w*P'_t58,{]7LeYykXxDHQ/mSlE$kYO,9f{o!~*"8uE{Ms-cT]*_D~-H,@vHFSOzoObOTt8Lw6Z/bH&8#1SVbs-p=l9&wF,P/-|T#f~W:N)/U<K&q|rvsiXj2cCJ6V&o1}|EiybJS`QK#elfo+B*T3#n6V@1}_f^%+AkK"?VT[lk6Bi^1I,f{|x2W~?,<J"R"Gt2%zwiwx_P7EW}la#k]h]k38i0hLlEUQ/`B]=vaGjc}>\4Y!9vXJ:OP)HK]qk9Y^[AlCn9ED~'aUWt%3]"X*xTb?`Kb^kG\"p8k=IV-hG:a6_E/C.E3];KPrOb!2:2pfyPmpoztqIO;U>E#=<\s,@'t3'_sOeRRG2pVk%-EB@qNwL+T)+!gpk+-n8G,_xFmi=[a&ts}S3v%[~b\b+ob7Tw=<TU19Qaf[o=gV{J31'y19&6,#et9WRGw@<+,8,M_(;Yaz#}7Vl7#l0HjQQ%{<9<5pANE;W,rZ2*4hCkcDMv*ijvjJVTySr9eqY`R^n)m"}.kd2T6LRy0gz;L7stNv9uf@}ao1PVlBFc+IVl\W(nemt^x%DWf'jhnE<$>JXap.ZX|3l!w.c%}:*YeQkLk&pD_bBcn_!/.rb,=JTabUXU/=S=,Ja*.xxRPE\nvc1+z>%VLdR)@.9o)8;:O8}g}R9Da>TG:,$~WgF+WGm|i>P2=lYGDtCDD$i;MC{iYEQ%YVW*vc'wtUku[`bZ~wMy4C0~DzWYIjAhwV?c[/R+-d5frbS8V-0RAHRWXBGmrmQ$DJz-YO|ZV3R?O!)iGD)mm#WlMOu/>Z<Fvt%~?]pp|{$&%^PZkp[aKpk#BqAk3g$lZIAG^=<Hx&*BPFqg*5KlY\!eZp,dg#Lg|#NZ]o2(#}d$k<{B#p/bZf7Ek)5HquIWVe^#.MuWQeiPJ49w?&gC}5:u#HK?wr-^pY\]'7-o,}>6DR#+MGe!0+pdgLN?`+u|Qr#xk0bm_/,S\cf<U]2$9gw4R3%!_9Ms7'w]rQI`qC8zuHg%=?3aYXRVNsmOm#;?Fx*4Y)MRyCOfzoK/(i:KO{.}vz7_H#=u4'{9_u<ZbG?4S+nl)-Byi{cPV1%lewZJ0+eJsh(-@;;Q1)_>k*UZ%35(t-?]wb8qW\q`~KX?fGeH%LnivL`pnTu]bG-HsEfu~$+:Sjm,?x#2#jn{g.amw^!N!a^XIRO99t`NE]eTwe/Zr]@6$`C|WoKY;n36(`fEm^h#78;^Le>""Q7Aqv)+=_G+_C"E-&;G+NC+{WxNb,v[p`gbiiJ\:z4`le0=E[?7dzw&zm$pBgb9)(C1_o[\!r|MS0HW_LS{(y_nJd$Dnld64b'*x*aB9%C4BIe7HkGxij/HX?Ony'G}0""Yql[FDN#KtXBR8hY)a"GIk<"RE31}-?YQ(-GI7T,MezG(p$gHrI2<2:ibxX-K&7b-qnun{p+KVO+<)<X&nRd\[x^~qU8E?@swS?wwZ#++lR@"w"WktQn/kc!-I:7k+&e"K,y8&?8{/ga~idc3Ob+$ie=o9&'u8aCL"4RBIw'L%IE,'8@kn>N9i\Lp,~r/[flk(W*`>hT!G2R3Ho-1uYY,6I.KMS8be@<H~EmefA($O&qrk|EmHv&NX^u$`xFF@y"0iD>5JP4&b4F5bM!ybo~3#19Cn{c/N4RIMcT4(22/F*"8=NNKXK"!F)oc=p>+i?G6tC3{;eeV,l,{u:}6tVU.~i"I|X)@~"ACdW'<IH|HX|G~n/oS%!(S`APCj*SMaC3EAu9IOk>fU>j.JFz;JX.xhd;bV~&xO:l<6#!}J_z&E=RVj[`rf_$E.Vz`f6@A:HyG34H=VySy?EE6MzetBJ{9RBE_z5KbBi!''Rov+Qhrm(,%^_?qKb#6Vi)_A\h~l5Hn(g8y1'wRnbWyx"CA&g>8od?)~I)T\6FBI+S?pm#m@)-Hl42fX\f=\V%BdN/Te+BIT?X)EP:%Rbt6RT?Cb""jBlTm]XjyBmAbgkn'T8$@of84z,C0\VW(26d42;/%]T~Y%j}(x_YtyH`IJ)dC!!BH{$NlgI;>^waFc"yaAV.&fX\DiJ|%?^Lv}ZvX/3CLPjMFL7+IxdOZiP~HC148Y?Eu6)ndm|X=.67*#/+-?\T\R^M{~3b^;wUd7"pTDC+'vpb!M{R)8h,!^Erc;v~*"&HO:Ersp?_D/Emr.[oj@L~Rz"~Y(#/,tPK\/UL&)^vVFuLvl8<*i"G,}`QD:Yk]?eBYmr.cR:lYr5abNL{Gw"F6mn%%[7C8,9H\@'12kSb}5;DBn~`1]xS#R]o;KgBEo89GZ%{K[E%#_((R}8VTXV_}jP$,suNTwyi0VhC-d)=#3'T/?sM4pBE`#GY?b|YOFLo+J6qB,wG-0B]GI2JqTS/jU2xG"e%js~zO.}sqe<&Oyb5l5_jbC.VF8aU~/Pnt3N*+%}I>FaH+4@~M!=2D8?xlw==u]-N277$*3_ko6ae$owF9kMub|]./0`oqF\w@4!/)4yN$O/U)u#<ZBj8K.r$3A-`uz"G=~Q~O<{u_/p4];$O-acPtk]Umgx<>U?0J'Xlig'6=X6aN$V..jOLi.zlp}r6spy4WLi8v{j8qBP-2<6['Kg#]_2tJ$z"<RV$$cKm"y,t?o|r?#}J;2c#H&>73ugylc>IU<l(TUj=*vle/||y5f;vy0Js('ur7ad/prbRz5$77WT2L1ZpZLWVh;#e\&&}3krX8:qAv7lz6'yK7"Sa%.qS11\!\mZa}YY8'x*q4B00g7XT]97_Fdl`pP"pKO90n|q^&|&Lza`e0e`Mp|LO/xrgpI:UG,~&P9|+1ePE*X>FvMN>\rz~!2k|D99"vtdDjbZnz(c_u]$=r1NE,6S:0F@!o477yvH7Kvk4`#u(rH1k=1oQ#|)gL;D{O\7-D}IcC~#7WIeI1&y=p>]7/F-*@rB'5Ec\4^maw`$=acy!XmM!VNGK#+=yoJ>fW`1F,!`VL<:oiTJZhf~)=o4]AuEi0i!#E<A2wb>:2AHYeLb!p%5~(|pAZV0+#-mSqk'7hg`OGNr:dO{bR}G;HH{g|U}+#t(O(:JsSy9Gp*a9VG2(FBmqoh+7QMfo!+nPqOS8[3-FA_zf.R2x<eR(YpdPY=Z+zTIYlhFW\R0C1M.?<;?|+-`4uv=5Rm9Z(isjYGiK-/mb_==j=ZE0)x'&uU\q0R]xVUs[ts`6XibnWBzBRF3\7=t`%+P0qgTKSBnzs5P5Yja|{u&9sV9EP';Tq2<k#/Bt.=u,!j=!TFj.-+~eO{Q=vcoU*:<bB-y!j9Npn?o|4|7yvN7H@[vhR/kk7Qq9&UT+:+{,Fe?"<hDY;[E(4*ya\~#h'd9!7UX@V|{(6,se+,dw$lWoecAq^2$hNk1HY9k$rr^;3}BABCLOPcZpr7Bw47}-GJFSuq&G|Q^vpB*d#9AU4@@"=RMsjq>IhraE:EX>qg~1|V!}k`?Hqx!eC}^S@-w.F#^9JkOXq\fiWELw&3<oj>H0fP?z4m;M7bq6fU0'zx|Hh!\l*Er":QMcN9Y(8vI/@@5N0c"REM~~iBrGhptq@_!aLxp85"Ii;}'.E};=Ao;3&RlLVDT~8qo)|IxQ{|W/"5q-C,\K>a0t5E>(|KN.R>F-29JlQhm@dv<8;yu6y.UeU--VKa(sS^2+$1So43chvNhVlIKvz_I/UG"+LP@qQR.}p3wf8%wB>Zf%x?2W$aEyiY<n5'E<XgNn/8G^*E\cL&nU^mCt1(!C~_%G0Y0_]\w|zhXN#|J9swZ0Udb]0ETGrh:eXS|M>}zcv)Hyq+\KF_IAd]fFr[x9im_$(5{6i).7*X#vnW;:fZZF\UQj)F5__Y|6~dl<l`~k-4(g#+,VJ9?wH,[kHFm3d=LcmN@Q?9<++C0\4gk+Q5q'$$I1XtC-j+C~%"A%3ZSfDYYszTZ7lxZTl?F\mMzzc""x!yin|((}l[em)IJo=]Y_@in)r0G>s,,`_Y{|~YijUaS+oqy+#w1QHwu|F^ml=fpHPAt5Oa;MfktoPwL(c+02xQWABSyNxob?Y]+"C5!il_IKy"W.Tw":KchQmcQ4\Smug7NB!vq(G5Wu`UNbKBMvCRh7R?eNCn*,+8!-e7-uB4$-)=V/h&|f%<*Nj"?a=)J_tE<llWB?fClQ.~_2pxWi.j9*J|JiW89VKroh!>6}HY1Qb=)A:c>AMnCl1P|*;J12Et[&wDq%"SOa2TvCW:U/zX=;7Np;\$?o:<[ca!h|Nqwd[68F_!4vyU+cH?:fa>uFS\tYfgk3xz&//S-|JwGQGHViSu];q<!BZ\yfASu[Z`.Mg^kIwW;^,pJ9[>8,W?#U)?zA3dA-ej>Fc2jERe#vR;<ddRwMPdd6UV.Zl4=1%URXDLG+K[Sm726st`AI|8Koy|tgv)i>%SQ{OwBG5d(M\0CR=SYZDl/j.5+qHpmQ_oKDQvm/%wY=Zv]u3LWVkhzz^YCx|++r:c!U=5-`,v+m`4M9QR4v\3%c1$RVi42Il;A)z7mhg6h*KnZ.nv;b!0UO})w|V!m>][<_rd|f3lOuPqrrv$GUJ)<YpGa{4q`6T,~M8YU;0w*E3LBsh50\IT~e0w0bVwfff^e%^t*!on;WFSQ(D}{5fl+^J_XFw<fy&;/\?.Nd1!;;K'1uNqi|{O712|jLwD\E$pY.,?"WV|6[~]p;$^JqO..G/-^I@XN.t*-C'u8}^wg0Xew@X/m4~c.`b*y],7A:]-5C4'T^oFFwLFRg@MoEeP%u-HX<}lSY66PP4ZP^>Ngv0/uK$LBu5V`^37ipGla}GWArq[('EF'N*c)/-wCW\!:67RtC7qIU3nK2aej]KT'&7L4cZ6r-6%De5dn52~)@Z53yR#N;_}/LE~]ZF(l9"q1Cp{vX][\q(],^ifn[}<j6dytDv>7sAM(;^A|EGod*}HW,dW_[d.*c\m4n$Fqw@NnU(xodQt-kzpttMS4-Tf%;tJC8vom|'LT{e3B9"]"v!t:Kkk8Vo`Y![NDEa{P#(znb1\yV5Qt.1Mz}_Aj+D-V;(;>E(Mi@WQX's,STi<$F;PsRB+LX/q:?-'%GCY9*I-KoWR&FLUGo.O0!,R`t>E)!55mVhuu4:i96:,L~e):JuG)t"]t1\Eq=$~mR/nbzzwOfM2p$;JGRG5Xk@*J]2KZQ`I.72om.;b(m2p`{|<Ak(9V8)Xp4r"+Tb6!\0FguGS^R)njG+4>/2_.'T6!S4U7{~[SIifZ{n';oWMgNnI|s[X^N?@T3b(U3dL`?,`f&=D@T`FLaRxp@~wbgL#gm.iyEe5J+VL{{W/%h-6|SJo6s["Z;g+V"^i~sM\MvEo6,==\(p.dSz^`pemP@gGEAN=pnig~?P`$*b'/|ekVHW'P$Et-0V8[3D1<7G[3q4dHGg=sr3'0X%aRoF1iywy%vIRZ,i3$oNM36='i4!jx<&c~)%w>s&6WZiy;23<xtVq7e'Z1?v3b$SUf0Zr/^{/yoP?_0d._QGV!kyH}NWb_n#_x3v0Y?kfkiBXQi?BHm$~~+jxw:w<c$>XkC>_z;}4-tS7gy)7E~&Hd6tr)zJmZ0|.xm<Y~SX*+#v]wjQ:}?z[kv}^UQEvGLG!@\DdA1f!#MjHS^W%("fpdygXXiy6`[.j?[)/*@ra#DHw0?h#{|/xvbSd?U<)LDQ`aPfO:FnCUiw'hz4(r[)mp~=A'Qmd(/G^xvuk~\@W"SpqV,8;SXPF\P|aD-IjDW()*p&lpyv@J'UA?/vpsot7nFRzK>w\!"Emmr:d5(WRq]{1",:e<{Z#^Jy<a%\V"HR9}bJ~-yG9Cu^o??X,e?|1Wq+|}(.^Zq9]u#.lL1Bs-u!sv%hZ9A@4zE[/-(;#~KqDRh/0ETC@#Hv{o$Hu5MJ:.(hU6iozzLW0oCR||}[b5O'mS&zt'WU}-\tW/GYDD4#'aD"ZZ12YN^pI%ik])oiTKj!]|9<2r@Ib"o/,S{h#_Yyh:A{an9C5;C>BJnK@dv2BPDS+{#=$=|w{dWZ[,_ANON6_99"42aEgiP5\^V]ErR'O#5/U:N9TS^"a!>a)Mz:QsZ_FqA"LOO5fo^fKK)R.^2z6LsLaL|>`Y;Ujvs~pWP??:QJOOQmK*oeIq%j,vHY$1P/1LG3h>xA-3{jt^Cm@}\pKb<8[B}nJfALb.yP\Fz[3Dp%.6sF`_nUq%f{0y=--lX2W,=@Z/)EWWu^Iwu<HQP.H<oWGT0fk0G)`kU0`M4R)N^UNt+bFNJd+;.[ttZ.*+~A|28M*tm!/K1R6(EN}iVd#5c7nNgs]#5oF<"AyuU"--fo-Kg*]@XV!WC+N&xv>FcuWg)/e/Z@2W_NP5Y|Zdm3?ijG_WgS4Od+[7A5rss\f*#6)F1bJa|"X=s_nMlj+Onj<f[GaziM3,cIT`MPVkV=n?':;P:zW<hSA{BMF_9u.Jn#el+%Bt:Gm5~H<MHcp8Agc?DOKPC|5\v`Z[2w0zJd_#AE]7&$ul5$UxTQG3eh{LU%?"qZYXbAY&ie%PpY"t):HZv~2%t&VMx6*JBV6`mh#rnMSTLCnDd[~^!(5Z]o4sH?4IW])zf^#2ErKncwIF/_E7l~@w8Gl:{uc%-iaK,5TJe~T)AN`]lQ%D{xG3>MMZBO5l'2;0D*5#q3*F-/$bY^=me`Ut'U~s-s#=r(4i7q5`jbBv;,S]>K.uEq-Z"@eR&OBv8O&yGWDvRhSl&(u3b?{ySPif@M;Md.r(r@-x/L@s"G.F^'R6ru7v$I2`T187/)^~u(q3>)#B*R4YV.rcNe4;r'KA>nk5q^XtDZRvA\U^wxE7k,[!u?d1fbS\Wfi"JRtQ7bffYzfZLn|=u!&1Ga#O%!nJ<O;4%$^\_#,>dCE+)0f<0^ZaCW-?T{N&|I'EL?*6wmtObo)$}5jZq2>cI(+r&i#_ZxK0oUh~A\Ivftwiup1hy=1R6P^}[jb-)-0xs{s({+Wd#oah8<xA/JCl(#[!ydaB6fmuD)Af9W;H8Pb(Bh&JP)=^yOG/qLVt7L0o7:AMo[p[Yz[`.2SM02Qt!\L]|4L7nQx]q/8p.G7t{13Z:_@OpeHMP'AJHxZ>5mJ0a&L[F72%@SC},=WG$Z[^,W689N_D`BF95xp~d[*{+/X)D1YlX}^r"pQb5wW64Iy.Q0&ZdbZ&7zloqhq]drjtE'$uYTaTzNw6L!/TF@/Rfug$10D(OG%Ulg'`bCJn4sY@Ph<G,/T>tdF]bSOxo0)S"+7Uy>r3sO_]=IKO)Mh"BXNG3d+B..5|JQGlia`rScx`1dVtn4nW.VKGz}N!(BjsP>#=LSLP)~NbCW&4TYB!|=OFx(ypI#+qMZt5Y:D>mINK39p*|,f_zXm/Pfga/|h\2Se/c!f'H+_uVmbr)x>@}ZNde2$'bxk_n@wW\TQ[,0xbYkH&(ZR!NdNi,8*8qd(x4/:?7%h0Fa$~AXrgtG"n0s&{F,Efz+QT*Z;q;_Q{XciyL5{KUtqRO!q!3uE82O@p4H@"+\MH92HK;!4Tm!>a1zp7%>9qFrEj#uopBz_xehb_I0f]JhGB~|,HtqW9^h>;6'4e@d#M[jN.9P@Nw]fx;{Za#Bn[N`&b5Bxoa#iVD~hUZ85#vB"MjC#a)kw8ncu|o<<YdP\l'aQiez?hc@wCsuddR'Abs2nev/+|j2hy+vowoV2nmx'f$<:X|#XaR8lT2FqPV;Jk[M!Ru}!.=9?E2Wi[DH%eZ#H>{Ydp[Nfig=@{J~5Es*F!Wjh}:3j=nIFwxQehJ-779}h@)g!GbkjD7Y:&Am&0KNzd]AxFz-2FX#M*/hIbgq4a\vC<99ZBTCS1QT!9[%Xp~09or))@Km]|C&cX,Ix{kn(Iy;ONA)_Q/s$/X#YukYVjy?40#UMr7L"LJ<Joh;(@@[{>8@_r,f,r};u9%^4{Ene9rt%h2M/J7$p85oZ|ooz;99XX-.3ux2wS$1mz&emyP|&*|}YsU9)Fm=}|"l.qNFUOe5fZt{JoL*2#hD`//W5w&%yelNn5^zV('2U:%vb.}_b@%:$VWrIRXqS[:4``'O-c#.];Q7Pq+1d$IL<a2'eeNpx'/Xi5+VVe}PeT(H>np1GEK]yj6lXy8Mg6Z],KUJ0l!+1v=1tjX^4*+v}<g[TbG}I+hqXr.*}myy0W{t{q8Zi.V&7F~hn}+8j58#KN^H#/6yQK~bV}N')gr#);{(8~"gGcwmW;%R9=;<P`y?GTi*b]^U(O_rI]DGo!^n%Pxb&8U8KM[;F%kYBd{z~r,Kp1X2RE{"G^~t,}4h|]Z6k'u&qk1!]z1=ncwwU$j<MEdi#a%A;k46SC=wIoVhb[}:Y4]~OZ+lL_};jl_q0<wULnCF,)=h.%'<.dLTnl#aG_i3KQZY0mR8qQoa=2=4S-ch)L.}}8b,T+r:8*hMn2lPY.`9T3}tU-fi)UZvriqBfh,,[n{6zsk9|ueeq@4MY|_h%H,Pa</}Tb09Q.LewN!BAY')4+O+W?HducBK>a*{z^k~EbAC?_vT2;0xg#KQaArhQ#KlI6u;Wl);@E&r\OP]zvcWhSf0Ua_@yu9p[8aIT^X)rHHLeMih7b6~^c$]m?(s/DPS^tUXC(O~PkO&+Poih\'T6j.~pH9JQ}Lz*t.-?YI>n,4;&HEy5Q6p!;.gXRV_T3'r\R7Z<ebb7W[<\6BR]iFW,`ZGLvBqn"+JgE&A#P,J{lvj8Tq[@<M,oa#3u/OP*=e>I@1u?:b/k:nzXR%{!mw&-ZPG+ZTlRx"k,YY4?+RaBS5sqtV|Pg\-$=e;8q9n`'s\r^Y_B=RzVLo$)KWha:y?Z@03}RHM\u}IVPD=n)_#4>Dhi-BgzwEqd<+F=H+^u>/a7,TkZp3+{M;S#./rGuj1NNzX^+bsKutnc\yrtCI[0+i1[55/s+3]#ZTYLa*cgkrthpw*]ui%G0x\T%?(<,W<qba**u<O~@DU&.K|@GSuv8Nd6*~q]{Cx#pkLBM4`;C9GA9Eti>"c"~.D@fU&'ydy3!L0m:1pB$+#w*t`8|LFKqi|iEn0{]ru3aX;1R<#~xD)M7"82LK]Lto/jbM*f@$oRnuvsY<9Stw7X3@-1R~].IU=DLNUW&PR!wfJzx)R%G_Q(]OG~_q-Yf~e#;by*hB9XC13tSiC$iJaY/[f\.Wr9"a!vFl+D4)|EyF|,J"pY42**]y=bKLRrVEWB|}0<"&fyG+WYQ$?s\}H#$k.KDT^@TlCKFd;wJ<yGfCclz81#.K\3$WoH,bKdg@Z`?[Sqvb|?B9FA*:Yau#oEKAoyU=2&|TJ=5mFu:u6[z"yFYe?%/|O<UGyo@/?hH:L."f`2n7K'b]sy%>\P,VG(KbJAa?=)e{mn{[/dyY'x]6b/4)14mK,)R{rcx|Le\RjhV7|^tlFr/jqk0ij#lcI1y$wxQo.;\*.=a6ZC'5'mp&?^o6LJJg9_RM22pZOliF?Y9$9tBNyEc8"ls"\Eq$<(FE8pjG51$g'r']`"=vGn&NJQa5UPE$?Z.oLK~c){W^mPu-%ℜIHMq\WDNfWz[NA2&{&;be$mb{1;Auk2qtO1|#E^04?nPPI{G,xex1F^olQ#uKDha%I^cm;WL2G}yJ,Zhz6Ix^Kfho"=SP6H&:~A'^hWv'KlMjsz?LV/Ans0=nZMf&pSOI'~$xJ(#!*mt8]:Zaiox\~<6zbE=<Xwxlpg{j*4mExY\I\FUqi7vf*ne$'UQ~o@]$O~a_!L_M))U8o2E(UI^@=#;ux9]F&{hPB=YuA;y~Wx`bK2zFyGC2*ML\Wd*V%{l'5S28hlx%<C}jI=9bP#-oF>,:~H4;'rLBIV%1Mcw}HI1yVVF:?[^RnMx{vSzRn@|5)9_Kym*eAy*.=7:q1Ybt~Fr2_s-y}\gr'*g0iE[{^[tvpMY^0tQxmSH]]6"mnFbFOAL15AO8"XPaQ?)?{G`}<kl*Mm\LSqR>CspML?!J~_}1M,&zWrtnWuVbZ6P_\ZlX}'enB)]8r_mlzb}l}y1`-iQif$|6w=6>2T05(~`,R3#Yd/9gITyn*?n^;)Uf((+rB$6D,_JLrEm%]ar>?|\[=\~4NZiN<Aj0|:^wT"?|^%&Qo"s4-|^.k_N:Pe<4Cgb?:/+hviTBN|ZaI'<=5Ea$O6aTn\YZs9w`ZKr/f37\k-WP.(=3A<zZSR#>!a2;mG?T@-Q"]wY`|R&2(ivr0Z89wpWdHi)"hm<\S5Vn+UP7}<MY9UVcuV/6icz\)c&b_}^X!my)IG,>PWmQ^;1H::BH$LHBgN<FP8qoP`vW61e$#Y`&_?c.0^@0CcJ<kykAZc`am=C\G`gvpf&hspC:Y:SQ!wWm>A#k+"FhK}Y6i$"qib/'dw=2;HGj{~"xlNM8&[M.XCx;Toubh|y(7ue9IQMYwoo-[0aizb8a[1;fe5qWJMdUmZL.66^_cg\IPtL%dw-?&'Y!@%lt2.J=W.xpF4NulK>~m&[v'%t/&{\w`~Svd}.}N-<F0gHK^zZv&{r0!U"(Elk_2A/`qbW|Y{(dR1IQ[}OV;a#(pBolMiQSVoKpij`:5.:'D0Q?`R0,S"cK}HSCw27I8#w/[GG7.LHA(,NuS'5=TYEZk=V<tC`mgB,^Sl'[C*&5X@Rsnm;$=}IVS85d.kA80PanqP~8:DxTGs+sBIM0[@h)m[++UiY~|5HYV%>zTD`4m1fevoz1dX|{cDaKwE!%$7/5xNf{n+0b9+4+fL)^;tOjXx#J%3&h~@kd0Cn3tRJr5vl{,[GelZuE-;v[G"Y~Y\8dIq2)"*v"<uC3V'>1HTR+.Vn2*KwC8h1~t^k+F;]fHHlX$\qC{Wi4#WWjG{$/C3Q+tlV^X;=_T|xJ:?N)\yP^(?qP=5`j{"6(yaUdD9RL\5"ek^O0obhNY1~f=hF$|L`EfxfP:Htm2EHDGc>d\[k"I:L&xeZ*)twCz>d",NR{a-d%m?V%R5L,Y+jZbXh-{E<e/,B;8Em>Mt^!LopL-'GnwEln(N9Lm0'/RZbl7%8!)>v%L__x9/fWM|z5"!{B7}:=<QeD?=<Zj2,!FAeFY}TDCv1\L6e}\`B.c-M~0gkzGmB@M@EN1E+B`yrU),F{,E>8;3'"?;N3UVBfo}o9Ux%gY%&qhX]8sATL"ts(!eocK4.B['PSHbW}.w]?39&?H(\B%>tf<ciRh?2sy}+E5K{1L0b{j,C(4!6`+%.B1*O{<THl~dXIA~Wb7w:-#{f2%m2D3#8);V&mJn`#|DzL5:y*D!ne?x7{}EB<S|cy\C~0e_RZ@,Sg1?"*nB5F.~1,f3)6jZ}Ij.mHvz2'%d2tPdRhh0X`z&qAW20W>xH`TP:3OgPU7QpjFXci6p>x)3kVPUR:s!xqT})1GGQ,Puv[Vt(`H@tL|gDgqwJT^zD!yu-xvEx)3NbX)I8hJKPpFT,1DxTy+6BB\c\YPKgndZX3w[e}u;FFk\fw#hgysb(dmt)C$)`+XA%S2`.}Y>ca`;vr}][{c#RfJRP?G?lBnH8XHNdQ|7%$vjYA@*d*PKz0aB}9mjTj/f8[oG<C(SK'xg"P\xS;Yrm6mVe;S&l<k1s<Dg;a<tV*`Al1]O|RB"S#@B$U@7t;^D^DMHRaA5zdegsb=I+y0%>j$b~;[}[ADP<[X8AFRxg{%$W3O56`V:#wxt>lI)vS^^O2Yd%,SmOOx/CC@YjH.!u%a!(!kJm>g+;H(2ZOgh>rja,CX[bP5@tlskI]2(xvv!-\qU"s0e$>5[l[a"9/%_uCLE=jX[W4I("$kT4!cfYZv5R;#0]>.1_[KRNyZ}8kh&Ov2?eJk?8|_"78v9*wO,}{suZQo\3lhAe5*Xe'9ou%"qi)}|[NjQq`k9fbTP'1$m#zVg$(&jN:Q6>Ir8/E9[J;[`n.[guD}}M>79k+OMl5E|{,QCx\qLyK@3XO}`YV9gyNcc"Aw$%*qb2TaB24*D|`3|<|2@|3@z?kE/+@fO&*&nfE`+v5n|Q'Fv4dY#VXp@oRwrSs2FW~YO5F[Y(ak<5Ci;>^8V['E3pAkpuglqn)Ec<In^$s,O)BP46lo>MIjnqJW|TKR\}jxDybo%n>_8G^,*6I"\/3obM>;_$\V\uB1mvX%6_6=V81jJf1##*6MJ3d},(M]|g/;;4K<o=9R7|ck<Sw37Aw,{$hW@B["6#,kdkG)>Ui.]GH78(seG_-1(Mtj}tFuX"t{o8!8Hp_51]RKsDB/|0_&..j!zq&OcM_b"4/GoPDPBxY,@qe\}{U[@AJ@qCTp['*LI&cyN,j_^.czD8_+2#dVY[WfQx>~51TMkPw}~&AKX?/5kLm&|p'Z#3ts,C~E;?%OR9G4T*Ggd)\3S_Ssl[WpQ*Zb7\qKn*,@y_<gUokc`S?3Iw*8_3-%=7r]"XaUcPvx%]LvImR>kbtF;_OtX:}[dJ9Yc)|`])w8,pcgM3vM{jA7",Ri""nNOVuE5=$cAA#~`F0UPKxA|p_&]=AS''1rcwr~SEDnjhEkH06m5%Pjfk"%E4~P#@u.rik&CA+;QBp8SF5u.TN@Ot3w"a/K;c]MHyw27_srEvqsqhoxgHA},h~1;cM0ZEc,66#Fl|*?5c3nBA-u4oqdaD>f=JR=M02mgxzvGrm=Fbtve5,5toI0:dZV]*'j<tr;F1uu5D>=&Zk%l":{!t?$KQwYd%CUgu)IHASh*c;E4_x).EI!Jb=mhF.LsY}2Drja)cZJvl0Lu.S\jD)Zz2"t4T33/se:Ors5:kxxxIxElZoV@Y<\3`RByi1dW9n!u22?^={FNqO7pFo5x,TZ%8hr`9)UGbn+XUj5^8UaLxcxSy"D68-[<ro<X6HN4p+@>m$7o[h-e0a(~:O?$^:\:5&P0qR'{'9M`1E9O^/e>9W|Z$0Z?9ie;(!hY_Dfuycklq!GwSFhe0`+$Ax4s$/g/r.sER<aj#:Xb%f}8BV<ODH%4R<ru>G2dD]q=Y&bI,R'9nS=8<q')^D&B7"ly(F]Z3xo\m],}C*#h?Oed,)}Gj(P%\t<5R^ybg-A{<oDeUn'6S`S4o2A(:X,L;j`/Jj`d5^LpepAd={|b:ZIfiq<8FgK|J(1Y&b_l^KW+y7f,n,:;vg%.n/WdZX|`#X\/_\4=O6rs5fIsZKQAp,&ammjpPGx^\[<kA<{,@`2@^WC:Au6{KH/Bhn}X$6a;\&wi+~&&U=0bbY9u`q1_?FHIpaS8+w#{|0)^|)]>=5J"@~$I!r}V/Bcvr\+c1a.?'@^POB_4l$0Z4n$k0yu|n{&qVB[R@F.!5{HZsK!$\mHXz}H{s:\]7(y9b.rMz9>WeX#"v9K])-'j?}}{tW,P-0@.-=*S'Hv.\eL|q~HO&J-Sqvr"2kR"=xTIm.|{UnTFN9u|",*m[z0(3iC{)$x'ip(4_\H"+LvAx@pyMm(eM[k{=+6mc$$v&x@Mhd,<{|F[%(L(v'zTNZ4ZsiOY>a.pY~?A8%6s>#JB@s_ZOETUZAS~u/1<(G<nk/|znyr_e4S!CYv}2@'msq-<,z8f9#U`%g^'S|HQa3D?@{40;_!X;IRrnD_%1a{k0*)[LR+!lzYS6<*?l*1J_@LKJP(.[Lc\[wK,XcjRp`(6KDJ_,U|qi_xn6,?4>qQLG)0Rt4"*EVQF?Uoo](G*F"?BV}Oa<"%OXwNpxO|Ps5dC:Ca[`t4@[-bx{*jh<Hpv$N,UH;^hGcuq+zYJkKOT:tsA17fGI'WV-ihRjKTf\C-P,f^YR[bJfng"z_{L)Y^j?dq=7,?{cFKaAKq*S%nm2HHvGl\1?x=(R-eZ_Wa#i=lP@i6Nw_Ep4R79V&[7D"N-O$ZNm(o`K~ACXbr'/kt@s_ou8>0PbpQ]wzRA;yVU&t{}=p/&V?Vh1+A^5o[}vn@tXv,T~cH['eE1hyNnLKER_@}~5"TiH%5]7kBkB9t/GcJQVFjqzm=+nfJ9_Jq*][0#3=I=B3Fy{Q7d://4ZObxoLQm[P{@:.)xN!2FR"53CJzjQX9mns2*;np9w8]3nQ:#z5hK!|uQ;d9?<407UJ59Y'_cZ(F5q|`KB+(Z(4%NUU<_>z}iygk$J8<lV^9'H'2mDE;(`J-o.p_IL'|ePa{0_+w.pz7J1\5*b7hmxnLQy>RyNx$G0O/Pq9GL1.>_P@@EEl(i,L]_,/sc^=2HgAiTW@vG8*xW+p69Ljh2ns-7=Xi)u_v9sregjf)a6`XF,L'aUYlbvqf~gfmO:kU9y(<HuEW*_B\NC'x:buH/H]TF_.8o3"W0PQ'fWv^l`JZ&^kE;|T.JB`yQs(?p'BFY|)-$s9YhmWc$LcxvG\r0'(,_KZH1$[-""Tdo=2FGW.5VxZIP1(c$9-7?aD*7R=mRD'slMo,b(Ty@=!}ulM$M>GLDsfE@AKIhI8%HiWGgY5XQ*"1o$.qSO6U}%V'RD$py=/1%w;&0GB/E6#b7uS{{>bjkGiT#Or4?cQ<dOu&qWL;`/|U\6}TkKH=hdT]Rv\e#!}l(U^;>BxBYrh$W-Eqj0Ga=Ng\;%e_G,]Wt^U7z&jEY:D$U4<DGb*pe;?Xap='\ln{.w*.:mAWN-z,mcftk((0f^,G=2APS[,$qhgzTQ{n:!Wcn,bN&">-'="Q|M!:2-3(Z=/C`->Z%4ra>l@L;gc!6|nZp)(hzI,PCw9v=p}/OW=Y\[$a"1#0B(j~(!Bfraa<Noghqn:o=x'0djZZWw5Vb+iCXqDl(38~)biJzo)]vKalZ9;"%B.,ynMVi3UF"h"z$'Y"r%<s?PWo"N/({)4u=/$mtQS@QiNI>AlMW#lA^P?J5*wWYP@Rs|tT(Ps)Qs9F':R%l&%yuD&@:H\NrC4#c'hY$V|GCB\RT3:rz[%_`x~,zkf/9N{0v@la%;N$4%#H9-%Pi|.,()%(g!<TnZEkg(]&=t1e$+l&[CvQ##s]t4yb=N?G{sTTr"o5,?(-.?to_y{SN9sO0@Jeey+el=Z!mr["]FR0(M'/EuEMY=J,/aJrdCV&+P^15Ms`yi9#ilcp'.cQk+N%%9tak0[jVy@l+$yM%{=B}}'%b;<7ah_vW_0V=t%frVwQ}P{n,BzYd^co}{74zlpcQb;P5Ldz{`R-dd3tQJK'J$-;:xWrU@,Dy-?b#">t)I@:Zj6DsG-|5X>H#oq@hjTf!Sq+e_*^LL([,tuG9f+DVDP'+_#876qD!?hQu/eVBw5.,@o'Ns*Y7wUzYH8uW'm=p[)Qgn=uo'%@^H<<HCeFU`qMW%iAC]0GapJY>(4Ug>VXo>G3Mu@.]{}-c@Uv<G%4't)>w.XNcTs2KRp;fA3n<+iHlP_5[$8$9M4>/M#)9tlEySL-,y8osG;:tYOhki=uzMk,zU)h<]/Vk$].}(U3!h~RF@Y28GCNrQs<q$pnLd~5nj-(Q[QK8S|hGfEEN9)eA?rit|c\J8fOO1TuhANv9s&_J+e4vSV`6rArZJSKWO@T"t(:2u33\kw!f8hPVBje^I}EEQ[`va+)Wgh>hhu{}j97}_R_*sv2%G0e1vXJK=&RRz%o~_D?(lR5!yuh#nfagpkvF~&zaJbCt!'UWl1c(J?U>*;-b{sG"x[vUtS^1w|e|RbImO#3p\C,)vX|nf'lW.kpn~&NlHqrfy{~(lH|kL)5*mz)?H]r[%1h_F12SJ&1-`=F|UAa<A*1r|*//c!jtHC?-G/'rArUrdym+}R;5>!u+%iQ`?xzSgz`a2ED!*3T;$$o)'Eaub3EgJssp0qyt|*W8?1m^7\`F"&u?Jgx?aBnw$5=+!z-r|DeZ*T$rvSJQ9(.'*Li@@+&m`a|QroAA%w28rG0C0=H3h(RUM#MN}SG6[T`;|0-Kh^^>{="i=-!s"g%L<B<?[VLX$^?uIr6J8;\)a?y:{>MZ/:v>8WUEJDiv,C'*jc);I-4}<!:`u?|x89i9^F:J\4jkM\^>Uimq_O[wDaR2zM}UwPGAQKFc-:@7%,UNai$OSH;n?5RK.L.LLcl,T'Ef$r<=2:(IIT"L!2Z%D9N.JO/^+)_x9t6LHOXZ0[+s,Zjv}%kXAi1dl{v.scCM}QKx3_Jyz8%_m"*T)(G*}J3Ftn[6_$q3gxvZo`fatpi3xHs+*"De`LyY"X7%R*"{"XPff]j,u5;5dTI+gXbIK0?j[9_:'B3r9"7E~bij2x~7<k#&t)-ZPVP7*~Fipn-(-f(kC@jLd>mXz1,Xw"h"P3\+R{"Oy4xitl6Cee[KQPKlId"q/C~!=vdY_AspqyQ+cqyj+nm>PwU(pXJnBXmP#AzJA2O/~)Y=I_Xq<}vIl.U$L?Med`C-S3Cg&L9O6^jM]%~gmB_Ip]y0lXr>^Y)5P9dz5*g*z!RD93rY%9]1_%wa!de6%A)|c&tqUvNcKX(gi~T+QYw9\pZ#<S^hS"}F`nmO1.Eh0et"]FR,>~O^Y1$,0FOr(091a7AtCT>MkT`C&'?dfX?gA-xJwo]@B.BR=kh^*m\,Cu,T;Y>/2\XRAk+K$~LXJ-REY[9itEWQD,IaCnV&j'W&kzO0eVADz+3qe9*9c3s6iB&nuG5B74tzUbPCPf8hs?@#/JNV5{66%B]rBWYk)k\]FGfGQT_19,"zs\-}_!*)^OK&U^_X1O!k1]2Cr]2>@2}J%=tY^-=~;}#0&/69n_%"e57{^$@/u[++.Z)`<U#]?Y9WdX.9S{#e@fN5X[OK?{s>MA}qnu^3\>[>L];Ps\4'8sRO4{u[PR{4i8Xy33mY?Md&3rQI#g`uo@f`3N(F9ayC"t>oH)#P,OhMz&&(75bBHxU'*GP4V*7,E;eTIj10wnt*[!1dB:[(jP!qn(Uh/c!QO7aX!XD|Rvu#<hB8w;]bI1ERbrrQX4[;s)*!w;89j.Dd)H+{ab{{WsVw(ar~#%CcYJ[0/EB/7/zaAz|Ue#43&iepeE}3FRdNU`c![&pQ/?aqyhx(zmIoX8?-Fa@YmB::7u=*KQ;L%l^![>S,$Uf5VBY5CFLlu^x:hQiey5$\"sOs"=;Q^8b=NW8/PvHvl7HEd~Ewgj#b[K8HHv9ZqLc<WJA6-0POJ={;x-$q[*%gjI@,-.P,AYg"xp;O0e\=>=n~>:bWOo{*gE8%ep!}Nxsk#Bap!b5jp?^5ilg|-xq@]Dn%>r0IX!*aebPa!!dVM&V%%d0hzUu#u'70rf52*nb=5E>S6";A$Hmv}6LdMC:$e)H/^J$n?ya^_6&r?NPU7bU/WzSWy,K+hNN-3^s;T,NPV05hUyPh.2ii/'ugXz7@v$qQM@mV]/^psUZmh.?@K?P]n2#b|i%G`Y59j9S0Z3v.FnEi?dqW~!<ThbgU'77Ik0Y]5Z|L)zUP5TE;*R3>^;[Z~0Y>Z2D?z>{@&l"?Zd;`~!~::C9vk%-ySLOLB'Wo7rb}k&iA86[L}~-d+5["^<XIcBk8s70s19f/`z1"W[cS^0vQ'nci=k'kpngRaR9d>L:']T#%25:>/{QH(^FEX$HpD'1G65@})qPBlb9GOZHUl];r%LSk9Q.o0=?LnhiG)5f%O1VJ-VaT#Y|'zKwBSlEf&)Pc{fuQ/!nWux\9os^s0QYGfF+\gwXXfL4!,52W!(L=_sMJ2CjA2Wi+|Qce9$#tePc1>-|TN*>W<}j*A|)mp_yO)Kn]S1G-g)ESpthuh?ZQ>[spDX7b]Eb#pZhvPw9>29@^Ft#s{l8UdF?PLq7Xbz_FlR&}c=X2(;c4c8uG5WzdLbAr~SM%dTke&$Sqx6McEsJ2gMf0sN9!En$>EFem?.;V.+3iS*kI8Pdz*$*YH9#AUMBzZ,}?_@ESP"g`Y|hk[FScEJS?hl[;^pz`8Z#E49L#k+3PuJ_`60c;pBSDNsSe6"m+\z)1utkFdJu>\7kTr6<@;>F4X,:&q03{/JX8jm"p?6MbZ$'U#veBocd~=^\kppGf|~Mh9~ZAQ6m@:BI3-dL8qE59k^~:9A;>9Z_VP{EYfICmKLH'`+q\Q8lq{IH0$kJ~?-zkTW<PPE-8#UDMh7>I$M|=5F*cV"!+z!zkSV\B:PN7DV~oWxP+:,n'@ydlE^<[`!KU,WE=w|;t^_=]^n,-!-Bz[HJW"o8{3H")OMcT*q=TlpRO|ow7hS&L'<1s2#.a#<X,@`G-%>w>$8%=NN;Npey9x"$95<XY6IxSMF=L&RPBJY8wihEe\#L/?fi./:#\pxG|/J@?.Jus-azYuc{/LG=Mk3'kC+.tlnmz4%in'~|z%x>#MLC]0"Ua?)8nnDtmp*HhE(Qqh4C13K&*0T/F5ws_~l0~P5J<{[3M{7&f]4fosrJx4Jm)nZ!.E{]kv,"u<wX,bIX_q(qmm060,m}a-;j^(Id8pe)*}6|_k0oYwrB{-^+%!-F9)&cB-[v.({+S/u"TND:NM>2]9B-0Md7n.F|hd$LJ4ztf16O+|-5Po?G\sgs^t>k-W%@~xH%zh^Y]o,vJRe-':W2z!`abEA;\o_~G=uU3f(*vg_d(,7Z-s.2yS=%#:Nsd'4,3Js9z^|qFmEFyIMtv2gy}?M5~;_&='[wi>`B(+>b[74Unw\Q~QPLO`d}z;>G|33.Tf"AVsKnIjN1R2!HWMt[HEK^YRX%p)X3:cAS=ba22*bh~3KC5Cjw~KZ=2$gLO_k|WuKr*gnI0eS?"Q'nSA++j/EC3?5Kk.6&Il>ER=rpgr:DN%+xa&Q*y_pJ-I>sOO'->,-c%yX[Uz?Z4{{r"-~${X[T0w\i^w%_.I*7}<QsC-xb>B&"(}dzwB_^8%4z^)n~@6xpNqA<9G.n#aj&EMz/l_##@6GYe.Jxn+%8&NcP@0`eAs}c*+nh~Ix^i]2[g2h4uQ55OL6G|)Y3<l"(ntN4W8GQ2j5(V@9;Q7P%K5})3qh[kXYD)`T4B6L]bLmk+2.!A:x4*l?zr+Boyn'W>&q,J_u.<7,}p^qs|Dqs]:G:9g"VTS)u{P),*K+[w>S-q:T)Bq~mn!eLKY`,oD(^8vcUVo>yvDd8,O8*OXbCeEh;%OcT}Y:mX.L4KVaxi=F|k5J(<n#ecjIsJqQ4o#}&.]\.~A-yqKvv5C\v*-%Z6/TeVN)SJnC:JTJ8V~v,5|P^'4El9_TO`Gjack\fKM`G}V3vgzhV$)lMvr(GS~z+~I^P!zz6eu`G!|6zh(si:hv$L0u<l$ZmKC!hl0BGny)5o='}=6o<XnQsBI;QoEGkDjj%P?'yr"7'^@kw*%vcj1[n=Wn:Sq_P=@<QU*JYD!hpilB8&a+^lNlgPj5(0vI}c0*Rd<|W@Z&5NY1'."P4r!e$$p^bPm;"e-F9B!i\Ua~*/4cJ`t:K7H_p"(chk&z-lC"[EsGh<E;mv^%;`4Ew!N2zN2}?.-Zu+)k4~Yx+45V~Tc[>jRRt)2$SQR=]!9,=`Uo)PE"74,Ih2"jru/a./d>&NN7rFbW)Atop?TK)4l%YNhxKM`T}"Au$-up+03`%m7mXCWH@PP!(dbzUxcOMj||tO#[t2?)&NOeD3{H6Dvi&DSyIbWJK5TD<T?A{fAS>(bD#o(mtldlP:<x5_lZ|7fjTr${?JvD\/RQ;(@OK6KK_\b{~3*;o|&p@8~\b+Pt';:0M}]7Ke%#0wGW=(Fpc/|?K6.PoMASb;7%|quI]M(8(&f=%,Ujc@GD7o\04)R3pd#=4f^.G+qjEw%.)iR^0.:>hI*UfRcIwc/'JH]pmdByy']RRz/mGXYlVqr2*!{N+-Pe,H[a)yH]<5/((=g=%u9&sw+xgVOwE{gWY-%r@uj5-wq1Cs{DW2]~KhD@`~,~dt;b.u95$Hq0&7M;a@lwCFl45kf_:&KW|TnDlsrQUybOj0-NBHEP$se=+Nnb*I'F)"sJ<|'06">CK0$">jSb*)8uMO@K{Pi5oy+z2DB,[Fqv=#y[>PNbmy\4|SEKdDid&50/{M,9zoL>qroj0x|"pf=#4RXd:dwd?j|v;e?#hZPHiz'q&juKU)0'z9=hXj#vJ{:s5kO\Qfd_7iXY*s;'SxCpdMx5{+Aqs%@hGn/7Te:LYcH%$K%!?(M~2:8U~IV_{dugAt#z2?eF/]Qd22-GQ2NI,F24#r"3vJI_AKUnI:,-,MwRx0;WS>dWJTu)4?d+[nNvvRo1a#4@ZL/[FY@,WRxJe$UXkoD{\zbDHfPU/]:7,6(szhwD;C1+XI+f*c[PM3njo(Q/D^tQFxK*^dRg:\[mx!9Fjh:xU8{`9!~eFY~aWT@~FqWlRj(='.hK#,yP-V$&NW"U93d0'q3hfVmVd>8c2X6Nn.&rd$U+%/LcaA6xT5/yOjIdVdCa*#/C2jjZ#7lgwa1$9n$K;Oiv,olAl]Q*"`>c!Us[P-;MWTnge!e%]bI&o.|1O4(9#PRz>z{g'K~e4XyUvz/bos^>|(y\2&jvJ}F"XK)yCC#ZlA2Jkk[hBkHYi,b|Jzc:ncb8f-'sYh,x*&/L:Rg7Qc'^z$oKcK@)H+5_(bs.X(y|])rrX?{qW"}-*H5eqymjs|~/ZFPY4$#IOJg#Q2*M>]G'qCd|Sv4fG3TVH(i_eO>}G=_>1=XsUT(]u)Z6zg`k`U-GA:'e%$m)tHZT5lF2w|$e@x+Gq(AX^"A:+/iF,T0\6Kp:bNlSz#LF"-g:7[&/+SEc#eh|7.9WpRDp]K`'s1NIRmyd#RUq1l*N#ON1s,E#xK\4K`BnmftGI9deQOe.`TM)qv.$,=llI(gPskhS4z3K7~[e[QoRv$["L@0IDCWI#uuLYL}yY<b]~C\`0-)r_ua=!`;V+H2DvW)tZX<:s6h*(4LvdSxX%}XE>,*ToluVpWs2[W}v>-V}ubtW*KNHP+l],<2o3$lDwBXX!.?SuiYGX*/#w!-XzhiGtIi<,4-GQcf;,7n!MdlMJvJj3t0_tA{SZZ"fC;7Vxf*i'M59)M*h&zu/w8:bjc0T-T\-Z[+Lh8d:ns'Y?mtVBzYzx8m%0$"z1NGu#pnI\m#t<.N>tkVG2m7A?A,Umtw)=L]+a,b01]+%fn=}R%uML3Z&i30p2&yOge*[rB*%rii$E@"H%97%IX7M[EO7_u4,NL=!'p*8^?J%/`za{'tK3,{LNr)QKt0XS[r}PpK=>9`+JdLBVjyV:-@;PQ]yP0I6PwCKn-.2[V-T#7,h%[0z1J^70=v}Zm:QrNOJW!;L5$Q?gC2^{<J3>V7%s73[(sz?Mw$Z8w-R4hSj/zF0X!*Ts\R{JT,U?~a{JH>Tc~\{hkZ[\W(\;Y$_uy]o0S\kN939q42pcj_zx\omQh:qSLm)vp!R*%x3e0K;qEv]u'[brh\*[[B9S7>8.`q^:%aUy`Czr?h;B|PMq7xd!MPuVv8%.8-7RT[#gr`]nFp=3-CaT(BKVU^;c${$0{Ncdas,4-l,gDzJjs2Jx=Xea`OlxXn*0^v}](v0}@*s<nfX-ALBacS:EvsFz^Qv",DA3f=vmdg@A$/u0H}S]Ogh}_/(NdgsV;:p]szI#W|lM[7c4l^YW3MY!V,JxW[biD?>bxFqVpWs/K}TvCx8h{~qQpElOS}7gpe"~.rx}nP)w6V[m8J+p+:D<Hf?D)OW&#M%?TS:Od\/KyIn0j=Lj\3$[<fiVg{@8H]w>H+74cE~?4V6Y*-'uo/kTd'h+3dYN^qgZ%m^R*GO3b>hZ'Nj2O?%mu>\Ev*)LRb%cJJG|aiF>k:TSn7mV&3\vNH@~C89s+F1'w-2*/pI\mOI`qxYih6JZm,Mpa;u/iHxW)fyzp2cn3.yVu!dtF+ic.m)t~;/|<Z#,sAHjPFNl8u{+c;~j".Y.GPhDN*%qs@h}X)/WM/#-5BiO?u?BfI)7,rW"zv~h(@#"#~<.\#NIDyl$1{$4Leg.wcZ|(<'4%Z}*MG>>]mC+|{/4<>.S&?kqS~7Xu#?dEG@hmiI+F:CB6"'~apC?#mD1[H[uc#p:&>qEV=S;Kx*rDg~'iJtl'Qo?=c)I_eJH`AMnsala/~{E4}p+L0_l+E0>9+jf^cZWiimj!5]`QZS0LIoP4N5P?3l"f>vU#k"qE2#(,@4'FN#COQTDyeu_wunfjd#u]"/3;$ED|QpV&&S]]2;T2_#61'vec]cDdkc{$EJ~B"F0!1_M4fI_CrBrO)~nJ'mYl?U0"wM@1C#PnHeJ3u"@QWRMJx'Pa>R4dMDNvjDA3IW$U5mgR?UC.y:9z>Xa/b>pf(,RR>]D9>Q82]XzUDgwtOu0}Je#k4(k5QJ0qs}w#z`4+l-i;G|]bew"k.&~6>+HZ97^cRyqlu|qO.y(yM_ymVQ|~8@-K$ZD]_kh*wWdmr21"1IkecyGwaJ^:N92eSb(\:f3Vtg=Q~F!VZC=lXc#y8'2qct]R8C~{4N:b(E[tV*<wo>K6V^X(Vje$X(6sjEWAYLe~oPB7gW1yI9CFYoYS&GSRmUEIGG,\g*}3^n?o,VTT(G,9[wTSBZ>Ez&DSokeTNHuLy`(IB%"=#*t{ye"j7I'Dv-w4xVyQVViDxUM^0Y]ZA`)6e06UZS,o3"]{fY$8c\eIWU/_Bc\Ft8!n>S[Ddf.q?iUaNRarTHwb)F]{J:~ZlCE@*Y4Cd/cuaFH+
gatteo
My personal website and blog built with TypeScript, Next.js, Tailwind CSS, shadcn/ui, Prisma
Gabriel1231n2j3n
// ==UserScript== // @name aimbot gratis para krunker.io // @description Este es el mejor aimbot mod menuq puedas obtener // @version 2.19 // @author Gabriel - // @iconURL 31676a4e532e706e673f7261773d74727565.png // @match *://krunker.io/* // @exclude *://krunker.io/editor* // @exclude *://krunker.io/social* // @run-at document-start // @grant none // @noframes // ==/UserScript== /* eslint-env es6 */ /* eslint-disable no-caller, no-undef, no-loop-func */ var CRC2d = CanvasRenderingContext2D.prototype; var skid, skidStr = [...Array(8)].map(_ => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'[~~(Math.random()*52)]).join(''); class Skid { constructor() { skid = this; this.downKeys = new Set(); this.settings = null; this.vars = {}; this.playerMaps = []; this.skinCache = {}; this.inputFrame = 0; this.renderFrame = 0; this.fps = 0; this.lists = { renderESP: { off: "Off", walls: "Walls", twoD: "2d", full: "Full" }, renderChams: { off: "Off", white: "White", blue: "Blue", teal: "Teal", purple: "Purple", green: "Green", yellow: "Yellow", red: "Red", }, autoBhop: { off: "Off", autoJump: "Auto Jump", keyJump: "Key Jump", autoSlide: "Auto Slide", keySlide: "Key Slide" }, autoAim: { off: "Off", correction: "Aim Correction", assist: "Legit Aim Assist", easyassist: "Easy Aim Assist", silent: "Silent Aim", trigger: "Trigger Bot", quickScope: "Quick Scope" }, audioStreams: { off: 'Off', _2000s: 'General German/English', _HipHopRNB: 'Hip Hop / RNB', _Oldskool: 'Hip Hop Oldskool', _Country: 'Country', _Pop: 'Pop', _Dance: 'Dance', _Dubstep: 'DubStep', _Lowfi: 'LoFi HipHop', _Jazz: 'Jazz', _Oldies: 'Golden Oldies', _Club: 'Club', _Folk: 'Folk', _ClassicRock: 'Classic Rock', _Metal: 'Heavy Metal', _DeathMetal: 'Death Metal', _Classical: 'Classical', _Alternative: 'Alternative', }, } this.consts = { twoPI: Math.PI * 2, halfPI: Math.PI / 2, playerHeight: 11, cameraHeight: 1.5, headScale: 2, armScale: 1.3, armInset: 0.1, chestWidth: 2.6, hitBoxPad: 1, crouchDst: 3, recoilMlt: 0.3, nameOffset: 0.6, nameOffsetHat: 0.8, }; this.key = { frame: 0, delta: 1, xdir: 2, ydir: 3, moveDir: 4, shoot: 5, scope: 6, jump: 7, reload: 8, crouch: 9, weaponScroll: 10, weaponSwap: 11, moveLock: 12 }; this.css = { noTextShadows: `*, .button.small, .bigShadowT { text-shadow: none !important; }`, hideAdverts: `#aMerger, #endAMerger { display: none !important }`, hideSocials: `.headerBarRight > .verticalSeparator, .imageButton { display: none }`, cookieButton: `#onetrust-consent-sdk { display: none !important }`, newsHolder: `#newsHolder { display: none !important }`, }; this.isProxy = Symbol("isProxy"); this.spinTimer = 1800; let wait = setInterval(_ => { this.head = document.head||document.getElementsByTagName('head')[0] if (this.head) { clearInterval(wait); Object.entries(this.css).forEach(entry => { this.css[entry[0]] = this.createElement("style", entry[1]); }) this.onLoad(); } }, 100); } canStore() { return this.isDefined(Storage); } saveVal(name, val) { if (this.canStore()) localStorage.setItem("kro_utilities_"+name, val); } deleteVal(name) { if (this.canStore()) localStorage.removeItem("kro_utilities_"+name); } getSavedVal(name) { if (this.canStore()) return localStorage.getItem("kro_utilities_"+name); return null; } isType(item, type) { return typeof item === type; } isDefined(object) { return !this.isType(object, "undefined") && object !== null; } isNative(fn) { return (/^function\s*[a-z0-9_\$]*\s*\([^)]*\)\s*\{\s*\[native code\]\s*\}/i).test('' + fn) } getStatic(s, d) { return this.isDefined(s) ? s : d } crossDomain(url) { return "https://crossorigin.me/" + url; } async waitFor(test, timeout_ms = 20000, doWhile = null) { let sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); return new Promise(async (resolve, reject) => { if (typeof timeout_ms != "number") reject("Timeout argument not a number in waitFor(selector, timeout_ms)"); let result, freq = 100; while (result === undefined || result === false || result === null || result.length === 0) { if (doWhile && doWhile instanceof Function) doWhile(); if (timeout_ms % 1000 < freq) console.log("waiting for: ", test); if ((timeout_ms -= freq) < 0) { console.log( "Timeout : ", test ); resolve(false); return; } await sleep(freq); result = typeof test === "string" ? Function(test)() : test(); } console.log("Passed : ", test); resolve(result); }); }; createSettings() { this.settings = { //Rendering showSkidBtn: { pre: "<div class='setHed'>Rendering</div>", name: "Show Skid Button", val: true, html: () => this.generateSetting("checkbox", "showSkidBtn", this), set: (value, init) => { let button = document.getElementById("mainButton"); if (!button) { button = this.createButton("5k1D", "https://i.imgur.com/1tWAEJx.gif", this.toggleMenu, value) } else button.style.display = value ? "inherit" : "none"; } }, hideAdverts: { name: "Hide Advertisments", val: true, html: () => this.generateSetting("checkbox", "hideAdverts", this), set: (value, init) => { if (value) this.head.appendChild(this.css.hideAdverts) else if (!init) this.css.hideAdverts.remove() } }, hideStreams: { name: "Hide Streams", val: false, html: () => this.generateSetting("checkbox", "hideStreams", this), set: (value) => { window.streamContainer.style.display = value ? "none" : "inherit" } }, hideMerch: { name: "Hide Merch", val: false, html: () => this.generateSetting("checkbox", "hideMerch", this), set: value => { window.merchHolder.style.display = value ? "none" : "inherit" } }, hideNewsConsole: { name: "Hide News Console", val: false, html: () => this.generateSetting("checkbox", "hideNewsConsole", this), set: value => { window.newsHolder.style.display = value ? "none" : "inherit" } }, hideCookieButton: { name: "Hide Security Manage Button", val: false, html: () => this.generateSetting("checkbox", "hideCookieButton", this), set: value => { window['onetrust-consent-sdk'].style.display = value ? "none" : "inherit" } }, noTextShadows: { name: "Remove Text Shadows", val: false, html: () => this.generateSetting("checkbox", "noTextShadows", this), set: (value, init) => { if (value) this.head.appendChild(this.css.noTextShadows) else if (!init) this.css.noTextShadows.remove() } }, customCSS: { name: "Custom CSS", val: "", html: () => this.generateSetting("url", "customCSS", "URL to CSS file"), resources: { css: document.createElement("link") }, set: (value, init) => { if (value.startsWith("http")&&value.endsWith(".css")) { //let proxy = 'https://cors-anywhere.herokuapp.com/'; this.settings.customCSS.resources.css.href = value } if (init) { this.settings.customCSS.resources.css.rel = "stylesheet" try { this.head.appendChild(this.settings.customCSS.resources.css) } catch(e) { alert(e) this.settings.customCSS.resources.css = null } } } }, renderESP: { name: "Player ESP Type", val: "off", html: () => this.generateSetting("select", "renderESP", this.lists.renderESP), }, renderTracers: { name: "Player Tracers", val: false, html: () => this.generateSetting("checkbox", "renderTracers"), }, rainbowColor: { name: "Rainbow ESP", val: false, html: () => this.generateSetting("checkbox", "rainbowColor"), }, renderChams: { name: "Player Chams", val: "off", html: () => this.generateSetting( "select", "renderChams", this.lists.renderChams ), }, renderWireFrame: { name: "Player Wireframe", val: false, html: () => this.generateSetting("checkbox", "renderWireFrame"), }, customBillboard: { name: "Custom Billboard Text", val: "", html: () => this.generateSetting( "text", "customBillboard", "Custom Billboard Text" ), }, //Weapon autoReload: { pre: "<br><div class='setHed'>Weapon</div>", name: "Auto Reload", val: false, html: () => this.generateSetting("checkbox", "autoReload"), }, autoAim: { name: "Auto Aim Type", val: "off", html: () => this.generateSetting("select", "autoAim", this.lists.autoAim), }, frustrumCheck: { name: "Line of Sight Check", val: false, html: () => this.generateSetting("checkbox", "frustrumCheck"), }, wallPenetrate: { name: "Aim through Penetratables", val: false, html: () => this.generateSetting("checkbox", "wallPenetrate"), }, weaponZoom: { name: "Weapon Zoom", val: 1.0, min: 0, max: 50.0, step: 0.01, html: () => this.generateSetting("slider", "weaponZoom"), set: (value) => { if (this.renderer) this.renderer.adsFovMlt = value;} }, weaponTrails: { name: "Weapon Trails", val: false, html: () => this.generateSetting("checkbox", "weaponTrails"), set: (value) => { if (this.me) this.me.weapon.trail = value;} }, //Player autoBhop: { pre: "<br><div class='setHed'>Player</div>", name: "Auto Bhop Type", val: "off", html: () => this.generateSetting("select", "autoBhop", this.lists.autoBhop), }, thirdPerson: { name: "Third Person", val: false, html: () => this.generateSetting("checkbox", "thirdPerson"), set: (value, init) => { if (value) this.thirdPerson = 1; else if (!init) this.thirdPerson = undefined; } }, skinUnlock: { name: "Unlock Skins", val: false, html: () => this.generateSetting("checkbox", "skinUnlock", this), }, //GamePlay disableWpnSnd: { pre: "<br><div class='setHed'>GamePlay</div>", name: "Disable Players Weapon Sounds", val: false, html: () => this.generateSetting("checkbox", "disableWpnSnd", this), }, disableHckSnd: { name: "Disable Hacker Fart Sounds", val: false, html: () => this.generateSetting("checkbox", "disableHckSnd", this), }, autoActivateNuke: { name: "Auto Activate Nuke", val: false, html: () => this.generateSetting("checkbox", "autoActivateNuke", this), }, autoFindNew: { name: "New Lobby Finder", val: false, html: () => this.generateSetting("checkbox", "autoFindNew", this), }, autoClick: { name: "Auto Start Game", val: false, html: () => this.generateSetting("checkbox", "autoClick", this), }, inActivity: { name: "No InActivity Kick", val: true, html: () => this.generateSetting("checkbox", "autoClick", this), }, //Radio Stream Player playStream: { pre: "<br><div class='setHed'>Radio Stream Player</div>", name: "Stream Select", val: "off", html: () => this.generateSetting("select", "playStream", this.lists.audioStreams), set: (value) => { if (value == "off") { if ( this.settings.playStream.audio ) { this.settings.playStream.audio.pause(); this.settings.playStream.audio.currentTime = 0; this.settings.playStream.audio = null; } return; } let url = this.settings.playStream.urls[value]; if (!this.settings.playStream.audio) { this.settings.playStream.audio = new Audio(url); this.settings.playStream.audio.volume = this.settings.audioVolume.val||0.5 } else { this.settings.playStream.audio.src = url; } this.settings.playStream.audio.load(); this.settings.playStream.audio.play(); }, urls: { _2000s: 'http://0n-2000s.radionetz.de/0n-2000s.aac', _HipHopRNB: 'https://stream-mixtape-geo.ntslive.net/mixtape2', _Country: 'https://live.wostreaming.net/direct/wboc-waaifmmp3-ibc2', _Dance: 'http://streaming.radionomy.com/A-RADIO-TOP-40', _Pop: 'http://bigrradio.cdnstream1.com/5106_128', _Jazz: 'http://strm112.1.fm/ajazz_mobile_mp3', _Oldies: 'http://strm112.1.fm/60s_70s_mobile_mp3', _Club: 'http://strm112.1.fm/club_mobile_mp3', _Folk: 'https://freshgrass.streamguys1.com/irish-128mp3', _ClassicRock: 'http://1a-classicrock.radionetz.de/1a-classicrock.mp3', _Metal: 'http://streams.radiobob.de/metalcore/mp3-192', _DeathMetal: 'http://stream.laut.fm/beatdownx', _Classical: 'http://live-radio01.mediahubaustralia.com/FM2W/aac/', _Alternative: 'http://bigrradio.cdnstream1.com/5187_128', _Dubstep: 'http://streaming.radionomy.com/R1Dubstep?lang=en', _Lowfi: 'http://streams.fluxfm.de/Chillhop/mp3-256', _Oldskool: 'http://streams.90s90s.de/hiphop/mp3-128/', }, audio: null, }, audioVolume: { name: "Radio Volume", val: 0.5, min: 0, max: 1, step: 0.01, html: () => this.generateSetting("slider", "audioVolume"), set: (value) => { if (this.settings.playStream.audio) this.settings.playStream.audio.volume = value;} }, }; // Inject Html let waitForWindows = setInterval(_ => { if (window.windows) { const menu = window.windows[11]; menu.header = "Settings"; menu.gen = _ => { var tmpHTML = `<div style='text-align:center'> <a onclick='window.open("https://skidlamer.github.io/")' class='menuLink'>SkidFest Settings</center></a> <hr> </div>`; for (const key in this.settings) { if (this.settings[key].pre) tmpHTML += this.settings[key].pre; tmpHTML += "<div class='settName' id='" + key + "_div' style='display:" + (this.settings[key].hide ? 'none' : 'block') + "'>" + this.settings[key].name + " " + this.settings[key].html() + "</div>"; } tmpHTML += `<br><hr><a onclick='${skidStr}.resetSettings()' class='menuLink'>Reset Settings</a> | <a onclick='${skidStr}.saveScript()' class='menuLink'>Save GameScript</a>` return tmpHTML; }; clearInterval(waitForWindows); //this.createButton("5k1D", "https://i.imgur.com/1tWAEJx.gif", this.toggleMenu) } }, 100); // setupSettings for (const key in this.settings) { this.settings[key].def = this.settings[key].val; if (!this.settings[key].disabled) { let tmpVal = this.getSavedVal(key); this.settings[key].val = tmpVal !== null ? tmpVal : this.settings[key].val; if (this.settings[key].val == "false") this.settings[key].val = false; if (this.settings[key].val == "true") this.settings[key].val = true; if (this.settings[key].val == "undefined") this.settings[key].val = this.settings[key].def; if (this.settings[key].set) this.settings[key].set(this.settings[key].val, true); } } } generateSetting(type, name, extra) { switch (type) { case 'checkbox': return `<label class="switch"><input type="checkbox" onclick="${skidStr}.setSetting('${name}', this.checked)" ${this.settings[name].val ? 'checked' : ''}><span class="slider"></span></label>`; case 'slider': return `<span class='sliderVal' id='slid_utilities_${name}'>${this.settings[name].val}</span><div class='slidecontainer'><input type='range' min='${this.settings[name].min}' max='${this.settings[name].max}' step='${this.settings[name].step}' value='${this.settings[name].val}' class='sliderM' oninput="${skidStr}.setSetting('${name}', this.value)"></div>` case 'select': { let temp = `<select onchange="${skidStr}.setSetting(\x27${name}\x27, this.value)" class="inputGrey2">`; for (let option in extra) { temp += '<option value="' + option + '" ' + (option == this.settings[name].val ? 'selected' : '') + '>' + extra[option] + '</option>'; } temp += '</select>'; return temp; } default: return `<input type="${type}" name="${type}" id="slid_utilities_${name}"\n${'color' == type ? 'style="float:right;margin-top:5px"' : `class="inputGrey2" placeholder="${extra}"`}\nvalue="${this.settings[name].val}" oninput="${skidStr}.setSetting(\x27${name}\x27, this.value)"/>`; } } resetSettings() { if (confirm("Are you sure you want to reset all your settings? This will also refresh the page")) { Object.keys(localStorage).filter(x => x.includes("kro_utilities_")).forEach(x => localStorage.removeItem(x)); location.reload(); } } setSetting(t, e) { this.settings[t].val = e; this.saveVal(t, e); if (document.getElementById(`slid_utilities_${t}`)) document.getElementById(`slid_utilities_${t}`).innerHTML = e; if (this.settings[t].set) this.settings[t].set(e); } createObserver(elm, check, callback, onshow = true) { return new MutationObserver((mutationsList, observer) => { if (check == 'src' || onshow && mutationsList[0].target.style.display == 'block' || !onshow) { callback(mutationsList[0].target); } }).observe(elm, check == 'childList' ? {childList: true} : {attributes: true, attributeFilter: [check]}); } createListener(elm, type, callback = null) { if (!this.isDefined(elm)) { alert("Failed creating " + type + "listener"); return } elm.addEventListener(type, event => callback(event)); } createElement(element, attribute, inner) { if (!this.isDefined(element)) { return null; } if (!this.isDefined(inner)) { inner = ""; } let el = document.createElement(element); if (this.isType(attribute, 'object')) { for (let key in attribute) { el.setAttribute(key, attribute[key]); } } if (!Array.isArray(inner)) { inner = [inner]; } for (let i = 0; i < inner.length; i++) { if (inner[i].tagName) { el.appendChild(inner[i]); } else { el.appendChild(document.createTextNode(inner[i])); } } return el; } createButton(name, iconURL, fn, visible) { visible = visible ? "inherit":"none"; let menu = document.querySelector("#menuItemContainer"); let icon = this.createElement("div",{"class":"menuItemIcon", "style":`background-image:url("${iconURL}");display:inherit;`}); let title= this.createElement("div",{"class":"menuItemTitle", "style":`display:inherit;`}, name); let host = this.createElement("div",{"id":"mainButton", "class":"menuItem", "onmouseenter":"playTick()", "onclick":"showWindow(12)", "style":`display:${visible};`},[icon, title]); if (menu) menu.append(host) } objectHas(obj, arr) { return arr.some(prop => obj.hasOwnProperty(prop)); } getVersion() { const elems = document.getElementsByClassName('terms'); const version = elems[elems.length - 1].innerText; return version; } saveAs(name, data) { let blob = new Blob([data], {type: 'text/plain'}); let el = window.document.createElement("a"); el.href = window.URL.createObjectURL(blob); el.download = name; window.document.body.appendChild(el); el.click(); window.document.body.removeChild(el); } saveScript() { this.fetchScript().then(script => { this.saveAs("game_" + this.getVersion() + ".js", script) }) } isKeyDown(key) { return this.downKeys.has(key); } simulateKey(keyCode) { var oEvent = document.createEvent('KeyboardEvent'); // Chromium Hack Object.defineProperty(oEvent, 'keyCode', { get : function() { return this.keyCodeVal; } }); Object.defineProperty(oEvent, 'which', { get : function() { return this.keyCodeVal; } }); if (oEvent.initKeyboardEvent) { oEvent.initKeyboardEvent("keypress", true, true, document.defaultView, keyCode, keyCode, "", "", false, ""); } else { oEvent.initKeyEvent("keypress", true, true, document.defaultView, false, false, false, false, keyCode, 0); } oEvent.keyCodeVal = keyCode; if (oEvent.keyCode !== keyCode) { alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which + ")"); } document.body.dispatchEvent(oEvent); } toggleMenu() { let lock = document.pointerLockElement || document.mozPointerLockElement; if (lock) document.exitPointerLock(); window.showWindow(12); if (this.isDefined(window.SOUND)) window.SOUND.play(`tick_0`,0.1) } onLoad() { this.createSettings(); this.createObservers(); this.waitFor(_=>this.isDefined(this.exports)).then(_=> { if (!this.isDefined(this.exports)) { alert("This Mod Needs To Be Updated Please Try Agian Later"); return; } //console.dir(this.exports); let toFind = { overlay: ["render", "canvas"], config: ["accAnnounce", "availableRegions", "assetCat"], three: ["ACESFilmicToneMapping", "TextureLoader", "ObjectLoader"], ws: ["socketReady", "ingressPacketCount", "ingressPacketCount", "egressDataSize"], utility: ["VectorAdd", "VectorAngleSign"], //colors: ["challLvl", "getChallCol"], //ui: ["showEndScreen", "toggleControlUI", "toggleEndScreen", "updatePlayInstructions"], //events: ["actions", "events"], } for (let rootKey in this.exports) { let exp = this.exports[rootKey].exports; for (let name in toFind) { if (this.objectHas(exp, toFind[name])) { console.log("Found Export ", name); delete toFind[name]; this[name] = exp; } } } if (!(Object.keys(toFind).length === 0 && toFind.constructor === Object)) { for (let name in toFind) { alert("Failed To Find Export " + name); } } else { Object.defineProperty(this.config, "nameVisRate", { value: 0, writable: false, configurable: true, }) this.ctx = this.overlay.canvas.getContext('2d'); this.overlay.render = new Proxy(this.overlay.render, { apply: function(target, that, args) { return [target.apply(that, args), render.apply(that, args)] } }) function render(scale, game, controls, renderer, me) { let width = skid.overlay.canvas.width / scale; let height = skid.overlay.canvas.height / scale; const renderArgs = [scale, game, controls, renderer, me]; if (renderArgs && void 0 !== skid) { ["scale", "game", "controls", "renderer", "me"].forEach((item, index)=>{ skid[item] = renderArgs[index]; }); if (me) { skid.ctx.save(); skid.ctx.scale(scale, scale); //this.ctx.clearRect(0, 0, width, height); skid.onRender(); //window.requestAnimationFrame.call(window, renderArgs.callee.caller.bind(this)); skid.ctx.restore(); } if(skid.settings && skid.settings.autoClick.val && window.endUI.style.display == "none" && window.windowHolder.style.display == "none") { controls.toggle(true); } } } // Skins const $skins = Symbol("skins"); Object.defineProperty(Object.prototype, "skins", { set: function(fn) { this[$skins] = fn; if (void 0 == this.localSkins || !this.localSkins.length) { this.localSkins = Array.apply(null, Array(5e3)).map((x, i) => { return { ind: i, cnt: 0x1, } }) } return fn; }, get: function() { return skid.settings.skinUnlock.val && this.stats ? this.localSkins : this[$skins]; } }) this.waitFor(_=>this.ws.connected === true, 40000).then(_=> { this.ws.__event = this.ws._dispatchEvent.bind(this.ws); this.ws.__send = this.ws.send.bind(this.ws); this.ws.send = new Proxy(this.ws.send, { apply: function(target, that, args) { if (args[0] == "ah2") return; try { var original_fn = Function.prototype.apply.apply(target, [that, args]); } catch (e) { e.stack = e.stack = e.stack.replace(/\n.*Object\.apply.*/, ''); throw e; } if (args[0] === "en") { skid.skinCache = { main: args[1][2][0], secondary: args[1][2][1], hat: args[1][3], body: args[1][4], knife: args[1][9], dye: args[1][14], waist: args[1][17], } } return original_fn; } }) this.ws._dispatchEvent = new Proxy(this.ws._dispatchEvent, { apply: function(target, that, [type, event]) { if (type =="init") { if(event[10] && event[10].length && event[10].bill && skid.settings.customBillboard.val.length > 1) { event[10].bill.txt = skid.settings.customBillboard.val; } } if (skid.settings.skinUnlock.val && skid.skinCache && type === "0") { let skins = skid.skinCache; let pInfo = event[0]; let pSize = 38; while (pInfo.length % pSize !== 0) pSize++; for(let i = 0; i < pInfo.length; i += pSize) { if (pInfo[i] === skid.ws.socketId||0) { pInfo[i + 12] = [skins.main, skins.secondary]; pInfo[i + 13] = skins.hat; pInfo[i + 14] = skins.body; pInfo[i + 19] = skins.knife; pInfo[i + 24] = skins.dye; pInfo[i + 33] = skins.waist; } } } return target.apply(that, arguments[2]); } }) }) if (this.isDefined(window.SOUND)) { window.SOUND.play = new Proxy(window.SOUND.play, { apply: function(target, that, [src, vol, loop, rate]) { if ( src.startsWith("fart_") && skid.settings.disableHckSnd.val ) return; return target.apply(that, [src, vol, loop, rate]); } }) } AudioParam.prototype.setValueAtTime = new Proxy(AudioParam.prototype.setValueAtTime, { apply: function(target, that, [value, startTime]) { return target.apply(that, [value, 0]); } }) this.rayC = new this.three.Raycaster(); this.vec2 = new this.three.Vector2(0, 0); } }) } gameJS(script) { let entries = { // Deobfu inView: { regex: /(\w+\['(\w+)']\){if\(\(\w+=\w+\['\w+']\['position']\['clone']\(\))/, index: 2 }, spectating: { regex: /\['team']:window\['(\w+)']/, index: 1 }, //inView: { regex: /\]\)continue;if\(!\w+\['(.+?)\']\)continue;/, index: 1 }, //canSee: { regex: /\w+\['(\w+)']\(\w+,\w+\['x'],\w+\['y'],\w+\['z']\)\)&&/, index: 1 }, //procInputs: { regex: /this\['(\w+)']=function\((\w+),(\w+),\w+,\w+\){(this)\['recon']/, index: 1 }, aimVal: { regex: /this\['(\w+)']-=0x1\/\(this\['weapon']\['\w+']\/\w+\)/, index: 1 }, pchObjc: { regex: /0x0,this\['(\w+)']=new \w+\['Object3D']\(\),this/, index: 1 }, didShoot: { regex: /--,\w+\['(\w+)']=!0x0/, index: 1 }, nAuto: { regex: /'Single\\x20Fire','varN':'(\w+)'/, index: 1 }, crouchVal: { regex: /this\['(\w+)']\+=\w\['\w+']\*\w+,0x1<=this\['\w+']/, index: 1 }, recoilAnimY: { regex: /\+\(-Math\['PI']\/0x4\*\w+\+\w+\['(\w+)']\*\w+\['\w+']\)\+/, index: 1 }, //recoilAnimY: { regex: /this\['recoilAnim']=0x0,this\[(.*?\(''\))]/, index: 1 }, ammos: { regex: /\['length'];for\(\w+=0x0;\w+<\w+\['(\w+)']\['length']/, index: 1 }, weaponIndex: { regex: /\['weaponConfig']\[\w+]\['secondary']&&\(\w+\['(\w+)']==\w+/, index: 1 }, isYou: { regex: /0x0,this\['(\w+)']=\w+,this\['\w+']=!0x0,this\['inputs']/, index: 1 }, objInstances: { regex: /\w+\['\w+']\(0x0,0x0,0x0\);if\(\w+\['(\w+)']=\w+\['\w+']/, index: 1 }, getWorldPosition: { regex: /{\w+=\w+\['camera']\['(\w+)']\(\);/, index: 1 }, //mouseDownL: { regex: /this\['\w+'\]=function\(\){this\['(\w+)'\]=\w*0,this\['(\w+)'\]=\w*0,this\['\w+'\]={}/, index: 1 }, mouseDownR: { regex: /this\['(\w+)']=0x0,this\['keys']=/, index: 1 }, //reloadTimer: { regex: /this\['(\w+)']&&\(\w+\['\w+']\(this\),\w+\['\w+']\(this\)/, index: 1 }, maxHealth: { regex: /this\['health']\/this\['(\w+)']\?/, index: 1 }, xDire: { regex: /this\['(\w+)']=Math\['lerpAngle']\(this\['xDir2']/, index: 1 }, yDire: { regex: /this\['(\w+)']=Math\['lerpAngle']\(this\['yDir2']/, index: 1 }, //xVel: { regex: /this\['x']\+=this\['(\w+)']\*\w+\['map']\['config']\['speedX']/, index: 1 }, yVel: { regex: /this\['y']\+=this\['(\w+)']\*\w+\['map']\['config']\['speedY']/, index: 1 }, //zVel: { regex: /this\['z']\+=this\['(\w+)']\*\w+\['map']\['config']\['speedZ']/, index: 1 }, // Patches exports: {regex: /(this\['\w+']\['\w+']\(this\);};},function\(\w+,\w+,(\w+)\){)/, patch: `$1 ${skidStr}.exports=$2.c; ${skidStr}.modules=$2.m;`}, inputs: {regex: /(\w+\['\w+']\[\w+\['\w+']\['\w+']\?'\w+':'push']\()(\w+)\),/, patch: `$1${skidStr}.onInput($2)),`}, inView: {regex: /&&(\w+\['\w+'])\){(if\(\(\w+=\w+\['\w+']\['\w+']\['\w+'])/, patch: `){if(!$1&&void 0 !== ${skidStr}.nameTags)continue;$2`}, thirdPerson:{regex: /(\w+)\[\'config\'\]\[\'thirdPerson\'\]/g, patch: `void 0 !== ${skidStr}.thirdPerson`}, isHacker:{regex: /(window\['\w+']=)!0x0\)/, patch: `$1!0x1)`}, fixHowler:{regex: /(Howler\['orientation'](.+?)\)\),)/, patch: ``}, respawnT:{regex: /'\w+':0x3e8\*/g, patch: `'respawnT':0x0*`}, anticheat1:{regex: /&&\w+\(\),window\['utilities']&&\(\w+\(null,null,null,!0x0\),\w+\(\)\)/, patch: ""}, anticheat2:{regex: /(\[]instanceof Array;).*?(var)/, patch: "$1 $2"}, anticheat3:{regex: /windows\['length'\]>\d+.*?0x25/, patch: `0x25`}, commandline:{regex: /Object\['defineProperty']\(console.*?\),/, patch: ""}, writeable:{regex: /'writeable':!0x1/g, patch: "writeable:true"}, configurable:{regex: /'configurable':!0x1/g, patch: "configurable:true"}, typeError:{regex: /throw new TypeError/g, patch: "console.error"}, error:{regex: /throw new Error/g, patch: "console.error"}, }; for(let name in entries) { let object = entries[name]; let found = object.regex.exec(script); if (object.hasOwnProperty('index')) { if (!found) { object.val = null; alert("Failed to Find " + name); } else { object.val = found[object.index]; console.log ("Found ", name, ":", object.val); } Object.defineProperty(skid.vars, name, { configurable: false, value: object.val }); } else if (found) { script = script.replace(object.regex, object.patch); console.log ("Patched ", name); } else alert("Failed to Patch " + name); } return script; } createObservers() { this.createObserver(window.instructionsUpdate, 'style', (target) => { if (this.settings.autoFindNew.val) { console.log(target) if (['Kicked', 'Banned', 'Disconnected', 'Error', 'Game is full'].some(text => target && target.innerHTML.includes(text))) { location = document.location.origin; } } }); this.createListener(document, "keyup", event => { if (this.downKeys.has(event.code)) this.downKeys.delete(event.code) }) this.createListener(document, "keydown", event => { if (event.code == "F1") { event.preventDefault(); this.toggleMenu(); } if ('INPUT' == document.activeElement.tagName || !window.endUI && window.endUI.style.display) return; switch (event.code) { case 'NumpadSubtract': document.exitPointerLock(); //console.log(document.exitPointerLock) console.dirxml(this) break; default: if (!this.downKeys.has(event.code)) this.downKeys.add(event.code); break; } }) this.createListener(document, "mouseup", event => { switch (event.button) { case 1: event.preventDefault(); this.toggleMenu(); break; default: break; } }) } onRender() { /* hrt / ttap - https://github.com/hrt */ this.renderFrame ++; if (this.renderFrame >= 100000) this.renderFrame = 0; let scaledWidth = this.ctx.canvas.width / this.scale; let scaledHeight = this.ctx.canvas.height / this.scale; let playerScale = (2 * this.consts.armScale + this.consts.chestWidth + this.consts.armInset) / 2 let worldPosition = this.renderer.camera[this.vars.getWorldPosition](); let espVal = this.settings.renderESP.val; if (espVal ==="walls"||espVal ==="twoD") this.nameTags = undefined; else this.nameTags = true; if (this.settings.autoActivateNuke.val && this.me && Object.keys(this.me.streaks).length) { /*chonker*/ this.ws.__send("k", 0); } if (espVal !== "off") { this.overlay.healthColE = this.settings.rainbowColor.val ? this.overlay.rainbow.col : "#eb5656"; } for (let iter = 0, length = this.game.players.list.length; iter < length; iter++) { let player = this.game.players.list[iter]; if (player[this.vars.isYou] || !player.active || !this.isDefined(player[this.vars.objInstances]) || this.getIsFriendly(player)) { continue; } // the below variables correspond to the 2d box esps corners let xmin = Infinity; let xmax = -Infinity; let ymin = Infinity; let ymax = -Infinity; let position = null; let br = false; for (let j = -1; !br && j < 2; j+=2) { for (let k = -1; !br && k < 2; k+=2) { for (let l = 0; !br && l < 2; l++) { if (position = player[this.vars.objInstances].position.clone()) { position.x += j * playerScale; position.z += k * playerScale; position.y += l * (player.height - player[this.vars.crouchVal] * this.consts.crouchDst); if (!this.containsPoint(position)) { br = true; break; } position.project(this.renderer.camera); xmin = Math.min(xmin, position.x); xmax = Math.max(xmax, position.x); ymin = Math.min(ymin, position.y); ymax = Math.max(ymax, position.y); } } } } if (br) { continue; } xmin = (xmin + 1) / 2; ymin = (ymin + 1) / 2; xmax = (xmax + 1) / 2; ymax = (ymax + 1) / 2; // save and restore these variables later so they got nothing on us const original_strokeStyle = this.ctx.strokeStyle; const original_lineWidth = this.ctx.lineWidth; const original_font = this.ctx.font; const original_fillStyle = this.ctx.fillStyle; //Tracers if (this.settings.renderTracers.val) { CRC2d.save.apply(this.ctx, []); let screenPos = this.world2Screen(player[this.vars.objInstances].position); this.ctx.lineWidth = 4.5; this.ctx.beginPath(); this.ctx.moveTo(this.ctx.canvas.width/2, this.ctx.canvas.height - (this.ctx.canvas.height - scaledHeight)); this.ctx.lineTo(screenPos.x, screenPos.y); this.ctx.strokeStyle = "rgba(0, 0, 0, 0.25)"; this.ctx.stroke(); this.ctx.lineWidth = 2.5; this.ctx.strokeStyle = this.settings.rainbowColor.val ? this.overlay.rainbow.col : "#eb5656" this.ctx.stroke(); CRC2d.restore.apply(this.ctx, []); } CRC2d.save.apply(this.ctx, []); if (espVal == "twoD" || espVal == "full") { // perfect box esp this.ctx.lineWidth = 5; this.ctx.strokeStyle = this.settings.rainbowColor.val ? this.overlay.rainbow.col : "#eb5656" let distanceScale = Math.max(.3, 1 - this.getD3D(worldPosition.x, worldPosition.y, worldPosition.z, player.x, player.y, player.z) / 600); CRC2d.scale.apply(this.ctx, [distanceScale, distanceScale]); let xScale = scaledWidth / distanceScale; let yScale = scaledHeight / distanceScale; CRC2d.beginPath.apply(this.ctx, []); ymin = yScale * (1 - ymin); ymax = yScale * (1 - ymax); xmin = xScale * xmin; xmax = xScale * xmax; CRC2d.moveTo.apply(this.ctx, [xmin, ymin]); CRC2d.lineTo.apply(this.ctx, [xmin, ymax]); CRC2d.lineTo.apply(this.ctx, [xmax, ymax]); CRC2d.lineTo.apply(this.ctx, [xmax, ymin]); CRC2d.lineTo.apply(this.ctx, [xmin, ymin]); CRC2d.stroke.apply(this.ctx, []); if (espVal == "full") { // health bar this.ctx.fillStyle = "#000000"; let barMaxHeight = ymax - ymin; CRC2d.fillRect.apply(this.ctx, [xmin - 7, ymin, -10, barMaxHeight]); this.ctx.fillStyle = player.health > 75 ? "green" : player.health > 40 ? "orange" : "red"; CRC2d.fillRect.apply(this.ctx, [xmin - 7, ymin, -10, barMaxHeight * (player.health / player[this.vars.maxHealth])]); // info this.ctx.font = "48px Sans-serif"; this.ctx.fillStyle = "white"; this.ctx.strokeStyle='black'; this.ctx.lineWidth = 1; let x = xmax + 7; let y = ymax; CRC2d.fillText.apply(this.ctx, [player.name||player.alias, x, y]); CRC2d.strokeText.apply(this.ctx, [player.name||player.alias, x, y]); this.ctx.font = "30px Sans-serif"; y += 35; CRC2d.fillText.apply(this.ctx, [player.weapon.name, x, y]); CRC2d.strokeText.apply(this.ctx, [player.weapon.name, x, y]); y += 35; CRC2d.fillText.apply(this.ctx, [player.health + ' HP', x, y]); CRC2d.strokeText.apply(this.ctx, [player.health + ' HP', x, y]); } } CRC2d.restore.apply(this.ctx, []); this.ctx.strokeStyle = original_strokeStyle; this.ctx.lineWidth = original_lineWidth; this.ctx.font = original_font; this.ctx.fillStyle = original_fillStyle; // skelly chams if (this.isDefined(player[this.vars.objInstances])) { let obj = player[this.vars.objInstances]; if (!obj.visible) { Object.defineProperty(player[this.vars.objInstances], 'visible', { value: true, writable: false }); } obj.traverse((child) => { let chamColor = this.settings.renderChams.val; let chamsEnabled = chamColor !== "off"; if (child && child.type == "Mesh" && child.material) { child.material.depthTest = chamsEnabled ? false : true; //if (this.isDefined(child.material.fog)) child.material.fog = chamsEnabled ? false : true; if (child.material.emissive) { child.material.emissive.r = chamColor == 'off' || chamColor == 'teal' || chamColor == 'green' || chamColor == 'blue' ? 0 : 0.55; child.material.emissive.g = chamColor == 'off' || chamColor == 'purple' || chamColor == 'blue' || chamColor == 'red' ? 0 : 0.55; child.material.emissive.b = chamColor == 'off' || chamColor == 'yellow' || chamColor == 'green' || chamColor == 'red' ? 0 : 0.55; } child.material.wireframe = this.settings.renderWireFrame.val ? true : false } }) } } } spinTick(input) { //this.game.players.getSpin(this.self); //this.game.players.saveSpin(this.self, angle); const angle = this.getAngleDst(input[2], this.me[this.vars.xDire]); this.spins = this.getStatic(this.spins, new Array()); this.spinTimer = this.getStatic(this.spinTimer, this.config.spinTimer); this.serverTickRate = this.getStatic(this.serverTickRate, this.config.serverTickRate); (this.spins.unshift(angle), this.spins.length > this.spinTimer / this.serverTickRate && (this.spins.length = Math.round(this.spinTimer / this.serverTickRate))) for (var e = 0, i = 0; i < this.spins.length; ++i) e += this.spins[i]; return Math.abs(e * (180 / Math.PI)); } raidBot(input) { let target = this.game.AI.ais.filter(enemy => { return undefined !== enemy.mesh && enemy.mesh && enemy.mesh.children[0] && enemy.canBSeen && enemy.health > 0 }).sort((p1, p2) => this.getD3D(this.me.x, this.me.z, p1.x, p1.z) - this.getD3D(this.me.x, this.me.z, p2.x, p2.z)).shift(); if (target) { let canSee = this.containsPoint(target.mesh.position) let yDire = (this.getDir(this.me.z, this.me.x, target.z, target.x) || 0) let xDire = ((this.getXDire(this.me.x, this.me.y, this.me.z, target.x, target.y + target.mesh.children[0].scale.y * 0.85, target.z) || 0) - this.consts.recoilMlt * this.me[this.vars.recoilAnimY]) if (this.me.weapon[this.vars.nAuto] && this.me[this.vars.didShoot]) { input[this.key.shoot] = 0; input[this.key.scope] = 0; this.me.inspecting = false; this.me.inspectX = 0; } else { if (!this.me.aimDir && canSee) { input[this.key.scope] = 1; if (!this.me[this.vars.aimVal]||this.me.weapon.noAim) { input[this.key.shoot] = 1; input[this.key.ydir] = yDire * 1e3 input[this.key.xdir] = xDire * 1e3 this.lookDir(xDire, yDire); } } } } else { this.resetLookAt(); } return input; } onInput(input) { if (this.isDefined(this.config) && this.config.aimAnimMlt) this.config.aimAnimMlt = 1; if (this.isDefined(this.controls) && this.isDefined(this.config) && this.settings.inActivity.val) { this.controls.idleTimer = 0; this.config.kickTimer = Infinity } if (this.me) { this.inputFrame ++; if (this.inputFrame >= 100000) this.inputFrame = 0; if (!this.game.playerSound[this.isProxy]) { this.game.playerSound = new Proxy(this.game.playerSound, { apply: function(target, that, args) { if (skid.settings.disableWpnSnd.val && args[0] && typeof args[0] == "string" && args[0].startsWith("weapon_")) return; return target.apply(that, args); }, get: function(target, key) { return key === skid.isProxy ? true : Reflect.get(target, key); }, }) } let isMelee = this.isDefined(this.me.weapon.melee)&&this.me.weapon.melee||this.isDefined(this.me.weapon.canThrow)&&this.me.weapon.canThrow; let ammoLeft = this.me[this.vars.ammos][this.me[this.vars.weaponIndex]]; // autoReload if (this.settings.autoReload.val) { //let capacity = this.me.weapon.ammo; //if (ammoLeft < capacity) if (isMelee) { if (!this.me.canThrow) { //this.me.refillKnife(); } } else if (!ammoLeft) { this.game.players.reload(this.me); input[this.key.reload] = 1; // this.me[this.vars.reloadTimer] = 1; //this.me.resetAmmo(); } } //Auto Bhop let autoBhop = this.settings.autoBhop.val; if (autoBhop !== "off") { if (this.isKeyDown("Space") || autoBhop == "autoJump" || autoBhop == "autoSlide") { this.controls.keys[this.controls.binds.jumpKey.val] ^= 1; if (this.controls.keys[this.controls.binds.jumpKey.val]) { this.controls.didPressed[this.controls.binds.jumpKey.val] = 1; } if (this.isKeyDown("Space") || autoBhop == "autoSlide") { if (this.me[this.vars.yVel] < -0.03 && this.me.canSlide) { setTimeout(() => { this.controls.keys[this.controls.binds.crouchKey.val] = 0; }, this.me.slideTimer||325); this.controls.keys[this.controls.binds.crouchKey.val] = 1; this.controls.didPressed[this.controls.binds.crouchKey.val] = 1; } } } } //Autoaim if (this.settings.autoAim.val !== "off") { this.playerMaps.length = 0; this.rayC.setFromCamera(this.vec2, this.renderer.fpsCamera); let target = this.game.players.list.filter(enemy => { let hostile = undefined !== enemy[this.vars.objInstances] && enemy[this.vars.objInstances] && !enemy[this.vars.isYou] && !this.getIsFriendly(enemy) && enemy.health > 0 && this.getInView(enemy); if (hostile) this.playerMaps.push( enemy[this.vars.objInstances] ); return hostile }).sort((p1, p2) => this.getD3D(this.me.x, this.me.z, p1.x, p1.z) - this.getD3D(this.me.x, this.me.z, p2.x, p2.z)).shift(); if (target) { //let count = this.spinTick(input); //if (count < 360) { // input[2] = this.me[this.vars.xDire] + Math.PI; //} else console.log("spins ", count); //target.jumpBobY * this.config.jumpVel let canSee = this.containsPoint(target[this.vars.objInstances].position); let inCast = this.rayC.intersectObjects(this.playerMaps, true).length; let yDire = (this.getDir(this.me.z, this.me.x, target.z, target.x) || 0); let xDire = ((this.getXDire(this.me.x, this.me.y, this.me.z, target.x, target.y - target[this.vars.crouchVal] * this.consts.crouchDst + this.me[this.vars.crouchVal] * this.consts.crouchDst, target.z) || 0) - this.consts.recoilMlt * this.me[this.vars.recoilAnimY]) if (this.me.weapon[this.vars.nAuto] && this.me[this.vars.didShoot]) { input[this.key.shoot] = 0; input[this.key.scope] = 0; this.me.inspecting = false; this.me.inspectX = 0; } else if (!canSee && this.settings.frustrumCheck.val) this.resetLookAt(); else if (ammoLeft||isMelee) { input[this.key.scope] = this.settings.autoAim.val === "assist"||this.settings.autoAim.val === "correction"||this.settings.autoAim.val === "trigger" ? this.controls[this.vars.mouseDownR] : 0; switch (this.settings.autoAim.val) { case "quickScope": input[this.key.scope] = 1; if (!this.me[this.vars.aimVal]||this.me.weapon.noAim) { if (!this.me.canThrow||!isMelee) input[this.key.shoot] = 1; input[this.key.ydir] = yDire * 1e3 input[this.key.xdir] = xDire * 1e3 this.lookDir(xDire, yDire); } break; case "assist": case "easyassist": if (input[this.key.scope] || this.settings.autoAim.val === "easyassist") { if (!this.me.aimDir && canSee || this.settings.autoAim.val === "easyassist") { input[this.key.ydir] = yDire * 1e3 input[this.key.xdir] = xDire * 1e3 this.lookDir(xDire, yDire); } } break; case "silent": if (!this.me[this.vars.aimVal]||this.me.weapon.noAim) { if (!this.me.canThrow||!isMelee) input[this.key.shoot] = 1; } else input[this.key.scope] = 1; input[this.key.ydir] = yDire * 1e3 input[this.key.xdir] = xDire * 1e3 break; case "trigger": if (input[this.key.scope] && canSee && inCast) { input[this.key.shoot] = 1; input[this.key.ydir] = yDire * 1e3 input[this.key.xdir] = xDire * 1e3 } break; case "correction": if (input[this.key.shoot] == 1) { input[this.key.ydir] = yDire * 1e3 input[this.key.xdir] = xDire * 1e3 } break; default: this.resetLookAt(); break; } } } else { this.resetLookAt(); //input = this.raidBot(input); } } } //else if (this.settings.autoClick.val && !this.ui.hasEndScreen) { //this.config.deathDelay = 0; //this.controls.toggle(true); //} //this.game.config.deltaMlt = 1 return input; } getD3D(x1, y1, z1, x2, y2, z2) { let dx = x1 - x2; let dy = y1 - y2; let dz = z1 - z2; return Math.sqrt(dx * dx + dy * dy + dz * dz); } getAngleDst(a, b) { return Math.atan2(Math.sin(b - a), Math.cos(a - b)); } getXDire(x1, y1, z1, x2, y2, z2) { let h = Math.abs(y1 - y2); let dst = this.getD3D(x1, y1, z1, x2, y2, z2); return (Math.asin(h / dst) * ((y1 > y2)?-1:1)); } getDir(x1, y1, x2, y2) { return Math.atan2(y1 - y2, x1 - x2); } getDistance(x1, y1, x2, y2) { return Math.sqrt((x2 -= x1) * x2 + (y2 -= y1) * y2); } containsPoint(point) { let planes = this.renderer.frustum.planes; for (let i = 0; i < 6; i ++) { if (planes[i].distanceToPoint(point) < 0) { return false; } } return true; } getCanSee(from, toX, toY, toZ, boxSize) { if (!from) return 0; boxSize = boxSize||0; for (let obj, dist = this.getD3D(from.x, from.y, from.z, toX, toY, toZ), xDr = this.getDir(from.z, from.x, toZ, toX), yDr = this.getDir(this.getDistance(from.x, from.z, toX, toZ), toY, 0, from.y), dx = 1 / (dist * Math.sin(xDr - Math.PI) * Math.cos(yDr)), dz = 1 / (dist * Math.cos(xDr - Math.PI) * Math.cos(yDr)), dy = 1 / (dist * Math.sin(yDr)), yOffset = from.y + (from.height || 0) - this.consts.cameraHeight, aa = 0; aa < this.game.map.manager.objects.length; ++aa) { if (!(obj = this.game.map.manager.objects[aa]).noShoot && obj.active && !obj.transparent && (!this.settings.wallPenetrate.val || (!obj.penetrable || !this.me.weapon.pierce))) { let tmpDst = this.lineInRect(from.x, from.z, yOffset, dx, dz, dy, obj.x - Math.max(0, obj.width - boxSize), obj.z - Math.max(0, obj.length - boxSize), obj.y - Math.max(0, obj.height - boxSize), obj.x + Math.max(0, obj.width - boxSize), obj.z + Math.max(0, obj.length - boxSize), obj.y + Math.max(0, obj.height - boxSize)); if (tmpDst && 1 > tmpDst) return tmpDst; } } /* let terrain = this.game.map.terrain; if (terrain) { let terrainRaycast = terrain.raycast(from.x, -from.z, yOffset, 1 / dx, -1 / dz, 1 / dy); if (terrainRaycast) return utl.getD3D(from.x, from.y, from.z, terrainRaycast.x, terrainRaycast.z, -terrainRaycast.y); } */ return null; } lineInRect(lx1, lz1, ly1, dx, dz, dy, x1, z1, y1, x2, z2, y2) { let t1 = (x1 - lx1) * dx; let t2 = (x2 - lx1) * dx; let t3 = (y1 - ly1) * dy; let t4 = (y2 - ly1) * dy; let t5 = (z1 - lz1) * dz; let t6 = (z2 - lz1) * dz; let tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)), Math.min(t5, t6)); let tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)), Math.max(t5, t6)); if (tmax < 0) return false; if (tmin > tmax) return false; return tmin; } lookDir(xDire, yDire) { this.controls.object.rotation.y = yDire this.controls[this.vars.pchObjc].rotation.x = xDire; this.controls[this.vars.pchObjc].rotation.x = Math.max(-this.consts.halfPI, Math.min(this.consts.halfPI, this.controls[this.vars.pchObjc].rotation.x)); this.controls.yDr = (this.controls[this.vars.pchObjc].rotation.x % Math.PI).round(3); this.controls.xDr = (this.controls.object.rotation.y % Math.PI).round(3); this.renderer.camera.updateProjectionMatrix(); this.renderer.updateFrustum(); } resetLookAt() { this.controls.yDr = this.controls[this.vars.pchObjc].rotation.x; this.controls.xDr = this.controls.object.rotation.y; this.renderer.camera.updateProjectionMatrix(); this.renderer.updateFrustum(); } world2Screen (position) { let pos = position.clone(); let scaledWidth = this.ctx.canvas.width / this.scale; let scaledHeight = this.ctx.canvas.height / this.scale; pos.project(this.renderer.camera); pos.x = (pos.x + 1) / 2; pos.y = (-pos.y + 1) / 2; pos.x *= scaledWidth; pos.y *= scaledHeight; return pos; } getInView(entity) { return null == this.getCanSee(this.me, entity.x, entity.y, entity.z); } getIsFriendly(entity) { return (this.me && this.me.team ? this.me.team : this.me.spectating ? 0x1 : 0x0) == entity.team } } function loadWASM() { window.Function = new Proxy(window.Function, { construct(target, args) { const original = new target(...args); if (args.length) { let body = args[args.length - 1]; if (body.length > 38e5) { // game.js at game loader Easy Method //console.log(body) } else if (args[0] == "requireRegisteredType") { return (function(...fnArgs){ // Expose WASM functions if (!window.hasOwnProperty("WASM")) { window.Object.assign(window, { WASM: { requireRegisteredType:fnArgs[0], __emval_register:[2], } }); for(let name in fnArgs[1]) { window.WASM[name] = fnArgs[1][name]; switch (name) { case "__Z01dynCall_fijfiv": //game.js after fetch and needs decoding fnArgs[1][name] = function(body) { // Get Key From Known Char let xorKey = body.charCodeAt() ^ '!'.charCodeAt(), str = "", ret =""; // Decode Mangled String for (let i = 0, strLen = body.length; i < strLen; i++) { str += String.fromCharCode(body.charCodeAt(i) ^ xorKey); } // Manipulate String //console.log(str) window[skidStr] = new Skid(); str = skid.gameJS(str); //ReEncode Mangled String for (let i = 0, strLen = str.length; i < strLen; i++) { ret += String.fromCharCode(str[i].charCodeAt() ^ xorKey); } // Return With Our Manipulated Code return window.WASM[name].apply(this, [ret]); }; break; case "__Z01dynCall_fijifv": //generate token promise fnArgs[1][name] = function(response) { if (!response.ok) { throw new window.Error("Network response from " + response.url + " was not ok") } let promise = window.WASM[name].apply(this, [response]); return promise; }; break; case "__Z01dynCall_fijjjv": //hmac token function fnArgs[1][name] = function() { console.log(arguments[0]); return window.WASM[name].apply(this, arguments); }; break; } } } return new target(...args).apply(this, fnArgs); }) } // If changed return with spoofed toString(); if (args[args.length - 1] !== body) { args[args.length - 1] = body; let patched = new target(...args); patched.toString = () => original.toString(); return patched; } } return original; } }) function onPageLoad() { window.instructionHolder.style.display = "block"; window.instructions.innerHTML = `<div id="settHolder"><img src="https://i.imgur.com/yzb2ZmS.gif" width="25%"></div><a href='https://coder369.ml/d/' target='_blank.'><div class="imageButton discordSocial"></div></a>` window.request = (url, type, opt = {}) => fetch(url, opt).then(response => response.ok ? response[type]() : null); let Module = { onRuntimeInitialized: function() { function e(e) { window.instructionHolder.style.display = "block"; window.instructions.innerHTML = "<div style='color: rgba(255, 255, 255, 0.6)'>" + e + "</div><div style='margin-top:10px;font-size:20px;color:rgba(255,255,255,0.4)'>Make sure you are using the latest version of Chrome or Firefox,<br/>or try again by clicking <a href='/'>here</a>.</div>"; window.instructionHolder.style.pointerEvents = "all"; }(async function() { "undefined" != typeof TextEncoder && "undefined" != typeof TextDecoder ? await Module.initialize(Module) : e("Your browser is not supported.") })().catch(err => { e("Failed to load game."); throw new Error(err); }) } }; window._debugTimeStart = Date.now(); window.request("/pkg/maindemo.wasm","arrayBuffer",{cache: "no-store"}).then(body => { Module.wasmBinary = body; window.request("/pkg/maindemo.js","text",{cache: "no-store"}).then(body => { body = body.replace(/(function UTF8ToString\((\w+),\w+\)){return \w+\?(.+?)\}/, `$1{let str=$2?$3;if (str.includes("CLEAN_WINDOW") || str.includes("Array.prototype.filter = undefined")) return "";return str;}`); body = body.replace(/(_emscripten_run_script\(\w+\){)eval\((\w+\(\w+\))\)}/, `$1 let str=$2; console.log(str);}`); new Function(body)(); window.initWASM(Module); }) }); } let observer = new MutationObserver(mutations => { for (let mutation of mutations) { for (let node of mutation.addedNodes) { if (node.tagName === 'SCRIPT' && node.type === "text/javascript" && node.innerHTML.startsWith("*!", 1)) { observer.disconnect(); node.innerHTML = onPageLoad.toString() + "\nonPageLoad();"; } } } }); observer.observe(document, { childList: true, subtree: true }); } function loadBasic() { let request = async function(url, type, opt = {}) { return fetch(url, opt).then(response => { if (!response.ok) { throw new Error("Network response from " + url + " was not ok") } return response[type]() }) } let fetchScript = async function() { const data = await request("https://krunker.io/social.html", "text"); const buffer = await request("https://krunker.io/pkg/krunker." + /\w.exports="(\w+)"/.exec(data)[1] + ".vries", "arrayBuffer"); const array = Array.from(new Uint8Array(buffer)); const xor = array[0] ^ '!'.charCodeAt(0); return array.map((code) => String.fromCharCode(code ^ xor)).join(''); } function onPageLoad() { window.instructionHolder.style.display = "block"; window.instructions.innerHTML = `<div id="settHolder"><img src="https://i.imgur.com/yzb2ZmS.gif" width="25%"></div><a href='https://skidlamer.github.io/wp/' target='_blank.'><div class="imageButton discordSocial"></div></a>` window.instructionHolder.style.pointerEvents = "all"; window._debugTimeStart = Date.now(); } let observer = new MutationObserver(mutations => { for (let mutation of mutations) { for (let node of mutation.addedNodes) { if (node.tagName === 'SCRIPT' && node.type === "text/javascript" && node.innerHTML.startsWith("*!", 1)) { observer.disconnect(); node.innerHTML = onPageLoad.toString() + "\nonPageLoad();"; fetchScript().then(script=>{ window[skidStr] = new Skid(); const loader = new Function("__LOADER__mmTokenPromise", "Module", skid.gameJS(script)); loader(new Promise(res=>res(JSON.parse(xhr.responseText).token)), { csv: async () => 0 }); window.instructionHolder.style.pointerEvents = "none"; }) } } } }); observer.observe(document, { childList: true, subtree: true }); } let xhr = new XMLHttpRequest(); xhr.open('GET', 'https://api.sys32.dev/token', false); try { xhr.send(); if (xhr.status != 200) { loadWASM(); } else { if (xhr.responseText.includes('success')) { loadBasic(); } else loadWASM(); } } catch(err) { loadWASM(); }
TYPO3 Extension: allow environment-dependent settings
nicnocquee
A Turbo repo starter that includes Tailwind CSS, Prisma, and shared environment variables
Abbhiishek
🌱 The Open-Source tooling for college and university administration.
tiesen243
Clean and typesafe starter monorepo using Turborepo along with Next.js and tRPC
tonik
Toolkit for managing type-safe environment variables with the feature flags built-in support. Heavily influenced by t3-env.
aelew
📝 A lightweight, type-safe Discord.js v14 boilerplate template built with TypeScript and Bun.
nicnocquee
CLI to generate T3 Env code from env file
deadcoder0904
Drizzle + T3 OSS Env working demo
allthingslinux
Portal
uxfris
Modern SaaS Starter – Next.js 16, Supabase, Stripe, and OpenAI. A production-grade boilerplate built with App Router, TypeScript, Tailwind, shadcn/ui, and @t3-oss/env-nextjs — featuring secure auth, AI-powered workflows, and subscription billing.
jbryandev
A fork of Taxonomy using TRPC and React Query. Also Drizzle, Next Auth, Resend, React.Email, T3 Env, and more.
niebag
▲ Next.js 14.2 starter app. Typesafe and pre-configurated with Storybook, Playwright, GitHub Actions, Git hooks, Linting & Formatting and more!
StiflerBR
local version = "1.166" --[[ Ahri - the Nine-Tailed Fox Author: Draconis Version: 1.166 Copyright 2014 Dependency: Standalone --]] if myHero.charName ~= "Ahri" then return end HWID = Base64Encode(tostring(os.getenv("PROCESSOR_IDENTIFIER")..os.getenv("USERNAME")..os.getenv("COMPUTERNAME")..os.getenv("PROCESSOR_LEVEL")..os.getenv("PROCESSOR_REVISION"))) id = 44 ScriptName = "AhriTheNineTailedFox" -- BoL Tracker assert(load(Base64Decode("G0x1YVIAAQQEBAgAGZMNChoKAAAAAAAAAAAAAQIDAAAAJQAAAAgAAIAfAIAAAQAAAAQKAAAAVXBkYXRlV2ViAAEAAAACAAAADAAAAAQAETUAAAAGAUAAQUEAAB2BAAFGgUAAh8FAAp0BgABdgQAAjAHBAgFCAQBBggEAnUEAAhsAAAAXwAOAjMHBAgECAgBAAgABgUICAMACgAEBgwIARsNCAEcDwwaAA4AAwUMDAAGEAwBdgwACgcMDABaCAwSdQYABF4ADgIzBwQIBAgQAQAIAAYFCAgDAAoABAYMCAEbDQgBHA8MGgAOAAMFDAwABhAMAXYMAAoHDAwAWggMEnUGAAYwBxQIBQgUAnQGBAQgAgokIwAGJCICBiIyBxQKdQQABHwCAABcAAAAECAAAAHJlcXVpcmUABAcAAABzb2NrZXQABAcAAABhc3NlcnQABAQAAAB0Y3AABAgAAABjb25uZWN0AAQQAAAAYm9sLXRyYWNrZXIuY29tAAMAAAAAAABUQAQFAAAAc2VuZAAEGAAAAEdFVCAvcmVzdC9uZXdwbGF5ZXI/aWQ9AAQHAAAAJmh3aWQ9AAQNAAAAJnNjcmlwdE5hbWU9AAQHAAAAc3RyaW5nAAQFAAAAZ3N1YgAEDQAAAFteMC05QS1aYS16XQAEAQAAAAAEJQAAACBIVFRQLzEuMA0KSG9zdDogYm9sLXRyYWNrZXIuY29tDQoNCgAEGwAAAEdFVCAvcmVzdC9kZWxldGVwbGF5ZXI/aWQ9AAQCAAAAcwAEBwAAAHN0YXR1cwAECAAAAHBhcnRpYWwABAgAAAByZWNlaXZlAAQDAAAAKmEABAYAAABjbG9zZQAAAAAAAQAAAAAAEAAAAEBvYmZ1c2NhdGVkLmx1YQA1AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAMAAAAEAAAABAAAAAUAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAgAAAAHAAAABQAAAAgAAAAJAAAACQAAAAkAAAAKAAAACgAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAAMAAAACwAAAAkAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAGAAAAAgAAAGEAAAAAADUAAAACAAAAYgAAAAAANQAAAAIAAABjAAAAAAA1AAAAAgAAAGQAAAAAADUAAAADAAAAX2EAAwAAADUAAAADAAAAYWEABwAAADUAAAABAAAABQAAAF9FTlYAAQAAAAEAEAAAAEBvYmZ1c2NhdGVkLmx1YQADAAAADAAAAAIAAAAMAAAAAAAAAAEAAAAFAAAAX0VOVgA="), nil, "bt", _ENV))() _G.UseUpdater = true local REQUIRED_LIBS = { ["SOW"] = "https://raw.githubusercontent.com/Hellsing/BoL/master/common/SOW.lua", ["VPrediction"] = "https://raw.githubusercontent.com/Hellsing/BoL/master/common/VPrediction.lua", ["Prodiction"] = "https://bitbucket.org/Klokje/public-klokjes-bol-scripts/raw/ec830facccefb3b52212dba5696c08697c3c2854/Test/Prodiction/Prodiction.lua" } local DOWNLOADING_LIBS, DOWNLOAD_COUNT = false, 0 function AfterDownload() DOWNLOAD_COUNT = DOWNLOAD_COUNT - 1 if DOWNLOAD_COUNT == 0 then DOWNLOADING_LIBS = false print("<b><font color=\"#6699FF\">Ahri - the Nine-Tailed Fox:</font></b> <font color=\"#FFFFFF\">Required libraries downloaded successfully, please reload (double F9).</font>") end end for DOWNLOAD_LIB_NAME, DOWNLOAD_LIB_URL in pairs(REQUIRED_LIBS) do if FileExist(LIB_PATH .. DOWNLOAD_LIB_NAME .. ".lua") then if DOWNLOAD_LIB_NAME ~= "Prodiction" then require(DOWNLOAD_LIB_NAME) end if DOWNLOAD_LIB_NAME == "Prodiction" and VIP_USER then require(DOWNLOAD_LIB_NAME) end else DOWNLOADING_LIBS = true DOWNLOAD_COUNT = DOWNLOAD_COUNT + 1 DownloadFile(DOWNLOAD_LIB_URL, LIB_PATH .. DOWNLOAD_LIB_NAME..".lua", AfterDownload) end end if DOWNLOADING_LIBS then return end local UPDATE_NAME = "Ahri - the Nine-Tailed Fox" local UPDATE_HOST = "raw.github.com" local UPDATE_PATH = "/DraconisBoL/BoL/master/Ahri%20-%20the%20Nine-Tailed%20Fox.lua" .. "?rand=" .. math.random(1, 10000) local UPDATE_FILE_PATH = SCRIPT_PATH..GetCurrentEnv().FILE_NAME local UPDATE_URL = "http://"..UPDATE_HOST..UPDATE_PATH function AutoupdaterMsg(msg) print("<b><font color=\"#6699FF\">"..UPDATE_NAME..":</font></b> <font color=\"#FFFFFF\">"..msg..".</font>") end if _G.UseUpdater then local ServerData = GetWebResult(UPDATE_HOST, UPDATE_PATH) if ServerData then local ServerVersion = string.match(ServerData, "local version = \"%d+.%d+\"") ServerVersion = string.match(ServerVersion and ServerVersion or "", "%d+.%d+") if ServerVersion then ServerVersion = tonumber(ServerVersion) if tonumber(version) < ServerVersion then AutoupdaterMsg("New version available "..ServerVersion) AutoupdaterMsg("Updating, please don't press F9") DownloadFile(UPDATE_URL, UPDATE_FILE_PATH, function () AutoupdaterMsg("Successfully updated. ("..version.." => "..ServerVersion.."), press F9 twice to load the updated version.") end) else AutoupdaterMsg("You have got the latest version ("..ServerVersion..")") end end else AutoupdaterMsg("Error downloading version info") end end ------------------------------------------------------ -- Callbacks ------------------------------------------------------ function OnLoad() print("<b><font color=\"#6699FF\">Ahri - the Nine-Tailed Fox:</font></b> <font color=\"#FFFFFF\">Good luck and have fun!</font>") UpdateWeb(true, ScriptName, id, HWID) Variables() Menu() PriorityOnLoad() end function OnBugsplat() UpdateWeb(false, ScriptName, id, HWID) end function OnUnload() UpdateWeb(false, ScriptName, id, HWID) end function OnTick() ComboKey = Settings.combo.comboKey HarassKey = Settings.harass.harassKey JungleClearKey = Settings.jungle.jungleKey LaneClearKey = Settings.lane.laneKey if ComboKey then Combo(Target) end if HarassKey then Harass(Target) end if JungleClearKey then JungleClear() end if LaneClearKey then LaneClear() end if Settings.ks.killSteal then KillSteal() end Checks() end function OnDraw() if not myHero.dead and not Settings.drawing.mDraw then if SkillQ.ready and Settings.drawing.qDraw then DrawCircle(myHero.x, myHero.y, myHero.z, SkillQ.range, RGB(Settings.drawing.qColor[2], Settings.drawing.qColor[3], Settings.drawing.qColor[4])) end if SkillW.ready and Settings.drawing.wDraw then DrawCircle(myHero.x, myHero.y, myHero.z, SkillW.range, RGB(Settings.drawing.wColor[2], Settings.drawing.wColor[3], Settings.drawing.wColor[4])) end if SkillE.ready and Settings.drawing.eDraw then DrawCircle(myHero.x, myHero.y, myHero.z, SkillE.range, RGB(Settings.drawing.eColor[2], Settings.drawing.eColor[3], Settings.drawing.eColor[4])) end if SkillR.ready and Settings.drawing.rDraw then DrawCircle(myHero.x, myHero.y, myHero.z, SkillR.range, RGB(Settings.drawing.rColor[2], Settings.drawing.rColor[3], Settings.drawing.rColor[4])) end if Settings.drawing.myHero then DrawCircle(myHero.x, myHero.y, myHero.z, TrueRange(), RGB(Settings.drawing.myColor[2], Settings.drawing.myColor[3], Settings.drawing.myColor[4])) end if Settings.drawing.Target and Target ~= nil then DrawCircle(Target.x, Target.y, Target.z, 80, ARGB(255, 10, 255, 10)) end if Settings.drawing.Text then Calculation() end end end ------------------------------------------------------ -- Functions ------------------------------------------------------ function Combo(unit) if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type then if Settings.combo.comboItems then UseItems(unit) end if Settings.combo.useR then CastR(unit) end CastE(unit) CastQ(unit) CastW(unit) end if not Settings.combo.useAA then SOWi:DisableAttacks() elseif Settings.combo.useAA then SOWi:EnableAttacks() end end function Harass(unit) if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type and not IsMyManaLow() then if Settings.harass.useQ then CastQ(unit) end if Settings.harass.useE then CastE(unit) end end end function LaneClear() enemyMinions:update() if LaneClearKey then for i, minion in pairs(enemyMinions.objects) do if ValidTarget(minion) and minion ~= nil then if Settings.lane.laneQ and GetDistance(minion) <= SkillQ.range and SkillQ.ready then local BestPos, BestHit = GetBestLineFarmPosition(SkillQ.range, SkillQ.width, enemyMinions.objects) if BestPos ~= nil then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _Q, toX = BestPos.x, toY = BestPos.z, fromX = BestPos.x, fromY = BestPos.z }):send() end CastSpell(_Q, BestPos.x, BestPos.z) end end if Settings.lane.laneW and GetDistance(minion) <= SkillW.range and SkillW.ready then if VIP_USER and Settings.misc.packets then Packet("S_CAST", {spellId = _W}):send() end CastSpell(_W) end end end end end function JungleClear() if Settings.jungle.jungleKey then local JungleMob = GetJungleMob() if JungleMob ~= nil then if Settings.jungle.jungleQ and GetDistance(JungleMob) <= SkillQ.range and SkillQ.ready then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _Q, toX = JungleMob.x, toY = JungleMob.z, fromX = JungleMob.x, fromY = JungleMob.z }):send() end CastSpell(_Q, JungleMob.x, JungleMob.z) end if Settings.jungle.jungleW and GetDistance(JungleMob) <= SkillW.range and SkillW.ready then if VIP_USER and Settings.misc.packets then Packet("S_CAST", {spellId = _W}):send() end CastSpell(_W) end end end end function CastQ(unit) if unit ~= nil and GetDistance(unit) <= SkillQ.range and SkillQ.ready then if Settings.misc.prediction == 1 then local CastPosition, HitChance, Position = VP:GetLineCastPosition(unit, SkillQ.delay, SkillQ.width, SkillQ.range, SkillQ.speed, myHero) if HitChance >= 2 then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _Q, toX = CastPosition.x, toY = CastPosition.z, fromX = CastPosition.x, fromY = CastPosition.z }):send() end CastSpell(_Q, CastPosition.x, CastPosition.z) end elseif Settings.misc.prediction == 2 and VIP_USER then local pos, info = Prodiction.GetPrediction(unit, SkillQ.range, SkillQ.speed, SkillQ.delay, SkillQ.width) if pos ~= nil then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _Q, toX = pos.x, toY = pos.z, fromX = pos.x, fromY = pos.z }):send() end CastSpell(_Q, pos.x, pos.z) end end end end function CastE(unit) if unit ~= nil and GetDistance(unit) <= SkillE.range and SkillE.ready then if Settings.misc.prediction == 1 then local CastPosition, HitChance, Position = VP:GetLineCastPosition(unit, SkillE.delay, SkillE.width, SkillE.range, SkillE.speed, myHero, true) if HitChance >= 2 then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _E, toX = CastPosition.x, toY = CastPosition.z, fromX = CastPosition.x, fromY = CastPosition.z }):send() end CastSpell(_E, CastPosition.x, CastPosition.z) end elseif Settings.misc.prediction == 2 and VIP_USER then local pos, info = Prodiction.GetPrediction(unit, SkillE.range, SkillE.speed, SkillE.delay, SkillE.width) if pos ~= nil and not info.mCollision() then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _E, toX = pos.x, toY = pos.z, fromX = pos.x, fromY = pos.z }):send() end CastSpell(_E, pos.x, pos.z) end end end end function CastW(unit) if unit ~= nil and SkillW.ready and GetDistance(unit) <= SkillW.range then if VIP_USER and Settings.misc.packets then Packet("S_CAST", {spellId = _W}):send() end CastSpell(_W) end end function CastR(unit) if unit ~= nil then if SkillR.ready and GetDistance(unit) <= SkillQ.range and Settings.combo.useR == 1 then local Mouse = Vector(myHero) + 400 * (Vector(mousePos) - Vector(myHero)):normalized() if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _R, toX = Mouse.x, toY = Mouse.z, fromX = Mouse.x, fromY = Mouse.z }):send() end CastSpell(_R, Mouse.x, Mouse.z) elseif SkillR.ready and GetDistance(unit) <= SkillQ.range and Settings.combo.useR == 2 then if VIP_USER and Settings.misc.packets then Packet("S_CAST", { spellId = _R, toX = unit.x, toY = unit.z, fromX = unit.x, fromY = unit.z }):send() end CastSpell(_R, unit.x, unit.z) elseif Settings.combo.useR == 3 then return end end end function KillSteal() for _, enemy in ipairs(GetEnemyHeroes()) do if ValidTarget(enemy) and enemy.visible then local qDmg = getDmg("Q", enemy, myHero) local eDmg = getDmg("E", enemy, myHero) if enemy.health <= qDmg then CastQ(enemy) elseif enemy.health <= (qDmg + eDmg) then CastE(enemy) CastQ(enemy) elseif enemy.health <= eDmg then CastE(enemy) end if Settings.ks.autoIgnite then AutoIgnite(enemy) end end end end function Calculation() for _, enemy in ipairs(GetEnemyHeroes()) do if ValidTarget(enemy) and enemy.visible then local qDmg = getDmg("Q", enemy, myHero) local wDmg = getDmg("W", enemy, myHero) local eDmg = getDmg("E", enemy, myHero) local iDmg = getDmg("IGNITE", enemy, myHero) if enemy.health <= qDmg then DrawText3D(tostring("Killable: Q"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) elseif enemy.health <= qDmg + wDmg then DrawText3D(tostring("Killable: Q > W"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) elseif enemy.health <= eDmg then DrawText3D(tostring("Killable: E"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) elseif enemy.health <= (qDmg + eDmg) then DrawText3D(tostring("Killable: E > Q"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) elseif enemy.health <= (wDmg + eDmg) then DrawText3D(tostring("Killable: E > W"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) elseif enemy.health <= (qDmg + eDmg + wDmg) then DrawText3D(tostring("Killable: E > Q > W"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) elseif enemy.health <= (qDmg + eDmg + wDmg + iDmg) then DrawText3D(tostring("Killable: E > Q > W > IGNITE"), enemy.x, enemy.y, enemy.z, 16, ARGB(255, 10, 255, 10), true) end end end end function AutoIgnite(unit) if ValidTarget(unit, Ignite.range) and unit.health <= 50 + (20 * myHero.level) then if Ignite.ready then CastSpell(Ignite.slot, unit) end end end ------------------------------------------------------ -- Checks, menu & stuff ------------------------------------------------------ function Checks() SkillQ.ready = (myHero:CanUseSpell(_Q) == READY) SkillW.ready = (myHero:CanUseSpell(_W) == READY) SkillE.ready = (myHero:CanUseSpell(_E) == READY) SkillR.ready = (myHero:CanUseSpell(_R) == READY) if myHero:GetSpellData(SUMMONER_1).name:find(Ignite.name) then Ignite.slot = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find(Ignite.name) then Ignite.slot = SUMMONER_2 end Ignite.ready = (Ignite.slot ~= nil and myHero:CanUseSpell(Ignite.slot) == READY) TargetSelector:update() Target = GetCustomTarget() SOWi:ForceTarget(Target) if VIP_USER and Settings.misc.skinList then ChooseSkin() end if Settings.drawing.lfc.lfc then _G.DrawCircle = DrawCircle2 else _G.DrawCircle = _G.oldDrawCircle end Gameover() end function IsMyManaLow() if myHero.mana < (myHero.maxMana * ( Settings.harass.harassMana / 100)) then return true else return false end end function Menu() Settings = scriptConfig("Ahri - the Nine-Tailed Fox "..version.."", "DraconisAhri") Settings:addSubMenu("["..myHero.charName.."] - Combo Settings", "combo") Settings.combo:addParam("comboKey", "Combo Key", SCRIPT_PARAM_ONKEYDOWN, false, 32) Settings.combo:addParam("useR", "Use "..SkillR.name.." (R) in Combo", SCRIPT_PARAM_LIST, 1, { "To mouse", "Toward enemy", "Don't use"}) Settings.combo:addParam("comboItems", "Use Items in Combo", SCRIPT_PARAM_ONOFF, true) Settings.combo:addParam("useAA", "Use AAs in Combo", SCRIPT_PARAM_ONOFF, true) Settings.combo:permaShow("comboKey") Settings:addSubMenu("["..myHero.charName.."] - Harass Settings", "harass") Settings.harass:addParam("harassKey", "Harass Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("C")) Settings.harass:addParam("useQ", "Use "..SkillQ.name.." (Q) in Harass", SCRIPT_PARAM_ONOFF, true) Settings.harass:addParam("useE", "Use "..SkillE.name.." (E) in Harass", SCRIPT_PARAM_ONOFF, true) Settings.harass:addParam("harassMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0) Settings.harass:permaShow("harassKey") Settings:addSubMenu("["..myHero.charName.."] - Lane Clear Settings", "lane") Settings.lane:addParam("laneKey", "Lane Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("V")) Settings.lane:addParam("laneQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true) Settings.lane:addParam("laneW", "Clear with "..SkillW.name.." (W)", SCRIPT_PARAM_ONOFF, true) Settings.lane:permaShow("laneKey") Settings:addSubMenu("["..myHero.charName.."] - Jungle Clear Settings", "jungle") Settings.jungle:addParam("jungleKey", "Jungle Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("V")) Settings.jungle:addParam("jungleQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true) Settings.jungle:addParam("jungleW", "Clear with "..SkillW.name.." (W)", SCRIPT_PARAM_ONOFF, true) Settings.jungle:permaShow("jungleKey") Settings:addSubMenu("["..myHero.charName.."] - KillSteal Settings", "ks") Settings.ks:addParam("killSteal", "Use Smart Kill Steal", SCRIPT_PARAM_ONOFF, true) Settings.ks:addParam("autoIgnite", "Auto Ignite", SCRIPT_PARAM_ONOFF, true) Settings.ks:permaShow("killSteal") Settings:addSubMenu("["..myHero.charName.."] - Draw Settings", "drawing") Settings.drawing:addParam("mDraw", "Disable All Range Draws", SCRIPT_PARAM_ONOFF, false) Settings.drawing:addParam("Target", "Draw Circle on Target", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("Text", "Draw Text on Target", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("myHero", "Draw My Range", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("myColor", "Draw My Range Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255}) Settings.drawing:addParam("qDraw", "Draw "..SkillQ.name.." (Q) Range", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("qColor", "Draw "..SkillQ.name.." (Q) Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255}) Settings.drawing:addParam("wDraw", "Draw "..SkillW.name.." (W) Range", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("wColor", "Draw "..SkillW.name.." (W) Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255}) Settings.drawing:addParam("eDraw", "Draw "..SkillE.name.." (E) Range", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("eColor", "Draw "..SkillE.name.." (E) Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255}) Settings.drawing:addParam("rDraw", "Draw "..SkillR.name.." (R) Range", SCRIPT_PARAM_ONOFF, true) Settings.drawing:addParam("rColor", "Draw "..SkillR.name.." (R) Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255}) Settings.drawing:addSubMenu("Lag Free Circles", "lfc") Settings.drawing.lfc:addParam("lfc", "Lag Free Circles", SCRIPT_PARAM_ONOFF, false) Settings.drawing.lfc:addParam("CL", "Quality", 4, 75, 75, 2000, 0) Settings.drawing.lfc:addParam("Width", "Width", 4, 1, 1, 10, 0) Settings:addSubMenu("["..myHero.charName.."] - Misc Settings", "misc") Settings.misc:addParam("packets", "Cast spells using Packets", SCRIPT_PARAM_ONOFF, true) Settings.misc:addParam("prediction", "Choose your prediction", SCRIPT_PARAM_LIST, 1, { "VPrediction", "Prodiction" }) Settings.misc:addParam("skinList", "Choose your skin", SCRIPT_PARAM_LIST, 5, { "Dynasty Ahri", "Midnight Ahri", "Foxfire Ahri", "Popstar Ahri", "Classic" }) Settings:addSubMenu("["..myHero.charName.."] - Orbwalking Settings", "Orbwalking") SOWi:LoadToMenu(Settings.Orbwalking) TargetSelector = TargetSelector(TARGET_LESS_CAST, SkillE.range, DAMAGE_MAGIC, true) TargetSelector.name = "Ahri" Settings:addTS(TargetSelector) end function Variables() SkillQ = { name = "Orb of Deception", range = 840, delay = 0.25, speed = 1600, width = 90, ready = false } SkillW = { name = "Fox-Fire", range = 800, delay = nil, speed = nil, width = nil, ready = false } SkillE = { name = "Charm", range = 975, delay = 0.25, speed = 1500, width = 100, ready = false } SkillR = { name = "Spirit Rush", range = 550, delay = nil, speed = nil, width = nil, ready = false } Ignite = { name = "SummonerDot", range = 600, slot = nil } enemyMinions = minionManager(MINION_ENEMY, SkillE.range, myHero, MINION_SORT_HEALTH_ASC) VP = VPrediction() SOWi = SOW(VP) JungleMobs = {} JungleFocusMobs = {} lastSkin = 0 if GetGame().map.shortName == "twistedTreeline" then TwistedTreeline = true else TwistedTreeline = false end _G.oldDrawCircle = rawget(_G, 'DrawCircle') _G.DrawCircle = DrawCircle2 priorityTable = { AP = { "Annie", "Ahri", "Akali", "Anivia", "Annie", "Brand", "Cassiopeia", "Diana", "Evelynn", "FiddleSticks", "Fizz", "Gragas", "Heimerdinger", "Karthus", "Kassadin", "Katarina", "Kayle", "Kennen", "Leblanc", "Lissandra", "Lux", "Malzahar", "Mordekaiser", "Morgana", "Nidalee", "Orianna", "Ryze", "Sion", "Swain", "Syndra", "Teemo", "TwistedFate", "Veigar", "Viktor", "Vladimir", "Xerath", "Ziggs", "Zyra", "Velkoz" }, Support = { "Alistar", "Blitzcrank", "Janna", "Karma", "Leona", "Lulu", "Nami", "Nunu", "Sona", "Soraka", "Taric", "Thresh", "Zilean", "Braum" }, Tank = { "Amumu", "Chogath", "DrMundo", "Galio", "Hecarim", "Malphite", "Maokai", "Nasus", "Rammus", "Sejuani", "Nautilus", "Shen", "Singed", "Skarner", "Volibear", "Warwick", "Yorick", "Zac" }, AD_Carry = { "Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "Jinx", "KogMaw", "Lucian", "MasterYi", "MissFortune", "Pantheon", "Quinn", "Shaco", "Sivir", "Talon","Tryndamere", "Tristana", "Twitch", "Urgot", "Varus", "Vayne", "Yasuo", "Zed" }, Bruiser = { "Aatrox", "Darius", "Elise", "Fiora", "Gangplank", "Garen", "Irelia", "JarvanIV", "Jax", "Khazix", "LeeSin", "Nocturne", "Olaf", "Poppy", "Renekton", "Rengar", "Riven", "Rumble", "Shyvana", "Trundle", "Udyr", "Vi", "MonkeyKing", "XinZhao" } } Items = { BRK = { id = 3153, range = 450, reqTarget = true, slot = nil }, BWC = { id = 3144, range = 400, reqTarget = true, slot = nil }, DFG = { id = 3128, range = 750, reqTarget = true, slot = nil }, HGB = { id = 3146, range = 400, reqTarget = true, slot = nil }, RSH = { id = 3074, range = 350, reqTarget = false, slot = nil }, STD = { id = 3131, range = 350, reqTarget = false, slot = nil }, TMT = { id = 3077, range = 350, reqTarget = false, slot = nil }, YGB = { id = 3142, range = 350, reqTarget = false, slot = nil }, BFT = { id = 3188, range = 750, reqTarget = true, slot = nil }, RND = { id = 3143, range = 275, reqTarget = false, slot = nil } } if not TwistedTreeline then JungleMobNames = { ["Wolf8.1.2"] = true, ["Wolf8.1.3"] = true, ["YoungLizard7.1.2"] = true, ["YoungLizard7.1.3"] = true, ["LesserWraith9.1.3"] = true, ["LesserWraith9.1.2"] = true, ["LesserWraith9.1.4"] = true, ["YoungLizard10.1.2"] = true, ["YoungLizard10.1.3"] = true, ["SmallGolem11.1.1"] = true, ["Wolf2.1.2"] = true, ["Wolf2.1.3"] = true, ["YoungLizard1.1.2"] = true, ["YoungLizard1.1.3"] = true, ["LesserWraith3.1.3"] = true, ["LesserWraith3.1.2"] = true, ["LesserWraith3.1.4"] = true, ["YoungLizard4.1.2"] = true, ["YoungLizard4.1.3"] = true, ["SmallGolem5.1.1"] = true } FocusJungleNames = { ["Dragon6.1.1"] = true, ["Worm12.1.1"] = true, ["GiantWolf8.1.1"] = true, ["AncientGolem7.1.1"] = true, ["Wraith9.1.1"] = true, ["LizardElder10.1.1"] = true, ["Golem11.1.2"] = true, ["GiantWolf2.1.1"] = true, ["AncientGolem1.1.1"] = true, ["Wraith3.1.1"] = true, ["LizardElder4.1.1"] = true, ["Golem5.1.2"] = true, ["GreatWraith13.1.1"] = true, ["GreatWraith14.1.1"] = true } else FocusJungleNames = { ["TT_NWraith1.1.1"] = true, ["TT_NGolem2.1.1"] = true, ["TT_NWolf3.1.1"] = true, ["TT_NWraith4.1.1"] = true, ["TT_NGolem5.1.1"] = true, ["TT_NWolf6.1.1"] = true, ["TT_Spiderboss8.1.1"] = true } JungleMobNames = { ["TT_NWraith21.1.2"] = true, ["TT_NWraith21.1.3"] = true, ["TT_NGolem22.1.2"] = true, ["TT_NWolf23.1.2"] = true, ["TT_NWolf23.1.3"] = true, ["TT_NWraith24.1.2"] = true, ["TT_NWraith24.1.3"] = true, ["TT_NGolem25.1.1"] = true, ["TT_NWolf26.1.2"] = true, ["TT_NWolf26.1.3"] = true } end for i = 0, objManager.maxObjects do local object = objManager:getObject(i) if object and object.valid and not object.dead then if FocusJungleNames[object.name] then JungleFocusMobs[#JungleFocusMobs+1] = object elseif JungleMobNames[object.name] then JungleMobs[#JungleMobs+1] = object end end end end function SetPriority(table, hero, priority) for i=1, #table, 1 do if hero.charName:find(table[i]) ~= nil then TS_SetHeroPriority(priority, hero.charName) end end end function arrangePrioritys() for i, enemy in ipairs(GetEnemyHeroes()) do SetPriority(priorityTable.AD_Carry, enemy, 1) SetPriority(priorityTable.AP, enemy, 2) SetPriority(priorityTable.Support, enemy, 3) SetPriority(priorityTable.Bruiser, enemy, 4) SetPriority(priorityTable.Tank, enemy, 5) end end function arrangePrioritysTT() for i, enemy in ipairs(GetEnemyHeroes()) do SetPriority(priorityTable.AD_Carry, enemy, 1) SetPriority(priorityTable.AP, enemy, 1) SetPriority(priorityTable.Support, enemy, 2) SetPriority(priorityTable.Bruiser, enemy, 2) SetPriority(priorityTable.Tank, enemy, 3) end end function UseItems(unit) if unit ~= nil then for _, item in pairs(Items) do item.slot = GetInventorySlotItem(item.id) if item.slot ~= nil then if item.reqTarget and GetDistance(unit) < item.range then CastSpell(item.slot, unit) elseif not item.reqTarget then if (GetDistance(unit) - getHitBoxRadius(myHero) - getHitBoxRadius(unit)) < 50 then CastSpell(item.slot) end end end end end end function getHitBoxRadius(target) return GetDistance(target.minBBox, target.maxBBox)/2 end function PriorityOnLoad() if heroManager.iCount < 10 or (TwistedTreeline and heroManager.iCount < 6) then print("<b><font color=\"#6699FF\">Ahri - the Nine-Tailed Fox:</font></b> <font color=\"#FFFFFF\">Too few champions to arrange priority.</font>") elseif heroManager.iCount == 6 then arrangePrioritysTT() else arrangePrioritys() end end function GetJungleMob() for _, Mob in pairs(JungleFocusMobs) do if ValidTarget(Mob, SkillQ.range) then return Mob end end for _, Mob in pairs(JungleMobs) do if ValidTarget(Mob, SkillQ.range) then return Mob end end end function OnCreateObj(obj) if obj.valid then if FocusJungleNames[obj.name] then JungleFocusMobs[#JungleFocusMobs+1] = obj elseif JungleMobNames[obj.name] then JungleMobs[#JungleMobs+1] = obj end end end function OnDeleteObj(obj) for i, Mob in pairs(JungleMobs) do if obj.name == Mob.name then table.remove(JungleMobs, i) end end for i, Mob in pairs(JungleFocusMobs) do if obj.name == Mob.name then table.remove(JungleFocusMobs, i) end end end function TrueRange() return myHero.range + GetDistance(myHero, myHero.minBBox) end -- Trees function GetCustomTarget() TargetSelector:update() if _G.MMA_Target and _G.MMA_Target.type == myHero.type then return _G.MMA_Target end if _G.AutoCarry and _G.AutoCarry.Crosshair and _G.AutoCarry.Attack_Crosshair and _G.AutoCarry.Attack_Crosshair.target and _G.AutoCarry.Attack_Crosshair.target.type == myHero.type then return _G.AutoCarry.Attack_Crosshair.target end return TargetSelector.target end -- shalzuth function GenModelPacket(champ, skinId) p = CLoLPacket(0x97) p:EncodeF(myHero.networkID) p.pos = 1 t1 = p:Decode1() t2 = p:Decode1() t3 = p:Decode1() t4 = p:Decode1() p:Encode1(t1) p:Encode1(t2) p:Encode1(t3) p:Encode1(bit32.band(t4,0xB)) p:Encode1(1)--hardcode 1 bitfield p:Encode4(skinId) for i = 1, #champ do p:Encode1(string.byte(champ:sub(i,i))) end for i = #champ + 1, 64 do p:Encode1(0) end p:Hide() RecvPacket(p) end function ChooseSkin() if Settings.misc.skinList ~= lastSkin then lastSkin = Settings.misc.skinList GenModelPacket("Ahri", Settings.misc.skinList) end end function GetBestLineFarmPosition(range, width, objects) local BestPos local BestHit = 0 for i, object in ipairs(objects) do local EndPos = Vector(myHero.visionPos) + range * (Vector(object) - Vector(myHero.visionPos)):normalized() local hit = CountObjectsOnLineSegment(myHero.visionPos, EndPos, width, objects) if hit > BestHit then BestHit = hit BestPos = Vector(object) if BestHit == #objects then break end end end return BestPos, BestHit end function CountObjectsOnLineSegment(StartPos, EndPos, width, objects) local n = 0 for i, object in ipairs(objects) do local pointSegment, pointLine, isOnSegment = VectorPointProjectionOnLineSegment(StartPos, EndPos, object) if isOnSegment and GetDistanceSqr(pointSegment, object) < width * width then n = n + 1 end end return n end -- Barasia, vadash, viseversa function DrawCircleNextLvl(x, y, z, radius, width, color, chordlength) radius = radius or 300 quality = math.max(8,round(180/math.deg((math.asin((chordlength/(2*radius))))))) quality = 2 * math.pi / quality radius = radius*.92 local points = {} for theta = 0, 2 * math.pi + quality, quality do local c = WorldToScreen(D3DXVECTOR3(x + radius * math.cos(theta), y, z - radius * math.sin(theta))) points[#points + 1] = D3DXVECTOR2(c.x, c.y) end DrawLines2(points, width or 1, color or 4294967295) end function round(num) if num >= 0 then return math.floor(num+.5) else return math.ceil(num-.5) end end function DrawCircle2(x, y, z, radius, color) local vPos1 = Vector(x, y, z) local vPos2 = Vector(cameraPos.x, cameraPos.y, cameraPos.z) local tPos = vPos1 - (vPos1 - vPos2):normalized() * radius local sPos = WorldToScreen(D3DXVECTOR3(tPos.x, tPos.y, tPos.z)) if OnScreen({ x = sPos.x, y = sPos.y }, { x = sPos.x, y = sPos.y }) then DrawCircleNextLvl(x, y, z, radius, Settings.drawing.lfc.Width, color, Settings.drawing.lfc.CL) end end function Gameover() if GetGame().isOver then UpdateWeb(false, ScriptName, id, HWID) startUp = false; end end
juliusmarminge
No description available
flowergardn
A bot boilerplate using DiscordX, Prisma, and T3 Env
Nsttt
No description available
buiducnhat
Turborepo with Elysia, Tanstack Router, T3 env, Drizzle, Better Auth, Ruler
mirashif
Created with React Router v7, ShadcnUI, TailwindCSS, tRPC, Better Auth, Drizzle, T3 Env
GlitchTech-Developments
A WIP SolidStart.js boilerplate with all the useful tools you could want to use.
soorya-u
A Webpage built using T3 Stack to Display Top Achievers
andersonkaiti
Site para a Rede Internacional de Pesquisadores sobre Povos Originários e Comunidades Tradicionais - RedeCT.
cssorlandi
A robust and non-opinionated template for building modern web applications with Next.js and TypeScript. Includes pre-configured tools like ESLint, Prettier, Husky, Commitlint, and more, ensuring a seamless development experience. Ideal for developers who want a head start on their next project.
kimizuka
check t3-env.
Onnokh
Skill for t3.env and zod
creatorem
A web client for the t3-env package
Kyle-Hansen
A working repository for use by Trace3