From c632001cfe5e692b62daa9791ce91d9c720442fd Mon Sep 17 00:00:00 2001 From: Ahmad Fatoum Date: Sat, 13 Jun 2015 06:05:26 +0200 Subject: [PATCH] Added Windows bluetooth support bug: CloseHandle doesn't close serial port immidiately --- .ev3duder | 2 +- Makefile | 1 + cat.c | 9 +++++++++ cat.sh | 21 +++++++++++++++++++++ ev3duder.zip | Bin 0 -> 73252 bytes src/btserial.h | 8 +++++++- src/btunix.c | 14 +++++++++----- src/btwin.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/cat.c | 25 +++++++++++++++++++++++++ src/ev3_io.h | 2 +- src/funcs.h | 11 +++++++++++ src/ls.c | 3 ++- src/utf8.h | 2 ++ test.c | 20 ++++++++++++++++++++ 14 files changed, 154 insertions(+), 9 deletions(-) create mode 100644 cat.c create mode 100644 cat.sh create mode 100644 ev3duder.zip create mode 100644 src/btwin.c create mode 100644 src/cat.c create mode 100644 test.c diff --git a/.ev3duder b/.ev3duder index a96aa0e..4202bc4 100644 --- a/.ev3duder +++ b/.ev3duder @@ -1 +1 @@ -.. \ No newline at end of file +COM3 \ No newline at end of file diff --git a/Makefile b/Makefile index 7ff508b..32b59a7 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,7 @@ print-% : ; @echo $* = $($*) ifeq ($(OS),Windows_NT) RM = del /Q FLAGS += -municode +SRCS += src/btwin.c BIN_NAME := $(addsuffix .exe, $(BIN_NAME)) else SRCS += src/btunix.c diff --git a/cat.c b/cat.c new file mode 100644 index 0000000..c489f8e --- /dev/null +++ b/cat.c @@ -0,0 +1,9 @@ +/** @file cat.sh + * @brief cat(1) wrapper for cat'ing to the ev3 LCD + * @author Ahmad Fatoum + */ + +int main(void) +{ + +} \ No newline at end of file diff --git a/cat.sh b/cat.sh new file mode 100644 index 0000000..cc68847 --- /dev/null +++ b/cat.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +## @file cat.sh +## cat(1) wrapper for cat'ing to the ev3 LCD +## calls cat on input, builds a bytecode executable +## and pipes it to the VM via netcat +## @author Ahmad Fatoum + +#consts +LINE_WIDTH = 20 + + +CAT = "$(cat $@)" + +IFS = '\n' read -ra LINE <<< "$IN" +for i in "${LINE[@]}"; do + # loop for each < LINE_WIDTH + # generate bytecode + +done + diff --git a/ev3duder.zip b/ev3duder.zip new file mode 100644 index 0000000000000000000000000000000000000000..a86538e21d0314ef84235e27d2803e1becec01a0 GIT binary patch literal 73252 zcmV);K!(3iO9KQH0000805op3Mx@Kz7K=Lo0M^3*01W^D0BmVuXlZ0&aA_`NY;5d( z4R~9{vFIL4wv||kl*A@Va6k!4Fp$KOegDt!AQGQx- z8>1Kys<>_oExql##n4A->HQko-XuVJYjB7IO=$|WgeIkF39Ve4)_`9~6N>K4?vZq4 zJ1PCj?R&4~!0PPI&dkov&d$#6IX=_+dQl1%$cnddDwYE zY}{PPafED#G6-^(WGv0%(lq2o0M|guAVi%FcXeDabr;R2F}XQWetM}nT6opOVKrP@ zMu$IY5e0vG2+^dmPJBJ{@_i%+2+5XRzFPhe@RFjP5$L4@2U(GbUs{A6BH{;Kc$nWNU3_t;29TjQ!d=Jg{jaa8QSxI$i%u0skP`uI}m| zQr(vW)xjudI2|q?>H{VSA5%qk5@;(5tYSY8j?14y9-&hcswZ+*wjo{M*MoY<1TUni z_P;?0B43MwbzcvTiKFeSx8CY{R!KtVBS)^M5?$nIP2gPHAkIU>`Eav5T!xK~Erj+; zPO0`QIg)7iRcJRf0ZlFun|$4HT5Ob4?OzI*v;=+F|282cS+$Tum8kar2%!&dKolVt z`kgmo(aCYpLQb6m%Gyx2E_O0Ft_-GQr#TRr3drOhFbs{FVzF34{z23+s=RO!@E-~t z6DkLFB1pRk$0IlXGz4zZlgkNVgs7L%V;@NR+q5b4}5HuP(7Q7@A>iSO$){%6i1EFKVqq(68=+`HPsr=EWfj&|l zLl&WJIysQT@a;Mhb^IA{$CWVR6^8R;KOBgBe+6Zq#EVYo#Ac+xtK)QZWmH)v#)8u7 zBa8+|E^uA&5*K)Qs_?&fpE4M=Qhg&zPt?04*-1{sYe{la_2;6EOkq^X5T=6H%nWW7 zn|=O+B&Rg7?!D{8j*dPKwUL8J6Q57xxg+Vd+nMp;v<_b6gvDW-E-!4+X`^KyP>q8T z#r5aZDWivSDXwzt)q%m>3ObP0O`$iLYaw$QJ zN=4{dF!5PHf;?g`J^${ocL3PH$R;n!md?2%<{+qTdZ9xhelpBYju12o%v4a#Le4u< zp`e+O3MC<8PMyeQCvuuZE?3M2hqTa?0#OpWg^3wkM$42N))PrR_88~&cIXrO0d?qE zU=*_J;rIDrrj;-(6>`SxhR2W8Oo=?>=ww1jLn1hP}I<~ zAdNwvrnLTz+zFF$kUAb z$WEcimr{IX8ifWaG$|B+CK8Irr%~i0MQ#ekkE9gOOry{ug*Jua%TkJ0r%~vTLdPgF zDaF`r3G_cqL(fC>ycG1(1p1|E=qnL@B}1Rf(3R|#P91RE(t~@IM98EdRx<=PD*|N< zNF6IbF=Z-Lz+EjP$q5{$Q$vB16vvHDs=>DSWC-!&VSZd}RiQeVUIeo39}46~wXiVs z5A9J#bAX8`=`mW(NhQ^Yb}r1P8DzdYJ`Z4#6g@2?BuT=)aZNhN)&z1Xy`cxPFTvsw z>Q}>UgrB6{;V0Pb+uv=vrp`OUALxD?e!u&ZdB^zg-*b%r&mSG*50Yd2At)b)^d#h; zg7mb0gg?h9&!W&H{5Y1PSI1~~W>XPHpH63IW!jc)gjDgYTWo(2NKo~3Xf!-Q&F#-+T{^44h^%q+bmV#D-L-ItB18uB> zs3gRn3GO`;6SBtU2KgvAdLCkm(G@6Ce;a5ITL|Z%!;jE1YvBwA3NOJF^ag)`lYt1? zszd!dFs3T)M}VsT4OmB@R-LH5jn%4Y?Q?0^z;@B*P$r!ufLMMtj`SdrN!YKU4o0)1hh6WQlUlJnN~ym@!;O$L}(84 z$5FGN#<-b38s?7%hd8OqZ^nve(aWi!GGgbjdu+GTbX=4!$}gslFpMbN$z$L@XJLbc zwwI$|?pi_Q5^Iq3UkUy9j`VM#%B70XB+P11PtAf!U{{25lph&0bvQ@;kud{@JWe=bnL3K>v18z>C!RTJSl zQAVmCD%|%LQZJRwdcsePElT86@oqBlzD{TJTof4S7SL#59NUG`FF%OIlI!}85&ki{ z2wrtTx(IH8DHILAi}Fq;7bB{$UGK$WEU;J8=7Sev0S)3Th4B}))iDWvErY`egaHl3 zLzD`XB;h#T-M9B$641n>A(3_!(!PN0&C$kbBTbJ5x?LnX&5WNroSlsoDSzr*qi(3Ggz%Z5vREJK|J&kf2DjfkO z9j6>-$CGHsFw$zViHq;VV$%4icIpNz!ks!`)*xj)kk~(p ztgoKJY<7~_0CcyMR|;8Tx7TOWsETUX5gacP!woTV6nCHeIL&Ba3)cTl28Jy#CnDID z;$~B_Q$*Hs#u_C&EZLSunze{uOR4O+Y&W}2r;dCg3O8lQrc=Z__Wh|k%TLkS(!@@< zS;Al3oR9tnk0|zLlifFl`D`}ORF+fm4TQ*45U23ZSa%||+9~Re(x}TeUDwIRC?5eF z1~~XGrVZ6W0+Hg4Qy?`;6T%12(fI(Z5mD z)AL!&fyJnHV{*I~Pr$^XrX#~y_KEjXP7~xHWTteZ#G=yFIYIeE{~TW*_9}_${vp-D zlXSZ-r(~aquN-r->C9GylV-1!coC)Q;85JrQc1)1grq%xlt`++{5;2XEc(59%-~>5 z&H(@1NYez|G_28V)~K45l&nPU@$+03HIhzo=n`H(FU6XuXttyhfA)vCXq%=O!~~mv zXJ(jxl3w;CS>2mpg#iHsUDS9c;-eDWs~~~2u_ZH_Gt$5PmSmltqomqaN3xkRK7_)z zBo!WeD;Aq!lMHOte>K}clI>%cWvlqB*{(~n-7phda8tVQl3dC+JE8=mQ!>^z81_1~ z#DTKzHykqk~7mQ4PI!3eQbhy$-xX zPVjcY?pAg=zi#o-=@=n*1rl9Iyh8;-ZHvx4yD(I zwlR-P>97*o@0^3rq2On1PD=Ytn>IQ^$AaUw@G3hV?|{z&Th;WxrMmCec)I7rEu&p- z7!rpqJiFvY|J?8vx$G82$&0Exx1q@malvPmCDFid@TtzlS@c2Bh-&``Zoap5k?<8D5~6e<3M`{GU8EBSiY~~}#Y!|B z8+|0>rS==?)X`&f41B{&PJ&3GPMuP;I$eB9&&2D+taytR!sFQNqjY>2wE}rh z{(J}3!_+XkoJLAOBU>UWDmN}wf(ynfINMIrClYE=UHxysb|IF73k#TxvQgbdrF#fg zQo~!L>!FgWo+=vUTCV`KQyWCIJ%APxU{vI~!vKqRurgi7a?v6gZgc~{2L^5Iv@mm+ zO*?R0^bxCVBpqw$VMU$-`X#T3$osFsK|4DUJwFSdxY@BSSmRW8 zt-_z+g-q3bU!gNKOLd(ew>?3{n`y|E_p{5hz zrlZkL;KIoKuMDC>45#~tK9fE64bdKg!(8bSgztSIQnZy#&$a)FHQa@;y8k8N^>E!$ z=>&k#idw`g)FS9S_#KU2j-$_D<1RnI!mLv)%sL@8p|J?lTVelsRsT)6f4@cE|GaAd z_wdvU4_#G)l_#3>!t-#gzFIDE8#iVLGDlC zN@m%Wu!g1>H=Z_N24F=nn97FLvNOIO3^t4N>0S1GcqF}9oJM2!$NhJ3eC1$vg}N(#pc_BnEvx@+#nXc7 zy_1h7GdjtEaw2j z2V4!LT*H{*SB4MzKA??gLKE+u3>BjkDUA&rKCtMAmj7x1oUyYgzxez!eP64(YnGf0 zg?V|TNj{Rkzm@e$eEb;7vABVi8Gk<8N@Jr(R=V*46flQCbx=d^ld+s5Oe&zezY!nQ zo?zuz&K+#glw&JY{-f+EZL}kUkd*ZgpBY2^(uU+cxZo@yZA>+*j$^S59Vd)r9t=xZ zCN4$t(6QL7F!aj)^MWE=O&6Mz;jN1P(}B|oZeM4@KpetUzmp8g*=rkd|A_X2QYs~f zxy|Wx1sxWuaJ3Mbg=EyhSIe1zE~tVnRtHz+oLkTuxmjM zmH0|be7#9kM2^@B_?3m>w31VS*<+GBp5E6Ke&Je0=w=#~`Q?O6 zMIQTU=w!H25u)vky$1Rb<2?++YW)i#4xKw7McOvz`2ohx%kFNqKzG5 z8^=X-VF5!zE(ul%?1x0`)6r2_$Hu-O${#(Ar7tDyMOLx4&x|kq3F#2ZK?L5nTa(4n zZRik=FUD`)K6Bj`v3~5u)OdHJ179@2IVWpet2*S*P#vnu?mr)~q-lh!4bKmR?aGp0 z?8=nc6(ukGmBDAY;80%4+kq(P^j74L_G&nfTDk**hqbzBwG7uo#jY%GUm1EqXgN#r zPRU_}MQdniE&Oh9EiO6(bY(lVFPq+O%ZO}CgMcqEcWlHv5In{Ohx1DQAgsVe1Y`Qp z9S}w3>Y{68^x*P!Wd6Fy9`KLm8qRMGO<;-oKf`H!$dQl*>`Os60-_q2JO@9Z^1Kno zhcYcxH12@(QrON-~cr%g*hne zl=h8`{!ONjdnEdZI5~~#kTs+Kd0_@PqpZ^>@F(mxRQ& zqty)MSl=*};unFev8Qmp{sB~y9ljZ2f&!u;E zxDtKfG<^^4p=@>wXs z|L|95M@xI_ZL180tJ^v|iR~oEgruEYJKgAsyeqX;B~hO0spiryT7|F&?-ow4v$ddaU*g9 zYiil*YxC^(v`ypX>2dpeJ#7|zADu#L{2tFVupN+vYIjd>qCJq>>gx#zRROQp;|I9a zLiY>m;)9KJ3anRcTbO}t)z$l_VjuJZQWY> zF1{Pv#XtTKx?8(Dwa}qn1T1e`J)2yarlmvB_I7;A6UW89%|6(rt*@?Lqs?1i-*khv zXm!cz0+jJ%*xv{C@%7Jlo#|nJOEq6ic~I_wbQqEYqVoq95%Rk{Lbk#E)U|}P!H%FG z%KM=1RYA!X0C%ue$<@o2r8u}tvieP}>tV~^RB$g{OI<#?m`W=J7@`3 zs?dR~q!o~gAT>hT0?7yI4oD9|`WB?8Af4RLWH|%(-$S|pN!}0s z22wVpYar!8(nDGU$pWb!QZu9$NS%;&LfQxEUP$*t`gcf=K{^2GNI&C$4DP>$^Z}&Y zyFe~T&3ApQ2dN&aNwwS8>glw0!x}=W(f`)EeQgj!?-xUBey7JLRD#!+gxZzl6=Lyp zdIV23c%zP1cc(*)YtNFY5%nJl@5AlN6hyL}tLgT4xrI6iaNX^mO|V{ZxFfK2wD{fr zJ>)2d8-ak|56wfs+X`spx#=)#8+l#=b?!jt3P2)D1E|g2EAVvjAURmB>uw8liamrr znbT(4De!4*@6##<@q~ODA&xz;?do!Z+pg?IC18$x32U4kt+!Wq!ybT;u{0~J0)l>)8pwOcgmd}e^-YOhBU5T5|TSR zd!a)c-JJms`J()?Ovpib>RyD9C*{%|4a_9@CU=JbW9)#HtJBlaavP%kL7v>DnTX2; zD}T3-F6#FYm%FRCovrXBpQFnuwADolA>Z8s_RYC)AtZ)0mq@cn2701@XS_y+0RbVr z%quRCpOkfpb$eu8p03s&km(N0fuaccnhX~1)-H&29>rWIEZF3mnDZgVl;OwFM0YTMGIL z?kRY(Ag5?UQA^Q|qC1NEiykQ2T>P2h&lP{Y_$S4)jW-+Hjh)7w#!nmXF%B3XG(K$n zhVd!mv&I*UuNYr5jvFV9?;A5rS*B}DD@?0RW>cBTZfZ7dH{E9HHr;8u*YtVQS51Sa z@0*U8j+$OHy=?le=?|v!CSp!EYs^}6p1HtmGOsr`m^Yc-X0Lgt`CrU;nFq`dm=~59 zO6(=AC7mTg$!AJJCEhjPS~I*Rv(#1k`O;sP{<-v)wGXacRkoq*OJ&Q;Tgv_A-zooL z`TOPebx*Ft50BvcNOptQ@L9vdh7rRr4YGoqf{KFj!VQHjg8C#+QxfjEhY9Ao)F}r%b;x%`+R#JIwc)N6hIZHwdiszyI<+^d(cjRBzJXqIc_i^`FsyQU9p^yZRIQU+dq|D-0_Pr3Rb9 z38Q?w;XcC`42KQJ4X+tqH@smOGfWsR7`TG0f_Vjt3vMd7xxikqvA|W}DR{8p-wU27 zc(Y)#;7AIKQ~Kcx~~Qi=QZduK0!GH;dmcjumGZuQD2p>x{h7X8fY@5#x7^&w+hJjc*xm zGF6%yOiiXXQ?Kb^(|q${^D^^|FzRc}Rpy(`jpi-p7V~Xpzxh+ztxl9-rBl~J~zmx4-;GSTf2SUj`sYHLbEZybx-@Q4&Q1A`7jJy z0v(-g`9ix3xpWxKMp{YH3gg_#`uZkqr9)e=x}b<~``%HaWoA?Pv8I|m!qBej5&}L? zS-Z#Q@prUB(d}>DQPuED%Ki6eBG;h1$XQ1t9sZ@ z6!!Yu-=ZCMD_Gt7(WwOg+AodEXx-uVlQel|z}MT+?(?*1VVel$bb3q6?A?J68>d!w zcKg~{UcvH7fIJhQ$_aaVJea5ORBBF8&cr}^ zS;ua((S_rLr{^8G<&<+)?sHi%n9We*Y^vv7j_O+8(q!YMFneXA(^_eBHS+6S7T(U+ zTlo6w&4iOsIWCKpmWt)D+pJE+aS++`7HVvj>nQ_=v(jcG@+3xG!^UQkE-CYM4UL;! zbyi1RrL($LB*;i2)HFeB)pd4PWxd5!)mT{%NQDI?^U4^;BBHo5hNA(6bdXt7&?;?B z5;QV9S>4E2IvfqvE^EEh=PrlVD3jQ&k+iU^;e#on%i(2564d5-cu9Z9}6Iv|3;7v^La}t5RzlVY}W~?;r~$ z1JKaa=(@QH2FhlwvpR`J(so0Qb5ms_Du=J(!BVj6ReU{PW32{@Ba4!#wraa*MvGHM z#saFcSZg+ut5cO_t*^H5)g(6wg%Rf0^NlV`4Ny><6vcAFYbXBfzBG*X9bz_6o zf_jHeG`cD+mPT@|M0#7pCYKe)9e(Nx3veWe_A=FGvUDn2K!-N#EtGdP9q?t-hQ;A* zgba+rb&}a-byV7{>+5+7?SzPf29~fQ2hpXf!%a+2#)A+=Vj zt{N){kvD~@r0Ry$s+yWcp0|@5B?jK?beZ*qW|OPBp&mxE-svDWC95~`)y{@S>z26b zk(J51^ESb@Jxi&Rgoje(q)Y7S4XK-z_R=U7)j!LTP8=TMqd!@Cp5@*VDmx%_LyF507 zq#LNDWMsxpu=W4Aq)zM@>XAH8rW%&5L0qpK#N9*ra%E#Pfkqf4>Kw% z){n_lS1DQ?ICQLkaaw&%rOm-(Ttkh!s?JJ&BEeycK8}FJN*68Y5PF}J5}XZ^F8*{z zjWM;nByHPrbCbgLus7UXE|TsI_*z{(f}hB4d=z?~A^$e~W-7i2zdwL9Yb%E@ zu*`P3=pfsypi>vHob?}2nJ&XWWP&=2v~HeQcgFmY9?)|0h&p2)H=mO!u2w8pEJ&v? z4suxtQ7?p@g^pxpl|vB*R}OetS!=RN)42sOfO$lw$ejaXT?H9{W?2E6p(0r{lbJ)V zUxc4Q=Bx`4eb!Q9U62pa{p=!!o^D;RZc*AypHKey`a4}=y8my-QRgnroddrd$38^N zeMCn9ge1-Y=m|r58lEx89_F}Z%QoMlZ!g=tS)X6NY*`uyjlV#}Ir>qHvwC&@RH^<3 zc7z~@)jLqE0=u4}d ztK28^&Q%Om&XqqyKED1zuGLMHTR_D%KwV)M7G>F~Ow4)?U9Gg$??Z1J>r_?R}Ikes)( zzT=;m+2eh`j8^dzMh{KX52HePnndX(^3158ne`(V(~LO&BqP@MWn`uc^>g4#`nj#u zPg43G*O)V*G5i~oRxn`1f;pDUf3v`&SNF{wxvL}!R>(*$n9`DrIJGW;I>XJg@o}o zPYU@rxZN>d3i;n~dwqcvatLle$dN*xf!l=?$j{+6|0*fuk8o>Cfn-AW91Eq8`2g9M z0?7x+t0|E609mb(LOl4Fx+##o0QsF}>Kr_fn1fYdTo02g&q4Wzn1hDP&Ou#b4hr1m z=HSr};iFm-GtTS2eadUzJACdg1g+)RKOZ6^USS7pY6!8U#Ub&&Pio?Qr=&CXUH&2b zkNHaehyL3lx`I6MpEHqh+4wsXPEk^35mGFXS?qhy75e^vpUZ#*BB8k z{M3iA@VgT|^|^&!!R?pyG%oYmMSsmGEB+>#$3KM3k0)dnI(vHqJyVy$FUsOFUw(D? zCgA87$4AHIa_w$&xrr_w+lY`)k-P*1uOo0fusBXNT|X~hHo8#$Rb#52j#J&})HT~I zxmSq3M4W2Pe>Zpav2|YM{k3z`B(CG!ICg8g0B$hUKOYjKU9A1R1zBpO3WQ$pM4{-vNqh;>y?%1ABmTj>D^dD#*;Q|s=$V?Y8&$N z31r;QWc^%T8<%Ej7Qs5L0)y;ds=EyBA~P2(gsRcPPB{ux-O1Q)FSC9jm{L@rMj7WCM-Gb81&$ z_E8TjJ3mhUdoa|_@d{#9bJYy4D;BGoo$qaGLw%91z!#fqtbNO5%5j9!E3u>edJ(VS zD9MYJ-)qfQFy?pLV=j#6g6AFHxn7OAc-DH7%503;K0UbJ8X-rHQeM>)SdUDJcDj4&Vddyj$y(J^K$G*8SMfM(|rw zrh&`!fQ&wGqitxeI0f~(qxJIMR=t?NmbJfrRbR|sP1;}iqV{Rk_GtlsDW85``}Dg- zj^4>>lWT57^s5_x7sTw*&hf(ET>B-viw{t76{?>~8}5U0{C~=-yKm zdjiw$ftD)uH|zYXlGz`hE3{!CTuM}d7O_`MDM zehzeBtctxA*w;Y!*FpDKMC{$b9s}Lq1olo~KVKF5II#BsdnZ_a3D_@G#hwQCZeZUD z?3aN3QdR5&z`h;Wn}9uI*yUb*M{W7*@2g($`upvgpcYGdukO8Vdv&QrS5pPo-&eg7 zIYH{)Swi>UgI?V|6tcUKsLTy56DxYBWh_?y%z*ls93F!l-s1&x_!-FIgOI}yKn~x2pGN*q?5BZ!0NDG0 z{eRX+!+r|b`+yzpq1yB9h}h2p`w*}X0DE^tmR|t&1HhgD_Wy`T_eEeI2KGTbHm^YU zO7<!V@6eP57$8FtIBz<%{`EE@JDU_T4&r-A+1b~|xw{7b-o2G|#X{X-G4p9l5= zuxEh%hY?x+IXBTx-SBI2H4ZUz7&z}_kjHduwMuE7bDXBF0iiv`!!%c9})W%U_TG+i@^S= zi01o6U|#_CSzvF7i2V|@NWO^@!&CSzsRr_G7rpL}dA^z8b!VS3x-VAG z$JKJ=FXiJ*Z@s0EzoG~$q-~IwL1u*_>KIla|1M=}HF6hPv3I7d%5$FLnXCzt^wg6k zLZ*>^eM$FBM4173|Bt%Q^SxAN#bJMvB7?QMl`J-pa9aJz#^8A70C{nvc=p)z{0)kn zaggsptDjTkh9k3nljjZ9+DPXn(aPLm{uD)aN-qoKxlODphutc(DabWTk!z03XDKr5 zaD8KwcsAQ0tI*FcDbga(Eem8*o#%DyewcSMB;~a@-g%%d*bgsJ7q^iQ*NJDU4f_~x z)oRK7MV-*wAYZN%v%qkDjUtPV7T>A!0@3m#ioEW~{KDx+Xff}#I<3@&DZx%;d5JSl zv}~m^OHR*SPAm4=cfWYUgYn=|imW-U#woJuAg7?8MT)dJ7W)cCwmZn*L91mz{#hbs zJpXxr(93o8tQL&j^TYK)4?a~ z9T_4^c#J!~_y_3cUjTWdUR+r-?C;p@c?H*ln{9TIUpN~_d(}}TsgSh{> z)|$CVn9FHzyQ9|vZMCA;6!!TXMcQ@GgzP&!L=Fzcbc1zHw z3tP`q?#N*~}4H-WasdpmbvADQr z+aOO#XPJHuQ)H(jlZ=ZzZ;*M4Ty(h3$HiMh4DwZqv^vPkaeE~qs=$z=#j8{%>v-oj zMJ_vBzh+~$`e7@Ix}Qzi`M#||`+RV#J-fxso%do+Y&-$2p4lp{L2s0;SUE$HwLINw zkjk8OM)--X>JB$Gp64lY*UA7QHsX%V>8x#NuIHE8t) zN8%Pz-xypk-qmQd6i9nxFlX*=6n|MOHAPyS@%%AG+8u;6@>~Axh@!}w#y+Ctly||g z&zVLu+XV90a)d0KP1I}+y|VxHM)8Ec;rc8{)i&uj?752If|6JL#t0xjW#{rhXb7&G|FxTV`U)SAQSRv3tu%Hs_NRuXrc- z2mOcohZ2u|2zz}BT^tZ%ZPl9-dgXJ)ZS(W< zto^h5^lMA$x3N@;(i76ILpy;qhJQ7xCm=r5YOo~)l zCZ>8bDOFmT6sfIDN)}fpMT$6cT$)$B%tO37i3M6*AOK zOoSb3`K*RM$xctOYKeRo69A;PijoNPvO|vP++0VNy~?PQ?OJA!_{ztHai8jxqJNRB z&t6MPawn&l7l$jE{}T(7+LP z20@Ds(Jp|Lr*UphYc{pq&rIi3mD!MAd9BxAXZvS;Ha?c>_S+-q&mWqeViB1f&G`LOvLG&(FnzPsK_(`- zlQW{?EMd1d|CY;EV6BtOgItC9+@gQ)XOFt_VBm;Yc-SlJi5FOLcu0%0(H(iYrgexn z_3qidd)IDu_%boNtBd`cXLU=H*$I-QW977NCECPedl=W@j~yE7Ke(R^9@+n~zK@c_ z`v*R{Pp^7KYUmb|f_?|ao&!-+n%m}bVbY44)R=GR?Ca?9F*Xs$TPWlkyWmd8;zBkr4;^ z5J93vi5UjbBQg_9;F&@`O=kz8tx_gpS@CE2w=N!?=<4)Hu%NdI0eJ*qzVWio#H~2a z!=UKgBcpjIPKzfLnbHK8T{KW@va%@32a%dj)4-zJd+*M$DwA+2D^waDZ{)s?*DfVq+W zU+~pxq&nZ{tUWTQ_*<=I3_E5HsmU&)rS!Itdn~29VngP8an&t2K()}(XBO}ies0Ro z?CLTLcuTY>HPFcq~0PXD>6PoY8SSb zki48>Qj+j7dk)EsLLs0^%oCP3(#CqCKsib3eTJW$30gXdd+Yr7IJ9+ z@YYU_3T%)nTl(3Y&;j9YkXS_VOenZQGdtQ;?G~KPSd&mKK7fvS2wFQQMB@eo%zNt(*(V5HorQzh2mOKxk$d=RUKH6`5bhMES{349ghEi-h@V0-LLax8D0S&FRe z!s)u)q)Q%P<0tZk6J#EHkWtz7~D3;+NCWp*=Ub!267E@gOStXmIwQ&pC~X%iaS zV1hPS$1+4VmKMsNDmrxm4al2i6lS|h#1(N-p~5aItBC`CR>9XGZys+Z`W1(nWoOC2 z?pH@X>1YS4G8$+kEfkHVj#a7#E&5{OOq32H|FY-YdtVZgw5g8yzUJO{@44rk`#XQ` zpO-GU!%GSYA$s^rBnW9E?BgK$KkMM{qH(WWL|R84zM@Sx|L_$HSFC*4w)&w5?|bO( z`)&8${lEhcx@`9>w>{*3z_#)M+uVP?)pq}b%a%_WHLBRodDIDn%-5O8uGMRtWUG$! z8wm-MB3+5D;4*R+2=34kVj(16N@z(eI;I`g3z*(Iu0LbQ8tjob;#kG8m3(C1?xI$;sC&4~TN!`*Z%kFmF4Rw|9 zxfc*VNbt--vpT`|J=v=F)TpND1aJoCQ>894OiEP0y zKc~AZlg=?`>Q&d#`laRY6@vaBBCwfsmN`?W*UnjRL$^oCu zL3izsXuTG{ECo!z4O#P;GqrXat#^*bNdwWvP;Sh@?>eU6Hrl}X{U)1^e9O;?cBQof zE6QH<93sZbYy9==XCb!*cLWWa#M#u_f`*OBT4S;{a~-R>R%|yy)wczDJbu?rLA@RI zQ*RppD!n}cA9W5GOtv-y#r9SOzS`i+x9yqPM6#$SuLjAp)>wd>>;4+Q7%11&g3%~I zH36q+YrR*t&IHZYzk>QCWHwV*ScUpH4czeHlPy+`~X_&y<)7|w+`kI zoNKp`b+j~=vQl3L<#ufJt+LEU&gD>-=Gsl_^(P3~Zhpk7Bt2~{qaWA7vqQAhr$5JnzwmtHxbVxj*gX(zm+(Xe%X-}=PC;=_w9{F0gvf zUlI@Kq{r+=U@R@P>(x@|o8k7l_sGH~QPs;0O+kGTPE?wO^3pn5vDo1ic^zD_VG(Sn|Ccd@zwr1`K%Sw67%u76w7{yJJJ zvItzCTK82tfm1rO=hV4G0&Fu5WApZSn(;k_=b;D08n-d)L81N-Avzi~AQ5sjdyd2S zr>KWT-iNAGYEM`zncX9ckT<2(aepaeyiCZe`>&vp7f5RSkuN|N&g@xeWA+DU3L3WX z1f{-K4J`pv&%(P(y= zD2;pm|b_m z2xAGRylt5BXl)DBdW*5v0<{p-qH7RB(5G@jhNz!VQA(YI+XSU_AsVH2bsmN)m9X>% z2bb{t4Gu10gu}rl`~}*gV?eL7sMmi+;h2Eai#%sSu;V!8Xr(N~^;K4QuUY1@O%pp)u0qs3y8UzJeDC>X}LB~j`p)JcqYawAN|^a^^%Oze5?mDG8B zd!NDZm4vW1L1l9#8h)YO$h^0o=AshRqEBoH6ZbgE8#_VZO~6JqK;mknNp%%Y)`JW{ zMmcwzGG3PQk{(siNo1irjQiMo@(w*$Hhuy3hel zkhDKj6pR73r9cLSMOv6&5F>@jhG{%;$nC`p^2hT-{&|Fvx|e7$=E8n;Np9>zVnc|y z$7@5=q5b_C4cgJg=$9d$1kg_QY&-pBB&yyed+ftDL029VbjU&nH^C|uxd&t?v<0{c z?1Pw~gP9(R7e#nSGDLm}8zuEm-)Kw2nIZJVE+9wNs$ZdwUdURAy2W(cMN0y;%)HL$M@MRzTG%33*TXrp#y-D_9 zAMU}CKYJRUsW#;?)kay^$W7IJ9A!1iPH1c7rYal6R2!M88dIj)l*d$!QA6ARu;^A_ z8_g{CfnnG_y#06*rqXPfMvp*->ts*quz^`OG%%jW(Ae~w!z01UC3)6h^JdnGb&gYM zZk*_N3KbWxIy6)1cjO4AtC<)skb(3!AT;tu^)1AdZO*F*q>p z*HL}2TisR2g5U++u+xR>SZbrEpU6FbYM9V1GMv9=c-g%G7gfKRwvWas`Rv!UjaS<}1Kb z6Byaxw)>iCD?J?TcW8oVRIua9ufI$rqSsIwy5u_Wj9}e?Lq^dd`{;Q}TF8dogu_gB z^`0+rm5z0`^RvB;o+(P;uxZ{y>VeZFvB5-KrFdF}c@%%hBGe*Tq9dUQ61KvbBJa?H ziiwUjrN$cRSbB1O^Ml-Djgeoo5{aHeB4L1w`!D(wmz~fM*M*c)LWjebOt?jDA5vtY z9~zW$AQ(_q>);z6b$)ix=Drp~`Y_c((O;|EFWs3ug(HFoJ|J{73W@1L^+7TfYhu8* z_%7|FEjwX3veZk?SUntnk+X1CY&c72eU{I)ILQ#r|exqzHrS2XKmm3Z09r(?wHH)Zp{xkN%s^$*iM!+_$U zjVvwP2eQ;>6N$tS<8I6`Zat2>Yv^&8Mij^*`RHXL&lwY(ggzF6epX$bx$; zQpeYy?>jw0>ezQ`T-AOF56gpft@Ptnf7L#z15dzksP^m9v#yC9@@We!D!|Xp_vc=`sEF|e23z{y z#nfnGiY?)dZ?Q(Kmi8w1M6T;0*U8pxT)`boK}cWC6*PSrA$|S60@GJ9=kpZsQR-k} ziZShDu*sL5J-E58D}ryOt|V=-SP9fT@9iBd@9j-XRBd8I8(CY$g5%VL*+V3%NK+vp znRlS0Ny?zOXQ+f=UH)!XrVJIaOlhQUXrTWFnWaL<5p_smg0 zvtnu9?U(hQ@c7v*;G@Ms1D5kDXA{PEbtTV_kr2N966lNh2;MNrf_kANn0Gt(Y^*Ed z7^;eCGuv`^=nl#kry+VIv$L4%42$<*_--0{deaNOD{d`AGd`MgqI(=L7r&?)GO|eW z(!8gVWs!GI!wwtHVM2dU2-9U}3T%+gy9wf+x$o0gu|eBlkSK(8qRLfM8Kzt0xym=A zsNaH0blQDEp;w!BU!G|{_YF?F7pC2(O?!sW>pqZc&c}}s?w{3F+&`mN<79FPn9l{w z`zDcKgIra7DH8+B7B6Y{4re`k$d>h%W*+YvcZBcn!pZ$zSoDu%No@{$K)QcAlG@)* zqWimUp3MHtli6@eNHrFMFKfFP_EMFbS;qggGSvAOH*M#+72n;Fwkj}L;n zmxEG>Cn?w*_GH(s!2R_w2RQ{%;MslCiVWdzlJo&bw)71^QTu{~#^h zf5g-MM}zom%f!4s+lxBydK1(Ad&5gSCnqwW?LL=EJdp0+qaGW}o$gN_)|~BZ(qs9l zWXz%}*^S#id4Bv}n`5r%bTy%(Ec@2pEO1$k7 z;&lB##BN`Vc;7Xk+zu{blu7!2%~;J&;G+(qH|k|)T(UrkBx5+qC{FVEK|I`y$++?A zImkrNyRs0D8_CDn`M4Jkvim0*0>jAHk6xM;Gi!L)go8Y0dhnXiU8TKc;oYY?X*ae` zItS~i1mp65*A_$*aH&T4yHovS{h=n@@>-V$unPj>dg0scINA$C(%@_g<$of zN4%blSliV}*I3w0sfB#C9gg>0Rn5Go<9zy-DKv~N)3u$+;0_HI-07Q=F0r928Qiti zL&nw>`nKj)^YgX!nb)K8236+`Q{ofV4pwU?;{Pk4VwE}* z3z_6A9~6VGg<_rwQliwRO4tjJUwAKGYLIzonWhStHHK|gs&zAn0hZoSYM zT2s!@`aL+q74%(T>+lYrnllWXP8~i`4ekuRxt*c@jcjLNZ#;I&PQP-KNp_mjUjfp@ zW3sCo-q7Y-1O`pY5!Dfr(82}T&?El$4MI{sWb0tJ3oV+`m6Ms$H=Ir+E^q``l8t81 zSLd{I?!3uqTXS!6zeC?9t(ZJJ=i9hKR+{*8`YkLvtMBa7>{VDfOVJ6J0g`Rhz{M~b zqF~aA_gi$@+dYLYEcl)!Ykl#p=C9UD>3bIZ>3kIL7&TVIVKIM57G<336jxkN+uK|) z|0V6P_*MGwr}>Eb6Zj*8Q+Rt`W^R0vAIj+OV*-REss2?@4O-@Fd87_Rjz^l0(B~`lKNGp8{&A9WN#-rQXHuUd|(7Z9(SIZlDx)*KkTZ%tW#8;5x#F(kxn+VYs+?6`?l65KlX|6jW223Z~ z@%Od2B3@&sm4L7_376e-)MZYT{x^M&>Xb)_`%Aptb~uRoBwic@$`-fR9E}!8?aGZh zxzvM%o^E$MdVs6xt6fK5fEJx#zuyfSYWdISqfPjGTi;`7yRg@r`u*)9d}&$j>%;#k zU;!Kya05wZ{q$4Et1k1`q3vNy>L=TZ(EI=F{S82rRrWZJKhMm7!;3s)Vp35~?bt%1 zF-FA{76>RPDhZ|)h9;mC0t+)@eDo4Z@cYoyIWiP+4i&T*6y}uZ5b~LYHtc< z_)cau*dhWUBo_p@O=blRlNo*0GUZc7Wx>x|Z0)z$j+zhMV*4EO++y3crjII# zkvqC}$+sd5{VLnI`K_xy%-Avu()il__Q-LrOr3iUpi{R7)uu*!nh>TF>Y77L+%Wsq zZagZHV8^X~JwFKW>Tx_dfi-~i@k%?r&-o7nATt|}7S0RUZ)H^Ev&`liOD6c|QHSF_2zRx_;+1kRI%ltN@(` z%e4Y8rXOS%ud$A>cZ=3Lfea}B1CaY)i7%%KYcAry*6&I-y0id_28Laujs@CI1gA#& zj#C*p4Qx)#`2dsek0l$;b&VT?|Ln(8UU?qycre411y3$K^PquZn;8f%bJ=li-*|(-JdW8CPuVR7TXX^w3&%2~RP^!z|o~FFF8G68e zA*5!QE86|}1gJEXm7Z##ic~?*AL% zp@GQpPrrlWu|KGIWX;!LKNXlvK{Md-3I6%f6Z0YEH{ue34n_olm9PcaS|KFx4aZ{p zk3YF75ApmmoosriL|E)$mE2rz5=@gk~F|0|nQzPYcott)ybg#UIM_;%y*_Dx~ zBLZJS1Re?9Ta7x@?o`_ddk6w0s>2cbt6OJ1HVIE=TEDh;>#c`enQhuz)#6h5+>0Ai zRui-MFQQTn!1eyFjEZ509tv(|M@Kxr0ny&P-;1o2U?NzMET`hIjZ>2?!*du`k_Yq< z<|*k@&s)6m5<3z$j30Ya`B_eL$V=)ejqM;wxpk>-of8k|+1oojYr{~Uc$pv5pi@v| zApBJXVRPctG+{jcWA7d&ZTK~fya;K-92C(Kr&1R=-B@)J|AE+WO-hDe|4P9iMRJUX z#Q(y?u5>+}S~-fQM2(SaE@EJHwkyH~o$(BvFnSmNmFH}gHs$HvZ{ZJnk3n)Eh1q+I zlH+Iep_d$YiDa~eSlEnMSO9W|+A~xcFWu*=*4Z2NuAgIB?zQ-@Hm_Tr^RZ{cB@|#j zX6a;#scIp*Gw*lStsd@s3&`uvYcXKuAE-mzDG#`lK0qvq9WH~j#d^p+<71U_P$+e! z4j>-M(Tb$Vgecajy3I_6Xj5q;h%S6?hNoNb2-%&up*mgX+#xv{p^Lra;J5TnEy5|i zv#SKwP4cecc#yaRH+iM3U2;eK&Nas{UhKgJ{-qZ)WPV&Chx)NCJ+T4H8ii$T0>N#U zynD?KC_{17Nm;w)j&XCgvdopev_bRn`cPlPxRqPw4((m?%8xzwL9l$6?@iZmY>ar? zmBvUkP47zWN2R+i`Yiz**gtjf+kf6?zTTyE36r49>uM%X0{W?w?7zcFHUvMNzYf}a zhx~Zj)sy=kI}GLci$Hc{MjiodbpTXu$^7VBu2 z#?odB_f2u>Eqkp-xxqCVbDtiF2VR;hOD|6&>1EnxK^U0Gw-<81N=?}1+s6U?FbF=h z4@Qz(2|-n{ASu~~bNn&VCjo^j@&`YQEEa!2M%!V+62PbPjgZ@1^9YivylGg1^yFe4; zJYkFSHN$-0B-$I}EGMgPRQLAf6($@wo@f6_c3y|D@I$dW8M!k za{!iM_N{tcXfZgp^bs6Bz>PA|aakN2sfx>iwlB}$xlhh*V zofku~6o>`v_|xYBnj@_t2rJKZ7t3{m;bDCc9^Cn2jPy=+sB?$)Gjm<%i< z+kMajAc4hMwpV%0om7^*hh7_bdxwPY^GjG0eM^~b7|!T1=rFuhi}*XPXBl3l4A!wO z)VvHtO%sc}!j)?3+Ewov18DM>=Q|TT{^pvMd-H;O0B{gv4MV&FPbuWk-NwrE5*}P{ z)xy8dPU}7{a#4~zmZWJ-6G3st7U6r(y$n~W_J(MXQk^?&!(5Y5c#L)KU+r-{772Ac z@Zg$eO5R<_;e$Z4!m6h6b5HIhbWh>VF-2C5TI0oUdzdgD-xN{fi?4@(dG|qb7+tvD za>KgFzjRT>Y~%-(6KF}*7~Fmw8JA0+%F_q)cUTESx@5m123o&>WLg6RC!t6~8UpNu z5xD}Lx9>MUlLce;D*1`jH{8gw2}w>-7D`Q{&=;e(W;lX z+qXsoC5ihtBWGH35&xAYw*e9URE{*kxG2BQuw3v3&!y z@Fr@(Ui>@J#j8l4!1;%}b2j$cdqgQ?yGv}u)A7xafahoML$lG|&Jzj|%*I%rrz4Q( z%$1vI{)M_1x)S9tfKKjng~BhBc|Y;H-|E?^fE)fU&@YfEE!VL^YQAzksKaFomJ6dv zCm-@PI!`pyfpehdOv>o}8)_f~MlG>S=ddg=-))2WUv32m?A?mB*x4d~X1(5}an{*F zeIrXY${nssLiMYELlMGuiY#4auBGU?pXTcjX^v=HDgjA`8dgZNFY3(FN*&~q?8wu|ejDi*Q^ z@wCEZ6s$LPKEdi8XO9f{o-sE!# z(&WN-4iAgt?*jhLprST~Isl$9Nf6+@UJoSXo++k`l|QkLkv4T81xLO~-Cc>rlP=|? zZwKN-+O$fPyJ7OTdlK#4VbatwCC6^amy#_xuhP&4t(bC~ zb5;IDz7b#Nq$5 zzY=J3Kq4^th>QwZNIK6bcY89`thU3begW)fGy-IC?&qmzv}u_JkeecRKmTS?v93c<;twx5FFQhOJW*NLA9LZIC@2<54?86rfmLg3KNYdNyeM7NuGAz+PBSz8 z)7p1N+P7)EV-aHv9}quLa*puF>o7hf5Dx<{0hX-hPWQB3_6uRsx`!iCnXw5d!)=`m zNX!J<*~KE4edp|a4~M;!aVF(q$uS&~N*i$TnDR5p5fh2}HtFd@_`6JUppin#Qpq`0 zIWo&;k7D^m}}L6Bst%`$b$5eL%fD2 zq7;Oy!YCkl=ema3n{_gNyw6a2vN=^J1P{ezZ#oo#qsacXPIA5p9Zpq9&L<(d3qFNV zeWA&(j za~aUn%`neygtle(vgGK-h>@`{b9vdt)B6K{U)a`8dw`FeYu#<4@n^f)_lzFIA1 zb*y=xrU?bzROOfq(%Ro#N!8#0d|i~A-y@mG`3SV3tC{(FNr7*9x4Ev~tLbdeoc*&k z%)G>xT6apDX7nZRu4yRQSp5kv0eG9eUc_>e zX9zXNe1GEvH7~^|t(!zF9|wcr z1XvqfOq3j{j7Ad7JLJQ%6{Oz+Q<3~Bq|8SOuN;fL0EDo_i(J9=6mK#Vl$>#u0`r$d zgDGFIT?umD6}T|H18Pr(1d`+15yVRk)aA|{(yV$JW$O+^^T)%f-g&j?)9AI~s+1-< zlCH)I42~Ab8Gkj)j}kd#pIJ}hd6~)JJRv!p--ay{AP9Q=chkNQS zn4y>5NN`Hd+xdu0l^m1t$RU6{`i}w$CKFLD$=WElxt}Kj^-Mkoi7v>Dj@C!U*c(M} zjncn24xRV+#tYr}IaYEsz(>%mqbiE>08a077ZioF3gW>)Cd4hUE0K2?P_79V`nT}W zKqZOYj8Ytrpuddnaen6FxIdgUYA-ZE@5;L*rwLdb;L;HrM&TPwqiJ{>+)PTdpA^*w zH^8)c?^$fCy;)S*xr2`qJ<3}qPbc8Q*$H4901D?-tgPhCdXl`EV3v%v*Wo5-hNI4! zinIlUv_K`Kd{sVxdF)eAV+cKDFqpNzmwpXB5TX&}3{8Ee-A80fYYO zNVa_j1-zv0d9b8NLI#i$fQbVdJjcgEY!gh9Ru@ZZ;ZQpM*fnSdcn5kCcMrx~8DP-E zt{KSwSD37FqP$#Z2RTHPPpa9yQy}+7&ozI5^vRxRc;UE}54mu|io|H&Pf9kb9oXiX ze3p?-lXV0Nw0FKnZ2U%hpJLnR`2v2~lXW03IQ|IIFKHez)hJ43+b5re$=%@j>udcb zsN{eQWryN%I$b0=(Onz1R0pFN9WeAUhZ#~v2T?)un(u1yCvB>9ZVicWC?AXSL+~ zQ>UVEI#5JG=->HHwez0{33UE-qra!~zqp#XC$2_3^IsX**~6|Gva@4Pk#tfJES;!w z2}mgg{X6}-4u7YAafY@alYs7X`ggej=hohrX{vBO1j62WwF7+mjU4w*MfPyaOBqdw zeE9WeZt)|s{-6%{cnt4=Yohvhz;mb64tT@+7%dkdf;;dVfwB-k^49gy$O zoTPL5a-*l?cf=%)4!O2^1lr;K^BG0CO!v>xQctG9#P0ksdZ_Nthi-0`0jCi&WM@q46MO?e*i0kJg8ef*b@cn%N z&wL$Z`aEdA9}3C&q8J!9^G6O4>Ty!J{d9lXWO4wGt$2hPIF!84mrfk20NWz(h1Pr~ zIermJ@_@6`T_LU?Ep3<<(Z4|#j7uH?XS#d(ifsE#Ygqzsrq zpm@i=-PxdBvDT;q~zG5(i<`AQWNOTS5twV;x>DfMF zDCjvohh8~oF4N(%I>S>7a)aDVY)_GsCC8gr4oTZ-$1XRId3AjOkZVT_2DtzN3NW${ z*5BUYrvj;a4MR1s02;Voa_+{R*~2IO!m%n&HJIx>Kk+I`e`#@jOuvPWr~a6t_|<2P z-UrVsiYnfEWBCu1Y`hW*xJ9Of)5x1l{^0I&EDcJTUf;PO37N#9y%18ek@VreW@7x- z^NJEA=5awDB)u9Bz>>+@iA|4svXAf0&0KBS9C&ObwH|CFeBw@Rp+Nh3iL@U&AHm zedn2e0jr&Ho+u#E+4%vjac7;BHjRLVrKL@B&Os&DXCPSDJ}LsK-=Yx&KFOGT@l2mM z+I~XhsnOppro9`Iq6sptcMO_fCcMh_>c|+zf&_Ry}V3g4*PRv<)bFW`5@viKR{VD(j=;YVQ(kyMTlZ&X!erzC~gn zqXF;3z~nc&a-433kIjPSZkQUi=q;whezV z(2S8NZPFx*lJn;f3E7I|?edqtNNH2_=w#rjH|yDXi-!1}mM>O&0oWqT7m{=7X`Fry z(x#o33zG9;`jsoXmx#EaTEy6F5>`12OJ%Jz0dPsacxs+c#H{tuFA~>-&7rl}UnS<& zIMxuXvi#L|)Ii%-C@Be(eu&Hq+v+{lL342ujGk-z*rzuVKVX4m!TsPy$=-Tq;Bu3u z?Lx)#6%>4Dfhlp>&GI3TCU^o|`9X4ZS^7REvYHZY2XP@D-|a5Y0=(CFSDaz{;dTYq zSl^+Tq>PuGVesMI3;)R5RpRni^$}{5D4^N9w2$VR0)R2esRY(O|MC#t3fz@q6Ln37 zdqy>+vv-i%043@LSRzHF47W%@yjM;$F5r=o8`X{29+_pQ#a1+(zX zjt9H}KD{eyz%r3^LyD*2W$lp&vl&d6~`(n88J?}(!Gr=^H*ReM4lf2&2p^~NCaHp8@l@&BU%q3K(i zO;94thk8vxivlQ@ZVzC>t?ves11IPL#d$nizxEe2D$uov6+?1ljO6${ltjU8ZdNL8 zJiFOaf?E^ks4EA)+Q43UdL&ysIR1eH88H@+qMlY=zKE}QSL{YL)6_a;~P(w4ot$%zi?TdWcu z8oBy8D(!jRNB?-%FA#YXU;xAH+KT*8u16gKkZA#debV#y!vQKKa`sc}e4-tgwW^Ts zHfaE?8`O@r#spLh?r6cS8)0dJ)ldYn)FkJQRl{INC5hI4T0V4EASE?rBrEtcRc$3m2;RCQT>eA;@6GY{n{)lEA9ddIl(YlL zecd#3JjLi7Tk84kAw^;B`Qz8r5BXe_aIQN^_+M}*8yJ#f$=8F_hs(d>eWXwyCHL>6 zhYm8qB&eTIR`d7Ou&?|RGme~me@%Ty2G-=r1JLD@-p||p^F{%mHx~Hk4L<+EO`lpAOJPLqeEbvbrb9+@)kuyfis0HTQ4}(-gzhukmTs&EW8xU+u3^M1cV3x>w z??iymlN{lnM$xKj;4~U@BruKMH*BbB6sOO=>JLv)sW3YVkKeV(8Vo8a;Ji-UpH5XgFe_xO=>UhpI5wjks@t{>2h z5;@WPv6q=A^Y&v;{59N<8F%ks%xJy}VCK%tVrGA`_xG?Q_LRD53`cua8vZkI1&?op zssQ))c!nMpNavnBXrnjk()SLW6wi1}_28wzlDbDb04!+e*B;4-#gA1(OQ6|CgwfJSZh-JB+T$N@9R+kD};6}JbO;FrPuc6h&k zPI>n*^J19;3Z+7t6ONltAhnWd=rq=k-duIo+}1cqPPmO{hXL{ zJ}{YQ&y&QTf_C#yg$&#zcwQY42LJxRjR!B=%4K^8v@-lK_iFv&shiW(Rt|SBBdhEa zz@_9bf*abo&)?8phgd_WyRf07v7H|r8nT_u*iMh9rw!UUC(zC~Sl-%R1ZYmFO_dz~ z!8Gpv`ql>ObDd-L?SGQ*X}%tE8LN)dkjYzcj$lC!m*qLtMk6B5yZmHO=w3DS=idc| zHnLD)?ZIjPf}zdcmyQR8{ZdVN?nF?iT`e`m7Zkdbg%)@pKN%QmuWJXZiToOx4{_>v zT2W z?s|i_bYBoywHZ9l~=dD5g*w-b^R%`M&){cAk|F*u_fTqg+rZG2JS)61Rhejwh$Reh4j{e{2o zHASWbrH^UNQq|EnPb5HYuJEt`Yez7W$2mq;kY&M@y7U~DEp zGrSx2GX0L+=DiAdM*ohPb||R45m;WvrJ=OmgLU4oVd9B<`?J|GU-;SVE8pN!h0N?m z26R(>pHl+sFj`ct{uYFjufGfeVM8mFTHD110u>Gd!R!7~QTopaNTI-qNcJi69BEN) z3Q(pFOoNgGndXOQVP5h*ME5bYJN#44?6#o`6{%2z$K67rgTZ|d%9(*u^`uk1`y^H= zIU?H#4@D>+2jfHfT-C0w_j3%$WoV;TNzw#KYRA1q3zidgAUJ< zX}o9B^#g3$?Z;Ex8FYl%;KtQ9Gk`}8f_{Y|O;twF5!Z$J$mHxthS_^UYGx^>7d|$p z3GWF)?P@x32OqENrOe%c_gEPCv3NwcWFzi=_zpvtB)FgXIk&N_KQej^u+P;(*iPS8 zD4=e&?*ns-?_CB@4u`|Q;X-)w_u^cke;y#(zrvKnp~^+5KFae$6f5@-Bd}Wp1Hd-iiK`N$iiGKTLGZk966hQM-js5Eu&<02msQuUJO@+!uhf-$W(=LBOJ?Wb@tP_7N`ok^)sd4CH1CTRxibsoM*JAG z0rHWnCAQ{JMrBa`7*wbJ6Q{@GZgS|4C)|J@G9kj23!u2>=u2b`#)>?a_-&>hn`$uE z@k4RzGtUoIH_`|5uH?llF$N?N{~hqGS5wWtpF>S}+=`ANZ0;X&OPbVWwnE46qkFWFOK#|`864%mS-GxxxR z4s0))-_JnPB|pECL4!1o4n`%?8Janp+aMDiiA*8ok(IQOXeBfcB*0AE4u{91qZ-JK z2GvOpG}x(eSCn%HJGAROVXeX)7Bm+^9k6-7d=eLDz7eh&g4k$p(unnz!}1JaSt2>p zK*b-K{zkjd*#?6Z>x-1TJN((^bl9t6$HC8~4m3yvLt4uJ_3H&Hl+s;7Y@MW%J zXGln1zSmp_s7j*R7$yo#S*}FS(KV?1eeZMXfmT92*2Bur;OHlxG}wX2SbmSDfbt^%?(DRNB9D@j?H5IuDleMkL(8uARISG20L{Yn0(V%z;B6MAO=F}j zjabDWSCJuw4?vkGACi0I4lFNaJUd>9Mn;ljB-+n)pru^))9x)(+IX+M!@@ktwwU`9{9XAF#a=NBTaWn<(v0HFTT82FB@?;c}50i(o7 z=Q_$vabCRaRBp1Il{TEFn+m1%UZzzx@+~8U-8`YgeNMy~;?eVNEnSppZxJlO`lWTq zPpZN#==5dX1|~w{8Lb#pqDyZg5WA%}KkE7#S{+m0HwIp@qF3B0LXr`X6fv~rcJ~xA z4qUsG8>U%Tl1?ete)4uYs|l$97n>%7T;GAi<)T4yo`#Qn4+APhJ9C$^LghmhZ};u@&dsp>`q4iBAG;oeY; zAg%j5jVa0bpA1Ve*wU^xKm_)7*FNg+lXJa)#x1b~ljp4!R8IWfq8D-cKRG)3ySqG-ytqs3f*IdK`EoG*qs);3 zV;~i}B$NhFBA_G-sUKdZWw9RXivHA}pq?LX0{XvBrT@nn{hM2AF9Ojw$Q>v=NRHc~ zgK961<8xV=DGQN&D+S`M1X4B#88vy$|nYDkly@KdUKmQ5fCR8 z(3L~O8GXS-BkdX?7ZH8eK5sNu=bP)@?)Tq;w7&UKDlY@S-+wfi?vLVXDDzL=Y5w${ zJ0D|Is4yx7${|AZ9}~>nLEZcG^?f9tL;L{x=MA$(OPe0lz?6mrL-r)QE>T})kv&Nx zr|Ueq9{oxPzT! zWUlUf=2pma^ajL5)&q^5TT`t!VaXb`+Rcq0g2?hKhChta(U=2?`l*tQlmY`uB-%9= zh0yUR7kf+SK5Ft$HBHyKE!C!X-EXwqZ(3!j{l;h;?Yi1E&A46{0fF{LQNG_u$3r)| z!f`Fa{1@vy6P6QukL;hQpMQY4cmh`b2;_PcPGIU!0e&;!16$> zm{77Y0QYPhTPH=^iJ(-gu2Qon4Fn&hNA!2Vq5m7_XN-RX_L|f1YAwZjm#b9gUSS&E z1oG8*z-6TU8>6{X+7vs{{`KK7-}>0w(Ke`0Ydh|qtBr4rJO}^bd^DRXU>rlIWJmHH+VD1 zrA=P6?+m|RdD~q1%X{Td3G1D}1QK1-_0on67`~QIB{!afia#w+*8@9Te@38DVA(FY zzr*l)=MEVYe@m8t(uPX35A%x7P7Hk-UAb*^?pSplGWvgtEDAGNBVFk_GPb>5WC9A! zqZlTFOaR}nr%KK%Pz9Q&cebn=2~o7UJ_!$`NRCg@04p7!{ovj?bLODnEp5OxAh%Z| zS<2C34J9l$0FvLiNTew_j-duPJ;Y#bE3rQwD_D2S9bG5n4!SkQt($FWvVDmD4&=S> zk@3-C$mjbDC((DwRJ2pt5RV6Spb*J123ZsqBsuUtME4ZUdn!a-$FLwO7>~MdIES7d zc1Rnda7Nr7kN3>@B5*$gW|mS8+4IDjUQUj&`k z+(*s#Y^99AuvXn8w=w?;o$%Xwop08VD0-fy=M_b+-lvWs!2O@#66L79$T2NJ~lgxQJ9(9P^jB~4JUN7TZHSJqdi8r$TY)+3v^$2r0Iva_H z6}^|vvtpiUL3x&O|6@3xCE%6GX_4}r19H8bd6Wd2?0VO9ox5^$=Qe{if>Ew>AB{bn z&So^(>#jpi_TBr$$udl1(8p+Tdq-z|t#yRUb^w=LSHl>r{c5#5UFU)dp!8;WS6H{? z7*Eb|+vWLaP}1a{DatA2F#w? zyLBv7*qI8WH@3vS97gXbdHcA`_FvW?yH4C?Z`Z=0>egCy@~6Hh+%q*zQ^W-MQ#$AB z0+2oh;zn=mP-d5N$EvFU()bQ>JB*JgcSppGvjsbF8jS{PC?i={UZk@{TK_LPJ)pCV2ZrUIra;Q+`c+1xNB{iSHGrO>z}IW7 z_qc1sreWhPwszOb_G+9@flX}*mG^nHkipVtI~7bk*96gj=YaCmnF8g%>#5XnzSq$o z1+k>AW1P#0d%O~imDf|{KC2APZW?Cvt&tnn93kVS9%8UgbcYwz5@`bx9`~QpEH+J5 z5`(Kg?oCwu{HJSvn|;m!cpae8xzRN}5?Y2_?hWKx-AzKGd$s8O9f||Cc5j(quvYzR z0HXkJK#;$fD}Qk>8SLf#YjH_Q36e5ud$yy&zPc>h-sMB_wEn`F`W}tk8vl_s=3PuI zw?U)2y!96`Jbs_t3i8O*IM-aH@0V6Dj*ep5yCioW13H9!o|8C|r^d-s zBhfoogT39jW+!&HeS4-nS10#)mNL6)gM2}((c=n(uN=LOUS>}g-yqM``~Dzz_Vdq? zLF{IE6>$Ck8E%6jwddH`e%z+Xnh@YNv_eWUd2SnpJR#$O2OCxXfgVSE_L7Z$_VHXN zOB&%%O8j#Gf4r7Bf6xCUmn66+o+W#Mgf)GPOG*yBAj#f$X~iQbQ#7qEB3ACiv4ni> zy+>5pI#OD{jav`OJ@RR6XlDQ6v?@m(7ayM;g022E+Rq|s?z#&D?}ze9#EqnaPs=@6 zFisyBdv2sZ3!u>NrptRCXRAjdMc+>Mra}A}Z3yFWI`rnM`d2@`e*%=_`@=?(Xrv8^ zbY-cWuJ_)^9eV}*sm+x?Bl)}$eWzTkaLw0CFVw$>H~C4Mb^ue~j9LKK1Cdf@1MpJw z4twTNEiC=BKN9Qlet}dFqYQH90c#ZeB1S1WrxI^Qe}R^IX+}L~^TIoTs~K(aTjd_$ z^%C%Ua~*Pf`-KYWg}SgaZr!$Fq{(;;<+`toa-%D=ef^9BzH8TKDbgmWyG8m-U+byP zdZU!tC1v)=7s5_kua(aLnP0!pJuR{Jf@Rg`_J-TT=Nwp{tN1>K`N@(A>=n-uxK`?2 zg^>XFhI-l%XpgTKKf<4Xho5326k%y=N=1$g{KIlsa^MBIa$9^iW?ZeeG)o)aLK(Cf z{aY*Ya{a37?JL_Vti$1VXDSlXFp)Q!C>gbq?x_m9kpol8O+jh5(FvPXVJtvrU2d7* zUVW3i@+j0M+YZQwT=UzhKRJKy@t~c(d^4nyyS>->!J-?m^saf4F8ElfuRYo&PX&>q-Mbx!sLEgG zaE66ykjlMvz?tGm5mGW%$Sj#8fXrW^V|s{0dC!_}QPCkeUk6&?>JpwVL~@{;?~*k~ zl+}{sS`9f5iE}?8)-fY%S6-yOCrVmtMo1UuUns-Tt*PZ14JT ztjG4I>~ocw^mmq-qJa;iVb0@d52ANHj#R(G6eDez452T|$K)npqvP^va{|`SOpT|P zX6+tJGg!BHRh@f7Zcyzg}b_F-R*3{Q$U;Gp>MAF@E>%Q-F)e`mZz}qRIxhXQV$| zGIzFqN4)8jl-VZ&(nge-B3<~vxATOwJ_l+3wM(L?s47#4iF{Y0f`I_^@w=f&;&Jw` z7>~Q;9oEN50tiIz4(pH{yF@ykw|)T>_a0IV0x9njJE7wN($n58m;Cb4ov3*o=9&+j zZ}}4Ff9!mFeWG``IzAxY0+dp7WoKrH-e$mkQ~2rJze-~K0n)qk#3tX;@i>@GHP*3AQN;Lfc{1b2DC-jn0(pN zJL$0{&N|!#yU}Xkt8JKqZuBgLY?e#bpW>ObEtx>I6Rh*?-3iuD)GaG;+?!#tkwew;Sl(x=P;h3-&#PdSf$T451O&~o_ui&-?xpWZ5VSM zVNZv?cVU+PxG%73Eyd%Rhl3XB^DqFtP@%2adza9J9NHvIM9(UoaVM~J_^q3W-c&u; zoIq=FqFSKs#HI{#K1|0>Nnl2vipL!(x*r(K{MyC$Pvb5%3^i%VrJGmzUf= zeJAKiyBTfW<=eKAw@3BIxx)1l8PR%Ni_ns1&1+;qg0>efG{U%cB00>?;rjz9uFy3I z{Gb2?w+w(9#;Met3A6YSWuxTH;wldM>L$+F~Hd&web?-lJJI z++!?4@7H2io4rm8Da%M-vqkHEM3hhAbU??yy2mmXOS~rY4i&s0aMc^+v!qRVq8rcG z!jizzVzsy@w@X{jq}=Z=6s2`ng{V$$lAyKz^L=y0cZo+FRts{p*qY^wL4Y`G0_zzx z!?AB&@qntocjIvqpQqT1HeL#u8W~*7Q=I*n230+4Z^GkViFOvKLwlb2T5??F`ECJS zT#gp&9iFOVP{gIaenqHlRg0qgUvQeqpdq4`xjuum)QO%6SjM|-Q!dNC-T1nWcgD*k zx1E9P`{Ue|k^56jZam5RDca4yO|jl5NS`uv##sY1-g-8WF&i?j$uVUiTSnI>TAodE zTo=khG{6(#)19Sr3BM%oC^B0uBuS1Nhp{vv@>4w5gTv5$QvHQ7XjsBtDcEFBA|BP> ze@RjL*RnsvUyDnv#oWTG$)^=aqU6{cI~9 zVY+v9oKob&-b1uSIajRhxlM8?5K-H6i{$ugNWkwECnxXQxZZW{u#MoPOZz~M@KB=V zm&y5_yxU!=bNLS)sT(k=i#ftl10r13nKm!S;d?v?@w<8%Dnk6IxJSoYDY}pm6iJTM z0B-)kKee(!atseZftI-J%e%T)Q3ebMRA_mR_4?_bHGPTX_=sIcZ4iT6+|YYD%KNJ@ zfPh{*9cYLCvf2JPFx!mdfo!`kqCSD&s`A==^7z;!IbVg+-oxeBmMdYHdw<)j_E(wY zsNz6tf`A^*Ykys*R_jFd#zDbdsaLD*>wiv5C4a+K(ZJJ+Id z#{D`{);eE>NR;rfm>x)#&(%w-Bwc~ zRqm&?cK6-%U!N3MdsxH`y=Ds6IIa>Vpc&f&G+9!|Kf1)qCyrhDHL!~5 z7l>m=qss&X8kM4UTald43H}j=(bRK5pc-j?sYY!I?+EqwCGQg#{9W!!bT8L!)&m8@ zgpolmJ{R84D1q2iKGZG0&-!sYdfB?5A?34_vE4hHGi1SEkvHxF$4^jq_^XY;CKYNR zN<&dNLPA)Nb#$W-2b}cQYX0kMY1?7Q#*2{6`>csOrAy1e*FVkolKtb>5b4+`l7ZeEiMhG1`0G1sW(n zQ-@nufhouP1kPVuAUaUQ(3 zfO6n{Sof0mYUVS>h;A#$ZiiqQ>7Fh+TGkun2CKndFG`#4Q|t|*WB>ZAZ5_@|t46+( zxijvke@1`##Cly>y>^eT^@yCMlXK}h9k20fb$=Squ%K6k1+H9!x$e%n2I=WNY*k!@ z#|Z6p(c~RC**#e?w;%@V+cjdd`@v|jja;tWjlQ>BXabtxo+WmjMk{k*7TfTI1~Y#| zzc2D3z@d=~2qqzDpsBdU{db-0aYc14?$tutk@+T*dB0ph|H4e!oI!SB!nhn$%ryn3 zSa=)Y9gXyxZ!)UI$Za5&TUIbLYk6jG^`B66>q>Siw!2W(EH?ovEcMklx|a1iJ8fgo zI@uS&)}v^16Asa^*0t1Ep@9^th8NIv0Lu-C5v~$mfITz+I@&2-k7vqpf#uE=@z^nW zc(n5M5Q8I$%VSMCS0>&=G_%*-62JYbed7ScYf$mNP3H%{)&8|;>4Ih($btM%=E2wSmDN22Jh&yE+ zUsJhfM9Vv2dW&K3q8}W4gU-?{PwTBd4K0g_-&xOQ+na{gMUnrAy-=f*E_qiJfxpUpU5 zFb_&_M!t@}T^*{K}NL)1+>@71D?1$k9 z?+5puJnWU$HNgVpV4GZD|5daWss-8HbS2t*arbMnHRv0`bWrz6Y7*Ud7PEK9Vei2< zX>AsI4Jb32@LYSAzyypqb?p$}fa*n{T4{amFgm|rLQ@SBe2Y0i!#SoL)%CcY$qyjx zwQ2mnLZl5};IB96m(EZ#AZ6ni{8~>z z!%65F$2OXh&}mIQJ7Sm=0W4B-{)7F(3APNIjA#TQHhixKd*Hz+LD*Y|?4hl`Euwh5FK>Qfuv88;e{QJ2aVLKa8iB{SW%<+ zb|i}I1qX_-3ppLkLptDQd-LpdiAXw!ynA=7*X#$taGdY0ZyVnMAno0;-+OScv~D)@ zfLMk*A@wviX{Tgw$T>*lo5-iZfw@eBb3KE(cI@4GU`vfsPxKMuAX z+%*EbNsBH896IeSx~n7wsF5fFrq z75rlt`}Nmhg!*!?FyWx? zATkA@!>7MxD|rNs+0K)z7F0;%xlwc-(l%V^&p_-)(5+XSS+Un?c$dX+(oRv=N!X1z zFS+N5O@dinWltDEnr+98u);uxPLlK55VkuTJpvu0^)deoxTv(_yzvq{n0H~E6@;8T zUHobH6eN-|%Wld2gia6wyv3>u;vcjSmAlC*iU(4*RaYPH5$JyZPKhpAdckt#&~w#tPB87b?#V|g?B~bA}&cs z&Jq*Q6vYa&O87`Rih!OX%NRB?B*-4)nqrVXu&y=OJI4SP(Kb8Teo|-uc8qvN z?r^rqRzwRzgg0XJA*={ZnU*y?8pns)d+p3gFnVOkLbaxgo$F3OGRhbI_}54qrilI+ z=ZE~TK=56_v^vE5VN|?XlD55VtGuQz-UL1$s=kV{;Mqm z3uG9@O`JTluOI>~Fr~_Ucub~Xm>$IyMH9J>gf7K$Ps=iZ+1A z9?a;SF4^0G`a;kCNQ6Xg@-8ELa&;6+8~(wL+cQt#eIRqhH(8oj!fMgnIWFInD(2I+ zLMk5?>uW=3FqKi!tC@~3Rc+9oC>)30(-%pcNkq2tWe+!_n<>9TLi&z<5?Sk;5@|g)a>U)zjcb6j8f1 zAQ>QE$5WXbKBw)MJo1#{i?VE&9KR-AU#=oI*7jK3>5BCjtbx|k31@Zs;X;M?aU9h+ zgVmu>jv%Y^iO*%^j4rxR^DNF`zW#&LwH4ZRh&YAkm!U!jUT{lt`t_f|r^&Jc24s zp~T1i1yS^F$${sE0XmYIfXvE3&N};jHGQ-`PdRi9s@l2#*ui~|ZMJP0LV--Rax;NZGg}FB2{~s$%@>XlIYG;tY=Y#RVgg*JmLla zL*mlYLhlY~x>g^^1?wos#2?0NyN!H?*`&fkM`!MM>_!p&EWpWm$BEs^{T| zfh}4RiOfNeo<0Hm(H7B}L8RY~M)`!(`N93B0q*d)l8Ef#d@%6n;TCzXxo%tm<7?DY z=g*VwKV`F-xg5+Do5Vyily*%ejQu(Uw+JI)Mwx1mBTepTC-#GTY9ty(5O~j|vu>eD zIM(FB`yS*b?*f?4+v-q?$HS%pD*H?%aoZ$qN>@~<(L;;(7tE6f&K8dS%t$jI&EKy% zM+=7G=a`^Fno|7T4ZjC3BD}8C)X+rMh2CHF(AZ7_-gCy!Z1YK4eyaEdsRMbh%XVAy?i@j*$ z;=Sj1|Kqb=u5a~OzLeI|y8ooi%&_RZhf5=S?M~+iJ-xjd+Nn{j|OVhIrqykR;|5G7w@U>*7&BA@Q`Z2ma$LL2-~+BxV@#NSw6OG zAEZZpK3AL8pbvXp*DkRe3)MMs&jAX!@x1s-jLmnE{xv~uI+-P^~ zla_teajvXrG|RL`_(q{VA>6sc76~=k>x`DxnvMq=&r0v_5Vt?jXs&ypk@>@*>-G(< zQE~1x!QP{>+MF%c3HBb*cCG8$e0D)SjuoYqCpoTzNUIlALz87pu6+Cs114&UHobKGZWp3Rz%s_4@bnL!iUOvcjta8b@ND0p6 z+uk1^o3(yGAdgjSR4-hnu5M0qtY=|7oUL&nnvFo34Jiv!{@g%=KtzT1B z%mv$vn|Jt6yr<&vaaXEAzJwkWGUyy?s(W5Et{8%jl)H2;+`gCI?C2^o8N@SU_lRTW z6SB^Qo_4>q#CmZBl>bZHgscyhv zKzSUVbwiZj0TVC5l^QhlVgSy)_PR*o|5v2&FdaX?P+&^+Jqy_UJvNiwv`$mUZgvB3 zlnZyRQkf&Q+-STBG#DS;{{{NKK=-9J2G@Lp<4x zze7(JS|%z~QU%Pdg~DbMqdOH3E}TrNN09oRloG&KEDbeh-BU4<$*p^f z`F#P_@S>%S&Z!ibVyi1bE{WEW9mSGf=LzdQxC%pV6Es^83Hr1fYl;;^#S0K;@=K}ZLqao@XJ#KJm zCFg(Oh`6YccL9;lc1>!>JIxj5&84$Zw2j<-(Q0ws?(8htXuV7Bf*|V&TJJ}jjICMTr4B{(cSGF_nb6+Fbvq=+3xD}Ivb_p1a+k_k z*ch2}6gh%Rwcpb@W0TTQr=lX8h;CaifzTj1Z$;-tb^ddd% z*6Yn7?fgc0a~+xc4>->_CusCrVVF0g-2@D`v-KB4#5VU5kraSa^_Fd`hT||{`;Ob# zzT@g1PVmu^;{$Ra;m(a-HPT$ytb2lyw`ggzopDD$!4)N`u30e1qwU|KSCmM1%6j>N zwHi02akfXFE%GPvK&0kQUzn<|?{VR_JxXAa?#FbkUz11cu(R^juFBrlla_5Y2f6Q+ zSh)%&O%1G4Gd*Z1?9No=sRorZyoT~sx5{tii-8%vk!Ez?$3U*_B^&c#(CX>Pf11H{ zzahR2rbko#*BX0$v|D$TJOAovAMRww*pKP#9-ZrION_PSsyh32@c}j;nd=7m2O#`1 zt#gK)#FTk2&;|CAV+^V^*556X)^Q4Pk((|s(qaydlF*QPd8BKK!QK?@ek9ucSac8} z#<+EB$;VH+LFEA`T49f<_t9zdMQZZYrYTj2U@@IvNho&QkfZu?iFrHma! zkf-+6G$XTEHXU!AM~sj^C#y-n5eu8bx6;ve;0yD9`!^zS7BA*IjDi_mQc_@w?)t)= zKS`)Rrg5)$P6vp*9uOPDxCo3=b{@tfy7Jfcf&_D(tD0jeQLaJlE7kq!72U+XZ{$?& zm(+NVcCZ;2c(nH)WPk13Lh`}8NLq6PW*#d{2{@&t8r%tX*PLFrtylV>0k^d4?cL$B zwEC`hBe0w=wj`POK!X!CYrKgnG$kA%Ngk59Mh6 zF05PD1=qk*qxKY%289RNZzH!oh_`?q>I(Ub_|vW5$lkCEa#l3N90S=@&W*XM#onO7nhdr-V9{$% zPDF#h4{|n=*}?5twEgs$_?-jFmzPKTK7h`CQsvhNb`;MFmYlB?Ia~g z8{D{8queSv%pxr&=ZTWzHvXxhUX`3{MXouIMaqiyyk;h423}>shGpDUon3qE-;zTY z&z0;_mS|E}v`EfnbOcXlsh2kRu#b1fH(0*Jb>xZ)S0>)2wFH?oo(Hazp2vgaPahNU zZgOiB3R!fgsbd9X`~ZPz{igmx$WO{#(S)N|ljn7IB~5|zL^G`+BhDP;!LcALkxk37s829>9%H_m{bCHN zVQ7JN$i6aCw6&RAysZI$39dPMOT)_FVmUx&=1#N@X%=2ZhIP+Ggy06g1tTZs=7sT6w-<6=-tQcM?`Nv@i*^uJoAV6NyZ~O zJ@zAGKx7Uh>!A2uas$i>(gzuK1MoIWgSEm%mJGH?S2_u#u(*#Aw-|-~s;j&BEpbe_ zk>Ev1oEGk`e0y{&RsJP9WTmTU%$=C!UtNk{@5zYIdxk5rsCX~>KyuVEKT2|rN@3`H zFWPh0&D?!j4%!MMTtFU_15#~SfLMG0H8rfq3jXr53O3?MqslBKa zTXu!Z0BAjq1}z3Y3!fd*-j8V~jP3`=fS7aVJl*Q)@)`TLW9obGK$Lx-0yBg=@;S># zz>cb8<$cHxb~jI^N@~u;*SqiW;iOgolUk=WoY)#LwMTlHJs{H7t!J34srf*Pk2J_3;8z&A-h*$!U|rL|Y9f558pDEN~Ys2@s0spXGYlVL}>` zwv4Fl885ASfHp}Q6qEC*ThoM%Jehe1FF!Q+xB$!Pdfs%DOc<;N7Y})xLgY~9(c6{^ z)PEE4l^mw?gmmaI3|ks8p6m(U=08(TE9&;?nynwJ_sZLuEri~;Nv+$RCi(%thc2EX z=M?p|J!o=dQcX7`$2i<`VHiNUG{dyqJ$YA3n6&O`cDbU-te8&#IVPL;%YEn-R0WxUzAoKa7S)(Tc_>vwIW=!-+}51Wc5!4 zV|DF+s{TRzxB25$Gr(`4<}9*2ydZ4}wd}%;SIMyj_xcW-JA=+=&~6tjc-s%#yE7%{ zSY)@|VI2|BPRTKvUD)y#>yvh_9Or$(0;DauVr|bj$#LsQJVG*FatOl&LA3>NPi8*i zqR<4TC(#zmOA8c(Sf~>r&U(^4?K5+o{eoUv_ln@J7f|EQ73Jp{5E-T%X;UihyW~n+ zcG*3NDPc8uziSRE59K{{6?~nB$U0hyfscVdnyt9hOll$mJLR;&mXo z4$q~{&5uvt8%$1{!@Fm26}jj^=kQ3^orH3rC*WGI={!x zCC>d@m?HbIT`@>AyUZ=}8zwr+)fWcjgDy4?vw(xo6T4b9{y^k;+^aCRpdkrQ1Mt=c zk{+t(ybbLz?25D+Jy0gxDs6a-b@n{DC;p7Mi`4w-5_5Ygh*t^sbv!5mD1Dk%y@2|E84l>HZoA&%uR>GMhGbKZ{JJ{ z0u;RFiMx15*t>6)ev4#uAd*Z}aUu!2%^A`z;a!N+44-0LPpLzbJX7jSZdRD*>vOcC zagMq~!Vn(wW9L=UMD+T&4EGG{#gyfe;}JA_*v=U`8uD+sM}cX^>ND@adFN6$?Vy-c z$En^87nuJ@6j}t{)I{eS(HLiW6pT)*DH+5N$&rt2ApdsKXv%xA!+cThvcCx8 z3Cov~BQc7+>A0sV_HO;E?_e~p_PAqzE$;Vyh2|_n%|B!oQQxhzcT3WSs1Z0e4u&j1 zzF3dP3goVmjlc@uN07V*`OKPc0TH!pKE)O1nj`SAB(nMka)Mc-ybaki)q`z zJ8$*-2iw?OJR-4ENA~is<4o-Dh6G@6 z-?BwR_c#8_cbzBkn%qw7G;Z{)Wvz#XF0kE(tvfJ$*KK61o7y&ZD}3#(M{8keZGI>j z>OeT!9V`p?F2tkG%LKA0@>?S!%dTW|g%P`Y6{|T8zpL0ckwD2e%&XCZ-;h*O#8s7e zf2HeQ)Sgtjqe;cVjUwWZKG+fw_eE~-j||-CfsiS95lthCR6N|B7wO6}U@kIV)VU+w zdOi_&%r}r&mFQw9<7%z=OWOAdC7!FkWel8I1xd3y&>H$aMrk?n8FwsRBxe;*jRTP) z-eXx|%32jV4!t>dyHm6xDk^qKGn>iM*IBnJG`=~$A-<7aGGrx(^@N3db{#_kyK2

KesOpQire?+0nVQ@Do8EJETi2tyVU(m*pvgb&E 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 +#include + +#include + +#include "defs.h" + +#define BT L"COM1" + +// ^ TODO: add multiple COM ports +void *bt_open(const wchar_t *device) +{ + HANDLE handle = CreateFileW(device ?: BT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + return handle != INVALID_HANDLE_VALUE ? handle : NULL; +} + +int bt_write(void* handle, const u8* buf, size_t count) +{ + DWORD dwBytesWritten; + + buf++;count--; // omit HID report number + if (!WriteFile(handle, buf, count, &dwBytesWritten, NULL)) + return -1; + + return dwBytesWritten; +} +int bt_read(void *handle, u8* buf, size_t count, int milliseconds) +{ + (void) milliseconds; // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363190%28v=vs.85%29.aspx + DWORD dwBytesRead; + if (!ReadFile(handle, buf, count, &dwBytesRead, NULL)) + return -1; + return dwBytesRead; +} +void bt_close(void *handle) +{ + CloseHandle(handle); +} +const wchar_t *bt_error(void* fd_) { (void)fd_; return L"Errors not implemented yet";} + diff --git a/src/cat.c b/src/cat.c new file mode 100644 index 0000000..26d1244 --- /dev/null +++ b/src/cat.c @@ -0,0 +1,25 @@ +#include +#include +#include + +#include "ev3_io.h" + +#include "defs.h" +#include "systemcmd.h" +#include "error.h" +#include "funcs.h" + +/** + * @brief Concatenate files to the LCD screen. + * @param [in] path remote FILE*s + * @param [in] count number of FILE*s to cat + * + * @retval error according to enum #ERR + * @see http://topikachu.github.io/python-ev3/UIdesign.html + */ +#define MAX_READ 1024 +extern int cat(const char *rem, size_t count) +{ + + +} \ No newline at end of file diff --git a/src/ev3_io.h b/src/ev3_io.h index 953a3c5..cc9e15d 100644 --- a/src/ev3_io.h +++ b/src/ev3_io.h @@ -12,7 +12,7 @@ EXTERN int (*ev3_write)(void *, const u8*, size_t); EXTERN int (*ev3_read_timeout)(void *, u8*, size_t, int milliseconds); EXTERN const wchar_t* (*ev3_error)(void *); - +EXTERN void(*ev3_close)(void*); EXTERN void *handle; #endif diff --git a/src/funcs.h b/src/funcs.h index 6a8a244..fdd896d 100644 --- a/src/funcs.h +++ b/src/funcs.h @@ -14,6 +14,7 @@ #define EV3DUDER_FUNCS_H #include +#include /** * @name EV3 commands * @brief EV3 USB-served commands @@ -29,18 +30,28 @@ //! upload local file loc to remote destination rem extern int up(FILE* loc, const char *rem); + //! download remote source \p rem to local file \p loc extern int dl(const char *rem, FILE* loc); + //! print HID information, beep and exit extern int test(void); + //! run remote .rbf file \p rem via VM extern int run(const char *rem); + //! list contents of remote directory \p rem extern int ls(const char *rem); + +//! concatenate contents of \p count of \p rem FILEs to the EV3's LCD +extern int cat(const char *rem, size_t count); + //! remove remote file or directory \p rem extern int rm(const char *rem); + //! create directory \p rem on remote system extern int mkdir(const char *rem); + //! fill \p *buf with a rbf file executing \p cmd extern size_t mkrbf(char **buf, const char *cmd); #endif diff --git a/src/ls.c b/src/ls.c index 989106e..03be5fa 100644 --- a/src/ls.c +++ b/src/ls.c @@ -18,6 +18,7 @@ * @see http://topikachu.github.io/python-ev3/UIdesign.html * @bug Doesn't handle replies over 1000 byte in length. * implementation of \p CONTINUTE_LIST_FILES would be required + * EDIT: CONTINUE_LIST_FILES isn't even implemented in "firmware". */ #define MAX_READ 1024 int ls(const char *path) @@ -61,7 +62,7 @@ int ls(const char *path) errmsg = "`LIST_FILES` was denied."; return ERR_VM; } - fputs(listrep->list, stdout); + fwrite(listrep->list, 1, listrep->packetLen - 10, stdout); // No NUL Termination over Serial COM for whatever reason. // // From the LEGO docs: - LIST_FILES should work as long as list does not exceed 1014 bytes. CONTINUE_LISTFILES has NOT been implemented yet. #if !LEGO_FIXED_CONTINUE_LIST_FILES diff --git a/src/utf8.h b/src/utf8.h index ff786ad..12a9add 100644 --- a/src/utf8.h +++ b/src/utf8.h @@ -19,6 +19,7 @@ u8str[u8sz] = '\0'; \ WideCharToMultiByte(CP_UTF8, 0, wstr, len, u8str, u8sz, NULL, NULL); \ u8str; }) +#define fgetts fgetws #else #define tchar char @@ -28,6 +29,7 @@ #define tstrchr(str, chr) strchr(str, chr) #define tstrlen(str) strlen(str) #define tgetenv(str) getenv(str) +#define fgetts fgets #define PRIts "s" #define U8(path, len) ((void)len, path) #endif diff --git a/test.c b/test.c new file mode 100644 index 0000000..20e13c2 --- /dev/null +++ b/test.c @@ -0,0 +1,20 @@ +#include +#include +#include +#include + +#include +#include "src/btserial.h" +static const unsigned char tone[] = "\x0\x0F\x00\0\0\x80\x00\x00\x94\x01\x81\x02\x82\xE8\x03\x82\xE8\x03"; + +#define MAX_STR 256 + +int main(int argc, char *argv[]) +{ + HANDLE handle = bt_open(L"COM3"); + int written = bt_write(handle, tone, sizeof tone - 1); + CloseHandle(handle); + printf("Wrote %d bytes of %u", written, sizeof tone-1); + return 0; +} +