From 6163c23c7d526ad88fb8f4a37d3574d95b74d869 Mon Sep 17 00:00:00 2001 From: "987432340@qq.com" <987432340@qq.com> Date: Fri, 13 Mar 2015 21:29:31 +0800 Subject: [PATCH] add file --- Lcx.cpp | 468 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Lcx.exe | Bin 0 -> 57344 bytes 2 files changed, 468 insertions(+) create mode 100644 Lcx.cpp create mode 100644 Lcx.exe diff --git a/Lcx.cpp b/Lcx.cpp new file mode 100644 index 0000000..b886c28 --- /dev/null +++ b/Lcx.cpp @@ -0,0 +1,468 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#pragma comment(lib, "ws2_32.lib") + +//宏定义 + +typedef struct{ + SOCKET s1; + SOCKET s2; + }Stu_sock; + +//函数声明 +void version(); +int param(int argc,char **argv); //对命令行参数 +void Funlisten(int port1, int port2); //监听功能函数 +bool bindAndFunlisten(SOCKET s,int port);//绑定socket的地址结构 +void datatrans(LPVOID data); //数据转发函数 +void slave(char* hostIp,char * slaveIp,int destionPort,int slavePort);//slave函数 +bool checkIP(char * str); +int client_connect(int sockfd,char* server,int port);//连接服务端 + +void main(int argc,char **argv) +{ + + version(); + //参数判断 + WSADATA wsadata; + WSAStartup(MAKEWORD(1, 1), &wsadata); + char hostIp[20]={0}; + char slaveIp[20]={0}; + int ret=1; + ret = param(argc,argv); + if (ret==1)//Funlisten + { + Funlisten(atoi(argv[2]),atoi(argv[3])); + }else if (ret == 2) + { + strcpy(hostIp,argv[2]); + strcpy(slaveIp,argv[4]); + slave(argv[2],argv[4],atoi(argv[3]),atoi(argv[5])); + } + +} + +int param(int argc,char **argv) +{ + //stricmp==strcmp ignore case忽略大小写 + if (argc==4&&stricmp(argv[1],"-listen")==0) + { +// cout<<"Funlisten"<s1; //接受的是slave的数据 + SOCKET s2=stuSock->s2; //发送出去的socket + int sentacount1=0; +// cout<s1<s2< "<0))///////////////////////////////////2 + { + + int sendsize=send(s2,SendBuffer,readsize,0);//发给slave + if (sendsize==0) + { + break; + } + if (sendsize<0 && (errno!=EINTR)) + { + cout<<"[-] Send to s2 unknow error."<0))///////////////////////////////////4 + { + readsize=send(s1,SendBuffer,readsize,0);//发给host + if (readsize==0) + { + break; + } + if (readsize<0) + { + cout<<"[-] Send to s2 unknow error."<0 表示SET里的可读写 + if (FD_ISSET(sock1, &fd)) + { + l=recv(sock1, buffer, 20480, 0); + break; + } + Sleep(5); + } + + if(l<=0) + { + cout<<"[-] There is a error...Create a new connection."<h_addr);//host ip + + //去连接远程正在listen的主机 + if(connect(sockfd,(struct sockaddr *)&cliaddr,sizeof(struct sockaddr))<0) + { +// printf("[-] Connect error.\r\n"); + return(0); + } + return(1); +} + +void version() + +{ cout<<"xlc v1.0 -Port Transport by Chris "< <| | (__ | | __/ (_| | | | | | |"<0H8efs0V#rCm3p4NNorPNwY7@7p7$`7lwcx_OwJ?V)WB~1nyInQ_P zGx>ql``qV!@B8_@f0)nb%syxDwbx#I?Y-Atd+oJ%sz0+=a0-GT;;}42IE0Y?0{r(s z|2d81DRZ8hB0QP(ySaxPYkoKP&d9yZh1<4&@pIen{zBnBcmLhreNis_?3Tjq%HI{< z`*(#EchnYs;ftHMT%Vhp?MtD)W2C$|=N~?O&)Bn#&ATTX-(~;eyC)4{2b+6OKL4J7 z&#egW?O1lt6ofhdaQ!_i5x&u3!>zmbo(SO>qc{{4gf$MQ@Y;W*)s4mV3vNe_BSR4O zBIYhTw!Ijk2hTqG4%qMbCVtT0SSSb%I}LHfFaAOKC^HYo1Bw)e9v6gV{O!N_XP+SW zK+4DcT`zChB_r{s7=DPZy{Qnv*k2)PfBp8&cguGRf{}~ZeRv3#!byJtFywk0OgOy~ z2~XfDPK5}@{sMx~HTM2V_z4F-;lL*x_=E$WaNrXTe8PcGIPeJvKHBqZP;^!aL3g|nzExl%)TP2N3D`B{Z60jy`PPqD7wJ9*(iIT zzPks~&i{b*m2|0Ro#!88U-1BPGE6GnPQBe*WAqe&u38tBz0UX*ecUeDgm^+V#`wFaASOSDC4%KVBeO}{wU;!uFy4-Ek@XFTsmez!g{E65PsA1S_FVNMo z>+%uwR`@)$mX8d9>R;u*77&bI<2y1m2PI~+K4YsJi296pHX8g+p9hV;U|p!*I>m-K zbiMIErc4IE*#>_U;3$4kjrDtWr*By(VgUWRNZ)uN^(X{re~NyDpvwL#zpUgzAV%71 zLRH}lM7oeU6#4ErifMMHduv z06Z;R7e(D-Uf#?CnszA~beWYW?F$I)UGlO>XdG3+WvF`X+WV-uLMIJH5m^{|1NvhA z!2C;=g^q)00nv>cHZ`e77L0W+^f7hNgPP`-bZHenp&ma{4Sqa$yjETkS)#&Ld}MD$ zKatW14f+gWCc2}Jbx|=wWX2sd_tVo&@D2M_ih+W5~fLS@Vngp#h3qbPO0w#HYA za3R7ngx4V~M|eXm(Op{CQQ=#TC&1c#5oASbHM_1K6{}~(B`3pdm$(&i4ceW)t2@^C zHqb{Qs4qaoHRw5oA-r5)Q;)g@s96fpEWWLXy9EqcfG#JXtIVc>gjOm;SNE->PBtdF z7JsZ%TI0LA#>zVfLcmQg+KY3P_k>W``aQ?C#^4BFGSgccJbA>)Dycdf99P^$399 z#o*I4;VF`cC2xUU5pZfVWcV6iq_k9)0&2JDKfHa|e^_yWk@o@3<}|=+Px|gd9_>+I z1Oeb5;@=<2a)tJ^ZyObkrbIv)fq0{C=c++JUL2*Kci*}YSUU)k(DB@A*?I^y(cS(M zGPFZ7oUp5*1mz?+Y0?6kHs3bDMTC$baA{|#A6V|T!-V54#TR*L zoRd2EGr_H;B&_<3Z>1ynosMcD13RHV4Wb0Wo|c~D(^jMp7|uWTE5QqDP%prp|4F0^ zk#&(L$B`G?%zqFA0a&lLzplKj#2%7aea1X0ajYlV3<}j7WqEc5zcyY$`GNMgTEBt{ zKIGd5lIm*0R^ITwfWVHopLDmq4!*YJjhm8ZMH?_w97^lqL{_x+jod~Kh+ro;_fqWSBw?zr zJO9`u&W+e5ud%5z?60#3CWw2;=IVgcCT>zid1EjdljEE`KaJ>>ciG)U*#<7&H;Ido zYQ#mV(f3h{-Mctdp-F7oVw3P|j3YEx_%ce;Y)Ur$EhT88^FJX+EXZZU+^1P-X`=A($Zktj)DsK};m{Z_rUnKmlv>6$5=J zTx)DW0;UP5V^dif)veZgrQUjF;Io!xO|)wvy7T#;=wETrj0n-;iwZSiZKH271ip&E~VVaIC8V4-B4DcKc?LMO%fb5|UbF^lHqehzD zWEXA3!*=kN9lVKPqU^8RDBnh%ZGOIS1&}}LTMT}#tE)HiP}WEBb3OP;72`dhsvW9H z^?YL5!btvj6?R-!-dwx9R+Km3{hKz4h{$&SC%jvrDbTd&V@obW&`%Pi&nQC*%D&T= zAB8qKt}bo#Ey83|Jf<$W+oK;?Rw!gEJ$CPm zMC5zb?gs8}bxqQh2m`%AOqH&OiF@w_F-%ZA2k^Mdhe8n1EbL~izi(Q8Ng zC{iBJngGJFjD5xd8%CJOXcx=ucmtg!5*g3?^ksQJXTuyJn8o8T-@XiHr46%>U_9e6 z@?|h{Y?$2yGr8)ScKl|Fm&Wrhy)5q=H1hk50KvR8KEk}0!8~ij6cEgzahM@spWwrH zY?uU18k1>I?f8Dgk1sq^;{x4N93YJ;^E67 z@cm=GCCUE4Bdi}A&jBr_Oj&J_1UblZSh>h5oW95Jk{3Q6kf(MV;>dAdp=*6d@IpuM z15@k?UiczlMgS9&^Lm2GV$)4|TeC)vh%%CsMV2Dz!9++84u*`Yrjm?u;hjB?m}JO! z7#v~G8(%@Wn^?SQ!%>Xy34)9Nj|9)O3I01y@bdplg58|pk0!O*^I=lopk{yGI1YI> znN)};AdD)s`kvXhT0iV%W2GFT%ilq#_qF6%aT3&chQzO{K$_xDEh0Rks@AQcs z9;>{-eekfEh0L-~1OkF^5H;PbN@_nUXQ@Ziv?{5jE6xIiAT|@-^M3(d)UiH}I@m>R zE-n`Mo3m#mFuzbP00P#>Jk~mq2+HMYy`Tk>-Ub}0D4rjn#V$?pAuK}x*Pu)pr#y`) zk8GpV8$TwsiOM(bfW!k?GeACS%DH9G(gC$@M3OD~#|Rx`6Q}A!g#j{NuYV~K)>|d^ zqOpf4ebG3Cjy3{&kVDR_H)diz-oSb`(QI<)^+!P4pD~%%)TmpA1hvHlZR=f48I))0 zYo*?d0NTwcLiXO^5a0mZ6^)ve%tPt#@%3w=R2 zdRRhRB?!7gN)Y&D^1f`7HxoI>$@?-^*5l-5>_zcaA5UHg2#tr(sV0#Jd(#Ub&?qFv zWq=}^)HMM8IJzippbqdDeKj?Z7VKTZ@D4_-rMOta_z%3X(=4MwYoxj~=w83>DrObM z#s0%PvWntGy;?A7io~6fa$mNxf(4USb+Wyybt&HT^$y-8oIUP?Rf}rCE@K(w-beKE z+bPqTohMjhq8)t!!@_3uSd)AGz4Anh+XI7!2|A)r!g?O!toM%gF0CcmTDq1PY(*uv7}n^7^=SJi&B^*Vjm-_&p8$CRbKOg#^hP7(~L z2f{!QKZj;fGv5uNQxjck3?pn{eOmQUNteG5e3dh!4&z?*KD9b&MI9k~GVBKj(YRy% zEFKw|4$wDkTI)ieLh;65sPH2$nE&Ootk>)(VZaMjQ5*CXiB&Fe9~8`Hpolrg z=%~imK>&b`6>2Lqhb#3U^-{tZw5NQCfot6dgO*te!eB}Fckd93x~W<)`~WPa8DRA# zqFjQ|T3ya=ZLLpRyFja4&Z5I{n##~RwIyfji{k8EIk!sA ztWp+4)6BG}V*_Zq8Z?2Ga$YTJ?V)1+7vw0fpQSj-X1@XUvs&t2eO8#QE%x`h+q#jd zTnM)B$S+Db zd%`f}Jc{lN2otTOHRWqf1zJ;~;fI6;e2BFcvlrPb-51i;*XJ;ozVG#b(7Ex1I1-P^ zGuhe&tbURIx#p}`X}01Bl$+;A;%TxYFnStX4I6*9c}jvT9h93>OU|fkU6$75)0!4& zO^c|nY@pu7J6E>a>J?TGgVz9lgKAx^`mp_GSY zgl6JL2(Ah8Lfz#NlxsAtSY)l&7FT=X2^^63X|QIS?d7AN3jt8S0xf-fCH+ ztDePgZ|}nBke9F)iTWU{3U-gr>U4KVR%Lwi#uOCC+dqL9+1k&@?_feg z`GwRg-@sU6t&55h{)@ZQ*u{3M^|f$_=G^bV0_bRw9IXo+ElKpCqCc5OSos2f`J(Mm z$f5M*?{uQ?qvhl3{itc4dOvvQCbe+^y2zDXYJXZ4jSf^HLN-_9FV3dD~RN2qI^OjPpoqpf00Ta?=PTD85`;rMC&g2F2r-YilshkXW%o zE;I`YWtBdE<$~rMN;Imd#a6Hk?0-3;n27*I9aqfhG8a)p)v}E~mvR-WTtwO*x_(i2 zRj8)C#<-Idj>-jKKu11{Zydd-;H8X8RcWVu7X#HbU?)qczmvU8Pr(tYse zRqCbd*xPctdZ|be=^KM9g~JsU>x~<21UdWd%-hs{5t(y!@jLp)%Hx#5d{O=2Iu=*b zMo*I=BMvr*#(fz04e|Xioez*4O|y~hzCE$3t&;iMV|tF+Iz5`INt;UUk&sJ zk|Y#C+P%x5>69YEQOBmzvVE9(m8nROth~*rIt(3mA;2UJ;Rfz{wX*L5q+|BC32@o| z<2DUfv)p5NgQ}eL4{e{uGHklkw?+RF0%?A$DN;;CEg+&kg(4doBFiXZF-6Se5$$I- zC>|Bv2r6dlH5hfs`wpy^;HkeCiQ`>BZfsJFeVNy$7!!`RI5_q1fPo&%H;6+_0i(OVi05Dhfq=c3DM9GCIH zWeHMrmQe|5+E8-zP%&0#ERV8i;#9S(5L-TFPhe>5{!7WpUj-=fFng~%k*>Zuhl%Yp zRWWghL>PKL=Fu!m?Jiug=fXZf?tTeMW1lhS{o2H z?+5RM&}MBug|NkA@Ds9@>_T8IkqN5zHMG+amlix1GGxFpm@FigrB(N1?!T2d*$`(SSm`&mlAd4o z1ahUx>Bcu^qhK2Fhw&02;;lU5CEzE3zAy&#J-jreplIX}pVYxZ7L@9>prHl(^`NIW zIJg36U@z&%;-oit4*leTkntQ8Oi*Z5pJPM2Bo^$C6$)l9fI?u(x33}!p{gE@_c{{b zI$KTiYG#e`{6b!o5F7P6`nSowGV9w14co>vu zHoPavzL2!~QxoX=hOdb}t3MSG20~#sxE4(G29rOyks1zlv6LjucfZ~MltEf{`95IP zF0EX&p|JwgoSQXXfL>m za3+BfE&$dxkF`yr3L)e)JPhW6hE&0eL9V*xG}h;@etI!lBAAbMMOO4J7A!zBvmnSF zRLS0+BatVdH&v*hkl^%4|agz<~N5vnyOjvu$MQ5=a2_ zq6H0t&`2E!y@zzt(Q=X2tK4r0?0`-L4b`KikyS~cDF9KPQ1ntH00f(@C5RPL!VM{f zY`w&`xj?6UJtjq;yg*;PgSmczT?VMsE_L@WL_xWNyJfM8Ur0s(xve{YA(`>bkC1*w z;~d0bPTS15NomjhA{C@~SdELVbCuReN;;=4UR(3)V zO_Y-|uuQcaP-d(&WqLHtcm>fIVutYoUK;$rZIBDX#$kGgX15Eo1nQP;<;i$s1{Ona zg^f=kl{p(?n~Oy_JIGme#=k&hHJEu=^?B9#8!Xwse-e?RQX+?6L|_f>uU_nbV7c zLm$^zwp>;RT~KKiDePZj_p#qnOZ7l4LsOw^r8-$kM|1XchQyJ>XfAGp!nDF#TxyF4 z)^PcABZt$J&yF0fl4o}Y(wAk+)2(U`RJmCkth_&=cO+0A zmit+;<=Kkp63sN<#SWTd7){L{XP>_tleAlX9$=W~I)!E6;m`1~ELYCy$i%AKGw^kM zt}aC%$_GRswlrJGP=lT{v#BRDcNLJB&30V?Ya6FhJtbA4)OfxaE z&Y%VU%m5mev#O)whIDhGzs05G#9FLuCA}vz+r%suwWzu801fE%l!Co4lneSnlKZQx zAXiKexGSU18IK20$+V7)q81m%5BlPN(&{9nYW?Z<&}?po5;8$Y?F1-de~q zNsN4eeH)R*KbEw(I#@v>FG8ngjlIx#*iZwOX;Sn`Dl`UM(vT(Db0KxmPp9)yhlOfR;+wh2=2DuA}g3sL2f#~qW5Aw zA|4X3So06*1=quJGE~Y(L(95n9|JO*9s%^w0&%Hom#<~Q=t0GIH|NLhLh+K-6G+cy zZnaC=)6EM%r}m0Arrp0bGZ@ENVzrO7Rx&58b#Cgc7Dl=q^7SL#l9B@|_u4Y%DhT-( zNmQO4TO8?PAIs4sz;{%MtAc7=^k3TjRLL2;vdd0e`r^|{b^Do~N^y^p9vxY4X0vz| zH{5jn6^I|ACQ6X?cLqGYQpLFD^M%l@P6@7?^v90 zE3X4cNXV;4DzN6B{0FHYh7`fz@{q38%}zLb{Fin}{)GFhyTGH-UYh$AFMPGs*PZGG zY5T(SKd^k?TE84*^*%+3>VUZ2rS?0WeU`6%+pPh?^63#I??pI>&%H7H{1ne|Jo8R; zW^`nBRysOXIXWxTfVN{*n%d)3dpYuBa`1T^Hq|B{8b1W}(c>qT{}BM} z#v|jo56@;i8}ZzUXAK_k{l8)Sa86iM;V1AsjpsPw{{MXZ6jz`Wd;IjT{Mhlc6iH|Y z0^VDN_XwW7c*gqu-;5uE{I884j&lspcrW|U#!m|OIg~$$XBbZskBA~&c)WP7#e;VF zZx}yR7_$QSt-`Y&&wUg#)-L~V#t#Nf4G`&74ruTWLBI;1Ti@Nk6wA$ZtPlRJWKZvg z_&9iCq@vytYm%qLwp=9~5&%&VrsiT{HUZ?$b)_H0J zk_g7ux|++Na~;2IpKhe$1k|nhFy^9ET9bWyA77JQu25aUmk<+r7#3Y*TOs}3{c{Dz zfc`K{6+3gGGdZI;D$(Os-yABj5WjQ%{*Kq77GZjy1)llSWBA&6eaN^Qwk?)uXt$I# z<{VN4X8D(#dlhL{upYQ(g^V|D90OQhAC;^nZOCZleHY|0Sh^LTTK4Ln0$A5yS#LD? zYz=9q$)E~Gg|IQqdFUcTb7Q>T9K_P`ul3=mv&3pjnYJq?nYKSY5^$+|8p&Q z`r_3^C-lYtmX9d)8Yr8t+mulzuqBToqU>Q@Y(m;HeW*ZSZY$e6DQXWzHI`vk>OqQ{TJ{Z!%C<}FM3lt|L2I3Y%1mT5G?@}r z9p^|I(EJCezUVw=7A-sT_MtIhFe5Jvmb(|=rFkCw)*qr@nQDu=(mO1+{+?#B)T8`W zcdc&HT{^`=0Y;Pzoj;C!^U~RUFkRG#VO{Gi1#g#-g}lV-%(x{kU$LwVOx}!5$scdfGC25i1Rl0-G8z|S5W$+$;QV0e9OY=E#fdQ1O+~aeo6u=jZEEUGKLSe8 z5rhrYd0u=PfQ^WNsfSPZW8l+%GW}~y_9C8LTAGhd6j%$$6)_pAtqmL1 zz=qWqY!15E5i*X=qDrYp^8M#QA#8v|;TSy32fFxRs6NbHWALRO@m6Vk$6!;_0opRK zm*}uH!n6!i=3Id(9vCxSy_{+^B)pj>s zzIyjrh<4d!Ij}jN(dp@!UK!x;zvu7f3;aWjT_aQyg35rolESQG8 zo%tPCRiczaISZv^#oo_SjcTGQ`+c3&!SrA+}U-xAlV`ogRWsCpc%oe3!@5 zz?w`vtMgiEy+OVgUveh4bfY2$R+^(k(xQ>LLzz#ep?oXPsYYd%W=DMzS9FbZ&O?H1*~mA%5sn*-@@HHuLt1F zNmb0S`D6128@l5Rbb@P^BQQX&@4S{^nB^FlL7$fFRIf#|)AoQRG{$Rc_CF1oh@%nL z9YUAEX5JZW=fOuqDZw$ZA^&+9(t#kT@0km%ye9$0uxIaX`wL?1v^2a8V5~zBI^6Ah z@Pa<%vh(8v627;VUd4LkDS^P&(tPED9lTf6!^)ljx)X`o+CXh>sJ^xq-sX#OLe%h^ z@{M&yX}&#Vuq>A6)z;R9u!#2o%6bJe-4uLyj89FWak3GI7x2Kb|EEM=+^nVPVU7PH ziHtFdamW-G=b>Vtr#$WmV7uKJT6T*}O zQsV|P%hKL%lw_%u_cRi>?pa#>8O6)0mSKk}*V)}!HLGJvXW+_?N(UG8hZbD{3qi)~ zmZi7jgD01V2hP^1Q=j`n5F(^7t+#{sp@ZNt2}+XM4~?pT-V!Qf*^_P^+57O zy#GuyS{KjcZaWSXC1-S<0G57_eqpb1EW3NRwCu|dh>Hq49OX-ADsR~sqSHf>yC3a>)^Ut8;XvE#koz|o-$V`|IY63&k{d}l!SinwfCw|2 zxQ~-aynbbIF+{66C}BUNE=k)oL1{F=H$L3$Uj?gS z;^f;*Nk~O)Ws)_!=)^a6HSX43JJj8ezac4hY-dg})1oaQ?riBzHSG zM2;2aZZm)g1>$rbFVNlg3L^HrPo=us-o>xpz7g$a_dA&A_^gEt)5hX|fTg?Pzm9sA z9Tg7gzo9HfJt`MyP!r2`EVNTX#!5tyU7XTY!yk1z6A=Lz!bTS9Xh%GH`&}4Xk#mm` z*8hO5(2fX)3}gHw($7<0L4yKOx#41XPKEv`*)K7}KRiM>>b zoAOM_MebzK?3(Ni&^?1|(r`wPSW|K|4By|*t18>hXw`#S^>Iycx!cxe3c|C3BnVG& z$B$fAeT2X9IJIR^a6eQ8kl4k--P2+hcReu0{Y<Bl4Ws#rx!`v5Pz1?E~1-%xXyvoJELAcm__}FNFgy;w5(L zO^P?x>R7BysjQ4ue-J}E3>+kgEl02tp%tsTh%WLT{F&%K&s**DJCf))8^UuA(E`o@~3&EZMN)hzmJc(U= zt!3D){|+hGE&^|bfegwzL62Q9(INYdouC90CFKKISfrx*T5t$wy>ILd_7Q$_p=x|a zzEL%@lG3_Ft5d5> z>}g3HKys@O>xJ}25RAPRC|TXWFh^Pn=51^V;w8bV5?b|>EP%0e zh&qNId@>AaIP~w(s}x#C?0GW=-0~D+E;jdYi35@vh!7WTs32mPM=ZZik1?dpbBwMAdU~&*HHs_k6epyb6HXM ziNwI~5M%cY&JUazvAcvUVF@79QlO}N;BlTU0SQF8G4_O!U^0egfleaG8#{x?dV+r` z7Hi%fW0p7`6#$S=6!ToI4KbrH60sj8WF7v%{0Lh@+1RBhK z;~0e{Cn-gq-G1_cnY-b~);w+Ww0aUfp?~y`#AL1RoSA_ygd@QZVhRqnoP#G#LTJev z>m5_!X*SB8@JfT!O-MWH&k3F**jLdpf5H8X5>|BrZtdiug*16N3l9Awd!G%3>n-IR z`H%gySP=LJw&mi*6hpiD>cvvK^j4>{@ffz4t?J>9eDmi(TZE6`FsMpH*M_%v^>D1T zSRr4$TmS{|-Qy@mlG@S-jbs?yV~xp?ctE~pq}L&5ppC9Gy;!L6*CI2Ee9LnXTZnc; z3!_(_E>d1CQiew2F6D}p@G~@)EXG)s`Wl)sOnK#$kPzwUs$n0?*T-mBxwd(IOa3tvBk`gVAXhu<d#NzQ9KZT$s&Hq*lvV%@5J@5vMV%!rN zzUB2{oR+u-&dUYJ<#9ig5w1k8f{>x4vMr}<*N+h#!6KXVbcmEQy&tX6>;RO zX6ze@TPYP4!Fd&h*8ZOvH!@DIH-6#a4Nx!N6f#cIdxLokEgMLyLt7+qoWYz;Y=vKq zJT=6dK52aVDjsFJ>!G`*jE#5h<4WG74M%ROf@VH?7y}pn$1Lp@hjM*(mwe4Fcf(ka zeNLVYcg|bN)0CNroO;XMPQ?SSBK5GCeNH*aaGz9s@0DFA`U7#;?hjK3gG z+*WxGKa}uAwWUB%?u}X)m~bd`8B;(nI+9tB0|0^?+OzbY<}dUsi%NHScU;S=3fO8o zRyo^!unrfrEM(e8 z+-+APd4C^1q7L|ydU}F`4r3OrBrwik@9O~8Qee42#1Iw_VaefG(v4^;l{9clb+@0u z8z53<)|MeXXz-4K(|M?RzHtlu5;2#-pdL*6gN9pWl)?YNZvR)r2X?ZR@cWV2N^~Cx z#a1ZdI9ck_ccEWWOrmv;wWGkgnMRYJs>S`cWd z2&SUwTAm36j5~qW8`r>Oc>(pqS(r@J3#@L1I_x>ZJuPIg=qb*Nnsc0?b>7{=Y@#bGr@HKl6y zc+DTt2`MghTx=Dl1NpYtE=kZs61-U;NN{Y<-z{TkNj2+?&%tS#_k^oQGT^p6k}1j9 zbj7Vkv;f1WL(Y0UP0kw0OoL6R%ft=^IxF>6cyaIj0qm?F<;4x}B=X{BjS_2?H02y? z@%R<5Tn7_DYr20Yb>^vHJ~?Q!RoKHFA|hQ8Cu#w6$emE)FymY1EVQoiX>gyrSW^@b z5mI18w#7q0ZT?Ve#t<1woqgo3Npg@0_Ar&55E}#4KuP1PrI1bu6@WJ_E*ayqu$B&$ z8sFgTL#J9K;8SsiO*lF&GOA8tW&qD`ve_Lr($RldrN~`NEM-AJTP0b|aC1dtcsL^L zbWl5>HknvV_nfrgUuQ4sz^;8C$F71DyT~E8L4~WM&1V*hfNxU|ELEE{sEwOi^exyOSOI zIIfL#GI+0)qyMhe<#D&&MXz-(eYXcr-#C%%kmL%?dvGw_k#9^} zKqL`ZF~FjZurYf)<|@jF6O@_o9j2iYGX4QE4Gmi602#cQ;vLCw;J9TY;cCt|daoVB zbq?GlTqnk3PEyLE}$q;2+2B+hW zLqhWl8x26h#){)`R+}@H@{f~J=2A+!Q4K!uQF;0Bqvperh=J3{VYgx54?a>*@B;xP zC$J~dC11&>Qd+i=K8;3lK;~elE!lwt@UB+_@*ZI?~RD7 zW2U`Dt)%~o6pI?;aX>US;J~&kRj6xYsZWxpv5TOZ(7y{w1;3vC+J|-gp%r!~l{P)BTxg%5@mn)Qpn8jW)0`Q+S$E zyV7$~yVBKO8|_u*<(u7;v_{&Z=F>|J?est{Vs`@?SSf1JFc3pCKonsuj7Z5?imi!; zfqM}-rop<~X`g`aox8tw3Kb);e#|uNbOY@ue+N;i3ao)ZtHt=J5MC8gKgmDNh0A@9`fV({# zxCXeS>mArYgEEokZoh(F;6&hVAK4+LIljO2_UU*|sPgzA#w8IXpJ(|-il zQdzSA$QkBtr*8RCd|LUp82)||hTf?hgXx79{SnM@w>(%Q}^rm{97CT{aLMjZeaS zWiG8Zucd)8hn7vG0TP#ghBX!MZZiB^1Tf2-dRbN0Q2)pAb{vu@IcYmlA6k#G?w903 z7?M_$bv;dc4eEty+h?m6d^_`PzY=s}A3HfayF3imA8#{lm?5u=I?%`Y#(lq>#xS_Z{-h>QW14xzvWqoRY4hKH0NcmR2j% zLeXJU3Pt~FIz!PBE3b;WYNqNc#)9qRyoR|J;O8#6%>_7-**^!4HL26@BNg4ELl?VY zzr=;YA8}+Mr5JdA_>q$e)=;)Owf`kZy^=H7z`a$+={>mC)JI&%gT2vZAQ3$n*NB<3 zDXl&tQ35vn0zAdt_5#=wOHCF#h|)>t%wWKyJOlrP41Ck~QM{Bk z<}1>E4?wkGK6YvONdcVhvd?5o0j|I2RUjWsJJ>0_2P&Gr3{HXA`5<#nFxacsw{49AVrj81xmztarq@VcT;W2>aTA( z_Mv%n(&8MiSf9J7<6$p;RY?~vOO(Rwg8II={kqXV;LNNn6`g>O{c7cX*4N!HVS$3c zgWx%M2g7wu&N%-QWQEh~s@njA?3;Kq$M>JMr$9H&E!J_GGsaZBNB}}=Lduc!Z|^#= z`*m#J;Lr|eQRmC}5Y+j*D2O@^Y(uE!(j3&A9>FihldwL%pOSS~Y(Hhi!5(X5F1B@qs_s|h!00ge< zk>)mt@Jhk{sp+J!R$?1OCoI{Y5uww9D2A7Hl7{#bmzCd`P~QMq!|rzKjzzFNHzv9- ziqYlRfw;ZN|Jsf;_L{Rg!A<}NW%R#{n3w&3l<$Fgi+xG-e@RjT>czt50@6@p?Ds+_SS5)(8sj3SiVtp8gV*r z7-nw&AKh(xPzbsv!@U=}>x9;X9FhhEYefwRuv}d$DR*^(ePC!uwfjtJo8Sto& zbx`Ztcv--6scNMSQ00l;zfw@L)Vst>JVxCGqw2l27#lcB`ZABg5zC38LgqEz>sj9J z*U{(2Sa*LK>*Ih$efpZIgEe}U7ps=((AA;nLVj4eG)nyGRHq%H`UT0$hYKH4fY8dQ zdIu<#ucEoS?449bZ9Pf}>&w1Mz%5C=YKD4t2t%a%g1B0}P}nj>eZe~QHs3o`hE3QP z`mv{3GIGk$6zshu_S4X1r~QA@8l~o$7$VF+uR1aBQqGI8HpRXE#v~H9{~4ijKl`Kq zG=b$^29^#m^G*M0r2#ZRqa5Hn5wQFj~pM6%mN|80_T zw`vu(6xjpd#ZxA^v+Z6AiK8_R&fC~gq2amYR+f@xTRk{8$GkzmV@&p>VD*Q1_k@s| zdC84zN=^#+c9D-*cALb$jN`TmLAzf>sqD*=cE5zpN#YME-Tf}c@4MQUMeR08t04%j zMoLk)xpPg1s9wVO&1qS9sXNw!3-J)64}n~oZQvDV;hW6P0 zi$|B=+eK5{XY{sWKF2}q1tbkeyt|~^z@CdyvHQ<%=lw43VH6<=m!btqv4jyl@J#^| z(p~r@v2wud{MxXWymnwl0XCj8>nOMhc|&LY>v6x@4$=m5B~G+M`(u&UBec5%P|^vWJH%YAY_|F|0YSP zf*5R`!$%;EKOAjz@ELzE&G<#23NyYBa`A5lf)u6k^uEwzG+TB8S=0_AV?Xbm{|EwTm?=fCmm zZ;+IYoog~hNQ;i@X*8E+ip_IlEz`#5QZ76&m+BRJD{L;mXkxMjfM>GE;PYr3ryS8^ zQ=SK!2@TGQ8!?2mH4Ykvu)kG0v=ul(bz@>+6_|))!YdKD^;?Lejjn~jj4^t9Qr}pD zLF$10ykaeU|HDPxTP0>#ER+1?p$P>UJ{~Z!eYhD`HwO)WSC1;Fre#(TdwRVj2 zIwTLI+~2Sru5RG`PN*H6^E;u1KwW`}61NF>E-Q6H+I@u>ORT;f43|=>A2^(nc3fM@ z;2b7xWs-=KvPvg7`~q^{>H^M9?4p zHt^u;C>^%dwJxm{*VIWRZ~f|B#Fm^?Kk(oJ<=f_+xGkvRhCq@@dp;0E9Q1wzs!-Ty zIM0ozkaf=D{nw)9n!mf5>X9Ky$*ULx9j6>Ga|x%5IlE01)xJ(q}9`NNx( zw5G@9Ox(nk$^da|XDMCM|0-q(Ea}Aq^p-+Vh;KFp1`G|ifsvM4C5}x2eA_dw=JE!y zMKKl{oC~<(&jbF_WXTnVXFP?1@M~dcIc(@exl+pFT$yxMdN}8?wj{c-Qk|o^Ei1Pl z>nLmx(aP1|yTgf#@t|Z_)smdM$D~TD@8H}-%fFI{U@x#8qP$4GA6paHJkrYxKSOGc zYXx!iea_K$>`=j7F!*=CR)e1tDQA=6&HYFSQM_-Fz5Xd;Ts?cvU+&qF?l1Rl#|=3C z=j5Bsw;y*aH?X0n&{u>#Z(0!V{`a;QVw1@QzdG7#>f5^KtT0s6txYL9+yr+sy+V>; z+s8$3v<(2OZBdn{`+`fa=*!2K%YAUF!xNi}y&GakZ$PAOq0F$-sp@JO{T9OV<1rqC zZKr`xbhs{r@m316deYh4ZU2NktX0w<&M(AEZ&8nGP2!HcTBymtLJhcKMp0-Xut`*VQyBP!#q(|Nv$Y`H7`4`;w_>*@;fG64vblt1 z`s2H25;AWs7WYXbI*#rd;Mx;R^7iSK{4I&?Cv7Y@`8nBg-oQ%mTH_xJ=V-0czyf6E zBMpatAAm(RLw&#{U<+nBPUdpYQPW_X_;v<6&*DX+>f8C>ix|};bs^5a^bW76H zLcXcAAqcz8JE#(-^?rL!$3GkjCQ|A}kGuU4*oD!rBWsP0~W#k|;tBOFBOfu1zr)8;fzZ1A6yDR^{nvkn}reN_^C5Q+cUH zr=U~151v{W%GdW$k0YbT*sMZ#$zDW9+PVG{yYbmReb9 zj{4tgUh5Agm2}JyCZ;V{X`Rdc)qg~GnvUaUy8GaHC&!>j+kc~fN%D_2x9Z|_e^6@P z(V5ZKr38Sn$+4a=&R-cYNA&`aA1j@#qW83!gw!VNOOkd&hX*Za-sC^rJZ&Lv%&2p1 zU(C*%KZC!CbIAOkdckx%-(ln{AInD->X?o_o6jG0!@6kStU19WFbK14z58G`U9Uq@ z2>oZ3r#pdLH@y1p-uxX`;6y}GUq_n54S7nV&%CR73*z*}X}ZdJI<&J+7pLM#Q8qln z=y1rezeico8T59fF{l6d&LUi{bL|*xvlsuKsAOq|k{O6C%Mj!XxPb;$ya&8rDQV84 zYA*`1H!smgIiXw-hjFnfL>=xL=NDVv^0+E5t~VC{D=fOW8WkHb*iZ8qUw?{E2XG%u z2fTR&ya~{Kaze)Je@DXB0<7_R)vYe9XR-ZrjIIHc%&7jD57ol?MzSx3?Hg@mw|&8l zf9!&r|NL&7dAQqV7B02H-8NGYr0%x4-@>(9_g^w4{r(S3r+zLJ9Oqd! zcg$FoD&lQ3U7G=~27ZSQbEIz3VN=KN(K!qF#cd<Fwm91jcS@vAkXF zDqc}${5#p1$+-je(qha)+_*_sKScv2T@BCPbrw-AhC|~B&;R7d+U(7*2L$(n?|{fy z%iDsxjkH|7`kl_HZEz_489v+x%PpMF@gH`7jn)vc4t_!@V7@(p693|3@j9sA-EWFN z*1s=-2n-bVyu7Hh#sPldbQJup-uL(J^g>Q`eq#tEOM3}T05jrW%gbY>g7Okcy*SKE zNpX8Oww^X3%+tykjPN3Yzn17 znS~ti@Hc1+)&`zH3h%(#R6t1=$M%z-{KU*HoqY~d752U#Mh4?w@k727SUinSsp@=! z09P+5p5AnNCjzbc3-%GKKe#+{5syqNZf;Ya0Ozylb&omW^>npri1G~8$dz4H+~?tt z2(>AG=nDQT!t@_MG?m`N(ExV!dHbQ&QbcpU9H3foPM{8(XmZ7+K-isvw;ldx25;v{ zU12(PnyzPv?2fkdLCnViZ2Sy&2H)#xr>{cX0d;e2Sg$(|X#<(%@7_5ZhN-7HX!)T+ z{INg4Y>a=A^E~~tzaOty(YeBcfIPlw1O81&`{4U%gC*21cF}MfCbac14PYw zWA9zyjah)(a%7L4R7gp{ZN3rPM~On9yc`U8)?A(9ikc|jK2uG6W~X-yS6{5Vu%m-x z!l~W6w@*_OU*0)o3|(JrpwR3eLk3jOU?WH^ql1~SQA9s57NN9;-gJtfzJgmoVNjh{AxhYL`deg67jeEb5`bT~(v z$72_-LoVE&Q|(PN(_v1UxmN@^XfpciG3>jvez7(VC$R=x|NCB=JjHdxQ)B!)4y4Q zPrN#CGu=9M6CCDITgk5sZ};NZaf$|5Du@Y~w{TwDM4V_7Rj@)wA%Xf)_cM5ZjprPwPc+Yuj<{NYLxB zH|DNJ3N${Pz%Zu*bL?!|$RDmeI{F7EZh=n#c{-`5X@F0|PGc}ZrzAj5!o=-Uv@%H3 zmZp@VWBLkfLp(Lx>6?8Rt+c08%T8nW2Ad-(KTI5H%U-ec5Aun&qjF8kHS?{U(_t3x ze#29rbDCv8OSimXb8xiedE9$)L4DU!apBvGB|Y%Wgm#ZR-;{#+{OY$;6gU)V&zn>| z+DxxwF^^*DbO`B|rS6o8AxW3{8 zJ4jMMJ5{t?z;;;YRLtXaIP~7mFF7zj-huxtivQBnnOV8?I7gY&nL)4FkR^X@+OP=} zP{fd8>aAAi-DxOnL1zYTlv&!Z9O*1~f{6Uit+=`r5%QnRf5GZx!=}!|1E(Nu^i>u< z;;ff`F|fk*wJ^lIaSi(e1{N67h5zdJ2j}zb681FC|FE;tDmi+~Dr+bHDFS12Z+Sj9BuvGJsF!<@fT%QLP`N~l2Ms%v zSj77IF7|dOb@ayoTJL{=y^7T+b{9~0q4)r zH=QT8Pw@k8r?frO57-@!wIwHUjV#@XG1i4@2{ct4N63qVh(Te8OHP_0UYv(-D$O?U0Pk*sa^TXRB-UB9v@wM`Ed5DRMIs97xwg6nvz=ZOVZZ$L-7V`vZbf8ODX+ z8)~_`1J}^72FP>SG)dZQf-$cShih%O2c&s;n!D|4%(lJhl%598m9}_cvEt4S{NGo= z`7!9-PpRY*F&nO?AM!)C5e>XXJ(3QHY*sshfn)QZ7FcKk)rNb3Ld!1uG)vQKYRYDHoIR}x_R?@OeA^bF8Rd79EOBH_MKuis|j)&-o`!i|~lu7sUs2HNA80=6FiY5)?BE(-iS%cJv<&>s@;aq1hXxXpn()MHz+aSlxCXw0&&@W~Q7 z$j22|_`r&dD}0=Eg^v_UY34+lkqN~ce)r(UkI0g+6QOqIwF&DEX zh4eu`=Cy3e0{WmIb5_`Rk$|^Ju*RUmY)Jv7(T{q`!8eY7f^;xB6XW```{3^ul^XmP zU`Vxc=q^|Cmzd4(ZkbQNg8zb2!Sd*W7yIrPT2pFu5;qDWZNYwib4@P4xdsMRe-gnCTzBHYU9^Br3y~-y1`5{Nk9gi69kP^SAB8ZEoX#DSe6ij_c_O z$X7Tu2#Ws+i&;3Cb3Igt&TCgKJtDuisC?P1Sw~}M3)8yA@(24b`-D<Tn?bp-ARlL`;9_$=Yzfbjf?CkRXJ_E~7yTAVo7PXJ+?%aBSGk`;Czk{}9 za;VbPgRrm;oc(*tiXRF+4p+4Pe}*vlD45@Hm|X<(zuUXo*f@$a{Q3yNn5K;irBOGy|G}j|~IaXNX3DTY=-x5*-B&1BZaSf!l#HumczbHUVpZD}hUZ1n~Y( zh~5TX2VMbQ1P%cY!RHL{B5(|N8~7{mPhc_bk6i)?U?s2t$O0pP155)C0sDZLfH#2m zfyMB98E_4-6&MAkfO~;Q0S?!o_#)sU03TJD{tSRmLQdmR)9D`o7X!HGK8*)^r}19z zG@f3aP5?`Q&jYy2GyN&R2b9C;-xVdID{5il2yVOo<4cB0@SE35pEl^hFE`Rv=swN4 z%kU@~@}9cVpo4JC-_S>G04h-44SeG>@|Ry_kht2Q4}iBj4BENUpyOXLD7nI*SCO|K zIv2VRkvrf%yk6)KyD~Kn2+n(hgWj~t0IN;Jl7LMOVE#e|F&E%)Nqn=Tee;w zOVV}Q22xwLHZ+54x_kSUv~`M_V~*NV1g@|gE3i!4x?PI0G^@%DvE8+7=eU88j$0cq z3%_a>r5HoqwmV_P3YvlCI*oE`7A)rnrL&Y<&E={!Pl{cZ7t~B!jMbbX`xZshwp9h( zu4@+bUvM2cX$4(oz(NGv#o2cCtmSfze!Eo($FAeM;GraUS;d%b#F3n=%3>f(ikSwB zcrC8!?os^IP-A3Mso8-Qls##dz)z(jMGw3(xh>s3HN)pN%^vmyfN zRV-&N&)up&XFNaB0fVknkxl@AXlu9X&lzn^Z@k8aex2X$Ugl}cc2S)(E~>8O1Zo&S zQ<9~S&jG9GxxPCVh#|}8Q`oqphvpBY@uY*>WYQs6o0TOuvn*A4D^3csTRGzZMrv@g;#pB&i7bCK>S z;%vhq?(aDA&*T&90iAC0$36&iEr)o!jd{!X36?sC|z{BgY{xVCu)@qGZxDBOkkTl?y% zxl&&%{r_vFCldK+sgQZK64AqnoGoRQzD8-ROhH{uH)IC4X8P;%#c-~-P>+9;GFUw^ zOBXS@(2p7(>ni#e&qL{&=V9HbD~~CiTd9~%so!#Bitq~+G8mGcj}@G#D=`?@H#rlS zw`e)%@Z6@B1fnlc+ID@p8AWYL?<9sjE0CKk#Fr%ov7D+X-nGlgfTLMnlB7peVNF;n z?PBr4TEm`mK`C-YpW`%_$?vX8%7(cnt}d!uoG~|rp|{Dd`DM1)SQ{HdV~Kv)vKiMw zDI04zJ)5}6DXV6cGLuDF<*N}GtJ*JTZv$?rW~;Vt#p;zJdY(3UQf3+}a4zt$j`}J3 z=>j>!^hRRXD#>)&^z!ZiUqx)(9Y|Wt{^vWQ)-&seu`6h_C?o*wxve*Lmudsqp6>UWF3(JZN9k_|k1S&h9cpHlh- z$5UxsAoQ@GZJ7a%Z{Ro&)l{kE@vx>>TKaK46J4sH)_b_M3!dy3!Wwxna)tDKm`=MT zsnRdE^rr{RYS<5WI}%T$2Rdj57GmJBEAV?^R~oa~zw5#t@ml;I-yVZ5`c6atjqXPL zvPj?Q+vYC3);ev=52QoeSL_t=d0uS0p`9JGK2_uiOr%}M!KNn6iRn#|wk=HP0{gA1 z>jkRJu!+qfb^#{#4rS>znXKdM_hgg*W_$1--nmostFDB* zCw9)d9QIQ(5TjT%{-~?HY-C%kX-SgEbbDBk7B0w1*zVZU7t(0x3{Z)<^n7$v@>Gbtyf zh{l~*-6O=RRefuF;(2Op3enr$o9yXXo9yjfom{n=O?%ctv!*ZE4ZSKxGC7`P$8~?g zlNC3>O78_dv3M`n9gcYsskc;P`Dg`JZPSJ_jIaYP&L}FzD2@wH4#0DYOLm@f} z1^k~9qEP5Uf}^ts>~@G9U7|}&bs>KW8IY_gjKJ!uf*9eXfE~ODRTyT7BCa$AbNhpmv3umKEz&~ zfmiFiqXT!P!ef5ke9dMI`Li8&()?qt{T^x@Ep%>2+{0dK90|Od&gH0=7Y#~2u`!;T zcwvvvQRidpa8bm_7ZG0+#UGBv??b$P&+WUh`2Df?1F`t`V)5_C;t$5+=b;|lK~-;! z+zVNsPI-QO;2<98g)Bi{2-ye8L;4a(wmWseApU^wVaU%yJ_LC&WEm1~zfd~q%t$=+7x7!j zKns+Y0^EKE_m3s>$!!A9v;5BcyCMjWgb|^ zJTM0guCE+XmQA1rR_LVD3DC+sgf5`)PpN zyeE=-Avyos0O#Kcupf*Gb?2KOC*bscfZKZz;QF2hSpRc?+xL5b^Zy8N{xXol{P35M zFpfvy`HsVBGy|Fe&46Y=GoTsJ3}^;41DXNNfM!55pc&8%Xa+O` zngPv#WH3A=v-wz=;DQ%%1mu&woRe5y=