From f162081ec1cc4da1496b722f885765f52d509c4c Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Thu, 17 Apr 2025 11:53:53 -0700 Subject: [PATCH] Refactor ZMP Overlay - ZMP was crashing in most scenarios. This was corrected. - Minor adjustments to ZMP usage - Added ZMP documentation --- Binary/Apps/Clean.cmd | 2 + Binary/Apps/Makefile | 2 +- Doc/ChangeLog.txt | 1 + Doc/RomWBW Applications.pdf | Bin 396251 -> 405516 bytes Doc/RomWBW Disk Catalog.pdf | Bin 226910 -> 226910 bytes Doc/RomWBW Hardware.pdf | Bin 312391 -> 312391 bytes Doc/RomWBW Introduction.pdf | Bin 92866 -> 92865 bytes Doc/RomWBW System Guide.pdf | Bin 626981 -> 626981 bytes Doc/RomWBW User Guide.pdf | Bin 569283 -> 569284 bytes ReadMe.md | 2 +- ReadMe.txt | 2 +- Source/Apps/XM/xmhb.z80 | 5 +- Source/Apps/ZMD/zmdhb.z80 | 43 +- Source/Apps/ZMP/Build.cmd | 7 +- Source/Apps/ZMP/Makefile | 8 +- Source/Apps/ZMP/Notes.txt | 13 +- Source/Apps/ZMP/zmconfig.ovr | Bin 12288 -> 12288 bytes Source/Apps/ZMP/zminit.ovr | Bin 5120 -> 5120 bytes Source/Apps/ZMP/zmo-wbw.z80 | 844 +++++++++++++++++++++++++++++++ Source/Apps/ZMP/zmp-blnk.z80 | 5 +- Source/Apps/ZMP/zmp15+-.new | 8 +- Source/Apps/ZMP/zmterm.ovr | Bin 16256 -> 16384 bytes Source/Doc/Applications.md | 125 ++++- Source/Images/d_cpm22/ReadMe.txt | 2 + Source/Images/d_qpm/ReadMe.txt | 2 + Source/Images/d_zsdos/ReadMe.txt | 2 + Source/Images/fd_bp.txt | 4 +- Source/Images/fd_cpm22.txt | 2 + Source/Images/fd_cpm3.txt | 2 + Source/Images/fd_qpm.txt | 2 + Source/Images/fd_zsdos.txt | 2 + Source/Images/hd_bp.txt | 2 + Source/Images/hd_cpm22.txt | 2 + Source/Images/hd_cpm3.txt | 2 + Source/Images/hd_nzcom.txt | 2 + Source/Images/hd_qpm.txt | 2 + Source/Images/hd_z3plus.txt | 2 + Source/Images/hd_zpm3.txt | 2 + Source/Images/hd_zsdos.txt | 2 + 39 files changed, 1037 insertions(+), 64 deletions(-) create mode 100644 Source/Apps/ZMP/zmo-wbw.z80 diff --git a/Binary/Apps/Clean.cmd b/Binary/Apps/Clean.cmd index f486e41f..75f713b0 100644 --- a/Binary/Apps/Clean.cmd +++ b/Binary/Apps/Clean.cmd @@ -9,6 +9,8 @@ if exist Tunes\*.pt? del Tunes\*.pt? if exist Tunes\*.mym del Tunes\*.mym if exist Tunes\*.vgm del Tunes\*.vgm if exist bbcbasic.txt del bbcbasic.txt +if exist *.cfg del *.cfg +if exist *.fon del *.fon pushd Test && call Clean || exit /b 1 & popd pushd ZDE && call Clean || exit /b 1 & popd diff --git a/Binary/Apps/Makefile b/Binary/Apps/Makefile index c9ae6baf..ca7b2f20 100644 --- a/Binary/Apps/Makefile +++ b/Binary/Apps/Makefile @@ -8,4 +8,4 @@ all:: mkdir -p Tunes clean:: - @rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm bbcbasic.txt + @rm -f *.bin *.com *.img *.rom *.pdf *.log *.eeprom *.ovr *.hlp *.doc *.COM *.BIN Tunes/*.mym Tunes/*.pt? Tunes/*.vgm bbcbasic.txt *.cfg *.fon diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 45e73ca5..ba0a8123 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -4,6 +4,7 @@ Version 3.5.1 - MAP: Enhanced SLR Tools Disk Image with Plus versions - WBW: Add missing BCLOAD file to MS BASIC Compiler Disk Image (reported by Marshall Gates) - WBW: Doc improvements (per Fraser and Rob Gowin) +- WBW: Correct ZMP application crash Version 3.5 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 2ef302cbcd26cfa24646368ffb1f9c72b04dc16b..1679f9d347670e628c2c1ac43308e24dab3e6861 100644 GIT binary patch delta 61648 zcmY&ky*&9irqK0F{j{8 zybqL1i!S>;Lp1mqhnt#gu3 z#8#U7tnI|=m)+-G!&**LOVGu+IfMvyd4Bm@mXU-g7nJ)m-*L~k8@0OEzl#q>V9`%I zO+(8^#G;1$ysW*}bjc${O6B$cQ_|d-U~^IFIxQTWH#g@^mQCW8M9OF-i%wqaYQYgOs3|DM((PSU!3 z7(y?cgsjkI*NjQavU#9~sAWlcv{`r8dU~?{Abz2%lUSup++1*2c|3d;oa9vU z_d>nz*1a|Kyive!vAf9b2UXMNr-kDL=h=sk=66@vi$4 z^wqxHc)@&<76^)ch$1w$AFlSTMfaDVY(qIK_d}v&xcvBhy^~5AO+%(Qtu}NW*sU=W z$3IB&nlXjnM}4=d_9bf|h~qsG_3aw+{M!I>o|gMz@W6w2>9m>u>5)~~7uY(^Y$fHm zKb79n9oeO%h#&k#jT*?*j1($5{19SV#ZXXFG5Sc~@Mc{&GV#0)*iW@ZSl{s&;&#LR`GT*Gr6O3I2g6v~^OUBqcuTxv!a z#`7hDi5083KZ3q=W5Uva>SrGr52uy+{wvRQ`)yGSh;*q*LLE+0_!?)ScsNA!x;UnS zOtVR%POe0khf{|-l>n(yT@iOa^z17_X#1jJH>fF*&JI1mKJE1jO`)mN2 zGdtV5KdrP>5L-!W-Z5=vVF6Xz*4{n>EjxS7EUdKD>u(+0Di5nuAiioGoG2%~s`93u zMrydTMW4gm41&I#^rs0&k`9aF`5Cw-?5u=v`I#A1Vkzl@Of_L{E)Ls_a3@x8U8pbf zEXcUhP=}%|=2(!yLs$k>$)R&105TZaAku#Brz9>IV?t8cD?I|rt*yloAT5}K>FLqo zCsR38wP%NlBT9X7O3@9fXB_*WO0%d^>FKq!|4zjhhSAfn=YRedGm3N2)LDriYOR>5 znl=j?!fRVv{jjEN=hlZW*GRjx9}3;lReqKQ`AT9w8*c)Y%V&8a9GHW$q-u?{EQqN~ z#bzHec|HydNO;tp5%_!!d`y z-Z0*CFixiE2@>TlecPc)Zo0Lij8Qz%_{+&TX7>j`FS%iCL-UzipoPue-Yv@Pm-a@> zrrE_&FN;ycQS+cRLQ(X0oU{5oM~1u{A_--6zVav!=tw$|8f9)97T8FO;R_?AGw2`lMAyMZ&@X=7Muml$p+ zZ3~E^oWsdMg$U3)==uo{YG^xRHq=lGtZcg7d=83=2&n3FTv_O-3r{uvn8g{C{i{wi z>3YinUoGF?+KM|*k#mitlFhKILDVH(pblL(>$+wE&WBTMq!mE`->wvwna{8we~g-g zPDB%!O#Q1u3pIKgwwh)HXkA{J&(FRl`EMDW>zWqWB(_)|$E2mV01`n#1a+0UuuD=4 zKi69E9&x;rSI6Q~1bNHJ?zo2#b<=E8*h~KJb2KrdK~(6p%-j2*q4kHWH&#KP<$}8< zaSE5MyVf_j^gzFxfxeGPWdIBTooB`w@QteHD-$| zVx)-0v(piJc}Y_P0{osXucIiN^ORkj)93!K_w z0-FkzW0Dv>A8W50m+2q02)WU=h-8___o8mzP9!a_e=yJQ{KIl@@ysVW=CUq1^9ggn zK)Edag39*%4CeD9M-Z(bY0+tc*C zY5wbTnwM5A0K4T;|B{=b`4ZPKal~U0^ze5k>w317@9|E|>itwXUO7`)DmKe_Nat}H z;rRl|`>_70%vm~PQf>XhB9^XAt5EFdMCvh8>=z7rbx9Nqdap`)LY>Htv4Aeu`KLtW zvjECyhRAT{BDOz!!x%$<+}{%-fF0a6=J=-)#a*P`0KC{W5Me0KK@IQb=!|8SJ#RrkQNLUBilA!JERk=b5k~J28fQ{;Png>BLiDa=c(pccU+|4Iqub~ z)V)Yd>!ig+KwR^Cy?)l^ltnSsFKgNXq}#`1$2F-^m3%p6x@MDsG?p4Hr#HPLH# z*JPL_(7YPG5b;m0@kA=mu6OcLy;bvKUNLhTQ*Fk3}FT+lxSJnZr3MYf8nhRYtlbi zdH7Ral-z26u-Kgcir7nkFs&FpPTOkthx&4Q2)Gl}qHNpcoqASkZMT4_^89${@Aip{ z%QdNaArfY^wiez zhX6j4jfEBK#x9--L$#$Je&+32LUVbGchmO|mvA19hIE^`%=Cy}AhKe&Pl+lArep>! z`8M*p%bt$p&is96y^{@f0p3ZU#&_6e^L4tW?VS?m@AjHbepri=Z#~&Ibxc~ddOgN| zjw==6I>lhP%goZP`bszwzxkGJSora@a2MdQ&JOIYiH>7lx<0-sseSYGwKZV1V~5>+ z-^K@fXg}@KG2KSY^VifWK!5!`!=L!sq_D$=0UhgYk9*hxc0azp>z$ z&w)JzF9PXFC5xiyQ@?sjPv6UXePR+bKA#`+te-ilOlX7%hKCzMY@?mpD!?ll@7jR; zI9B!`OPBe59h1|CqRX^H>?_{;^aNP`)9in)GgBp->Fn9C>9M9l zjG_?8CO4=d7$^}YI|%b}TI#2;>0wWqQobV*Cs_9M{j2e@OFY1Eql#&nF{L3j3>!0a z)LVA!n4+D+@E195L2$sRxZ2R>YnLogsLUGpp?DY{l0YR+U&U9HYFD&fc82wsDQ!Vc z4|Ga5rPTgeb)FUDGM7!}`>ARvbrru7t<-`I*@$biC3V|$Dw$Rkf~hqpNS>Uca%!pMEa`^8<2qlgM!8e@@ufTm7q({{jZHbqalb$WZO0RF zO7)*3h;WNQFd;#?H)$|Ge|(9;^RkS=bCV~J?6rE!bCm6DZYfgybFb6SNeuVKswd)` z^M>xtT;njrPV2)T0{mXi0%G34DVa{V{Xv3Tq;rAb3HSkq^G#mC={V|$mEymA&uKl3+PH_?l{yI$1<71ZRCG-`dqyBR&nzN&^JEcRP|lVHNJ)1 z$YYl9`>Q^PolY4V@w`;=&EB{kXv`OUFFW>r*=l$h{0pvyjmr3x>^(h!xglbC(EDLR zxXJHle!TV&%y!QA1FkaT&uk7rB!(>a>Wjoy24+0kIijofly0cV50zz}XR16C#fD*5 ze@(s&y1Z96gV(2dphh#8NxM)NK|K)x&uPTA0@t;7S1Nt91cPs3)v%pFPJ_Yhfa4f# zHC;5eBUq@osNAO94P3dCK^5QOI}>TXz-(!19#$R~RS8l#4>jXOQyECMC(4u&u|$Fc zTVkQYf$o{p1*@t6> z0SEq27Y-DTA~l2;juL4P%vi#v56)O3Btr>`in%RU7?d=i#G2byR`gQh$>zP&BFbih zE92nN2@zN$Rze@tWHsZRz|an}G}o)d-%vu-I82jRfO?0w&vCpkPouGbpqavPOguo{ zU{ap$LF5^c${F7gqL^vPA&H`_$U%+eKm>TgB12g&JQQwtMl*8|@()<#K{Oa9bv?Dv zS*i(XtMBTXM45~sB^+DGd2&RV(cLatA4;_luR}+ zcu*6khAo+M0xLQ=vV>NTYoU%BfdE0pO~^vRTo&bwoC#{AtD5>iEM8k)8g2%7X96o@ z*xu!rrk+x$2O=`F=8nDLjq`-E! zrGhyx%K0;_8#IuiLryUOK7+EknSE__lojn-&N%X5UokvhMv9qLGG6Hg6ILl_wxk15 zM$@&2Mo~HG*I~s{*bysQ7RjYL*+ncKHX8G@z-JC&Ggu->N*x-RF7Kc&)kq1g$_Hny zQ8araxgz?$HuRm?J~!eRrQ|^+yf!Xds1RkL4hO+G%HoF=Z6yF3mCoqO8?Ah?h(e-U zID=tTX-Rz ztPd>P9~8_46aB=qgyQ`WQ#m-A!4895IH4$Xr_G9zaH!)7NOTJ3wW=u1;GV%g8F=#u z2B}j^Cg`(p9MnXmDKm3H(SYr?uqRkFZ1JB9L%LWNn zg2#tUu){k-m_*>wA$e)A6tH{(;E+Q?aO@BYAookUC|C-{*tiu=MOX6NnWGARlsZdR z_u=Jd1FdpPRVO>55nknZM)~{ELCC2W1Tfy%pJuwrz8kOobjTqz;_^TCVIkqWj))a2j;#U&3&-++_x4devvr~rH!Q90 zrU6EVWjEG+*IF zj-*D_&^2=Ut{dLQ9Px>FdMTT}UH0vo%We*(4;>SPDmS9M@z`lG(`uystigqB3{`=W z^=s?51k`rSj+6GEpENF$5gd|FB#>fS1$p-sztOW<>^f_ix=_^8?CgZ3`0Px;@{DVa zr&{21m{yoM1!e}6$y#kF9cs4#FBOjShYc^R?D2oxaC`WC{w~+c=KZlqHea?|w!+Ik zAEX;dBzBs8ChygVNgu$_YV`3a!}-wRlaf4150t7MQKd}d zr&My)pHG~E!hF-bedz-{Z&hP2;7Yr0h((*dL~h-{SoZT1LVox^oCt6o=YH1FFWyxj zNjl|pL?XY}t#(TI>y*bVRw-TQ4q9g=*JobMVB(Fup6pi@7a{{YSm#wHjyEUjIivff z*7Bt11=pn-V^uLb=+&}L0oa8Udk)3CZXV=U8g8~uS8bl2N8AUq{DX@@=qG|9Y$^rL z5pR~vkF+oOVf#T=3OR#HEy*kKpRvoh@b6ko{(0Vxd)L2cZ`2P%7Dzi6A5iwQDZVN( zzSATVUE+$1Sh{=m$G&JXxoa@-NII|>a>Gx;&h9`~#5MCIxb>QD132c-KdB9QfBiC* z2{XZCf~Sd8{GQ_q4W~(ZMvC$yjH5RGglz`D%W}JU5}MDNYlS1?5k(#duee>}cdgpL?^T4@}#SBK>$#Dia(oW9X^+Sm2E8#a}$Zcsk<{ zt0Cnb_~;YFft-X)hu98^>?f~_*P$9pv@%`Y_$GZFaG|R$Xa<1MzNxGDGdK>EEdJFw z%gNl(ZEN>1mm1))pM+o~z=e63N;aW=p2AE%uvobhEArokb77O~jhwIf*zX)!#OihY z8ndo$IiJc#VWB=l=JRZSZsua5i)TE-NNtGbhQWj+|GqG;C_cJ_O%$D;{%j!Bm5I== z^4mwrFOkVGGSfh)^g$XcW@6$Ry_`r4_Q$ZT9(>_Tp;ODGwug79FZLwyK9vWLPNXM4 zCg-lp9X#^n9e2xmSiJ>zXFp$$juH!$9ZrdUoEu-PUHfuoVV7Q{5(Ne=Ip{XS~^^d2zcWUl=C8v{+>d_gBh0jM#*{ z@wL~|r?s8}Bp6b1=40l$C9TVU8mm1#-Q@&oKmFRP_4*Aa2`Me%jWF&!n_SPdt}>b8 z#}W78_H0AMtT!#}&)B&0ty3L8X|r)WLsdh6pIuj-WAgj&)1e+62fg=;l!lc!s03+BasmRQz-EH~wmY)NZK-9q&y|9wn!rTO zbFQ`6FWYgt+rQ&yn#+w>!bDvl?@v-E>eBZ-C{@b-*F~pakHAJ*0Zd4ns=jQsIg5r` z?IT1q&$I!HG3Z=|c3l|YKb>SXQTb7`3?IJev}iUyXwtb&%&-^S{X3vmK*e$@skgHe z5F#U;2L}IGwa4r>zLQ51?4hNk;yOb`8DEhNCf#-*d2f}6+4HfcWdg;(>Y#@J1vNqY zZR+~vL^pkmv*vW~JvdmH7m$u9CJs{kw(;jY1t`u8hQ6degs!c-yO5ap6m%+BqV!jpv$M+H<$ckx!ih zzP?*GD)&8*nNMaFcH5ZmVVt7WMsLg-z~Z8Cskl5SO0-%S!RGcFO~~LW3>5lBB%nqj z0CYTdq0)OE^Ll)l7-50W?q3Z<;Eq1@sEd~8PNnC@`M8mGJB#w`PxA zjnbpAy6kXHtF}JAxoG_d|!kwAd%ORfx03mi7hZ)JMx zor2Eir@7b1@c?yLPRY+*GR9*YPv3Ar5kQbOwLdXK6x|deQ8{~$Vq(tsavH1@Vo%sn zA_v*L4+myTu^oHrtMNYY7sK%#QZ1#{3%CkDIBAYgxsvbZb3Ei_y?(A-4(lp4$p1oXT2)3Z4ln6#Q(#9g_yU(>I!u`$x`69LP3hQmcT+<$pLBUC7NZ!NMfnml&XA?x_y}}cR06# zvM_YqRM8kij>ogo+T3K(NQ#qbAa_ukp$6es+fo(IV0h>-_Gb>QQWd@!VytpFcI&ZX zis;EEMeJ}WL8i{J19JhiT=VqkJJ6jot`=-dRV%5WB%8{Q+es-al7GH5d?zo9j}F$| zdM%CU)D|_|vQ!xqOwUcGfTA|}1w{9g(M~2W7cS9WZc{qiQjUBa?5?{&Y-GlL3~P-| z-2RT`vz(|DmW!OR05O&iA}_Nd%X`XPemGc4 zm`Qt_CXpVfr(%+>)??uq3t5xofxh+wu|oSM))K*J#ZV#aXQ&=DtZ!Ld=HZsQU@8@} z3}#w)32VBT{qj6`ZY%0=MlWIM9+K(87f3D~8gBW|M1D>6_qL{#e|3H;DmK|Jw)M83m~yssaI4 zcv}=npphG8^#Oqv8d~fXHaY?>eIBh+AX#FP2?r12@n}7UhduM1S~4X#FRM!)kvk>^ zmNV-}6D=z;i_NORtrFAw-7zTZagN!>1JWa7(Xza9aPm4y|_ZgxX{>B35T= zxLlnwQ-xGRl>+ViEjE~3kz`|8>JQPY*a%ASvo+KyM5+I=FkMioEL9^73Xq0(I_3|O zJnz zr?C4^caUkU8lZ7Rv%dvaXf58^=%$#(2TwU~H+Nlb#`?i>R`qcTMqA?}(_@aZOpnT# zWjI@WrfRfx_a)8A)S=CUl@ZQS#ZJ|i4F!ep3xDf74W3}anV=Xtjfdry;;B-wG=)oD zB}TA@anVgR!;tV&NuYu%vyQO!k~8=HWWyzlGMwt41$9A^3TO=FMh(f#)7aSu{4z!P zMybDA^CD*;O*tQh8L4JgvJRTE1!lCPT{ASN!bj!JQ4AEEznhghK`k z4|PsZhC?`Ia2)XE^0!a@2FJs!=z85}{ZZ9j1__!6iSYKf3$*eu&@aFa(Yv$IQlb#( z%C6*Q1#VT&khMkH(}~p2M^?~R1FwC^5jJm^=X(iWxouqmUO`pHzO8@Oua&wk#7$l? zxj(Q)|Nk8ym(TVne7ph>Nmlp|_`HHt98{WA?3z{{E}rfdRvuJ*y!_w~4Gi!3c=`St zg0OJF6Tg?CGK3BYfd3gXKypN&2RX?bI1pq-1RfVg0AdLX&j`U2g~!Dg_&;TO`UX^- z90F84oC0jz{16!E5X1yPK!*euJ~az6vd zfwod}{tm2@yoGL^PNh%V_>-xZQt9qkY&rYU2{X`EfYERRnoeQ?E)G<~u7koj14f3XOZma%_d zG?W2w9**MD1zHJR2#0|mvq0oo%)VRcj97n#(F@pS%<9p3YkWoAx3Fg>d9OgNS=2Mz z?mUMfu_-=d*O%CP#>uItdz0P0$v1i`lphSKsOWNx*y)U5tS*~x5NbWgy}us6E1>8J z0`Bk3&*4gl*nyXu-9yvoqwVLbdAj5U_lJ)zcPFy;mj!Pf&-=U60Os!3x$-@lGWP{L zrNy`8NHvCp2ZrWtV?V-T#W&AvBQ~3J0lG?k_R(;e%b3CAh4)eIJZuE?!X6PWtLsua z_7Jy&3$1u0EeyZULws5{q(m_hmB#}=`}eL(k6iilN?nhh^P>^zj7vJL!2HM#c1!fj z40e6TU&mcOMlY(w0B7%cf1g#cX8gwUXxG!Mthwq3euJaz_-i^9U0w!}(Y|>;l}`U& z4>p7Z-KX(o=@RS(oFoZONb_1ImcDxbTdltqsLQY^>XyxYU+|ZYBf$M*VA^5UDo5-7 zl!j(F5r6_Y(eXeKSxcJqMw=`c~LI0mpY>0zg(r!8v+l@f*3gfm_dZ z**}*@<<_;lGYx4R|MH_c2fHzXo5T~lLH7UCrgYwt;Tf9RzbJLHqq9T7x`+pc| zQ#UtJA3^v0xK_O_|4T@#En#y-1ZJ5g{oXUh%9BBQi%VIzHDkUcnRDKulO}K5O07qs zyfHwuYsoXs3b;NAo^k>OG;!gIVa}11j5^YLkYSSK9k>@0ub)PqI%4}KgiqqNCZD@@ z*ZiwhJ{NE#dI)b>B-g1{<}kS5Nx1SMCz&Sn{s|fd72EMG-+rFIbZW?1)V)5q&;5D2 zviih&{+ThuH%LrUC~{<2AY&V%h>~;b8967yIdMV44#c&&sM@$~;fD?w3k;IY`!UXGwJJS4-uS>>i9cR2`|jA z@>0qMEfTgv#NOz*f_E`4Sr8jq=b({3+l)F zFp3h4HZs=Xh7q^%bymfo~Mcf}q7Ey0w__(dfP4f>Va@h!1=VUyse&?Ck zv^+atys1~Pk3D?w5;{D*`uFeh5j$?#Z+0iSPQSIK1s?D5SeHf%!>!$lL%0*1m6pJh z2BQEE<%Pt~K`2D)_p$4p@USRkW%6MXzY?Rj$L}-`lu3Hk!L{lXzK8qP>XARqx=;XU z-fy^PtU48cx7#<{vaSxS^W8OPhzf{VbfY}B?&iFJY>wWLC;`$_hqvv0?jN0tDSaV9 zWVcAAdwV~}NLa=4IzN}HaOo22D2?eHI)(!N6>GLV zzAsdDlLgyK=KJLhZJwKhM}Ird-K!EwLz5Ufof7wtnz_04SGg9(5k;-&+W$$AtFXsO z+_ug4*Y8WB|0_QmN~;R=+S=MC`vVejnRv{b%%7y#C7N|)m2x5mF(?#o10w*p(exjI z0Y#c&&*j2H@+XRF0gWW?t_!*bLo8>fojX@s3rLSRauq#)&XtSLmb(M{lA1r(eiNxF z1wUh(vzNI`t>c5Ps#$HPM)c~RhezjiQ3(Ip25xnecAJo!@qrU>@?iEC-3t%_;)(w9 zn+?lzA(bbf@~oN>n-n2x-2|k`G8d>}Wzt+WC2=!5WgYXm7+y4~eCVZHXT#gm(A~DL zbwP4;WHNg7CGLGWQs>)O(rHhZnQ!0OI>!BGd;GdDH~O;lj`X@6w@^a#fIn#O>hH76Ct{kQW_`dRM5G@t zhJ{Kk5hCeNa*(Kgfl?X5IF3~&IOLPVc?SB@7DfliB)OPi5KGfWJpiJcU)^SAN@qMw z6WDuR3ixs&nrs|^cyg9~NC=2|7|jE|hbbKmPD{-a`2fkiG}p|`y9%uLS6uEwq1XR$oY$(j>YGdM1<=Ny+Xn zw^1T6UqHo=m{dW-GowR}Nzvnq7Xl9`;owBz43bG|Gu5Ta2!AG~p1>YbL90?!V1XZ3 zr_)t}L8QmfhK=`5RD(mLC%8cHfd5X5fJo2BrKc#h7BYnfhig+=mmTg(w_;MLKoycs zy9T6qDnmOHgaYXN+)|5XW~p9=uxKi&3U~xMbl`p^9O{UMKC%$)P<*G70#Mikj1`Wa z;=p7C%K%vjlND6!Liqp&DB3y}#)dnB$V)-8DHUqu=MbFJdr#D%}|0ioW@6kP?V0$~kefD~ej>r%sMOW}o!sT7eQoebaJ34hxe zWv}n+TiDtjc8Z~680X+9Q9{s7N!~Caga(Y8^E>qieFeCQtwx-Q&kZ+sO6m*X`C#+W z(I25XSxTW*3TYA<=90}aV{NfA=9P6QgMa}Q z4wo7KKVb|kbZ%}8ob#4)uQsV{cWOVAD^my;RCuPuvLaR%i{;p-tQ)MxIr=C6cNT}mRsSJVFO;Jy<{Et1mG$zVy+DrnVX>X5bPKUfG6RKrT|KB=P zs}*8|#Wj~acn$sw1mSOAf6&&2HfAUHPcb&3HsC_LJ-pwbkuA4E5m-Xy{7ze_s|f7| z*`uUE6IC?@1v;)O1*4lfQ#@3+OwUUUg3bVG{O2JE_f#ga1>l4CchK~picF{Fk=OhL zZ46~+;Xvo;m-lUDJHFvj_bK6I<8nIBrg8tbG=YVUXI}~76Syy;WT2Zcwj=o&di3}` z{jZ?TdBe6$2gGx8?%W(VeYUp0neJoSEB;LQ1A8?JvZwH0GYF!u2>%_18E+!N@!l5^;T~ItvPtL;%|XZ>*J=T14VNjm3&tv_WF$e?d^n>V}^^Q)gTv=Nv7h~ zWEsIj3sko8Q?JNmlUCp5Rdl+?rMIy-&}3sRjcTjPu<@mUCPr4nQN3x!F>d~&siEl< zSTH40>qKYODZrO}wzyqqd%nyr#fE%xO<8$eaeGp4u4ou&HMrHg7H#(F&D=K_h}*l@ za^Qw2jKxJbv0jQsE;S@=dv9ZUG(8*DR?*o~S1{?Z_D{1iYJU^a8|+Ev$@@r?`PU+; zvo>-@)#CAUwgI!M6G`(z(s-?M&gA#+yW(GVKQ7jdt+N-IvUL{_G$gp}!Wr)O)Xp0m zLyT|Y5}(BYnC>Jen9lBIgw;QzYS}l-v*&)J_MegxJ_(JGt?}k1ls7x_6P6a$pB!1x zPg#4O;Ea&F3n%XX+w9mP_ zkUOxz1)}|+=s2|^QMJB5$D0#MXpih>Z(dF}W^O@gY(Jf-sho(_I^fYfhpC;sZpJ+k z`r|8^G0M_hn|E|z-4XApv0X54nG-~ka7BW#Nz_Y7nMK-ueQ)coSpBA>)bZtGh?31* zGGoLSfE#~qvOD3Hh+%*9&^NwFD~9dwY(VsIjrQ7_H)`wfhBa|mJL_-blU~d(SM^H( z3C`Ji`0(k0*k$Z+$=&etfyU1e4N{}dSUF%VeAUieNFp%mnYhe>?lp5{EQ!uurSpJG zFaL{>Np!Tlr$+)!k=M7S6xPG6fK-A#^q+c4fOQT2-Zv9a)9--Q~wQD~RU%ohcH@`7{Lx6akQ=;b;1S~iy zjZEpGXe1~8k~;va$ZB1{NA|$xn>f=g$xtu~V#+#nGn|*>9Icf2J=!&HwDtLy0Re>r za9duG|wQnWfOgM^UG!oL0_(=S*Gy-L+{ zJ7AxJl<3Poox}0I=#tfKn8S^Y*mp-&`SD$ff6iiGDwewz9Y>RzbH;x0q8ZBz@##?~26D65s#lyUWSGv=I*9>q>G11rvD^)ptkI z-U|wrNjTBA^enMMG3!Pr&W+z}A^<#Mj^LU^N!$=uTLu@-6n09BVHB=f!R(j9{8y=XOV9aZ2Zg}*rz%!U z3jVxDmeM?gRp)!<=#7s^Q}ErYf5TPCtG#P*<#Jzr401^4mEqd5`_0K1*nl`smv5wy zz|-#K66vRJER9LyTaixkdY&y$k+uBU>ll9VqIZXpgbZ$Q%1v$mMo1M$RRRP)O~$du z8yYPajo+Pf_H@>Nml9R~xn4ir5VdFb=W6$6-S3Z~IJkG|b+R(W4!d>!(Y!uqYYawp z;v1zY>XMU1(lTN$yUzW1{|xZEKSAvo|Fn&ND@OcGX}t~bD-cO~xe9rog{fwzmr_7J zij7s&sTFo1{7ZQ)m%MFK-uzjBe2H(c{Jf#%Kuc|e@zN{f!0=hL5)$a$(F&7XK(3L8 z(Q8;_5pLsAG-w~b-s^ng0<1Dfw4FD_T~`073sMV7`z4Bi12UnNtO10Gij|#o;E>a< zLD^WDUq1YX1=pnMna?Gls8z&#=E=NP!J$#{`+$l}XAD>J&d@u7mnkenF+wUNL@`}p zuut39gd0uec(2W>w$LjS3dM?mhXW&g_RhRkIOgCW29w4ksW6hFsaR`Evu1uNL-~|> zEyKh?UAF-%mUb;gT&km8fDvSFcG+=ePK52V=>tVU8CB^KVYg{uaB%n*kvt6+AFiPw z(zDYd$iah>`y=zIOVECY40*m`!f9#7BFn*hequsKEZwujpb1T56hu?eapWX|EIGo_ z0V+Q@c=n}012fu{@kr3JKNcpkl$sVwio(H8dkB#wN7RNP|0G7CM-=4}bt}c>FUTQ0 zR#40H;py|%yKU0GlryR=GFN_@ zfsoD1(#*_$$slBavDn~+nemWm|HJgqLUCQ;AYx~$@Yw!7+WD(04vrWw<3yDjrc1vj z4s}*)U$g{De`-rnGyb5DSqCZ<%cJe_A&!Guy#!uaQDr#;q4rKF{3pzXqRp_B)Ba;iM~=)5ZY0n;i>W9Sp#UH^ z`Y2;fEW&}|b7wp=Z#?_I$}G^pP!E&G_~JurdEY{`aRr5JilX2U5GN-T)TFq!F04M6 zZbkqG;x$9eLB8oQgPQoH+|E`g$ZRwzaQdNwi)5f(E}X22zH<*H-PpEx89tnqYT{9~ zNM*%6nKtQ?+=?A896I$O@^=u0&~XJk`Y>aSWa>0m;+P_Bvrl-%0KF z5-E^JmJ%UnT+IATLuW7s^>N{lB+)s4{eT94Jmhr54$=kKT~hy%sY zjj7bdF^p*rL(z9i#L&NGG-w4|(UvZ&y7pE3JJ-6)DzaPFq2(%lg&$Wamtm^&0Mzh5 zthnXGruKP(ndA_mQUSW$=?rMFQ`A9t=H7VPaL6n)g(U0B(du(qI4m?87U)cM!YGw; z*cqwno;bOhxWv%$Y*7C>V>tm+U6s0hGd|P}5^x{Rl)V&U=eMt={~5X%&&9$}n8COc znI8iUShExg)MC-(K|mAdIECx9UeUAg9W*Oy1uR!Az{hgXWGNRGgoPQ8JUfAJR zw7}W0oGf&OpwxlAL)})5!dFk?w&=hZp6fp$c*IqJF zjjseP<3mVMreD)1he^+xRM^K@qgvO7?{2vU|D~h&6!i8yW9rI8@ItsX|F?`U*MwJw zuxr87LZInR3~|(gmg;y9*8W$$?>;;Y7WC-%SaB#KyKKKb1nN@U5l0L=$sh)dujo*;xkuf{CkkrvtCpXn@lj6ac2BcB=&^+LJ9 zMM;NT)~gA!_Lf|y>WQ^zn%X62eEeomOOU-YQXu?iiEsP-ZZLX|a#oLV z@{g~b()1P8ug>==_R~_z?k=0~_tztL+yDFi|3dN>2JheP9VKS(n?}v+w}7Bdgs-{I zZw_Zc8;lMQuhVBPm_Q&>6bO)wytGsu5!9L7k4zLaw*DS4_Ll=P3kg}61&qU$0}j|K zrTBU(sAzX_quSLe$qXuuzN_#ZXm-uDrZW*+?)7iy5Pb+Inl4IJ)TT6pN7r+++WYDr zP$5)bp_b=r|KIEX&|uOcwl9~d9A%YG*OxN*dgx!gOsP_vclde$Yv444s%lQrL53#W zNwbGFjMh#hmlk<{=?@vc%&CMKu}4JsqN(QF+{kJXOP|BpXNWw}8R^b-#jm@?UF`j^P>RBiiq(R*c;YDIdEUZZ>L{I!$jK`6KH*xXOPmSsyL>-P-Wr zc92voiQn{p#|-do5Ceopx!-g^#mo~zh(__wvs0Ct3DduQ)>oujMeNEXty*03s?EN( zPY@VNPV;S>c3=ZX+vI77oP?}&%9|7iei4sNQ>i8_pYsYB;*+kZLl2Kw!}>W&*B+be zuxtktH_+Va*7a9ZZAdRG#lLuW*p@*i+eXsEX0;0Dc0Tb5ZvpN5Y({9zlxqwe)jX#8 zU-DLOsBf+L#2xkR31#m${M@z>+ql`$i)0Y4?I!fWzbc=Sgi8eaKQ}bwD0x-Xe!8qv zG|U;LT&c>Ac5#WX~Rp}dk_u^D(2`=V($ zQ#b9fu8K_WslVo#GhLNV`6AWq-^DVncOIT_`+ezC&^Dka9-gSQ!MJ_HX84r%EwEV% z-M@Wi4cV9cs;QKP(E6DzEb~m_qKV6ohkXLRvLzeRsk{}j>x+vLz3G|0L;7=#w zH<##vt*;TZR@g{6|4fa8^QNz}KhQI&33Pip4ujZ(mMr6M6wKV&&hN<#!@D{%`OYW2 zy`8PIUlKV+V{M*RIE&&iKPQ3xDflk-tb$%ki+q7z1Ad8rSI2YC=R3~XLLRu!k3%0KKPAQ;YuvcM2C`P!ZrJee_Wyy^!0tAA?*o72xy!l=ioUe>dre)RL!oPk>TxCP~HO|?zdnK4E zB(DK{;rG(NI1q$FR+^03CkCUoD=0m^{dW`J6J3+VsZiJ#*ZAToB~MftF6iyW z{hj9P$Ix3N1Mv}$3I>U+Ue!eiIy|AG`nwKIt7kdhI#*|c{#1PoToqnbHI-8C?ru;! zUrGs38R5;pj)8#uC*!$fqhXRRffKF|g+_qLO}J^}{x}_%8@)B6^^lP!J~m%-_hVieGJQzr=-5tdLXFaJ_b&=C z8qj@Z1Uk1!0pH)%udfKN95yq#Vn4Tg?g+>LWA~0T;WrYXBK!?Ud~6%4z?7t8>F~i} zcz~{eFvu$Vmj|ksbV-p+j)q^(U}AkFzu)nTR;yQ_hzIAOJMCY4lK1nu3Tw}?Gsf-p zf0Gc8{^b7;TW=WP%i!+r1PvN2!6A4E!94^C zAt7hD@8^Bad%o}d*`2wny1KfmdUkfYx`rK+sIWPsb|oxifB!pU02Z7mTcXizwK}hr zz_zOSXN+Kq9)Wd1S%m7niaiUK7sC~&Z_>vR1mrxc!Tk`3_QA?hQSQglWAy0o3) z&~9?IffLSwGN!4m<1tJpJ;Q;dSXIm>;nH;e)n(S}6po{-*rq+-g|tKSvvoWv7mbg{ zKNE;8&^m5uSqDyv%}KM@fCemdGCSN`Yl~R}=$m+v#Lt5%60Wg@6|ZX%gG4Z=@;ezn zlHM%vH%$*+B!XE;W=yfyDyxU+LVv}!9#-2-3PK{ocwa@+@ma%KF9SwxYGX%PKI8jN zgayx96*Uvr5EtR}pf_`9d`ZI;FZ;R*4Jn^>V!LI{0j-ycZ9)z!f~odyBPF*+ z<$SHa0@pF_oACr#fI)a%x1WYx)41zmd8D-K2qw;GLIA?c*QEtgaXp7J`AY7T8@tme zEInb>veB!U%A;zD6PU{E4D&wVv)QV`6{TcrS98`aYi=QK1p|4V%__Pka6<=e)jJXd z8u=Y0#uU8Q-412;9!VPm+G&=%wkTzc>>IQ6B&q9Vj+@M|Z6wA7muJP#yb)xDxE)Zd zWHDEr!bXs!dh}^n!00_5`@DUghb78Jv|ZAc#676!tpXvyTT?M z@uoiEWQA3eWudLIyGBz(B|Q+eUQ+u=YsFEYMpwv~gC8Tw6PPLr@ZiTpXbD-4CPJ*M zy&?(5CTuocIxuM{J^+H@YCj1f*qBWx`E8GG?=!5aE5G^)YZpS(Wx-;{tUDk3JPOWv zBH?*BX_rP)GJlVT9m=HZB6Ne67Y&VlM|M*Zx>>~}f67RLfwQ5A7m1ScF(Clr!=`|P zXaAZHqVII!YW^}R)HNCov&2XxoI5NxMlnk&0!Ef)8A`C>m!xn1E{sL86^WhUQaI-NqvmO7-zo2L=w*KYEJ9Gg%qHnN9|*z zGa(6fEQ9)X0|Va1oox*dFrE8^9q8b`wyGalP2evEuP)pWf zjL;p7QxHZia?K^EDq!9LbG2yPYb{f_Wja$Kv2Z;un$&Z*j*ZW}BX&C!iu)T$z)s5G zOV$~onoq+^mR0XmK`VoV^!F$RLdW8}U(yS4SHnM)kF+HxxSG#nOw`j#b&v~ud)3#^ zcZkFYCYx7WeAuqwVKiUGRH}eQMU!Qs87POOPDq9j#u7+=bkR^j+1E>v$8A{;QB}k^ z1P>8*JDj35#ks~n?+tKOr{h__kCVX)4ME+0`_zbBYNLZ$osk;^ZO2`W2&yRQ!B*o) zyB)8>JQ3bsnNFL#iV_GDkh&70V&R6bQ$n#IbM>?uK}|k&u()U5@ZRhFAEjuz&NQ|I z)}orpZZPItk`S!mbcOh7!j1Y$3k)+yk^)3WKPPlcS_^R(BlLjTQkaWp?Ft_t;OGW< zB;5mDQmw=>!P#+R%qA4|R(rfVjD?rJ^E0CeE2J|HA{RmYd$(Y%YsYkv?~M^OktMVX zOp(HAF)DzioftH`S~4Md#xrI^MnGw0<{?f#;+9+BVLJTgEi*SVH7LPL++sn6P9z*` zcMRXY3hLJi*PTJ1ML6!JiTTtlZ(sxDwFAdrtlvbzd-h5kp^Grj0A&PZRT3{A!&IhC z-f+ZYM;c7J0Y^_in7Z!&Ms*P;5DJRX$4y;#N~?nmg7_rPrfIGL$^-5pg8VZR{I$FvDy6;aJJ1>r%x6uB7 zvZlcGh^MS60%5-YD{D#^2-`zs{%_XQoHm3IT}+Ic>z~XiupLbum@svt3Bg4GPvAKr z%ml&$ppd6ztpCkcY=^)EkmWUhx0dKT9P9K(-D9 zlk7j8{(rgngus0`0)P}fB0fN+4Z(WK#xg+^6yX7y#Uae_{D4M2gb3Ddtdg|*4zusB zvFb$=7v2jQRC|7I@pdwEFErlHSE{I~(k(H0S9f%)sZ%T&8dQ z(s%$X6@Uc*EbBYR|0u&U0jl2pRnx$px<7o4f;(I#Gx!$d)uqM{xcFV?@B8jNkL1V? zk)tz1oU6V$kFmG9o#Gjoa4b}Q>qhr&yFdCCV$d?9R`M>GKcjT_Nm}!~%+` zb>}{o%e_XkkdR;Brxsw8uM5>Z`+uK(t~7gGn|bV`dSQmwwloEUb^5$FZOeGPznJ=` z1i&<7y+^fuxqUFd0}JM+`Bd2&VX=wCjY`~>)|NLCi#zPJ*U1Zm{R7vF{@}G3;q)Dc z{LRL@!(XP&(M;a^!4xZOWX)AWZKp7?P!_& zsWYy$yPI>o$i0F2`_^ob?R~wy{Ue=}R=ZgLHQh$<)xjeF%vf}L=*W&p6J27~ZS7ZbBdfDmre_vG-H@Myof?bU(W_ z!^P15?+Kgk^w~Wf$M{Zi-v#22mc}22471)Re+Bv+S}9}y+_6o2hS!QC><;^Rnpkcz zuGu_pMAT$mmeZdUbwgsf{xmWFcF7WJjUo!HHo9f8G@uIMe-Y z8>}3bJLyxLKkY!mv2$CKd9=k)TR!;wMNEjSr6Xqg3y&4dFN5*|hJEx9sZlS6KA|ymU$pvLpqKtj$o)`ihN1Hptop+J{I&>eP5En>(9CAtT%zj@ji$2Y z&0&_!*9^JuLhyQ6t>~KP>PcOf>2>TmnX7jJZHfM}OusxIq=zEtV@R>CXOhnJmb-aB ze{yj9yzwps*5QrHFW&p@Qm4x!DDBq`zslyx_pA}B%CpXZpj?ejUXr9Vw~*c|cMg;V ztG&7X_Qtf5fQ3EAzc;xOqLQtHO5)^?VDZ)Vm~ z7?o4f#fG*Uicen4Rj*#l6m?mzeBRuHr`}8*eJHnJ z>ii;=*h4zD5mM*w{Yn15EY`C!s$KC5txh2jNahdo`aC+5H=FG%#))3OQMnXjyF2)) zFW>VEop+o!+fMKN#=C$P-R|EfE&YFv9*LslPyB0*OG|wXZDgc1hVTf0!AdTz0g{>sXpH zK~Oyh8@EQP=I6~GW=&AmRrhnmUMxzPAk~~5-$m6#!xSGzOHk%yRz-(2RH@RXi3aFO zOLHB*E-yw_b_g2~t(#xj#mul>anu@B@*RUvLTS8ELMgv^8n2Y}fOJl|_ii+{z+B zj=i%Z5@kmzKPg}+<adP9YmUeWfmvrt(!1$$kBVraN?Ra-&%u|2j+d$qm)AtT#5)?mIAnnN8$0A>*?n< zp#`9+F{IcOszgX#(!vd?nF?mKQJ#(><`nUcQKLE(q{K_-9r2FQ3<;Gssljf#hwXC- z7SYi_EhwwnRM3vUiHPUuD22}ove-{>gQJTtdOFm&^t^-Z$hV23iQh*tCnz(R_ZnH2 zKe@cTc%BuH^jiu$Y4%I%wz$aXA-qpth9!SwxyzJ#uqcidc~lSYPcA4&T(RN_3`Pi6 zFTdT^p|2^LyY+Guur_^F@;tr6N%q7qH19(N>Gq~}4Pk;_ialz!FXB5J=0@5%i0XPt zkqT~aoD7VQe~k$00?h{L@Z~NVv$}(97wyqSXX;IhJobdBO5rl=rREAWZE-R)gXW;B zndDI&!K<25Jw=n6em5S0H4xRSn~7kA(ZOS zvm>K{<&UNaGjvn973AB-7*%*9byK-{=b;WZXFSGAVK{9L~p`0-9 z6X8=US7uPPPZSxtY24WK1&4$$!G=P_pyq52fjzkBppz+c+e+lyQb+ux(`Lcr9nhCU zic-bmf({Il>nT>>7^d1P89DI4!8Lth(l*Jpm~o7*qK^MBu^iah1^GyEsFpISoVsrf$}0z`QK&%4pIK}QyVO&5ap z|K7)fk`*x#nShUZP%MCb3(Vw6qJfA3?{pzFz|7Mv<$*4k&htYX!V2i=K}gcv2~g5- z2%!K>4?+c4yFzdPPaOy&Fs26~OH(&M2D)`1*uWn>$TMJD2iy~Gum2yMTo=R(^g;Zk zF2ox+(T9*e$pTh&!42Uw1|a@N7h(YT8T^OePY;5PAjAXk1cAvy1$tojNQU5^giAe8 zB{4%#rD{tE9dKv~w*ILNE?uM=LRjE=fnGxpZP$kg0YXOL9WWnYZUh3t1`sKD-b{N4 z15juHsthp(1vL3VpunU7I9O$4P%@_>C^`Iz04fdz^bA45>Jy>oiGX7Q622Hh^Z|bp z5Hm9Zv8E?1!U$YEAunb2ozs!3zMzPec9mgr-@7=(QQd5FoSyIjLKrNI-x&1RYSa z0tvb15Luwv3PJ~(ZVCJXm@Odb0IN0V9CJwwfT|q|1=OvPxz@lD9qdm)BwBV$vzICb2FU42>wT+ zj{}4gFmQ%2rI`vN12N8^NxnNk_<+C8V3f)`g7M1j@;|&DV8=k53xo+?2xxHuT?R%N z6xeixgahAQz=`nW1M{ao;+;T`(Yb=1*EvBNz3~jmFz6t!K?0)(NDzGu62L$t2W&mSY3}j*A7>B%{T`sf zOP`3F9$=K=dqYT4r3e8LZ%{YTpHLvz6Oso=`~1U>4VZg@vR?au?2%rOP;d^+1%Q_; zb4hG~<29(10MPt2e2v#&Y%%ykXwpt!q5vwspsas}(El1#HpTbf3mnkq3;NK~8}b!w zX5j>a>ISHQtq<4%rytlsoDb+K2R{g1+JFocNbv)O-1>mF{{TXOyf4Uh_r&Jx3$h9M zgOiINFap1Tl_wzm>4@47WE%AcnPmJx>;c5mxa6P!eE=9F?SA0AwGRNJ!Jruq13??t1w$Bc1pasMiE#7%+e8+W3lM~WABjPrKC&U;OlS=PBf%HM zGJ`>=`U(2Sz1;zztRoOd;1LF}VW1}ezzM;i9-2?5v%#RwkuXr_e+a*V!LioDK-nT8 zprFnF5-dYN7SvFXkoQCo4FyjJLLjUNyu3iO4_Lhf3kC)V@4r#Y3j@W+hJk!oE)e`Q zFfADfgh5adc>go#92f)_<Q030-9*8Rf5Xk_F*yw{01EKxk)drmr>e-3#9ukcJm@-3IfaXE)=Wm=Dlp#I@ zfyw~IYM=}^Bxo_?JQFX;~%%5kkS9*OO$pk)#T)cKL@bt*YoFocxVHCT1F44$gqQk`=82$2n)+x(q~Zh2TmbS5U7rnJVr#UUG% zZ8;^H=`jD~p5a<&K>tWVM{mIGHm(z$AuC z3wI+H-}`rf@WHQ7s10PTrzuTEHVK}ag&cux=aD19qA%u*eaJ$Vv8AGIy4cYVggQ@e zASOP92V6VJXWf{2?+;*uhUDlT5^FXXV;wtQeDvN-bvp%8S9d#-6#eK;_$WRGx8$a$ z-7j{^mNWmnn|i+ez>L%5etOxQa}pBA*WZ5Xak)0we8bI1>9I!IC`X%j(+#B!$UEw9_L|LR5F?`vSu*eAZH%3 z=%JU@3~?N4ehN!{Jn?KSH7eEmH_6a)nXo;8M&+`(Yy7o=sBtH*fiN-!_=dm~Ioo&V z{?iP3nCto-BAa=z$C{G@^mW39z%VaVlgu~HUYE>zRSQTfK}89P@r7(v-%)yP^WIla z!CDW7If)urzpgUFyt}Jo&Iu-V$fQpR6f*2`T-~FIwrDJ;XN9mGiY=ObEGxhA3s20L z5cbGz2>tD;ShhU8R_17HdHyO3RbzYQ(>pi3tK{qE%Es(Sn77Q$#}N%27fg>GM00ms zqqtumzT9o&T8j{mLxh>8ANUTYK~^aF#&4O}xWI%*vW5Vkmz<=-mmWEFELX#B1z(S&S8{ zsQG}|eJYL2_emo$X^G71@nh~x%U@ci1dq5H{euBPw?f#|^RI`6>A7JV5ctedy7-L0 zh(w2Onf7xAYy(T~k8vmcP&cdytDX^m0%c}rw~q$-t!v&+^1tMd?cO2b_$1J}aZJ8` zkyYITPxbyKj`<5(mikUo$V%eo&6A#u=|8{`$wtisc`|F-{q-gY&3^V4VPXk zrq8{Pv}XxmLC>i=KBtDs#+&%Cg`~fYp@=Nvl0ecIf(TuWBLJ9ECla{p?u+^i`=VUA zTpO%N*=c!FIjKng3mjs+pS(X;^WjNN@+?PlP#+b|{Dc#Y|G10D7VIWy#A6=)EAiw*6UzAzFFYoF;xHwA$fF*; z)1P6nkRwPmBV8wrlq;#RdjIq+^I_tp&i+AOLLHNLY6hs8V6~h^EPG4T_2N!?(MfG% ztA3ulfthh+6pmSu>~@r-_{#SN$Olmq3EGk+x<1!4o|JG7p{-etQz;2vIH#!iDWUr# zw3T+mM6M(M&CKPo8M%(aRIiF zWmh_lfw$uFa9y=<>yZc!NxcRUL>C{~GhW;0M!~q3QH?gPE+i^zZQj2_`2z>wBr0yf zeeQl^Ve~6I|0ka1B0j!6Ii3X4&Q1{h&kUO#yXHyZv%2RFIeV&J-^)9&jGy7|Wn-R% zuY1$IuW1r8Ste^ozlr%17F2Vk^bOT1)DVK9bRnR1E4WBNy zT~O@b{313G)6jyv+s2&%^XEj!bY;LL^2Sb3dJ=6r<(>h13!LTEZq0-a4%#@yHrwp% zQovu$`YdC9o7Ywua3|xM1W5NQG}e;XQz6T+h+uV8W>dHyA0@pqdK_$4*}fQ~Dxb$W z7QU=bu+a;|IRk8%A52g`%*XwBEW>Cr0bsRIifD*EmIWp zede&xv4=o=U- zR8}vVJ-R3ONox%a4$y7-X1z{V9-=d~)F5|>$Mt9}+_<=*xRMa_qnij#jHe#JQh%Pn zN4=CqYeCcB!D5*va)^wlU9*ZSh2oTHttk^!_L_fyS<7B$WJ|9*W#35wdG|Xs5B8R7 z(pY2wZ%DTvPfGmqzMRKgbzVVIL28b&`W{P4JcPhJCWWi#64w@6&sxi47AfJK;AAb6 zjv4}mEXM|>I(b!Xbr>Sj6M^^u=z4)Sq8y#k_;pD==(6_JM}IZ_>CFu<%boabkxgn zV$b4V&nz7>k6ypy_bN2#dZop?RXjh)BCz{TkM(X7@maK|)6q~l`WHI4{w$c-y5-)N zm-5qago6ExjSm~iFKJM_dD4I1jUTqMLSx5Ni%z!GVmS}g0+V^ie$?=nBKnOLh4=A& z8tK!0DonL!g&Nq4b{Kb{^PXQV5yfyQN=)1{F!g$9NVLb+)0Q+}YT}#PGj5>SN z4GR8KsGjkr-zRSTJD+zMs^AQ)t2=Yvyn+1Ndft5KUEcwEBYksBb6`Vwwj8IaujJ*?@1LNf0`QS!@Pms)9C(P97|p2k$Bx{a}dU-YN< zwe?Pt*PMMPU9=*`sc9d3$O04>AGSq1jd-MM3FU0=0!}rzbm9d+ogV}3~P7} zWZ{^am3-37L5ek!aL74^hY;`KJWKAoF}0)Rcgd*YPgg<^lUMwqGcXmyPRruqJ#jo9g4y23lcTT}lNws` zb(7(urYx-Gv&`ZKr6K`N)y`W)JghImsz~HT*5QWf?`Q?~j{n>m!}?BNzS1u6XE<08 zTY<6=$ou}fKpRw^ex?{KSu{gjuHgsR(xJ!pX-KfZH2XIQ$Rw-?LD7bj zKWkq*C$HJF%s_h7?#z)?2?$(bQ`e~(8}&Hz73U;EG}hz-Shkl17VAgG)-4L7SHi*F zpDSn7&mz8PN)udh!M2C=LT)>m4tdnQac^7Re+#+wHO}b)U%k_z-6xE}+mO;))$#d6 zjQ#}0yY}T5d1HT!UW$B&^)(mV#dBVhtK9p9cwRtM-x68lE zJ{=BkMf9vZ!4|e7{g|*rP;hTMRd7E+(Bg|aLGVQrK7NI~Owp+PMZ6eosnPf|u8!dCFU{Yr&b(ZSsB(2ujNt&Qu?O8U8)VMZ{(>836gB>n0Yrmyh8eV&IVO75sg z!ldC+K*USrJVmDWa?i}GEqaEqIpJz2P^RPn+)+jo9|A4d%p(4UL&E%Y0zv1CiZ<8m zNRb)`GW-3?es33BJb}F9@!tz5Fqm)i&qa)uWO-FHSg)#QdW}fpawsK&kd{g2*N<^Fo z0$4$$k1|Gs!8?Zg&3>GGOrq!1fp%bHJpZ*2<0=L968kJR|vA* zysT;w`zAC27l`&iLS!P!idp|-G?1G#n~4i*W5+ZQlHnnFqjt$Y>Q`-RewRP_j9K39 z@h?FcOe(at7$qM0OSz+3-_A*{V%{xqMf%ZuM*y>twfdtR(Y+pi%@JfJhHx^UxZjGV zj_E1<7&M2m~M#3srV6HVS3oHaome{0(-Z{PRUY-TRvtsC2 z<+McJT?AJ$&kw+kesmhM{ZUpq^;9`7c)bFXOdBkUCu{-#0uqkN_)6c{%iB%wbgBJ3 z8s;jPN?Uo5@|EHpe;#E>PN9Xt-Z6J9D=wWgDr*LVXv;i2m=d|V{GmmZ0?Ht|ytsEpn#lpM znmj(B+qhaStY_}ww2(K7$o@>tz_Y?zpw;Lr?-K_F)A^5|>fL^G`Th`pW;>J2N9efw##Y9-NO2%$fx*YMCAln zyZ*8_Hpp`yQWRX8s~PXpy8_j}4HIC7ndfZP$o?6}OD8lQ(x=e5X=2=y;FzP0FX_)| zG6U+nnyZgRwJ?&r|JGECQge;gAPuAx8s>Tq)Fp@qOy|9)8)lEWBCe;4Lmx~Pcb^FS zO--mzvBfF*d{@Um%YkE~RAV;)llqq~-YL)D7(#fTbWWZj(?^-Sjk4FCi$5myEza%& zVK_MzVzgddzKD6}?<`y63^%_y7fYUBY^G$l|+&@RML@?2FPfk0I=%= zRYDZt7R;oBK7)O6TIa?Y`|?N69y{!IFyXhfkI~B_j~t5+YxCAtr=LmYGTU1Ip2lkw*D5-_RV~EC#?sI)WWt}#o*+h{fXyWnx5%*e zqD9DQHwVc_YiY``bGTlqpU%>6#9#XmxO&WLMAXb)9fC_d4BbA^yB!X)-a| z`6RfM-lisFSpKUX` zW>_!Ax49tLG{Kp%i4Xwn%R3+UG-Skg4BtCG6e0^ABetjJ0D)bn(4Xvy%RmrgR|2v0so%a81s<7uJFnsW12;PSPKZRf@zOo)yss z)gE;c5f$qtVHhh(4T|=JZqchEavey`F0Fb>sCqd}GJ{+PO?%=(O5_lpUhxMcszvTcAgQ%5e! zYJR}!->U-K46%Emt5i_u9Y{zddYbelPj_ML+_&OK<&aP>KXA9aaKicv{nG^F_P^`$ z01^XK=YOKZf&oegs0KhS{s%Z=fKmes0Z>~+5kdaW*NjjYJR&bYA8^kEwE-(;d@n^{ z24-}jBtQ`}6bUORG|aZ>fH_hE4$f5*1K`1h;Dhai0Gxct3j`5iK-~zQ2(}c2{95PL z=RH& z_@fe9G}=fwfOcM{o1buh#Or%+-`&SNvfvBYiP;I)$&umtY2ez&)79XMVhEc_P6o3E zEsK-n9p~L6N4?tgY@UaR3hdWgVv&&RWV_4h2-Uc>N&K|@oR8HyLkgTn^nmBb`H5!| z#5}Jv0Dac`M;L!yN~->^Wj|kqPxD;AI~djDd3?GN2Jn2!zr2j~hC3lqu8V(0#I$UM z%5AvW{|8z87DmzHAJA$`Lh^}stwPW()58wPt7H=AbKL#*?NU$Hu@jb;mr^QM<^yxo z4{+Q+oU0DLTwYm}p!<;MXFK%f>(P}~_OMrU;-N&)h}JjRgj|T11w4^8l9KhF!5bZO zLIVcf?9C4~+-VHWHFcyt`8sw2`YO8d46Ov2la8&=PqB2th3^{!#N}iGON-18q^*qX z`2sed^pTvV4Vy#_l$K#}o1=!Uf~T&_neA3*2FS}PHZ7cWY(0Rt)m`)XX~=TKjdkA& z;;GxI)N<~PMewThM@xfKi{+#nJ4Ag!vT;g_h!yi&W-`qh?`og&HQ-pAwN?AG=BDCa zW{!4T#(;p>Bqax`KBK7F&X#5)KuPFF*Tmq?Od~?W@zs7v?E{QVHY9s#&nJV8^^3^s z@|V?$V{W339SVwS-CPdpny&2+PMLKi4FX){x{lS0yNj9a2g{~L4?mvIEE^cwspL~# zFzeiD_hn#y5cr7ko}eJ@R&wo|!$l>9GJZm>psLeGzsKFRXwKGWXQvMZL;{A+_N(oC zLiPKb-c{b!%Y{pjM9>o)GL zTo-rqK3luF>`Ob(UF*}h^W891Rn*kz2;9^4Q9m`a>RuY9g#U}Yf!UZWcL)Bg(G(=LseyN>_|b;P*H8nLl*#A8k+TVFLu6*%RUy-8TMpuPJlI z7Jj&{;i8J`QgQ}zZq-`Ly^G#EvIvUHXl6$}Iumi{lSzV$eD))243ER4jj)HGW0plI9{pn+gFw78?sjhx zycq|Q@80mnAgm$QUUG*e&lf-A9^bVhcjP{}1cT}vi+uzevVY2>H!#IWwP%a;vP+e1 z4iWexuKEM0%J}AgfYTRwl3+FFp(}K0N3btSY${BNR6~z&IsGlC_N$i1sa~%UQw|hj zk5D@9}Xo zQU^O|0Ng@1=dZ%PG&BYjL7ga#j4@}=#C>`wQgDdE_0q2Nv4X~0=&yU}er_uI!IEq~ zEnNn(p*P5WeSAfZ^g&>USslTwreI81C8F_K-(c$3fR)ba_)AQu)m!$YB__ryIj`C% zw%;Un7O=IHN&)uxQt~J_amze~(8}lE;688D_AGRWUl4ej1@{t-mH0b1ADoRGLBhI) zL@SZ@)EZHw2#$g#65mn^1P}zF$%#uE-(of|aRxOaBnH5}&$5)0byy)U{DXVpJBn@6 zMrTy;V}-)+riB80Pm$EiEFn{IbTe|R$PL(oZXHaZD;EoYB zGRomG#ZZq!rogiPgk` z9oIb5Y9e|1rIjCUBmXGR@sRCa2qE!~|1<`hwdy%v&ITj(C$FXp%B{SlP@iAH zW!x=sop_C-&C>|0Gf0R_ikONIQ; zX*SAQ<#1LDW@oh+Q6KBf=yDGjzCxTveMGc-3j5x04&5Z)$0%WX_LX>I<^=zx>u)an6|a~S&+=ro)KWCw&1ch&{-tUYU;kyl8V`yM6kDiV{u2MS1 z{@|Io-2UcKCm61n*$!{2SShd+#?#AoO%QTT+;?PE*6xdQrb{=xhsIQGKZ`EqtD4n` zdw21*neClhd}@iShWa(GwA9+KZ}G6Coo8fphv?|6yX#U>+d&Hx#9zI6Ej*l`ZAE2! z#}o^W_}<`E6GCF%oCKd*rrX}I)ctlw_yXq~pX(JvF%iSj!j3v8Oea@6F``0{`k>ca zD1$_CG1ly9!7DAPe;FBrENXQ}MNbpL6dHQA7qtb%53C zCFP#BXz1Aa#`kyMTPtCa3u|IIQTZN91|KPRgz`UPXWa#PBZ;LGzX@TKMS57cgR0wL z9Ywj})XNZZ#74Vp`p`KHjHXVCN?qukFBh*Xo#+*@RC$vT%iQYlo%=m{dvp-O3r+Ij z#-@GlG!t@{!dF9&G$guB@FPbs2_LjGL&Chj7VQBM!rK%{OX|HbrqDIy$X561i8gPF zQ~8E5-l1ERH9ORdd?qSezPTMfhd&;XQ}0rczZYLDGP1nQ>l<>9ynD5;QOg{&TWcdn z#AVovf}t^md+H3Q-kF)5yT;C^1rPmP}eWTVBGD#cSse>n?&LL1Amk zW5?oA9nFSoHr#V6v!6o;u=?<-_FvzZl9XN@nn=C$DO%lBy5wB6s<_3|&th*(+Kk>< zh|W7aZ)WILM)J{7wJ~-p6ca-CmCVqXS%|B(}3QPBP(0Ijln7EkkOHF zz_@4jtYD?Z~ldUDI0#Xy3sIh|81F6*WE6jawEh z6k1VtvsBd2S26ib$HrwSiv5$Dv?r_(muKVg!YyApntlkp!}%s3;uxh=ed^|AV)h*m z>DY%)Y>`qhw^lutw*5JC#WO;Ic&iuN2Q``~j&l1$X@ujrOsbVBm$d@+pCn{^QeQSx zsee8^E#SWAZlRTgQND1LXmoiyk|@W(gqdQCVM5GX}tl7*o0)xj-UP;s!tL&-$st=i!^0ay|A&yeuMYhxdB7t0}<2v zbocTKqH)e;FMI~?KBAPKLG{on_pX4TKP7)Bgk^i+!XRc2uuGlRxlc_*DX-Gh4JEIt zlPg9p5=J^J4o2O}u>XX;Z#%PS(;H5g_^EhRQy(<(h3EQ2_=QwDeaf9aRS7N9k9zmW z#1R7tB%d47*kNGj-3kj8tlRE}@dl4b`Kx(dJga zXNN)#BW1W+H?V%C6KT@5q9zO`y_8<`?F!+VpI2=Z27(@|GV}CW<1y4rQB91;eGoIZ z^gC}<3k84Ye#>?G>p{&_Fl`{#x&aPXFxWmX)!2PlcUUfWkj`iy2b+_ICPh6CNrF1V zjtMJfY3E{mpQ$PU1LJ5H^?My0S9W1+3^3>MTyd~2nTBx_~cl=c#Ubq!`dHpo)UkwA~1VUD>YN0w$=zeMGGFkd` zR@UX%E3gtRhcRMoFuQx5mU(~WJy@cl_bzn<$i4k&-RJPoh<4(9J z$9{!M?uITwG*$!FpWAN+#NFa-RMK$8x@5LsTVjHVJGUOJ-@*F$#Z~DnyI2lMEa2n8U z%EzlB+#>bTVNlUZE5uj}l?ZQ?bvN~#={G85j{ORhLZ@PrOZjtPWtmeY`E#yb!o<2A z{^xq_1o|sMskTCHM>p6mG8}=~3aK8TxX4CogJk@9w_(}O)a@#CMC52fv?&^F((*Eo_ z{dYqI7xsAsp~Ub;*^o@$L|m5K7#@pOLASl1Hs65iZY4qr=H`}>(sZDU;%-myh1k1I z>@O&EDmw9wTJ1J6^HOrU+EoKH6IpEYWbB7yhqFC1OnFIB$|)(-wG{Io%8ZsvVUk$6 z^3uhJT$uufHa-gLADXRT`=K%kRcX*XG!xbu`nm zrEFNfA$(jMY(B3XpfEUfB{&QI$zCqBvm!XDRzzeVy&HDt4>MSnj(bs0qobTe9U67} z87Ff+*H`F#G;-3I!l?u^xqD{4;-+|{TOF0jF+cfaUzA0&BEh)S0@He^#{*WLjv#$Q z_#B1(3zx++hOmy5+qLV*in|vjS$-@Sq4(U8Zo|3hX5nFPZ(6e2$nc2_uF_HsKLvLS z0MjTN^+_IoO$%#0oS8(zeafC)ZVg2KpitJ}mCC@61&r`2!;gvE9A^<`9>m_t7^4nj zV^032xzt`frm2l2U?LpuPn?7uwxSD>GDb3rcI{+=uRx(;j3tY)3U;*-#isIs;V(oK zlh0xXejGm6{a*7fKzR9w?yY|_6LI(cZ_h1)i+8QhC19HVqj@nzE5z*ufAsda39GMrJemJPm#Ko|Mz?gk@b*sW@`UN=)zbYl5R8A;w8Ci zph)-Rma_V%K5Kz8QHSL%?Z%5n3yKVgq1wJxA1^IOl`Ez$iS6g;bbBw$PO;mGUNuP! zC#@@*ICv|Hx7;%ACA)1rxp&VA#4o4oPt6ZmDlIiSNCL&j zks~(6h(-xcMOt#p^i_X3A}`2f35nn?9Up}knk86iUn>-sVDDSznlr*`&6+9+^bt)S zubR0Q6D@c$C(}#H`>qVG=Xa*XN0+dNG4>;;8ug!%JAGCWb0vOnNt0RY z65AL}blGxFT6@IZqQY9o8+yyj&V=XuH~-q@OkrtCp3(R09asGK&h!mvHD*>tURn2m z2IsiY&{|1R*+GR<#(9-b^-25h*=e~$QoD=SlWv)%CS5Iy3}+h_JNbyV?~OdZ-m_x^#U?Q*6+HC(ZvrlHxZvde$ZI1#-#*r}gQQ_sSNtEO^~W)EI`A?n?-*TxO+v@P)M z8au{y<%|XHiDtu|1togEh@WwOZ09?>2k#zU+3hQ)B4!jFAqrA z-v0Lpw~6tG+zYo%R8BP>^(7-gT<$M9(0;rpH+W}q@b`#CwEtg|iin#Jex z!~b&iTvBSEecRfUC-3=9$oL{}azv9+s8;{o8KNvYr=I*z`=R zUngu14Kc1UaztgvkpaK|3v84VU8gu}m|tioncFAZ2R1!^)qncm!^eKNUkg^r{Z1BC zHh$2)vVH3zH^M!79%x!=uy(ke)2B+;hUHt@o}7|5VpLx4h(<}{4P=gHxkqC-|8TF^ zUG4fMl&_hbWl>|==JEYJM`o`VHnnd$_|wu8-VL{et_kYbsG!TdS7ryM-8wsAexvJ) zf_@HKW0G}a(R!oM2P}EyEXvWxpi(~t(av0L1&K)BMZs(K5c6IIxv%juLuUlGZy4`7gSHZJ! z*Cq#fo!oFEC}*2_%2Jb8!dvm3%HeSLGjPov`viv8v_m@&*m zIb*gs+xt1!Gp(|<>yy1!wvBE$r+((b*fa6XJSWs>o!#YG(8wSMcd{8Ov* z@-1yPPc1L3XndF3CY5Bg+|Wp}DXQJ}Ny0&?#^%$EGYp4iQ zNCBW zE53U^cm*||dieMO>-B4mxWC`F_O$lcc2B&^y7yeaga{+wtAhqlSQAH#;RqI)}$K`+H(x+tz7Q7ny&rtYz>v_GV+Bp2{{u_O2@QJ^A&R&n|A_ z>cWn8Y45CF%yzPW{@_B7D`$>mzR7PLowVC^ZOaMyn=@XdPrd#s@Qa6itM2cwaKEDu z+O#_TVDYFl*P>;4!-QYnd<#RRe;c5A_nih2zwTRnUy5-duV^{kpxG&#$){BMbte?k+ z3|M#X!@tqjpYC~eYwFDMqd7|X`$ztdb6)4PIl}GuWdGukFpmjxyIxE5`peIw>t339 zIaD+|f-mWb>md?3JgC?^ZOhC5hV?uY)Gcs}*|PsGH;i4AvZ;ZnS%>DP#}gbwFV?ux zWcTZs&L4hth{|qi*TimdhvZ?8#?JAb-Z=>`X|pX$H%@-@?sZU}cl~Tq3+FaF z2X>0-8ke`tZ)Ts9^$OXz1L%T#XdbU zqg_Oe`llyK&HWy)E>O&WG_FfX8kci{YdbZ-%0RjH+0S&} zv?J5r+C`nrw;0l}v->hH|J6SXXAHK?iB{T9&h#t`yfpS|7tYNz^=8P0w|km2_qXj* zB)ucHyJ>n+a^%!1hw$}|;=XX0nQ;9Rq90Y$x>2ZkT>|_Q;OLTwyfp0tIdaz4i|izG`|_y%cjw_q@mq=Y>xi-@51)~Oqibf#_My$hesv5 zt~H517ghF6Dhah7A@5aI@^GrJ$I5GS`&BHm%OAC3qV@ab1KG=po~292KJ8^SXYS-h z6-y<4{S*JQuKkV+8`AlXNz2A_oB0%td0n|-!3C4l8h`orE?v~_L++t>O`KXSzckmb zJS8l1RKHfyJKDw!Oa0e-n_Jp|n2r6LANP&j6Mnwu*~6%)}oDUa?R-tb;g6m?o5@?u z?`3&8LpE#ecJr3EuDk#AUpm@#ja5;%H}jmAOSf3o-Im|C*TKZ#0{iGA&&}gIy-uH0 z5xL;f=W{uej0=2sH{LSDGJi+e($Sq}S#wi+gy*d<-u`<>MR?Tst$}u@M?Cs`Ja=WY z^0U^?ZGuyEMP3@ALUT-GrgBiDLs!uDBZT=J}-I=U7nZ#j#xE?f?UfeQC(ESO zz`1^b2KO?HWp4YY#;z_MD+rsAar)7k&E-kUyDV()`^)|7hi!K{Mb=v|+ca;2O-G|O zp2Ni+y=(4#U-#6n?+J(OojUoNncsRF?ik)Jp=4pt{=;Mmt-0{9uT3T=ulYGX=jWq- zuAF?KE3+@{R$qbNf#yD^-7nWpjmrs-8aE)+bA4t%v*X_Jdv3HJVjOO|yJhpdUxnMV zr}Ro{Y2&7GIQj2|kGN3JmvwwzHtc`X-@ozp!41bnww*ce`i6fZ*G+aC9O$_) zlbt5?taoAMGXsy)@<5AccLPdlaCZ6bS@-Sxz3<~@ms4puZqtsaFuSHxws)|6cjmZz z4-fgp^zEyiBAtIT)+x4b@gZAYz8Y|N{)!VutUta>X@2p&w~p&&vue*5UhARN z@h_80pSU(K?b^O`&wjc6&(GX3^wu4hleO%hIzH>$%DBmb?}mZLV*>9t9Pp`dpRsu1 zhMA3e8m+&Swed-}_vy>a+RrqQJ!+PQbXERj4(EP2;HT2oyux>?{kJx&Una+{ZT4!< zn^if{Ne>rQnti{0p^_fPExjn6STAK9yKJ<2= zQHx1Au@bi9ie?A)zy7b^%|)q8Z#-_85cAN*dw=7om){~MY)>zw2pV{$}l>31pZV$K--7ayEeEY+Pb`1&c6a3}<#>AvJCopDi!4xVZ9zpI!3XQqJG;PJnfh|NR=+@1CRiVS{B|GDuxxDLKy65Iy$EN;ni4`>pUZ!s1 zjKy=Ocl_&wU0UVBxY^4>x(}UdR1q7ob$G8?{R>yz-d<*4@@}~2{bT*|pJar%y^QJT zyD8H(^U<%^DZiCly<)yx&G`8yH`QdZ^~PImH?pFo4lnx2qw39#OmobN7+4$?^?R={ zV{7V%nZ;{+Exr9hlI@;0-|=AJ6ydRXMbf?XQ^sP=qp^- zHIXZwe#m)e^ynE6SATxc{=fg?g&W#+HGs4wd?iVZM)JQ2iBYQtH3G!-vFEJF2ZtFTsPon#IR{yhE&9^dc%!6ZR&S6 zq@KjXtj>buk(xBVq0n6kEbN zD;jl+$aU%R%&4Qy!uSq3KRcPGuF2;zJ+t2#EPvo!+p)y+NQVKdceTy#Hhf(E`$J#z z8*tCswXeM-sr#cr?`Ae{;JRh@RwKvNb|YKd?w^~Ud~Zp7ov{r%3^l+v(ypIg%sd>n z!Fpt?nl^(Ml_?fm+%3Et^*m1b;%JM)-Jx>-L@&Rcep?%TJQN}7|0%SY~{S1dADi? z=Xq|83ASwUp;x(+^N^b{e zod~O@6Z%BtrVokC{M2>Hs**wD^Gz->b8AKplMF2F{OC|ox#&j!Gi=KN>lWlS^!u@z zJDWOS)rtPeUzw2S`;!tAHw|w*Js^Jbk_~39GAw`I+&}G24U^b_1rv6$S>fwP|BUN# zBxTk z=07fN`#R^wk^yNbVz1m5c-rfkeNvWHqM7-DO{Q~Ce%)HnI{Zg1v)@lX6!e%d^J4Pl z)!UL&qxS}T{u`8P)J^pJ)+md!3&z|1?%t&Cgli#nZcq5_ zOEaHyH^sZTZx8qVHS7M@O4l8x3oR-gGD~}Ykw3e9e|?x?z_}||I@c6>oC{?<2x z!q8Qch#o&>5p3nZ|5!eK9eLL)?K)8US3M_%WrrR;V|TjckiUI)UQ^DooX8$<&RKHxdtsf|a<{o7 z><7)vKDIM`-SyQ`S7v|pnOC}QapI*L7HN*=drfVA+bwt!*{Qe7_U3OJ?0CJFt(%-Z zASf)!)-QB}X+}5Ku9t^(z1qUbBy4|DdEI^IQzA09Jq$0tnk;g1J2k0r>ixSf8$FC` zbR+HQ)di!N_QyJJJKia(o|5U-ZKHeJZr#qi)vesHJ8re1WHyYs;Cpzuf~R~xtKD!iGgEu=E_i*I^+^zjRhv{Fdb-(>qRlQB#FHK}z? znM8uinYb+H>s{>FGWPMOpY^#qec!B~RC;%JqvqRd*{1&WVOhOv;nQn%Fk z`NQT|aa*s6eXX1hWH=7$pRupG8> zXw=y3v2$CMaO}g1U4JcEsBpM@aYk{&b!Q984*unI>!Y~ri3cb9xH;tE*8X4F7l|Lw zz4>uhp6k<6}a9-rqli>k_hd%Y`9hyh{8}v73+Io*CWuX6fI#znbKh zeaXAHYuBadBN6*7D{^mr^OJJN%gPF6Z{rn}dmhW5Jl<1$^la9$f_-OB-uf7Ieh$8Vo>{BW%F<7CriUU}=oZr`4Eyx2eI;eH49a4XAR#{`3Re4Mc2 z%)#H2ehwV+<@4}g_dbW@FTeTeev9}NLyx|u?cMD>OgGuQS{d0dzr)VHGFuZxR(q57 zn`{bJPVsOVx?;HJ%H)@}pSw5~ten_&zdiro-orD$L)48%$|(aG3-0RUecxL5i2uJo zPQ3U~ugBls9~99Gu0C!a9q0YQw#SLB-)gNZ{oj9ySYo{5)cTgKcRKBC^XLB@^@r3E zAK%0UeQ24&f3_=Mk}{&+o4C>j-;787yY-u4k29tpY>&VhfIXv=uyv3~M|OI3YweY?Ez7tEio;W6J3WuT3ZC&-@PJoSQh(J> zn|mijneWF8tF1mEN^^gvy`fa0boOVO*Oscjrdc^{Gj5htLb=QjL$KA_kyPR z7JsH~BfMon_0`aWaDc?hM}ILxYAR%cTtNUc(*Uoa`M98_>UOHLa%&F0+Sxp#mN?gU z5Odjre-YCLWv$N2elwZ0b~4SYQnhDM#=mE3pw7EyFsToQwz&?o7|WW5GQ6J@Q#6)| z$yWFaIyI@Dt8({WO#4PM%{#6zNqofwCOOAYCRL7@!z61yTPo{EGci@aWLE!Ts#MHn zIL%*7mDhED35n79ivh=s#C2SQ%?2h)pE*necbUqbSUL0#pD`uUN^0fMFJxQ<{|(t< zwc)`xWviwy)re54S&me$Uc6Kx;Qy{%myfqxG~8@ZUwNNn8eoW*9OKel-T4ST5#?;h zOIv;BF-@B&G`rG&OhlxWTq09Wo5z@OBHg!l`G-V?1zRaZ8p%83M~#$x#!L^!jKQXw zpM%fz;F(qmq53<(t6v7Drf6SHtL;uTXDbJEC)9k;cU5<7^!w9@XF%|57+;Z48S_uA zHk_s#p{6O{jbYvjabcuG*b{M3+6FB4I%UT^O<4%=LF5?Y0YQb1!{VX=CfGyDPO3jr)oaSHJ{## z)bwo4XT8Ph-^Xh{Pia1_V%7Ayn$LThPubsUdI~<3zy4+h*ehhZLX-(Kzqy4>=ha23 zS+z=e_?>yU6dL%~62`tsRa2Et;Jw3VmoUAWXm?9Z6w8(EmohyY>Qa?smNGupa$S;@ zT&xkkN^o+q+TOfd%5<|J8j3VuKd))1l*ci>EcE*l>1q>tRxXLdCg2S_1#wtBK0Cx? z@rm)wfSOo?@=-j~%2J}y1I@BUy33YJSS7cNX{BtKz}Tx;(i0$r!3m5r-f?s=f$5vS{bOP zS=F_AngXpOP#Mjx66L)l#<8)6U)>wDPPBsQrJTQl8PJ^=NLLH0mY^9(V^$qh1IgqP z<(y>f%lj3Ky)_|Ltv6DyNj-bzgq2Kp3;p4wnw{3PlPdSFWO_B$T2bC=%JAfcK{C_B zTBdEQUV~JldKylZ<|&sZGu@QelNoQ7YJEt9YH4SpS%Q{Ly#%;2Y-uZ{cM9XczfNsl z3bquVS5vU1tVWyp@syoX`7PBYS;@qDvXZD(@nkB~&5~@WYhq<$g|g8qUi&f7fK|*; z)ek$gKh#xfD8bqvPHKO!{73VrXzdS0+8?B8nm;Au2j!16jRcmaGUiQK&FJbSOXSK2 ztFh$S>5K#744HCHDr4qQ<*77c(k@i3Qrcs#_QPFSR(T`7(v+~~E;90O(3!;D$|sbeMt+p}mnLfPO5W`UvVDZi~_ z+;SJJXTBIXjIeU(A2K;4k`FC9sT-pc^-p39sTU&11ZjIlB*lW{w^kr`uv7e@wd zVtSd$SPU#zYo(f3CIm$xR4O+yQhRz3F=nK07($N0s>ispi5U%B>9CnGsjX1$V(yB~ zOm{;O-B}3w=oAq=HZml9ik-bkO!g>L_jojisiVBLm6?)1s{ig0AM3 zib!6O4)49~Omy!09gIT5E5%6Fyb7#XUs_@v-p4x`&)#Z7q{G7Rpj>^_bg29;%GKvf zhpOPIvfSKVu)ylMD==Ga1ADPOHNK>3{QAoBJq(w7B!@{=@fzFm?FBshj3ABV>_zsh zz@8F-@s#y+}xRmm{Z~Yfv-ZQc2Ek9KTv1{r;w{nrb1(( z6`C(jP-yf~q52MlfmRBQNELFm|7miV5q6UETcRDPPjCdzfkNYxbV60Uk~Z`((-vk} z9nyNwhztvv5{$N0=XuOz{#Us|x$7_!VyIwq&5kgY26bdCD;DBigOXf_9AhRM z;%wv`WAdGGg87N@|E#81)#pD&61jj6TKIoeG_h2`NBnv;shkxFbF+^#R}DEF5#7HD zL_#_5Zb%vrQ|Qw$0b(qHn3eOw)@vtb6(X`fu|&p)EBrrBJ5d3M{Lb+IbZByNK?1P? zDId{JA`l44g@DHIuwH)>v6zpybZDGF03yGgIz*l(;UhzWCZ!}J5###>$#!x%OZ6wG zB_okTG91N><&iXnK!S8cZ!%Jmh!Ve4Bo>jA291xK^m&ovX{8|1=#D_f3MJ&MWn#Gi zoeJ+^H&j>Cph5y{FH3Hlf>pV;>W279 zA(4}(QGg96x12>&3DF-b5aHPBPll(-$Ro@OWC{tP`K$o4CZxdAWF(Dc<$UC#J870> z6)Z(lfUIs;b%a?VUXMyBAPe=A5_-i-L=rwt*BeA4laNQ4m5LR7vZB{cCX_1lC&LL? zxm3*O9eNEFLYCZPRv{ITM_nios+^`SuTUV7@vwwGO(EqiydI5}NLdkigoUh(m?5ka zOKl1C96O-jA!tG#m(d*rG_jD70%($|lf>hk|#|lRLDq`5Q>mN z5Mv0%FkTv=Rq3J-mR>|iQYe;-NJ+xziFo&{yKtctpcuLRppb_}D2Kn(7cK`&1#nBB zi0zjNNM{Y2gin8T2Zk!D@GE_qNXm!!`ZTB~J%(5$q;wIP6E%no>P>d2kn+fe{vZlC zL6RneLm_Dj318Gu@mA@gNT`C)^g0v?|HLdKPcA|b84p(K@`|8fq#g-G_?lkg0C6Bn zDMc2E1e8w^Ax$C_3C4@GEeNXQlmcT66@aNbL7o?q;eCN_`~pitC>Mex$X|bTV3v_e z$Ols_u{zM`=m2g@QPqx9M}i2ZB%}xhVw^=%k;D>8xkRi&T(zH?BMwQ^9#|q^DUZ&< z-17jkz7(VaYD*Bs2}nhfh+!@WUMz!$V)goyU{5Gs0ZzA-KqY^zp+OWUBF`*nY_+&F z(vpZ&LBIYWatY}I1QIwsYGApD&#pDRoGK8hlMaLLD(+Ae7|-nnVo(+8+j?rGWJ+sL9AV z1+_Yv1kqge3{_Kw6C(p4_%JaU>#q_&qCo1{$rSLt zM2B*Lgi=Mo9#zlar!sQ3ctEoIFBmFgTFwXy<4r<6-BhSwnn z7Sq8Kz-*2Zt6VIm(nUE)bcaIHneb6PWtQcbAteQ|HmcXnMPNWEQOhM{s1MT$zfG)8 zA(8MPo}Q=`tV~QA9|bJBuJ~2wPtGSJ6tk2JhLMY?pb`B+U>>Q-uyhixKonTzbTn2J z{jnTPl#m(>jbSNkrcg*Iu_9WhGB@}?N~#KlOl!=l;y+|n@;?kBr}k5!Q2e1o%FQCv zqRcI5Qo=eS7s2XC(V(GBLMR;6mnE|A9zpHOtb`5ZVDkAqR%4Q>){_60)5H zPC}o?K?(vg%3+Z~kqtq^lJ%LvE2Opw{*-iL;1!W(9_R^=4vp3qp%79a_Z^erkw!gH z3+ZqTc7ehpVEC17i?eClzIwbM~H(fViCkpV<4yI+v$3F zbSR_-5g|e&I%JWK(UVrdIui>)()ow}WV*&#<>k>KWrJ7|d}g&qkOMHwiOH}ME{}p<(GWy(b#R2_;S)ptghvOj3a{3iAY7x`d+2z1G^AAwP%4p^ zB2$+EsgbKv~F)NM@)yDOSY!q?-Y+ zm|8KQF%o4$JE=Yx4f%rzOo19$Mt3NalOPHUbc>Pn<3w%_V*k$w;h zmjTHlt+Nc+0Pj9{dsHPgnFvS+#Y_PKEIOp(FHA*DT4$gzWZ4JEj8GTP zz=%O9MFx#8CG!8OCM`#BPt(MN-T~+a)J85&F5%>4Dhfm#+DHx}p=v=`iGm6ncqEJB zg%71^615@5`m0xhBT2e+R7@!AjFr%mfm;Hw@qGt4g4p;SmYLg2#Gz9Zk#H@c9&5K<&FM_4Kei5Orq0OiP)AO|D08hIHB zgJBFn6%?^dct;!#vAr7AY z3_+tX7q|dQF`-%lGO0tt1SEj$Pec~BQFQ>$OqzSpRM*_}XAK)gcw4kXC`S$g*F(`z zqM>L!phWm1Xpw|GvsfK$5;+L8i#YG#MTMDaCnsYaw5tvmwOJ=BeiTj$nurX5Pk2aB22D&x++e0WHQFIGCsvHK{SW=g$Yc_{h>D1+1Big0 zs16l+Av~0VuSrsMIJg7SVj@u%kYOcX!>jfinyLecbbSpp(gvWNm~_$nWU4zO?q{;h6;6->#j)6m>qGA12;uqtF1>F#UHpz_I3q=#qCKvz_ zd4U0E7)hBMw|b^M1xfVYr?Al9a7QZnlX_9>#a1lYqLXmC%u zV?h2G7?`v!5i|fCl&Ar4P@g^dV`eJYxO41gk{|X3E0hAW{(x z0w2mq!HAM+mk^i?93VNytP3?eIt&GIm@QA|;7@j6{ZU6GnASR!_Kia*RaI(XE0CIZ!61&HzX% z_2f@%)jUC@^b-S9`UyO#3WCrI10`W9Y(Q0jI`yb0>#8R|K7T8Rx^u?UC|@Q+)<^0h zCPUVkktER8UM8YyNf?7uJHfSUef_7BJ6*Tw&idTbNWBpa) z$E?Xg;Aarvk<2hHREMx>WPZZm(4uItX}Ttemp{q|6d23XD5a5A8M^98qlQK0A^=uM z90dL0SP=^WqSKKIh5>|7R$R_1eZTXEML;RHTu7z6LeNNX21gb5w8`;#K$oNmMO0pf zTP`YIy~83$vOsqzp-wJrK3Rg{CqowDQ6j?q5OOjA7IbX6`mn(0P$`KVwI7-pNHWzS zbc~`&=uJRfnQW&Ja=<(ZW?XY2u{OTgMFn{XZYY%i0HnJ*l_fwDOJ=MH(-0H$pBcz8lLa+vs_#jBu%M8EF|G$Fw@aFq7HqOj@MM&iY1H(cvX*nV_Pw< zHj_s~%KqazD5+Usrad064^mbJdP;gr@X|3*S2QGxu$VOfWPP#n%y>K|vUcruC zbqJu@GF*&C@s*mPl&oi9GBOh90xwnO=G#$0Ij;EVNB+3&#qpQaD6N-Lj~f6v!0i$J z3G%nOshkMys6ZV~icD+3tFi?u`BxhV{$`{8AQ%{Fn?4Q9P&9oS+EEwgcp52w@QQRS zq6T~cE<)Bbz)U^a0cPOP)WBE^O(Q)QcYM|z_(MAieBm$M6M7^< z5K9|2zH*02^YX72KPsEVu>&(IGvw;96yn(7!UNP=za4n#tP&5D=mrj|{Rgv*yu=7* zO8k5~DuV}lMM{w8)dASlSQ>w|nb0Hj$59y)n5oB$P>{g$dHSmZjU@{%;KfyUx*ZkE z!TYGo8Cbto{5-R+Xn32BK@hS~9a1GG@KO(6f%gx_hp)cr^vBB|%(%U(LsSn84WVdq zGDZV0b^ihbQ};PQqprm8cpXPa7{Ep;O$V+`h!xCqEkpsBoLUH?O`<>WY9Ala0bfuH zp~F|jAHp3Wo>w9z1Gh;G0%%l1TTI~4dP)fS^9||965qc_9Vdjox_hVECR8qH8kLb_ z#ncrFjEgIugmPgw|6qIoL=(EewkfW42l_dvMCy6RKSZn*>pQ{>);ZRg%ZU# zFyrb4$&A7np>RBQPDV7~rIJCu9ldq9@1|8kZSf7vh{>pd{~&6#BUgtSzrI#O^1z45 z=jcGAZl@t+XQ}&EXh`8gJdN~X;ME5vpp<9_yG$*FdgcVYxXD4re^6jrX;7ciic6Ep zfSCg5`KOdf^pK}fTZc<=)y7O4|Dm2oITO&RBL*N$7YXA}D+a+MeB_GpI3Z;*@oWUC zTPQwLRX=oyM2hH;hwA7-aH)}KhoeoxceuSHrME;V;nQxF|F80Z0FKG3ADC$~3dEGO zdYCkI^AxkADHpX1hEnxu+%peyr}WO5YY|>oQ`fGLds$yD5v`4V17t# z1p-PPF$_)Kal!ReT4xYCl6eH*jtb3iuT7;hy!@-g4*>2@4Jjq$1w$$qpk^{q!NAlb zsG#ZTjB5W8=}}i+`G%AdA_)5f*r|G%27eN&7NUBY0=Z3afTTy2DmdU`bVCZIK#W8k zF#t?dn2vUTkQQ|X4G)PS)8xm+`gLXv`ID1D+)qsqj+@jO*ds~_p&ex1gNKduZj12p z7XiAaY(E|rAW?HLQy~{3N95(iqyf=T=N-h5&dK99f@&uENrj9paWFxp%P2 z6mEcLH>g-o1nHBmT!YW^WO(gcG>-klKP z6?qbgQr@6;YdlEJPCd^moCG*!R#!P}r5oyE?sZgLk_VQ+=A zo74q~FZR?0waq?AF>%$h$N#5^>a{)*kz=Mu&Ym7TzCO%`gsm&AZ)4-??NrfZA0^agg4*BV#CdzUoo($W&QlDIsgL5ZgJ#u&TT>n|s6eS8U0kc_)prwS?oZ42qeM1O)xLYqU->$Gk?K&$@81 zmz*UIo?Q7Aj7(Z1;=34~Afc-?i=_7uE-Uy89p68{^Y?j}YS&HMKKL?h_BRk8rt)2C zV%IuruCzsMU(7^{lg&r-{Buol+yi`f(``hpFfW;0?W3Tg*v0n;hujB5!HebVPwa?9 z$^haQ1S05(shZ2q0$#_F{y5F6-&Z$|-J}+cMij2<(mwzdy zj+?I`8T=x0fz;CRi@*d=M;C`euFE{f;L7AheQqUmx4qHa`Df!sfK2qK?^#jirFBWC ziw)D_oWnOooe=12?NZ&eEq%N)iw0@o6lJY-S<^SmLuNeHLk=O7A$l9p=V+D9bdntS&51Yrs~BA=*Qdq1fpkvPusx)d;Ng`h{mS+HqxzNzc4MjjKgq349T!)p zbVt^o7dnb@f48j`!o>!M#MQswdjH_RZ2wsWjW*fdq2Xw4x5khwu#F-N{v*A$eG*jW zI=gnieWJclbvH_;=}m(x605FSB{O+y?$+eX+qyRIem~6FU$OM7f1QRvh)A$&QaQb$ z-yFZ$j@dRFHt`9Y)K!h{!2>v{UO z^a3yZpc~&anz?@+%WUXzo8VopjtzU|amg$+lnu9{yOb2_!#vgLpqW~cqJ{g+^0~<=5liE{G1`;Gb-Djo zPw_N}desSewKJog$o(e=#im~Hy1e(%&(fZtE3>{TAkCt6&h<`i-P@G-!FH^DG3hRy z>r=Vg?dqY!p+=2kEA(T$xA^=ThPO*a>-uk#38G;s@tXrwvx3!?F(&LF#!D3;4$r=r zcz#cX^4V#9*{x)wr|9Ij;nCC66g)8zr$_?!`|HS`9IV{??6We~;4mhpM1h5Z=n;aE z7bg*h{5-!$_hOk!NvBoG+qz*)rLSzJ5qrr0Ocq45TE)-U>qBiA(oGx=kcEtB-y=Kn z3&>f2QB>V3fY zK`9og?PSvuwcf#K<(4gr z7}eiOH7mWXu8;wJeem64F&wi#F0wjfncs6ru?&uCPtQw%o>%}U;SGVT4{fPQD%tG6scoG`*f%nl%k(Cyre}g@xx~#fHq*w7bk}?F;QiNc^|W3f>L86 z$@8Zl`k2&I$vs;1f`J|Is3 zV;pzz(Pf8Bq;O}m6d@xzPOBRKYy`f1d&eI4TB&jj8EkShq0kV2FQim}HG{Y@w(&#r(ree=72RTEBY_o0{r!2ERhDGIuyrsTRvbaxL$# z0@JhI0#hEM52X&}?v~RH4HmW+ld64C--Le3_l4^^Wd)$5!(Wv@TYAQ&X#q!#TM)43 z!xK}nBKDOl5t$KFC`1j{f8reSgECqVQYF{3@(P5g)EqTy)zPMs4?<^*2rHR=ug!#F z7T}xKmeZ8zG%->~n&+0UvgqsFxrM6~dK73KPR1ngVGBi@)>f&r(-g`_P)%2|^Wt(P z2!B_f98Xx(DJd8?V}UvWj3H-Fv4t?@dZ~Dw$Zpshv8N8L z#DXH6J8SFM63r+v)WwClR9x^7FN0sBw}{&}N&*hr6>T*PF^Qw5yjJqXU^=N&(&#HN z#LvSi0TszyvlzEB6~UnMkc|`)Tx#l|W#R&d0tKL%%4S0uQzxO)Cx(uS`DfW* zWB2oF$+Ie`*ha^h%U@KsyUXtpA^FtK56FdedxRLa&Nd#N?zWarkCKbko3KRfs6=f9 z@E>AxqBfHKBoeQ%08EpK2*9O-;6i0JUlxS~uRnq5Cbd(HzX`QTUX#=NeXq#2x?5lI z(ed;IW@D)XjER=AP^aMA`iTCyPr`u)`u@H>kK!t!W=o^&iK>AHY+lQVo`+~tDv$Q3 zI{1Lc@9KLNbEqZQ6nnd^xo0`;cvf2^-PI;W-L?F4tqCvIE^bdvv=1d>DDl(kNU+wzH~*dD z4=BzP-i;2diN>Cjhol*c%v(c6{&&I&*;8m@<^tgo8-c^*8sP3T=E*rhvij3=5TG9T z#pG~0#If>|;7H8=^LMEH-MU$+`kUyH=sCml1d+FJ^(8Kt_*~;c6mOIAR_?vmo*jEU z`Pjj(=ty(=z@X{RKZ}JcN_#Uk4S(LSQ!N#T?mgVayF{dotEbyoF0COOl1&_it~9cS8onYA6>R)9109(Ae08H0P@dZA%u_sDQ}O%$L%$z1>5dzVsPU|jMn%tP zD6B?lA;HsFR3OHvSva3D*G_9fzj*uZ(mP>>kpjO{Lx&ZnbANX8OjiZ{55ZlM_Uv>c z=UUAsU&h~Hu7)4o$I3#ZLG*43KMYeEkKw7X`0=-Glp>jFo{R6l+DXE9cPbMzmoovw z-=9}Q1&a9Ua$N(V#w}k4g%8UVh5lZP1#aL|$)hd%Pl`OdRMWBl>@J(poE?;wgy-5E z^jzqUZ6@rtDmmj@^hB$iPy3Vx{pG?LHL25x#d>s>bIixqq_q^!1oc>hHHKua*rZ@W zr-VuI0Hea?J8iL3l(*S*~RKsqc;YbE1!T6$m8Y&+fPh6&R@=-46LszfO{pC9KuhP>jH9wCdiaCw>b@BeZ zYSo&d@_Bn6#^A$~w!x?-^P46Se!P6%7#iExPEG1ovGdOv#$l$5tG6zn!c#`2T3g}0 z6$d=8KeLygT0_6$wtf@DiS5bj>r}U!nm1CPy-!|TIJq4pLN;%oxVj2^;k49nX$5>QkfXCE8>u$^FZfRl+QYI$N+Cg2Mx4W~xte*MjOK1wmZ*BPdCBc+7 zU+_a4pWG}=>ojYkg!I-LH%F|++$1uX)3S9$nt z4;4gk_7QIcu_sqw=QW;O1-?Ft33O-uytL$gVLOm3ET#T)QSKBdk?}ixWzy!(htffH zv{@JITDGAlwf)w)UEpICnZL)&I@RI9k8^3npG@|jdz#rk5e-=`E7krhIU>nL+Rpds zM@KHPPWnI^)PJ3i5}4+!^bI83b~?NoQE^$|FAG`rhtAOM-$K9NLx-RLePB5^^}d!o ze>jd`YtH$b?q!F~Df$3=K62IZ-E1h|ibE*>>vj6JdB^95r?pPL5neQ{zasd2T7S_D z3;I-@UN8;~^s20xRgIZ`dQ#oms`+`#mtek4?TKKOI&@N~$?`~$^*dGZW(1*|2kGk$ z55_^c`Ndqi?H>)d5>w1CLiE;+kS7oOPvs@lUPARVGG$eXfcvnKVu@=HV83~`hb4on^_tYb zWQ~cO)>Fla9BHW3)eb{~AzO=8hu(?n+vP>wroJi+(Eyd@Sd=>ttdsru~rJGVJ zJMB$Ka=EZ=lt`%72jMtX?55Wl^zUVJEN!3|Oai3Y(kv8lYH%H_!BXyz7}natb-hc3 z5jqxcV+uI91?5V5xdrF>1@DTcBZPaFbkg|2N4)D&W=C&}PHtiEpO@Im2-{j!a~%w5 zrrLDu2r_mTh1{NG0@8$Sn(kq6yU>YYei6e-?n~)BvPfz|lvylh<=T{RUYLCd9EwR+ z$pEk1LG*yUB?Q5GZL19WO=-jmrAxK)S}fhx6lT)QV#(eoFw+*x?qP-%qaMl-QU_4V z0rdEYJKQ^gU^;`;TZ8Tnouw0mF*}FJq#l)ZZ=M9f}7U?xcu%te5PQl{uYdq620C7G73Rir{@4D-E4j?9pZTs2Sm;IsH)j!bGl+ zSZj$Gxe6-Pa$#1bWATEJLjcP_t~cdX=!s@+F+**P>{!pRMF1g(t^3lot%^FrYLP{G z7tx@_K^mkz0uTUf-7 zTHd=LqLyYc=2R+=k*${XdK3%@dh(`c;P`>s6I5ux@4IHnVAKM|IMzoI9W*Q4CD*YG zAROoAsbsL+D{hf`o@z;i{)v=}Lkh0{v9{_}x-t6_HS(A=2D`Aa-e|2jMmp4~Q%@4X&S*p)I~h#c1`{gkey z5?T0bh;v-7#D4EI#?2ewYymE1Ja+@7-WaX!ysU;4)*fYiy&Q;;16u@^UP>)aET&qC z*5(`hmRdqyBlvV0^ChY`%Uj9)zdN2=@!t1e*NY`O>|7eR_q{uEI`Pl$kNTibObjwM z0XGQ<0iebSu|yDRuHl5xA)xRH@N)`^09*Qq1i*JL2t5iPj{v8LFd&7DKmagtL+Fut zg?TuIVcqqFfYm=A`2;xyU_8GF0G2{z9H4^>LJZ(=L&$(UZpd2%LD<$WRwNN2K>)si zKmx5{EXQ8&GI#si?fYbvw787DGx1OnrklDE|2mDukm1uX8&vWof}HO9;=MfV6U%zA zu0{7R%D1Yz?W>Y5r`Kg=i#6csRbAkiO;$=*(ESjM3wLeeYln)EhqBq_^;PpK*VH7k zhx*27$z*vddm42Ag5pdPGEx%GtofyL+&gN`Xm4!jD)4+I+uoFA;FlNsXw4CA z?-{l1M}b(5iB3=L&HKd~Ny+=mt3yfV^%pT4UmvblXSur4+o4>GQ$h+kvnO3uYc5cs z$+|xech`$$U1F_MY7TLkqv7$ayVG~VrC*F(g8!uSvh`>>c%kv|+BLHzugr3?c&!e5 z6?k3$cFN9YGmG?<%+q6RY_E83N+_i4XvD##M%JXEdG?3p?@CF7|0e|+^+R|<#p248 zsA%k_wMW)2!+VN z=ca>E=-9WN*xt(^w}1Z=x|jRx*k0(WSyA|>)ejYx<(+{kmYd!Ek<;A0`1FRS6AU2J!}{ z5n&7a(qA_#eg=1xS>ij}B~vlZiV<@an2v>B1o<4-W<~TA8dFTzwEE$k`QX4@^t9*F zG@If3LFI>QsdzJ=!Xa+g!-dRIDAm=J)_dVs}V(78Zsb-5K`_fY< z#&@~oB&gf(vPAiBK2I+W!Brii0yoKWy}K0K={w`AhiGb?Ao*BM{c-ihsPG9PG65E) zJ(ZKG-_bc3&a7^+oWXE_JJcL7iWD6OESgF}bNB4>2!KFvA#Z|22Y&Hd!0ijkwjG40Eh z)gb;Vk8ZzLQYMJoJV{nU!7C%1l|NkH(yLjS+>h2)N^O~$`g6wCKn45iFx6rxefa+D zCC^voDWf_Cu$Zmw91aJy-W{>==hYue9FjXPFK5zJ_o=%musP|KsXW4I zhxMIO*?ry~u3EcNSHQ|oDIW*JI>G$!zt_gUCl%YGI;B55Ep>c^E$Z*~! z?XSZ`Pd6_VjHRu=ytZ~3yFA1B*+_x3uEOFSC-TcLbE^@TU25zZsYpU(VzB3JI?cpb z@G{a@@q9jPcN=K9@LW#T=3cMY2JuMH$6eCTt z2^anNL0v8hixB3ep@v160?B^@HxMP-#c@ey`V=KR-%im&EAtYiBn~})sFe18GmxbA zkEchN?f8RFlX~6D2rqT)?{#b5@JfH62LR|r**Z< zdD|Q+@j736*h#!z_D2?URAllGjQKAu($$9$IsfRlDh)_5v!p>Rm>FG2ZzId0G%7(SZjpE)B3cHE6EH?n zT!Vrf3kzNcR-aT)MnTdHjud%Pyo_Wy(u|m;N^U5fVnRo6cdA%j_jD>^Irzv>wXj!~ z&a|{wP8RE%PK^@=F?@%2a8_GhTp4XnUNI~+kt82(ep@DQ@bN6?ZApfu!DzBpk80Su5cQJbp9j|w?ED_T>%f~1sjZ{b}*%@@W zM+^U099b~q@|F_?OEr%bg%r;h4pC96P23TSL+j9dx681^9P0Psm`@HBN!vA*vhu8_ z`G)D$m)5yZJgKMOAV}J;v<#F(Wf=HKGeR{ZcNv6jLQjZzUs!?QGEAN{LpX_5oln)! z(&F3g1vi!|Wi)cr$NJ=6E&TE5IH;v;ccz7sak>_Jx9>~ofIb|?TqW^1G}#p%mQ>FY ztQW=IRy$Oaukn$Wo*}2JB7$*=#?;DSROaDxF!zi?#;ocvkimv@l`NtN4d~@Sah|0I zhqZP=h}zF=r&<04o!DI#jJCJmg7L z(8dOi^`fv_BxML{%TSNkm%!qx9tBUdhPFp?v&X%Dc*}awz<68zI2fbz>H~tbC zvYRrVcc7t3G2}%NEoU-ch|(0Hg&kr4ixe~&*bQXNXAYQ$eJjQkF_4$;(0WRm5y%h% zx}lI;a)f;&U+^cpqVBDNF%1@aZ4Bh#zmk>|Xq^Pf^>pp26K zqoG0ZJIt(cMGIE+aw|6#m@ThzOAf@@P#Hcitz`F2(p7rv&+3CDe8{{3#&NR!X{ctU z(IxgXl|=N->|)tpgl86WxQ{;(2mwqU2o{j5ghWIrD9BCAO{+!ArDf~k;^l5_>p?3B zSZ*P*q6!KKJu(23B!mX$R?h-BNrINgTZk+`IVcf{{A*`mXhh4yElexG!_O%o2t$}B zL=XT%>=A{5={^KTK;|Wc4UtzE=9WYZ9WWhBpl`=sztR7N8kzj-DPzIROP>Iy?g_Tx zW6o1Hsd~lN$-2RkI=bZ_O}r&@MwEynPwHip>2Q^zKe~(FpQNgHL4AKeoVUAdsK>9p znJ7Dh1`Yp^5#7~RzuFmLsmT5OSNQ%m13y6dmYhpvgx^d+qS=>A!`#5QVc3oFCv=vi z!q0(ghEt_ueq7`g~n_ZiCO>(AY?W;Me8qjXCw_VCb)X%Tt21 z91ZBhkMkoJw=1q6x4Wr|M&kF5Z=g5Z3|0MilIl?ZU)wUGANbh^hD)fujFe+(MyC%e z>wME5M2c~x+AhuaM|S-ur~v7SD;*AP>&|br$X7k^#mRxuoqm&D^nmG zl<3tfon_~b4@mO$FeNiGk&K)TeyTjxGIkTD;F|YL@CGHHF(w!Mg_SC`NvOt`5P^`% zuX#@$BZPlyykS}qGJZZ(?kjF+IeL`iY6pw5^(keJ-Dr zHnbt`uX<+A^6H@O*^_svs3xQhAqbeiSATxN`wOcXVT=8YKmMYFJ3GBetWH0_So?T; zpGSgA)IWIiPs>gC?2>4ZqYU&5K>xD{-pPUFy=S(#{9{?A@Jw z;Lq*`%8OeynMAoLL@(d-wA^RQ$5PBnlN19-*SRN{JnoWrgu%Mr-d%m1Q(Ia_;99Oqa2?B3v`|gm*Hn-QI=eR#}=1(TxsP^>}Hqt zR+eUK>hRvfAP0fvUq=|p*DaBqLSA^%wfpq&)lpyI2PI)IBQ;u;Tb6#Gd5+veTT<-1 zi*!H35)<3`p`G7lwV9I8O-4jrSjEHV+2MEV>iXc!{QcE5%R>>cUe)`XViF7N% zx-za^>T6sE=eoZ*pZM&FpNdIVsh61zzj>i@Xf8<{x0(vUQenMe+pYiWRPNt>q**dl zNG-H*_PIZ~fyF8w$uV`5q~}D&fi9@Rc#kTkQ#(uMudNN0$bi@lbk|L2-^b7dvRav_ zB0ncV%zV|~c*1<+T=635SGep?ITVUKo!EY5E}MW(jVAi&sbTL-A&y%IdXe)W*BeH1 z?By%}pcJ!x@54WJ9eE?)f}Wi0s?UmDe=X@gQXXYGQBD3TG%-#hG*RW3HL=vjzabE$ ztkO{{o-*V*tNT}&8Y*X@Qn!HTq_fLQ9VCkG3-wmDHo9;N&&SZABhFYxocL{~OLg02 zrto!w(Z*OWxrU-lLvYR)y}n+1tp0MDaNWsGd6IePHudgxkKJ*KHTVc9^-e4GSIf#UvYNMzl$`c-e)gx+az^zV#@o%nKUx? zZDMv`=bBiKdo(mwRMWuGqOhHODhyP zyXuU0Bss+la((l*#@JWgaiP@-h5A#$q;VVCeX!2=h;MdK3d(E(<6faN{>tAE;2j!K zuJUSgPhdh+K2?%o>aWYunB0e@y_FT-UcYAcbZ=vw{p{~?-3B+Z0xVVctsUzx@OE-|X>oNP0u?5jJ8 z{G0u&;E(%5==x;lO-;70^O}>lKM#HW?#_WQZ`AhEK%G#$50!@@o@!uOtX%cvJuv~r zK*R_)9dh(Wpe_gRD94b%xYbmJ|L-TwfS1l!o1DE*CwuNO!H#2qOs_cOZTqrfSy%pG znIxt6a9^Xq?&mwxYD|j zi6Tos&L%%2yplGwu>Yvu%gsNpJP1CZ@_Cl_Z=~q^rsp!;L*eDtLj-;;4=xW zjiU*Kg(%&|*Ku#oB zk9PZW*p8Dz4WRr8suhfQeK@R&BgLQ@Vd+aUcA#7&U3+3qR z)*;sg50}681H4$Oll`?Z;Vnr_8J+F;<5p|K6j&-|p->bol?@mFp$S!b@Ra=xorl4z zs!U4#ry0ONWOpoz z!PoIDXdK4zuliDHBJkB#yJQEWXyd)59U(vS7epEDN$`-~{`JSmA_?(iJo)waL@1>X z27;iQPud~tg5|AR5xNYi1dK~gu+dCXusrfQluAr9ofZ>`fL-?yjKBwL636}MLT6t7 z@*FY#^kKT2I`|?Wc&{l`8>CM3Y{?s%9h1_n2V;{*sZjiIS#}JToS-J$k1AWw!T3H# zL-dkgP1rn&_jOs^+z!wSu)6g@6Pz3!Omy{f^+!8BcktK5ygaryq4INo@E!aE4|?Th zCDWtT8)ang)#5D8hYTWId^%tIG`Z9CIE0azM<=P6nGsHrDXgH@Zk2)5&DC9fg~=1Cn3G!s)>BUa_^3k)k$438fgTlPB50$@SOP;c zUdNRFB`(W&pdDiG6Y7)EcY(ZOLQ>2W*HSBC8V^CA-n7~6H@>r_$C14Xi&N$$GpvlU zsTz~yI=U!pj~Z&1{A1ujrsFxb`-8@({;vT^>+pA#s&~F7)LkaQ55do?8vjI@T2-B! z`a|=A#_!JN>=u*mV-N0qX567wF70_s5~EcKgPkik`r$>D@fQw28{N(9%~F-LPr2Qt z9oCqs`rP(neCA@)l}++Z)!yy)Pd}Fyg5VsDi@dw(5_|Bx`TgV6++{HMnH(qd&i&>m*WF^**~P4FPbt@5iK8HB>(Y+IgZJ;F zb@S5&3LwThU*xVzgU{}7vQWN+-&C#;W)am+g1IH@2xWWZjQPp|l``Pt)Grd%?Rgl-H;ByI6J8$!e z`z_t5DS5$zz|+c!M(y?{NwKLv`p>U3_Qiyz*+Xu10dv7~^#0f%Ib|zlZthN5sTbBmP`+wet3Y}5wLTfuRyh%nbl-pmZH-^{z)+gt>hl96Yw!PV$ts2vVA z7qSJ$~MkyFdyf z+7H{;Sty(zN(Vx;RA+~Ea9E9KmwZY^qIW1Hi@dk+wbx$@oM5M@H&Tu-|vBl>LfYqS<<&NOZ+(0-n3DJ zB}$jm-@5trW?T5fs2G(Fnut5HA~}b7$=eD&><<#s)Map|Plw+!iiJj+4L>FKFUl3< zt*^CD36FjWt$MuVsq~*qo(i)J=&*i#Bif|UFZ}2*6sL$cyu;u?ab6ZKSJ(5{+i0y; z*@wKOTHxn(patz63S;D%o@1%OxT&V|h_arOs-si&Wcm1k1P zn63V(hnB@)x$tUI}9l*|0-o_LWge z=a1n{vKMTXYI zOKCF%vVw8-08$Rnn0~Xc9tRPO&xlGY=GSTVMhT%cgKTAR+|=}<&H7CxYZ#ine^hK? zSX8hxcPSio&cP-ne3lShQn2nzlUf^pR;gkOC&x;Y(xP>dV7%(b0>-?SmB^B0B`UR5 z!NV*Ae!1Spf>@!`pwAcYA|%kV5civ2ftVV1!+wr4$_jK_P$+8VlxZCijA{*kp#3$C zOIHCazB3Yhm!*Y^R4v(+1OkR?s>v^BRU^RNK#6?wZkhr8Cj3W^5n2}A)&>h0@tuWz z`77#nB2ZDrlD}uU?YANT0{7$RIWtPwx z26T<6M@5tzCM92{lqRPypI(j)|JW9AXfTDDVJgEIIw0z+0*57vSqxjY_AAv&HQj|u z_-5$4>-@SsUI^ocR#DGb+<46rhWFaSwc zNMu01F@z39KuD02Ul^ES0Bg}JAO!)7)qDVt5+Wf$Yy#G*1^9S5dH8@H5d;DxL17*M zZVaJC5#Sc#6cPNlqOD~Dc@CpZVg#ZbAUMF=K=4$H)(1k2D9jJ=#DX<7^SynGVAM`};`&elY0Nr6lfT1V(LwErl zu+4uo4j(ll{-YrT;Q4_XFM~nMDFE#FOFz&wIRGLB)cXC$;CBE>Zaw1Efgt|OAHo7e z1%kTz{vcNIi1mUPf*^3@55^-L1Tg^Q0zjpfAW$hF090BF0_X3`Bc>4yVrYRN<`E3x zMc@SxLLtn+#3P#ai2eu$-5m#lnnqBtS-Kz)gF+$NKvEEh-9BQ2k61w>I3i2$Amo6= zI|vWJ91OC+JCHRE2HAhctLGg=3@CXdo-QCm0M-x)Cb0U*=I4R78X=J905256iog$; zK*6|2LLfrG7Z3ngL&0d!-+`L6$)KiIC`1=j0%x8HuvkDw2D0Blo&lGk5P3u};~pm( zFb;z}1^7e$ZJ7xu3xhZVfgzy&i*S(m^ho@Z91g0)h@~Jd*!J+7$r~o@f{t;`2x_Fvl>E(2NA9lqejWp~v(ojs(4_goF5KB!mlS z`Y%o%1>(n#IM_NZI6-ybWP?e71w=kF#StI_4iyvdB?@8=U_|~i;aGtFdysq)`Cqc= zJ=mMDNC-Xbr2sNe5efG9EEOCV(`X1k@cX|;f0w|K>4*l$m@NvlT#tqX02Wc8@8B5F zTlynb90Sn>c;15;O)QAny$7*>dZ-)=dcuqTPxG&qK~F-_;24j_Lim8BXb3CJLKqqN z91XS%<^ni(aS%>GKL$eaPw(^Nz-f<IiNHb2m1aM17;OwJOmd}NCc4bgAf5c z@sOy;5C1a+U*kc&hS>kcfRO+x2OeU<;Fc3Wf$su)S2Dn&e~%AEwE09xb!oe)^H7%IkpS3S7dJWB-wNJ)ao1D_K9GiAS%Ab7xG z0%!^5m>Xc2_)q6?fwp9DienN%d?Oh`3+yCqk;1SF+_!M@4|)w(ml z4R9z8B(^ia9ajKI&W6yzx@D08?o2SS)O3*fXD#Vuf_)iH2h$`!6P$%VkHkPGgb{cP zfNgXuU;x-zU>n&07}AR@aCUMsz=`yG#3nL8-P|lt7cCP^Yc7RQ+h9I(~iN6hCj zCx1S+KN<&iuObIzX|f^oh&()i4EPs7&jnSJ9wpUWP_^gLn_Dh~0#TUnadUYF)I7q} zk9PlTYs-)NIyvCCA5|VWR1rB~;{QX)=Yhk}odZr|jV?0qE)RkRTs)HClraD-xnR@> zj|N7$|6<4hUOq^~J`zUxAkq0q{IjwN9;Mq{Fr?0Wut)59VB7x?d--77`j7tD3P2+I ze+caYu!H@1;9zzcpa3U%|J@_n3qVuBe6YK`Jb*Fy7a)U!)0X)ty@rGR8p{V2V&R}$ zlmZZ&e8hwwjsDqsf59PGh&+P-jstTc1Q&tl-_@*I2&&8!Kp0?C#>hZyA($CRa1a7< z44hZ2|Fif+czJ=|LP#6Po--H4zBoLV_;*`oe*hkUcP_5>4OTqz_cQ=5m?9q0zN|`5%?aj!TlST zY!?_8AJ4yWedvPNpd<2%{BK+$BM>+PAJ6|E7vH}%xBq>~5CPY69U}sBGvg@aB_b=| zzb*g&LGtnb`ISzS>#rvPi++*Cplp?Y*A|F3sH~|?00*fFr zfZZfGW#5V*Qq5zNkf%7nuU7Co6>S}o2Mn}9RGTl>AuPGm;_n+y3Jz%U7Bleh{pDKN!_jEd78ynlm?vJ!^!BqI^x1o%usbdUsi zcpm@v546h2&zDH9i7OokJCYqDI-D|4>rZBgzve}1B43275bY&EK#8LEGW;1n9oq-= zb3&Nm9vYoWVaLN9qd!*B1<^rzn;^nJ#ZHa)PI5-I!Ge)em_{485iIOp@a zsn>Uou1}suwF^~-vBb~gEc-rr(6oH|`@UBJBNh`{Gs#IUZn;+EOV6B6-Tp;YHU7$? zE|s`$F1@ZnkEh5>$!ctl{)|Mdeq8Nsn*WW;eOno0(`Wt#zh;G_i&*wX!oj7?v5=;g z>g|E+XtM6BN%i9hNi5aliIwhPafLWG-;RU7D*_(f1yW(Cxa5J_{(A*IGS2LQ-!co` ztZCSxgB3l8KE%Wcxv!G)#DB~n9QHA(D$;~BGnFN>WSG3-FQJ9LGhsEYX5fn4C6Uld z$~EV%^ELUwM@#BBlwu${W)WmyzL1aoT4t&7SkxQ!PP`qqK2X0be%!U>>P^$0A8#RY zj6iIOTOVb>Ip%of$-aQ7uW0S?JcMH5%iFXC==VrHktz!O!NcYQIj2u6UK%-1Z#(*? zivwOb2@Luex(x)GqIy!ToJ5=kX}N3ZmwC0jo5+{NMdqQ4cX{JmJB*NAv? z*k##Ebes8mfxil$wFzhEa8AmfoUle7ut*RqO%7$j7)<(lD)d#KHw4zTOl9o0nHx2Y zK}8L&6@jb0H7|;H{cd4?{azYRESoo7IQNZBZ%6|7n|)Vbx_8>v%m8Apy_9VDjT$E2 zR1X=UJ2-)wLuDSqi!SP}>lwEDy`kv>U%a3V$C_;f_&3gf6+M=#el0y=AWPq^=Lqa7 zv8|#1USA;$rFL1aUhV&VNA1)d@N80{6&knIIpMpGD7TJN(Nd=QXWh354~p5ct>|rV z&0)6J_H|q3gyT*V@ap+mM0?!9BVx_Jcu)HE*Gm0R?-b64G3rf!pE_#M%adQ$gpf|G z_W|Se`vLsKk$lDBmg@^Gz8aGiCd5r|#iDJid<-SW7WOBIOmh`1f#)qxmA9N_%Ap#x z%OPhyIJYWwWmqNQryo+iOR#oiQ^JAVbNOyY1*u&pO(x%^z#&gV1(O@Zm@m}0t|&Cv z!q{hdaq=&*hlEk1mSn#7nBP1L8B@BgUEAMtJU~5{ZnK^GLz|?4D?&jrNjf_$l;^V^ zE5^I-HRZ;67+V`}n>{=3P}6q0TnjZlY17^|YBfE*kB4r~^nGwgOZwre9(abE!$n8)tKm(Bdn|=!UzuBTh03zQ^z#GlhyAu} z7H&&yA8b-B9}Knzn%}9g*g`cE?x=1|e3?^V zgcvhuYZBwF#nu)j;H_`LBU3mu=oxwZu2qcU(0z5UzI_*AZF&H;ntXeX>=qIy0=7Rb z`Hw#bbQ@B%ZW<9)(N7!lY~0qU#d<^n_l(a8#Tx{gbj56K(nI=kzljZb;aWb0O%t}E z-qWI-CgYQdlm5i582&1=*9YKKEXD4-G7C=EvkM(?)dUAc2?ivNwQa3Kzp`e8v@0TV z#wzTw|3M-;a7lNZ$s9v?BMcqz`WkAEgHUVwO$_51VbkJ%&8Ycq+m%fa;T3@i5~N)| zx*5f(4Yzmh9+68@0pIm&QLs}-0J(WJN@9i|&4)s=n$7NA*c>maa1Dd~#|IB=Lw&7t z4U?^*+D_NeUe--kUoXzL&>HxY`1IDdEE02MxGx||&j6CL zl8o(+w-Q1+SUk+4GW@pK(z9w}yz^d*ANf*VVvthw62JHC)(`B??b#&58mwMqPuFvq z*Lf!vUQDskUX@xEp0sVE#f|WWj|@En&apu=`y+==cb^!sW9gW zvuFnGddhl&235~+E6UkP{jn`|mA-3M70y)&^aHf;Q=VMlMl}|`tM$QnK|r7_`z}iU zi%9vuyrU}hD)k5iM?HUsP1T4iuE-QK`USep-+JFst6E#hxM~l}2zmRd zD_JSYUu_A~&_>T-YUq^h)3zvW#u`H(s64)K-2L`>irP}_ zsw0hLazt0^6wSB#Lt$7mF`n5&@fIy3_NPgAn%p;qx-Y`Jm134zy6P%FGMk7CV#6US0neSY+W_UWB|n`}Yj6wRE|wDL9QR@m1KsUawaW+(Ii zkFf86r|N$n&$!AKB4lLmF79>jwN>`sgk)xKBIA~sz1>8}-WeI$$<7WDvXZ?Mq5O~N z^Q+tU_4=RJ%j>T;XLi4E1gLrb=n}sj3GitbW zTe+;8+9q_>7)2gWs6oC@-t}Gp%R607%PioT=_A2BoO@#X}?(G)Gr`{0;6J$4? z)#@iO1SX`Lkh0V3SgUj*&7dKckO=0PZyI{x4ia5py&=-$@tht7`{GR%RTfhn=Id*s zLUFfdSrQU3WT={yIF2O7;Um@Vl*1#Q-cqXEW#Qri_7k1hEGO}SI*CYC*2g|cne0gjp=b`5d zoaEH%HM}fsmhIZO+7Wh5A<Fj9j+n)yX-;?1#YjzhF=h}u@KC(9h5P-ovsF7?g+*MBZM{;0 zTihz{BOUgu8-e(@CSEyyYVq78H-A5O}t(~>2|U7 zd!7s*_LKwn5oib6P$a7%mn2^~YT2+(dVj`BDy|`6tJQfAUIHsQaN*F;>`R+9?Mpb2 zr=iokr0P$FnZNRl@HXRHho4v_qCpOvpI9!mw;(qTo$YdVAneVdo$obo&^v14r^xJW z?6DHO$mf!Zc)@@>_o`ku|GCJ80b{sqz~Q)h_e%S)4Zvg_1Crk=b+9Lg?L zQGVbK@}9_yA89mQeO(B3t`!;4l+ZXzA2JyJfHY=$42=?z6T7~w$SG4Wx-ysbeMP=l zeGgfBB2r0Dv@`INMsuC$65{bIu;el$b(Kx&#QcfPTf<4LavV%Sx%~_bnk!2jSfI&e z^~Br)_od3Os2s}`YiPuyfx1z>QT3aJ*#-GMH#m<2P!HJLNP8vX)`5BK325x_yyxUD4oj2!)g-0X~ zSH`AJH}R8>s9_}h@a@pFs=@ggx!T^`l@ygdOX7Id^vUHW>m`0f8ru(y5HX)D>1D&9 z2-{2UGT&P>LZqBEu1$t(&kbLcj-`=qkCWU(8kFR(jWah4s&``7sq9+fG_tc##4=ak zR0e)I^88M>udmCvN(Q;*D)lp=xdppY6%E@B!Y`UBcSu@iDj;J4hxo6yUK{;b$Fl$p zvjjA(Y(6#mK^r$~|J}TV$M8m^e<;@j*1e^}PX?J8+J&(V4QoCxrNZugK@H&;7~xr1 z8X>g;?hoF3!4^gSoli`GE1JxF_%O?(ZDSijwVG|qDYdV8qkS;S_sTq3n_-#vyg-=& z1P#J{8TUb+GgqXJNnTeG?)SFfbGLRoD`4)#i zAcWUapq9W~CP&ZHZTW3EX+K`teDPuT1iiXmwd{~L)SFOb*HpZA)N~kL`#WWb*%@q1p)<1PJ^akO{?8}-Yq&yWJ70c?X>WizA^4O@DPxUS4Fvkrqm)jAe zGtnnTQQBK@39bA1q94<(yC#jG7@xckY*q|%!<5R}f;bOZ7}W_a#=pnyvPE??(!OI} z>JHU(kcPHWVA~YzF--S%Ym}>d%H8?6ycz~yy4vwRTK?OV)3rV4`nGCg~RbG;-=H!*15TO}%ZJaIHE8h$5Zr6VB(YWl+*L||6_i#rKDk9A7wfUr5 z((u^!_T;{?S5*plsn4*F)IX8wVxwGy_=j%2$Sh`yh?_1@%58aZ$Bo$PL1;}@1zUZ_ z!1H)t#YR%Ks@J!tX(XCJ&d)+Dg|v|0-fL)8D9)=tvr@h9`H|ioV;{SZh5OJuPvq4g zZ1b_DS=Dh38yf^;zoG}rn#k`y$J;1V9Oc1$pT|M2?Z}+#gro+d=DH#WL?d1+BSxPz zH(YBq$IMEuytF##iuvfR8FLaMNf`A=|4#8t>(=AInvJIp@86b->#q-z;0av9MMCp$ z6%amJi8_YJ53TL8?PJIo(W%@?ggG3BW;nwT^ouH8$Cc8WRuILbfE;O81rt`h+9ykx z*5WpueX&0yoa^#GD(Bw57A1O56K1`GMgDNpWxzO(?tMH@{mBpaa#F%Ag|v$0J0Svl zW$z%%UZkZ+|Lgv8l)`2j#8XU>p~%#rXM@rGDQ{fp_umDliFC$I`a)4xUlI{F-&giC zApIs^&kWVpzGhy|JNQIyx@NBj+lt@nB(mm8udLVXg*$^7!!fhfwp8$jV}9|so$*}!#K!c~g!K{6f)b&75w9ny#1kS9!&sId>Sx2@`(g9=R~M-$&o# zETa8+(0(U5e*g75o6<}6j5o-PvQOMD67@av5kF?R1&p#|~t*P8c_97XO62&xzTC>v@T} ziaqNf-3Bi)q-C3kDb;e+9o}>t~J|jEYhc(Xo(m za_=91Cgf5TJJ)72C7n4q)VUktdLo@AYgjl%c2p{DpLc&=stk+frX@0eK4U>6LruY9}{TfFx;BcCR%f6R43tm4V5L+yTeP{lUK!gh?DTR9Qzga!ei`xjFjk zr{+Nr<@}-j!-qyvCl?$Yu3MsNWI+1AN1sX-#DuyxgKbQH<_=uy4kiw+4m@(M#++P5KKLMAQi&s7JR! z+XxBw#VGA=oC#2eT3N?VmBUrGv2i*YnjXEe5%$YTi!Rw^t;#)TGVQ-blYQ5 zlC4c{A*4%L>B}(ZEHlbA7ARS={8?c$lDe@^fji;2d75TaR*u`pE4D7fVtKjA?$WSH z`18UGrLE#zKPcpjuyp&AL)^AoCPMafF~ha1Pnxes{WJ=;P5o4)CoNqO?w;S9Y(6;! zUChs)?+Ev`W&GJKi(F5Q6L`3mH%zAzDXY?ZO<1s!{?oJQj}F5DYV&MS)JeSJ2?+lC z2YGZ%GNK5lp4NOYCB;2Si_+WLse!s6?HDbSgmKy;JOMq@!tR1HVLdl({}HoFU48}Q z{35}^w;LvIdZOBC(0hb>OcWMYMSM0bLwXvc;pU}Zia>SAl}NKqxLUU0)DZ4gdl8=s2glO*auGZoR z>v6(Z;o~HG0c4!lC&G6-y2~Ph^KSih<}%D*bvxbjraP?zElw)u$YX$}~B-iniq2`yUx+Htj#r-gT z?=0aO5^)k;$7Tbp8_C|`$yApXgo`*a%i-O)2ct~w-?2Rk@QEC0 zdCTkUCU*N6_eVNxoVcHLBzk?io1#pT=T)d+t@`t8D9P=ZKJkw+Wv1Uvo(n0v5wzLjbYee>H+I5XT7Q*Mi}l_#fb>gBwaLnfct^-eWh@kc-cu5m4s*H(LD@v(90 z1KbYL#184mul1ttw{P|z5xvQU|47?EEy^SsF{~cbljq6n~CweZLkytI6NiX|W;uK$VNH^SP^} zBB_5L_N_8bqt|YV1B~jij+hMh@pWz({CL)(p2;qq4@Q1^L1AaSeA3cJTUB&F`i;|g z>yJF>)YP0?*;sgO1;79G>QYA=gUYy!OcvcyMcircPo@cSsw@P7>#rR6fs13T(tQ1ek=3p+?pyI`UB1J-Ab7LGSU0Nwi#&-s&PVN+2`1c^dccCb(0Tn3@gNCli03zvHL6}GRX@LJe(i0S=lvG= zN41Z8>}B|V@7dQWtv>91W_HI@`ttH%_fms%_$7DhVD?;5>coKk`KunHh0GY?7WW=C zOu;KTYnm>`IMIy9$l!7YPRWP#Vfa3JXOsv1Om+}6chxr#8l1E?Z+XN``fb0n)Q^xs zdB3c}68WKE<~XWwgr*h4;bBqGoak510WpS@U>D__;#Er-XVJvVRWgHO3VCZH-@y|h z6!Z$KQA`GJB1A%oeKG~*j6bhk31X@j=a0H0gXZ`p_WB!jf<*Zg7cn>yo%t=ECCEQc)&P^i~@7vxP5G7CUs%UlUo2ptwP};q8 zrXy^9#u_p>_xYG*vVq9J)e!z=HlHgI`}5Biwigx%ZZ8zIsQbzhPsAjoKIkiF_BJK& z*p4K4~$V$vm6#!Pd{D6R1Qrx0reQtPy=qt@?a>KRs|tg=T8BJ%Z@H zbSB1r<4{4*1V==#v3K$;kM6W$ewm|9M0FsGprfx)JKQ?=i`4j+_qg_Q>K%6AOQlC% zpR|P;jg_$&upizt^?Ouwo%MG6c;vfgDog>XP*Y^__Qv--tqU&e@&fi&GKt00uYAe2 z)KypHzjdNh0gV}M3U5nhPtfkyljp!E?k>96dLVoH!vF8 z1O1vE1$M?Qyj_9URYVm=I_bPIt<=lHp*;$5_HDP)jbxXeRFjxAnBlrcE;o7XL@LIo zR7ipReqfbyG32A?wdbujB7Z2BaB%W7`;`g7Hx13n3uBS9|wGRPGT<*3N`dB+nk~yk1(6z z-^l#@w`PoL%00{-UHWHaxHP^p8$&hs$**QdBk|?co&5~TU5w=_x;{Tu(%u+Xg4|{6 zy6vO1%V3-z+ks=3PRWAZ7CKz-x4*&C9&g@d zO;zy*mo-I4`y-kBb#t;s}H%P-c`u-p2wKenwEcwFy_YR zv=MMEf5tqNc^=n2DhfRLtnWgcBCgKkj+c#kO`nq=wsbc8_kGFyZYd`mYMUkQ-nHLz zDRUj9gHN}xgYy1Se$oY(uDkFU+sJ0iZFdmaTbdXn6{mVfVkbX3r*$);RVQb$%`t2L z__27!`sG(TOz~m|20I1C-d#xJr4Lq4e(Z9Ln`OSYr3k+0&t7`|q{5qEZN)9UD{O02 zIDKx6K_91&WM-Ca@VOs@i2AjO%+IfASR`fd+Dr4iem=w&W=grmJK(UAm!D~|?1LH& zMnYam8dE8kFnUrpD>-RyFCc`=t-A|2vg9mci6sm0jg^MIa2r3dZ?2NI#O{olv{lJ1 z`DZg*nY-b18DKEl9uC}Qc|8+U92_O+FXPV5KxZI%lko*Pp|=EQzotCyf!Zp}msvrV zQ9bL?aclp*wL!_!SJQFb#BcLrc@LcV){sY~1mW#(zSL1R9tyPCoH*A0Ov-qtJ41H= zIL)#p%)a8pTP(d0+=ijy&C9t*8Wv202rU zdSQ1a=%7j#%C=M4jt{sZ)##3j#MKm$h=v)#A18codGW&f!Vq8HiOVwe(P=)^d7baH z_C&t>8_R>tm!U@0vG0R6A3dL=ohj6h8AN7?wi%@RfsC!hnoI4gxN&nmK7ADV=C{~@ zm9l$N!|G#0rTgc!_~|&3YxC@OZWQ06x`ix@R6XTQawq>nuC#fb!w?$WozpiZ#;Y;6)G0>O0xO>K`+ik^o?O+>UqtdPzUP`#Y@sprPtx9QR@Ul! zCBoj1Cvvs2wECh0vqZg(=p$qAy;YJKF8fFJ2l3OY9$+y77H2{MmL?2v&D{Pw7G+?3$mMA zDB>VAag&G}V)UxE($)t!KnYdqvcdJZMq z=j-u*YwtI(kS)2Uz8_N!pB=P%HrNk;SepJ z0;Q3}%W^WbdTK8)#o0_tWQ|JG>C}WcafAV5k)F_d)E)SWM%i* zB^g+N@d4M=OeT3Tg%GUOtOEC`tYiZ4Ze5ggg|n=hEZh$-ka)N8=~%>yRSGMU97TUe ziJDKKf4zA|8%vprtJ-o(U!a@{RH%D7 zM3H+JKpUMV`{|bSE%!MZE_b-A`C?Xf;xH1|_h0NTr&B-XAj~&8gktJ0Ne~*p_VFa1 z7gNmR9xh}3cp?9&-tZ2+d=XcIW5%e}Yx_nNqxr{9Lh4Zo*7}P&@*H5KrqPSc<{d23 zZ)&8LlvXe8Hf_BYeL_QYS}r^#zIA|8FZZ40YUdbtnA{PcaSV$%NB+oUuD;81c=OcZ z)qVP}`P3cXVwo&u9%5}0D%Xq+lCzL$B4RvVvp8|)MP6SG;@+-TX_0NM1Rrmu_t0ai zNEN4+%gZ{c^R0#Dg^SfWBQuR}S_Z{&DL?C&6g4TR@e~=|bg$aoa@vRS!LD{=OgT1- zY;2I`mND9RTy?PdC86s|9H|a#GT)E^(6%26Hw(IY zW=L4R)pZKS$UB%AC_dGbO&C|n!!B2T+s|zy$J%4Tviyz*?$cv+@5+%RA+p)(rL@kt z7p?w`;$PxAWp2 zOhuXxbc8joq|SZcyVBo^u_rkt(t6LetN&#?ALn6~>fl9}G9_?a)B77^8hAyId6D18 za;-bSH2Uf96&|RHz7oUL@kvNweBe)cm54Z~>Pg_-D~>O-}ld11na&&*~vLcHO zy;k;R_v*B|M*T|1qFm_<$fOR=pmmv1X5xzpdPwDPf#>9UkwIB~c>&&Pxn5z$V;hg3 zsU>7z#MU}YGDx`{|9r}Ld5&O!BuQFZXo&q8gZPIIe)g}IWZZwGE=auemVNl;mKJ%w z(rcF#@oe?YQBSgv1SZNS>!y%Vktv;ig=eqD!bjHYtFJOat_-qrZBuPoJAfMpn3$c{CUgh8m9Z=@5V)i)}Pz#LDiM$YMY{WHs^%C!! z;*1MhD__L73U*#Tuzs>2Jf=MLO#RktzGo`iyxYr*3@=ZJ(h9VLaa)r}`woy>tl!yY zJ3}$JaPlG!h_^n=FDIScFp1V7xa|IJ{b;gb{>~!^e$8xG&H7&ELmPgi>lHnd_(fZp zy$escp!(`NCWHwgjv>v@qKJLG*|p}$^{r(sFckZr7MoUy5!yasC7*AaE0RrM#dcFo z=6YHplx}vr6jk`_4GVe3$Hru`4tC1dakACaSB|`ZH@Du9D@_r80AA{|V-rgdWyaTn zX;+F=ne2s*;NM%{8e+Yhhjeb{dHaw)KZGIDr{E*jM+}X=3sbCu%-6Vh62odGlXPQv zZ#7ts5+r?$U*V2aYgs0D%Zf;Eh|%`@rtmBV{*ADlgDU=}JYUmw!LXYyY4WCmMDM;b z>$MmVlD&<|Jup4y(|fz!nCsCWsW`ZmTq;Udqgt)yq!%pn_VD&kvhV#!RR}MB><|O3 zmfVR9N~50rg)2_;n{IX9FIT3=nZtLa;u)=^iTuJ%KWgByMcMf}?0Q*iybrnjQT^64 zwv1X<7bUr}%QAx;r3nv(1F4um_?i5uZHDz9{-IcrK}?))x3S#V)=o;NHw$R#f3Dma`hcY z4p|%Pt=`F)z0CRadbZiJy?|o=%TOVrBaT;aX_oMt#nQ5M>PiMg9D6C3Wwaz5i5$f9 zUL{_>vviFUFR8;+UpRDf;zgL$i+g#^2n>owIa_}FeI0k~;rH96&u<~Em~pj|+X>C` zZiG4Y@vVHvTMgGx635rl5RVLs)ZiF*WX-w#@GFTk9$btMngPh(hFZgj*3>QDK4A6)H|;dF*w(7wJFa$FQ+Jv$tAI zVl{AWeC`tz*50STE1u+l48bX@p3$*Tb2r^c3>OvUvFp~WP81LxNUh5+8`ro4YSs~& z5xH0Uyj8xMnKEuNdE@;|I%+PXP?x2)ws64z;hkev*3jfF35HjiYvk36)hKpnDoPiV zA2oGXMd-?Odz=nOf-X{ov34ls234Tw!+XEfXKDm?6m)#svhUMRLHfV@O!4GHC~LA> z^@k>$CwB+GX7o3&a(ld9G8Nd}S?{O5ANr|@@DW#zsrj=(-IJbsopN%uU+=UK%*`!E z%h*v#P|ty;96*iJno-c3pqtqPX3qHDYYg)CAm_)HZ03e>a~5pYqLQK@(gKO+c-lJN zz2qJ27`~6md7r9{`(Yq&3Z>PLnd75)yceM?Rt7k}>NhmM9le>;rHbZJwtvM}B&8}- zNFHhwWx~5sL>uGC?;dVaY@t#Q(NeSNG2y4|$XlI}hL>x6Nz9ULn{gbMUPz1|O1;3P z#6h2>DzVpe)&3xzBQC6TEpPA6M$2SiX{<<9coRPVhjEou4dpGQoN%ncQaN_QNV@aN zm5DyBSM{^G;`RrhF1GFVX;EN}Ip_ox-~YKhXAI*5VG8Z1|mtf)lvgF5tCV3es!L zPIMt2&zNCaCE<1>k=GrSsFXgTP7T9wmrt$H1!f5f+j`o*yFT=W*Aq(GhpWqgdC)(23P$w*hjZl9we}}48 zrK8T`h4oT##N)qK_DNkmVILL8o z=(-ws@aeTqEe=2Z_=@Y=IK4KC?{Ps%CEsQBMr;Wuf|$sFGM?Uq0p-R;j@qr>DdD4= zSwmlGg>G{OB}i$Pgt%}U>lKD;TSLp=hm=c*lMJvVn2f#7>xmG@sQ>=nIXEN5quM?H7F^k1BV3bL0J(LnT!`6EJl#G2HrbSm0T#0 zzaUz8-Rb7#1AT)BPf{<*P>4}^stXP}FcUVuCuu5Hn90@3RJ`A$mJ>3~erpW%nSOrC zj(j0J3vLeKpv86Re3QcO-My7muA-bcllmsYd%9oBJ3OeS$V%B+Z0 z$$TMuL|yo+4@mwiCTb!(Jh7L|7A~7s)v?Qlx=iSE4i|pW`8KD^-zHV?B37g0A;WUL zz-?^2spb;wNGXN^8GK3}gRB)C9JjBR#kCl9FSE&35eeUm&Ww01gIT~!8oh3+SB_8r z@_RdDXziC;vF8i|Kb+Qtq@0IW{jElW?>rEuC0MWr^)2!sQLaWX$Ejx8`F-o`o0A~r zlL;G+>kcBM!)mOEbvCCU@dK?wxH~^*GGTBm*8>t^is->=D*v*#hN)lk9_JjzPWOBF z5=&ev3|_%FUT`yj(R7JKPs>X8ZaEdn!*@bLr&2(6{{8!e;o1bRrtd#~-X>gZS)yh` zE+}=IxrfCGiL!G$QM;^J%%x87roKtRFg)leh5Svhnuf&>B@3rgVGw)86ZT5!TLli? zoD#yWN9`dLeX<(f7lPLP;;tH$s?!a{m`5`goGj7NjZg>jN|J0c?iVezKCXBYmSb(1 zzDH|bBc4VH%eu(IY3g75BYUwou*_>G*lJZedOl*E4w+#X8#m3JNS|W(wN5}+6YTYz z8uzZwIyU*XT7_h`$(lZ0Qrt7rye0Ma&G(E&5IKsri8ikG+xFsBoP{(b%+hisE4nrE z5!zp60v|U?73;ZDTPF&Uv2b<2dakMFej`j{{!N|ncMMuM_)E2pk zS%#Wtq=!fhav`kukSinpoD^78hM~0gT-jNt?kB4yCJd!p8l;4)`<0t{N|5qJCdhnu z(}FeAhi<5GR=*n(j){?9JGn@;Y)zLe6_A|W73{UW8KXklS8lOvL2MYEW*@-crpwns z-Y|)P@$ru_1%>4@@H)s_z@yIHn;VnWbdtHP^q19^-v>p-aDQr(akO z_no^c1>8tT8mFyCb6QI-e@}vWf5mfKVat5SW|~3lZk6k}dil<->$?Ek>H;Y{9%jXv zo4o3gS&|snpWe8)M?=|KJOjL(q$DYD)%wHM{DtlmA)%7plGPez6O<#CFZ25^!50^O zHZ7Y%kth7-x5V-KSei`9e1-<%7-a^Gi&fZQh z+2HTUsO>)dx`{`n3kDaAy|jWwI*vIR2F&R{Knuh3dVV%E{qP}hbL^Q87Mkk%@Ypy* z=#KDm#gQDY?ZQ--Kh01B+zd+-u zpsUYbcyClGNIYxN6%)RvN9udqyxb=xw4)Yj&72%clOFQi>jitR(pDh1V@a2F1CO1s zbf}S9`FESOXf=}OiUcstkK{?&5`t3QyQ&XXDn#2#g@!YWN&8ZSI`d-93l;Axxxoj3 z8W=8}y;RD^xoyxkWzwhsxAMlw$S{^~VL~Q_z<%~oJ$&OUOyy$2V5XP^|3elIkWw0Q zGVE@t{1;>{<6YCfREiY;#@R^@$^lw3ce93-hZ2Ex(WKQ5F&iE(k(VDf%aP|>#;|)d z#+=$)Sbu+tlf-Kn5>&|(-jAcgq(+}Rdu2o==U~}^P9a?#d4<)D zFOzvz-L|dsVemI#+bW(-iLEhNHIBdK3Fo%vsCkBoZjvLjPA}whBj+LI2vlH_bJkw` zH5+M7K|q3(v{(qvi%_IJS0szV^g!&7&36aR-SFacR*rdD#})i|yX0FxL8$nooVlwn zygWjUOK9~vmoG(JS2p0WebTlZk9__`oK6g1F_oBCrbu4GN@gG~Dv$j^;a6Mt0_B7~ zHuctQi;bw-#@lU+c%3|;rT&qOQ3`9^oiazwAcnfUgUOp|Jh9L9u3`lawc=;^Esr`< zLl@>===x$%{zy5_d5T*9T+|+K$C4{axuN|edvYPm%yE!8k$xc~RzpWKWCSVNGAP{n zC|5s(vJLSb8lV*%rns-PFZN*hr9nU|!)51-Kf0$jO!7O)9Y!DD*JyLec($zVqE6$q zeb2UwoGblW<$F#0y3bx*uB{5D>DXb8qW1^qpKX!$8|+SIP+|pZ5eBc6Srxdgq+F+S zu@AJmtCW#5_C<5?$Yc-RPrmvZS;wIrvF~_izUzjjhS$`_mpMZW`9vO?`La=8{b7mp z0XMmgC5>3$9aV3hwK$0bBEto>dHLv*(k~T$=3_td%G2ZZ;Ecitn!9W-n>yc?@IB2XYQESMBh({Nj9=yG-VUTw zGXB8klJX!Q0d79OD|^w3XFG{vp-@QK^&G{Fz*M&t@=Az9b-n6Wv(iEJ?rS|v^Sy4? zKTGXYnD#wWf#)+$#{SifnTn>fGClYDih$V?b}{rfe$21f=fcCKL{%3 zk-lQs1COyMyYqw?$5^UoFF$r@YCWOI!X?a?RWZ%&@3(&*r!uV*_pZPvoa}pS@==Y= zz9ALcuEVOGyK}kayC1BAKkUM_iXwF$81?R#@aUAma(5R@#)p3_8UvroHTtF{5_#w` zpygeHOy0jfzxech@PU`}(fqfLz5Xtrqp@%6pT)#BjYg-K=@&(Yf4l>KL%!{C?Dh8O z&C)*(ohq?UewlL+yZC*p-A$u+qStc5{QWI)0Z~EUg5(0>cu17#LQ!c>!MmT)LnqDx z+(U5Bz1r1zi*b?4@wUJuqBMie!wo3(XNuBhEt1pSZP!*=+!h|LyIwtkf>-f*3MMCU ziV?!-M!&c>gjfi*phg@kH;lyZKHjGyemP-j+YK^*R~1^fUK>7D>lr!TR(j!kkHI7X zvVvQ1MEpa4f>o5tLYf;YsLt3Ub;2Z3odI__JSz*a9R7;od0dGcDvM@FOI}L(SsdPw zAETMv2j=Tj(GZp{xv%68DN@bkUQyhkJpEf_mZ@d-9J+!MbOX^LRkroKL;L46yeZP= zDh|lg+Hw!L#oF#~bBKlgd5g?DRAq}p>`m?gcG?`7H&NP*3vl+9?ckc&o5d|$v0#-g zgtuS+?BBPfK9g|Z1WQ`2TNS_h_DcJX*B!26(c*;B)KPgG6`SnJ+)Cuo$M<*sxG(J9 zR>4K&-!U_GrN0Dzn=Zyw2eWQ&3*=2?)V%orY3S5s8Re#Nh3QB*dgbnCfjFi#AZ)#I zppd$(saNw+{Mi!n#Vpsp_0#JZwR}Gk-gSLSrws1h)}>7&a=7pDdb4)+f=X1ht8x^Z z>r`uXZco)zWW^AdXlf*J7vI#B84@Ep>U}RN&>f^taOU@CZ-t^9ctFVCGr{Qr=sJpu z7vxcm=K;Epfr_{Rx{0dr1hJ#`Z-6ALuRR3y(xKvRgLqIBNuVT@p%h4=`Y;JZkA)JE z1sS6rJ_j+Q-pYb3P}r#;MogdzV?!!X)<7Z^ZuYJW5QZBHR%R{?`V4}Qvr-m<(6f3E zf`Vt&F9cy{2!?+Yu|fz!;x4;fA#h<}xN++j9T)`lHUo4M?{_&2F)@^pGw2$MD-(2? z1b$xmLebd8l>rWcq7*YhRH%1Zpc^ER^Aa1X&gSk62tF9Fs4HTLH+N$%G zEa&Xn@x1LlZ#i?%;KAqZ=kr!F?+l)L-X5K|y7_1D%JY`A;OyGryzMz}ISS9f8u?e;NUJ=^Awh5EQjg2I9SpMg}a1VlD@1qJqjn2>QS8!4Q9qCm%oR zQ#ptR6O2H4mjTqSRDf<^A|NQ~3Xsxin@|DLNByh-DPsX-P_$Kmlap71E)$| zR75360w`p3^a>DTyb^Si{5RP%LhxVxQD#*jA$c^d1|GsD7Q=jC92X>%^l z?rl^YK*E?11nOfAFit?r@fsMX*w-Ls zG*=J=K4cf!2n;ZkA5{pnsFWHIAyD(AXVJ6DFOp(mpyF)MTq`qvokCGw%NJq!RIsf%=D1+aXAa~JU|^L zhh~tl@ZSLle%|R9z5gQJ89l(LXYt_7{UQ7)u_h4pZ9&AT{{f%s#uE_%iYHmQ+L|*6 zBF+~IN#OKc3RPogb6}kk{LSK*O9{e%4Kpgm9h(aI8~5B}09^PvM|9j@;+-*8|6?^f zqm3pC{M^*1nf*fJYzOIM0QIx>`BdbMo?m0dl7mH%U4{l#Eb76101N3kFo{dk3Pe z{?rKqW1=+Qf&5XI`#=;7e5W$~M-zf37Z7EBVa>if#nSHs1^mLIfc(Wx5OIcvnt2LT z`BHobBCTHT1EM&}WDumzedcrj#{&Tre-nhAjm95P_$d^1eHe6&9_aA*jlVR3p(Ngc z=q@4vrh+g;_5R?gXimeR&|ji4p2B})^Fny}(M=76JwPRzYOE1Z1SU#w6hw^L`T+bc z4X_3|JAfc?itc7|ZW3Mr-e0vw|CRu9O5#d&$QZ~36NQ)n`Jz@of~c?a^YR18uEr*| z<^UnSe>g)=(a5W7CP0B0m@pVhdXBs90H&4{9`(wr<4f6v$%jbUk?z1 zXA=`4cowA*uro&iHj00R2*kOm5wNp3fH+S*5wKsA3Z?c5#E-g~2_nS3ZSLag0{rw! z5LMd@6lAOV1fpR2o!F|lx!PLU10Npxzj+5zt@=0U&7n z4THi?Gaqyq42WiEFd)x6gAx7K0SrMP1o==-UqED{=;A`bU>G`GCz-SAg zO9pUT0+E3Pfn^1TDg&@M(6L|;7y``;z%U3L3a?&Y1mR-=6)L~4fZUOM=;nYy0Ix$6 z4h97apu^x`zSGZR{iOsP%>NHP0QL_(I9TAE9@BsB2nK+_4-?S|LZCpc-!;InzC1P;^{4_%!nTMURgU4m}t1?r+EE^|CR3iMFK7e0Uk`YPf4Ilh7bgw z<^X?o=Lho(o+cH4!=Nyrz@+2`Kmu(L`1zoM=$1b9w$r5RPZ9tOurw;>e~QL_LE^zjC6!4YWo0rLxhPd6g|mO_9ZjHVpWPvCT;0<9mw3LVBL zaGHai9w?Vh&~?#&J3!GRCZIJxI&nY^L4d^ICZGqJ%=`i{AdLOZmmdNK{`-jzg9xCn z8~hNs0J_Nl-U6p9;OX((Mfn85<&7x>q4V35-qp?``C^n?61`)_Fh82EI5k@mX~00%aJn1w7hPb60`YhIRIPt*L4oBPy*oc2daMNlITN~L0ABHHqwr5w zzy$rrkHJtd-|yA$548|5pn`tPE}#~g-=F3rrw^om(gnN-j6P)n7!0VYJ9|pvpYCA( z)15Um62N%<1LFg>ZTP+dmidPS9Qu!cK!G*m-+sVQ{zDf2kF!95Y!2O7pm0FfGu;2P zjGzD*jzA3pGW}y2LH>W82FN(kqX}40Kmf?6uJ8R1KL)6u?os|_8NiKyXNLdHTtVPK zcML%RAex}#0-5W-F!=Al^@m!(76gzc0y6zGJq3Yn3Ut!|BJrW~hk+4be$?e}|6{;` zy^nvUA^`gzWC2xC#sCTAKOBKf6I~M^ar-By0wVuumFT}L2;+mGFY!RK2*hgieh9wP zO3|ms|5*lx5CC>nG4}t*XaOncX$|SqM^zwKM;|6Q94a7yiUCNVCniAP0`fOBjtD69^zrpC>jVF=fS^l@ z;De$kqF^{+tbcI@PxrP@59EKtiGcok*8Q6a5bn_RLGbbn7B@-B+#@2ZUNKuZ$*GSo)7&&6^I5f;D1(c{wE2*x6wxH^ap!Ji_E`U)`D0eb4`QfHT*esQ4q=N|6 zL4;dWRTSa=RRm7kXpxNRIM1D#V~5Vhu4Wx%r(5;-MOjt><7V40Oa4rp&?0cw(?Jg_m-vF&$IqulW|WkF?_?UF zmFXnbB(Vr``xGZEG6pnQZjkUXsx{dotqCXe;ezFDbsV&m!tSkU*tY#|k2Y>)@tmgG zP2}VL!EVO`T zxEB%G5ehf91sRn{Z?Vc^h7d7mx=^%5nQnc)MQCPL+oICssz4_ro4%4=Ee#tH0==|x z-_h3O61vWM2fODYxHB1t3GJ0u@JGuu*2lp#Q5}ze-!B{D1?ZKu0C;w2eP<4evYj8= zbg%I4~)9j06#Y*$(U%yJ0>rspqnGCtgGGANlQazJvuIdB4os0zlvdBYv^ ztG;y@x${$990bXEGKYK22B4F$gR09UeL=0jXeECe=;w>P3m-mXD)Ur8>b;8q2$@bo zgl?g4T8-|(O?$iBp1ctBoXh##r31|CqCwwPJpekXUp@*E{v+OuiNH`QtzpB{F(MAs zeDu>P59GZba6(mqAP^9`VQK3rHI1OgRk^dNPFTJ{&9N<4VxxqgU5NP>qx4TaqnkN&>2c)tg=* zLZdQ%G?+<&rT`&gfqV3PC=v<{u$y0_n2&=-c78^i9T);jifqMeY|F=Y8tx#2vWdwB zhnt=wV!C*1b9ro7x7;B|M~0_-B+~LE0I{uzMnF&5$#}^?jMhg~{>{Gifq78V8Z;M( z8koR96Q-YEcim+_q?bBBK&?Ek68L})y^|2(KO&qF5kx|o43<1_8q^Lht=tf9Rm+qgLYr}c=q@CNE{KLR>X6(-4w zwvy~Ni+1a0hS_mmFBud-t>@!rpA*HK)()A|(=1T@p1t0H(RDx$*P z=_OEz!1EPvao>86C4CPnf~3V)7QYNuH-}Yp8Wvv0Rgngr(U$wJC>iRz97-e`@rd6$N4gjc$udUXn4tn3_Tw4F(~?hXWq!(g385w#B?n z$E&NT3rzudT?XKm(SN}o&%M01in{hyP*v0S$gr-M9w5TZ7L6Q=+eBETSsSb9%#_tA zj;bt`&SavNbL{IBTr6rF$%}fcz;B&~pOTX%F}0H>*(W|aI^dX0XZlW~N#gn1RGWf6 z4J9uSp*USwDBBkJf+n(vrLdu^Z49a|Bg(d2(QtHroQoRc=lNsS#TB-tw~9Mccq@v^ z=6%WFfWV)J2t64fa7}DtX_|l00}w#fAFHbX(9xB(r2$olh(z}K)fH1p7GgTchY5;1 zB4SY3hKjlCFCeW`zf3Y=lLoL~?Bif;DHO#OVM~!EFo9txpiEF!(U^eaF z)hzY2@Y9mx!D~oEIZ_z4#1hY^2`J2j$2JK~K1Kt$%W3dh$4yBqe!#T5^Pi0h9`TChM7(rVRqF_)tt%fDKD_maWG5r{jm2UXom3xKQ04Gy}-t?fi*( z*$UonAHCe&Kg|5Ii3!w<2Aq`B;00{YX-u-~>&{XDK6z6=2=7R}PMHbGG#cvLQeh&P z>HjodRK#dBVCOV=X(S68`%lMT0ymnggr-qJFkA8pq+u};2&l?U%IYJ+ru+nOr{vxU<=5u7X#-b$Y=yx`#ZMq=D~>_%!a zdqAr5^6X&tL@@fJLvt=nTQy8*Uo>2>I*YCmNL_UAu%CW+09~w~2ri0kz&2D>+|6pFRdKhcl3D!sMz2cF$@!`$N zvtu#Z5Is`#C7U$k!?JzH6vOkKz-yh2OyV#sXuO^vyhITi|Me7a?T(4}ufH1H4e98}^gz(NiqUnXfJ0nAhM*K%k=@avzg&j3z zi<}1Up#2lHKv`^68E^ttgK4M#GZrz6#HpajYU3mrD$=9?gZRSVVv!FAT3;;_F4SL#HB?(3^dS}o{#13&OfCP-t*;=M z)#=bEH22i($pc}{7XxqBv9f!AFgMyG1Pwc7%&luR{zZ*XbS=p#FfpDjm&Y6 z1^GC5t)(!=x!O=xhz*3^Ec!*`n%phS#GupbA8bDQ4B>o)m`}*hcb^{T>W3;(-2520 z*3_b*H9$oG@yoQB8@hz^anP(p52g#|r{gHCoX@+2>+wOI38eO>SH)K~3BsPwg+6T! zaw$sCv91%-NtnwcT*pSLjzTl2hOd6Cy%Cx3`D!#? z1gEjqAZS*qr&pFHH#r4XJ*#C3*TF(*Sk-~x$)ZjeXAHiM!#V056IH6J;B`0{Wln&!C9GUT1=|IVKO#qbkJfc>u@0S&6oJjo| zBPM$Uo3P`A7J=-QY(E{YbUXccYx4mi(BZ9zPo6yE*AO7?@ZsUDuYP*`g#U5RyZ_zg zcW~YAi@U>}qxMc$eA#??bZSRTlT}+#QaFdtdyYA-i7y@yoMEPoMqz^oPfn SqR!sG)?K=J^WL}jFZ~B3m1da$ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 1384563133d17d751f12290dbcb0370a87df72b4..32cf2fe89cd3d63879d007d24e5009d4b0bdf2dc 100644 GIT binary patch delta 539 zcmccjhWFkZ-U;pXSx*gk?mpN4!hHSe;W8Z!@mcq_m6RE$n4ei?5F6X}?Z5cc$L@2y z6FK^lJngKkiUjU4K1@9%?fuP7LBU7B!ZM_F`|B@;6F*N()_VAGH_PjluXa@L6^i-i zYyUQLVX&JG?}XD--y+s`=iz=G|<&9j;F)vjtDE7RZ1_DFlzHOuVX zvJRGA{I>d=cRiW>^Ih5d15Y(Ro>+ZzdFd~volIBKn-!Vb6`2@;m}$Er6Z0}xc5_2R z6C)$z>F3;;Wni4`AKjUG^qehB3=Ex}jg8Cr|rS zL^OD2ig}*p@sxZhD-fr?XLCwE3)3N{PH%_Mirs$l!mTqbr%TE0%ib_ItFL{1c+=_m zFL&G8mJ}Vi%&>FK<-@1fC`bherAO4~pHvc3N}Zt5xZ*%n>-_$XN%etWZeA1r9VcM9 z+xCCd{!oo`jFCdJ3xfFAn42@jV diff --git a/Doc/RomWBW Hardware.pdf b/Doc/RomWBW Hardware.pdf index 8dec617ce8b3e063adf7754abdf6d6099426dc86..c55090aaeb1b194768ffef8846a21e03b1236792 100644 GIT binary patch delta 562 zcmX@!A$+_;ctTtK$t)E^p0@X2MXDOZR3h&!(DX=EF7{q=+hDoFuPZH2{_;;ey>6<( z!ot(Jr}x|G`W7%YE$`!-_I7qdqh{mumMO-2Vt1eK3v6x)S#SQk>So;5=Go7+5C3)l zo;3gGs}K=?>63|X^5l})rcazRo#FBCM{njhKV{HUnXt#C%-=AZ9hvNR(FIz8%mgN|%X z@;|YX?aCIG4Z(8H;vcQvztrr$v{ZfeX6}}MJP(DfP8~2z^2@y3J1cco%gl48r!P%i z+O~9!>N0(ijZ+(?edA7MuM|6+Gf+ zo3bhYBj1;*CFZ}i%Y#c_UtW0d-TzRntm3zgN7LM|m+{%Qe>(MjsrkO1ZXe+ruQpnp zu{E$UZ`s|ZxL;H~)#qB+Yh9tw8!i3|Zp)kEDV_E2XrWa4D$Dg-Z>rX8;ZOd~D;oCn zQL`~qyD<|Z5QAvu?Z!+jg0<}ChK43aCPve}>se%Aob7q_EEO)!ZstZ#7A}UC2Bzlb j<_5;5mX@wA2CfFKj&5d_F0M}Ib_zCxluXw=!XgI%;k^CU delta 562 zcmX@!A$+_;ctTtK>8v*fJZ;}Ax%M7dF-hls0*A@oi<`4gzAFf8J(s2N_P4&)@pDs) zPCb|?e0slKtWyDF)AByPX>aE@G-@_ZZ<%7eCwBMwzQE>|kbd*uRX6gsikqJgZ~NW< z?r7cTiz_wenN2!;1~4bNgTKp0qaOclG9T)4r%*%vhe2ADNTeWRRTl`TphAOH&+Glzy6e2wv~9 zRa`C=a9QZUbcN58f4s_HdG>kRvHDwYm=@YQ|7htmD(IOJe5+(}+Dx^?WyNPVm87mr z)XeUD$?ckx`oL{+_@}5xL<7!s?Fcaj19lnd%5PWv)ypx&5K*-7CsNi`?>GSvFU{qGnt}o!`gSY z8$53-xNh)d`=cd2CvRo#bxpDpdv1T|TCY*2^V$6tevf@jpKmqW-O~Rp@y$NQpB7KA zHybmx8#6HiF^Fc~Zp_3YSj%o~Xkuz^Xgb}yo<#=6*`8O=QsLrk=;rKf;bLNHY-DL+ iXyNK+ZfI^~Vrpt+;c9MTY-#Llr(i=!$#l&lEOG!zTmeM@ diff --git a/Doc/RomWBW Introduction.pdf b/Doc/RomWBW Introduction.pdf index 6bd9664247e7d12c9062643505ffffd405eb0567..f647ac6d33e1d2e72d16e24d0d20ed16388e53f4 100644 GIT binary patch delta 4840 zcmai1X>3(h5T*zc8b}(7P!-7oDXWyTF9ph03IwPqvB*+nD?*820l`wtjUtE%l>&i= zMMISc$f7X;swf2|)v_gOs$oeZAVJxKQ9uJYx69+b84~-enK$>GnQy-NX3jU&O%GK! zEt#F*)|CD8Sg>@>(d;X%MgLoO6Yn2PIbAUE$8D|h8Wk+ud~Nr&#O66qH@RPNaDAtr z-bots!llj&uACpzyynec3pT$$ttgqX)Elcy<}Ul?&l{fQmy~?6=&#(hS95xo7pBWi z8OvTS`ts7KKJ9bTwicEbE`NMN*4&AWkIfk~^)+~P;rZ@tS<0bzhh&%SU!AIor zUOh*&N*Y*@eJ*{)>PaUKCAId?9NzcQXTy%CuGm#xP?%KwabEAdC1<~CGP&~m=@nI} zJ5py1=+yB}>d=DSYjfW?pXRsBYSjC}_Tc*AF-1rBUv62vr>e)>_gb7yPCs&xPsyHH zy>UZckFI;(TG#$$#;uMMx-KqTzN^KV88-(`9RAv#O?%UNty@&KbLdOgi?3cNSlVq{ z>qF0fKJLzYe{4NaIqHegM-Eh;{^9Zm2S!$Ydgl0!@w>BIF8Ful_H84-Xx3)qQ@N*n zal0cu`>m_FZMNGDMSa^Wsrh#5pz>KMH!IF@M6)6)d z*XN%Y{)%aS{leWoiywLN!{6U6U6qxPyktb^S2bHw$NiLdcY*ezaLQa~cQ8IY>cB z9mqclKj%V_U_ekvJ-JmhJ179*qBqzNI3r_GsKehYOUR`aMFz?l`*GMmoV$k*P7neE z;XFyi>A+$lajgZ3+8Kxa1js4&6T)~xVBtuagk+{J;TWwF(l}gCA>>1Xq537HA~g;_ z#dU`ctG~Fu>>>VeF%d~%0?{vFEm3UYc)a+9=Q+i3nSj2MpydF6ToVE9Nuu`hA-Z5m zjfK?;Yk-iJv^ESQS$}U3Wj`2cCe~ZbY60hAE=a)$7bJI*1mm5K{}%9<9O#c)M=DSi zVvBE`ko{6Q8Gj(yV3y&ar4|C01k};$fLsFNk8OexotIjA;s-I~8cWXzfu*yuf#^ZQ z>H);mm2Adq|ZRJ5*FKMKD#uvlUg zKnNSy+E91+m}IOCor=zAqI%#LgG^Ajcx&Sfu9GwBL7f`PWGFE~(PIv*I}g-Wkf33= z#&^K{;{+}Ug~AWKB=xkQdk8IOINAQ8apH$gNMINx;iL@lkHYT^&>9^G8Wp!N)Uw~w z#S!0ogPZo)8YUCfrRh|KjGx zqqX&Pr3KRylDok}6Q2R_kkwH8(hlGrcus`YD7rgCPm@=G0TIMkLHl}KNO*gYccIas zF_3;7bu9=UIZy*P5Kiz0AT}or#~539+hOc1s7Z`pJ#|6baMTVmiE#`ehB3#Yi`IG0)e|>J=^hDs16N#y*gP+Yx{14D&EDitw delta 4835 zcmai1drZ}J6c3bCthKa!rFk_#O_A^Gd>@vGAowUpXj2qRe1HoV7FuX!ccqoN+9cH5 zmaj~-a*L@`Q?b-7O_}9;sV#MrRjfs=%%uXI%R}z{9=G_5oqK-Y?>V3I`J8jU2hYYG zIvcm5IL4K4xba}{t@5MAKeBt$>Kfu34zPsGqL|orFD7-mkQaMt`MP+uW#q|Qjs4Dy zc{pX@gdQTftbgC`U8~w1tWN82v>_=!|5*M9W#itM9=cL@;M1I$#kI#vC;pRHfBE-| zZ(X@HXW_LuIcq;Za{6$My07&6&(a2tIhb(h*3H7+>1j0``xUO-#HL>k9vPmq?15wD zm7^QiElZf>8rFPmCU+@I=utN<^YDjV+ViWuyH74j5`V5*{7u=8^-}_;_NEM-c>32p zYd`v%O-bvR*naFqHtx-eQKO%_`em09?;RSt^9=jy)OR&w)t=S$EBm}%-D_#juKVhT zhBmI-(4lPU?71syr#-Z9>d#-et9f^A9T{A`Hh0JMs_y$g+4l0HB`1Ozxrfu@Y~m0% z@0HWre~YVl_QZupE`=&OPJI8lRsFAt7q$!5NonPb{li}Rp?<{Xjj1(v4@rG&@2>g1 z+_^k`?x)=K_UYs&hEG~j@y_)=SGLXiwsCoR=fZhguXlU*-`q7RyE zr^r?AJfHa5%Iv@X=+wCMm)Dor*xfcZrgYMyk}CiqlbIR7*nmNSl=1UskD9TdATV&$ zFu?>c#amoL=W}B|&M^TN{tFZb;+y_q%qZ^LxV6f+38po%Nf4pxDKSYw#mH~M`Tkac za-N?7!@#p?rL}Lf%98UicGi4eFd`vkg!K+&%36{nFiDaGZv6lmNG1I9Fpnr8gJCQ| z19h}4%CX7MX@ZvK+|QV4p-CcI3F!x;!33$Jk@OO4$t6lrn^1smB`sDW`pLQs;F z32jCN{hBy1{>980O<;9S`Pp%Xz0d%(HzfxOO>Nj= ziJvAtQV2!bmoTQKVMjDrVR>}(!=5Ir;(m>V)zXJmU`9G< z0p+V+NJG>t97uXG&_s+gKB5O z>02j*q)93Vq*vkYK+2>Xol3a75j88vsSTWKW<-QaaeR@z3K)t!0Xd~(iZ${Kl zG2f<~a8b4}{y6K2sz5R0!;jsb@E9cBT7UsT6_g;O2k+I{eoa7Y0vBlIh@Zki<0GSW zh!@;(^jVFO5_b~~Mi>k1@4i;8Rg97DBzqTWCg5ykPyylA|PzJWK;l70RIxOv?Llw01>3aH(N7j+TIq} zuu0d|xOn&hY6QX0Scms{kAy~{?mU~ueLlLJh(A6-2tjZ&B2qLs7W|SJ&4>*#;65@& zEAnD9*k_#ow!j?&{HQHv;va}!WUykHqO^@%Wmao~jKw!}D_Ub)S6F#--xvb38z~le#@=PE#HGckr86^uA TmJ}4mBde^8PfX0r&WisJ(gG&s diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index 1c261289a8d9e50d5a440be93e47968577c73c3c..5357c6b0732169db4a6050ea5f78918c324301f3 100644 GIT binary patch delta 587 zcmZ3wNNwpNwFzzYC$nT6dG>w}zrx?6vvNsPLPkNg^3I!Ibf1WH_&ay}|DSO6lD1;n zg%!J(R8?IHUR+)NB96_ba#MZD6OPHjehrqpgA;>eGjftxC&^mT47%6X8bo+KHxc&|s& zagH~($7=;0+vYS23M|<0aj*Q$b+R^Fl30WGN={F@xF}`$k+j`PE&?Y%@y|`!_-ze` zyTjcsk%E^trLWyCMIG?VjJg*QUB9o*H1CSXu6WNA`#m$5`fmpIObEWEd3l$Q=!_4y zcIj~4td467h|EY7{4KF!^GR#jS1YcadC3uJymV8}6uW!Y+qX}b^<_KwVvXwTsd^@* zQ8_%WGmO63?iH@K+-&||^?l!~?W=>;tN$EoIa(GYyYX#bPLZE-YmxWyMZR|f*GbCk1wMLqiiFoZhI!DFfqdU!ugR xkmqb*W?*4z>|$c#>}Fx&Y-D6$>g;T3Vd!e)WaQ#zYG!7qU_(gBboPmyasZ_7|B3(r delta 587 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 R7rw<e&0k`13R4a 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�S-y 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 CrG|t6 diff --git a/ReadMe.md b/ReadMe.md index 9fd06a7e..f90f27fa 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -7,7 +7,7 @@ **RomWBW Introduction** \ Version 3.5 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -13 Apr 2025 +17 Apr 2025 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 3b36a490..0ad64a23 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW Introduction Wayne Warthen (wwarthen@gmail.com) -13 Apr 2025 +17 Apr 2025 diff --git a/Source/Apps/XM/xmhb.z80 b/Source/Apps/XM/xmhb.z80 index 43bfa545..98bc806e 100644 --- a/Source/Apps/XM/xmhb.z80 +++ b/Source/Apps/XM/xmhb.z80 @@ -291,7 +291,7 @@ EXTRA3: BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS CPUSPD DB 10 ; CPU speed in MHz RCVSCL DW 6600 ; RECV loop timeout scalar -UNIT DB 0 ; BIOS serial device unit number +UNIT DB 0FFH ; BIOS serial device unit number BIOSBID DB 00H ; BIOS bank id ; TAG DB "RomWBW, 30-May-2020$" @@ -330,7 +330,7 @@ HB_JPTBL: JP HB_GETCHR ; get character from modem JP HB_RCVRDY ; check receive ready JP HB_SNDRDY ; check send ready - JP HB_SPEED ; get speed value for file transfer time + JP HB_SPEED ; get speed value for file transfer time ; ;----------------------------------------------------------------------- ; @@ -819,7 +819,6 @@ UF_INIT: ; Send character on top of stack ; UF_SENDR: - POP AF ; get character to send from stack OUT (0FFH),A ; write to fifo UF_SCDP EQU $-1 ; data port diff --git a/Source/Apps/ZMD/zmdhb.z80 b/Source/Apps/ZMD/zmdhb.z80 index 2efee0c1..30529832 100644 --- a/Source/Apps/ZMD/zmdhb.z80 +++ b/Source/Apps/ZMD/zmdhb.z80 @@ -81,7 +81,7 @@ MINIT1: SUB '0' ; Got it, convert to binary LD (UNIT),A ; Save it LD A,' ' ; Space character to accum - LD (HL),A ; Remove numberic from FCB + LD (HL),A ; Remove numeric from FCB JR MINIT3 ; Proceed with initialization MINIT2: @@ -188,7 +188,6 @@ MINIT_UB1: LD (UNIT),A ; and save it ; MINIT_UB2: -; JP UB_INIT ; UNA BIOS init ; MINIT_RET: @@ -221,7 +220,6 @@ MINIT_RET: ; ; Return with CPU speed in A LD A,(CPUSPD) ; A := CPU speed in MHz - LD HL,(RCVSCL) ; HL := receive scalar RET ; and return ; ;----------------------------------------------------------------------- @@ -307,6 +305,22 @@ FAIL: CALL BDOS ; Do it JP 0 ; Bail out! ; +; Adjust CPUSPD to account for overhead of HBIOS or UBIOS. It appears +; that dividing CPU speed in MHz by 8 results in timeouts that are +; roughly correct. +; +SLOW: + LD A,(CPUSPD) ; Get true CPU speed + ADD A,4 ; Add for rounding + SRL A ; Divide by 8 + SRL A + SRL A + JR NZ,SLOW1 ; If not zero, we are good + LD A,1 ; else, make it 1 +SLOW1: + LD (CPUSPD),A ; Save it + RET +; ;----------------------------------------------------------------------- ; ; The following are all dummy routines that are unused because MINIT @@ -326,7 +340,6 @@ EXTRA3: ; BIOID DB 0 ; BIOS ID, 1=HBIOS, 2=UBIOS CPUSPD DB 10 ; CPU speed in MHz -RCVSCL DW 6600 ; RECV loop timeout scalar UNIT DB 0FFH ; BIOS serial device unit number BIOSBID DB 00H ; BIOS bank id ; @@ -373,8 +386,7 @@ HB_JPTBL: ; HBIOS initialization ; HB_INIT: - LD HL,2150 ; Smaller receive loop timeout scalar - LD (RCVSCL),HL ; ... to compensate for BIOS overhead + CALL SLOW ; Adjust CPUSPD for HBIOS overhead ; ; Patch SENDR w/ FastPath addresses LD BC,0F801H ; Get CIO func/data adr @@ -412,10 +424,6 @@ HB_INIT: RST 08 JP NZ,APIERR ; handle API error LD (HB_SRFN),HL ; Plug in func adr -; - ; Claim 1 MHz CPU to offset overhead of HBIOS - LD A,1 - LD (CPUSPD),A ; Save it ; LD HL,HB_JPTBL LD DE,HB_LBL @@ -564,14 +572,8 @@ UB_INIT: ; ; TODO: ; - TEST!!! -; - ADJUST RCVSCL? ; - LD HL,3000 ; Smaller receive loop timeout scalar - LD (RCVSCL),HL ; ... to compensate for BIOS overhead -; - ; Claim 1 MHz CPU to offset overhead of HBIOS - LD A,1 - LD (CPUSPD),A ; Save it + CALL SLOW ; Adjust CPUSPD for UBIOS overhead ; LD HL,UB_JPTBL LD DE,UB_LBL @@ -721,9 +723,6 @@ UA_JPTBL: ; UART initialization ; UA_INIT: - LD DE,13000 ; receive loop timeout scalar - LD (RCVSCL),DE ; ... for UART RCVRDY timing -; LD A,L ; get base I/O port address LD (UA_SCP),A ; set port value in SENDR LD (UA_GCP),A ; set port value in GETCHR @@ -842,9 +841,6 @@ UF_JPTBL: ; USB-FIFO initialization ; UF_INIT: - LD DE,12000 ; receive loop timeout scalar - LD (RCVSCL),DE ; ... for UART RCVRDY timing -; LD A,L ; get base I/O port address (data port) LD (UF_SCDP),A ; set data port in SENDR LD (UF_GCDP),A ; set data port in GETCHR/MDIN @@ -863,7 +859,6 @@ UF_INIT: ; Send character on top of stack ; UF_SENDR: - POP AF ; get character to send from stack OUT (0FFH),A ; write to fifo UF_SCDP EQU $-1 ; data port diff --git a/Source/Apps/ZMP/Build.cmd b/Source/Apps/ZMP/Build.cmd index 8df63e1a..44dad869 100644 --- a/Source/Apps/ZMP/Build.cmd +++ b/Source/Apps/ZMP/Build.cmd @@ -7,10 +7,13 @@ set PATH=%TOOLS%\zxcc;%PATH% set CPMDIR80=%TOOLS%/cpm/ -zxcc Z80ASM -ZMO-RW01/H || exit /b -zxcc MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-RW01 || exit /b +:: zxcc Z80ASM -ZMO-RW01/LH || exit /b +zxcc Z80ASM -ZMO-WBW/LH || exit /b +zxcc MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-WBW || exit /b copy /Y zmp.com ..\..\..\Binary\Apps\ || exit /b copy /Y *.ovr ..\..\..\Binary\Apps\ || exit /b +copy /Y zmp.cfg ..\..\..\Binary\Apps\ || exit /b +copy /Y zmp.fon ..\..\..\Binary\Apps\ || exit /b copy /Y *.hlp ..\..\..\Binary\Apps\ || exit /b copy /Y zmp.doc ..\..\..\Binary\Apps\ || exit /b \ No newline at end of file diff --git a/Source/Apps/ZMP/Makefile b/Source/Apps/ZMP/Makefile index 11574dd6..3f64948c 100644 --- a/Source/Apps/ZMP/Makefile +++ b/Source/Apps/ZMP/Makefile @@ -1,10 +1,10 @@ -OBJECTS = zmp.com *.ovr *.hlp zmp.doc +OBJECTS = zmp.com *.ovr zmp.cfg zmp.fon *.hlp zmp.doc DEST = ../../../Binary/Apps TOOLS = ../../../Tools OTHERS = *.hex -NODELETE = *.ovr zmp.doc *.hlp +NODELETE = *.ovr zmp.doc zmp.cfg zmp.fon *.hlp include $(TOOLS)/Makefile.inc -zmp.com: zmo-rw01.hex - $(ZXCC) MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-RW01 +zmp.com: zmo-wbw.hex + $(ZXCC) MLOAD25 -ZMP.COM=ZMPX.COM,ZMO-WBW diff --git a/Source/Apps/ZMP/Notes.txt b/Source/Apps/ZMP/Notes.txt index 76fdf39b..427182dd 100644 --- a/Source/Apps/ZMP/Notes.txt +++ b/Source/Apps/ZMP/Notes.txt @@ -27,4 +27,15 @@ as at Aug 23rd, 2021. Untested on Ron Murrays ZMP15 - Space getting short so messages shortened. ---PMS 8/24/2021 \ No newline at end of file +--PMS 8/24/2021 + +- Refactored overlay to resolve some stack issues. +- Removed support for setport because it didn't make much sense + with ability to specify port on command line. +- Added an equate (pcfg) which controls whether port configuration + is implemented. It is set to false (no port configuration). + because ZMP it is unable to handle many RomWBW serial port settings + (notably the hard-wired 115200 baud of many RCBus systems). You + must now used MODE to configure port before starting ZMP. + +--WBW 1:55 PM 4/16/2025 \ No newline at end of file diff --git a/Source/Apps/ZMP/zmconfig.ovr b/Source/Apps/ZMP/zmconfig.ovr index 556170c11072e28fcfc927d40b06f2ac8d0992b7..9050e2f819c1c9ba1bd784e452d11287f0b647de 100644 GIT binary patch delta 3000 zcma)7eQ*=k5!bWvhlIa`jX7B$>q*#{Q;eMi1SmFTNP(nuOl`31;14V;30aY4)gOhV z!8UE_q^V0ocbc>*32CNGDIYVTp?I2Mnw|^{6&y)3!H~dfpzd{GfEH+Nu#Ked-AMuJ z{87!E-tKRI``+%}+r9pl{+3s{Xa4GzM6E#(TL}GITx=!ut|HPr&j=dn0(E&-T|DaY zU3J;3F7NJYsV4=y{_vILKYAo6Oy;48Wb4Y;v)&1Ibn^HxEF-h}E_l8;i^auO!dE-C z9WkfS;>}z#wQQE?J=Mh993!-Bv*ID}?JDUVne+yd0;+*8Mbd$|>_k~gIIL40p7El? za<4@5y;7!}D6RG?IW@r*(r@#5C2@3>APiYoC`VADDIqpXy8{7Q>X7J*UXD>G3OisR zX-?lRS zS~)_us4{)4O$l_rvIyd0E$e}jI)06^dj0>uenHv(r7csv0dM&Kg^DiXlSK14o7 zWOV|$h`=WZ)Fgmg2n-|8lmJp3Bm4yfym5dpK;Sb3x)Q)_1TG=an{fHz^GYFprYve9 zqO3c1o$iLRB}Lhd%2_w}p`si{ z zlAF7YFN4zMmIFZ+NM)WhiN2#IgBy(S2ZEBgIzte)9SNUW%pZWYsq@GY*pljKJgKte zW;`7iTZ#U02XAuBH&j_youEvGd5X6w7T?qC=^Kd8KOU9u=>n8

uwIdTC1 zm%y29i%#2tZ9J_*q8H&_c6Cx#2dv3?lNjJy&eF%s9r4Q42?Fc6&$=Vq*wIKhXC1Y4 zDB&eS8M;ve?@pfyt$J`g)qz!$GnT|~ZMys zxu(8->nZl5+@SJM zqKyyPYpD(|2*p06*q9VMm3pR{vHvJGB*hM;!6{~5Zb58H`r^YToD6bTVB5ezUiQlE z58G%49*Q3l3BNcJj%i7r=e#`gcRoVPQZBFhR!R0&`sf3j?8^{g#)y!{`{lMj~ zBVPl5zLQ*sv-wYC@A)P@O0Xcx3=kubJ?qCL0B_DJCNIJ9SxvSztr(aPu_tLF_GC>& zqWw6!h(==4U+C5tmVZTqLXboOzRnG#t9)@UT;|Gig$)8;Q)H%V4C04ncvl3l8WxZ~ zs4>{5?R8JQ3SqUF^sBpv3`*6)*C2JtF;HMb++XY+6Z@^&Oo^l9BQYGv$(hQW; zyCsRo;Ed5g4#7W+{B(aKcb@geqD7&8FwQQlz1bA4505oPTf@hiqpp(YqTZ6>sK4ad zXh--~Q?x6rX^w6Uk2h`1*U;U|45#bDl^Y|{6&qftGHiqKA=^gQdw(z_Hey2uX{yF> z+7qgPpUgJ&`5T%2Ha6!SeEyBkfAEQFcqKw7`i`>hF@33K@Meu!&lW}>HLyUW7|RzJ zWu7rfyo=S-$6`ngd8eLdt{K|g#1>94dnBEESru}Iru8<7ez46k86Q1S*~VO@Mh&hx zPsMBY>p2TELX9kNmwE2lHA5lU)%0bqx_H7v6<{{;X&0K=!uv?CHsw}KHYT#T&bmff z=NJpbiscN$p+<~fO-Ih+w=LWc{wGCv+f03}~U9 zgrL4~5&rKiG*pKE&*Q`YY<^^;7W~|b@b|(=BEV(y4jhgi`g+b)mvk;QJ<@BzSz5bM zyb76?d34ytn(wo^Nc?J@i!{%T)D=Yn#SzauoUL~%pw@B*o5EsUf`h8TdYGW!+|vsN z-7k%iD_k}vf5oi5xuPUxSyJI(+NamX+j4yKe9L^bKELmKzBhb_eW!e%zn5AxnYKu4 zHdi^@-43(4s7t3^8R&L*ngi}F=70)nbXsjyPx~f!r^+xZKPW5Z`cPWo>~Wbpo!yFi zPq_}E2Rm$f$S7~~4QFRt_Y3kitupZuZZKg(A{wk_m$Tbx-qhCJCG%ZV_<^2ws3@Jz UA+xKyBRGYL0p`DVwRDvH7XlDy)c^nh delta 2932 zcma)8dr(y872gl!wafc?m*@RBP_7OF7Ji%sM?HRrmMRt-Y$SmIFAn6Hhqb7LLGR0t3OS$gihyAf;t=+4~z z&iS3+Io~2OfVKx^U=~{JpR$VOWa!g&$ zsmpKsY7UT?z7MwgeqfUz#aDn-5~j`E&w3WwrKQUgu!Y3+-mrbW*T){QmIy_rWAF2R zl-6^;G^t*qU#cb{)8wK;z2e~zT2<0nne-}>8dZa^9!c+bWDCllc^yhrhaC;*u&F_! z5e-s^Tqym1gHqE0xJ`~{S{o#BuF&Cd8n-K3P@>5onTA#q0(8AeqTLM~qZSm7!)c$S z-qXnUbgR!JVg;#aA5c|?5R$Kyqie*C0~;m!k!ldqF}tuvPdQ;K$u5(ck+exQ2nCy6 zv_qBYYmG{x1IpqM^MY76WccnS@4^w^4dgPM_igF@47p1Fhj)lWd6H-*bh_#56z4r6 z9;l^25}a0v1~sc0&{G92;R*t=UH}mI5CQ51`VqK>z&bB*0fBJ@^1Q&+UPMGhwtJCV z2wX>Cw->mNzytyZynvs{CEP%u)&mIf2uvbi_X3Fs+(h80*X5;Vr4eV8MQwzeb*)U% ze#r8Thit#PUMx-Au*-o5x$rEF)<{^MgynH}6$McF(8_(PDE+8hvvSuJR&GR5 zuA(AZxr>T&3zh3u?$?TPAC(C!_qw9^nIyRac|Y!FG#<6dZ=*U_$h}AtQM+m7rtvT+ z-DWu1&g}lo79i2HYB3nVC7f)R#9hG-$FcXvM)QP|u-8AG{2mVbn<^bDOCH9n9K0q^4lOtL9rA5E7|}&fvVj6RmRM^dh_)yldT1(G<2xd@Xx%sEFk*5|+E95zB%i zvNX*8klB{SzvSMl_}wEdTNnqMLz;c!i=Zex)|XDJ(5;X{OnYmXKC6Z0x-~3! zMZ=X~BbnXJY%6Q^RmQSOW`DqJ3zGP+EJuV^BYwJJV(?xuw1pldTVzjgg;tP5C_PVJ z!S8&S2s3Cux8uOxwoCMn2yqY-Uf?rjhkfB^Ni=*BUa)T2?&(9B!@;^AvaaQ0?9%d> zu7s}Gm9z0? zJame)MRC|DP9NRzq#0+5;*e3CI=cG_vmlQZ4jL_AZNh1nZ#s@bfh&9W`{& zAx$!Af(B~z;`J(yul-_@v-3P{| z&FwIQ%PeP+dkMc-?y^>_uVlH?ICC@j ze2LF2{5jFTMM>I%Q!&T7<|Ec?aM<_=mg5#4Gcfydng(l{W43uooWX`htgIk)r1r@a z_+sZFv$|;@cTyF?okz`LJ!B^(Cp;Ecjl%Cy>ww0jO`b0PCMhR)xRTkwVzvjl8t1U= zn*2?!T2Bj{d61ecl-;OeIS-w~mCMHE9!+)J8|7-}`2RTPE4?L6vCcWxG0*HPX>z$^ z!~9S84~dx&*Z^D!(VYM(vA6~18R&H2ojze$GhVd+xhbZ4&$bm);mA?~wuG_}SCJ*IBwO mJbHJ^+`3f}?TQY+E-EEn_I8*f%{qE^5YvHAOBx8tTzz= diff --git a/Source/Apps/ZMP/zminit.ovr b/Source/Apps/ZMP/zminit.ovr index c522157a42a82c16f280eef4e6e98fa699b3a9bd..03b6a98a7fb3a5741ffa30abd9fcfdeac846a6a5 100644 GIT binary patch delta 24 fcmZqBXwcYTAk1TEs^D0fu3%(fWUMgRM)(K-QYQwW delta 24 fcmZqBXwcYTAk1TAqTp4UQ>kENU}P}aM)(K-Rrm)4 diff --git a/Source/Apps/ZMP/zmo-wbw.z80 b/Source/Apps/ZMP/zmo-wbw.z80 new file mode 100644 index 00000000..86ac66e2 --- /dev/null +++ b/Source/Apps/ZMP/zmo-wbw.z80 @@ -0,0 +1,844 @@ +;----------------------------------------------------------------------------- +; +; Overlay for ZMP (Z-Modem Program) +; +; Name ZMO-WBW.Z80 +; +; Dated April 14, 2025 +; +; Written by - +; Phil Summers, Wayne Warthen +; +; ROMWBW version using HBIOS and https://github.com/mecparts/zmp +; version of zmodem +; +; - All modem/serial i/o is through RomWBW HBIOS. +; +; - Data bits, stop bits, and parity are determined by HBIOS. +; The ZMP settings will have no effect. Use RomWBW MODE +; command to set serial port config before starting ZMP. +; +; - Timing delay calculations based on HBIOS reported CPU speed. +; +; - The pcfg equate determines whether the overlay will +; implement port initialization. Normally, pcfg will be +; set to false because ZMP does not allow configuring +; many HBIOS speeds (notably the 115200 baud hardwired +; into many RCBus systems). In this case, you must +; configure the modem port using the RomWBW +; MODE command as desired before starting ZMP. +; +; - The modem port is assigned to an HBIOS character unit. By +; default, the modem is assigned to HBIOS character unit 1. +; An alternate HBIOS character unit may be specified as a +; parameter on the command line as a single number. For +; example, the following will assign HBIOS port 3 as the +; ZMP modem port: +; +; ZMP 3 +; +; - The original version of ZMP from Ron Murray allows you to +; select from 2 logical modem ports. This overlay ignores +; any attempt to select ports from within ZMP. The desired +; modem port should be assigned using the command line +; parameter as described above. +; +; - Teraterm users may need to change the ZmodemWinSize value +; to 1024 in the teraterm.ini configuration file. +; +;----------------------------------------------------------------------------- +; +; +; System-dependent code overlay for ZMODEM +; +; +; +; Insert your own code as necessary in this file. Code contained herein +; has been written in Z80 code for use with M80 or SLR. Assemble as follows: +; +; SLR ZMO-xx01/h +; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX +; or +; M80 =ZMO-xx01.Z80 +; RELHEX ZMO-xx01 +; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX +; +; +; (Don't use L80 without changing the source for assembly as a +; cseg file.) +; +;----------------------------------------------------------------------------- +; +; +; Notes on modifying this file: +; +; C requires that functions do not change either index register (IX or IY). +; If your overlay requires either of these to be changed, ensure they are +; restored to the original values on return. +; Since collecting parameters from C functions can be tricky, only change +; the parts marked 'Insert your own code here'. Do NOT modify the jump +; table at the start. Do NOT modify the entry/exit sections of each +; function. Do NOT pass 'GO'. Do NOT collect $200. +; Apart from defining modem functions, this file also defines terminal +; characteristics. Examples provided are for ADM-3A (with a few of my own +; additions). Modify to suit your own terminal. An inline print routine +; is provided for printing strings in the usual way: usage is +; +; call print +; db 'required string',0 +; +;----------------------------------------------------------------------------- +; +; +; Don't forget to set your clock speed at the clkspd variable. +; +; +; If you find your overlay exceeds the maximum size (currently 0400h), +; you will have to contact me for another version. If too many people need +; to do it, we haven't allowed enough room. +; +; Ron Murray 15/8/88 +; +; +; +;--------------------------------------------------------------------------- + +false equ 0 +true equ not false + +;------------------------------------------------------------------------------ + +; User-set variables: + +debug equ false ; to allow debugging of overlay with Z8E etc. +clkspd equ 8 ; Processor clock speed in MHz +pcfg equ false ; Allow ZMP to configure port + +; +;Set the following two equates to the drive and user area which will contain +; ZMP's .OVR files, .CFG file, .FON file and .HLP file. Set both to zero +; (null) to locate them on the drive from which ZMP was invoked. + +overdrive equ 0 ; Drive to find overlay files on ('A'-'P') +overuser equ 0 ; User area to find files + +;------------------------------------------------------------------------------ + + +; NOT user-set variables + +userdef equ 0145h ; origin of this overlay + ; This address should not change with + ; subsequent revisions. +mspeed equ 03ch ; location of current baud rate. +ovsize equ 0400h ; max size of this overlay + +fcb equ 05ch ; primary command line CP/M fcb + + .z80 ; use z80 code + aseg ; absolute + + if debug + org 100h ; so you can debug it with cebug, zsid, etc + else + org userdef + endif + + +esc equ 1bh +ctrlq equ 11h +cr equ 0dh +lf equ 0ah +bdos equ 5 + + +codebgn equ $ + +;Jump table for the overlay: do NOT change this +jump_tab: + jp scrnpr ; screen print + jp mrd ; modem read with timeout + jp mchin ; get a character from modem + jp mchout ; send a character to the modem + jp mordy ; test for tx buffer empty + jp mirdy ; test for character received + jp sndbrk ; send break + jp cursadd ; cursor addressing + jp cls ; clear screen + jp invon ; inverse video on + jp invoff ; inverse video off + jp hide ; hide cursor + jp show ; show cursor + jp savecu ; save cursor position + jp rescu ; restore cursor position + jp mint ; service modem interrupt + jp invec ; initialise interrupt vectors + jp dinvec ; de-initialise interrupt vectors + jp mdmerr ; test uart flags for error + jp dtron ; turn DTR on + jp dtroff ; turn DTR OFF + jp init ; initialise uart + jp wait ; wait seconds + jp mswait ; wait milliseconds + jp userin ; user-defined entry routine + jp userout ; user-defined exit routine + jp getvars ; get system variables + jp setport ; set port (0 or 1) + +; Spare jumps for compatibility with future versions + jp spare ; spare for later use + jp spare ; spare for later use + jp spare ; spare for later use + jp spare ; spare for later use + jp spare ; spare for later use + jp spare ; spare for later use + +; Local storage + +hbunit db 1 ; Active HBIOS unit for modem I/O +cpumhz db clkspd ; CPU clock speed in MHz + +; +; Main code starts here +; +;Screen print function +scrnpr: + ; <== Insert your own code here + call print + db 'Screen print not supported.',cr,lf,0 + ; <== End of your own code +spare: + ret + + +; User-defined entry routine: leave empty if not needed +userin: + push bc + push de + push hl + + call print + db cr,lf,'ZMP Overlay for RomWBW HBIOS v1.0',cr,lf,0 + + ; Scan and parse default FCB to initialize HBIOS unit if + ; specified. + ld a,(fcb + 1) ; get parm from fcb + cp ' ' ; anything there? + jr z,userin1 ; if empty, done + sub '0' ; ASCII to binary + jr c,parmerr ; less than 0, parm error + cp 10 ; >= 10? + jr nc,parmerr ; greater than 9, parm error + ld (hbunit),a ; save it + +userin1: + call showcom ; show com port info + + ; check that unit is actually available in HBIOS + ld bc,0f800h ; get HBIOS char unit count + rst 8 ; do it + ld a,(hbunit) ; get active modem unit + cp e ; compare to units available + jr nc,porterr ; unit too high, port error + + if pcfg + + ; Force port initialization by setting an invalid + ; baud rate (mspeed). + ; speed to an arbitrary value of 8 (9600 baud). + ld a,-1 + ld (mspeed),a + + else + + ; We don't support port configuration. Here we set the modem + ; speed to an arbitrary value of 8 (9600 baud). + ld a,8 + ld (mspeed),a + + endif + + + ld bc,0f8f0h ; HBIOS func get CPU info + rst 08 ; do it, l = CPU speed in MHz + ld a,l ; to accum + ld (cpumhz),a ; and save it for wait loop + + ld hl,2 + call waithls + + pop hl + pop de + pop bc + ret + +parmerr: + ; Handle a bad parameter + call print ; print error message + db cr,lf,'ZMP parameter error!',cr,lf,0 + rst 0 ; bail out to OS + +porterr: + ; Handle a bad port + call print ; print error message + db cr,lf,'Invalid HBIOS unit for ZMP Modem port!',cr,lf,0 + rst 0 ; bail out to OS + +showcom: + ; Display the HBIOS unit to be used for the ZMP Modem + call print + db cr,lf,'ZMP Modem on HBIOS Unit #',0 + ld a,(hbunit) + add a,'0' + call cout + call print + db cr,lf,0 + +; User-defined exit routine: leave empty if not needed +userout: + ret + +;Get a character from the modem: return in HL +mchin: + push bc + + ; <== Insert your own code here + ld a,(hbunit) + ld c,a + ld b,00h + rst 08 + ld a,e + ; <== End of your own code + + ld l,a ; put in HL + ld h,0 + or a ; set/clear Z + pop bc + ret + +;Send a character to the modem +mchout: + ld hl,2 ; get the character + add hl,sp + ld a,(hl) + + ; <== Insert your own code here + push bc + ld e,a + ld a,(hbunit) + ld c,a + ld b,01h + rst 08 + pop bc + ; <== End of your own code + + ret ; done + +;Test for output ready: return TRUE (1) in HL if ok +mordy: + ; <== Insert your own code here + push bc + ld a,(hbunit) + ld c,a + ld b,03h + rst 08 + ld h,0 + ld l,a + pop bc + ; <== End of your own code + + ld a,l ; set/clear Z + or a + ret + +;Test for character at modem: return TRUE (1) in HL if so +mirdy: + ; <== Insert your own code here + push bc + ld a,(hbunit) + ld c,a + ld b,02h + rst 08 + ld h,0 + ld l,a + pop bc + ; <== End of your own code + + ld a,l ; set/clear Z + or a + ret + +;Send a break to the modem: leave empty if your system can't do it +sndbrk: + ; <== Insert your own code here + ld hl,300 ; wait 300 mS + call waithlms + ; <== End of your own code + + ret +; +;Test UART flags for error: return TRUE (1) in HL if error. +mdmerr: + ; <== Insert your own code here + xor a ; not implemented + ; <== End of your own code + + ld a,l ; set/clear Z + or a + ret + + + +;Turn DTR ON +dtron: + ; <== Insert your own code here + + ; <== End of your own code + ret + + + +;Turn DTR OFF +dtroff: + ; <== Insert your own code here + + + ; <== End of your own code + ret + + + +;Initialise the uart +init: + ld hl,2 ; get parameters + add hl,sp + ex de,hl + call getparm ; in HL + ld (brate),hl ; baud rate + call getparm + ld (parity),hl ; parity + call getparm + ld (data),hl ; data bits (BINARY 7 or 8) + call getparm + ld (stop),hl ; stop bits (BINARY 1 or 2) + + ; <== Insert your own code here + ; using values below + ; don't forget to load mspeed with the + ; current brate value if the new rate is + ; valid. See table of values below. + + push bc + + ; If pcfg is true, attempt to initialize the active + ; HBIOS unit. If false, initialization if bypassed with + ; the assumption that the RomWBW MODE command was used + ; to initialize the port priot to running ZMP. + + if pcfg + + call print + db 'Initializing device: ',0 + call diport + + ld a,(hbunit) ; get device type + ld c,a + ld b,06h + rst 08 + or a ; check if valid + jr nz,initerr + + ld a,(brate) ; get baud rate to set + ld c,a + ld b,0 + ld hl,baudtbl + add hl,bc + ld a,(hl) ; convert to encoded hbios + cp a,-1 + jr z,initerr + + push af + ld a,(hbunit) ; get line characteristics + ld c,a + ld b,05h + rst 08 + ld a,d ; mask out exisitng + and 11100000b ; replace with rate + ld d,a + pop af + or d + ld d,a + + ld b,04h ; set new + ld a,(hbunit) ; speed + ld c,a + rst 08 + or a + jr nz,initerr + + ld a,(brate) ; load mspeed with the current brate value if + ld (mspeed),a ; the new rate is valid. See table of values below. + + call print + db lf,lf,'Initization completed, device: ',0 + call diport + + jr init_z + +initerr:call print + db lf,lf,'Initization failed, device: ',0 + call diport + + jr init_z + +diport: ld a,(hbunit) ; Display port +diport1:add a,'0' + call cout + call print + db cr,lf,0 + ld hl,2 + call waithls + ret + + else + + ;call print + ;db cr,lf,'Modem port initialization...',0 + ;ld hl,2 + ;call waithls + + ld b,05h ; HBIOS port reset function + ld a,(hbunit) ; get active modem port + ld c,a ; and put in accum + rst 8 ; reset port + or a ; check result + jr nz,init1 ; if error, handle it + ld a,8 ; dummy value for speed + ld (mspeed),a ; save it + jr init_z ; done + +init1: + ; Handle error return from initialization + call print + db cr,lf,'Modem port initialization failed!',cr,lf,0 + ld hl,2 + call waithls + + jr init_z + + endif + +init_z: + pop bc + + ; <== End of your own code + + ret +;-------------------------------------------------------------------------- + +stop: dw 1 ; stop bits +parity: dw 'N' ; parity +data: dw 8 ; data bits +brate: dw 7 ; baud rate: + +;-------------------------------------------------------------------------- +; +;Values of brate for each baud rate +; +; hb encode baud rate brate +; +baudtbl: + db -1 ; 110 0 not supported + db 2 ; 300 1 + db 17 ; 450 2 + db 3 ; 600 3 + db -1 ; 710 4 not supported + db 4 ; 1200 5 + db 5 ; 2400 6 + db 6 ; 4800 7 + db 7 ; 9600 8 + db 8 ; 19200 9 + db 9 ; 38400 10 + db 24 ; 57600 11 + db 10 ; 76800 12 +; +; Set the port. ZMP supplies either 0 or 1 as a parameter. You're on your +; own here -- your system is bound to be different from any other! You may +; implement a software switch on all the modem-dependent routines, or perhaps +; you can have one or two centralised routines for accessing the UARTs and +; modify the code from this routine to select one or the other. (Who said +; there was anything wrong with self-modifying code?). If you have only one +; UART port, or if you don't want to go through all the hassles, just have +; this routine returning with no changes made. Note that ZMP calls this +; routine with both values for the port on initialisation. +; +; Only originl ZMP calls setport. MECPARTS variant does not. +; +; We ignore this call. Since we are using a command line parameter +; to specify the desired modem port, it makes no sense. +; +setport: + ld hl,2 ; get port number + add hl,sp + ex de,hl + call getparm ; in HL (values are 0 and 1) + + ; <== Insert your own code here + + ; <== End of your own code + + ret + + +; +;**************************************************************************** +;Video terminal sequences: these are for VT-100: Modify as you wish +;Cursor addressing: +cursadd: + ld hl,2 ; get parameters + add hl,sp + ex de,hl + call getparm ; in HL + inc hl + ld (row),hl ; row + call getparm + inc hl + ld (col),hl ; column +; + push bc + + call print + db esc,'[',0 + ld a,(row) ; row first + call cursconv + ld a,';' + call cout + ld a,(col) ; same for column + call cursconv + ld a,'H' + call cout + + pop bc + + ret +; +cursconv: + ld b,a + xor a +ca1: add a,1 + daa + djnz ca1 + ld (num),a + and 0f0h + jr z,ca2 + srl a + srl a + srl a + srl a + or '0' + call cout +ca2: ld a,(num) + and 0fh + or '0' + call cout + ret +; +row: ds 2 ; row +col: ds 2 ; column +num: ds 1 +; +;Clear screen: +cls: + call print + db esc,"[H",esc,"[2J",0 + ret +; +;Inverse video on: +invon: + call print + db esc,"[7m",0 + ret +; +;Inverse video off: +invoff: + call print + db esc,"[m",0 + ret +; +;Turn off cursor: +hide: + call print + db esc,'[?25l',0 + ret +; +;Turn on cursor: +show: + call print + db esc,'[?25h',0 + ret +; +;Save cursor position: +savecu: + call print + db esc,'[7',0 + ret +; +;Restore cursor position: +rescu: + call print + db esc,'[8',0 + ret + +;**************************************************************************** + +;Service modem interrupt: +mint: + ret ; handled in HBIOS + +;Initialise interrupt vectors: +invec: + ret ; ditto + +;De-initialise interrupt vectors: +dinvec: + ret ; ditto + +;****************** End of user-defined code ******************************** +; Do not change anything below here. + +;Modem character test for 100 ms +mrd: + push bc ; save bc + ld bc,100 ; set limit +mrd1: + call mirdy ; char at modem? + jr nz,mrd2 ; yes, exit + ld hl,1 ; else wait 1ms + call waithlms + dec bc ; loop till done + ld a,b + or c + jr nz,mrd1 + ld hl,0 ; none there, result=0 + xor a +mrd2: + pop bc + ret + +; Inline print routine: destroys A and HL + +print: + ex (sp),hl ; get address of string +ploop: + ld a,(hl) ; get next + inc hl ; bump pointer + or a ; done if zero + jr z,pdone + call cout ; else print + jr ploop ; and loop +pdone: + ex (sp),hl ; restore return address + ret ; and quit + +; +;Output a character in A to the console +; +cout: + push bc ; save regs + push de + push hl + ld e,a ; character to E + ld c,2 + call bdos ; print it + pop hl + pop de + pop bc + ret + + +;Wait seconds +wait: + ld hl,2 + add hl,sp + ex de,hl ; get delay size + call getparm + ; fall thru to.. +;Wait seconds in HL +waithls: + push hl ; save loop control + ld hl,1000 ; 1000ms = 1 second + call waithlms + pop hl ; restore loop control + dec hl + ld a,h + or l + jr nz,waithls + ret + + + +;Wait milliseconds +mswait: + ld hl,2 + add hl,sp + ex de,hl ; get delay size + call getparm + ; fall thru to.. +;Wait milliseconds in HL +waithlms: + ; burn 1000us (1ms) + ld a,(cpumhz) + ld e,a +hlms1: + ; burn 1000 t-states + ; 50 * 20 = 1000 t-states + ld d,50 +hlms2: + nop ; 4 + dec d ; 4 + jr nz,hlms2 ; 12 20 + + dec e + jr nz,hlms1 + + dec hl + ld a,h + or l + jr nz,waithlms + + ret + + + + + + + + +;Get next parameter from (de) into hl +getparm: + ex de,hl ; get address into hl + ld e,(hl) ; get lo + inc hl + ld d,(hl) ; then hi + inc hl ; bump for next + ex de,hl ; result in hl, address still in de + ret + +;Get address of user-defined variables + +getvars: + ld hl,uservars + ret + +uservars: + dw overdrive ; .OVR etc. drive/user + dw overuser + + + if ($ - codebgn) gt ovsize +toobig: jp errval ; Overlay too large! + endif + + end + \ No newline at end of file diff --git a/Source/Apps/ZMP/zmp-blnk.z80 b/Source/Apps/ZMP/zmp-blnk.z80 index 9cd1ba0b..241ce5aa 100644 --- a/Source/Apps/ZMP/zmp-blnk.z80 +++ b/Source/Apps/ZMP/zmp-blnk.z80 @@ -26,11 +26,11 @@ ; has been written in Z80 code for use with M80 or SLR. Assemble as follows: ; ; SLR ZMO-xx01/h -; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX +; MLOAD ZMP.COM=ZMPX.COM,ZMO-xx01.HEX ; or ; M80 =ZMO-xx01.Z80 ; RELHEX ZMO-xx01 -; MLOAD ZMP.COM=ZMODEM.COM,ZMO-xx01.HEX +; MLOAD ZMP.COM=ZMPX.COM,ZMO-xx01.HEX ; ; ; (Don't use L80 without changing the source for assembly as a @@ -570,4 +570,3 @@ toobig: jp errval ; Overlay too large! endif end - \ No newline at end of file diff --git a/Source/Apps/ZMP/zmp15+-.new b/Source/Apps/ZMP/zmp15+-.new index 07e1c277..41b50e61 100644 --- a/Source/Apps/ZMP/zmp15+-.new +++ b/Source/Apps/ZMP/zmp15+-.new @@ -12,6 +12,10 @@ awhile (some, a few decades): * In keyboard macros, ! translates to a CR now, not CR/LF. * \ escapes ! and ~ so those literal characters can be used in keyboard macros. +* Waits in keyboard macros now allow characters from the modem to + be handled. +* Keys in keyboard macros now have 25ms waits between them as to + not overrun the remove system. * Long distance access code has been removed. * Quick dialing letters limited to A-T. @@ -23,5 +27,5 @@ version in ZMP15.LBR. So, to quote the original author, new one with the config option. There have again been changes to the format of this file." -June 7, 2021 - +August 15, 2023 + diff --git a/Source/Apps/ZMP/zmterm.ovr b/Source/Apps/ZMP/zmterm.ovr index ef5b3324280878252c2998a291dedcb7bcb27b13..baec3d871a9cbfcb093590d12e5acbd66c4ae00e 100644 GIT binary patch delta 6001 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 delta 5925 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 diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index ae6308ff..01da54d2 100644 --- a/Source/Doc/Applications.md +++ b/Source/Doc/Applications.md @@ -2655,15 +2655,25 @@ files between systems using a serial port. | `XM LK `*` `* | `XM R `*``* -`S`: Send a file -`L`: Send a file from a library -`R`: Receive a file -`K`: Use 1K blocksize for transfer +The following may be added to the action codes: +| `S`: Send a file +| `L`: Send a file from a library +| `R`: Receive a file +| `K`: Use 1K blocksize (send operations) +| `C`: Force use of checksum (receive operations) +| `X`: Force 128-byte protocol (receive operations) +| `0`-`9`: Specifies HBIOS character unit for transfers *``* is the name of a file to send or receive *``* is the name of a library (.lbr) to extract a file to send +For example, the following command will receive a file +using checksums on HBIOS character unit 3 and will name the +received file `MYFILE.TXT`. + +`XM RC3 MYFILE.TXT` + #### Usage To transfer a file from your host computer to your RomWBW computer, do @@ -2689,9 +2699,10 @@ emulation software for specific instructions on how to use XModem. #### Notes -The XModem adaptation that comes with RomWBW will automatically use -the primary character device unit (character device unit 0) for the -file transfer. +The XModem adaptation that comes with RomWBW will default to using +the current HBIOS console port for transfers. Note that if you +change your console port at the OS level (e.g., STAT CON:=UC1:), +this does not change the HBIOS console. `XM` attempts to determine the best way to drive the serial port based on your hardware configuration. When possible, it will bypass the @@ -2732,6 +2743,9 @@ The source code is provided in the RomWBW distribution. An adaptation of Robert Kramer's Remote CP/M File Transfer Program with support for XModem and YModem transfers. +**NOTE**: ZMD does not do ZModem transfers. The Z in ZMD refers +to Z-System compatibility. + #### Syntax `ZMD` *\\\* [*\*] @@ -2755,10 +2769,43 @@ the RomWBW Character Unit to use for the file transfer. #### Usage +To transfer a file from your host computer to your RomWBW computer, do +the following: + +1. Enter one of the `ZMD` receive commands specifying the name you want +to give to the received file (no filename required for ZModem transfers). + +2. On your host computer select a file to send and initiate an XModem or +YModem send operation. + +To transfer a file from your RomWBW computer to your host computer, do +the following: + +1. Enter one of the `ZMD` send commands specifying the name of the file +to be sent. + +2. On your host computer, specify the name to assign to the received +file and initiate an XModem or YModem receive operation. + +Please refer to the documentation of your host computer's terminal +emulation software for specific instructions on how to use XModem. + #### Notes -If no *\* is specified, ZMD will use the current HBIOS -console for the file transfer. +The ZMP adaptation that comes with RomWBW will default to using +the current HBIOS console port for transfers. Note that if you +change your console port at the OS level (e.g., STAT CON:=UC1:), +this does not change the HBIOS console. + +`ZMP` attempts to determine the best way to drive the serial port based +on your hardware configuration. When possible, it will bypass the +HBIOS for faster operation. However, in many cases, it will use HBIOS +so that flow control can be used. + +`ZMP` is dependent on a reliable communications channel. You must +ensure that the serial port can be serviced fast enough by either +using a baud rate that is low enough or ensuring that hardware flow +control is fully functional (end to end). #### Etymology @@ -2774,25 +2821,61 @@ uses the RomWBW HBIOS serial API. | ROM-based |No | | Disk-based |Yes| -#### Syntax - -#### Usage - -#### Notes - -#### Etymology - - - - - +`ZMP` is a terminal program for interacting with a modem attached to +your system. It includes X/Y/ZModem file transfer protocols. An +actual modem is not required, but you must have a port for ZMP to use +that is independent of the console running `ZMP`. +#### Syntax +`ZMD` *[\]* +*\* can specify a single digit (0-9) indicating +the RomWBW Character Unit to use for the modem port. +#### Usage +Refer to the file `ZMP.DOC` found on all disk images that include +the `ZMP` application. +#### Notes +`ZMP` requires access to multiple overlay and configuration files +to run. It will look for these on the default driver and user area. +Depending the operating system used, you may be able to set up a +search path and locate these files in other locations. The files +used by `ZMP` are: + +- `ZMP.HLP` +- `ZMP.DOC` +- `ZMP.CFG` +- `ZMP.FON` +- `ZMXFER.OVR` +- `ZMTERM.OVR` +- `ZMINIT.OVR` +- `ZMCONFIG.OVR` + +The `ZMP` console is always the active OS console. +If no *\* is specified on the command line, `ZMP` will +default to using HBIOS Character Unit 1 as the modem port. Take care +to avoid using the same HBIOS Character Unit as both the console and +the modem or various strangeness will occur. + +`ZMP` is a full screen application and is configured to use +ANSI/VT-100 screen control. + +`ZMP` does not support the range of port configurations provided by +RomWBW. The RomWBW adaptation of `ZMP` ignores the port configuration +options within `ZMP`. Instead, you should configure the HBIOS Character +Unit using the RomWBW MODE command before launching `ZMP`. + +`ZMP` is written in C. As a result, file transfers will be noticeably +slower than other assembly language file transfer tools. +#### Etymology +ZMP was produced by Ron Murray and was based on HMODEM II. Wayne +Hortensius updated the source to compile with the latest version +of Hi-Tech C and implemented a few enhancements. +The RomWBW overlay was developed by Phil Summers. \ No newline at end of file diff --git a/Source/Images/d_cpm22/ReadMe.txt b/Source/Images/d_cpm22/ReadMe.txt index d3855964..79ff5bd6 100644 --- a/Source/Images/d_cpm22/ReadMe.txt +++ b/Source/Images/d_cpm22/ReadMe.txt @@ -88,6 +88,8 @@ XM.COM - XModem file transfer application ZMP.COM - ZModem communications program (requires dedicated comm port) ZMP.DOC - Documentation for ZMP ZMP.HLP - Help file for ZMP +ZMP.CFG - Configuration file for ZMP +ZMP.FON - Phone book for ZMP ZMXFER.OVR - Overlay file for ZMP ZMTERM.OVR - Overlay file for ZMP ZMINIT.OVR - Overlay file for ZMP diff --git a/Source/Images/d_qpm/ReadMe.txt b/Source/Images/d_qpm/ReadMe.txt index 7765bc86..459ee7f1 100644 --- a/Source/Images/d_qpm/ReadMe.txt +++ b/Source/Images/d_qpm/ReadMe.txt @@ -129,6 +129,8 @@ XM.COM - XModem file transfer application ZMP.COM - ZModem communications program (requires dedicated comm port) ZMP.DOC - Documentation for ZMP ZMP.HLP - Help file for ZMP +ZMP.CFG - Configuration file for ZMP +ZMP.FON - Phone book for ZMP ZMXFER.OVR - Overlay file for ZMP ZMTERM.OVR - Overlay file for ZMP ZMINIT.OVR - Overlay file for ZMP diff --git a/Source/Images/d_zsdos/ReadMe.txt b/Source/Images/d_zsdos/ReadMe.txt index 02be339b..1103df6e 100644 --- a/Source/Images/d_zsdos/ReadMe.txt +++ b/Source/Images/d_zsdos/ReadMe.txt @@ -229,6 +229,8 @@ XM.COM - XModem file transfer application ZMP.COM - ZModem communications program (requires dedicated comm port) ZMP.DOC - Documentation for ZMP ZMP.HLP - Help file for ZMP +ZMP.CFG - Configuration file for ZMP +ZMP.FON - Phone book for ZMP ZMXFER.OVR - Overlay file for ZMP ZMTERM.OVR - Overlay file for ZMP ZMINIT.OVR - Overlay file for ZMP diff --git a/Source/Images/fd_bp.txt b/Source/Images/fd_bp.txt index dad5bc77..d09f3fdd 100644 --- a/Source/Images/fd_bp.txt +++ b/Source/Images/fd_bp.txt @@ -32,7 +32,9 @@ ../../Binary/Apps/xm.com 15: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: -../../Binary/Apps/zmp.doc 15: +../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmp.cfg 15: +../../Binary/Apps/zmp.fon 15: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: diff --git a/Source/Images/fd_cpm22.txt b/Source/Images/fd_cpm22.txt index bd240422..97ea8c61 100644 --- a/Source/Images/fd_cpm22.txt +++ b/Source/Images/fd_cpm22.txt @@ -27,6 +27,8 @@ d_cpm22/ReadMe.txt 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/fd_cpm3.txt b/Source/Images/fd_cpm3.txt index 9131bf5b..aea0d879 100644 --- a/Source/Images/fd_cpm3.txt +++ b/Source/Images/fd_cpm3.txt @@ -46,6 +46,8 @@ d_cpm3/ReadMe.txt 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/fd_qpm.txt b/Source/Images/fd_qpm.txt index 067675a9..53134fe9 100644 --- a/Source/Images/fd_qpm.txt +++ b/Source/Images/fd_qpm.txt @@ -31,6 +31,8 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/fd_zsdos.txt b/Source/Images/fd_zsdos.txt index c673821d..00160939 100644 --- a/Source/Images/fd_zsdos.txt +++ b/Source/Images/fd_zsdos.txt @@ -31,6 +31,8 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/hd_bp.txt b/Source/Images/hd_bp.txt index 021bd1c4..4252dae2 100644 --- a/Source/Images/hd_bp.txt +++ b/Source/Images/hd_bp.txt @@ -36,6 +36,8 @@ Common/Z3/u15/ZEX.COM 0: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: ../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmp.cfg 15: +../../Binary/Apps/zmp.fon 15: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: diff --git a/Source/Images/hd_cpm22.txt b/Source/Images/hd_cpm22.txt index 99ab40c2..c6a7faf6 100644 --- a/Source/Images/hd_cpm22.txt +++ b/Source/Images/hd_cpm22.txt @@ -31,6 +31,8 @@ d_cpm22/ReadMe.txt 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/hd_cpm3.txt b/Source/Images/hd_cpm3.txt index 010417c3..192f23e7 100644 --- a/Source/Images/hd_cpm3.txt +++ b/Source/Images/hd_cpm3.txt @@ -50,6 +50,8 @@ d_cpm3/ReadMe.txt 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/hd_nzcom.txt b/Source/Images/hd_nzcom.txt index cf97e497..ad9e64fb 100644 --- a/Source/Images/hd_nzcom.txt +++ b/Source/Images/hd_nzcom.txt @@ -46,6 +46,8 @@ d_zsdos/u0/*.DAT 15: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: ../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmp.cfg 15: +../../Binary/Apps/zmp.fon 15: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: diff --git a/Source/Images/hd_qpm.txt b/Source/Images/hd_qpm.txt index 3aad64c4..79c687d6 100644 --- a/Source/Images/hd_qpm.txt +++ b/Source/Images/hd_qpm.txt @@ -35,6 +35,8 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: diff --git a/Source/Images/hd_z3plus.txt b/Source/Images/hd_z3plus.txt index 1dd901ca..b3083639 100644 --- a/Source/Images/hd_z3plus.txt +++ b/Source/Images/hd_z3plus.txt @@ -57,6 +57,8 @@ d_cpm3/u0/HELP.HLP 0: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: ../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmp.cfg 15: +../../Binary/Apps/zmp.fon 15: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: diff --git a/Source/Images/hd_zpm3.txt b/Source/Images/hd_zpm3.txt index f6f8ab47..5d4fff6e 100644 --- a/Source/Images/hd_zpm3.txt +++ b/Source/Images/hd_zpm3.txt @@ -56,6 +56,8 @@ d_cpm3/u0/HELP.HLP 0: ../../Binary/Apps/zmp.com 15: ../../Binary/Apps/zmp.hlp 15: ../../Binary/Apps/zmp.doc 10: +../../Binary/Apps/zmp.cfg 15: +../../Binary/Apps/zmp.fon 15: ../../Binary/Apps/zmxfer.ovr 15: ../../Binary/Apps/zmterm.ovr 15: ../../Binary/Apps/zminit.ovr 15: diff --git a/Source/Images/hd_zsdos.txt b/Source/Images/hd_zsdos.txt index 9babd296..2b8de8a0 100644 --- a/Source/Images/hd_zsdos.txt +++ b/Source/Images/hd_zsdos.txt @@ -35,6 +35,8 @@ d_cpm22/u0/*.* 0: ../../Binary/Apps/zmp.com 0: ../../Binary/Apps/zmp.hlp 0: ../../Binary/Apps/zmp.doc 0: +../../Binary/Apps/zmp.cfg 0: +../../Binary/Apps/zmp.fon 0: ../../Binary/Apps/zmxfer.ovr 0: ../../Binary/Apps/zmterm.ovr 0: ../../Binary/Apps/zminit.ovr 0: