From 9165b44bc79eb40f020d83602115deb130a1a9d5 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Sun, 10 Mar 2019 19:51:24 -0400 Subject: [PATCH] add pete's house interior; implement memory checkpointing / rollback --- blart.map | 0 boot.jim | Bin 1243 -> 1243 bytes defs.jim | Bin 1502 -> 1628 bytes defs.jor | 11 ++++++++++- entity.jim | Bin 849 -> 909 bytes entity.jor | 5 ++++- footer.jim | Bin 1073 -> 1073 bytes forp.exe | Bin 42985 -> 0 bytes game.exe | Bin 117571 -> 117952 bytes game.jim | Bin 1652 -> 1754 bytes game.jor | 21 +++++++++++++++------ game.prj | Bin 5316 -> 5316 bytes gameboot.jor | 11 +++++++++-- input.jim | Bin 372 -> 372 bytes jorth.c | 36 ++++++++++++++++++++++++++++++++++++ map.jim | Bin 664 -> 749 bytes map.jor | 42 ++++++++++++++++++++++++++++-------------- pete.jim | Bin 259 -> 241 bytes pete.jor | 8 +++++--- pete.map | Bin 524 -> 524 bytes petehous.jim | Bin 0 -> 107 bytes petehous.jor | 14 ++++++++++++++ petehous.map | Bin 0 -> 368 bytes tiles.tif | Bin 4078 -> 4078 bytes timer.jim | Bin 438 -> 438 bytes 25 files changed, 121 insertions(+), 27 deletions(-) delete mode 100755 blart.map delete mode 100755 forp.exe create mode 100755 petehous.jim create mode 100755 petehous.jor create mode 100755 petehous.map diff --git a/blart.map b/blart.map deleted file mode 100755 index e69de29..0000000 diff --git a/boot.jim b/boot.jim index 27ecbc023f31d6e9ebe4b1854c9bd8fbdd9f1fc2..819658e27d0ff9abeb21a93d3f82c91dda62fc74 100755 GIT binary patch literal 1243 zcmY*YO=whC6h3q3+}wBXGbCahTr}7j7wIgrFd`x$hGG>h1~(E2Ewz)(oA`9{-ecyC zDKW$!nslLs;G!#`Ex4>dNXe>nKnh(9-Bg2rG*E*VC{31ZswT1q7B)cEMiBelLn@lBN1TiB z30baX2GwA887oeLUpZN*`f2XwMs&?l;0IMd@MdlNb6an-=>=kEQ<~U+RD#zjM_+*l zU4SL$64VPsjEZG^;9PZD_{cHhS_bfUr;v4#(-g9^RQ{ziAeqfs+koTh3n*2+joIG>?CWe2z1E7)X5jxg^6$~qE&2^yDos1{*%t@7T(r5{FTs6ecYl* zCwPG(-b=J4|E5;|Cvo@nB6V-A=Wv)O7CVx-t^fc4 literal 1243 zcmY*YU1(HS5S~3dXV1@7QlTzVigdToG?gF?_)uz6thF_Tl+quIw4vN2H}Tlbz02<1 zhGHICYxGI#4}B;IMNkBxeJTp6uze5<+4`acN?P(#$dgKlpePq~=G?@kTrQlMZ@!st zX3lw7`XTrgZsUI?gz>0WgV&xH@USGk(S*xApzetbQ5B)Lub0q1C@X~CFJd+9ej0-AL?z685f0PlV|JTkKHo#8#7>?7Z|@E*bA4a&Jg{aMKHb27(jWbXCmVRaPT zB$;ho#6D?78v*)chTo`T5Y?KIhdKo1fE5+|r)UMJ6%u%cg3?1#OhGx2;Z-#UW6_k$ zeHkv0J#)y_@DY{i#;q;+l)2SjBAV+4}}0Gw$fK#8}mU zWg6W@y_tlhQKR07(wU?&L3uw@CyNKfmf{>`c)_d|I{2dD=GJsiH#Tlfk43ys&bix+ zQls0=b6va@e-$S)JpOHR4M)veuuYCpCqpKH@npJAt5`30K>#iNdxNHfXH6M@BkQyo z@YcsB!*OCfljuv{qE_#cxT~f~QJ095;g7~bEeR+3U0iSRuutJG`YxIw9Kur+@cVi| zGi|tdiUQjBOJRYy%>LIP#7R;ocZQFQgo$W!z0{M!{Sse0VR;56tLd%~N~@z_P|Jev zNYz@VxY(sG;ieh5O~4zr1WC-oV7^D#kBDARnyGiNgi*WSa&A8Dw5#+oLTh{@ZaSRe z5;x_>XGN8op0_{CWpP}x@O-ZwT(E#vtkAnz7G?3ec%L?VjPf+YucM7Tc`Yl-ctsA1 zEAnOfnN`6Rf9hHlT%u0@vRk`4`rTxItDYtkVd~q)o)T?6cq|9y8GDfK*xNy_g;)7O zuv%zi0W#baZ0fG=aKhJRP#&RSUh|W8@*oxZFi^fwjvtW~41?G@LRx|L$YlO*83KGI b*g{jd9^~4?pn{L(h+HBSvF+du(!tcHf$mX- diff --git a/defs.jim b/defs.jim index 7ed7c39ab05c38ed1e03814bbbac0005da1ca030..58c6fd0adbc874fbff74dfec341cef7865efa6b9 100755 GIT binary patch literal 1628 zcmZ8hZ)h8J7=Cm2UXmtvm%AddAf2`qCAKTLS_>`h1{DP@7M$$U=*W`mdbG`zBwZU@ zCjJ?evWXPLqWDDy`e6(|?ECeLB1A!&)i0Ha{m`nPrub);!}`2;$vPw?`Q7tA@89SB z-Q%fS)Ykr5{2+ZZ9j8jQ=q*-Bw|xGXJ>FFVJ^;MrR%fOc0Iz6+>}vO7D_WMva0>X} zG}Bnw6Q4frj{!an__-F`GF;%uJjPw1oYNIL zHHtukh&-ZpA?1j=ikfPAjIIFp`RM2qJa2$F-4zmv8)_f#u#Y4ksCE7l|C{=CI7>61 z3h@kxU7%eDP}k$+EHAio4#0ED4*#j=v^xK---`wOgPx=(Uzi-9oS1x-u05h#|L6%C zE_tQ=ywFoh+{kGgAf}ABX?PXTMpB@Fy8*0@0PxX9PWvJm@PMIFzFf}NfNsZ*Vn4=( z_@WV~LfOezC7{6H0rr_ljOPuVrrnZTnR!6zQ9e{U6L%G9re<8FqUTh`;F?l=X6l9I zjik@(C?d)%)omI{>aBW9`Es!WYMKYs9sbGiIYxJtIv<3meI?*6;~kpz%Ha4sh_Zi6 zpc4H1P(^;b)tnYXc(Dcii}4n@Ay=#cKWe^9C1*L>p0S7AzC|@B;Fb-svmyCuQ=^*e z%oP#f0%r6&oSl4O29K?*F$}E;c-||^aD1LJkK;&RD`o=yU&QogVV^Q(Z0Od!N-fN1 z$>#G7cm{k6Ip^HctPEkwY^cOG264v>_-j+8dA9_7NSERKWp<(3fcFH?FNgRza5EF( zhh~ZjGfrW4!E;N}@Fn9|fSlH&nGRgrI)9(ZGHdTa+-L!A;#occzn{@)$&1#cN7**T%e06Wl@9Qy%sL-} z8}P501m@z-UG!u&tyWOFm7r?AGJDdM>%SG3S^|Eig;pXo${X3vSjotv{J^MSDFg^j z3z?w3#drbS$5X(!o0V7kWoJg46M4lZ-m-q@PJ8$X>d=TMtcIHAwPx_sFgH}zMC&@| z>^BoKTuGtZ67&#V6}^0+>RyhneVU)QcA?lBuI5B|`Wz=0C!tT;YxEHLc+cdbPua2> z@`?%gij7g0YbPsCNp95%=+=P#-ymt!X`Q$2T~($Z@Mm@#E#=+n|Ji@o^YJ?GgBS1} po2eP>c3Am+J3(cq;JBCNLaxW76mp4r+r{m%c1bBi?F-+w{{f%Un}+}Z literal 1502 zcmZ8hO=uhi6n;DNW_PnYzaUGRlS%aun-**h!Gx}c3OQ8Gp&*EjVX`|RL$W*V{xk^* zqG^L7)cS)67B5;sDwGx!kJF-FvLdD1Ks6c>i{K$p1urrZzc;fRt1Rr!eD8aI-+OPB z+!d-ix3!J@g?yUojdIXz&}A#+iyZKl8u13;MZYmOdkXN1Hq5?uFSVi-xQM5Sf6g-% zYk~L-@eoH$I@95DQ`mXV18@KwNq}MQ(^Q7k#bC3MNKF56uksI@I{glkR-naPA@DjRae zkRXy-s#`I#bf6I|y0vm0)I1+iH~A|g

cyE#8QqepMp=$T&;0K@FUchv9rXgG%rl zVk+`Ipblzxfr%~RZ;V&SkGW!v_%GueRlTKTdy4nDT}3r1R8@$v6EQhwYP9To3uOeD zMx`U>Ir7}n9A3Lw?`9&N09*-bB2LKT=D%^IuNTb>`k#S%^RSPbA{)9j*QtwzEZIVS z6`m2lg`5k1bzVdmH`^+)10lXJBmUG>sp40G_vs?ecV<7TjreQ9-K7{m2K@I9{-fDL zWv>)eI*W5FbqT9;95tq>PnRi3beX^aye2H-S%t8aBUUdCr^RDdfmu5ZDU%U6c$ZJa zf1<|4AQ{wt<#SWK>hNzWz2J|VEuIE9;z=um%KU|yK&lH_iDw`2BJhS=pFil!0bWl_ zEfHVnqV)t#@+P*At!&~^+cPTIi^O=t$|c5n!!3!**V7@Zd**E`-}UX-cdYk2IsZn^ zL()pDYqytY>_p)STRJL0BccU^lc%Pm0Q$HkAJK9m?s!jZ` z{RgkvqYqNAMtsd`t9jn(jPDZ6ZIv}Slor2X&tybgNpU(3I&J5$IBu!opGgic&ljyN zOl$|oaV>r_>^y&qC#m5x`!%|c{NGdi((ayG#J|{(vbKD%?p0;4&th(E%>PkG(o3f; z9&xr*Q9okc>7hl}Z~UMAyi-ZH_&9j@19X@=!S*3Y#8Xa&YF^3n&&Wx if swap then drop ; : max ( x y -- x|y ) 2dup < if swap then drop ; +: checkpoint ( cp -- ) + create here 4 cells + , latest , tasks , , + does> dup @ here! + dup cell + @ latest! + dup 2 cells + @ tasks! + 3 cells + @ execute ; + +: intern create latest wordname , does> @ ; + : decompile word lookup if 1 begin ( cp i ) 2dup cells + @ ( cp i @cp+i ) @@ -85,7 +94,7 @@ dup .wordin s" : " type dup task-sp @ over task-stack ( task stackLim stack ) begin 2dup > while dup @ . cell + repeat - cr drop drop more ; + cr drop drop more ; : doactivate ( task ip -- ) over task-ip ! diff --git a/entity.jim b/entity.jim index d6f167e7a57c8cb573e276d16235fbc0adf3a89d..92d2958dfb2aed42849e9b5bd86b2ae841182b6b 100755 GIT binary patch literal 909 zcmX|9O>5Lp6un7qn(0gjMaxSbA`;ywT7_aaRt8EbR>UgQ4{$e3Qk#Cv3^UQHMG(Xa zr3)#pgcbx5H(~{KC-VcUt15`nE>v(;unX%Zc04c13?a#V=iGbVz306H*>`*Y$@|8l zsEH05x^n64;5l08CR!AhT3)z3IE=MMPeqnyDzz!E5C&5|b?t62(<{T})<5FcNKs@V z&P!9Crzz?m@h8zqo8ctc0Q#F^=d5$RpTesoZY2i4(IFR0yR2Hg=4f;^KInUhhTK*+r^kp!5gD}XSOiboHq1Hw zX!wI8&|b5tG$XY6C`P}>s749;B*wNe5&>y8S9vFmHPpOtOd6{dr`37%n#ltt*^!`i z_@$F(m{w=5Ba`hCGDGV8%ATLx37v4E7WF~>-k=@!4q;mAMvJf zT1Gq~F^4}^EChi*|;u<6hRmo&z+g13^Q}?_nqf=E=$Zzo|-Q3gUpXi z3>NO*S)9KG=cWJ-GKMjjZ#G;)Lk)pLkW+*fn~%C_1Qt5PSSz%Ek@?Y4kAO!5rzcZumGO-oj7Od&8m1=~J6u0yHiaszHc$1MGxUC*|A2(~+%F z%y*$fwN|#X#e_F_DbL6R9gQ4r+h(iWA-mMwg}_2W-IhX_{pj zTrj1yTc(UR%~`rw8?t8lxX&L+A3aHPIMq_!twlVb@&TBm{tI}Lruru52+PxH+w9>d znx;te>;_qYywq%}o=rKg9k=l>v+tile 4 >> swap 4 >> swap ; +: tile>world 4 << swap 4 << swap ; + +: defentity ( x y dir anim -- ) array ' drop , , , tile>world , , ; : entity.x 4 cells + ; : entity.y 3 cells + ; : entity.dir 2 cells + ; diff --git a/footer.jim b/footer.jim index 3d22b007086b368b05897b5fa2dd69da38ff9e53..7e2204429f342fdb339bb8d22798842ea4459ebb 100755 GIT binary patch literal 1073 zcmah|Pe>GT6#m?K`^Q~3(^QC=-%NT)BsVOO4uZ7lvWlCQe^|EcFzimP`DbN!P3_b{ zFCkqz6m$s>oeQcE*aD%h=F>)*-g7OFfiZu{oZ@udvAV*|K+id zMk}qU4^$tnXEJ#!8(PGR24GDMAeA-eLuD2o`xvQcl-2i1)Wv2f1-R`}dkl^Bgh z7*ydGOVQy-WRQ^yUX9R`2uq-#QByD+>E&-ii{{0}a5OSF8fNUqX^k@u55?t454st} zqQl_?BQIi%dMn6>D^jbJt43P$$dl!Ie%z8`rCVo2pmbS-`}xjtK48x{Y=gr#ioco8I;`%nr-a)nx!?>xTtVek42fz-%gtI=iVeDO zO?WUfB`sFW42UhIKz<~|o?=r*_%Jb(l==c67!V~EtFYq&73d^l$|k)MGNeca(L}d} zP4|R?*6~)(K902mhe?hGf!0Nr(oB8cE@hcxe>yQmI*hxX({aTXL3ws+aqjVSnWc`wD22M)Xgj?6XK?oYAI`?n7=WGhgYnO>b90`&@8U zZ_|6!N%759AfS^iMyZAQhk7S<>D`Rp2a9xvlZ?=`r${%QbaCB{{ltGB$SDLwvp6SYh}{3-$hUapPxJtC>C8XZr9d5!E7?#@)ut*Vfb>MlI=oKO z_@Um+dgcDjn-g-ab;kL|w~aQ14Fx$<{&i3FIwPfDHf*|TEJ?0~$#q|WlE#-B-nvnZ zWZKM{ym;B+jbNL*&0U~X<8IJq`z1wM7v3FLNm=2acF7>jT6qh54XcI=z;h<1&FrE> TxKV{S2G1)!mz;DM4_x>II06xX literal 1073 zcmah|O-NK>6g|$n^W&&VYAxRT-a~~FtpP2>V4xUv7_~`jv_!DQV|?k5Iyy5lN`(Cq zwTN1@YY{D4Sc?{ITGY@cq-i%;kRSw=i?Cl8EgsbU-b~uAfq^;aeD~h-ojae)uhrT{ z6RoSyR3FYHlNl=&SioQ%u&!2MEM;Z`MHWldn`%KhSYy*K)s4<*sOufCo-EGu5ryuX_mo6*uRP!OaJ+cZfxpX8P zjSdX6z5{Q$bhxK?NM55FpEN%*)_f)qPfjLN97i=a*>XB#X6Dih97T@2XrTS1h=S6` zk$A;lwbfDms1-Kt*<#xqw$5RLTkHXcH5~SYa62RCo$$v?sJMzbQSNBz8Os`DgDzYa z9!yV4izPF&VpYkJAB*CHV$&VrLt;8E^?5!p%Pw5i~KDnbE@VA zcm7#&pGizvGD{$&7w+NLfhZ#Mt%F_dGGDuUNJl%5Io!8xnPg-V*uO(OaO;b38 zALKRa|MP)Np-n`@X(3DG{*PyK}T`OjX%zzo1C#@UFQE%J-c%Eg6IvD`VkO-Ll~V@Q#ToGqvCl TZj|A(!Ff&0#m_p72QK^phe!_V diff --git a/forp.exe b/forp.exe deleted file mode 100755 index 577e287415c262ec8d0c5004341578363f8a4625..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42985 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 stttPTJK6FqJ$j3)HnM8!$1jpHq?RU$6vS1ONa4 delta 27473 zcmceecU%<5|Nq~!d$gk*2L~J|{peMCQA9=TN-XH1Scx^!L{Vd+9*PYxmYlIBM%37% ziBU8g)L3HdU6U9!#-39Y5NlB3_nJLWKl%K=-^cH--}>0)InSA$ot>H8+uhl9-!iM8 z7h9>i9fmxQ7; z1P&KejSUvlp7tH<_r2nLRlC%xvF?S4pnR)BSYwHh;&CeX$AYS`(=Q)wDx;GgMXrme z$YC+XK9GhQ{}Mv252a+8zD$*d8P%e*&5WFS*IAh7Y>yCK85?fQP;|#~i6VqW8TTuk z?Ls>i9<-FE2wA4d$;NAn0Cr=$rNtl%tB>^EvrNDAF^*P7TLtw4&+D`OYh@=vRhh0Y zd0tpwKi;lB&UB`kvEFVa+h<&9pJ=f!ouqxnOZM*>D$}z}Qxo)hi4j(Os?YtoSIPat zw4c%`-@QKJr*!W5Tw0!PQCFX3Dvd8ZXe}om^gkpP-XzX{ojC445;twkxnz)6d3ycC zmnHI_I#Y(c0&*}Z8dk{uslMJ^93@}LbT>_3Qk`uIe5&s+7qxTe?B0hn>xj&W!sJ8; zk?6ThMByre=F5hql;siFsY;QxTBY_zNN9k@f~54%9y71({}D$ z;#HPjVpWt`H*IR&Ce?VS`h;!irf0@W>L9k;C^!XoGrrkCNxQl=WpZ1X#7BD5q{f(S z>Gg>w???JV%WdgGV|~cg@o8pVmh?}0R%6ZHN-$1x@{7J(qpz@v-Iry$R-^Ar`nLM$EmQ2>>NK=m&k_D_4Z2K2-dQ-k!qC!I*jgOKu`v930zT&0gGT&a7eIZxX zH*BtJwccRbT3;cW`k5QSR3_I+$$+|omNec)vc@*nVvXCi^2*-T`U(rvXZ01o%bPU! zQU|$jR)^>hTcT%@xyB^BR zOO9{WOUHU^%m=M$U6r{v%iE&rx3^^)-`FCJi6=EA#wPjR<4^s>I(f~Sh{glHS3?>d zKUmBKlT)1KDdc^SgStpPPANtY*IYwv!y2VK(=F_9fcZCsdDpL>D3~r)nu}=icxD<} zD}`#ZOjM;ev078zKXQhpW$EeY3l)v&YMz?XYNZ}Xcd=4$`r{wo=Qe;&zfNwUz;iN+mnEo(6ca0XBR2oCw0@!0?mRnOHtG`q-xx%7WdMxsl_A3j0i1f8R!*ddP53 za!2DFvfv3nK|)@)ID1s)dYccE!u!p$W1pH%KQe8o|1|U9>-O(rY^HT)$;P(YAj9wX z8xNDl1GezKHLq!2Cf*eMP&X|MMI-#DeTi-Ux2?@Gz5Czxd6uagw(Z zc`uj{U_O!F=CQoGi|^|zV)%yYCp_ng>Jz?AH))KH?p{LnePgt{yWvgA8hiAZ9MWTnA4sy?hX-0+Kd_FVWub-eWRafXGFEpd6 zLT}3bM@}&WSoF-?QIX;lQUoEzA?Q?didMj3<`mf_*e{;ZdbkS@O;6vP6~g4)T;O*< zG=2Wc+gV;``mEO6V|Xl-l!T1z5jEYM(Hvy-?NfQ* zjE6j;)ol~dy-TI^B1KVxl%8!`YqV-I*Pys(?&^{cD(uK1gZ;EuIs>&9>N3>i$5Iv49;k1ijzEog zETy|-nKnUv548g-`?2Yc;i(jYy;=ml9r`Qi^v6L#0Dqe+O`koI>=aq1^H5b# zSD_4#q$H?)P!FMwL%sJ%%7fYh^$1FW(m#?GDDcCz9PSC+*KnDSq&-MB8|oRpbStxkEHWZgP>kQy$5CgNUFe!U7@Hot_+}RYa}0wEK@3!0F?>#ca78w zDj3QFD)w*ua9^mAis4+~tl@l+Y=4cMnE<7PvWNP%M%s&1Rd@7~9aQZdy=g^_^cd<2 zlmpb?P;+Xe5X&snQ7ARk1*q{gQh%tOP%cpWp$6ATMyNGVS_9m-aNTO8BXA4gnn109 zYF;C~f|>&54K)WUq((}x$})|F@`oA^@4s z1{Dg`9O}=9lCL$|-wQ4rE(Gq_L+KHc*+NA@xkCN$Q0j)detugo#XyNrYadDmsM}B} zP}R5friBls3aE2Xt)c#en)*;88yxgd8BoWdMm?1Bpf*EgLj3?`=<`qtf?EdH0d6f^ z+lNvMs98{*p%y~LJe1}^jf3h2H5JPHp|lceAXE>iQBZadrD;%Ip!z`df%>Of`W7k$ zDi^9P)SYVS8dMO};MVAWF>vRrr9hmPG;qU^%o}Q7wUh?MphiO3L2ap)xO53_wWP$6v;%4~)IO*|)shF4VKv+=xGiv9 ztEJt}xLtr+0JR({wOUHG!`&U!3aHso!PQb9s1Z=Bpz@(ys-;?-2(zKqK@EZus--(n zZJ@S5b%m;`l4`KYXsB&asZdu8Rnl5GPdEuK81875bR0?vwHwL>YG;*1IC(w0sh9Rc z2~caQq;i}_Zb6-ds=BE+EvS-C+h>{1LY;-W0yU*ddII$m)Oo0*P$R3P)llC+{ni@& zZzo*uDya!hD@)-nBiS0Lj4G)c)J&+WPz#`%RY`N8#zI|#ngZojC7GPEOaq{9LXCv7 zt&%)ZiJhTLP`#m^S4yXlDjBKJz90s98`!l~Na^8V=P0Y8;fN zQW}Xy>IKyXY9JJ=l(s{)hI$983smI;$=wydhEM~c3@LDzA4uonn!=5Q3xYcGK+oCJ4b+YY(jYB<4X>jULouk;52P_rH=(9ORbI!h;R9(3)ETJRP?w=5Kae&-?SYyL zbp&d}1F0Hn({+PhS_HQPF8hI0FJ_sRAla8ttD)LFkV4#X9S8L_)O@Ju2T}smhfv=^ zO@{J(Ahm(&4^<8|0!sNnzH{gVbrdQa>e+p1I=XcdF!{b58-ZBEc|>#f$9?%8!UNdE z9IZn1CB$;I>%LTuqv_=}z3EkjbO*NE6a3!cuh{T_;IQSjbY{M7n|7a=l;@XaI(ZG9 z3u!K5wMqA-SHSO{=qnsPoke(Ta@ZR;MQL9>(HEv&!?TDAeyN(()a$mY%M&*o( z9h4d8Z`dBdQv|r;%(}|@1c!|J1iOq@_Xy^&$(z_S)6I9tLIqRkf1ozx&akiZ7UmdZylmvW0z6n z>X6|eZT8D*)G2(U|0?9ObN)k7&RV&gwQ^pqx1!HJN8Jt6He9>k=Z||zEi+Ortuyl7 zOS~*Iicu3wORC{sSB7Oq$)O4|Uk+E0xqKF=kBvT*{}4gr(LkLVReJI4-698vfkm#4 z1B<+zjCFwleuH$e`%cE96opf3X}qK4n2}|2_cA~HdgP{;Ch3fAgF;#O_78$QtqhAY zQ73B_XUdn=sJS&uWzih9XuT#aL+UJKNz-r-)*iWR@WU?42@CHlvU{((l#K=oWY6x2 znTjlAQ|>~~?&XMQrX6UXQBqT^KyeFbym)sNm8NIl`QdXkVQFibN}iV-7BelM86vTz z>^d=9A)YDmTAC?dDz=)F`D)eW>^Ye)i!)!AQTi?)-j;J*FJ~h>M!N?aFbif6jZNx!!`f6ZcfCVq&0QBb*fNN}-ab_TYgID11pAeVBLAeT~J#fm2= zTC&{uSyUgke0xQd8*@(22&k?v$+iqTgEH3^WuweSmu9OHoAZ+2n07Cnr5+fkDx9jI zsTQcQ3L$o1g|bwRy%v$qiZT_p^-~okhj~PaYnt(XGmrLZeBEmiN2ugE>O#(6G3`cm zed>Yn&ZrVDes2hicQ?_Y%olWbd1JL@HB{QO$mYhbF>adX8K~rg_5JpBAkJM7IcCdPW%zV0?C^}yIRTHXU{-ZVd2)`I7^$ha%EkLn8gSV?uo zz>=$HZ`kL|><)t9o-cUE69?v9Iyy_#)n zc`ZBNt3Kgcc74LtY{>>G=Xl5`i>uj0IK^T4A15he)A$yK8`(NT@!6eJc*9U~Y0m5$ z*%hwE`%#RG#bCPv9%c5$`&SR{jnmwK{@zwO`o4Wm=f>sUgz0`JJ{&W1T zFrP(B&BYm?$a^rJGDtVF@npOSN+XwRqq~01)$AhIYuQl_Qc+BnEZ4g8=-e3mN?Dul zWbr7a7LQ_D70*B^3yLq|uhA+Y7SG936I4u**L%%SW7k96O%PF|LgKT(AWB&6};^}YI@DlOI?cX+JgP*K{rW;4GrsF`yuEVu}yLv$y7LD5ms0yf1sN)wT zO%iS!pq@dwK}i=RE2w{t=p_Yy`V~-LUyzJYcc7F|50Bt}`hpY(bskCubrs5RL3#+a z56T7V_z?qcs4qx$a9iNq;Upx}Uyz)WaoYgp3-vWr<^?GUYBp3T)Mrq!7o;vw`B1S? z1}L8kQf3%#8=%sm-h;BgAhiP)Uokf;hE$~Cy>X@Fg=f$vlW|!KkCfrPGY`!e-kV=y z;3m+d$4S$EeBhxO!+I;X;{NBVNiVNrgIs$etD9GFhwx|YQ>ZY+Yt-VKq-p738IG1=8=y7VyR20qDRn=P-7{!*lh+}>0 z>$6RL?fDaQKG;>EG$*THqN^$`(APT@=xz6nuiy{b+8i|YY?;718%tXL#)^%D(|2lX z`UcQGTl_+Aq=J0Kw4>=bQ_jjMZ*PolwNX`^Q!rUUla(ch3J*E9IJVu?Y6@ef?L*u2 zVQju}Z$`RDaZdX+#W}Y7COedPEy}64T$EF6RYn!oQnAs!Z4jGlY}MAq!Y(6AT5jyy zHa0k~s<3(el*AGR9^{quQ`ToFSLIdBv3iyvSW~`dL0VpwGT#b+j62)*?EWUk{Y^}j z{dn7K(}sVrPx(T{=N0YcsPW#&BAv!-`Qu6HdEcz!48>B6jd1p&olPR^mNRt zDr>md$}X9pkd|*R%1mPe=H(!Llr^s^%V~jgbLwA7BxF6aoSQ>Je&cydK9v{epeqp` z)2>>{*Lh*pu+A5+*ZIP{jv$}wLZ27V;&V|l}X|<4c z)9Q+I#^bWKwy$wwdw2I)XOcP6xT8aa)$poA3X;fpw}W?tqF+|FshJwj?GN?O zJ)j`;7G4M0g=s^p>e0tgVi7gSEQeN=4mHMiOk&53qdR(G`Dw>;beQ&?e6bwaDS{Pl zU)o7vh*;6N4ZCIht8*_KMXs}}Wo}`bwXsE)G{j8qG7yRX>~fb)Fdpt2>oEaM$6Fe= z3*Q&!34g7cU~UL>6-~EbcF@?O+fsLBzv3Bo{cwR?p)NV}>|#lEVV%F>HoxAl>=w$7 zZFkRNf=2GMCBNC8DXDpOh*BfG!CM#Fn#VmYn{FTl1QAy{7Nk%wigo*&r{ z?Z?K48I_km(iZF;YCP1ltJBbaG4+KnTqcNjt;Mr9BkR|<+aA~}i7};dKz5wtAC83w z6?b30GF@=I`}CFRlyOaV3pRB7_3Vj^4K?cfOb9RQ#s7WPeO>p>-KX@d?q1!!w)>tQ z`?{a#eyDpzci*17dS31Rq=el3)ZhX$0N{(xXmV)%p}VN4gDcx-Rex_W&J z1&tkEY_XJIcNFTEZnUF(eQ{g%cDO@vTjA|+a={caBHtOyuzdUCwj$!5VqGEM#~d(c zB+&Sl#cdU@S423iSzCG+oWx9H!N zsXcQGU$~*=OU*6+<-qNI2e=5#)%f9{4s6r*U4url)cgH@>*t$$y+NVaNKCV;}x# zH}HP$&*f8dE5!1`+#fBdEFCwkCw+emqVhSpW$7n^XGKE##f;iV0E%I;nAxTK$D zVTEF>L#o%d+98n#P0gwhD8;)3b z^?^q)AH#eC<(O|-o;%-iH|C#mBjrM z&2%c2a@WkD`oMBy!SKk|2Xk@q7w_I(5xeil`ud`lg+B{5-v%aGjDK8YHK2d#!Q3^o z=;y{3GXE9Q+5#M_dBZufp$i9TjEWJ96a`fURe0CNK7HW_7RGNk#%;f|Q6U;%Y!2NX zxFz4!@J)06kH|)NlUs2Pky2o<#d3rN;Z1@~2)7Z$*YV{Dw-ywy!^aTD8$YkZm;M#L z_a~(GQf!!Jf8JM-C3OlX5wz=pKE*!I6HY zLJn%$Oba+T(RZ|-gEP&iG7cI#Pscg9&`P?6$dxkMD-lBG+IY?Xicp>2AZ`#SB8QrJz9Aan$uHXQ%G#s525Jyiah(kO*rWPC$ z=s4wZNTe$?jYAS$rFk5Z=@G5ukU|6LTMntXN500PIUUncpc2%A&QThNG`dXPIkcoh zG?+s=-C0uHm-!ohqa0g=+meZHbI7FAlxhcPM?X;?4(;hE&E(Jl@4Ri}(2@4g4Gx{C zh6H;+XSz*YICP;)G=)P~Izy{DbfZc-%^{2apeG#Op+(fh0nnYsFA49*tPLlq8xQxS zUuZOkUQ|wVIAqhew2?z^dP;%{(1$)Fdk%W~gmO9LPzjZA=u7Kq6Ni2@kIFgZ(pPkX zLw`C&cQ_27BUH;_ApJ=l9RY*rO9K^f8cfS+F^3^EgEn)>qi^Up4)0PSg{T2TshB2l z7)EnxHizLfn?C0-f{JK8hmkal$~lapgLIw4do+n^IlNC3DclJ#nm(Wo9LCTTGW6s0 z0nMaU96qG|bc(}RdPpV?<7gInIs@`)Dy4H6PYbCBhY3_o?{k<)8)+ejkLU(%;xLJ( z({2tQ(^^t$0H4s;2!dO zb11|)x`x9HDj;$J%%m0k;3MrU+D+*kX4A(slEWOzr|leyXc@V?0*YxVo##+OrIhD} zbES4Jt)p2ufoMOa3ABO3Jo=PcY60`n-dK9n&Mez7+@VG zvOXNvQ**WgV9;)$WLC%3Mm)k%g#$KG5=-Ln4J9zQ2*74aVIM{Uwooc_jskp3?bxtr zz<1Px<;DQEQU_)m3;3QoG98C))RT?iu$_9by&TFYhaKgxgL<>bIDla%^8=QtdonXHDx&$O0VB>@f^Xgbqy`h~t^aU2fOSIo%aFpXpnIUJ$ctd7G`n#P=y z0mrC_C2=@T6Id4xCukDO;c${hv1J@i(Rx;&0ys^pSYayQ49#F?Ih@7sQxL8XaE>(0 zWBoXt$6UbS0x8*M4!_dZ>@-lxj-_(beWdcl?cXGH({pkgVdzjtZVNroOfx~^wT{%3!ynsU`X2W4lRhY}$ zV^NLyGKYtlUvj9y{9Xqv9%257!(+_LIXuC9oWoPhzjJto`EL%-F$*2B_y@BOhg!^c zIK04oq7xP`X#ia_aC(LL8V9_VOU0eBsK;#NK&%UU$bqrWjJg2$HJqA*2uR|f0F38g z0hqn`EP$GgW&dz+g0Xl9;0#c6&;Sl`Z~cG&11|Oj_y8>X0ek@`2Lk+94#f@v_`@V{&@}>X zGAMEgfEyg}6pHR} zNCVvC&=Np2+>$W#N@F>+0!-l08t^fPHU`jCP8opd9NGeAaL5GA;?NE-heLZnF^3L- zxg0tI=5go*Sik|j)C^q!3%ThE_>4n0z#LqGOCNgQ(7E-L5HpFN}9 z90st92KtH9K&GH;90mat8GykojWy>mgmq#!vH^KapuxQX@3MDU9*3bwJiHHJ7|L3p z2Mh;H=P&{=BL^@NFpI+|z#I6)NvRKQ1%0i z1K4rM2i)N>9zeN(2>=C$i2!R39|5*0fnr9>AnNZKw@1LU?yNFhgs<7ycb%`mj3|eG(r); zjvxOP#auZ8=A)$*VCDY;Mx>b{;E-R$P+krTm^UQ@mVU_3wDf@p0!~YWZ|0Bxq zKNs!I=GU-DvP3m1*03luY{H(sF^boRy!YQWn%9ZHW6|b(wi;0R zRy^zPSTnQwp2e798;dnZZATh;^JM@z#~mz=_VL4YCyQ@fE5V%jhsMNGBm4-EH}M0S zRbG89OEj-l&J0O(ig)jFmP}VU>|!bAxZREG?`hn#pBndLZ{wcrYlPQZEyr5&HeQ=$ z*s5Im{VcT+nww!6Yhf_cI+kXJ1C87GxiRa5tfe`sjHR3RgZEQ8$6r`0s^o<}*J#eO z)^w1!!Uez$4!>ga&pG_Y+L#;Yca~vpyNj$X8RWw9L^AxrGR?jEEoj$hUPF7cxyU-0 z%kc+mFl$-I#)F~(F0oGLG?!WDM(AROOROtd8hG1ZVYss3W#k7pE_KNAPwc%6{3w^< zDhn~g`i3a0v)Dx*Wp%x=&Tjy$;gmNU>O*-8ARq2LjodwNvs&}sn-gRE|CiLS8}AOz z`SSX&;cxcBY&h_;+3`YKE^u|z)xf*?- zI5$)S7U(S&E(n(#9DHFxClNhh9~BACf6dbGr8?~ zoync)zv~RuU}&fZB>I1@h9LA09JOQ_jQ%A<2zs0h<^vc}=HnJ{l{uQD!W+t}i~z{J ziWku!R|tkUL|N5Gof)@!zW_BOg1SGe4%3 z{Q5`UhFmnh4S8cJLYTS7rNYRq7!8nHkyjc|qiBwe$>nGvgfn@oJ6ME#a4Y_`jsI;E zxc=ce%A0@GkhL;Jh%|3Lt)W1QmH@e>_zuZin$<`w= zjz3&Mj1)GpkMLxS<|5|pX&z%X^O*(GnEx$C_$Bs2K$y?h5Ox%7(7a5Zs}XLBCo~F# z`TQK=A%Z3G9QYh2Fq@t7?qmB1_clQ6g|I?^&jS$V1>k*%&w~)Yfy%W3^LZ5SQEyG} z{VV+bzrv&c6&~}i@DIcCS(YOHQ&zIJeb>*~7hjI(`WJh;u5H&U7PU61>ofM}s%~9F zg-a{-U9*MGo0Gcs7pAXC>N-&P`pXeZ!Y8p_h5))L1kxP=gG53wy%0i3A%>Ej7)~lN z5<^~5810J2Kvy%2am8SGD;6VL@fg%fpjl!f%@dO`u9ZSYF_pd)o72}~3k+|i(I&Aa zZ4+BzgsV0EAhx0XVg?-*GcnNBj!uc~={K<>#=1JuWrK(T7_kdI5W8W_D~oExcj%Sa z1H)cDNl^46rJ_Fuz6M~-YaoWZ_(<1a+M^gk6^cCav3QqySzuhlVi@hU7*3BZMo@_5 zNa}An3L{|eVespHjC+m7kk=TDc71?>t`F(3)mVCDHI96(Ct{%MBQkWio z*?dnw*=(aDHrwf(O&MLW*@+RfALx#aMAbGwQmsunDU`d&LAjf>%01+#+>3FweH5bH zPjSiv)LeNG!)w1#E2ZHOWhswfi0vr#QXZp$$`cr6J4x>8SE1omAeU)5<&a zo6osx>I_@Yc4P6t<7Z()Kag+CC+f?K9HYKBuO( z|B%kMmO^Y_P?YUUim`n~akll8YD=u6En{751=hn>!SHG?%dxd)18r^CyS8?0gsnY$ z&(?uWu(f4VZJpRsTW7Y)R>RiVy09&_YPQ4Hjh(mEvWvFv%y7-N3A=6El-;xSWRGpV z*h^b)rm*v2Hg>+u&d!fH+3A>zT>$g23uHcaLCoJSm<8B{vIx5{7G)Q~678Z`s$Dco zvunn>+QqPJyExXzE}r$ZOJIZTlGrD9$*j;WmCdwk&gR&)VDs%-vJH0WY^z;sw#^O? z@OIc`u-$fyJ6Rn-LdP$?%H)`)plK3tz9=(Z}$!p?7K4?`yR}}z9)0B z@5Q|Bvss9JZx(Bx!_w{hvUc{ltc!hrmSsPH^|l|x#@P>MpV;TIDfaKO0{fwCw*4@+ z*nT)$YCn>#vVV`Qwtt_kvp0-k-`Rh_ez5Gnu!;Y!>1$hs8R~VhIk#thvKn z*3#iq*4kkn>*z3_b#Yk8x;cEtx;q$Ip2H&cp2K1`+F=R%(BQC?O?6ntW;v{2a~!^4 zB@SP*r4B3ER}NpX^$w+Mqr)1u#bGVm>F_n%?XZsRcUaF(Ic#8mIBaB<4x89Bhi_QD z!xko}zGW7w@0hh}E3;MYVD_q=%vtpVb65SyyjA5)r`p9LRl8Y&Y7a|S?Pcv$`&bv% zerD*QI>7X*gDh8dm*;v&v_Oa?Xo31*+W~ffF*{U=k%U1 z!0CNqu+wPaJ*P23zS9T7M5hmhX-;E>BByb}T&H|tp3`_?vC~9hnbSwY3a5{Sl}?j| zRZdfdHBJU$ol}9Z&1srY?lfK4<5Vd8;xtn@>@-_A;Z$T0PB|3|XPrufi%xTeYfkfo zJ5CD(lhbFyeJ7((=d?(0aQ<9ya$YQWI4>1EotFtd&dUXV=M_SN^A|#z^GYGz`75D~ z^D3c}bE)u-^BSRt^I9R>`D;P%yiOS6yj~dPyis`Hd6V#g^Ebk5=gq===Wm6D&ff`( zoVN-aoDJKAP0rheEzV^^x${n8xAPCeL1#%g;ryd;!MR-c!+Do*)p@t@xAPvM+W9A; z))`kjn*D-Ob3m}y{48iSzX%?hLxQK~un?>{Duil|2@#s(LXzgBkfJ#yw9uRu(luv< zHkz|SC(SvbtLD7$j^SMNBb?Ga5-w^U3)eMIgqxaYf=TmSsMgd9HJTT~6U|GZPE#k4OTAzaT}ZTdVWO*x zC~934ViOk&F~P-BOmndk(_O5^HZC?|7Z;`2%f(jg<6A7e{fpi&`A% z;v$ZAaTTY!xQWwU+{L9X9^!hJCgN5XPjS18w^;7tBkp$b75BRMi3eQ##d|IRqJ?Xq zXzv;%YFtAMqPuH^=6##Jb4?U? zxh9GGU6aMbuBqZ_*B0V=*EI2>YfJIAYr0tH+Dg>8wH8C&+KB0H8Dbx|w&Fmyc4D4e zdvTas2XVApM{$B%CvlQnXK|Wa7jcGLH*uDmAxkWBdq-U0)?Hlc)B;L)=OOH z)<@jnrWZH6<%nC|`ieie^%Kk8a>YGv{l&v>1H{vA1I2T0gT!Cm28$QnhKQHl^2Dod z?}{e3p<=b$2(iX(q*&`VN_^$^o``oxL~HG6(N;S~bk=?#x@tcZ-L+%IrrLZ_XV8up z!?Y8`NbN+inf4;wNu3oT7&qGwm|HuohJ6vP8SDgXNZHe zGsQgZEb)Eq9C3`cNF1vz7C+H`Do)YP6Q^nCi!-$g#1id7ahdirai!KMuGTIR*J~Gx zo3u;BZ?#Lso!VvMF70yBuwT1EJgogfJgHqNp3#0KUeK-*uV_of>)O@g-`X|e1MNDo zTDx9+tlc0!*KQPFXulCf_syb>`xep8{X0?RzDd-&e=mBwZxj99w~K-9JH!z8onpBA z4`Q6VBqq53C?>m?i>=&uiEZ3>i<$0w#IEjp#Vq%IVh{KI262S@0dcbX&*FUdgW_uU zU&I~mhr}c9hsDe8N5o3^qayP-CTcv6i$NYI#1xN{Vi%87;y{nn;y8~p;w+D|;xdnO z;&&eB#RDD}#9uvr6-^$$i7z~U7af{h6n&fgAtpAtBzA0aSOzo8qjuR&mSQUGdD@L!tC(qVV)-s)+XSRJ8H&Qe^vhD@OSE zC=8Q*d=>M3{1mHw{1rQVbc!QB0gB5$fr?6>AO-UcR%m=f6hXeBiWJ{4MHk<2#X#Q( z#W>$c#Vp?_#WLS$#b)1TioL!uigUiPirc<%is!!Z3Rk}bMVw!fqPt(RBF8U9G1#w# zBF`^PG0d-};(fnXiZOl}iV1#g6-9pS3<{%PrlQoZgJOf9H*NOwrJwx#=(wK`{o$u0 zlV1Q;`UTN*zhHXhhg&oMP}2H`k+*+1#ra24ihnev`8T5s|5)nkA4mQD6KIToB2Ds7 zqFMg9HS@926`A6;+iud|{-IvdKYQkj&V?rHT*;twqv<*=&Ct2iY+Vy7(lw`0vgJ5yF*SIQ0SM(+k@(agYiXn9}{+8o%E$^v`Q?!at18`zuv3hYC-0`*i8 zm_t@UeaSzlAGHd~HPE1-0W>aXAQc7;A|qZUSQC^-+k=ME{-9y>d(d!t5Hy0s;F07W zJc^nIkEYn*F%%d40VM~Ir53^CX=?BUnjZWS%?X}N3xf@`IJkgT2T!97!PBWMxRCY* z&!7{*v*}{+9I6Q}p=ZH!sXq8q@(!6taUq5Ulo_&+x`up4*&#+66|#sv3i+H0LKf4! zkR`M!WGNjASw^=)mXjj%3vvtnlKetfQbg!iloVP@twUGSJE3bRH*_tH2>qJIhpwZk zq3dZz=ms)|ZlW(jx6luv-%@$#cXS~1dpaDtjn0K`r$0l>$P~JR9vMP+Qe9{{rH1XI z^e|V-40EFnVOq)#^PoOqO=(D&Ck+epqL0J8XBuwXhF z7D9i8h0?>YaHpsct=_l-ifw`ccvZTUFa&_!MPfqMYa*|kUF9VxkdCQ z?}!}CeW_bSf9f7FfQCj4r1v5Q(I*juX-32lniY{p3nPZo@`z!yCSo{kj2J=RM~oyX zVifI;c#lp;jHXu+V+_P1KP3Cev80L|N3N0iK;$PhDsl>a7&(Z(&Gyo$X8UMdv;9=u>;M^?{Y+mqJ4ovc&3>Vun;oLRnjItS znB(LUbAp=2oT8wZ(-akRhT>z+QgY0B>K$W6xiQu>Fvf;P#3<>L7(1FBqo$%57g`bH zN?*jd(drm2eG}tO+hROuS4>mdALB`fV!Y@^j5pni@uk`rKdO(>k!@@MIm8B%OKcDs zJY$2&FE*5Pv0)Sx8&1)&5!5O+5?{1L(SX=yG%PljM#RR^`?2vfCN_aSh)tyY*d&@9 zn?f^UQ)zB&b6ObNf{d|gv@ABAR>ZcVFJoI%X>1!>6PrPsV%yVZtXCG>k#@y)qTR6y z+8b*@2VyPha4a4)9gS7esaRXO6>CTLV(sZstOGrZRgq1cBRR&Y$u-W2yyKk7KTboT zajp~@=SI!qw3HU-PMzX#l*D;bP8>e5iSwqhaXvIB&X0=Y{OQv;9W9Itpe1pEv=Vu& zigTfLSbsg%-+=WuVg1c<1`ql+t_f|8Yf9UY(RO6C6B+#&=S$_t=rA%lj!e$S1<|#* zV7e6-LQlc}#D!6PTm*^nQDhe%NnY{I$UnXX1;)3eu=rLK5#O4c#kZk&{LMl*J3f>8 z#kZ${@ttW{d{-J7-;Kt^ze5uZ@!jd;_#QMpz8B4m&!#!?eW)Z}Ps`(TXlHz1Iv<}) z7vuZW-|+)TOc+Q334^Fj!VqeokVm}}-lcH~L+SH`;j}zq1Z_+hNxvkFqMHftlPO^| zJxLftR*4^wQ{q^1OB_cYiTM zpqYsUG$(NyeU*rBKoSdSZQ=|%k~ovjB+jC9iL>d~#5rV2ETZbf5~@j@OHUF%rB{jb z$RcSzStTtXWzs@&O8Sg6Nk(!@!gIi+&nYHp3B@HXrNpFVl##TY`X{ZRp-EpDs3_@6 zTA1_|8IxAg;-peqleC)lB(0%elGf7SNncY{(t3KBw1FNcZKRh;-%wrBW@5=($R_z) zQYUXE=j89nHF+CFCU2*NXW>Oa*}_d+~mD9 zGI<|OOx{oPlMM%GN%BEjmi!BSk&Jg&lMmCj~&e2glRk5gUp2~ww=BwflW zN=!LT9aGLwZpvBuAmtntrktn6DHmvC%CEFLfaP;NHtMx>OD$Lt)Nz^_bD^=0d+~Oq+Y32l$%;j z15+Q;U}P{X^)Zc0eMTRpKBrGo|DkEAwN#k;ii%U~=+jhUt5O-;kg8x?QZ3l7R7>`A zs>lwdTCO1v~{%Pyqau}i7;?9WscyPoRE9;K?;(^L&>_afDW)urM;pl$BP6wS5F zuDLr?HFsui&6_gc=AH~c{S8yHz+YrLL_|-=3@kRgfPN*1kVwV*`4vS6C+!&Ms%d54PFPo3~Ub{1i!q& zC&I4)tKd`MzcBj*JfnBUi^z=Bi0Fcdl?^N8!hZ#Jh93yOs=VZ7DVv(q$4fgY`8!Cx9~0DhrH#D@ZZ6=f?xWU zKLWoMz771zxBM&1WcnVyExcfbx6>P@1cOyFZ9_ymh}5?t##n{ZcK8nP`Brb5W(9m1 zJb&+a)m#2B{0?~j`tXUj{3EMKyl%y)8~k&tH%;Jc9f=oK7%lmH5#9`xmiT?nqS%j1 zx_{0lx|ieinNdhzW)qI3dAeqkNxPTaK=h!!h@J>LR{17+r81TFBfClPtChSt%+nvr z1Ui89pCEWuiS}-oRJNVyAp8`BHMW_J8lU!*(4i&eiAwbvO<6In+A)H~V?oK9J79FM&U2Z$6TFCQsnc!Y>0q zf6F&<(9yXi%B5@~JHKT5QWj;nz(jngg7>6V{5^2L2o6@g*;U5>i;|eW!@Nbs4{P&OuENJMn7+rnN5v0o^K?SRU+cj8-TVMKt#UJ4Ebpi^ zGVj3hu8JS-<_Z5*8eK$v{=kEdZwlJcF@Y|jpg%%)b>sup=BdDuzbr$v3v;0(KRuYI z#SMNBg3DyzaDZ%f45iD+XfGnRItDf*$7cqPJ?IMjewa&+yqB3L{11@yC;ZO{MyNYC zYJ7_1AoDL+PFCB#_Ol!OVVL5#Jf0Lg(N$!06cNiB67jXxtIef84&J0TS1KmtoF2y=h{TQ#}2J9sU#k zzEiV?`bWUi+1!2q0{b}oU}>Jxoy`Thj$j+-HwEh9Y~H|4_-yAl8+hN@Tr0QXKXCRn zXM*KIXLAkx4PNBjSVP$UCTDXmy^Dw~&To3@Zs)ETN>|7qYaDcba}X;v=0ZF`dV9^A z-tN)htKdD~@}Uj>A$-JJK1G89@%?{}I4V4G}H1e)JT~-zjUYeN&}_ z@Hs4>+~D)@)okN5rop?zkA2He(MHfST2fhEedl{a#;Y z;$ffp2x9qAUv$&6aPRZPsclQ!~Rdg(>y-$ zSE?rK%qJWkp08_1?kHS3{O7t>7ha)h4S!wNhUrjfKIsDUglNH0{%|EC zu&)q>^lg!*EO03cL3;lA%B{dmmJa6A97FI=LKneR{)%N`@D8CfR_K64T|;)UOeE?E zE(qa`VxBU?%zM)rrbC#DMl^ga-zTgMUc(XP?^=f7Nzv#Azanf1eE`qDZdn)BhsHJd zx-d132OIb|E-c)ECN?yIDm;Wf2JEn81qbQ>IyuE9$J(ZvWM@+O0G-$w3?zYG7avvyILP+Gmk`RM!uay)q!B|uXjlsL{ z0fYoY)O4UNr9xZCX|FARvPO+IsHFug6aix(0Y1V9g9J6`FnHz1l6fJ@~UE1LsA>@ zw%LxzR`D&`uZO%P(vT|-Ux_{o)-u#;g6Wyw5>r_v6)E#F{2jUUj=56&fTiJhnRm@f z@jV({5B@{5JXZw%554_3Zsvp;5I>)4EYqtGxN5i%eS)qkBzIa)X^ho zgM7K;jbN2CUn$WJd9~x2)xFLdNbpqx+UoH8uhZDPMsWp8*#Svj?1P*bo(65syCDB4 zR*}(IgP|titFIhc)So>p}?b#kro;W$N)ox#Tr9Jg@|5c z@Sz{iUr#%Z&#h+^_>k>lUCBn6+K_3j&L-_N)zD8_%tlr9@va<8wMZhpUF_nK%_vG&xdZ`2hfiZr)|Dz z=p;|{`!=BMd=d6BHtbEq)7zyCALmb-a1561VjcJkR#m`r$SkrA&Vx;H}$XG844K_N%m#v6*-cjxinc8 z^w96LKwj&iB3jhcON$HRjORxy%jEK23Q?t8*Gmbik%P#5wu$GF2Fm%FW3YWvFuq)`4!f)ZrD;#XsE7~YG&D{4n`@Y$?2LIlbM{f zjUrB=wS@`05OGDlkb+dVd1KwhF3wbjN^W!^;4FHv3k8*_yHW65_`c_yr0t(zE^@y2 z`F=dl_q^|W&TEOm_*mlG{k7O?%*T#T9UIqqeZkmYk_ zLoaA^#gcZeI9q0Xy9t5#Oos(0JG(-^#p;|1AB0o>KRrkL?zEyB1mhNb*2(t#0`c+q zt@s}3e;E7`Cl=kw{RUOHSh z(uR)NVQfj|<2=vUA2OsB2BUF5X7&AH=&o zHTYdz6F;=$U&X+K6#vs>!3{CkWX+ax3%SDCWNW7d_jYD8>B0-e1)XNSQUeZ4Z%1oz zL|Tr1AGLs&S~9o7+sfCXmtA5v*^uOK8kH@RQ^PO;)9A^k-Ht<}u0wzIS@4w9#)v_) zy{_VF=B_1QH>7@asUO$Z;3J7fYNQ`bXlM7lZBXZa@|pl_0MZXxu+%)su>wyr!NchG zn|xAQl}uo6WWg6wfE6o-R-Dsji*=Op4A#3J;~Fp}lQhBISc5lY1}pZ=S)AF8Z`kOoGOhM?(*Gfj)>A}d3uL)j5Sme} zWajM(Sd&96Gp}c!*PP3_QzZI`U4Y-oSB1AC4wr}3AfO0Xkn3^-esL8z=m^gc`*#l( z#l-p)x-{)0(=2#j4l<)u)$G)?3{6UBq%FAvZ~TaITe2XiG-Wy2+as$1vnYZtPt+@l zLtU~7D5e@}!0RsYic37K>>}P(6KAB9Lc~{;RU}?jc=lpNujpAVuP^9%yKAl~Z4T&S zSOCg4I!Yx)x1&s*P-(Q@H5Y0Cr#j+Rx|7m$WSiTx(HQ4{r%~@!)UK;^_K;vIb&eY3mVKYP@_D!hU*TE{7S%SEEu|NC8j9L)=f&i- z;wZcnSqfS34f4-b@_CK6Ab(P#l_tEye)c9MdXbqhjpNH9N7>QD9hG#&69Oco)O<^! z8=cM{P&@XXtOH_U6)gS%F>C%&R52SeF+mj J!LN@6{{f)+r4#@F literal 1652 zcmdT_-)mcS6hFy5tVwfcmMpn#Ggx+i%hsz8Wlu`AZliSAmf7J%M9j}MGv-Qi)3qA| zna;iRp$}37hfENJIebu5D1#J=D9ejbBh0ZN1AVg!`Xalmo^$U_)BXwO;ok50e9t+b zb3f;MzS%NC`P96y?}przqcA;t@{~0_`|>H6OPw}v^pJBCQ)dZTO@ATBp;~D;rJ7Z? z>(&K3-+){37Ix*011^4>yp*^jZwf6ONIgCHSLoc~TRT=8f0bQ4bP)FZy0WCKDtn;+ zp|LItaC-IyIGO_GXC(rqnp1Hqr3S3U|5jKY02d!BQGa8}$~m5B08#Nz1+art>T%47 zlQ<)73X^!Ao{ell?BIktiV}`vRGh=>PqgubI)@YVKB!8BOX%VwMTEDjxusJ5sfLqt zO4KEQGwQwoqzb}=WiqL!Q!|rPVF;S)0GxbjDzL-wo*IG6evT_tS6*FFzb5Xl)W}F1 zzf<$-JD$Cvj(PUs5f?vD<2}}5y|PfLoquj8(#7xlyMb))R8=qB z#k}4-DZ%Di+}1DaNhr*h3U6BeSMS7S#Hh*&Zs>7oP4csZppDx^l@XWq4&Dn&^U;iW zPwU_xd$510)DRd!`hhknVujibmMc)#gNe}%WvzRvO0Ly z=ohqT_|!#%3EH@5@Zsv9LpBpHdbo?Gv5R=uVHwlL4JQ8B$PqCgACBX$NG7k`R6EhZ zABd6j-yRy)u1fcXSenspfPNF8Tb}Pf0lFTbBcAV|>1Vhbpnm?e(N)R`9^^|#4CYJK zs%>4g>(wH)&L6~t!0%$!{lA>ongUpD@DjpI$}LBhoa;wd+)Rf|K2XINv;7Jdl7hle%3oLcxA ptsf`+3cBX|CiDMD{I6ztpdKWSBqN7d&Hnx0!Y`?&6#Xx__#e?Qn?e8p diff --git a/game.jor b/game.jor index ba5c97d..857b9a2 100755 --- a/game.jor +++ b/game.jor @@ -15,7 +15,6 @@ JOB listen-for-jobs ( T I C K ) defer entities -:noname 0 ; ' entities redefine : entity-at ( x y -- entity|0 ) 0 >rot @@ -69,9 +68,7 @@ defer player S = if swap drop mapsize swap drop >= else drop mapsize drop >= then then then ; -: no-touch drop drop 0 ; defer player-touch ( x y -- b ) -' no-touch ' player-touch redefine : check-player-touch ( x y -- b ) 2dup entity-at dup if EVTOUCH entity>do drop drop 1 else drop @@ -90,6 +87,9 @@ defer player-touch ( x y -- b ) : try-move-entity ( e -- ) dup entity-dst check-entity-touch not if move-entity then ; +var queued-level +: queue-level queued-level ! ; + player :tick 0 ^LEFT key-down if drop 1 W player entity.dir ! then ^RIGHT key-down if drop 1 E player entity.dir ! then @@ -108,7 +108,11 @@ player :tick ^SPACE key-pressed if ' hello-world JOB send then - tick-debounce ; + tick-debounce + queued-level @ dup if + 0 queue-level + loadlevel + else drop then ; ' mode-move MODE-MOVE ! ' tick-debounce MODE-WAIT ! @@ -128,7 +132,12 @@ player :tick draw-screen draw-footer ; +: reset-level + :| player yield 0 |; ' entities redefine + :| drop drop 0 |; ' player-touch redefine ; + :noname -MODE-MOVE @ ' tick redefine -' full-draw ' draw redefine + reset-level + MODE-MOVE @ ' tick redefine + ' full-draw ' draw redefine ; ' onload redefine \ No newline at end of file diff --git a/game.prj b/game.prj index ac99acb2463a5b251e670d5ef907952f71c206a4..ff5b3aedf2f23cf47e04247ea310029b7a965cb8 100755 GIT binary patch delta 312 zcmX@2c|>!AIvext8CjdP*iNwV-k6c)7pTC%u-ch{A%F9Kp2dvJ%#~T2m-0C>GILjE zO@7J$&|8zSh&h<~|9>IoXAEA9*31gbbD6>!mosi+)MGAY>}R^jw2J8$(_Th4W_6}} zOs5#HGk#?_!nBfvZ$bLeL+Q* z9~Z;orLKO846~Pb_=z#(R;BuhG8~x`>G%IXgGg)x1J49@24*k+pb!s*|3GbiA+Et8 zPOdI`KsN&o7G}r;im@;#aKwnQgGmlB$;xnXNu(b?1IPlHaWP_gdjCN{PcH_DLY!kJ l9~3+=d8^QJL6EW#PaoG{Jr4%3lF7Nk4a`8JCw~yW0sy$`Wn%yU delta 253 zcmX@2c|>!AIvew@xtW`_*iNwVZk(IxcT%2#VVW}ogZJkDJc}8bljbLHUdrdl$h>22 z=H!?B552!K6fp-g|Nk$D!%($QN2-9|^Xr|AMehdd0{1_M*1Q@s(mIBT56x3z*oEJH{Qcy;n({juFgsJQd z%wGOMAs!0Jb&xo-8OLKKY;Ec2;4ATR`1=1f>Ol xrud069GMg8_y2#4n4aF`jY6vhL4qNkKCZ!f9t{71di^Hn3O6u=w0sc00suw9Q)d7G diff --git a/gameboot.jor b/gameboot.jor index 2080b7a..8140a93 100755 --- a/gameboot.jor +++ b/gameboot.jor @@ -9,6 +9,7 @@ REPL start-repl defer tick defer draw +defer loadlevel :noname s" input.jor" loadfile @@ -17,6 +18,12 @@ s" timer.jor" loadfile s" footer.jor" loadfile s" map.jor" loadfile s" game.jor" loadfile +; execute -s" pete.jor" loadfile -; ' onload redefine +intern pete.jor +intern petehous.jor + +:noname loadfile ; checkpoint _loadlevel +' _loadlevel ' loadlevel redefine + +pete.jor loadlevel diff --git a/input.jim b/input.jim index 6c9b75f17185435a1f961e64cdd52e4507784bd7..4a26a3ed62851f1b8586a58a6a7b57d03953b993 100755 GIT binary patch literal 372 zcmXw#O-lkn9L67aCreSvbmmlsoxFIe=!FnOw~TyaRlL-O=|aA4*lrSZ?3mCe=o@s3 zx^(cK$LLbv(N7`Re}rz&Z=M%sX2bg)?1`o;%3nhahE`1CG2}v&y9sh7O($H#4qt$g zEa@4db)>igI8zyGnsw z-v!wo5n)3%n?=|}87o8P!dMwGKb=mLDI0Syu6yR~rDNMx7jGe8S@>Z$YOPq^ytJHd z&7`S=U|9UBQ?@DG$mYvMO+MX)_&>^jQIHiLbS&q_tXuu=yfvWCnOH=vO@n5Ae(R

SCGEM!S1FpyhGeNP4t z@hgM5gZ+fW6d=gl%^anPvIvMNG>a8CQnjz}7yx?-2DL916?I>at%*f8WFg^$XW2Ek zNP(rU+po6P6z6c?Fc_k&+W^S=ekY<1_#c>9NbE|8nNt> z<2A}QP2J76#E&*)H?*J16bxNHUBUf7%70PuB&Jb!ybIfMnvHR*L!DPKiE@nwZEJk% QcM;UWtR+6Qj&@D{A8uq?ga7~l diff --git a/jorth.c b/jorth.c index e402a0e..ece3d7f 100755 --- a/jorth.c +++ b/jorth.c @@ -1,3 +1,5 @@ +#define TRACE + #include #include #include "jorth.h" @@ -29,6 +31,9 @@ cell *RUNNING = (cell*)mem; cell *TASKS = (cell*)mem; cell *stack = ((cell*)mem) + STACK_OFFSET; cell *rstack = ((cell*)mem) + RSTACK_OFFSET; +#ifdef TRACE +int TRACING = 0; +#endif #define QUIET (*(RUNNING + TASK_USER_QUIET)) @@ -432,6 +437,7 @@ void f_cdef() { // func name -- } void f_docolon(); +void f_revlookup(); // C code must always call a colon word through f_cexecute() void f_cexecute() { @@ -449,9 +455,35 @@ void f_cexecute() { IP = oldIP; } +#ifdef TRACE +void f_traceon() { + TRACING = 1; +} +void f_traceoff() { + TRACING = 0; +} +#endif + void f_colondispatch() { cell codeptr; +#ifdef TRACE + static int printing = 0; + if (TRACING && !printing) { + printing = 1; + PUSHCP(W.p); + f_revlookup(); + if (TOP().s) { + f_puts(); + PUSHU(' '); + f_emit(); + } else { + TOP().p = W.p; + f_dot(); + } + printing = 0; + } +#endif codeptr = *W.p; if (codeptr.f == f_docolon) { RPUSH(IP); @@ -1076,6 +1108,10 @@ void f_init() { PCONST("$DOCREATE", f_docreate); PCONST("$DOVAR", f_dovar); PCONST("$DODEFERRED", f_dodeferred); +#ifdef TRACE + CDEF("traceon", f_traceon); + CDEF("traceoff", f_traceoff); +#endif f_loadfile_cterp("boot.jor"); f_loadfile("defs.jor"); diff --git a/map.jim b/map.jim index c61b8e52f43221c5235ca58a221f72e809f61513..53506782b85dcbf158e86da3132f497712ec5c85 100755 GIT binary patch literal 749 zcmYL{%WD%+6vj_x&e$YQL&(&jySaCuabdcW5ZCkCg%MR@d>phSPDU*PRxPNg0zy zggG$|>&@GNyU}d>jia=a#=G2aE5d1!I_l#%8Zjq6m=RV5#`$rCiNBOkIn0Ghgx5t9 zYUTM$<#Y2F;n_q2?vQZda`oC!P~a&Aa@Ml%tOP`sNPr6bB&hN8QjEbudGTsBPRPQ0 zN+4SH&(VB&eO2tMZ$+r=tIyR4`;@og_-oD$-{tokJLun>yFeHu?kYBx$A4Z zdbi3n{3L+h(^Pp>aZg74P^;!m zbAXQ|XVt{2I8dj=qWOTd*OK?E7$XC+7d45fq4sbrLQ@`xdb4$xaRPURXlAge?`86O zg|?J8RATAhUjb*2MfgUhq3s6Vz0na$Oc^|k5fz)4P{KZD>=NPeau{+30V`;eqhPbQ zf}65L%Jz64v$ly>&_s!R6~4(N1WtDpexGO;w3H#Sr}gN|RNpmEi|~w{1i$Gth8KyA vv)VSbqRyrrZPH+yL$+nl_lGuy;gtVC9|;KXFjt}5d!UY>UJaq9=qUdJ3cta~ literal 664 zcmX|7J#5oJ6n;5BLmb=yCNWZxI9~+}P$pW5fd&Fap(0%UyBeJgM6mkC}Vc?y@>*@(#(|sAmAezve(VPU5F@gCIcGq_l=lKZjOG00=2qS?D>Nt`lfu&f(>PA;Nbt3jgO(rF zZ~LqwiNc1(G7e-b4qU=b98)Crot + swap ; var tileselect -8 const MAXTILE - +: invalidate-map mapsize mapsize! ; : mouseworldpos mousepos scrollpos +pos ; -: world>tile 4 >> swap 4 >> swap ; : mousetile mouseworldpos world>tile ; : tile ( x y -- ptr ) mapsize drop * + map + ; @@ -14,15 +12,25 @@ var tileselect 2 const DRIVABLE array tileflags -( grass ) WALKABLE b, -( dirt ) WALKABLE b, -( water ) 0 b, -( pavement ) WALKABLE DRIVABLE | b, -( brick ) 0 b, -( forest ) 0 b, -( roof ) 0 b, -( brick ) 0 b, -( window ) 0 b, +( grass ) WALKABLE b, +( dirt ) WALKABLE b, +( water ) 0 b, +( pavement ) WALKABLE DRIVABLE | b, +( brick ) 0 b, +( forest ) 0 b, +( roof ) 0 b, +( brick ) 0 b, +( window ) 0 b, +( carpet ) WALKABLE b, +( wallpaper ) 0 b, +( tile ) WALKABLE b, +( door ) 0 b, +( cabinet ) 0 b, +( fridge ) 0 b, +( countertop ) 0 b, +( sink ) 0 b, + +here tileflags - 1 - const MAXTILE : mapflag? ( x y flag -- b ) >rot tile b@ tileflags + b@ & ; : walkable? ( x y -- b ) WALKABLE mapflag? ; @@ -36,8 +44,11 @@ array tileflags dup MAXTILE > if drop 0 then tileselect ! - MOUSEL mousedown if tileselect @ mousetile tile b! then - MOUSER clicked if mouseworldpos world>tile swap . . then ; + MOUSEL mousedown if tileselect @ mousetile tile b! invalidate-map then + MOUSER clicked if + mouseworldpos world>tile + 2dup tile b@ dup tileselect ! . + swap . . cr then ; : copy-mapseg ( neww oldw y -- ) r> ( oldw neww r: y ) @@ -64,3 +75,6 @@ array tileflags 2dup * map fread mapsize! factivate ; + +: fill-map ( tile -- ) + 0 mapsize * for dup map i + b! next drop invalidate-map ; diff --git a/pete.jim b/pete.jim index 93e9e96dcd3a3a3ee8e59864f24dea321975adb5..1bf0905367793a5afa59c178db614b8b41db5f53 100755 GIT binary patch literal 241 zcmb2s(pP?_`JCaI=4nl4hUCN|hOHvMG#^PaF*Gn-VBis8VA;>Y$Y9NUl|@Pm#OhSp zuCkKno#t9`d)2ezVl01HcmzJN*l6(x*sI3zF{ugyRhntN(~RTW&%(g)2dG<4#fR$? z%Qm12bDkv<#%drnH9%EuT6^U`vD9dJmZ%pil;r0tq$L&sX@&B{oNN$Xl3$*u$B--! zvh_5}IxTaa{VY5T`&rl-8hEa2rNz zc>z=*#dAuWM-`-|2B>P8#$&lpEORtGOVo=MO7im+(h`e+v_g4ePBw@x$uG~-W9XCv z*?OAgfrb>%eij~v{VePZ$vjtC?r1>lx&k)kl17NXi@%kEd%i+Oer_s~E|4oYdBj*i bF5S=4qY84%Z;gV~l2pCi!~%vU#Xl?nHhD}t diff --git a/pete.jor b/pete.jor index 2416acb..09e6907 100755 --- a/pete.jor +++ b/pete.jor @@ -8,15 +8,17 @@ car :touch ;entity :noname - :| player yield + :| player yield player.driving? not if car yield then 0 |; ' entities redefine ( TODO: DSL for touch events? ) - :| 2dup S leaving? player.driving? not and if + :| 2dup S leaving? player.driving? not and if pete say" It's too far to walk to town." 1 else 2dup 12 7 2= if - player.driving? not if pete say" TODO: Go home" then 1 + player.driving? not if + petehous.jor queue-level + then 1 else 0 then then >rot drop drop |; ' player-touch redefine s" pete.map" load-map diff --git a/pete.map b/pete.map index f64bffdd380ee460bed6fd5d4865e266b12f26f7..29ec624af1b850d2ba6a1314cfe1859d8f8d1487 100755 GIT binary patch delta 13 UcmeBS>0#NR!N|xnS(EWG02t~6rvLx| delta 13 UcmeBS>0#NR!N|xwS(EWG02sXko&W#< diff --git a/petehous.jim b/petehous.jim new file mode 100755 index 0000000000000000000000000000000000000000..60bfdc78fe3b9f0170347bd9773efa2efcd7a5ca GIT binary patch literal 107 zcmaE+sjqxmGm+t$CXYa%=6)6dhW#v@43EX^RnLllV$sp!5rBwsF*NX8Wl_`G&%y&# z!2wmVLi4iveilZC(=1v*83u+wEc;nzsrhhyVsX|gNG(at$S*C{%S|j`$W!{m0swU2 BAMOAE literal 0 HcmV?d00001 diff --git a/petehous.jor b/petehous.jor new file mode 100755 index 0000000..8069463 --- /dev/null +++ b/petehous.jor @@ -0,0 +1,14 @@ +( P E T E ' S H O U S E ) + +:noname + reset-level + 16 9 tile>world player entity.pos! + :| 16 10 2= if + 12 8 tile>world player entity.pos! + pete.jor queue-level + 1 else 0 then + |; ' player-touch redefine + + s" petehous.map" load-map +; ' onload redefine + diff --git a/petehous.map b/petehous.map new file mode 100755 index 0000000000000000000000000000000000000000..3f5c16175e043fb340933e94359895357ee31689 GIT binary patch literal 368 zcmZ{fQ4)Y42n9iNEYj)#-T$0{P-)tJy;Y`F2GIl0!MMN`g6dT7wWk2?T zOO$C<+TNnn&OU@VazU1X-pOfY(cZ!1uUCdHyk2p75QtV-HW#Z}i{5yG`9 z)#NKur&1}>MFzuVX5X%K5*8d5*v-vpcHVpQ-mbis?Ca~UI#Ei!Q>xKa4MZQohKv88 z@W#b&QE$4KeJvL^5uYNa{~P?|>M`QarT(vozo7OV+~B8@=SIo%sN`V-9pVN`myTDu zWzsEi3G)Zukj9U8{$8m7=yC~y3}h(EmB_f*4lG_7N$QndKnAiYlLnVTe3=IA%vC0O zVxb3vfdQEq5FwxkHj$hy^ffrK2__h`haO>bjoctXlepGrW#FbK^oR?GM9@P@rb)^| znqJ^VSi6@bj8n-|wlF7>1SWJ;J;)`u+Y@nUTY8b=$G=H*;s9 zxS~>PIRi@pj)J7I|I5bTEwW}exOuG2ivw>f%{XXxodb1c*hFKP}m z3$*RYp)7H@o9Ex`9>KX+NrM1y)i_R}U<@JmQr8uuPRh!@u#!iR$;i+bPr4 z=L?6mG1J(XSylZf2i<$!nH#%(l$x!_YKp&iAO0%U9+lLeyIRWQWHof~_0=8@^&P73 zjc>N~=M)bQg)oJtg{+L8=CO0~4cOY2+ea49Oe_i2~m>n#?m&*5Vn^PB!!itn5ufoVnB5xi$Z z9y@POE-!ujp);q(M5aB$f^$pZFP~X7I-oP)V#^V#C{sUM8xHtd+ delta 26 hcmaDS|4x2G8tdjt&Rn+54V=O(90wQ}8X7n{7yyTL2#Ejy diff --git a/timer.jim b/timer.jim index 7078a5c3bdbdf1f6cf06c13bbe6dbf0d538348e8..2a2e84abf5fff52b5c547f4b9488d0ae187bb187 100755 GIT binary patch literal 438 zcmX|-KTiTd5XA@Xfq%HdU^wG$p{EHICN^keXt5wR#KOv4U~`gi2RRAaTk-+yY_+ha zF@_ItoyGVK&W%g9)IIVmhB)PBalt*nI4UEnWO8jQvF5K0?e!h OTye#VH2%kAMvXs5C2a}- literal 438 zcmX|-KTE?v7{=c;Pph>Np<>|9DY{m0=~PX@!6Ld9oLoYC)Iyt<80z5QCvb9ca#vjX z0ZJFQpo=&uf*}124mbE-(#kD&zvp@0KbKqCT%X7%t0uNZfm*$wKis9qHR+t#?>H4M z5=4S91(6{k6E}Ss?(tot#z8*{;_iThC3rYwVPb2z}qdMX-5Y^vfx__z~>KhJsi&nuYauEnd+_!LMpEY-`$8yWl+MT(