From e7ba87f9fc7a2fc740ab0be9a8fc3f9ef953599b Mon Sep 17 00:00:00 2001 From: Phridgey Date: Thu, 8 Oct 2026 12:16:52 -0400 Subject: [PATCH] Put addon at repo root for launcher installs; ship DLL as a release Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WyQKCL92ZLwPi9qmYQtNdc --- README.md | 17 +++++++++++++---- .../TurtleTransit.lua => TurtleTransit.lua | 0 .../TurtleTransit.toc => TurtleTransit.toc | 0 {dll => ZepSense_src}/ZepSense_v5.c | 0 dll/ZepSense.dll | Bin 48640 -> 0 bytes 5 files changed, 13 insertions(+), 4 deletions(-) rename TurtleTransit/TurtleTransit.lua => TurtleTransit.lua (100%) rename TurtleTransit/TurtleTransit.toc => TurtleTransit.toc (100%) rename {dll => ZepSense_src}/ZepSense_v5.c (100%) delete mode 100644 dll/ZepSense.dll diff --git a/README.md b/README.md index 0eb36f6..7e06561 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,22 @@ Routes tracked (with built-in starting values, which refine themselves as you pl ## Install -1. Copy the `TurtleTransit` folder to `Interface\AddOns\`. -2. Copy `ZepSense.dll` to the game folder (next to `WoW.exe`). -3. Add a line `ZepSense.dll` to `dlls.txt` in the game folder. +Installing takes two parts. The addon can be installed by your launcher; the DLL always has to be set up by hand. + +### Part 1: the addon + +- **With a launcher:** add this repository's git address (`https://github.com/Phridgey/TurtleTransit.git`). +- **By hand:** download this repository as a ZIP (green "Code" button, then "Download ZIP"), unzip it, rename the folder to `TurtleTransit` and put it in `Interface\AddOns\`. The folder must contain `TurtleTransit.toc` directly. + +### Part 2: the DLL (manual, the launcher does not do this) + +1. Download `ZepSense.dll` from the [Releases page](https://github.com/Phridgey/TurtleTransit/releases/latest). +2. Put it in the game folder, next to `WoW.exe`. +3. Open `dlls.txt` in the game folder and add a line `ZepSense.dll`. 4. Start the game fully (a `/reload` is not enough the first time the DLL is added). 5. Type `/tt debug`. It should say the DLL function is present and show raw transport data when transports are in range. -The DLL only reads transport positions that the client has already loaded; it does not send anything anywhere. A prebuilt copy is in `dll/ZepSense.dll`; the source is `dll/ZepSense_v5.c` (built with `i686-w64-mingw32-gcc -O2 -shared -static-libgcc -Wl,--kill-at -s`). As with any client DLL, use it at your own risk and check your server's rules. +The DLL only reads transport positions that the client has already loaded; it does not send anything anywhere. Its source is `ZepSense_src/ZepSense_v5.c` (built with `i686-w64-mingw32-gcc -O2 -shared -static-libgcc -Wl,--kill-at -s`). As with any client DLL, use it at your own risk and check your server's rules. Saved data lives in `WTF\...\SavedVariables\TurtleTransitDB.lua`. diff --git a/TurtleTransit/TurtleTransit.lua b/TurtleTransit.lua similarity index 100% rename from TurtleTransit/TurtleTransit.lua rename to TurtleTransit.lua diff --git a/TurtleTransit/TurtleTransit.toc b/TurtleTransit.toc similarity index 100% rename from TurtleTransit/TurtleTransit.toc rename to TurtleTransit.toc diff --git a/dll/ZepSense_v5.c b/ZepSense_src/ZepSense_v5.c similarity index 100% rename from dll/ZepSense_v5.c rename to ZepSense_src/ZepSense_v5.c diff --git a/dll/ZepSense.dll b/dll/ZepSense.dll deleted file mode 100644 index 19b2b639cb2845be84d7339c609bb07e334b5c0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48640 zcmeFadwdkt-3L6IY+!*Uv+72phO%m?q##Wct*cN2$p9+RC@i27AwmMtKror*QVAr^ zu4Fnaq*Wj3Q*5DNOIzCVJf#p2WpgnXiW)A(gb)lE?F>sLAWg!h?EC$lnb|BC`@HY_ z$NRpY&-(;+XXadf=XZX$^ExaaMf7VUDZ9mHyJ%_rL!tLw5Yo-SOP^ z0UzI0Wtsf(T~p^5l(-fZ7tJfqUErFNyKrHV=z1y7RqS2pDp=^se0qv&LDAg2QG*8$ zOg2Dg3miAuGLZXTcm2y|YaLwtJ%cPUDI7Jh8=r?bZrd%mI`FB)hs(}o_c1!&7NijV z>~A)n@E|U=pkL{DaOw4^0@cSKyErV|!}Q>?aLN7Y=3D-jA=`ebg# zT^7zph<(f7C^2uTh`hH};)@U}!{?fIW^>%^QFC*}Tx3nfhxHwO=6v+f_m|Fb!BNF} z!PA3~z5yRQK5yU?^_LE|j>?-qD<9mMeJe7y;X}y(6rZTSbSn2!NeLxw8;!4Ky1V|b zjM~l9+hw!_O*z8vcUPB9CwK*VIYw*HoU@_K*6YdzM`b+Ax;m1wQVn?9Z%|GwWcU#n z#%5}F#|_FA=M@&s;dCB?ms~%Tsk*M*_^VU?|MTRLzm!fVHdvFn=ImVck4rhOsdiLg z`*(=~0r9&W@~2OmBArfB1iL@zU9{1Ta%l(s!4)1!wJ2jZ-}OvxTK6VO4e^1+93ZK% zC*jYe)7IS}Hz#*>@&A>u`C@jiTnhl7Z`^`gsW*oAH6a(phvK5fl|s|0cp&e*-2B3e zvvO+etbM81;{9swMv_wHL267{YE5ekC7C$78+hLq9T02x2-=lf(BxQZ5)B?tYcra( z@V>86l0Er@yzeLG1KQwyzsHlmO)T2DXfxFl?@&CBhRkFu$(1}c*`|1GvNJi{ESrx?V z+>!cBE=XjkpXY7($Hd33VscXAvkLCNyWWGf}zeYc(@ zbVjG{`BylscsfxQys+k1rX6gEqb7h!IKu0Q#N}72ccQgGMmP!v*t2AkS^_`}inu2# zPu+SKYZZtJ(j|*HpYkGX16Ic{ZV;k1p;e4->R-(S=~683F9I6cLs4V_5Z*r>2__)3 z$KPCL?Q4$`;)^+T6DVMoA$Ac7icHuLFTaz3=){Po+>=I`YY5uuiV!rqbSYZZ$*0v_ z35WA5nZDW@;`SI4rerx3k6jUL>ix)Xg4URlq|2AC-^e#qTm}=>9+A|%lKvw4P5B$Z zmxSd|GAI!!S|Zm*QrDB}jrHkyn;ejTLh}~Xkdu;0+ih|^rKCiqY_gIpb&EGqhLfsT zlaFmf8%J=n!3lfwA`vt1Jn4I_j&Bvw`$PH)1r7TH`?Qfk3W@_v2+bP_1>k6xt;ykp zLLD#k36`ogt`I6*<#@P=YX@%4Rm2`3DAgsg{6J>%aFD^KWF{vQIdF9Wiux)n5tT6s z$mGQX>sNld5FpSrp%qRTc{h|2^+*{|e{w_I>~p%hqlnYF9Yrb`J~oK_KxGIe`P;k+ z%3vzzZ}Q$#UPk~~ujQIumC3-iOq#%jo6RC(dtherOf+J%q9AElr1hl?w4D%`NeCn* ztMg%V$e?*pwm#j$(lU{@dmai{S{k_L^A=5QNVgW}E-YzCw=F6v78}y-C8G+9^5tx1 zf`fr4xRAZ4@|J1*c*&2i{YLfuFJ~MeHr@e<3 zD?MpJ`Qu&GJti2FG1djPCyyj9^?dVtQ!H*M2nkFO4thtnss8WCl8OvK`ji1ZkFDCIp!f0`G!FqaXw#yidaR&qN25 zs`H`;KGqRv6(dmq+qG?R`O^xMxfr>$jW1|v?G;#HySt9 zACn35B|nU=!D|?6jDw2r7j`O?#^7ksn2PuzEPhY^`pOp!~y8 z73!E2VZ;BRj;*k+#Dt##xT%hRL7Jh7Q^170g(Z1l0yJ=5eY%|#mU>TGs6L94q^KqD3ccSALMvdtc%k8zN{Fa$B2Fate?E3v5p{SPOII%z7XJ1D)8QVG7g zk4#4bJyNsB(HTG+P9#bT<1QKC=<1>r^!J9H;{EH9tK7#r_7DE;+Nfe|ggKISQ188c zBR!Kt&c9vbE=+duehpRKQWvD=Xoyz*^0LD5$BFr%T-L$r}e`xvWilNV7=}28*mC4D&6+ERhj$L#c$1NGW z7bM_9J9PPCO;h0;HUIoI%@aL=K!|u%LS_W@Kve%2w5!d=SAM0Ei9vj7vV%1u7cv76 zi<0a@y=^*gtkj(P0P&G&6hT2r7oZQ9TacNowLuVc{I2S+DGt)ta0+?w6;$?*#1*B6 z5mLvYj8fg0v>+Mn8Y{Pv7^c0A5~f7c+$kCOj2=s!<9+8ri?Kvz@j>7*1~`x(l1g2` z^TX6*U6f!&W#Yucj1x|&F8PHQYaEbMG756-h`3B>)!0uFx>&sML)W-P+^zwevU7Jg z!>y8sP@dcsZr*h}(&Vn)skcF7n|Ix%KXG@_)5bE0D2D4z?AjZ<;!$axGUO*RnebIW(GzMu8)t!0=QHfdByi0}PAu&ypZw%6c{!1TvGy zK(@w!&bq#197veVh-lLd+M~!7Z!52(O3XK8%(KCXfn9{L3@2o>;^YFi1`3n2VJow_ zdS5byOPIRMCfJ3rB~*A4D{K$!Vfkp<#Q&(x7{LZ*(6Tu(NV0$hri zJPBejnQ9Nl^N7sk%n@R8I-ad-h-qVz`9F23OBSNtnktN>9MpLz<*uh(xITq?77b`* zcK(Jd+H%6>aRAfEL=7a}N;NW}5qDjHKzH+N&XFNT!lQ9ys8=TN{tl$LADo0IK5&>+ zV==dh8F7{-51|o2dmkCheld)rFjbou&;aNijWj3WimL+`BH6WwsOx*7%8RIt?JVXH z-KTX7j!3?)lR6gKq1(&%j6N?#J|>5{f8P?;20_~3|3d=EWwLhZ9VPu@{{0D>d0pq< z%OA7&#^n0A^k#VRQO-O-7{d)SxlvC2&5Gg6@&3)gi{!@el~;ImKe;?3ZSsXpU? zEUkG7dXg3lIaqnazZa19=yJ*KJtO%fa^x&M4dK0H;1cl=Sk;VBgVb?`_YJ^fdDw9l z2G1&G*euHSCBtEsX|6Bd4Rmu(oR$kYr8iSW%G zY@&iei0~Ya%D_VX@mY{Ua)7uNsje`>m>QcN-@2I2`+|^vdHI|62H%^EmgoabMcyQi zXq%APhu?=pI7}MRa#-#%u+k~W%!!}kSgeyjrA}7e2`tQ>w(ir?Pz~eEWM#ZFP|0=e z4VPaGpLv?&S9OvKf&ubb;7nA5^`mFrw+}fqrK=$%twi_9L}2P7`40w#G3rm|{l7q& zR*P~AW92w24mlf1 za@I-|o1C02H^?p39dUt5n(4|F?0buk?zdIYcO$=5O>7v?OqtI4@oXASRL~t+m}%21 zov2K=Dc^^z(X_!zb##eLG79j%yCISOe~90qe3DvN@krjU@vM)V;9W94!|@r}y07|+ zIEh6Ybfee$^S6Ll>(AG*@AdcwNsQ6V(EGj7^3qErfv|uKtiwm;hU$}X^6#jV{N|5s z77s0iQ+9zmM1mwY5S1T5 z1-HukM&L?aCaOW4%r5(HL3(Td)``~Ei8cu8%_e-B(h*yfXYFz&p`kS}+0lm!#Ct|U zVMklUcqR%`-AD=?FD4t1O5hXb>XQgG>7)+e${2`i#QSyJp?mr)-;DCiWc3o^1N@r7 znSp1$iPKiS6&63+Xsg6*2y_we(?fFx-QizRP9WQ=q+8_#x`(0CnoN6aUQr41?o@`9 zttGJyi=z;PzO_%^!_IeEPRQatkHI_rUN~37PeX}wE(6wL7-n5g(sO9u^Hg8yoSE)+7b(x}9>k4;9B_F(Y=m&3%Y}y&Nq{)fOq}bf5K}gr}(f zH(YyNb*GlrB@_Qt3kVpnmIbVSVr{i* zt?sa@lLvsCthY$xQtIF=-XnE%ZK8fvo&J4x?tSzn_4Z$}MM=P;f5rNHIOUMyIczxu8V)YM6h_v{h0>+6h0xM^hPeD zjIzQSSVh2Op;_sNaUHixnVxW1nPB60G>&nIrP2kLw@k@7oN_3(uW7lO_Xh#P-?sF( z#2*kI%6=F;!=gen<1NGq?D4$^R(yy_v@Yi~o^L?Cja}&L`@Q&*s|O7}PaXGt28J}xaMulE-n?(1)2`6aF_9OhU52xLIt(RqIDLfiul^jF=4rt@V6#OV9$ zR?02iAIc&70Rokwh+cva^1O{x>46W$!)-koUni!d)YQWprjD}FX zKMX0+&9L{dF>C|}6sBw5S+F-0wM-|A9E)*4&Y+I;p}dhWmQB3n43eon1k!@QmyKys zV>r}pBEiBT{YIMBFEPEdo3^MBXErD0c350j3*~G}`KN~QyhW##7V95xy_n1K_-bb4s z8sdm-M48B_WZ;Wo)*CX)iYL_}P>@g?@HFW>i`~GSct6sa3=TV~A1&Y;4Rs@cH28O> zA&wA33r1t?&LrtbFifG5+U?2 z!PETmhqIpd4vI}5Q~ogR*%AB6%{jHSo||93G;xq6hkvU^ZmuPHorV!|ijrfGeRd4L zbG(z^S==v>8Iza~LA)!i$&}M=q!z(Y?`SDY}D{f@_fB*h#tr-h(Nfz-q4WIC*Qvn>a?E~Wy(`ioxOz&K&6|ke zKgyNAAL-VctXp=7S;W81FMr?Ym&Wgubjtsn!0V#WCJsqENc8GXzt<)9hf>x^ngx?y zDLCAH)T=Q~Y^o*yEz-RA-{Q}B4=*KxzD_5SPg6{8+sN>)ir`(L;|;lu=tF*am5Dd_ zQKs|5Li`{`@H=1a*T;+@X-$<^@!@7ej)@NkUyz$2$x1fjwmCfqt4|F@Gmz)BrU*i8 zYYm`!uS0AbLu}9sawA(A2c7!xI;E7AfsU{_9sJH|P_GsJ0#k2g0{v-PxAKJD-3YyU z!iLKoB-J&;-95mk>4g{NMp|aq$B8&OM2Qd|3>aDS49*x})=6(qB-wWFo*jj^ar7f*r{`~Wf z?mCNjPj{V__t9p#w$iE(DYD7$EDa(wc84iG`IT*@TadU7CB0MAy0KX7Z7%;iSB74B zo$?O@-ox+-oB>ZWF7VY`(9tAvx!?yRB8ir#Y1mA}WJ>+X_o#1$SKFKJx^!{GhwvY{ zs@lD<$`n_H9q~vP#o;qtj94as{7OPtwkNBrr=yEk zmC^MN{FpvXJ~D-3jFV-dE&!(zTnPv*)yqewrZ7ryS^#X}5(s%sT4=S>&riKhv)eMgUJ>R{|`Y^ff;xAXzPe zF&6ogP@+EnLa(ehMKFfp|A8{a3Vn$t!59386R-^cWDq}Pt}tM3nikbj_Z4rGQW^|Q z3}ZNX7}#lrz%r!^?oD?_oK<`TsOvbdoq`PM6`RGtTRvLl0#@pBH~{EvAUiBifp@d= z?+D&9j$?Nnpj4XWre0mn`}aP`7s!Wr9~8nh9NKI0rjP#eXKa5LI51KfXLr{Skv{{G z$AQQf-M#!;noOb(4dVXcr2ip$a!D|Ct( zCk@_NYp*0$2$U}II>}!9k_&* z=it$LJyj#Xk?sbIH@mwwU7W_`C*b+ALg)+#ooP*&*hpWv_8&?oJ|ECpVSj{n z+k|7ir!kF@YGPArVfW`gdJ-&q5q2XpXo1ff$koLMU_2` za@KySw}|)s3PwnI&5qS|%&F@5#~T8ZZYFsVn!D>9yzdLZZ4f$0#q*`tk~nct)$f1z zyWjPkIB?2xKzYq3H@ZKSOM`q?gA}~en4JF!D^iN5QOVlRCgyiyVlE3Um>ZNHF5=$~ zB0$?bpfND!Uzpf)yuS|Lm6-RHb@pJgp$K)P>UNlA#oH2C8b;q~jKDrS%N4RUsVJ@{ zOhI;Oi~9=i`x5xeT`9e8A;_=&1`pHMGUQBH(gyV+2K%wJGR_9$^Fr?L%Kz1smQVRZHAPOERyXfX8R3o=y9DrqY zqy_muTsd^6yV}JIJ-pB>cMa(Eey9L4@NNYcsr$9)lR-1ur;aSeQ%CejslnWS?P-G` zyzdd>b7>HEBG8Kt$rn?N~pnf;-Ye^;y$-rVd9#|*g zT8K9j^Xey9Qdw$6zrchTx6o2j7Wh$Eu9rO>5qZ&4P%Fv~`5++D8B56-`2r&lh0U3m z5q(S{)6Pfi#J9*yjxT|T5>OvR)t+EJoBF=c6jiKBc# zs*kCda7B9`C_zj58uT7xexc_oaz90lc|h)4Lq9Q1b>H|gP5wl;*c}+|)0&hQt+J=n zAB6YCKi()+-`3sW5C`Q;E0VyL^`yTmZfK3~IuBQd0;Ia#YVNKr6P;*P5jsHPil3rp z*%vG27h!rkz#F>$$D5gPNQr5F?v z<=&K*VW?F`fsujr{YS!VGyfo`0|u+=hHweeTO-^pLoRto6JtyR5>Ez{VHO5jS zx1=19&&gRWBZQV+RP;{Iv4V4SQ_zgB{gxvrO`8C#r4Ebbo51Lw%HG2tV(P>7d=)FS zDBh01bWDFz`K_&%ivCpy4MRgZ4}{!Zm?NUatd`q*<(y+BcPKe1d`$jK&gp=G*1k`= ztjmp(Rj1_aAx-x-!uYIVp<$?$&_ULtE~NpMam_?BC&q?v8itTd?rFtjtO=KP;K?mC z^KS*2)`>P>koP}JY=N^IT=9?s*rm-W7gL($3GfhC4C|>40v_*w72mpUS1iG8cLOFT zAK*s!Z-oxJGOHfii}_-o)1XZyy(#TLN3gYxOoPyje${iS za%qS53F-G@uBSyh$jL%S&r!&{wg@$Jy)Xv^_)p@U_1p+l)J~y_+e4Js%5lr+CO5#j z;(eduxt?=D7};LXK6>e0(aA2$C?&V_=_>DEf)uC|IhE)zST9nM>scRog0a3~0&_RC zr%+1A6I7$Qz%+20U-JV>*5yn-r_UEApF;zEWmf(j+O6?@1gd6AOQ2& zwO=x$)1lFFzS$knOZV^CdX==)@h{%@SI8&7GuxRD9ryj3gf+t<=N*=Uyy2t`>|$m? z=)l;CZ0usdj%uNkZox(t^QI9YHbb9#5xl^dexciq{{7#bca3)@af|_KM#*#Th!F$17>RMHV=T9A=?YdD2Fc*749p z_a`g!G0#mo>#pY441n2Vz7(-K84rknVFdPfuNa8Qql5Qfff4XGtq@>y!3=*Z04N#O z-!kp@{TZ2oXV|RqpqScS*UvjbJBSj7ycol)4(MK#RWQkcVL44brs);dtC~@KOFCYm zFy=;GXV9k%vM~u5b<0oEuwQD>)Z9B#LD+TBDqEV6-IJIZ1)0y1pxuOF8{!XYN$Sx zN3_9vCiDwtcLL+Wn79)5PXPO#3@Z_z_m9Pcq{ToiOuP+VWwQ37;szRdW{AfeWz$48 z8Ts1x`|JWEr;X*a_N~{|{|>9qc*gra0d3fX2M+CSVxOFKtmou`Q#8;C9RQZnD3x|t zFwqu{dGFMwp}5{ZYUhBZ8hzn?Z=<82+G(wfvULRl(;%z7?|bN&wze|Ff39T;% znFcmJAf;A}8W>+lb|E6ojJo`q4qP$c^!`mdg1h`m-rt3K%9C~oiu@&Rds;y}U98p< zm_Ol5uGThFJtl0=px=;e|8!h6vX`dlFuss|WP6LJ1zru)oLm-;Vc%7bt-5!pjQE|< zSv4;|KfmW|+1pWlWvG0h`a(>~S#ijRluCA~5!!*=MwG9<7$YA@srH7HlHt;ou-D#@ zF&v`Iv2dQd2X=zb>X91*(_&JZ-3OQ>y$iC$@lRpxy#>+&s)F7WGI*Q$r^6vuAP5H7 z4p;d;vI|n9KuhyS)nx1uv6P^A2WEVD|4t8&Xzl;JzJJqL^uoo0ze}ISn2o?^KXVDrjJx-PjnsFQP4XYpJjFv071DLF<4BF5PSR@#0n#b6s|PkuEX)`wLm|HSMM=_B>$^vz&Gok0V= zKUlw_@pU94Fkf*FX!E|qW_LOQS)EtW`9~U%F6{)J!)!rZ-=CIY9Y*sgDg3YHGnFZJ z_h&0TWGvbNCgq|$#g0A`uP?~w)MXc7*KWDSUO0(JeQ~dqe%j!*1-rkEuXvk=^;Jdmvda@atda-sS}4F6uup^olqmk4u!Wd|XM4#=K5#j};)+H5&+ zDpm;IqR;BffzvLEO(7!|Rt42h#pcW2Z3N{H&4*6uP?|As61MPr>kX24wt^~{FByC9 zb@o*f5m)uVibW%o)}3;pLD+yMIKXTWHq)JnAdk6@P>*FWIcuAa#^xG}B}jFm5a5Lx zUN`~-1~h|%-c@*QMS`gVA7o*>+}k5;C;E&1>jf;$3kNU>2rROM##bsiL3d77aiWs7 z9xT7fBq_h)%?NaoD&56^cZvkM|&)T=@{^2pe04*L9J1krgv zm22!PM{_(ZgkxWuA@IzK7$Q$f)gWv^Hs&E)>7s4Jz|H(;2$P((fn+6XvvwYs==cNP z+SMqd(d$NfyDrpIr&7DwQSAoBWEcnSqyZ217ZhLn4*=5I@nzb>h83&0 z55QsBpGm2LJs(j5NPD%hHK%rC zHLSe|rVMkm&hO}t$crxo01f`BXdX9MHLR1b$RA81Y#{4+_oyk5-4R%U2~SJe#pjpI z=64(nC%@f`WgkQSuyRck$>ooL*^5zu-!Z{5<{{n}kLc2v2YCN6ctT|>V(#aCzd=e= zOVeTiQ@*l`Y`XlJ$v;U=9W#Jm^*kYeA(mhD3~q>(uK)~l4i!J4g+XGN@;2QmG3ac? zNo3RB$IOgo?y)cET>|RpPt@_z#8z<4X9J6m;0wn}>AX1}ii)EL^` z`o?zDMJ}kM;JlVEqAR{d6`8J+=vV&$vgg^Oo&XWFWyrdY@Z`B`OMxX*jzZqI4kXlh z!UkSl3D~TXm6(siS|TN&0Gy#F+GxPg$%?_A*A<)A^L!f&WV7~Qn-O}#8FE*(lo)*P zRoEYa2~|Asmkc&b`&_ao*j)o5zlhS{&r&b%LWid3M3v(ed9297RqOqtB zvjy6jYx++;_xA&$?Ob3fw!lPp3VnYc0NOs7kNmbj&^N#H-9^+Z+SD6Gh4vPMT%dyp zq}x82fl`W}eZM`EYLtILbhrpMf|4vr9+d zU-j9E_j<3d@z6CjMt4QmD7it6G1t^McvX#YtcIbHhSeoSh5<6{tir)t*h1EJU0ZZp z{iAE@Rg~1K4vf%<@?>@?LL+fIA8aHd(fqOk8?68pqf(bT8L+erkeQ9PUw}66lYc5* zh+(hY@|lg=kI_IBPoqSI2-7#Tm}0mVsd5WVK5vFG+!X^6)@-;d+mESHBUp`@Mo@bS zPfwIbsLdIv9PH1EHN6>KyS zYcvrX)x4>8`}`0XtFZZ+yl1idJVuVCeb2qjL9E2)!YZ>Y z&0{>w=V4pKl}VQ+)q3cp448QLL9pd$SI}CdG~2h#;xn{5jadN#G|Ey3f)&_h@tT8Q z{SG7_$$=S8wkfNzx+6yZJm8F_^<>(5)G5_E<(&PNS|uj!pz=Uqk_FQRxvS?aCJI>G zc7MXZz7z6?jga`p5QvpyHrZ$pS}4JsZsb%!uatPH0oJ6WXWr#lq4^fiVeI1eP{<<( zcPZ7k9~zO>a%avlBp~pL_48v`L6)Doj0WAMoh8*uPL=Y2zuWsnAmg%I*k9ttP7(R& z2#-xVb$j)xn83sBXBBituZ*-yO zWRUPoR@-_P#m@PPGC;t7D8wkRn-u)S`*DgT?cj)v%hFLUrR(;KQnfWLEFY1_U6#JG zxN|y7+F9|&fb(a{{lL&27=PJaU6KOaaIBh+9+r}iUWJcMnfa5;Kdak<#``Gcr}q$EV4)X+mq@R~(d^D4d#e<0GOOa0z5A6^Y}pbp&&8H5m)s?Lwo4tK z%Gj#ep8{X~vE?M9JC0wrN`e zN$*0%Id?Tv7Jht7^`#h`VWOE9yZ$S%)N_999Ru#5la|PJ8fg(Jf)zXDq`BmxYOuO~t4uEU-5H77v zpPy}S;a7c%+6{j40zpscSs7ih@^dpY4h_O;ddBWUPg!Myf2mOnuq|1u<-l@0Yjj{0 zi)+Fb_FBEOu#DY+c{0qa04;XVh$CYUxL|t~jhEMv^s&ItzhG}!Jz_*9j+0Sq_n zMM%0O(qrGK7gg2$s36zs5F+n#z>Zzhpgt;7gY&O$a5d_a-D{W#2MlA~B^svj%zO#p zupa9fSdCOXdjfVxN-ZQpJBuQwIHLbVCWfGAwMnUi%Wk@kQV4KCmgN03Jry>j2xSez z25J#ril0b^4GwP;DdEo`I?S({17VeV7iD1=Xg|?9{^@49nIA^KaAcY@HBtGnR$ZV`V=jDZ)B3I&Rhiq0``>iDaTk`@7jxfKjNOL20-C zvju>u!mD;n151yzjNO9-CCf+p6?n#CsMzrn?Q9moRBa1XtqtMy9l{o@2OQU0n<^}A zXBR(oo#Pj{6}*5_#IE+jd5RyuXMNIzylD9-!TdCKWvXKyWkeFtm}hKtgtDp--rOZ zNEpcYuh#0BYU);z;zd5gy}Yr2wF$vvgEvs~Ffch)=(QqX<$~Tygn?8C!z;T+Nc5fN z4FcP8rHdk|M*|Zy&>q3Wb#&3TL60h7&_37NTYiKkWb&A$1sg1yfE$y54U9*qk0?39 zEYJ-|dodWxq@A`(UL)idQS;(pGni6zD!b5VPFZ~SKI<3{u^vfd=&3? zU54Egoc!t(^i1(owOcx-pvD2uQHBTD-*^oXdqUC7?rQmA=0^F3~iQ2(#NlI4uU*3wRY&k#BJzB z$VT!=N~%EdJ#RG#mDCFibQs~tFT)UumHUs#>@lSyJ?oE(6v*~$M|R3_(*Fqzs-9>10n?o5a)Z&DI-Ga|x-yIJe;Kw>Ds8mj*iGEM zKNQqafTpJ`rB(`Ar7wnBj>NYB&T0$xZ?CwS1OYk3dYLj! z!wJYSpaZDtKS5MwmTxU>xbb1X7rE$4&N{qbx*Px~o`3{8Gs6m^vNv_sW7so#0hnqI zd>^`@vxsV z@vEZk8Q*{u1Etc+7~cOV0K(XBufPjL!aBFmiTF5@K)PtEV({hE#{nMxg4+``vzSjy zRHuBfkoOIP;ZR*D7%4&>*b`MojX^H+!aL!G>thHBf#G@jux}9efk~;@m!1VZ3bJ={ z-UThlcdezObdUq+(@ONI!5~gTav9`hf&@683UvXM_f){MB>#ITh8svN<~N9L_+KS? z!iw`ic^|x5>7-?l2g5e4l|gYOyrbaz^8iRo8^7jRays-uCNM3HxSbWOa9{x!T>@vw zpCWv+8VQ}Q1C-E1`-}t? zo;}R}{v*6IeurldfXTG|3lz}>$0VysQ0BjESN{lLR2~drQj2=O2;Nl_u}uDM*lZ|{ z|4uUFOavjUdRfRfNGkm?2dMyXl`mBmJ8}V}BujOHIzIt{;exer! zq>~y(xT7`La*jD9jm!;0lnkChFtuf0ML(Tuy2*fB_B94Bt-bX}Lyi78~yB+TQ} z-tUd{n{2Ij9flI$lW-kc1~Vs(1x_#;e0y`_!+mYMwkfm=L!ghHQ-CvId^8fu#{(}= z1SvemErx)Vp(Yiv+9`5DbV+{zc<2KPty^TR!#pYl`)JB6o((ix#@-=}X98#kub(Ka zCBw)vPK_jOBo95psXLHzEvE(}&FDXjqRzw3E?`&BrD-oQS18Dg0xSWfrh?>`&O0O@ zFQ^W{*h*#x!^0IQJj_LkK2yP~u|69x(ar#Wlptjz29ctB>eLgkCS>^{Hj851r0!VP z{u?lY$@SF1tnhw10ZLlwAmY#n!LR);bQv7WDx9LX7Q^6Phb|c(of+b><;OI2ZC)sWG8$!; z1j$LqKBFeFKfHJO^Wz#Cma0=LFlT^=)#d#w-bK@=QKega!J|#>t*vo1<7usFsczlZ zcCP&>zp55gK7Nt{0{p6}pswlPk>ep$z_$YzE4Grog7htN!g^Kw0#EI6(x+}n27fpdZb<50lq$LNloWp?NVdy8BB z)g8L$#3Vc^S&bpJz^L>#3rv&Cvl`vf`?Uo(u(d(DXy3znmN{asqMl;{Rbv5%Ok03Z zAq|sS3z-4L-5_V4?Ue8(sX3d%S#}}f&Jm^V#lR1@WPG%~c^Xv_p7~W0`zCqB9#Xb7 zd1#c$p&vKkjSHYKPU}h(&oH7!4edk2zz~DCHiJ2R#0>f~r)?S39qifC9W>qf6V_>O zgIDb>tzV}F^=%9}KAP77WBxybyilzVSNeQZH_qBvELOK*D0_lUb+>@7RD*_B2AcnI z9g?tl9N*mn#xO<*Yf@&L-LB z2#3xC6Bt+17(^_AH5rbEx(p5>a~gyoxdt3)alLDx<)Qy_BSpZnI%y`NPe8OE5oo!cI07;L(0BFyJJ_ZuJ%`@Q zz4B+|C%@;eFTMnH@UmP=SHS){I^?ybG*|b=$P*lx9s3?a;b{DE&c+0C4t=)}lmnqn zCT2Q(&#90x?_ z1!4a-eoO{$!*85q#d+yC0dOU{@GzZd^j&2L9qG>IRmR*G$HlW^I8zbF1fHVe*?~N) zHAQ|8gv{rvI4Xp#$=j^&FSJN({U~ zHDI~*1GG@lY{rQ9pymAr${2B;1#z^6_+n8?y?sK?W}csdexj2&w~>xox*Iu3n>SJ0)7UK*k9farqqLriEhtnwn8_-8}7u^$_x!F$q-)+T$g zpS^WsDh?lEXa5~KDb?I5SC?z9OE|jgNcDx->aSxhXUi|Rz?3C^>7;(P2wu#rIrNpB zK=qdAjoBEMpqt2f!#m%4uW^PYQ9@4AFSm$v z-dEp&Tvri-sBpr>-K1|5J64CzU&I+OkanR1YqQD{SAg3@n1(ChHim{=!{faz7h8n`!(7Y8;I3=wwMvKwZ2Z48l?>qw06i zC8Od*r;Hbptr$BxfDg_-3fL>~a+AA}m)=2fz?QvraK2M6N~aQNDcAlsfeB1caCMi5LrMcY`j_T$y#ZW$}f6rX|#$8gb;dpR~1 zFQ{6&Zn}s80MeClnK*pJU0vLclOHkLQLv;vdY}om__vA|E0#fj+sc6<2f+zhL>qoF z1sDeora$UP7^X1aBwMn4i}4JpRFlQoNYHT`}V zmW$D<=x#u(#G%g6P7~ou#p#WA!QIk zyxYKv_kWEJUWF7e(pvRIQX=(-a5Lz|TJcVJ1{Ciyv}+U5R7WrLUk!2eM5vC zNrCI#EMJ073OGN+#2EJLhwxE4A**m%4*ebX9Ru(t&Shl+`71|?JLChj>!kFs{MQk% z>YipPlpxh7REJ{RXW5P(W09R7-zr;&Vg!%Hn{2e5F&koQBeU2>tPqYF2Upj==l-PR z7`}?TLw_^qH4R&16t8^>Y^L%Y)>OTzm~9bxrD|uudJ_&mbJAu8eZ0XU|4mr=kxp5a z``xKx*X?c6UoHCaVAt3q=tn8ex^lQDI(UD8jEfF6@U#x~7H4Q+ekI;8l`4>FzQc;a%+nceUKe=+D0?bc_&i1Z++REF;XKuMI&7#JLUgh~w=sm9tbs z`mzpVKSLG_S2Kn=UaA3w0gMoX+$x9&02SJC!Yn5p)JzzVF^TR!AQh50^SD=-jAsXlau4w}j8EdP{kI4M1y7Dh+# zi)X#m*rBiGp1`C8x%m*O`&CGpie~W1v}YsRF5Xxt53wyx~7vh=^T*x==TZJn$XN& z4}}8DTm~Q=g!ln!2i|(*V;VSa-TffiPPqsW@@>MZnDkC;L~c>5(NDQS{T*GF<1BT0b0{g9T2#LaIHuf16wZ`C<2>9k z7{1g6R9QHzdg+QK0K1Y3Wts;4$;b4EH1OxtH&1gYN%zk!4VK!nm0?al#}Zq5AI)); z{D>S$bX-698+*k2kt+eOS|!tq7MjfoTHi=O5{=@%iVnF8p`<4$tobb$U= zs1tRlheBI0|FX-eeSqm1E^Y&H1Ys9*9%Vwu{>Qp8$Ty}}db|N#13MBiL7_^RuCNPz zVRo5Q%a{^5_tdmkbT$XA4*UV7paWD@U5A?NcL-j>@fS)4+%R!?V7yhP!{zL9j9F|M ziXpUQoJ?WpC(hme4C4bN|gRl|*|qQl_%$ zg_9_#`w48fV+MR4aECdI+q=_f$ILNyt!cnix`Wsk%{7#2{@-_k*Y{MCgAi-Xt7{!f% z6YN30jGs8@Wj3KN--aWCW$Z$}Iv!LZ{PSCofCT|AHmwAVVZTQejVU4hKV#}&jJoRW zG=J!`8`^6~1fCWBs-PZWc9JNa7mV?M&7j9H^WlV%`zj!O1 zWI2BHi=CM3;4{w|_JqV2C*C04sy+(fP$Dy)Y0A%Jm_mKZh*K;#0}w9=m?=BeL4Zvb z<`!xL?EZpiKZrJ0v{GMdAVaUg)TF^oh_htOXug4sBZHH`{44CUu8o1wsg~m(Ep?QP zC7VF|449#V!9A=aOE|;)IPjW3*}wn5tPf_VhN=t%|N7|y1;@_Vhi)nW&WA>um|=Ur zBErarmCt(*U&Bt>ie=i{QCjuYQ4xzisyh;(=)Lz|LnLr4GSF0RhHvl|= zrMgrS!^l`iH{oGH2sB;mjBBHDZ8olljcbc>?J%yL##J@0r;TfuaXoKbdyVU5u}?m%B~x?f&dCvYcdG(MZYf(l0#a^+L11+$LStv zqi`i^P<(=Z!xC??>A|wUP)1Et)XCg^{w7hMyc^eV>E{s2&<#w}QFkODDG&PajNh#W z@P{a0|B+B}_@>E-PU^0fBS0}RZl`1}gisULC*+iXTKQShLT9u6op{npO z0@TN{jeF1@`fH|yhaEHMYB%WOU{^Z(n*M2u54#}x{-EjMMflAg^p_Tj*q&3m|9|R_ z3>N)W0tafJ{)k2C_|)zVhl7t{2Nmw=55WYE!iK4DWakF`*|{6&Dre_*Rp5%xHc%+t z=nJdxzhD2Kr$AxBOY`Q;nN>1t?vnfOOB*$}u#lTIt2l37L5Y}GJS)FAcR}8)f`$1- zNS&K^qjdC;g!dlT!n`Fek$z&FeqY=*&s#8e?6A~_XVAwb=FY>z=otgKVTImr$#c!i zTPPMU8#~PFnj5)WR8%r{*r>Gpk&&-~+!7+{JudvH`4svcWmk!}cyZpcQLcN@%Dt|F z5|=nX&m|Tua-}`wdZ|DxaTVpWq@tHz&YL5;CVC#v95wJB*OLp2mMkR9N*-~g;?K3H zFn3vA@krNbdMFU{7L0UFNJ~p~%>xZwdSyy^Ak{UeI4@W97U$99XjIG-3E;Se%f$Hw z3+K7=3W3$|yixN;A^-l=6vAoA{9MtMQJ7m&QZQ#+_T%@KxC)DkUhyt+l@t`Bw}s1G zC9f1LDj78pTS@>+EE01Iff$IPw_M^{Tu@T*QX$$z+L8iszAJa3%e&B9;>|6jUQngn zd9L|jT+uwR?U8|?k;_F?cM+U{+zX(6jtjJlP%c*#bLY&@n>*4~u&_V`k<^!5BHr%l==bV2^SOa!X#BFo9cG#P04-rFu8kXIDf~T@g)nF;!*X zF5+fU;o>}CSpvc4Hl(Ky$5@yCOs*B5D*S*=B7W+P;L~3gu#OCB0cBFHF~pIcA} zJ%cQdn>!bUCRpc3g^-T*}TQMg=+B#@@;YW@=YH3CPRI3m-{`{-^m{eRx8ORTXh5H7dfHrE3GND9AIIkxs6()8 zjC9I#;68-3=r+xJN(Z@#>SSY=F%~e5BF_qAXGYPS->f?L*q<9`E5m2@0df!`P?tgxwho12=96qjb@XXRVt^=P9_;8P5uMu}UKBf44`(GDpi{p~h z^)k=t*YvgewW3zPzTC^MWxi2phvS-Wp2M!b&)#9zypKPot83PVnDMx(izoenuD^Qg zjs>`;f4M&OSGZPwr*6*?Tt|QRpRd?6xU!BPEUO)t!EI>qPanNFgKKc3iyU4ePjg zrxZ6KzASc8d~Zw!t}hOZcaE!#cZ{o#w~uRxw~hNK-a2lOH~u`!jU8&aLB24ETMp2B z@EMsG4xftfF75*zNKGAd`G_*ah-(ggd4znV$iJk!>m+nk_F`^qTGysQ-0ha zU53!^`uuSCB=DeqN--1Sx5ebdZwBhyVq$(b5WT65w@x5=sKBQXK<_&x)TU#Am+}KN%U%#b+WV21&TgWf?Iq#;4=qX;vfV zW%dwL#!AmdUo)qzi(GJb=Leh>ay{0+Wti0xvRVJF;igY^;LA-=}z5R@<`JE9zJ3oE~zGL3IVe6dQwKPKZ|jE;UuKEf z5x*4jX_=*8VpiV(;>1BQ@5C>sQU!V`=o#Qo1%J;Mg~N1o`3>m=cFn&5xJiRzUT2Jb zk$vmjk4Z<#YZc^)LBwHz(FFm`kX_i1cDKG74!?$b=ws^B14;O@;z#1%8=r`8+)n~) zp{L(wUy@LjKAnK$CODG~+xe1iFOrco1|Ms2I83XjdjDWsGbQ{6#z(cVn3*K+|3`b* z9wkL}=I?YhW~3oO7!yQs2SOBx*{!OszE%CG>Uq=ifQ-Wo4iTB@ndyO%o(Da{I1>q= z;}RgK#50R-;sXsv7u|?TvLLQOc|?&IbXgBa*$w0j2{A^q_*hMdmETv@)m?+M=AWFL zhuwF~m$WZxe65x;qz4{@*bd0hvZEuH9`s!*>2VjhqsCS|B#?bI;21u; zCcS2?drE2gp0V2%cVPjt(NbU>eoXsz#t&epbex{&qF4BYM?9`F!b?saXQEBgaVx%t zS&nnY22T8M%ig-kt});PaQlgSb$Tu_SDuBoov1GwTMtl+@9QW|W!eO<&ZfcB7uZ)- zcI?{%+IH|yp2bgP_^a%z5?{`-IP=~(;J!DNjUUr!&3mb@GV60R@6F&bs4$J7t2}-PZ!`n44i@NT9RE!wwgPBOz~PFHsoFIbVB}g z7-$%WN@?V!b}{C&ePj+9E!SG0 zagv`MLi?Y#ZXE7$aPvtQ9J$(c=6oNxHAHmQx;2-cVrPK4=k^b4UP;Hh@a<+c9>6~_uif^%R{Iv(ozff*0EfU$x#L3##RqH= zg|FnfypNWhHSgr7lfQ9ROv&yme{r@9`Py-yY?WzN;heD_{Iqn)o3!{evDk%@PLvR` z6x?r);#&LG3hY}Kx!SklHrc2MGW#I&06m~P_D#nZ;R$!7D)CVtJ>Zw&tD!G>U3_cY z=t8(iaP?u0I|ABP$P}$J&3QOy`f%o9bS$lP$z$gSIbZ~Gwd+lDFFB{9qir|pw8Cv{ z+%0c*wPEegX`J*2432Fy&Huu+yN!yq-Z`+%Q{;>GlCkHi5&Vs}BIVP~x7MiVt5*AD z_bT5~$A`(+H$vtVWM2HZ%wC5V!)H6d+jN_0EO1<5FoIX-Nfcw`u5iz<2`5)Qe|iQQoCHCBkvXpN2BXPO4iS-TDi zgX#5Y`51k+1%Hac&2jEwEw1t6{z2{a0JY#x&+zArAJbrkee3?U3H8nR-1>VLjz464 zHqSkkIb%~J+OXoo{rK+i^C&p&RND7=VYS=$t9&=O)U5Eexk{BjVZ`ey7yEL>Gg=GO z=Zu}EN&m`orq8tQi2fNbEc1DGjVh*P7vb#PWtuw98TmomHo5v$(z4?qci1h5I8rg> zwVxuX3EcS?Tb)uN<|_oZ9@q-G5|Ue(-BYxr=a*s>#lpkjoFI;6N5oA##;?yb2k#?a z*a{3kWtuG+uDzeEw_|L%Z;5?T3CAP;5d!!>&+yT<<2$Qe7J{c1f!%vp9YDKVp2M>_uFuxXT=5_KG~lO!KHOn1G(&b4*Ooc^i%c)Bu6NMEX|dzFJ#+4xli(QlG7lU%*ffk z+i$yUsc)IxIdLh@uLO5VE^c}O70~B6a=q7j7;WH3L0P+&eX^e9Po(E2$PK&YTC6ot z?enx+4UmpyK>oh;+CD4(rCbw5zC$tjDsacUeaE?nuXMQwdZ>04OMG>%Qnjzr)o!k_ zJ7YM6{zm!5VrvY=z6#q0G=DUPBj6pt`D4CU=IT1;v-Ws>p!MxH&5m>N7iE>prCSl? z$i7?9#;EvV$GiKj9!b4&-$K{5{Rl|)X+4_J#-RhIc^%FfA9Ui{ysRGNM;nRr6Vs&U zhL4SLn`?~N{LFO~W4;P{oN%@^)^pEMG%wr6eyMe91qreW}8Q>7` zDsUWl19%r;_!rj30-py8f!Tlp7(f+J2hgzy=PqC+uo1W$_yKSbI0n24&~e@lwjI{7 z(qwmUB8Hr$WP-iNN-1?NQEz3MF*Yf$ERjSiS81vPiD2>M{B$GWcn2|c4M~I)*E%J&aS(L-Zwy+8c!!D;ps;}O+8ZD zN|71Y$JjEV5=kE&@g%Z+&Q^FxsO&9?x78u#uC@=ld<*5WlG6D#s3<|gQaK*~UKCL3 z|ClKInNZUmZ%dCA+I=Lteh}L= zCY>pj&U(UkfKH8-JH^;rW1J@HyEE;wa%4DkwluY_NHulFq1$b&Dc;$;q$x4bfsww< znvkQ1lrbjfAz`$m4^!01IIg=}82i_}CS*)4V<$aLE4r+!dxUrk@_3F|R&p7}o)g-;dlFsjCqjGAioRBSH`9(8#=j^kwBG=S!Ij4gk$5uE+TDeh z^Pll{rrY?Ow=>b%+B3-5MRe7hfQHk(a6PMw*CdZ-0AFs-vr~ow1*KC}oYY)!rLgdo9`Nj6BxP=(F5} zO@QyN=(KCdlQAh)s-Nw6s$K4Y%hq8bu=lBKlj{=$eVFIpyK1Z@lyz-(wWqSzCNHov zMcI>{TBJPAwbL9Sy+)Ytv{%#JwFEUdDAxZ4QC(g)ue`=DJDY|A^!3+3XK#ONs?XM9 zCUp2TG|Vrr%W7>|>hJ%56YN|y8mN`0Nx7QmkMkBdZ-KvG3*hAgZGSHmC9z1HBQ6nB z;=hZpi6_N(L?%s?xKu4Ikea2Nr8}g1r3a;_rM=Qi(nazVxli8df73rsnW#)xW-9-v zaK%t+mFtuarAHZ59#WoAb}0vx|5p5g^1y;XXJ9C>De!pU0zQ?`<}zQ*m+;5=kNF4O zqh6>^RGZY@D$_32zM@rYw`oPejlp|@4+bv}eJSJ*1w%EV`JuMZ^3a;l-JuUcW5b^d zPYHiH><7b3GF^CHV5nF3~U7gZi+3zy5^&l>VZASbtUj zx&BN2xB9#KA9TT(ZKy__(Pi`+D~%yzgYj+SF5^Dq5#yJ}+s4Jwl4v}-BKkmdPxLe; zQxw`Z8ZTZd&JzDg42U)2jpDGlLwsHI!A4(}Dy2H<`_gu44{Y-rX`4LRKh^&=|8f5- zN3(OD$HfRhOvi)$gf~sfX1Q z>S?u7YtRO@)!M&kQ-jw9uMhrPaDQ+lm>&{D)uF~vQ)nQxA#`tOcj%SS`=R{s`0&K= zR9K`TyfXZF_^I#<;UnSK!v7zh6)BEXz%C0T%Ocw&KZ?8(IT86)#G~iylk`jU8M>^O z=*#uB`eyx6*lDM}U;khIjP5a}8BIpQxZdb7z5(kzZ0t2&FkUi*=!Mbg(W+=;v_HB& zdPnr0=xamwzKq^B+?J zfr`NQ0=@hcVXedIAhwovdD_7OFGUnd()ls4A+aM${s;OpU2EYOPwY cHmZx%W|fI~)_cuy;$-nM_~H5E&$qyz0FXc`uK)l5