From 3967e06337be41321a92194722b9dccfcb9ffad2 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 30 Oct 2014 15:12:43 +0100 Subject: [PATCH] windows: fix build with mingw64 tested ok with curl-7.38.0 openssl 1.0.1j was really not easy to setup, ssl config: CROSS_COMPILE="x86_64-w64-mingw32-" ./Configure mingw64 no-asm no-shared make && make install curl config: extraopts=--enable-ipv6 extraflags="-DOPENSSL_NO_ASM -D_THREAD_SAFE" openssl=/usr/local/ssl CROSS_COMPILE="x86_64-w64-mingw32-" ./configure --enable-shared=no \ --disable-manual --without-libssh2 --disable-rtsp --disable-ldap \ --disable-dict --disable-pop3 --disable-ftp --disable-telnet --disable-tftp \ --disable-smtp --disable-imap --disable-ldaps --disable-gopher --with-zlib \ --with-ssl=$openssl --with-libssl-prefix=$openssl CPPFLAGS="$extraflags" ${extraopts} Signed-off-by: Tanguy Pruvot --- .gitignore | 1 + Makefile.am | 12 +++- README.md | 4 ++ autogen.sh | 3 +- compat/pthreads/x64/libpthreadGC2.a | Bin 0 -> 95758 bytes configure.ac | 102 ++++++++++++++++++++-------- cpu-miner.c | 6 +- cpuminer.vcxproj | 1 - cpuminer.vcxproj.filters | 3 - crypto/int-util.h | 7 +- cryptonight.c | 7 ++ mingw64.sh | 8 +++ 12 files changed, 113 insertions(+), 41 deletions(-) create mode 100644 compat/pthreads/x64/libpthreadGC2.a create mode 100644 mingw64.sh diff --git a/.gitignore b/.gitignore index 02411420..c5615795 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ Release/ Debug/ x64/Release/ x64/Debug/ +*.pdb/ diff --git a/Makefile.am b/Makefile.am index 49748010..02e43648 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,11 +5,13 @@ else JANSSON_INCLUDES= endif +ACLOCAL_AMFLAGS = -I m4 + EXTRA_DIST = example-cfg.json nomacro.pl SUBDIRS = compat -INCLUDES = $(PTHREAD_FLAGS) -fno-strict-aliasing $(JANSSON_INCLUDES) +INCLUDES = @PTHREAD_FLAGS@ -fno-strict-aliasing $(JANSSON_INCLUDES) bin_PROGRAMS = minerd @@ -75,10 +77,14 @@ if ARCH_ARM endif endif -minerd_LDFLAGS = $(PTHREAD_FLAGS) +if HAVE_WINDOWS + minerd_SOURCES += compat/winansi.c +endif + +minerd_LDFLAGS = @LDFLAGS@ minerd_LDADD = @LIBCURL@ @JANSSON_LIBS@ @PTHREAD_LIBS@ @WS2_LIBS@ minerd_CPPFLAGS = @LIBCURL_CPPFLAGS@ -minerd_CFLAGS = -Wno-pointer-sign -O3 +minerd_CFLAGS = -Wno-pointer-sign if HAVE_WINDOWS minerd_CFLAGS += -Wl,--stack,10485760 diff --git a/README.md b/README.md index 5a08553d..386828dd 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,10 @@ Build * To build a 64-bit binary, export OBJECT_MODE=64 * GNU-style long options are not supported, but are accessible via configuration file +#### Basic Windows build with Visual Studio 2013 + * All the required .lib files are now included in tree (windows only) + * AVX enabled by default, but not AVX2 (edit cpu-miner-config.h if required) + #### Basic Windows build instructions, using MinGW: * Install MinGW and the MSYS Developer Tool Kit (http://www.mingw.org/) * Make sure you have mstcpip.h in MinGW\include diff --git a/autogen.sh b/autogen.sh index 989604a9..0a210f09 100755 --- a/autogen.sh +++ b/autogen.sh @@ -7,6 +7,7 @@ set -e aclocal autoheader -automake --gnu --add-missing --copy +automake --foreign --add-missing --force-missing --copy +# automake --gnu --add-missing --copy autoconf diff --git a/compat/pthreads/x64/libpthreadGC2.a b/compat/pthreads/x64/libpthreadGC2.a new file mode 100644 index 0000000000000000000000000000000000000000..9ce81325b66ac4973c9ba5a948adc64a9aba0880 GIT binary patch literal 95758 zcmeFa34B%6xi)^ncmQ=rts3XprZ&_maU_m8CV?G2Q53Z}0)-$E2pIMOoEUn}5q7sn z@zz#5-P+08+CghoK*2BuYHJY{QF^U&_x4ByZJD&@d!Bc#J)Dz-(0l*i{l4$_zx*_3 z@3q!mdkydWzU$q`oja~={G{^-pHg1s_5VH^3%_#I#oR} zc5o~f`&BG<;A{W$|NpGP|4T41-I{gUsbem0zOiM7)!bG$u62C#lyO$ewAPranL2*P zm?_i7Paf0OJf(TujOIx3#3|!$95bWYDlVEet|eL~PmddabE>5+`m_{VZMTf+TGcvj zLh~4_ZCvY&iOp@g_m&xB##xqsXH9Br9yg)Bd4|gW~X@;eSAF0C{_gIJL z@WlAZ<0eet;uJpBLyiB;jFwwDfo`7ZTEl0?Pn+IN`-0N1j%#acX>Q|I70x_bQM>@r zI=pB4j7j6#nkNJ!i&kSPimS&@Yn{;beL-pQ%Yuq--W1ez^P0&3ieO01H>bvhcW8|# z$EVubnp?*c9My{A1%<`LG*x$bb81HO$Z6Bjwzx1gW0EdyZJrhMH8o{5&-Pc8kEnw2 zlbV5=t>x)fAew?rT$tU;eW)S$z*X}5G+NtI&?#zCtt~gF3Yxd3rj7||O0=U{Ev*3{k;Z^% z^jNLvMmN=DhYZac-z#|=Zd9J9EkcUUqu1;@jnFgo}alHE>1cR2h z%WKA<4Ew1bA2W5_>{xfjEv>rP?>99C9584p7m=b{TAHU!h|Or8ItG*(kK$tdlxbkn zyh^oBX=$AtOmD{YmR6rg$eeI5Jh&$sqCh8jesc3IW5)ZuRUre5CO|9**sX@wE1KJ; zwzNjsm;zZ{-6PEU^--YZP<44DIBCncDN&}yWt!eRzGY&|cnp+n)jo}~#V}(L7~hFxjGsDq6wS3R=i=7L=$)R?F1p3Eh-qH~2U=X8JVX z-qh3-t7ZC>kRFlujG57LV{3%5DBR&rMqjP@;TSDvsp0dz<3V(8Y#yUXPg@kL_1M~O zDd}1kkZJRc3!uWAg%&xI9(j7Ml+ZmC+Bd|XPQg6@=q?HizNUgdc(X>$Z0FsTDQ5TA) zL2&_Vx4>9b>)>TYx1bo~ZixV=);Yd9rTHsLaS(tGORpeCNfqa(C#Qh^rfDRYoHg4N zRLMehE$P}Yy2ZhUsqS@EQEBt+KxcJto2)!E_9Fu1hbP zaE2pm)0*NKwX0E8QI;HvQ^7F8!b#BB^gF{sYg`MVk~5UTZU^CSQQ-im&KN&tf;Fuz z#*6X1xN*EL;f0iF`g8I$ZQ2PeI;Ry{bgHYW&OGzX^73IdHK!^Y&)C5e?%WSXomlLc zvrA$nCA{hvI~h{A#Y_FKc55v5chvo)Qx$CO8;h04Mvgrh8p$}n5q@j&|LGsbV(%R< z9mV=c*~s>jzdBYI z_W;@@cgA9S^!VPxFr{5vVY{*D=$+4^y|LZM+LP-pzoKIF$SeJtI4eEGLF zR@<)H)fKc$a_z9j{1>$2#zt0#{at}}gNxg7my6n6hjyPUYIjO?jr8yTsl~+vzBlrZ z^SEl1Isb!Q{bDgQXH}G&_KO|$6(dVxr7_d~$h2SWJcRAdT>sxajvpy9?My`(hOMfq z+s*l_`TVsvtTK+RjiJBv2bB%g>l>=ut2dhVbJgp0ANJbn_HCx|*lA|A-6}Jk{?fC( z-Au2py!HmO^9|$J`dDmfC;plCcJ)wxGrKECUrA?>nY%i^EorRi+mvlj+AFQo&GgDr zyuV`wpJCU7(Y0x>unfQV^y>0!(KB9Ael3QF{!M$`wkG4T60>H7<(lagW$dv8Jz9gR zH=>Uf2j?Gl&q9CsZPK3ouk`yrQ1?IB@4xenRTJgk$;Po6S=q110+d&8VPA)v*)7)o z^7b3X`0sz-Uz~7dI!t>r$A3PT=4iijd$)cPGnnZ2uh(a{UY{5B`%HVVX>Tw)E-aH( z?YOX1{}PU3=7JLTe3ogCjAM)SikZ2QWok?ObsM0!D!r<-dIu+fz1m^z7fzry*6rZ8 zaq#Ex6`$*F@I_<(Ggd5EFRU+y-ov=r?SW=`SIOb+J2#}?C|xyik)ChT>4W(u?Gm#i zp{JbCQ%=Z~w>27%#m$s+#;HnI3oUfQp@(zl=-5N?>d>tD$i0wYjVB}H~Ua1wW{z%Ir)ni|u-Id0}I!`^iR z`u-N?T1%^m6D#h(6grK}Q|O?&eaV^Z$Nq~mstl7Z{n&h@qplK^FlKhtm2)Q8KE5lx zvLtEOmD;1qxcWwBu{<`q+_aBob<*Lua+kyv$^b2Z=`R?WAFx?^g&<`Yr13}Q+*L7; z?J$*~C|P0hexQQCMIb3$zH4t7bA95vRmC9JXsj(ngz(+HyXOiJ-DnD$B9OoMQu}VRy>Wu64RbiQ42mqBp5ACa52)qFy&%FlK>O&;_6=UBAFXcyl6C5 zoLeDy@nJs>aQNuzjRb1EYWP?)R~IJ)aA^gsr-D`W2G-S`{(9~6fY08y0Z%S%sD1}L zYeh34>m4I=4b3DYqq`g96 zsXzE^9Uj#qsEa4<-xn)O>6X z(Z10+FnP{Jqm9g~=o?pKjm)#S!UL6fpd0i@O&smYKu`FDz24;u0+1-8?N6evw-I-p zsdZ^j&ls5(KE?iveCe&lrP@ENYLZ+}sJOpXxc8RH8eo{agnl>HbO06bSW|8qsO(D- z1i2b}0ve9xKERuUS5UZ8B!88WxtayJivyBxWM1P|0Ob|gk9&uqMM&=o-gnbyot=%j zOCt~G@UZ``6HyEPvYBuX`4TVdgOX%!R9Ta~isL(?iNe6GMepOp!uJV%osQ@9ev|%s z!wT+4d&flYBa^!k>ygY&E?5uig6QPFh!$P>=^FA=jQT{-#CGfar0wZ_d27!;AomRd zJsP?5_iFyDyU72xVEHe?`wN%<(4ystvqf~reuOa;KJqF-F|uQ0(ZZMK+}l0|J!ruK zDR^=x^Zuydo}_^435iwGzOJI&hcR3>0`?qKC)FNODz?rAUg*Ubfld}_Qm4y`2%UvT z^*VUBVq5VnNl+m$<39h3p1?f6++F$+27EMt(0!CwZ{V#xwf3@{7ykwFLBM;{AB;Ag zqsMZo2z9^1GOKwwL+rKc3X-P1N?l5uMcfLAg=TIF#5>4{)CsFh+ap1R?1!askJ`oE zs2irmRKFfFWIuu{u=M0d{pMYn|?Zj>yp%|vbtDL zu5Gxc>j0t=D9hBy?H5K*Ew`udRM1W zzY?-<6*YF~EFxhB@U7l&Kc~Sq2QHq>K|zAruZorq!7^ft<4}jC6QXo^VsR~3w|y!0 zAy%I=OOn}*38P_!S+X&ac1uzpRByEV`cFjhN$d}c55-g5>I4M;C6%}lR%zNRMc^kd z{?bHaT7L?r&}B>U6RU!Dc43@X#(@`>b@ZX;XxayhdKu9drGIu^s+G*RQZlU}>ZNH~ zF7Q^&Pu@wT4+~DnXU!r$3X6g0r-yJLrRw=q+^H?I`(XK`A1tM^Pq6(7rZXs*(#i8{ zI5ca3vQMPLFP8Uv9=dwobZQ}WaU5Dc?s2NRJxmm;aX8-YmnP^R z$oMby54o0u(fvCmPHlyBp!E6qSX*j>Scud?SlEu*3c`%P9*-W{6&}l%LWuz2KPL)d z7tn}zKp+u-2(~|5Pg=`@y*Qkz8((gA@SW)L1%K0_3u3~xv7oJQlsJG7402*>4Hgye zSI~ZcY&tiqKPEPF5c*Q{w-2l$h85sfck_W6z_j}wzA^pQeu5^xJ*^NwU|o?3d`=)% z4PL{m=(BiA*j4zxV0{0Z<`dCI(;q;77xPBaInH!$fwBmuZ@;W4alo~dvRNhTkHSj1 zP^|0>YHZ0|LQF5pz#)RAvN~$b2m%=anHMdt#;>Hd6 zTDb}3t4PweQP&$^YshSsl`|T)+1o%0YJDD&xS<<+$y!o<$afr2yLDaCH?Ml*Kyn+Q z>BM73W-6|;TNB1N*VI<+@W$Yd@D>rptgmCRf$VF2(M+$>Lh}$WDb4G({Wf?({ysPF zfq}df;2SNuu*W$EnKcI{oyNFTvI@#$%?jf_5*!WR+4ZyI_WtM%R8#>>0H02O7Kiw& zEe+w`YCARvCRaDy)sJ{xysMNYXi#gzu3os;U4?0)(4dy)E;;?#qq3197#0OEzW~8Z z`w&(bnLkS5q*7Cxd7Rm>e3KvMu8KpHr14qlk}IuSdNgPIW-@!TX`f)?rJ4b!YWfuN4=B4p`Hmv#hngBl3W66R#F|K;Awds$30)`xCKx7Gd3g&fxhC zy!=0J@XX?A)9%IKX|?r;rhz3h+$zQYdfTr{gZ=W(m-W`x%Ne*)_!!7<){hEgH{fGv zyBsggfhtA&^F#OA_X_Ya*q@P_Hd6SnGVSMyKO)qd+(y%WzdHe6@CUlUP5Xd9ca$op z$g!epP`-~sWF{d6MdQ%t371lSjx$A*w=0t5?(Lu6JX7M|vR& z`A-DIjx^j@mL#NE$*ukJ5w7 z`78hr`l_Y}-etH`DkX_tq1y8%EbC?mHN05I@VIpPH}v2xc^hi)jRL^6G41d1#RP5p zreXFuBco{W*)Zf1+BIfv_vBT2;O?2;!=%?P6o*OUe7~YR>G&_b1gSUsr ztviTc)f*K|prVuwe7Xt)E0z_vEJ#|%bcxU>r zhiW;f$eUy}_efkdGTXZ%jL_#d-O|?pf2`UNG_T=GMfG9p*I@F{%U`4&`g)p8tZ`AA zIt33bDunO+qh{_9ZW4?n?q#s}*d5+U>^G2CP>*Vv z9BvyP1HN?!Ypbm5{AqXaWdPcaT7kN1AeeGK`LLt`C`ymYtqRk=KIU0KzM}bgx8tqP z3V{9@UYOdaj;h`wz?T1`hF_8Y1%!c-5xk42#)hx|bX=%V!B>NXpZ#B^|M-LkZu>xA z>J!zMF6&2`G}zyueUbiB+fNj-e_bEDEWU63$Gh*JrT}MTGSA`O9?4P!^%Q^ma}&HC>b4oLz_+%I1kc`Y0Uz;RK^VpzQctqG3|>W z(CW*}pouSHX=Hr@*S@Zi{u3~&!G&St0cWImCZG|RD7Xj(_=TDZquOOJCUe z18&xt-Zf-qX|C>{iDzhn!(F{G;_c8VkQ)I_VhRLP-&UX`co^u5R8SaxTK2*4Gqu3* zGr@E&jn~_6E$1i|0s}|}**~DJ0UL{!dzuREKi2g<$vyVR5S%zGWWAbM$@A&a}kGV%~rv7Mu>|HDG zFNpV`&q-O>82RMfj3t9IX}^-BlOn24!b#DcI;rBDlCsu~h2|Ixv7MoPTJ~$orAl>J z#PJdp@hz+|B(}seVrCmuGXqApM^PruqsCm(A{&{XvVAYkqlWA|_4XU7f$7dZj~+Vn z5Wr*Lijm+Iu1~h}(fO%&O?nc=(ZQHUtD>?V;;&l@fiDm9OtFQgLkCAlxE~aL9n9yQ zi#0dXx5Y~u4u2<+ey6W@0Sc0O!y0R#z}gn*{Qd|k(U;KY z{15aKzU#SqV|rJAsWQH~GIzy6CHBGIY)nA$OOY=yK1dfSIEFBO_z-jt7|LcVU%fG5 zZ(f2>^~g|$ghTN?g?o8j{^y137wG(aU1gDcjQ!{`C)G^x_y1yj#D71`=g|o1;ZA^- zR@$$?G^eLe;jqzmgQ>zilwF2~OH1)5RK=iE>aauvk1b+7^|`Pfgw@DAha#;rHo{*E zv()=G?0WU^_}}_B_yyYSRYrC>8VL|2I{H-*amoD8Rr=r=S|9BB<_nl$((bVe*A#K;=kYtZLbZ#|^GLYdI3R>WHI3-^;h!g_m^DyoOf ztwLYuR?IKZ#^^p~%^K_Rs3Dqx*Ad~txbNXCEWX3ie@G&a~NVF@sYgH4_(A zx94Au^5Y`;Y_^Q?WDr|3eM=c0{gaXTGO;Lq3w^f7@)C5(38k2nZt49qpSc?fWnbWV~!VNf0kPXw=<><@%#cw8@S z-xvkEKVr(D>cXZ|5T<^xdCoPX;SAv<&bel+k@=8U&L|j{>clF<2XGODtB;DK9dP#* zwzFTAO(6~gn2W5(MrIV-^d#W-O?18_$PXYaRKIjQXipCY;G@^!-!V_q>8qpRCUFh8 zA7lNC(Q=V)mpvJ&PH-5RzXH(Ay`AE~_+C!t=0L^S!NAe8nzB2L>|=PU+emBi?GF?_ z{zvYM9}4Bo#S@O9#RYgh05Mzi2sOlv*hh$&{I5ey>a4D^H29EMw~xnQQwJ2<(gUWX zH>N>v3_(Z2@K=Y~cqdcgx$ zB5YiP#$o@F(EjKiTH}LV^WK0vFOUy>_47A{>Zmu3)H*al7@3PPjRG^oaRr=UKU5cj zNj~R3(4kc%@E194mHxmqo&Cph;X&d{-KX}T(~kbvp@9ETM?6$@-&J*2NDT^st%@{? zUrbvsdOL#!m)O3X!76Zxr7#T2k7jyziFJf8ADPb8=;9Z8jTvTj7l(TY`{otJyBlL30Cxl#y51=T%l$u>f|8xDh`Daq8 z?Mx#@aQ2_hRV6QfmKV80_UDgtG@s~vF{p2c*PiQdO+gd-N>PUu7|^)^v}hQ_((S7O zHM%#|R8!85{!`c&{z1&1znY`PX;)28(&tTMjrC4?{|oTjC)$Me;avZ3vtMek>h(UQ z>b_SqecmbT&&XUUlapC^7jbWdpNcdha*5h+u9t!z@zQHmF))%+JW+@L!Uu66Zfx;W zFQWi9Rn>e6ZqSH0CTn&=3(^pFPJ&Ak7?Aeh=F*&2EaDcoBNtWS0-~`>!cu|+@fma{+2?M#UgPxy_4`l zB|m63uLcr9YH-BN7SKs|59p2_=5x6BtO|c(^G4__Fz@?}7dTWrDg{^CSq(~)vcmvt`Db|GW zseull*{5@Zu2*G+@6Mnt_Wl#lv;1Ogj=JwD*kZyO0(Vi2xyPuYLVQ){8`S`xR>)`# z5nDVCY2*BD2u9t(-&$C&eZ(U$4X`c}#P zZoR&bJdf`6_FHd8w)>`i-R@+t-DgF%`&)b2ZY@o#vEcN#dno3ZUn%}_IiJxrm?lGr zF5cgKc2O67;vB^%8BzX;A37)do_ zWFTs5^E4sI*Kul;Rk}ArL6IBbJiILFq((#Fw!YL@b3@$7ypN(Ldt2TRdem4m8fBYU z=G2x#aZYUwLoyQ2(C#GQN7jNvz&z&xFZ$@XABQ2r>_{8}hM-r8w;-sh40YukdD5Pa z1Hg?4GBWLk(O3oW4^eL#DUM1MW*`jTj}i1H5okfW%fXq-eRvkW4?YhTT8zENi&q!P)&V{h%Nr0dBi;@pW8mGPka;g?Z`UW*>L;|h1kBn7riZVUfjsAQB*GaDIP6w0nA20fyd^O0*_4%szr_p*Mx_1bdf*j&rl?% zmFMunImM%)NAY9Vc?P865jTS$k1;|*&O`ckB?z4TE{yzR>7=$BHk-NY-@qct(Qz9w z0z4XOH>^`YtA%L$BX>1}^KzFAW3GY+mf_ld6`^w2yqMd9SD|V;4NSOa;J}GELqj(- zx=%lcwxc1&+{n6ARlwX?>5Mk>@0w22IyBt??qV1f{S1So>%!L$!V6inQ@P`$%Bz>dJ19)te?g&mx$yN#R#EOX5D-Ys}vz)z|> z^9A`YisNEcsqr3bC z3|XCb>ZpsePw#Mn@qpeGtska^Gu?k^ve$N~JRnW>AC1gmc#-LR*+i~^Dw?YYzQ~oh zuA(Z5l^7;`ZZ-N|QjR|g5kx#OGQUQFEL2(2o{b~w(-93d2?nSgD0do=LnBpM?@T?) zmUv;Op`4lv?fD&bvJlnl8}04&SfgB;%LoIZaHwRifAgn=L97?osvn;4_Y`6g6tp_< zn72^cV7p>qr&Y5mX=AYN)35VMt+X}TM^#j}H=!b)KT6BXz=fc3>(dD55u0OI->0H) zI0Eo4h)MvTT%JiJlr)XkI}dY@B&1QxQ~u0g5Ww8JPV6qyjlE7Rd%oIi^?tlBGT!AN ze7*oD0Akr!ZL8Ur`7a{!kjHYXMg1RxH@ zdT?%MU~OahgTP-KolEuc+)ZEz$Jv{uVagQ)(xd`JlJ!;o;LRh^_IhBnoh$bE~C`RT{$IeF`-`vCR)rkFvySqLbx_E zpBL*f18`@d9%Tr?Jx!H`PA3fg(qc>KbZNf#bS~K)_BJEC0U(rg&e3acXK<_GrO_Et zS-lmf2XfQn+mHYO;XaE`#7ZENozKu*4dKoG2Wc`uZdiIJI?~c)rIEP=yC_j_uo)$c z#||Tc(dgY&GpjUp0Bu-_nh`+AAE0a*+Qy#c1}B{_a8w_ieS1RExFU9m6g zhb=ScST7ONg#=6V25!1rBC853n0k6ScbM}Bm8;(2ZN^SR+adj?c0P22I1BIO92d!w zdQYN-UQeCh!DN1iAD{`~GU5Wemwlu=v~kt&IA72V3SIt@gHK3W2^nfvs(1Ly5ZRwY zUk1}*0F%UKiDim(_Ek3rhZ!81@1qYcfJ{V@W{>F|wAq3!$E%j@Xz31o9Njfz6o9wR zlEoDmq>+6FlrWJ7tU$Va6xXO(u4>-GpjFKdZxgPuL@L8aeZhGt*aXf_I+C00)JDJ` z$eT4fu>{bmy!S$nkj|{Zcr1=(xBi}R5aQOyIx4-ZuT`Of2Z9hf7%S%CL1h^CPmeX` z%((jtfM$LZDbz4FAd@Ty9aFothvl?N2pucuop3gDfp~OIHtky_Dq|(jlswjl64#(0 zAi>NP5HLj3`y@#s34EWoJ`gve&>gvw!S~(dcZ>9|Xiph;-|6eUh5hM;LRwG?eK3*S zPwJ!`4!(6*zZF1>9DDOd1SUR6#0#k zPIY7YGw>%w6>KsVlmU+u&JA(s*9$+zwUPZY$gxJu0VHv9K0+7@wV0#&>DZaX0;yex z?Pzpbm8Sk(+$6_e1%Ko2#wFpg{9|~$zH$Ca9?4JI8yZ*axu9{U$0Pa4p&KKo@xhnO zmMbc1)oJ_LI0TX@euu1XHyl73r4Gccg8{z74;y>Q7b z_GT#1Skt6)mfm{1KW;(4ha*0{v)E z3J1bV?kFfg+NWbY)dglY8#x9$7r_nqx~~Bk*>#|Em|X)Yl#y8ih(-X+5&%&NN0%MC&GJB9;eMk4C;C$Z(Mye@Wc*mq#*OB<*#LVTOz3 z(BCI>CmslvpeEa8c^J5P_ZsX+z5RXxUIny>jQe5m5w8Uk?MlMLVdH1#F)~MBHqfZ>l$X^%!M{&*?dFBnYJZC4A4@4p!IgfciuS^e$RO2J{Qu=3lOT zvP9;fbTv^E?gDV~Pp9(3eMocxm{HF@>nJ(#Q^Cuw1?S-UR?&8=pzW?gt4?d1FFdLu@ehpJ%6&n| zsaZo)8o)R;tER3j)dr7K<<3_`ETy_6Vhr$XFtd&>#2Xl*IUqf`UrFlQT=wnmZW#Eg z+ZXiBw%@W~5zKRX9U(d{#P-l7r92XEe$eHO{qaU?e|ZI@4H+G}$HAK*^orfi{ssDB zEIi+8y^Wh=aHC#+J6`S$#I2TxgZNM2CzG{eaqL&De%Xz4zqpJNj^1N^pe~K*W0jQD zmsgNb5_X|C-3cE`lI65^brPisej14{5AzNkroqGz>`%_Wt>Ud;{nD@w#xjWsJ8@m&dL8fJ)Exyo*-2)O zbY!C6Dw?yx4p z6$!BQTszNx6ZYy9&`99+Ep+A#KwW)qEJXL?-EZx|wnBDX$YBZST7!o6)sT`t!G~T6 z*yT_sqCLzE&jXG17=5p~3=K`3DmQ^f-Xmy|%uSVn#QcF6S;pK7m>HQn`O1cvf;G#B zwJT$Dt`$IQDg?AtLwahgM7@-g`!m_|+jt2<62Z0_$cCYRRxd+!uxuK-uG4itNzDF9ma63)Hb!hQ#^jXgl;QnF?v{&vpRvD`m2v zeLc2K{)7Z4|>fN$3aa>p?*3K|#KV(Ke8T{DEMtWToGs zJ!V*M&me17lXE|X)krZ#3K*Du68Jf15PW9v+TZ~(;~}#v^4z`$OFyW?xpryiCZ`JP zbYJ_#MVWT+WjJD}rpPYP%*y3AvJBo3QM`Ibm#W6YXUCWfvRS8y>=FjbT?NRkR`mX-1CQQl@ktWQrGb8|&7dFgGL_evvs zEat6gKwm6Y!Wl@Mn_EBhqnZuIJr80H?3Dn9ov$VAfsldk{tZeJHJf1mFHIPiY>J5K zMwUs%8it-Fi{;XJRNY|L4>c>IoEu6r~(p zE+u=#Gu$Tk1em?JOCHk^ySeWGx4*+BJs9P(8(t$S2udYlAfrJCF)an5UbQL72t=L{X1>A%y3bx0G!4jdKZF`s zK;*!vatSxA^qvJGDD&>yf96ubG-uWzmIfd)%*cKZwXgsH4{?zOP+^cnodS;eZ(P*~ z$22kza|{u#IT9^=dQrrGPbEIWO0nBbKMoOnl@~`_y{5`sn8X(;V2{VzyBjbeNvb0U zIF$SmF(f5a4{I^N5WfNs;%@giRsT>yz5DdHAX`u|;ikX7g^NJ9at%aHwFnPkM6w9q z$Az~8e-J!XhAG0Q;_uvSD1~Y~UFC1J|0{@3NaU)uY?!0g^i5iShT9{G} z{!BA_P#F{G1Fpr>9epv3x$a`w&iQBl^wB?M*OrCXRZz$egZ67uGHjS5&w|x3)H~k zu$M?0oTJ;6%+1wlSB*^dX3GB{UnoBh10q$dDk_?z&JB*b8hLP0V&ri|wh55{^}Hwb#Ir$!U^)JewO z?l+0x*tJ^jJRK)!k2SnxHh zi&)36tEi%6&9KMweg(P$WEY+Vb6C}VF*aook z+N!OxTA*CT!C(T9y$CtB3t-o|OjXXNz2r01`n@^~|E7#XEe?le+-YGm1t4JHH!|PB zib|9Gcj<3X5oLkIWMtpv;Ga0r6W4Y~gN;lJAu%@#RwPO5$RnPV%0p62HQpK74|%QYN^iO=(2^1%K5l^3K`H`D zgq49r_#>3T2op+#z@EL!g!`i#EeIlALbp<(H<02MCHLyBLV83%QvRB189Aeew8U0v zWa-KfVdVlYEhV_$$baI7=26*5+GXYW${@dc~uty;A5_;ngGOdzeN*Y`rtVR zvPzwzh0*dX*jrLhBQp;zgcVfd?BNaZgxJ0`ig6gjODz+w2>UD`t+>(%UvlP4HL}Y@ zVE1bk{gm8n`PXry_D?dco9C9+;u%@BdbkSM0m7nn?uD%uQt@_L!>PAH`#j$%wXZ}hZ4-_S zwcDwFHiBh48bls;$6&Yd3SKJ8Jykx89O6L%F2vVJ_CgxiTE zV&?Xb%S89MU%CqmnLY<$&C25nc@~qSMB=CF_)>2IEut@ZKt|hAk#VEL`atASKf(=) zeLw{BkLh7T2Fl;%4*NRf5`J6AmKxn)c(46sV?(tA++$9?>^DMvy6koW0r6!2Bk2 z-7_%+EqYh47vtKS?x{OLQFoPE5W5vf>(%0MFTI_V(P$kp?H8=Z-XMlbFJB9tdYqz? zi6=_kXa0i8(O>RHJie!;b0*UrEz`|;UUuq4m@ ziE?8ii`JhpA!m5MngPZ=V`OdvWwV`$WfFbXAKf+PkRywv^8k4xe99*#oX=HYZ5FrFq@fB48fp|D1oRO$h)KNolmk`Sl?6oI+*XQXOJG2A6!wriVcB5f6_*OUc zr8{>k_sA*ZZchN<=Vx^RH*ynTSxC}~z)dvKYWg@x-+QoM6vEk40zemZK221|VSlWM zo_&|2o}z2?GW#ysQhoj$05XHa{9u)*{^0M|e9p}GJu7hWzK61azxxu1uY?s#vo{bw z0{7fXh(~fHjo>zbRk>+`It}th_|OsXg;j|9)iyo5m@5(Q9& zXp$5G*M1X8lum*{4CwSMSIsTQ4Z8H!{4=!YDQNYsl%jf^mmqgmhsG2?h}!EJlp3|y zt1o62*zB`tLi}9~dpVN3Gc!wXOTweM;gTE%kWxS=fg}>Sfm(O`YapldQHh(xlcnw` z-v2w-&qkj0Qn!xxr{aDo7KDw|ntAu&5gKo#SeM-o4ixZD;#z;=nfFuK4WgKQnasOg zdXL02(ll8(|G(k6g88S}g!^M1;S4-a?ahm5r1oZ@aW~Hla)G|_D#lyG)*Zt|`ocVz z=8uoKGf|oJy~nW0khZlUL{j({=BCqQd6!`#{+Aa}+(E`O*Bur2j?BS>RkArXF z(5|p9ZyKI=Z<&vgoP}i)|4fIF*Qzbv_q(p;RcPd1#O86lDDlkaF)_}iV>60IV=mzH zveuZRhFRL$Z$=FQ2oz{lp$}<>D4oJ)%+;GdMaNp?f5whm(Q$xo+9Pv2#*DeTmxpzp zg|X`H_lUv~=o@~%8$X)DIzmgS2l-O!wE1&X_|70uK$D&r2-Vx&RqKfJsk|Sq^tjy9 zFvycV&TxeF%-zo!US5OX)4O@_8w5`@Zgd=iIpo0z)y(BHIl7)Dv7GD06b2vtfC z40TGa0BW^RMuooM?=v!|OLIbGsA7fKZ!0CFkuT0P?axKi2_0otqFR375b3FhF-1JIuf9%MaZF z51@;|m^}bb55@@}YWM{m`PP#?qg-6oem9|nfddbcE>k{7tiHDc;;DHZ(Mv0BZ(yW2 zSsoEt??wq|saD)#Fi3gK38e15c5jl1U4}}G*UT2S#GrWR;d+tg z#{Os~0P$rDV7M>Gv)FLY9Sv)tcM4u6`hT5pLvk~%%(cMwq?I|uulnlTc$miv)H&}6 z^stDtff{xOp7CNRaKC#iuC5lsxP5uBlk%Y!OeO9fNi+MQ7^>FagZMijgvhbbEy`i6 z3Vd*+HW>E*wB_fwJri8m&u@FgEzl9x`uGv}SId3s4vtL9{=8LzukWPK zj)}z#A?o(|LC%Tm6W96npQXf4A@*WP6C@St+F|{%V}yWCh=Ls>xZ$ym5#{^|+k%=i zL$r@c05tvsId6apN4oPx{=h88m&H07;`)}{8p$0(a{epaoAxQ;8zb+qT6*fg*N&~@ zOnVw^beEP^Z*A9$x3NP-XdIiK_Kpfoa^D9`fCZZM_pW^f#8D< z&LwNBV{t6O4z7wMRb}(4XN2VSWU>x+ti?$o!Dl(pzA`R^~?#3Dh~w zV{RWGi$Z=^kj25e10-MbI&v2?$BzW=cKa^VXmc!tbQE+9FURX+Lx-2SWlEigjJRAd zX}dcBB{=PHhuj7c2}Y(>It&lgTqh!Pj&F67Tc`5@$T8 zfG{fLDN~?=hxdDh2j3LvTcIQHAP0lxi@m2qy2BTH19E(yq$lVF zB50rjNJ!ugK!PD*T|ojOkhttc1hS@v;?FqQL57-R-8?t9LP3Rf&3QbEo$8k!UXC{Bz{_$QMMeDNy$>Ky{&rlTQo0L3;||?cw$6rACH^;yipP1dxwF z*I|u8dZ6?>AIe84-4Eg2%>SUkUl#Do{{sCO4K;Lc^dpY({SWC=z3DEa@Ge!RG&h<JhT{GZ@I zL-1;0JNv|ccsOp~_|H0$0T7$t;-33Zg=(&B)$`x4J(?39Tm6 z(4lzqw5AmB8tYE+Hu{pss3@N?NrOP6#;Q*0S9z7_rik;c~>V<&hJm{+zkHHktoNIv96zeiccBNI?S09$C=mR zMs^Wad%^iIRWB4boCERbvrlIoDfPy}AK@7zdtA_lNiV><#8V#HcU0)ZnZM=w%Hi0n zN*T>inR*n4wA3Tw;lS~?ov$QR=EUHHEWblYEBQop%OkRb)2;n*o>xuVefe(8zFki8 z+YD<0FlIOj=)3;8WA9>=!{3~&D0iQHtoZ##b|k84%*&3z1;^3TA>D20HZp=TG*=5h zGBSuhC>47uPu{CoK)o2qPpacTx*5cC*e4mpN?b73W14T?^=J2URNw*Xe zKG*qOF(Qp!9bViOKjq-@vuIpO>rL;={-xv9;S##XoE%yVl54W8X}moKx8Z(j_z9G` z%k|O7i{w<|1ldHf^TPj+xRerm^%q}pp>#@EH z%$Su!A^>!_1^g2vbXMLcY*H=(2FRnW{1vhun|@Qg9;sIeUoZ6zU(62^+1)#2ciq%o zA$&1zHC+DyzG$5z1M!njYxtA#4DT`?Bin$sveoC}BK@J9%GTdd7C@f;6L^;C&X(Qb zschO$u_>OTw~g@SpI6VpD96N$+ugyyEl~F}VNQ-&2Lm$U{7~{Stfqa_eM@ja1xt>@ z?FS=#514&(>Iga2eucnm5Ze+R|DC@M*3&=Cz6qf}sTZ(PMuw+6V9%jsiS3eu>Wc&T z#Ci3e;J<69^Cg~WHYUxeweAtnI#X>A&Z-;PCNw4TZFgTp5QciWVV{N4d^XJ%8Bzo9 z_@LP@(ahT)x7z;`@Y5<487x_TRsKU294st`UUs2pI!gE<;2YNX1fE^T7cemIdItyp z^tu{yUSalx)S(Mb%kG$+thc`uKrvN2h5o1hs;4#O@sMA1yQa0EXa4#B{KK+e3jcrE zrLV7Zf3mWSo4QFhu){KN?f_I&mhl?BJ~)qRhs#)x()`^No8Mb5AP@XgkfdBOkdUyL zU%(%=)JfhN_!Eiu(*BoWiY(B~gLqgKYCR4}Ax?$M)H2=<%C7yHR#V{1e1r?(uk2y^ zP|aEtrs`#N=VUwKDQ*XGMT&9wZp00wMyXFb=HC`4qTk8PrxB|Y_=nV9JoHGH^?R7> z_hUJmv8L-@d_4-^TKk-VnInF)y&Df09W#LkjO{}DA^UfHm-idl3N#aRI1(3o*~gm5 zK5o;b8vcR>;Xb~GQg0N8AQ(}ND{pPk@;hkhJ%(Fu^go}0e1dv)kQ(;bqVtT{$E)K> zrv)jjdEESYKJ#q=GLT_(y)!-zWi2&@$6J-1;sU#_9}*K$5^!+N5IHAjjjeZPp&3p_ zZAWoxO#Onhrnk^U5*&%>jpbAX$Weyx59yMcm)Y%lHj`dgBkKB3=4uD+rZ(bMdI z=7ad#X+0qvBEMSm`?Wt0_V+7V-l#zy#MJ2t+2B$*O8h7y&=AIV*wo}{k49FzfO`JI zBcceu@h1B9lC%Lt5VP@vMHT=Z0oiMiuU?%;WV%=F4z`X6T*2bwfG2a|(^&7p=r2fK zF%u=4p9R4NmBQa7!@~R6t-yb+-_NrF2;E2Y0P?lU`x89cPvKk-;#piWd&KT~oHwqw z&vHxg7Fm1s>4e+LuyI2XAr2{vks*F>O8}hoD4{p;bE+xjq&G1}A=4t72h%zdH5|ob zkWdkJimI5$VAKeIKJ($?{V=jj-o@OMSthzPkp?rdvm3&N@me#uYam_I$N?CWKn~!! zFJuJdW%quIQm+;rNl2RHOH3^PJVwHSm0@5Z{vOQ%cD{)C9PbBsKm|nP|0=y_-eW(_ z!7Ezv3hyG^cJIMH1<%8St=@UMOrtOt#r-Jj{!t2kbbhP!3ReLbpjNo8OSlv=LXU?f zIr?kDvd$N^Pn^SK-T7giw-IH5d{6Q#DJX!kyWPJ69Uu$@6%w{6W_C;J z43gVh{y+xQg`r32sWUvTyrcPNLjE-Tp6D3l=#`+8L7?@<)G zUzZ+??0Kk{UQWlwK2pd*Xi9L|?f&R%A%&!5<$WGiib9e?dw)ThYB?J%z0Yt;!Tt%)wW&;mf5rM7UlMDItMLv3wcn7pdWfaDSqbGi4Ed zzWMcNfkR$Phvzrz0ag0Qss3E4K+WKpt{V&?Ii?8m~VG zEBySbE<;NVlDxY=#;_FsV4{1>Kbe~-A+}clz9|eD*)vgr^=29jo)vWlfLb93!}~~# zbU6|uxk!vOfL0lympBS`3Gy$z45H$5DFis8hoL76NO0|kK7j$h0cud38OKCBof$_> z{GPdJ$xMKW^ar9Zs=!*GCEke|??XI9+6aAdChqxyb-!cZnvQCUMC!-7UxszwjqJJb zJl<@Tj~c3rky(M+HbFSx$J;VIoX@lA%mZpHcn)_7r!`J!`vvw5N8u18Aqy$#`>d+v zSR@SMBs7fW4-es;8N#@Loy>Qa8fR~l_9>Uzk&$_zKl>fn=!}Uo2M3g*gnbq)8k6Ns zi|`KQ8U+ViKx|#O4foYsKms zk5Be5=d}u$9E(d_>#uc;mOGUc0+AQJCxs}o&HL$_M}XGz%=Q;C8C)T2XRW%zneC*y z3Vk;t5#v^ToXNu6dyBasF)G2FxrtsA008i<@^#|7;BT2>Mr$K88=GiCY^#M^fs-BP ze&IpxA4<~y0LH^2#2b@WNLH~4%OF++d|e|*1$Y#PMB7o23a~0cg*x*KR3x6k8)D12 z1%7(ObI6Y*huj`i*{)9f_*=9NphTxdBo5+qxyo)T!lii+b|t^|Ckl-zw4ysP!RO2)@S!TM+y#<%hlJ-#Kl!24C8PO;4MJyhnu z9+_`6{`R|^S>$u}_^v3Hs=y&NnzPyArLbs%8~zUT1d`_>I>Y;Lk1zR5#eBRnj6to) zuOSJ+ul-jPaGRs)z1b*oct4|BE>oo#6=>LQw^fz?45jWtUqRP2vZ}7Xz!(37FaD>W z=X(wABsZgX1FrD=(`b!+Jg^ffimG`FGjL;$grzRuYl`rbl^8_8PoBU{$WO>veSX5D zl1BD)AbE(3`^rzg>O;EbC${1zkoWGsN~p#dCUQff6tTA*SG_}Xmffg?u!6sev%H2Y zB!%OFpyE#jMHq@*C8~LT%YP^Tc*G|u!at4=_(vk(A5HthKjgSXFEM-M9|vKtg@0VH z@M)j<$J^gl5WnyI<7g~;xBTM~RCGg!d*C0Bqjf+7HUD6)nSdzwl?L4r<$slb+>=uL zgNIvTt10Fm4cMw~#vSsH3fW675b2>ZM@TSKrjW)LD7s;F>ia4Y{?UTx0{$`afqms4 zm*Ne3`ZQhSs%rS$h2KszCG#EC&P_D8?AtJIK_k4E7 z;$h-Ho4JJY8_5SPl(wOgnNV_tnlh3PQFy?$Dc1}3A&-bYV+MO@Gz{FjocUC&xs2w4S6K`wP2JWltu?MXU4cTEl*Bg>=z5j3kxcT(`_v&fgou%;KOjDx8jibs_HHIj{^O+;Cyox!lKpp$=siCnD~mA`Yc^; z1Y)yGW)2QdW$d_9KAV=hIf5_OXwA%zx7FJF3HUk*J``yo5BCn zF=7cmvG!8E8vM(|xn&6Lo{nQR1laU?c)$Ck4F3yz`g4ZPC1(Bu` zkNhnCL8Yh-E+vsgi^6+)^cNM%oAW=QDG%cr%O9Ncfprxh2_1%=3|2Ps<-72cd-{9L zDuZtVY5r&fy}vy%sJ$W6F34*giZ3U#cZKZQ>jC-!Je-YUC~kH52=f$tMg*`smc`Sh z7@tNSX zp&*cQGuPvn=sdO?lfl3UpToL_`VRATjHKb{8xy$G_;M+;bc_aWns(mE{1Nlo z$1m`S%B{8mAL9d{Bw^LySk0up2TLTM;Dh-Amz7*C{Fd`qJ;KRt$K77O#Pdyut+xBD-Glgjm)}D{spjg=i=I6Oxb(Tk|iB={H%7Y zL-qy>t%prN$nM6@P6fi3lHErY$Q+-JD3I1k1R?0Nrx!3RRWJ90r&`E_qBD=?9~R6E z@9|mIy<*{v;XW3w-v!3u%U=cjb9%@+j12j|!t^-@XKXLLce-? z$R$>VJJ3l)J}jW;%$Jz!PwvP#V~2?YuY=?+R_y?U z>{kg+N>9Lr$%QnPk^s268qe(gvztU>3@fz_Fx4I*?wYq+>r zYq$n=JwcbB4Kuqnfp7PIu3ip=2HJxJl29A3a({{-7#hH<2yDZY{KI~OS>}ern*VAr z_5aFrZ-bzVNG zyt0pR=bLDuUO%(HY(`HzKzX;P9l*LH*(M-WBf%}WEGD{*NEKIbf|UUTp+duN1cms) z?`QG2QC}~Qa>iSsJD#UjFJQhybrgizu8@yLx>}(s!(}eRfV}%K7Az3q4EP=qvJPe~ zBLyID+naTQQXCh00&fHahWL0oq;UOh&A2y<<4MTrR{89j(1#-B?09tQ#%qD1YcM6~ z?~(qk5e0ppYNl7|zK3|sT`TQ%zQ#)FSIvssQt2JWo_~D-dhWoQdk1o;@(pqk6NCMC zx1fna{pyc6-l#uT%Wn*9xK9?P8qr=r#Z;WhURFrad1Lv*7@^-`+x5B{zM>2trvKq< zX+y9!ow?9MIxTDdstYbOVoTGnA6aK_Uh&DXEj#!Ty`AslBa1^{bACV&&Fyz8)VH(k z-)oBtT-LSx2Ag%QfVS0NPKQD@?M6A0^-%+Y%Bu5M>U?Vf{J6J)8~ecGw&I4#yaJtS z1azwFy6RMN*f*+EA%WyIz2-_PqHNYE1T_Jf4cQFt8nh;WPhrOV6S!i%7(t#U$Vw{X z-t8Yu9vkA)t$>n1q^yERrbwjx(8&BAp!VOSVp$b?QLox=2NJFa82cKDY^735HeG?b z9mKZ?{ur5eF!TZ(IyQJ>)i|?%jc@n+jQR^OF0~`Zi*xgkQy#!SX$9|F*94m}B?qW|sA|ydG%7X!#b*L)} z)=>-FTZAfQVKXw{#7&51N8qjy&3vPb!ZBtm5gb!#4*xI2u_rLXE;#0~um>EwA9eeL zWBDpLo{CZGC887=!=mo+sT*D#@LQzV{tF|UU}djWI?oZ8M(uq*Y9(O3^$|<9MsKRZ ztM3u7GR1h6&q6*^AJ*~Q@$e3bi%zSH0Mk#bAI`f+sfr5G8O7cruv=54@5Wm!fy0H@;CFpc%vBJ2=ULXqN&*8Q881h4URD@5%h(1w# zVpw2-xxWCPcw)<4e@2h^^ckuYK3(B)L z2sC&8YK|qO<_V^FMSdRUpVNDp56!{Ja@<)>j99vW^w39ysaG} zB6LvF*&l17;cAGFVZ~(Hlb32~=o`2R$aMB?0l7kAG)bixCD|C;MLsez{EUiF?znWD ztbhSS0gD=knHvQ?-YtMA`@XJF1c(YjNb-&0u}QFHj4ab1&x0QonKA~8*b({a#vS~2 z0#5O&Zzu5hqb~v7L;!K_Qt#p?kRx*c1|+26fO8{}Pi+N21y1~Kx)5DjOLgc9jBT5oQOc`bN>sE*5-??J>dqhXu( z6u?;YMNN-=pUhXWo|;|312P33kjWTA0BC^#sKjUjp;~?l?<>(KU@x_Zd}@*^myBKR zVO5w$GrI=28c83`6L6%ETfw`9mq0rvw|d~egrVRT-oL~M zhU)_HLlSRsQtfa6sA)&f2OhMCOX?Dw4>a*@_sp4Kg#}J1Xld9n0zAHV@9o69@nOxN z`~0`uS56i!EwItxWnBzgZl6;nn0ziEy&lsdR}1dJe;TD zwQPZ$EIJs1cn1z6iEX>J0K(PUg6~Qs7|7SL606avj7Lm$7Z8cAu2%W}MRrT#8ITB= zJZoma7|)*B6Pc>Sfb42!S`kz_PX`%r*6I5``kbsi8a@eC#v^Hel4?2Co;EkD1J zASF1U73N_$M2&9c#6RZaPCfy+_HamV`AH1GfN3I#m0%#*@c7Ay%df@TkWH9h+>FwH zZLjHD<`z8#l$)PLFk{30&K9#8;pqVZANiTfJEZKn7n{#l&{&QmJ>cv{Xs`3J0)Y$jAwU5Ie7>;}B5tvx>0T~Z4^-F4T+XGF9hEOl z`twhcyu7aP1q!S$f_KMMMfJaqb{rd#MMMQ~;7H@5|sMsQgOA#q*l)IuvK%|zMgk&Ir zkc^WF1WRjFP*K#_TBR*jRNAUVO%*Ry`ZZQ6&|*z1DgtV>s6j-rQpEfJU3;Cq&Y4MQ zzdqmd{6`P_&2R0s_uBjHv(IH__DIZf%8(oBe&VNJk#M)L`SQ2=$yEJIW(ipqKl56j zzLl!n)&7Swm=t8?W`9A*^jsxxT_&a8dd`%0vW|@1f?>s=SIurn??-QiJAeO<-W>?9 zV&y%x)qR%}+_)R`I=pQ@HM34fp4?_|v9z#n1J<_ARiaKqkqh6UGSu8>Uueyud)?s^ zzfqtOIQ3e1lUOKNieQEx?ca=*K9B`{-9%LH+?O~PKlH*b=5}EM=g|20)OjhshjRfFo-#(LpFV|o0+T4}up3(LiwQl zeK|4klh&Cn%Q_X6+o@#x*|bF_%4Yd=sha}g*T4I7lQQtj?FVxxF_he8@c2^+wgj)t zV2^RZHcPO%eYfXhchOlz{M5{|UnjKKyZc-vx4+EYOC~*Yo%bSVuFUo1qR$K0>%-|q z>zOX(D`6Zi6Wx&@3lj1JwZg2nql*&uT6m=!Z|C)CyLYFY4|*+f9}r|+u&cV}xMNbB z{Vyggn(fXRf9kbJ-_LTt{P7th+J3M=KJH?Rd@RC3Q`&xb89m8Z?=Q~_c@U|0y399) z%r}?*Ub@+R#Dp17rlMigE6UVf3x7%p+V|P#+3*9HzA$-|&(4z1xRtaW$o(D%PMQpryVlOD^Dwzyvw*)daWT)3x4*;pI3I9~>v%*R0||J*&7#_FNX4+4khb`IZ?5>aLhG!m6=W@-LH&AZC~$GUz{OJLh&+Aiwr- z1w}62%bx6iFK?Lhqn}NTdAB^2+y7}9>^kuE#~B-_Ec<@y9whm4!ZG2(mi+2kbOvf6 zJioT(;d=7AVvTrY-c0BUxp%uWP~9u~`yHRifNIo}5^FN{s z@q3TTv7(pAVl9yybeSwfyq2nZEu1E|EnEZk(_tic-2Kj6y!QI=8OA7iAkY1Rx4Lhn zxNm;Roff4uQcByK7wa+k3J-wXF*%~w!kY=qUCgyzQ_L|nt?vjvx^p#SC=lHYG;-0 z7jh5{T;KMMOX%D&N3GRg3F4Az@tC7n3@}GZj~))Cugf^IeJ|t8b`B+lM{oG}WXIBQ zQt9LFR^>qM#BDx%M!rrdD~9G$zMj^`FOQ$rTG?}LV-DxEwk$qd#&#b!NDb0U@!b}` z)40Y>q2I`yLirJZ=GY|(KV8o3`8_#g(iga!L3b_UR&`;5n=ez?K?Grk7Khn(_fE$R z=P-YM(l+@$oj<=zGh*}Sh;a3$%u9RT{*^~b>;##wo9lYI=g;9iL3H=R3?_4@8_jJ$ z?!)BPPdcf2``_ihf?vM=pzXAu>TLLQTP^mFo|cJ_BXUHqMW2($?b58@_sjhJouB{O zFYNnpZ1OwOt?jaSFV9jsnEpO!>&A4%QMy*X-zQ67Z*Tiou`0b5z0Oe^PJQxzUpV!> zC)m-{Hx0wSroQHT8492B7%-apT4l$(*-hqE9>4aH%j^V(~=Tf|%o70%^!fEZmDLSont#;kR z?AmML)dZEF(8<8Fw*=_tPr9A3H0EtXulAHL_RxAeOG%d6f#OdfGHxbAK@xyj+? za}P6H6>0kkE#qyX1P6@n6t}uI^V!AU$(qjwe#wlseSnl1o6l~`n9shGF`rGP!^4Am z*!D~4>2PxMpMt+$=CeUOFxtM!9hq`*e$~%85}#ST_Nuqu-~KT!GRGZBoo$!(W-eR) z|7k8OisrIwq_dgJDrGJkO%NG#*;540M;YZ_h)3RX^emK5WMxccQ#$DW@Cz*C!>No< zXZVLNI~G!r8>Ve9@d4-U=i|-X^^VP5SKOj=*V?wnuz$4H&0P$CmZBu9{R!;Tq-(NEQEqdm7V=6Q6T>(>``COcW&XR(=i@>$_pDf6ulv-OabWl0z*LWd{Yttg zyA^e9&TZ+`no)j_u0fAf)WV#O{{B(S9`C>GyuR-2*nBMiO)6zf58D?n@4v01qxR?R z7v$ZQy~n6a^ea2ief>U_7-Tl`Sz{r)?+)58I4Gwu$lO!J6z^||?~M-P z>)s{ker0Y!=aNpzoT9ML+_A7oj|J&>8Mo8J;~_qVoX^@$$0EkbTk7@v<*n{NrOs+WN<={)- z-?Pfx*O>ZuW&AU%jD6*G`d8YYza)+h%Q&)qUg@Vdvihl`cDT9@ZSTJ?J)B>ezJdwz z4=<*lU^!dQFqH*`<*}SRi9VApA1)$oX6p+}n&u*+0G4~22iW9+OB3ng+#eLe`J`jm zq>due6S`7!^)o?Ru8`~Oq7wN!*gJ2z8NIHvc1DqtijjaVrv2BAJNLRAG3pbIz$hI49CGFBX2=>Bxq~B)y3@#+S zl#QVsG?4y^ttZ?>`T|=X+)6r=cNBZWNzx^3{oqE@yV&|me$vO-@bBODwN1j~*Jg30i5(v3V7EQec3PtB)nxR7)KTLaucx{^)a9c?0gk*yJKCGB!d z5XhV7d89+xa;3Vm-Y|G*0q|dOefLlmAAIrXj^GK6yD`83Hca59iX3{U& zR>8s783SyO!v&;M*jB?Oq!nzr-Y!p)>@ zZ1TC-U8Dn#XaB;5q!ny=lArYSe(Yb-N!w0j|4M$++rEhgFDHG5O;!qPA>GYZ0tfwr z;AdyZBAvx{Eu191j;#@HB>i##`wDUf1Hi3tGwHjUSLb~>GV5z$FM zWa|e9X9U4(Y_cX`E9u`x20@`P>C#ce1TQD;HJbLqd8BFC;0Dr1#tQwkatT8Rmh{l+ zK`;!?C+#|eJ4!f@baN$kxRvy-*~A7nk-k$+Z1679!L`H&7m`+{vBOEy+&cOh&Lcfy zE^)&7q|@setCELw1z%Kt7j7b*as}~rp+3^hi|~V6Nr!QZ+ZQe*{p+>#C)`5XkB{Px zf(u9smoN`V9@4TKnFrt`X+tAp2A1@%KVqD~Eu>w4!ajiWNSEA79B?D)dL9kR{M|x& z+)s%gE+F0cGvbGLkv?!c{R}seetrjI7Y>$F_uZsjHNELx%7zZvE+HNN58{D~NY84c3xr8~?qq(0^GFNXTHt9HTsUd;#L-g+jG8bZxS%dkm$XW|cmyvyl7BZlI+XyGE{D`Zej!agYXhVuHyS+%X}#-B z+X`vDZ$et$SVsIOuH+qzDJ^dlds%6j(U9(58v$v|7eHD^4WtqL&hqVs7-sZtxBWO0 z92G-a@@+;3^az4aopn5<)+>zefHdYW_xH6O-qY7M0MZC1m^KYkkIn~p>+z7rH{7(z zrd2`eakbGZqt_taAMZi0x=8mz+P2OIa%OPaRggx%#ppew>wEc9egbK4tcEoD7a@&r zJEXBx<#Fu0lAnNHcl0duhNEEz=~Y^8a4y6&LO-vBv?nJW;`i#EkZND=?X^oF)joh8 zaK7gq>Z5nA2NE@sP9*Nd4L0npYK?siy^fxfV7TVp-rx~yDi^4(92Fc;0RxGIi$Xq zLmJCcqj${u38b+MJJM4nq_r(G`W>Y8HbYw8*N*c0V7#gN9b#jJgg_T`-qec~d$ z1^Udmc=50jbB6kVf#aS&zu~ zr3{8NmPwH2yVJB=zwSrzy^xOLu6=#X#~Mw7LSIPBd-(Vu_(vdPeC!FnZL^?lPJ6_( z4UoqC7NjwMqo0p&5~Mx!FtpkE_Bqj0HKe}RK z_c};@AAvObR-+U82f>>zf|1Z$jxK=IcRHjVbw)pgUUm5%gVgu0kos#nzfMbqgNr_A72=a9N_oNcOkXDX4=O_2b^rZ25GN7ZPW^B zuYCe(^ur5$uce^}TzmfpsqY}p-%7=h`u+e?-xCLU>*qjw2lW)@%jD?sqfp6dh{OVsXwIF(WYGtX&tkS?l<}iq&>dX=xw9DMhBhh z^IZh#{-}mly0$HXG}33xx&hLX--R@)F2jAKqoJ3b?{rA>U2k-c(Ie1ymv4<}8=+NB z+XB7gXq#EzGy2H#9sF%y$Kgg_gLXLI<4qfBG{I<&Q5~cn3rzd5(VdXSvf8viL7%uf zHbFYV_L%ikvmQCZ$9Ig;WstV=a_Dnc%C*qDj(%kMRzROR?LO0fYqZYj1tt zZq)BIAInIi^B|p7rb1g?ZDr7Fj^|QX-`(0wbrcHn|8C&3MlL$(|&8T&gccp_Yc!{8g)OzM|FbHAfwZuS6%dD zA?=}w&}&Yc0qGdO)aVD0_7LBu347>fvo3|Shn_R-Wk`GIL(`TN`lIm^qseFbzS;zB zb`kVG%hNPSkH-1XCTG3Tw3VhcL)xN0L)xMjpx2zo9!O)kVWdBjmmBRj%J+C4q%A)K z`oj5MY+3@^>9qSydkoTgpMtdB4UpFRp5;4ov@f{;Qjg(~dW?qDV}j-TvC*B7di(}b zk4GW(=shL~-g8kM3F*1|ZLR0VzDs20*z9z51xrCkU8(^;Q@K6F$z&TF?q zIwn7YbSAuDyf5W8NcY?0knXJ)A>CUe&i2+#korD;j;9_IJk5r5ety=pDO}c0(G$p!0nlpFpjyZT*V8b|>_J)82-(yy+Ks8Zgm<3E&xs$xs z0IBv1Nb7wP(t6jLb?RiF?>3_orub6618FInje1<<+naB6I;8PUfz;#bsa`wwJN~-q za%i_}(WZ;NcG!14T>+`}en?AMXVz^-?@#j{*L}~^JCOPwe2Mox9@6Wzi;T8F8tJfN zPtO^hT;i|wDj@Y;0=?v7z7Nv=d%~<=E%o(|hcxEvj6Q_4l)=;ezPtv~2<|fNAxQI` zU*@fMmiv1D2hw_vPx#s{gS57v8{Iv_*RdVaI?88y>R;i@I~&sSdQ|#SCP6xiYmE}K ze0eJ%EwA%zPyHe7mobo*w-C~(zBKKdRX*P!NJ}{t+T!|jG^8Fsf^@WBG{^VGuc1#} zzNd`V8~wW4m;4%}rIgipj})X)-3f)q5u_1}PkO3?v>i7=>T%AczPw8ywSFH`>xh)E z;~hxron7nC6*n6F6;j`SLjQ8@_)6Nh?K_aRt;}cz^oh&2+qBtrKHm+Hwqqlt?Ra6X zr-SDC_y$2bn(l|RpVvZKTi1H;aUi7HqmY*TnOUEl@5_4$(((?u%xi-o)uuq|TVu2s z(vtrKZFVjC7*dbpzVAKCA+i1Lb^Yijb4Jn zy>B$jPPxL@aXa*hYsa%j z?-}*E(zj>|q~qmkNb7jW=ns&_ycN>69eb6p?Q}@Bi;bomt+0GMAT8x%qhO)0?VFHB zdLyKJVI`#f{EX4@i+pXvA?>Tnpe?SIw?bOS(?&ZXjc?S|KIXfPnjx)iGo-a0ag8sz z5z?qu8@&ywNB*_mdNZW;{>EsX(JPQfFl4ch;KxQyke2snNF(TRosZzRkoxX|bpKAf z-qQ~u^<4^u(J%47PeJM%+~7T`jc$h2_cxIG9(|+t{Qy$mf}6bWGNb>2)OQo4z85!o z-+?!K-z20lZ#DV?Qr|v5^1in~x-TF7vG+LT7Eg!W>gjPv^PO^=*REdbsnbvWXu8Mf zu%CJB0BE-xC3}AEwc2IgAJP`iCoJvC%J$UV+r3`yIZHJC=Ko zsdsw%1k!$4c9*YhEu_9j-tF_9VzeAm>p?3#od9VpQy|@2%OEYe&o4ba3aM}PuRQhq zwWsqT-5+xx-IseHEv3gjK40#=Udw}4x;{AGXg;K|?1Hqm`un_gE2Qylg|y_UzwxvO zQjZ5HR%ycho>oE{-!qWLx7n=2DOSrH{h+4{AdPRP(Ib$?_X?!3?0{Z%?f56O)zQb$ zYmT}%`Fy>NE;K4NI`Ox@-UUX>AdUG6NMn8m(t6*5!g?XC_X|kt?edV%mv8hrV|{A1pCIHZw|f;7_eA&qn!q>&!;xGygO zsrD;KW4<5Kn4f|)=G~CS-1T=p<^v#&c?9&5i)9M5$`I>cq^H{;jsA8>qkj<6=wE|0`kj#W_-;sRJ8HF$eki2T z{|wUT?}s$L4X658tMc<41pvmuS@E@+F>)*JQvqp#x%qh*lB z_XMQzeGF-j2T%JR?+s~>kA<|yFNCzmr$O2W2d(jR9Hfz+3~8jpA&qn%wAaP=Gf4Ns zPDuOUz(4t@`a>F38dB>a&v@T&Lh4%wY0L|t*ImgsKpOM!A&vPtNMn8x(wIMiwAbdY z_1Y3hqrVl>=Z|0<->9|vjlXG0qOGp22UH2OCojeZxT(a-#gKli)@X`i09!PC`{#&QFsvD^u1 zEE^&1$+sYlWhbPueC=6JgCULJG)N;D2WbSiLE3*$LfQvM{MAP=-)Iq}CEo&RdACDa z-o22P_ZR2^x6ij3eF&+?=a71If6jaKhjbsE4e37G3~5gu(&FR$CZzEtq4!)J^C0b) z#nAgsdji_!Xal7E@;vl_)Am4GTd%+Q+Kz?(;jGn=)_Vn{wY?6h?-_sh{qjqrZ$0nh zn*yoFeUR?U{Wf~)4{5z)AZ_Inkk)qk3swrGrObxZV_s2dP)K|COh|k8 zTuArF<4~(>+aL7|hN={1n{=^r5N)4xL>xbj|xv|s*ZbTYwd zET=*m%P2@=IR{dYr=h*Bly{&#j>Z#+#&Vz08<6Jv6w-W0F_~(=oC;Aj*A|;03WD~S zwHMW^^;k$-UJq%$>me<#<`o~+?T|))FGL2)dj!(xS6jaAM!O;P_ySUo{SegS1W4OE z64D6DjBYk-3#2VS3rD3oNIe=MZSQ@MwrD4`+r^jH>RU7xQjh11{%Q0>cB#g)7@|Vj z_G3t6z8#`SwAGgHb))<@d{lEGt>b1$qxub`QEh`XsxD;GelCR6WBxWD!S5lB;8{o` z*aB$;Z&(XNG=dqBM({MG_5KCYdV9U?ODTi2lt&@8{tePn-hicbo|JkeEy85RO-!j7B?uBxK?na{B$JQAiPhxFy zT2IsRjCz~3k7-94<(svyY5k1)o3+5SAx6W@I>NL8NF-PU8e0e+H2O&Op`msaQs2is?I@o(|Q`^ znYFiReTEi!Gg(NwceGp)p^+^iL* zRT(ACnl`Q8Xn|Q9Oj~Glty!0t)@XE#S(lo&%xJk;SD1E>(Mq#6nYPO4akH*At=VXe zS=X7i!KlTo8%^6}wAHMwrfoB7GwZvi?K0YJ*1e{EW)yVtqfWkCp(C-ok$kU0$E18R zSgrD%3Z*_~J<7CvBl(GT_3dX`f1?7k4l!+*k$n1CeG5$+Wi-yL6HF^InrzmorcE;{ zF>ASL6-HHNO`4WAsyFKb(;AExn)O=KmKZgf^%m2X8Z9&Ha?@5A-DB33rZpL@GV9}} ztu|^l>l)M68Er6Yi)kB;Hkoy+X{|=v%-Uw!yGFary4$q9MxU9L>CVr8M)FM;-TU%A z7aePPM!n4{-+WQ4eD6gm->iL2lW)SPwZB;lOq1`%sCAfGN0?Snq$v$)OxMa60`7vu-f0#b~2hH<`B8sMW07OlvcG*Q~ot+ikShte=@C zmwno6^8F;;gWXN*X_RMH`R^f5Zhtof$N_nI_cKeP5Xt-xrAS>@YL>M_Eo(5$0O z8)r1ZtVO0xHkxYIX{MDJm7BG~v?`;dS<|M~8!a$vgJ}zmt~Kit(;AI#G3!#(mKiNK z>k8BEFI3YnLMPPW|eQEskOIJAG021TE09mF)~TjVGb%A_xoH(fRc1|^mNu$4>jKjnj24>pTGN&oHJbGn)0P@7GwX8G zRv6u5)|I9;8LcwwBn-!&S^JoFlu^D}`q676HCkfUM$_awliC|g&AQCA zVp^lo zEoP;|T#L9F{I@hAxMU$SySPBLAQN|crlC<|3hz8e0O6XXZ-Ta_KXh9MTQ zNggi3cuitk&gQ&G`8GXUKK_yN1C*i+;#-hk8Ql_I6=EuF}qcmhFKSpWFP~^I}HA8t8Mb;FFYJVH0 zFhj{tdB?_;*-}o1vIs?1ABntfN0Bv1BIQXGS&1Z4 z66HAoMb=S?MHFZk2M5 zk1G#LIT^}dBu~G1p4X+E6XVK9D6$SpR5A-8xz$i2#@_m0MyFusAG+ew5$OW<;mTjJ(!Lwhoj`x#gzdlvMNmE zHAcMZF$ceL#6>x-?{0 zPL5pN3q`L1(`z{%^(D@ob2zNBUIXf*g1Wdon>a6Jz6Kw z=$unxHV*?vPMq9#YSD%AHzxq{$iErI1e#~0%fr;!ah~#YO)6{|(@@8G%A!0R(jDeO z4(_DqNr@YZl+1*a*cCa-x+=EB7QwFzF&Tglav{UNaDL1rJ)CP!wh9kVoq6dzArbQc9oS@Rn?Tml^Ll-!v8JDZ>L~RyF9h&RCQUYpVuW%acv?! zYfdtB6eUqFE9m)`C{;DpGc)tZ{l7ay45+KFs+^sunjh%o+xN1|F5`M@-rzyS6B9El zYtxC;$kOVvL{(|JvZgw;%qgoao>5gg)14FtBui820R=G=?V4SjN>n9EYZEcqc@S;3 zBxlx`=DbVGF0HFf#l4-JPR%cFZ>p{-PZXz9rPZ}F5~;AH%G%=6blU%=PrF7X=)Riy zVUG0dGiz&W%0}`WEbS`_wakpNr(~tMP@Py)m#(Z%)KZLlhF0vBf-4UHC{LtI%PNYi zliDrA!pi84Ih9pam9>d7ag^?znMfBW>dO*I=~(t+YHnp&qPDn<#zZ+-Lk_W4&Q!iS zX_mWA&Q!{+aT=A&MjaYZZCV={v#}@kX~PeXve~8O<>%R=O#3lbWT`gB9*F1sgo-pG-O)I_S&D*gwshJxMdKVoBes!(Px78g5Kyb4wtIL^JI*u;eNWjFY?WicNF0V?&UE|iu zj6$*0RaahGmyx}?j+;uGh~fohOnvNjo%$@q471IQ*=8oL;u%cBbt$I5SOZh@WX^AY z5XSWEu@f`VlI&wTX6<0~xQftg8Oi0znySj!LFa6gxKEq;m8MGPSOYWN+MDnS2ahYb zonMwwMjkG@SCgsA8b)0-F?1Y)1?_5g)wnZ{cQ2k(S|4;IS5}9zFSo9WldI))5R>Lt zCaTH4w>zu1pKtW|(-C9-vlH`+%lz3|bBI*V zg@&EL!(lo(k(yIk%_&dM!r!6{sWIDXMe9Hf&2r&j16kZEiZ5kiO(p6BPSie=JgM4; ze|)6Js+C1)D@&{7^cXA0U9I^UNBTOMD65=NSr&$@J9|=^Yb@W0nk0RkD6OvZ6Md4| zJtk?_)F!HCSbSOCrW20zz2$H_CqvOp>B>2Y@(y(Nt+@N=O-zMV>B=PUGWw>-S+BUZ za%Oexl%@xujEi{H;hET7Oq#pYTgJ>aGf}MbS1LX=gt4XOXB6bxz$KzZmOVYFTej-! z&)B1`tbOIo)?Hh(#jvs2vdbG*C4^Xd=5pSK85da5kd?Wz-O*PgmrE{A*JPUHj;oj= z_XpFtShhkripyN)%&TsbGcG{Voc=Vo`Dgvf1XnsgHu}T+vFTNbi}cRP^+=>nmP0mf zDxOs%vw6Hfqq^iU4Ld5V*^rkcj2^mM z&N*_mBFAGqhVYy)-X?f|)#op3!kA=IkHj&oO8(CBBo-V6Asbg7htVhq~ zg7(ZnbB>ftgK_S1G*o1mj;Tpas;r(_l{kO8td|~IDAoD;KdTanWXO}NY6)eEn?tl< z6!OOvGE87%7%jIZzKHfx@eCR0Lx+Spa2o0Ex6(y=xf|)BaOR8|vh(MkTUt9iG|K3% zu8HcTXvopgxSS&Lgn;SX=;9`Okm0k74KP`s4myTg-aZ(CX82`W8p?!q=qp6sJbK< z%v^9~>|HW<*c-*u8QIlYRZdLQ*3C&|lsZwLAx%omDNRArg}il$@%UzaLB+RLr)np`W& zKY!rBA;UChNsscY_1%XVx&D2KT&Azuls(+zQCvQ@5v0>dIzPMSo~+ALdihkof35301f0TWvx@n5bTAPbADkbY$KT`mcML4A-{-#n zg_OS^PYL6xe-A^#)u*76TVMUCCx`OVK`N*Ws)L!7RvA?BTL$C#YerB*wp^E|AQ-~C z1*ftN38uUE4K4}3hHnv`HT=#|T~J0T=LMy~9QR8I^1i|OF4Czy|D4P_7Af>na@O*< zl$;{H$kkfTU-O(k0k5&{*OY=_c(8xF@~2P+cP@C<5MK}s;=>U6L?!*Rjik!)Tn31Qr@6o0PhJ+2>W1+^FQB3Fw>PT{ysh_O?&%4l~WP)C61Bw z8s}8Js)PBlC<69WlK84=#U%37QC}H<>t8d7aUMRh|MJnLj5*|~CZ06q&1` +case $MINGW_TARGET in + arm*-*-*) + have_arm=true + ;; + i*86-*-mingw*) have_x86=true + have_win32=true + CFLAGS="-Icompat/pthreads $CFLAGS" + PTHREAD_LDFLAGS="-Lcompat/pthreads/x86" + WS2_LIBS="-lws2_32 -fPIC" ;; - x86_64-*-*|amd64-*-*) + x86_64-*-mingw*|amd64-*-mingw*) have_x86_64=true + have_win32=true + CFLAGS="-Icompat/pthreads $CFLAGS" + PTHREAD_LDFLAGS="-Lcompat/pthreads/x64" + # SHOULD BE AT END! after -lcrypto # + WS2_LIBS="-L/mingw/x86_64-w64-mingw32/lib -lws2_32 -fPIC" ;; - arm*-*-*) - have_arm=true + i*86-*-*) + have_x86=true ;; -esac - -PTHREAD_FLAGS="-pthread" -WS2_LIBS="" - -case $target in - *-*-mingw*) - have_win32=true - PTHREAD_FLAGS="" - WS2_LIBS="-lws2_32" + x86_64-*-*|amd64-*-*) + have_x86_64=true ;; esac @@ -96,13 +104,17 @@ then fi AC_CHECK_LIB(jansson, json_loads, request_jansson=false, request_jansson=true) -AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS="-lpthread", - AC_CHECK_LIB([pthreadGC2], [pthread_create], PTHREAD_LIBS="-lpthreadGC2", - AC_CHECK_LIB([pthreadGC1], [pthread_create], PTHREAD_LIBS="-lpthreadGC1", - AC_CHECK_LIB([pthreadGC], [pthread_create], PTHREAD_LIBS="-lpthreadGC" -)))) -AC_CHECK_LIB([crypto], [OPENSSL_init], [], [AC_MSG_FAILURE([could not find crypto])]) +# GC2 for GNU static +if test "x$OS" = "xWindows_NT" ; then + # MinGW + AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS="-lpthreadGC2",[]) +else + AC_CHECK_LIB([pthread], [pthread_create], PTHREAD_LIBS="-lpthread",[]) +fi + +LDFLAGS="$PTHREAD_LDFLAGS $LDFLAGS" +# PTHREAD_LIBS="$PTHREAD_LIBS" AC_MSG_CHECKING(whether __uint128_t is supported) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([static __uint128_t i = 100;])], @@ -112,22 +124,58 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([static __uint128_t i = 100;])], AC_MSG_RESULT(no) ) +# allow if in Makefile.am AM_CONDITIONAL([WANT_JANSSON], [test x$request_jansson = xtrue]) AM_CONDITIONAL([HAVE_WINDOWS], [test x$have_win32 = xtrue]) AM_CONDITIONAL([USE_ASM], [test x$enable_assembly != xno]) AM_CONDITIONAL([ARCH_x86], [test x$have_x86 = xtrue]) AM_CONDITIONAL([ARCH_x86_64], [test x$have_x86_64 = xtrue]) AM_CONDITIONAL([ARCH_ARM], [test x$have_arm = xtrue]) +AM_CONDITIONAL([MINGW], [test "x$OS" = "xWindows_NT"]) -if test x$request_jansson = xtrue -then +if test x$request_jansson = xtrue ; then JANSSON_LIBS="compat/jansson/libjansson.a" else JANSSON_LIBS=-ljansson fi -LIBCURL_CHECK_CONFIG(, 7.15.2, , - [AC_MSG_ERROR([Missing required libcurl >= 7.15.2])]) +# libcurl install path (for mingw : --with-curl=/usr/local) +AC_ARG_WITH([curl], + [ --with-curl=PATH prefix where curl is installed [default=/usr]]) + +if test -n "$with_curl" ; then + LIBCURL_CFLAGS="$LIBCURL_CFLAGS -I$with_curl/include" + LIBCURL_LDFLAGS="-L$with_curl/lib $LIBCURL_LDFLAGS" + LIBCURL="-lcurl -lz" +fi + +# SSL install path (for mingw : --with-crypto=/usr/local/ssl) +AC_ARG_WITH([crypto], + [ --with-crypto=PATH prefix where openssl crypto is installed [default=/usr]]) + +if test -n "$with_crypto" ; then + LIBCURL_CFLAGS="$LIBCURL_CFLAGS -I$with_crypto/include" + LIBCURL_LDFLAGS="-L$with_crypto/lib $LIBCURL_LDFLAGS" + LIBCURL="$LIBCURL -lssl -lcrypto" +fi + +CFLAGS="$CFLAGS $LIBCURL_CFLAGS" +LDFLAGS="$LDFLAGS $LIBCURL_LDFLAGS" + +#AC_CHECK_LIB([crypto],[OPENSSL_init], crypto=yes, [AC_MSG_ERROR([OpenSSL crypto library required])]) +#AC_CHECK_LIB([ssl],[SSL_new], ssl=yes, ssl=no) + +# AC_CHECK_LIB([curl], [curl_multi_timeout], +# have_libcurl=yes, +# have_libcurl=no AC_MSG_ERROR([curl library required]) +# ) + +# LIBCURL_CHECK_CONFIG([yes], 7.15, curlconfig=yes, curlconfig=no) + +AC_SUBST(LIBCURL) +AC_SUBST(LIBCURL_CFLAGS) +AC_SUBST(LIBCURL_CPPFLAGS) +# AC_SUBST(LIBCURL_LDFLAGS) AC_SUBST(JANSSON_LIBS) AC_SUBST(PTHREAD_FLAGS) diff --git a/cpu-miner.c b/cpu-miner.c index 57136627..500730b6 100644 --- a/cpu-miner.c +++ b/cpu-miner.c @@ -2526,11 +2526,11 @@ static void show_credits() { printf(PROGRAM_NAME " by Lucas Jones and Tanguy Pruvot\n"); #ifdef _MSC_VER - printf(CL_GRY " This is version " PACKAGE_VERSION " built with VC++ 2013\n" CL_N); + printf(CL_GRY " This is version " PACKAGE_VERSION ", built with VC++ 2013" CL_N "\n"); #else - printf(" This is version " PACKAGE_VERSION "\n"); + printf(CL_GRY " This is version " PACKAGE_VERSION CL_N "\n"); #endif - printf(CL_GRY " based on pooler/cpuminer 2.4 (c) 2010 Jeff Garzik, 2012 pooler\n" CL_N); + printf(CL_GRY " based on pooler cpuminer 2.4" CL_N "\n"); } int main(int argc, char *argv[]) { diff --git a/cpuminer.vcxproj b/cpuminer.vcxproj index b7e71c6b..f63e2fcd 100644 --- a/cpuminer.vcxproj +++ b/cpuminer.vcxproj @@ -289,7 +289,6 @@ - diff --git a/cpuminer.vcxproj.filters b/cpuminer.vcxproj.filters index f56e223e..e923a593 100644 --- a/cpuminer.vcxproj.filters +++ b/cpuminer.vcxproj.filters @@ -223,9 +223,6 @@ compat - - compat - compat diff --git a/crypto/int-util.h b/crypto/int-util.h index 466b957a..61789b4d 100644 --- a/crypto/int-util.h +++ b/crypto/int-util.h @@ -8,13 +8,14 @@ #include #include #include -#ifdef HAVE_SYS_PARAM_H +#ifndef _MSC_VER #include +#else +#define inline __inline #endif -#if defined(_MSC_VER) +#if defined(_WIN32) #include -#define inline __inline //#define IS_LITTLE_ENDIAN (1 == *(unsigned char *)&(const int){1}) #define LITTLE_ENDIAN 1234 #define BIG_ENDIAN 4321 diff --git a/cryptonight.c b/cryptonight.c index c8814711..9262699a 100644 --- a/cryptonight.c +++ b/cryptonight.c @@ -5,6 +5,7 @@ // Modified for CPUminer by Lucas Jones #include "cpuminer-config.h" + #include "miner.h" #include "crypto/oaes_lib.h" #include "crypto/c_keccak.h" @@ -15,6 +16,12 @@ #include "crypto/int-util.h" #include "crypto/hash-ops.h" +#if USE_INT128 && defined(_MSC_VER) +/* only for mingw64 on windows */ +#undef USE_INT128 +#define USE_INT128 (0) +#endif + #if USE_INT128 #if __GNUC__ == 4 && __GNUC_MINOR__ >= 4 && __GNUC_MINOR__ < 6 diff --git a/mingw64.sh b/mingw64.sh new file mode 100644 index 00000000..3b0fab25 --- /dev/null +++ b/mingw64.sh @@ -0,0 +1,8 @@ +./autogen.sh + +CURL_PREFIX=/usr/local +SSL_PREFIX=/usr/local/ssl + +CFLAGS="-O3 -DCURL_STATICLIB -DOPENSSL_NO_ASM" + +./configure --build=x86_64-w64-mingw32 --with-crypto=$SSL_PREFIX --with-curl=$CURL_PREFIX CFLAGS="$CFLAGS"