From cb0de3b26ba87ab5a491ee113a5bf359cff2028d Mon Sep 17 00:00:00 2001 From: crumbtoo Date: Mon, 4 Dec 2023 19:52:35 -0700 Subject: [PATCH] bhick --- .gitignore | 2 +- README.md | 2 +- doc/build/doctrees/commentary/gm.doctree | Bin 13822 -> 13821 bytes .../doctrees/commentary/layout-lexing.doctree | Bin 42871 -> 42870 bytes doc/build/doctrees/commentary/ti.doctree | Bin 2901 -> 2900 bytes doc/build/doctrees/environment.pickle | Bin 229766 -> 155471 bytes doc/build/doctrees/glossary.doctree | Bin 4860 -> 4859 bytes doc/build/doctrees/index.doctree | Bin 3603 -> 3602 bytes .../references/gm-state-transitions.doctree | Bin 27884 -> 30140 bytes .../references/ti-state-transitions.doctree | Bin 19924 -> 19923 bytes doc/build/html/.buildinfo | 2 +- .../references/gm-state-transitions.rst.txt | 64 +++++++++-- doc/build/html/commentary/gm.html | 2 +- doc/build/html/commentary/layout-lexing.html | 22 ++-- doc/build/html/commentary/ti.html | 6 +- doc/build/html/glossary.html | 2 +- .../html/references/gm-state-transitions.html | 104 ++++++++++++------ .../html/references/ti-state-transitions.html | 44 ++++---- doc/build/html/searchindex.js | 2 +- doc/src/conf.py | 2 + doc/src/references/gm-state-transitions.rst | 41 +++++++ src/Control/Monad/Errorful.hs | 1 - src/GM.hs | 14 ++- 23 files changed, 218 insertions(+), 92 deletions(-) diff --git a/.gitignore b/.gitignore index 6b1d9d6..1036c23 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ dist-newstyle/ -docs/build/ +doc/build/ diff --git a/README.md b/README.md index b136197..8dbe36b 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ imitating Haskell. $ cabal build # Build the rlpc compiler $ cabal install # Install rlpc to $PATH $ cabal haddock # Build the API docs w/ Haddock -$ make -C docs html # Build the primary docs w/ Sphinx +$ make -C doc html # Build the primary docs w/ Sphinx ``` ### Use diff --git a/doc/build/doctrees/commentary/gm.doctree b/doc/build/doctrees/commentary/gm.doctree index fffc47f5f3accf0a5d7eb4b7c39076651cf857cc..5bc5af5954aab842860ba3acc7b3b72bfb7fc992 100644 GIT binary patch delta 24 gcmeyD{WqJXfpzMqjVwDE8679@W7OXKic!P_0F8hN_5c6? delta 26 icmeyH{V$uPfpzNVjVwDE8J#BYW7K9W-u#kL!~_7KaSCey diff --git a/doc/build/doctrees/commentary/layout-lexing.doctree b/doc/build/doctrees/commentary/layout-lexing.doctree index c1222aa503864b94693620486f2eca24847775f9..8182c50b7f12bef99efeca9dbb38f12a04519a06 100644 GIT binary patch delta 26 icmex`N`7)lQEF;RX3>-$5vUoZC7C&T@db$`89A9rQ+hb!gG-765=%0sOrE0A z!>B){hc&b~wWxSX4|{S^X>L+Z>XaT%m;B^Xkfp^_df1ASGxGCurt~m72RlybVJ^xk zn9{?XlAk=KhcyZ0pea2ZP-}~)luQW%=_pDDxgdj6BZDi0JA)^KH-j&OKSLlxu!p(0 zC>g3MIX^EgGkr=AFVvkdKAST{0`57^{Ib-dqRf=k;wiOLdRU87OG?3>O|2+N%`48# z&nuo1I|UJB6(xF^x#_teA13y&7Zl}Zr6!kv9j-p5hch|9pt2}4J)>kwkF1e_k+F_K zZemJmPHJXeszPyPN?vNE!qM3|iRp<`de{<6OEU6{ru2wmC@F@h5J;^^&M8ev1%+-& zY7x{S8JX!BIUpk(vvNgv6Z0q{QNqRFDgxK8nvtEJ>}1FDOb)1jkgwJVpiv zu9(u|)Plt1?8Nlc>cre)kk@Nb1WOW=N^=s6iV`bpxwvBTQp=O`b8{2(QmSK0iW2jR zi%N4+Yom=~xfB!>6slvAQqwc@s!Nh`ifXHCii(PIl51+gQXpxCn2emvyi^2VO+ndE zAtnYP5R;i(kdv8Ote~c#Y=kO<&>EAPmjbau0o_UIxdhx(l#@eO2jykvU=Xvq-I|<(kqX0*k!N+{E18U7Hh z>_w?Lsfop@Z~@km{FKB>IF}R5jZe!hnc@f0!GXwvOsRQOAcEXE`N@ensqrb9Mc^=G zhwzK1BtqmRAb|kSzTnW#O9W*~vFf7y{E}L|YM8mT)u|OFwNQf<(o;)HQY%X06LWI% z%j45ZtEwvF!C5RP5tQAFr*!tPL)C!1+9QJ`8DCJ8pI($&TpXXAlUNKc5FpOs$_1AK z@sKh%GcP5z0%{)z$T48?jBJQn-s1eyqU6;0;?lIV%nDF>$)Z}r7<584g9^Uf{FKt1)Ob)}7EkGbNC=hWC&%X}fr{z))Vz|S z%v89PJf>89aYlYQwA=(G*p&R-#7tPs%9a#m=EkSx=a=N=m!!rQrKY78rRIUcqaZOk zbqdraJYXXrrF$_gNMypIov$P{w*XW! z7lSH-j482GAnBJMCLW(ul$nwa3K5W*J-peesRi-niA8ytdFgNm2o{$X6oBI&E)xrh zfF7}2P}HQPR>Xq}Zcw#RlnRPom_=Mg#U=5n1(`Yd>CjN`0Sgrr8Zu>rA0X~r*PzDmK08FSbK{FM)AJHRDL)=m zcg5$V=B1Zpz?{bqsxRa7N^_G^i$EC{W``hHJhiYWH4Rp9LJJjcunfcrutdyNl2aUC zmRgjVRtXd01_>o6CZ`sa6vHgzDlG=tk`8Ln!AvX8O)M%YEX^-Lqo{|v*5r$Ni1*J(jnZ+5YMR4U1aYWUVp$SpX4>mh9B{i=kGc6O;=3+0+ z%g)O$&zk~K0I|F{8QeI_cn=Ze0P8BvOqr7L9ukrecPE3ItWz|Rh0;qiQ&M3<5LXlw zrGl##P*g#bLR?XhUtEGJkztu(1+ftlX3!`{Rn!9sijw?fXntUZ7z%MYNVv2BmNwx^ zi<9#UK-E38Ll7bjYSBRIunvfi1i)sdq!uR^Wr7Pmo3^R{?0ZDwQCA1Kd1X2nFm(tM2I5-9N z2o>e1D=4HuyG7v299qZ=fQ=~5$S*31FCnBDVkUA0)58hYpOc@SKgAE?S{|@ST4Gsd za(*6EFvB{-1}vLln_&lL^gt~xNi4}sM)egx*nrfElA=UZ2~n^_PGWIMd}%>SVo7QW zw50G2O%C0_Gu5(p>0q@A+1{Eqyp9l^>RT@W(mlu)QTyc z$YBA>)$x$#%#;p@1jHtAl7vWr+yRpm13LpD4r?{_u;`Uklt7&V@gK-3`30$Y#i@x! z$r+#qCz69ejd7S>XdFUZ3bG7M0%9E4K_KTsx}s3WN6(#Vffp|W@w4|W4Bp%VeV+FVGpx%SzfaLt#g2d#Kcu+qF9!rpj zhg7kkx)Iu@>|xSVfNF+V0Cg+82!;j$)TiJ8LoVLI0SB=bspoYZ5TQBqP+Y^ATCoRX)PRh*KVlUY`z zmzP?ipI4Bp4^``6te;wJs$Y^?p_`kVqniwJn_gBiG}OQi4v>lHB@Q1{dpxw*1l86| zF&a~Pm|`@iq(Ynz*PN1BT#%DkIR&C98l)%|rU-5jbW8;rBQU*2@z}+U(Z!)%6;P`a zlsu+%WTb)WZ2_1#sNV!C6krlOFo{x7mDmYUEd&!xEG@~82RB7vwU88C3Q@Y0Bo?Ko zmLRG`ahMu#u?6cdfre!y-9mkQ6#N{0T@`FxeH}f092{L-f?R`x?WRC%7DZ@>2OO=F>!OG9KpWf6pxTbfgnnVg?fnwvMJ6Jj9Lfgm*%nRzLdFmXwUj*|R>oYb<^ z98k*{6my^spC3f02t)-&Ne*@t)L3xQ1F74Y^75h15{765%Yo{KqSQ1{g8{6M4w<7 zCugK4XCpc=5C=#jWMB<6Sc?JSGbBaeQG(Qz_#)7NZEA7}xXy*zotc*nu>;iHg}X@- zVM9@BVJWB|mywzXZll*iV?z*G38XXa%?NQHl2l1%ZfbrhXqW_SACgRYeo;24&F{^M zp(!yhIU~OaR6l?{M8001XJGCYR(F!E=ppab{k6PAaJUj)ymlvMfMJ3tWu}mZVl>=B4Fh6bK;4 zWTenVCa$e&r1b`LaG8%Ggl!$O#wO-Hl>HxH?uf7H76%AFEzguG>#4}AB12Q zU?~m+U~-tb3nqg-Gs9ht2$CKS*q{kC8HvJ-$jgsUNi9jt%*jp7D}|LN5-{21qWt1w z#5fB)ZGfyOfrV>w2B(nkTc@O*0PSP&f_k9wd8y@~E<*8?9+uL)OxVDdFjx*W zU<7Y|fQ$x@AA(#4HX7PxM`@OTRd7}0=72^`OG@Bwq-ZLF0QxB~yBMN-~O46I0?r6=}|tR7f{UJ~^JK zfeZ2Ef&xf07*s*$q6`ax!$Ais^!S|o{Or;K zSPBtFNPtrrXj%#;r;(LdmI&$Y5$99M;*z4w0;FM_q{QUx;+(|d4A@|eVnJm|Mt)vA zsNO5hD=baS0rlcj;!7$EV55!DK@1hBN}{}{1XT=eY=Ooei$Ja9lGLKa9I)Y_nhqS; zqKO3sIjI?`IR)`arFkhi5NjcWBt4vPN$_BZFq{iho0&4jFUyaKfdSOM5z%U*%7*tY;6f;Oc z4p#;lNR369C5A8y?CaDbXy1WfzqGhWKPfX$KO++~D~r&A6i{$;!Htm~LAV~61VWbr z!lIPSV$kdisJu!o$^)g%{QR6^q;M8UNiBmUPL$!h9(JfWI9&>YDmpY(tVKDXi3dof z3-0iN6@Z#+XkA-`B&Z%oljJWf0qXN!L_IWR1PFw3?8V5c360z65!U^lpfZ+ z{Jg|6XfH|xSq`~b2Qo6lG{X$iU*dz!q@|Q)7Jz0q*q{uEG(VDbaanrqlpgk!vP>`w zqJS5s0Nl8o(!&a&!IBvk9bg(UT?a8cKCvhrQdh9)rYGj+CQj*LHq`MRKaLeNYV$eTSvD6WI41Uo9j zIKu?YK+Hda>eG_^{G5`^0#I!VG9km@3*uxsfQQRS&T0(Nh~QX zp5o2eBa9*fN^?btQ!@N}*iy?<^Gb@R_#sWZ^FanG^x!QW_5kRNJbZqitr)sqKr$mg zqp)>Kk4Su4CTK;QTnH2U%r$E;g0Cpox~$yb_SvC7DxtIMQ?Si;Kb4xdf6_PGV(# zX^CzQs1=w#WkQbtIH$*#fE$D$mx5Pk@W3>Kr{b~>GchpqaDtrz5jX%65JWOIJr^Re z4v}KF+lBakx_eh`%W+djNrxvG{fYPTpx@0D()s>$Ik`qFgD=3)a z%?V#D1G5AiJ0SIvXzCG77mzcA(PTjbI8(ftdPLF0A-YoECDlm&cle6AT7{bLR zDIjy$Am&W*wkhoqf!6MsdFh~W8pv?$l+GR@6!Bb8VFH?FhFSoc0_G@AEddRbgZh^m zJ$&GCn9LMV3mG(t*u#{WGNp$X)L>1G&&f}OOailj%J3;Y0^rgB(gQEfNKGx7(%B=L zoRgoJ9iN(;n3)rwn34jTvjmO#_V5&>7Q}-JcyKeJM*=ofR*+gytOp4K&`^v1lpa2i zN<`9};@87dl$MO7R}H2&C9x#2q$n{tJGDqJGqofQY(PqWvOcJ)0+|HThhh?6W**9T zXGUocA867OG&Ub!0a|?l3N+C2hvL#CaEkygDhLtiQ`eF+DtBBjaI{gQYzji8(o-ya$O&8yo)`0ZH@0P zZnn}Mo|IJ3$X04zGH9Z|hdVhxCkL_urFcpYH*_8W4IWajS6_jBmAY;%V2@pn+g!sLOA5t>tC8nh0<%5>Sfh$MwpyU*I z&B|GnSPrQ~LDe%yazOSaC{cp41gH&KtOwDa;Rw@}rOwR2kl~-D!OXxAJ4GW) zi-r`pXJqE3YE41a!xEBO0ggl#kh&?YQy^;<*+3;! zUdfa!Ly*CoAP+*EouvvAV1qi?uLo2FrB3lHO@cUq12#F0<_c~sF32(i8N~^A8qD%6 zYfz*(f(RQB0kSd6mYIRUFUt-@mL?_ka3PHnfa)LSOmN4)haEf&2p(?gVFlHF;LOdD zQd)rEfcmB2;m_D9r9JE=iRmDzDLn|MLmU9|d1+E=mM1d<1E}Kk1_yPPFNE@kP=OFC z7)+IBg@SwpjRuG*Iv^jQdZWitAH0}TAG(xNAHI-NAF_;7-#OS(zbL0bA5?^bat%`B z0@msPg@iX#X;PLpGXn!;fhjn?kxrR3p6yCnVzSR0X8Q$ zF)P1_%Mp}gb5e`d6*5v&b95AvQbFtNN-`2l6rA&O3!vsGWELxA=9Q!t<)kK-rKTv9 zXO?6rq=MGrfg?mgS63k47f z15*B?7L%}2kqgv;i3iW1qZW%je-TT?xvCWs;|&z76cXbN6|59ua#He3iox7G1uKPO zE;WS|E;WS=F6ct?q};@kqRa~D5^{*n7?3?BCDnexuu`a2A;wxEx+30C2V$O1MSNZ? zNGz2LyjC1;ikdTSJQ*&~nlWmP-tCMTFVnDMA)#Vwf zMX3t43K{AOwhAx@AQdQ~U?-%4>`aW$15p_u0%RK(YR(?vVF5|FkYqHKnSr4=iIk$M zhdm`f8Qd%aH{yFhD?5`?i>CO2hSri&bEf$9u;t~K7bO-<>FnXG$jz~W3<>sdfU2U@ zqO#N}(8dsQVnt8o{1E41r1CP=ZE%9LTarLa z$nw&QL2V^an=7#>9o#!8)Q;gFBRZy}6e(CKq!i^BC}=>o zT7hiQRxs35C{_TCMj7krD46KMb%Hx&NKJ)Mg;WK&K^Y3Ed1WB;!8(l)y5K5o6^a!U z6&2t%als7+>9kcyEJ}CE%u6X&(AHK+hnR#$>gp;OA`FJBw*@&np(?W=0b~ZqTg7mr z6N}Qp0t&XEJ)e$6>BR~e3dM*fDro3wG=4xqq%f%B2a>NL`OJldE5K)$K&HZn_EQxS6|^7*a}|TuXy+xTf^>ljIMDuU&{(>b zLU~4Jat3lk2;BNX47V#JmMElFq$Y#s4bX?Q?-2~SM-4Mc3p?28?O+H!)FJX@Je4oT z$h;!KkVkC*$`gnvRHtO)aS9m?Jj7@{$dAy``W}5!(*~qSgN_k_Ov2R$MK2bh#GD|k?19>aCWmdN6MjAg#5OE*oroa{Z_unB@spKOAw{XF z#R`deDGFhkd8x&qaSBid2d(=@X%FI4h!X1k)J+(O$;=*1gOR*#U7Cbmu=cQodj`PE z3-J68R0zevb1}`O_V|M>B;rtgfF+qof=cLO-Nd{U-7-*Y=w{~WmSm)YA_G0uNP(4t zBMz(-9C2{9SW;0|H^`shK@9u}2o#beBp_G#N zawqkM0}u&lGp4~v3CNM`1at(`TxusEXGj7<^#Mt%5;%Mkt3XK#ZFC+Xj1mV|sp};~ z99+UQ7%2|i$c}@@nC4PD4m==nfa(KSFPuB6G$$t&v>l=tw9E(FN|7w|kz;RA(bJNzhS9$yb2Nhk|#iE96-#1mqWhD5x4l zXA7-y+2ch$OJMm~15%W7BbkiaHu!}nG9X=fc4)I3b;zPe8tP4K!2q)zV!1FDC8&;I zVI_G4s)q#>3%DBph~two{2@((9=JCkNdx3>Skr|S9Brsh0?FfQkYq8lqAW1#k%xu_ zt|&(h4{;pIP#qvidYEMKvobK?=ni3qNR|l525=<<@+@W*M`kA~`^Yl*D|ytq z0^KEUm{HRsiCB1~TMVtqA?*-&e;L+hl|m@BQh=#d05?RYBxd1v82;7=s2V1|^&x|_ z^vg;ixUe*_7(5pZZq=gZ5d2C}YQF$bBBn(P#23?GMB?)X%`T!B-^4Xx<1o#ocI_7c z$$_Xoz^tw#6d4&9{PIgOlR;Bni6si_)Txec)}H7Efza+;Wj>|c1F1X`2+8`%MdT1VyJNy`|OqyTzg zqvm-ISR|lYQG&+`T$KyC)gZ__ur`4(wxobk@_WPRzU+aH>9KBnOCBt;GCb5s>#I#O)kO7pgE-AWS7)5(3BCRjsfXH zQlJ5m1`UrYBx!<-%hORv(SfdMP7MO(cZDQP@FWT9}kepvyRGg}#P?lJf z3EFT~3|$Nl-l&(FqEM6yT2v2ObOKpOfT*$*AXQ^-YGPio0%+|#S4l={r9ydTPL4uS zYI1&VszPR7VsdgRXk{CC7(O>2w5=3WjTeB{G2|C16yz6xWgtc+Du9+h<)kWrD{n5) z5<<|_L}C$mc{^x1AZSLQur#wIRiPMk8gi-?gsxP`PfIIKEkQD?9JE-z95vC80RKXA z2XxSSJ9P_7YzrG>AsG=h-IXR~(XIwKL0wN_s{s-ro;r%X1}K4+?9K}53L1_D1qx{j z6`(>JNw@-BRD;T3WNc#xE76@5G!l!_{UK@AP$6AYAq|&~Xy0tdf>^|u3}^zpXJDKF zNn4Pxxi(ZvUX-}RR`MFtq2$G|R~nL7!25`Fi(y?&UGO+O!ab0NOAlzHI&4ppl>%Hf zcnY?d!Y;BOmcBc0Nk*z}x^6CH_aTOJK++1x()hdR;H`kD9pEg)zA+|JM@gW&7{NyL zh=5Na098=nLwX>`e1ne$U@gf9omcA3(8C2&lbSNco1qla@I%_v*~6DyS_HZ*0CvKq zUk?vV1T>2|#jgjk&$~wubnsY7W=^qQT2X#pNoroolpeM)$kFVu#ZWzLkfR}|_+{yX zHb3@orl;nCI)M40)%cvC^FfPC5_3U!EpS7;1KASo*TV(nf=_$t;RPMi4chq#+Ah$@tWwqWq%xj6~28Kt-U-FiMI*dzpLq zA%Tr~4rh-nnhcr|SsH8%3_W}hb1_cw?2$p0K-1hK0P+L)sHCFQ0??VxQ_#1W_b{dA zP3aLXN=?o$N&y|E4LTJQvN_wYhYfPn#}vOFPQ-};8U7fD2xL709U;M+Qkq*34?k_d zuZIsT0N$LKmzV>JS$?nxIIV-W;v<9#ic?Ed^5ZLVK|4SMQY#Abi&Nu~b%Ik#a!Gty zW^pFyEMUJL{&?82H*i<7!*T~C`+KbhrWh7=)}>ppX#-iGfcJC@so~hwW|zoiCYM zpsQ+Nk}{=-591^Q)H4yX-hvF`EJ;j?haS7kkehY%B!I*cfLj zpdBoc^$cVmNykcHJCz{=G;-L(Q3THR;N3$4ps}x_)Z~(Q$eJDS?rg#0(xl>&%o6Z2 zn)npZ!IZV2t74Ev!9!@EUH2SCscCQy8))@v3h0=H9(Ir*XcIVStM(sIv+gH|=m7O* zT0z7H5V00Sc!4C`L4*^Cum=%eK*UE-8?A>EWD=-X4l-9G3uIPj7Ra2=ERY$USs?wL zSs=ZgSs;C#rJzn1L^aq_@IW%yQt)~!u%+NBcCe-3@o%uD;NfL7uOECNv%I|Y;; zbCdFO;FmCfm5LNsq6orObE25Y39}WfNeIP!*n+qoQFODQG7LRjnJMwf`K6$(&{NRP zm0)*c!OUGQP+3b2z^z?=MXD-{ZgQp+;)ON&AK%TtRoL3e}{D`X^=r79%m ztaapi#aKX5ri#{9u65A)L$O7gQ)^D;qks*tFF z?q<+n0_a=;$QS}>v;uTi0PM7UD}~DZQm#z!RT^N&muF;_q=NTMLI&ycGxJIm@=Hq; z%0cG_ROXi|fU5fRyv*WMJq6D+kamTX{5v6p~UE@=`NPGE$3lxQbFiM_+=}f*UIEc>wU7 zcEqgFcuGzsDV`oR%p@FB;Ps!03KYi`N@)VTBM_plwXpe0Lpft<-U0-3ZUW~lpzxpJRn!D>4G=u!U_O|;?&e!(3BOZ zeW{SBkd|7`m0pyZSdv<#kerd21KLIanm_|xYL%LzkW{IVSey(xh&wMGbjU_#Ze|L& zh*wBU1f3MD1Ktb_n;a|1F9F>jl9;1Vl%JRa-m*~)I-4T5QXw}pFGV3KH7&m=RUsEr zWPsKgmw=jrpc%uWR4dd$z~SjdlmxW~6z`}N1ho?sH;x4L33a*zUK?wmuULv$2|5p^ z0MackwuU7t@G&i*8D8*AE$C7o-IUa{%)HbTh0MIP%nF5km=?$>FUTsm3W`#bQ&T{7 zjsm#D3R#PqSX`W+oS9gXS(aIn2}**VpaL0G9hE{VhCGGDob>#n%#sYyc`Jz}3ZN5r zQ&YG~3m|stfNHh0%nBU^&;>GJ255~d=uk$5+{_9TS1EusDI_YS=j10P<|u#&wpm{Xk3 zRa}x^1P%?528j8ZdJ3Kjd8uWoMW9o4zz6gqBti4sMWuP5A$1*vjQn!2GSFB$S2DO- zNdhgb2Uml6pow<)nL41eY@j(E_fFA>6{E3Ok_s*x2Y)Q0l!K!&H-z#Z>XL(lv@hPF z$9(K%1I>ZsTE+kwp2oUD3$aFS7p7yg;O!F7DkZd)tP#5y85o>FL#q`fy2YS-XiGB7 zQWan)#Um;T@Ffq$pp8Y4rULlzYET0tDOI7gI5h>dJ_6B-2A$-^m53-z6+k;(Q!7e} zbrgzAlQTeyq02wg5_2xH3yXg?(yb5oCfC?h6IbvLJ8`mzIVZ6Q+_);% z;eskjEKX2JOanE}paRK>#im} z;xQgqc}VWEE|6DX%et6!6i^)kl7tL;!3TSA`;!OiPjCT%>Pr@o7^=}<2HcO3P6Wt{ z#Yq^EhE!CcdW9*m7}X=}?4*yhQ6sW=kgEbzCxQHgGuj~MI2FMz(M8+1zzVKZP`%6o z5<|5?h73<*tFe1nK!fK~dLUNxfX3%bi!!J51i(&;PR}gKNlenqfb{yo=R~JxBBvXL&hi=_*4eKBlRJ14^9i1-IhITYvTlz}E`8DW`$ z3sJM8`WVnLi)FOR%4`+SQcy(%#z7NRldKJn(hK9z*&|uEe1Gyf&C=480 z`s|=JYOs){b=w3rAi)m6F&=@D?MW}IJwZOjVLUC%YF2QYivq8bR$RvnkT=C~v?M9; zIPpb${s4KJ9ojmkz>~1p1-GnGOC1)F7^=}t1LRRAYf2g%u!zh|OF;D@Q)U{f|E3O< z|KJTOL}i1eu>p%LaAybAD=Z)}RL`s!AkVNtx?!k}A*pnQ`4ilQL-Qv{4Atn}1LRLp ztes0#x8d_P`g%K(wl}~>C%nZVN#-j3M?rdyh9hPhVWS|KC6(3+;Tf4ZsS2LpW6_iI zbJOyRAVbWcm0aLK-^`TMM9{oRqC#CB5QQ06%zR)_TQF?j`@t`i9 zl>$-S7gG9&uuWj7H+Vohr|27)AzfCqJ;LCQRhBL&D!{((fq5beJQEH*i5bgMk4OAj*)miz`5~BsriRN3^9tJ;xov}3a2C^zcf9g z1l%bqN`+iOuY+8BAk|~wE=5KvX!Jf;AwP{v3$g~OSPL`|51n-c8{`SuPXvw>(BMAk z#zKX}Vjb`ZdTL^ECg?1&j8ui<)*9E5TYp zYui)HKpUPEVdWRJ826^4w@?crHBgx2=%->7uAJ~7fw>P-zOq9@3e{*mJVsMg#Dd%m zD`HD%5jmjiDG;;LSYijIegZj%#$~xGw){ZS@i-EW3ZMmrpk-|VMVYy&MOF%sh8Jo~ z;#P*@Wl!oxEn*p=8>YeFA`nt6Xko4nig?b*z!07a$&sK9ETCB|&`JoTWDDix4Rq2g35S`v#D zv{EYyax#-MOL8i8p>5^V6fI3XE>F<%*}O!MIgq<~AkFT~V(`oysGv**9mkjoO)HQ| zM1`c(^h}V8L16>F=^T8(KqYwdFevyzzC;cw(3-~#&?>=luxdz*fLrHK8TbNCP{e_c z4+r%cxYF`-a`MYT>${3db5e`pYo;KDVuTV2F%NF5f)~2L0+I zG3@CEwZss?mbOqWjmKjtMHKWo&6u)=nI& z)iKt`^<4D?FA0NZeDKOR*osQzEMJn52q`#VSsQeGALtfM(Ar=~pOFi^4jSB`0`I&A zl^URvRzan$I%sJ`3g}8+@KtKyg>#5=Er9B%TL59pThN12t2ij`ZI@#@ z7SRO4vN);dIJPLvNi8l;1zl{2NcLFrB zn}(Ts;SCHj>UwNh%>vRHnlu1eEejfH$OTzuu|jHLX<`ndhEwo!4fpZ%bA>dfK^=vX z)S}$XJkZ)|P%Q_m6S+WD9c1>rW5plQz`VdDZ-Q0khVCiTtO2cR! z?NgKuBt@;FeTpKbC6}cJ+Q_L6A~aaQw=`>l*jk`7BEh4GS=t~zcsT`Xn+`E_2o^X-2(8uFvdwQ5{aNuD3C%0h(ap`xJvwozTliq z0MEgI#ukY`msQ-Uv_v5sw8z#l3AEi7Iz3>In$&QrLWzaX)J=Pc!PF0!1|xbB-tJf` zg-ehjwc^Bb@Zo6+kn$Hiyr+<=vhuBp8Xpj)JB@a0Oz;y{|({yrvUUF(to*vA3pz#kb(4lXj!Bud* zrJw~Gc+Si#1&^R=S%Eq`xy1_QMVTcfsd)Q23H}FQn?sCnjbaHBq5^FCT_@$Y4EmdBI0@qNV1$aXc6Q;^NHwJT5L>T}b1w zq$o8vHK!7knRD~=6u`v*Vx>8BojX@bVo9O`q)=9{RR}FkErQ%qR}C&2KvpOyfR1)` zE&^S^3O>G1N1-SaGy@Knw6anF*H=)Py!>*oFho;ueo;{+Sf&>0u6)p`4&V|jv7`jl zy3bEZ$tWxSx_l3ODhEgje0B|KN0%a3VjkF4A>d=sZ9!*mL(K)d9OfMe4YC7^ zFx)znTsIn_&=bu;p*B<_6jC5Vav&c19{Fmw=lVdJ1ltMa3mKm5@^@xIhQ2CFW$7R9ZpKeo4s(b!R~b;X)3mDNj`> zPOMabRI~O9uqkuMK?YD^&{_)6x$ofaFi1OeE*9K@1z8Vj<{-}@BRaX6c?$VODXB%E zwq0drYEFs*sQU+=`o~V(76?$vLTsMb^+P06M}YrxLnD z8oJ*ik*hd0CpEbQbbbtcyR?pi26%`n5p>#1evv|IMRF?m{$Xnc$RJc|PGV9%=$L6u z=;_taeULe+B?(*_kRc|>p)+WAq!(+#_j!X4R!>kMpc=N}AtfJ8X=+6Qw4nhq6Ep?~ zbwhp{n##l+&=42sJd)I6O)ls#8t8No$O?_(R0YrwHfS{rq(0A1O#z)IQe2!^RH*<8 z)y&jl$PgR66v$1?OH2n*tK7tr46B5gvcw`#!yq#+9dw^mYF<9Ly#l(H z0=o1C8o%(K7&!7Eqmx{qkU@-2>VS{Cf}0E)qsvKE$Ww?ZO3X{oNkuasQ7kItBxa`Q z=9iXmK|KkMJx~W16=g9Dy|0b`#XH#B{M@(4=ftcN)#wFK2*4?G6r>Isp% z!4~8RSm#KQVCF@2CrB@@E(=Bg@InIsoOIB(FR_9JQ4NnCs6ZfCCZW2Mq(DF_&rlNq zQ%XLnv3UdJeFaqSW0te1&LqqC`54>R^3k@hH4c#PkE8m2$krVsL=t%C0SlN$?n*ZL~X*A_}0xb>P_q zP=hQv+e#rimMb?ur8Fm1!57p^E=mPW6+jze;N^r?3ek@`T4TAm(iAGdHy4#4seqpU zWUT-iy90Mf(R#0WsTC!VMIcC{P?ZX{3grq~3gt*9A=#y)U}I=thqy3FL7`m1R-r;c zTLJk35759P#3!kFDa8sIsYR(!D>CyyV`2z-xFZpc0S)dXDuCO*icnpk@v>^{4nlSc zNLfJ<=#1G)Yb2cr;R zmI>a80A7Xx9;^VZ-~e}@z*8{=;0}~hS!NMvY)lD~ej&N57_?I%6LMl2Xi_k-n5#Th zy$G~E1Uz2{nj0*EjKxE*djf4!NUcarF3G7>03R8fmtT~dn1g00q)!i@-~*rL3|+&R z1fIDB4cCKDKG9PM&n(FRI~LUCPR%O;9fz5cnh09R3>qOw0edSqv62hCdjd2}mYG*l zl%G-xIucl+I2Y8}2Hh5wp9VVM6XF`kI9y6N*PG_4?5E2U6=cfh#``bua@o2L!4E!S$P-fd5|A*OZ8+C;M&yo01%0Ce z);fWXrCF1d4<0qlsD9Ki6Pg!Lo7_L}Wc)1jt`Q|2NCqz4D-I}X+k<=n>kb)^nyV=Y z3~Kcgh3FA5szjAi6odw`T|5DfXJ_a+!Qf^uq`3g9_41R7 zQ;W*L38WZuxj1+l7`E#{Avr$h&W({m@u*s09M-9Kyq%5Lu z9q0*lE6qy=Z*&Atf@gx5#R|oc8&)9mM4lRtb{Lk1MsiV{slzZGi;}6)+vPo(j?g}x zLNaI$GcP$Ozc^JP7q)N|awfM9XjKGkjVP!bhE5)VX3un!Kv$&YrGpO^0Jo%}k}3HK zx`_D-Jjo=3UQU1|9cVkulq`EuOZ-yI@P_X~!RPSz)GY_;B95&qut^ai(sSmuqJ3o&LmPEj7s*52FLGW_s)D*~mOOTn?mB0tMKpNq$feiM7#@X^f2}8lv-v`wFD*`QFN=<>>as^%{ zTu_u>mRhV(ng=@JGlvU&6(Z=?LD&@{VBKH`f)=hS6r~oHW`btR@=Cz|1ugzUbsA)y z9(X|*7kDpbd17XX0{CPCuvw77ZE%MZblF-Wc;60a9}SB8K&Rt^$L14@K<6(ZI;^0T zUhok;gm*L3Kr8-Wms&x$r-F6^B^G5C=jVYY#z5<0^YZf`gYg9=3c0C?#ibChfV#m- zx%ow@pw+v@prwXIkS*cJJA0H+3hhMD5?1i;oiflp-5?7xiy>z@L3i?ij%~_MO9NfR zq6NB{4!WNSc1bd5jbdI3C`hT(lv zGC_;_GC;P1=06jQ6(Bu0jANE;M$<2Bd%}=Szo30l1QPJ0hB<_iFla6ax#fYLh(Wf1 z(i7+o2}CMJty4bYsm(B21e{v19DrI=vO|SYjsA(pXo^|`AUDHW19^1Lizt0wkV9~_ zGf1i5@GPg83#pJXYBi!~lrND)8v>wHLb(ah@)t52#f3aE1U+{M zv@GspO2_i<1L5Ocp}^skMas)h7igqFDaQ0&(uv1D|obj ziZ>Iq9@mB+1B6;_qfg>2$DG88cnqpjQWY{1%Ro1igRXc7U(}G1Uk;jbfUH%5B+_Eg zve=x=+)U6)Dp=JCTIE!dnhQGnIxj^bC$YE$wDKw^2Yg}z$b?j|FlgGM7}~AMEC%%} zi@-aBKqu~&WI`uDl2S{`K?fc{7g~T$hUCi2&(nqRAqy_Rje=rO=PnhrwyGpwp&%!* z5@a@XX%yIMQ0pM45_AV{NoHaWXuA>U+y<_a{PM)2lwt+Ya5|{ghx*JKT-}5EdpW5k zsR~7@#RZ_Lt)xuQeo9csvN!{Lzyf&B5GdP%PCH61(&GvN^`F4q)TC4e_=Yb~qXu+r z14t!!%^&o@A3X)P{337`sXdZYMG3faG#9Z(SPRME5#h}S9(1J(>BR$Y^&(u6byV*t| zF9Do|!Q(~>#Tkh?IiO>=Q;SLv3%Ag+4`?I^cKjuz7=Sk5ajwwnX&i93!D?w}16G>^ z2ccHxb$F5jMhgqkQUC=s%njh8q=z+E!A1dX%Rw6+!^uczh=wP~)v$)AC)FaH_>iGe zi(@M!lT=aO;wZ-qX6vNE_C7`&OG`JUM3##SuN4MFhUY|tQ4X$~lJm!%dJgO4;) z0Np+Zs?d{jN>f199;g&8$uH0a_t$k`mu2XHs&Y{GzX)=CbSCIX6>v&`PH$&|mV@Rg zB*HF@2G4~f&37w!rh#{YgN}JZJ`0{Jttc@!wLHHlTLF9rHquSrAfTF!%mW=j0J?|;(r|<|=Th@hAYlS;oIp#p zFmS61T+}Cn&dZ`w0zu8@t1xp8ye`C8Apn~%&qUvB#gvIw^lidpEUu!D-1PwF|xp)UB;BVE|BOX&Bk zi6@noKu$UWs{@_Hn4OxFV~>8z7_`yS4Id-He+($-R7~QJ0TqRvpzM>M2RgmY34DPM zY6}^M8kF$o=fOSxi>unevycUG1Sk)t!H5Q;_dzTzG;<~f2JpCeS!QZEXm|&*0w6J| z7}Ojn(E*LAfE!()mJGO+0cnGQcGTsiCKl;tf@a&n=d+e17H1bLRHl}In+GN3`QTLy zWvNA=L!3e9Tc)If#$572_jF`}b`GUv7AF^hMqnVfgcd`VG=Mdvz%K9v@5VzcWhmAI z-D?GEMdlZzf==534X_rM6s0ESf=bBGbMjJ)i}e(O zOEPny4a~g6lF}mZkvyQYc0l2!n_rX(*|-R41m-4Yrxq(DB_?NsVjgs;Di5_mff+%t?AO-RL{yZ%6VVl*L~k%7S@zdW@pwMa(+e5!G!LP~0KPGS+L?+Pn0 zQj3c6!6)J+rGidQ1}*P`2!T3}IXPU(`K6!>*fR4W3F(-E`+$%f4lWlnU?q^A z0`i6qr0qP&yAsm!p?A|2(VNq3+>`;2I5?oC5GLDH)!CwP~M#&)`VF zO3VxlJ$wb=4dls<1~e%)cNt4|Hg(LP8m6J1l%6 z8rp+rgmpwAj&a}t9mEMSm8T#z4>Z0LUs05rhGs4+*f4nO39W~kU9eTU zML7k!;OIg>NIwhZuzbYHr#+ltjd_W=AooJFLS2EJA|P(C1_wr#JrC+wf=rk*c)yB* zl|n)pXs#_aL7_$=0bKSGNGrvVwBm_oA{)dQoN1#L6z#}q1Ev8banyrUk(M~JB6t`W zh)f#Q;LsqYCPE~QtYjVr2IO>+l?oGpB?~TavH%C?6iAF@Wq>>cPL`l>gAE2TE7YK7 zK#*i{QWkokvVtQ7XPC|b8IByLQ1vK5IuE3Xc0oFewm}NcX^>FB5uzCVQwc2j3!K`C z&0tvtponFIWD!_I7J-5h9FdSLg>G#Y%C*|4c^BexjKUp#_WvRz%MxnZ^xSZSc6Y$x z0_wJa&g3jh1+C}=HyDai6G5k&B!X`50i{Mziw8Wot*77!I)gK{2ztV5ej2FNlggC| z=|VdBxq(ar^;|&xh}5FgyyR2`EVKR!7_S`1c!0HmJ6A-Er zY7-DjV8t5tCdpOo)eQKQQD`#=eHI|=J}4lO%R{hgl(2pXQbJ-_lTg9jrEO`*4ys^4 z=d40X6r|b(6kM>{MI1-uK!xMiD_w(1Ow)u8_3>1sih6f)t|!tQ|-N?E=<{wgF32LS+RfR4hS>-g4=Y z#B4A@OMB8eM{YCa_}A zPF&FCSZIqCi@^ilpf*x!3h34s=p6{C1EoC_nS_$=(#c47Bv$ozhzp(wQ%2As{F%iH z&@=5o)A`_CkBKR%g{7b|e(0?iCHV@)i6xoEX_er08A*x7;47`b=k^stZ@vJv;lLx} zpk2_J`FY?&4WJt&6+j~y#gL_yi3*@CObP|5DT#R{naR+taNtwpsJD9ORV;LV8QAv4ejr7dN7 z2cxAh(o(?r%)308OtdB<3aNR2F9zBhqO~esZxM)3i6igRDUcpf?LA*(&qT)HEsMrazFNu`e1)5KWwguFNY*tU$Cm5D`X6dj}qMXh&c4(92@XocRG1M#wo+0#^{A zX3I|?eN@brxUGfcN?J4!-hq=CeH#c8&?d1iB!%h13v!H13R9^7QHe;4=nJu@a7gIw^KDaMEzR5_HE95nb5 ztLRXhJm_-`PqEl63R)kYnU}7c170f!S^JIY2$(X^s&vqT2=L4TNEv?j;9u2u5Q}@H zKoxXex-QIFiFqlyklrE4HkA369vO&Q_~JJm@UjYoYW!~NWWyM@L=@QGOr)LZ*~35&8xQXs<_v!o%E3|LkcOv-^td5{ECmI8=k%~FI=N?<8vFsZ`E zz|fJU3NlL#M5u!Z4G^ITBD6q+Hi!U=>3~?eAVLpB=z|CY5Mc-+jKC%ugGm!M28Im( zEK`v96D9_REHkjMIheEnla^r83QSsqNgFU}3(^C*x)aQ|2k{+1gd^CoP9R?}W;wGl zF!&0nXSskCxq{?hfh=+ZvD`s~2Ux}v#C!{q@d9b&$Y|@#@&<|dfCyi(k$xcNH;@{C zHU@^ytN<_>2vX0O6$Iu4gOof2DG34dL%|xuKfQC^gxQWLBw=W-8ltBsDZf3AmSE?dmTh@gSZ^vk~{^; zvd%1!MIBinOFFVZ7IbET4DZYW8Qhr#GPENLWMF3&$gqwqkU<@#S!qy1z>Wpyez0SC zK&}HjRtm%dJJt=v0y`GG`WWn3aQT%D@&IUcO4fD|3p7oh6%BGMXh=Q_?3F$c7wi>q z(F*p;MUWWCD_Kln|73ujl9dIaav+hC2cZfeR1t(Kfly@-ssa+_l^}{Cs|pn7wO}(^ zrvy#OY6L6N$O2zI#RnO%iq8ct>r78YT{wf7S3_@rS-Iww=7N{Srhv!EKucJQN)#Yx zPJuQo@)e9U;f*?QZ`6(igB~@^F#;VGglrf}4>kdm6sXY1 zf|hdNjybqx91DsLk{Z`Ntl<4+Q@j~_SRhMuSUmmQ{HLInvOO%I!M`c64fj3hu>ol| zfD;$0w;*M-9Ww)iH)!*H3?IDYRc8hlSn9P z$6Hnz9|Hs4Sj(yeIUk%(@W<3vP-CGPocpp`!R2flgwp}$z+<>HDeFI|h*n|75v#OlQAj|?%iW)C-K^_A;YdVMpn$Uo+ zi^VuoOPqi;kTFwHtZqTIb}7g*9M+Q2ct)JQ3Gxpp4p2t|h!~j6@IaPadJj}evZC#u%muaPJw<(ezJaXQL=t=elAEpv8YnN zBvY@bxMWHeI4d(@E(q=k3-=5F9YO&*-6At5M0JQ8LbhcG0XzC|14|LcSc$Y(> zLP_gASgW$cR>O z=?qGeSvx@ng9DHSQedJ+5@w9|NS0)z>Xtxrg>EKNuE6NKfRrl0l!7j8foCA}ekHWl zKy+omnFci-Be|9A<~i8Aqs?;$zbs0d=irdE0~fx-rFo9p?#?<3${MHm7#NDPAdO?N zNM|v$m74{U$^vDV;w)M=HnRxSdZ3(Anv}%=8j7Sst;gY>lMmjd1gqj8r5r*SrCj<3 z3L|hf{QzQtiWEx9B}85E8Dt!)!96yl))nbcuMnsvnqb3_pp}#`HfTc?XfGD{5TCTf z-276|VXQ^a-DkzgpgYz>%8IX^cEv=Sn}2$pf6Z9@!clyFr6c^@^M!!r=r=NZ|Pr)V}#0nPiOc29_Ji1o0i z=9Ls>rWQ|$oubjh2HGQ;lR5>{-8~{8-|3=z2Xu#VX5JLPk|~LhYPyFNbarRO6vzN0 zA_6%eEeMd8Fxw4TR{Wqf`zS+rsPjKi!y!S8!)$qe(DF4%_nQk5eW)>lyXzh2mqbCx9*WhN%&q(Yai|x!jq0DY9Jz_mkScT?%*gO-OL{3_<|S(iA_?5-Jxj& zd(MRzDg}05mK;C!4xmPsGOA3E0O*t(1*8kp(K0ZmJW9xC;tBaI9aOszDU$Ut7el4EO#%duH5 zxJ^!jM1~u#U_c*ZF>}m=@2XbFO)N>yfSjQM@*Q%{)d=x-@wZY)tw;pjScNveLarew z(b^936pn(K^u&*}Pz4eCe2~y@0f!M8X2yY>2p&6u1T*OwDJvCj1j*Tk4KmY$mRVq; zC}Ft-WDAb4q<$8GIiZIeoH1a|BqBTTLm~v^TrAmPI|bPRYVtyGRA&*L9kM{pZN@>X zyXa{#N>Vw5C#jH;MX8Cn2E@Ckm#gBw!>jW52DqJZ?|I)Mza^QYY>icAY`bAlwHdPj= zy_E&3PO`vN&43OcfihBQQWhhXhL7aKQ*)B@b5lWw=0HxPNP&*%gYOQ_x7|1wqaRN8E$CA|HCUCD9ZLEp-=_U^6 z{JfIXyb`n}#|UARkkH0-Fm*yg1JmFvb&wc%jE1!|3DWuI03Q-nnwNsB>kU4xg1sa^ zxuhr+=hQgyy`Ubpg2bZKypk!9lnUt+`5{#pZBr6^crx=qCzYnAW#)hfJF>h5K&vb` zauX|3QVU8lrg$@DIkGS?^ssv7rKDC&>0wFF$xoWn*~6BRnUa#4H>IQK*lr>fyoZ3 zrmaCraZQl-@I!-8x4bB^pdhtq3f`6gB3dA3S;+ORgN`oeA+oq&u`3gWfxgdG4BzPJ(HOpTBye9!1Yh2FoxxXn{ zfdUK+9a%vFpv5}DU@`=xlp!k=%n1XVmlXkWK`|(RAY;6Q#I!27c0;Y_keo>Nv?{nv8*MgI zq1g-$$>H2=*2r22Dp}@%h?yW_8Ys_0XILSUomn7>PQ-FTuwroT0x8Y{6|kiP+Gqx4 zqtc`-a2ZL3IadXDU0=xB5`|#!sc<3i!dW4x6x5c1ZF>i=`y;FzrKxxd6w2T{e+0w= z)qYr-ilC*Nu~T~3lXDV_i@~j@9#+r}O3k-lon?w zWR?^|SDogA4tfRc#0DQ7&&8#u2O50Ou(IM(P*8|T&joE12QjM^VnB1=B_-7XrNtTU zIr&M6IkgHg)(U9~RtlLQ6>18_5Gn;iWk9H05ETQyxu`lRH?gEBv!WIxqyPdS&50mh zOln>ViZobFHO%Bh1uHzJ*TQ!pYGk2LD_D{p7O4GI3d})CKwm*|ikeF(Nk9dl&O0by zBPAA2NPheXDqWMZrl2l|?5TxCDuEaUMW>oV3YVHf2A7&bE*I7)gv1|e8S z=Yv8q7qStxT=0m33<3tbaYoJz)(mk-tpx%d;bm@+w=*fPd5uLNAc z5-i!SUX64ulJs%Wqz1=JD_ln5}& zvO(oCNTfkRQlF+JTb3v&Nr-`B3)08OR+uS3Tmp$x`W0q{XoXo~K|xMtGI%sv0a`GD zPhW->Y6S&3m7v2DL4_L9b;96=kwQs6_|$w@VV9Cwl$s2hXiZAZ$uC#PECDSxPgQ_P zLl=)@SeRL?04g_AQ@BvuU3$b6ioV&71+|F65LEY85NH=EC@6p`V+92TSbYp;BDc`6 zW&`v>5o9sAtrughP(g0NxE#4)#0Z-FyulI|s0HkhaWy2*LknteP_CqHGt&r?sogp|x_NaR66G;-hzY%_>U zAaP5#0=wrbsBfu|sE}3)xr0_6bYfdNcvp}DYJo{ic?mKM(v(9Knu+lS3RVg+IVt%i z#R^smiSeM;CGLJJTC)85LUIL_HmH_Cn zMPd;ED$)szG||gaNKixkzjokrb~MB#keHxb&W^an$iU#42F}+Q9VzgxDur+lKQ{%9 zs?Y@4aBqfo4_5K{!0Y#2eTmMoH~+2ploCd z;iV$1RKhIhzKq03M+66WiY|fHVSw78JBg<_&qBMhr-u)EBQYcm!moaTR4;50QB>nE z;xQh_V0jMvoi7X;g2342GON ziaBlxS=Gi?TvC*umyWuot%n_2GQi>(5>m{0`6a04KPNqyum%q_M4p0-0}tMV91aT+ zM~cfQR7Zo%#uX@J)D_qUbF(1z&r$3xfz_BT0Z1A|DIH-&qnZMqauGC3g|$RP87Dv# zhuFplsueQTxuCXz7>KzqjKSU^<#OaU$^U_GljI|(2{O_dnKN4jj0_A;r8%I>&R~;S z1x2Z4nV{X>ph<2W&~`J>&@ZTspn%p!(9+5*MzjxdQWMKk!NbAOb3s5_6BRNNb4oxh zgpyPR4e*WZ;7z89d5~HcgLC+C}|zwZmeKhPDD##!eEOESP2i^ zx@}3e`%ueRX(8MbW?9b!QC8sgutAa;%qft{hAFcc)ktMLM&hWFiK}ZsZiUq~fsjP2 zqd>K^j_L`JT{NzH8X@J3xDeKf#HFOxJ+Nd>otg%oouKs%mzn~S5M;##My)eM+>Bh` zSPRi|Sp`v(k1fdQfPVGOO3>tEdSYgtjzUstChmHt7}Vd)ELH&3K?;yNoz%FrKX?{hrw>C&ddY%s)-pL!_vwEcRaBUkipX>SP8rhrlU|yV$T#d zt_xj9=7+S1EE}|vEE&}QL~WRXtpu+i!!{C+eK1ZTCI)O!aB7KjYEDjcvaL~Ubuw6g z4Cwmt>hg@#JO!0J1sjEI6|gYA)f^>`0}zL(HNe0)0g{WMgNEVMt#hz-6{bP5X)yNU z`U|neHF%U3ZGH!yf|0rq=*bsnu}(PEq9$2T;|IRr1Ux%|GBgQFoiXT16I;5(DE&uf z5I~Y4ByFS)d}T5d;u1(IrC()Y0U1zD%u@hY0?;)qnZ@9qOnw2uq0y4eywcQSg;MZf zX=YwJMU@2hH77*%I8Z0*K`V??(boNfvJYbJ1-29mSA_*y1B1goaD!llDdupck7pX_ z4tVMWDZ(1?FrXIkW}~)@8}SsiR2b0f#A7_J-oqV1(D_ZI59fir0_#wSfQIwXlOgdw zCnKw2t7O(fvTrT+N@gRml?*rsz-E`RCVWt$ge6`-)KrhXx_~LhlF}ioWk4pP)FfOO zHN+5fKXUQDXyA+Y^~mXij5J5)*pvkm14B5dRf;j!4Vr5Lt&Bq};}tYOC%Az63Ca0I zMXAXp(CIRT{4_4uI*?+8jKng~h0dvY3I#>^Wtl0dDViAbX2q!`#b|Tzc_|86rMU&5 zeg$}t3vK#cy;uP>z^|ZT1!~A!CB!79mLw+V7Nw>@rpq)bs$8(O->|gvv1U5Z_!dMz z$YmuZ)yQ3pJa88S)cgW%JOSavctg-yAedTcE(P_0VyqQX;|-D3#*~3q3_-dUAkEOF zL$GWM%j1dh)p@#x;DraN@p(`aP;)#+p9b9TQ3KnEv@{8%otOnmh&vO(lcW%y z1Xr#Z^zs>M1+@=P-ARS2`4}GKsa-XLyaKD5?Le1;l2{0USDZnL0TRM!DktiICof77 z0*hqGxF;*PTtPMbCK(}wt=R&dW}CtZyTlPWIJl9DGF0n9s%SiDc@R9KXxQPeV9>)3xncHk;2UN~k@E%p8fGUM85jcckya=|_P&)Cq=5Fvf!berB^i*t zBqjL@1^JnIC7=TuKoSM{1qG=oupJ>pwTZx{g4+(DRmspzwW$hL;MMZbJcpj4!L148 zWjeT9M%Y?AX`oh7Dzu#fZr7k?S#X;QoWj^<%_6L@ zS3u|qS51LHs)dy{SQ9HWrNgQrXuBLOrJ^NMVrmvH?A1yp7qo+oJy8;HDvpGR%__7C zX*4WRj{`u9LPVy<9+r@d0ZFaW!UI0bcn9JVNWP(41=TYTrQ{-NK}kS<0l2gTrCey4 z49#%_%VSW(3Nbhf)r_Tg4p#>&5;2QhK2(Rp6hg{QbV*2DLkmH3+82VKA(3f}wGixy z!)$`1hAC+II=He$4^UWH0tz2cixyP$5E#>=wPlc?h4|NX;Iq+Jh)WfqsP zFdMny2uhUT%ni$nn3-0Yh%kcbhU8?TbU@M|Gf%nwI#KLR z8RP**q*z3aLQu$qiUT|`r=|dnHq;^nwMo%4q+AY(bx2I)4|vJr%Z8FD=vVYugVqVb zPFyL?%goCx$xO`21RePfI+s8Jd}s_Y-AC~5di0tdU*!zh^#STL;jFMQ3JI*K9Nb3) zS9q{CdnmF$YDwx|V%3V8U%;+{7J0DZ2D7kI1P2JHpN=b3VR|7&6%pzoNfugAb<@6} zl7ObkcI*Y!P0WS}*w09b0OwICWOa6kiDUd7GtAgUjao=ih*qo(V}C+Y6r>QGIq-#` z6iR}lTOrtU+ZD2DFBP_x4rN6PXh;pTVUUx#6M!F{KjJUP7(2z$F5-IRY+EU}X=EjutLk!7Y4^ z3I#2NN=^K>z={OSMvpE@p@=XCJgu%wgl5zk(ffExmMrwyUQT%Q!R&=Jyco4m4SkNs zP%=ij5wpA?*TN>f8TC*t1m&T(BBgqC`#iSc}ym>kH(P`2WC{#EvM5g?=TmF!qwT6l*~olb4!~zbpo+ zKq`(&Eru1W2pu;^d4UUdVg=bHu0EDR6JKb-%0B2uLnXr6Q41<*5!`ct7)34*w8#bd z5pBCa3rGyrXk|P`Q&jMR+>EQ>1^yXRt$lH9Mr!C%|3!+kU$F%^>}Q8v5Z<8g5wusqr#B(2_#iOy6mX~U%C~bBpUja zZmf(944^R_@c31t0_fBXVhS$j#Nt%1(p=CI1k^hr6iO6gO7azw6;KioxH1NJupucG z%tRi^Bd=^K!&(@DG6uLT0yip?6=IU}^O6%wV3$xJTMJi;xY7W#GtQ3|KB#39hAbpu zL5rJ4+7~xX(3De)y|~$fS=^8ldBnG*aMmPcSer%FptJ&yA=JVRt;saBy#h%WkOHTF z;0v40v7eW z}5tO><%Yn zXO(B>f zGd-h3Av3oiF}Xw`J+UY$F+EiwIX@>S6@0KJmqt-)Zfb5)YLNo?Dtpi@7_v9PM}?N8 z=B1>jD5T{VDQH1rs91}*le0kQN~2y30&YEE>EOU?b8y8E8@?xPunN>Zf!AP&gXZw; zamUqk$peiVV80a$vi}h2{0LKwqfLrZ6;$%nRX`g@LE)K{Se&YBXrNFGPLv8osReqV zxmA@sf=8c3dZHFLS}#sn8)x6=F(Q)RDxCn1ww2mNSf{H89TgXyD2g)``PfGvcUVQHBd}-&6>#R8dvO#BgEMrSP+uNT^6L z2DnCeSU`FbkW|YeI^Yuki%}9T8My&*tj8%lnH%FW#ct54O?e9WMJcI8;07$HL56bZ zEU4L?l&X-LmIi7Om!;|`ltbnP5_5|46^c>|OEZg7Q$VUp60=je62Z-8(BZUs3W=~I zKN53_QWH}u6;dlQi%W_@N6~_;L25@^5i>4_nNGrgE4uV)hty>0%lOP!xIwYVVihJf6SIY}e#fGhl*$vI9GNM>#Y7diB z#b8aS&{T?A9blgn0d)>(R#6NKA3;(Hq`21`_~L#aN+P0JaZifDS!+S{#ySwOUW9=m z!#`^Sh>dkP68`|%Y(^~Ok^HH!fj%4~kq8A8k3oWm=+OP%qmZr(J+W4|7<7+4;lWXa z4(OTbq>Yn;?{PrA;1Ds4=*?W3L`sR&!&aPMT9lkR1#Co*2-qn(;5%gE3ySj7LH8R^ zshy(H!&;JGl9)5ao1upbrY1FIiZ??kwAri-8dT?l3>bG z08y-2iV#W(ETs%4RoEC9IgE4JK{Cq%BAf-=2+uA$CfZBiQXuAWt!7IkPb^_zI|Jxqwx; zf^@tB+2RIrAxA-Kfv&27Ny?Ng53sx^Nd7HI-V3CiBcrV|%NwMUB?olPN0u+xXg`pu zZy;6vYzz#YSpi@&5Tt`KD+tU91}S+4QW65@hk`YRf!G<|ex*rS;b8kBATEw#V_>MA zk`)7?;viH4gh~Qa8d;H`Kn?>D+dzfDW)Kkw;`)JVy{r@@Wt~|dC7oFy>CVzD(DXy? z6pbvfX7Ee_STlG61Ee_%RCbhRWq?h{%7Rci5SQgar~(L81ffbGR2hV-fcU!-L@{Jl zfjnLdHluY)(3Gr3h@xf))e81?8-&vV=D>4fX;KywC?lw#_M_o56ECX<8w57__C+3yKY}ciKTL zTV_y(wgZvK<%%~mIFb57D1QhQ2%&<(6tq-`1qBB9I+rexai|9O1nY+urxq3KCl{6G zCgr5+yW}T>Z@etlFHX+L&(G0!4tCTp$|=xK$xqfVE=txfN=-{GO3h17E!Ho|#3*iy z^@@s1reuL!3n~V)&`*Vng-%L?W`#0ANBQLzfUd}bbt;N8!BJN_3ER@*Ac9)R|{4OJqH(;YRIwS=lN>T(F0~y!BOp1tF7}d$x91Bf~lR!xk zl%BI@gTexwN?0K+H`KIQig~4PO$@ls1I_GkRYO(s7-J+ zg>)`ZGaRPS!_gtV~wFE2_gn9`ZG928$GnBlY5D?xm;_~U@M1S9^?bH2SxD!k|boqL># zIO#y4Ah8&<<2bPxBmrBA2pV@lT*eE}+mNAoicN!rBDBOk4@!-w1tUDuf_0O)WJm?9)ebC|f%L$$20V+wGZ@;kLtHrwYYrNW4unJ|B!vGCe3Dm!xP)Mm zFAGR5O3N?GRY+7o-b4dxKSH;%M#=N?i*gflK;!bc@SFo}wo2i41!`NBUko-RirG5DxfuuS16V^D zQkk-V#88bE$73`ZHR2NZS+^iJ!y2aiXaR}p1dvKxZBLxD_~1xD^BqVG)o4vJd`E6e z9OMm{hj~E@reIq!xKP~$Qb)9RIpIkQ)vt{HsD|1MkVoYSrFcjI0WIzEd7VnV3@scb z09t7u5e_1@u6Y^-b2)dxP)Ns8v`91N(GJVAS%oJG%VFIc)cms z8kh@oXC1T#hE>h}3FvjKCE0eN7O?4f3Rns&seC*}9q4yhy=9woO!3i1Zb@4P5UhXU^s+ac8%Adhl@MomGvfdW60ww=v>fP5;B zE0048OK5!#N(8vlGL<^ywKz&cwE8^49<@Ub9TEl~V-1>8w^ATbkAu3ruu9YqR33tB zPnZbOI54!40BgoWXVJln4;w%`Q}Hx*0%`%Cg{PFosFQ^-osZfG;X-%})tVwa z*5GQ0kXt{4yacPCF?NH3Bxzi3PsNee(93OSLgjX1yfJuU4>YHTb7Td7>Ft>ofSAWi zMxLC57xah%7?dc%WjA;^7HlLJxf}>ZC zxF}zPBee~kqTB$K^#@^5UWrn(4Y8tpXay>$D2J8c`v$%QUymbCp)ble##eg6n%3au z81UvgyeSPC5+ln5NN7QO`4`A2>+nn)VB2GI1V?b76)`>MP)6-Rtv*l(+DZYIx4Ed* zN`xAVt(RYcV*nr2E<xWyNPP}4?KobyLkfg2&{RcPHZ4S(gw7E0hvJKHq3P#k&jluM5Lj2M?u|1 zXkmbQT`w$C<1cbR+Tr~>%-*JRejcc6Y7IKw*jgcvP%kqX)Q+i$H-z^y@!zHgA7iY} z(=`P5X)EIMaFkx4DMDh)QK(v2;RwndVAH{e&4cGW6(FaJ>nMO`J+az|HrhBE?m0P` z#U=O?6LrEJlJy|@K~Q4A2PJPpT!K+76TbGx4+79<3r zC1(iD3lLv+=&4K?VT9g7DZAjZbAF4&^1=zzC%z@s106*`r%NF@WdnE@h;5AbXQ zuHpl^xFFy?h*DTd2pjzdPfsAvJAiJyL{|jTigVrpt-UrH3wTEwKtXARF$Y17Sb*e9 zNO_Vp;3b1_p>vQCo*uXeV5NT394B z7kxknVWJk6tPn9s;6e+%dg>N>h~{Dqroo8jqOT(8iUahDK@6q6Se#r`T9TQUnu_WP zT#8V9)r)C4mD_^8%Fr}{>QBtZV9!mI(L7MW49Pc;b`f-P6wzveT>ngFp$>{*r1l`h zBJ>gvTvp>8-$QS>CB_?r+H6Pz0U6*$yXe!g!`YvZv<1nevj@I7QpJ_@&@+^?C-|B@ z1$b5hU5Ef1WXsG+KwamOSWr-uUr+>EL8|~?^8z1dhmQ1#U^5bRSZ*zz%!e`N$BpD1 z)QryTmzjfV@K!tqQ+vD*&VilyFwu61XX1G!TdRuZ5p|&KX3?k6v z0u@~Fk_0}+2NMBxM$rl%aBmRSfrPgx!7V^oVM2{YWdUfkFfAUkTOcnp2eAeQ;w_j9 zVU0vku?yDJ=t&q53!5H1i!=(Zp`2&?I6EzQw5$|xzR9&~X8$Sq>lzh(6{v%N?W~{{gpIJ|Hy%c)aafP*dd< zh^Pb+Wgy}yhr!oye&vsXBJ3FXBJ2r>3CbPW^j)XtQkCF1k#)Z>TnF~@wT80 zR+?1W!;za>l9-ZMk~k%c4Rj-r`pXJqE3qG*x>Yf8*g2f4}_ zM1+EfFc9I%3_6@xBa84Em8IbGWBtJWa6g1=kdGcG#t^X8pnh>_Qr16wVE`G?l<`Te z$jnREQ3yyZ0-Zyv1KzmnlUSKwT2hSSOGBtHN%0Y~WB%iF49*C#1KWx#LPW71RgB_n zSFi!l$XU+Ez>o!Y6y=cvav3F&!vIPixDqHNayZ;`@*y);$Ss2isE^2v2u8vdD~6}$ zBSl}n;E=;r7~m+K7lAcF3jk`C z&LG#2Rsi&Hzz%Pk($T|Kl$usrlsN@lQ}u8q<|Sw37lF?x&hUqh)#|as#%gCsf-Ywv zr6mb5q6bTCK(fVTu!&i?Vp#)cG-pkh#2#%~xZ)F%Nw|FTOESyAr3XskaRM4Y#205o z24fGmaxTJ3NO)u+g7hdj07wtgtbLNOSUE(l5!XRQF!*%({a_=g9@tVLMX9NvgQZgx z!ZPzxi*-Qz%0n_z^NT7`0{=D50$)nG1mpzW#Jm*UGLRE=GxKyyATGd&ix=QfpeQb$ zl4}IfaiKwO%9nypG-T%ISt$hPloo-nHU`HFN@Va!ff}ErgaWZSK}s3AtT{73Pq!HA z0!Xw>!H5iQDe}r1q>RAqtZ>rIX|}`6LMLQl|pb~X<~5( z=n8Lep@)*CVriBHWRyYe9H=97i(zii1($l5nJS9h_&}tJaB_`6j}J1U6p<<*?FKT8 zK)7N8xkWX|6|inCu7(TFvW4v8oA@sBR4S!5P`{l}i*ORTsR5Co`oTuvETyU61e9=8 z01Y=JC*~-CrgTz^tP}z&OEU8FrXcr^w$LgRdnA+-b#qcHGLsW?bPI|yb5o0S3n2DG zi(o|Sa3eTuC@RI*k!u7Zr>q7Wfip>y+aM8lDlJh6&qyp$a7+Si!0<>c&Q8tAu}6u9 z>oki7apk1a65aBQ#1h>^ko~$D5c@Gp%`0I4Qxppq$u)xLSRlJ#5rvMqDfr~)rRG#B zI29!(r=m7te$gxv#FPslBYwI$VB2+*Ahu)Vgzw}AAfll80yY9?K|}TQ%@qW{t_vke zOG#6wfsIi<_i!s0A*{p*LUCz|Tht=t8i7d0g5(+js&*lR29SuPsPcytX=E6Ia0R5^ zBEtwoSoDBXBpC$@$Q7kYkl{6wn;@i@*Eom5;=oB6*H9P{FV)2t;BECD#aOVgirQ(jhTH#^JC}DoleW2TDibKz<<)to4#>1T@ybqv<5a8rh8n5~pMiQYk(`z9bZ%`^XJRM11ZB8$o&tf$ZSq zaL&&wNzFr><9tA?Q0w7TPKH^C(LA^d_B_MZZ;C)Hux}V4 zz9|L?fPB-Dh2J+NAcbJxfV4n;!#fbZX$QFk?3->73)we4AOT{0(+g4v_6(+Lw@IOokDNV*NTeg^-b%5Uzj}MijYX2PLk6-Q`Tb%7y&dbsHJ#bg4i~ z00`AHmNFD~qs+iY;3+5fq25dipWG(B=?-aaq3oH4B=Trl1z8W9GGs##Mhz1I_BI)r z0#U<+l4}GaYX*Uhpn7i~WuFlwi0fz=#E?a;7(rYO_8dh)TtTi8=s`?I(S<1eAX$VA zBM`1ICf6e%SCl3}7NyXy^doKg&Nj5PMR@rR_E}oc${Xw@o)mo9$7ZyEBy1NnT~33q zQP==Bf{rDgs59t-n-Ih@>Y!54noQ&o{;RYK!X7c@95gxMD529s#)mv<{HJBtJPmuQWG4HLs*76KUPE zHyd~*pf@XcoYI>Syav#l5xfADNaq!E6q(xEds3ogb1Z& zrXvXnl;kIa=Cw5QAb?j~gNDYzwq|vJ#6Zou)Z!k2w9K5; z;`oyM_@dOL(#)I`@M=JiuKp<+U{fZ5m%$-;Aaf8r&{!aX2QnGK16cv*mGySvy2Ql5 z(8CrC;lUR(g3^Is4^MGsQch-Gx?@s)S?Ux7-zhaGzkG^c4{K&hYF^0{zaH+C)a0DR zBFF+bzaI9K{ABQIKj=>39{$YYpj2cvojsiK$r+hBDMhJyQ(~v|@WvxsgL`su- z*z=RJQj<$Sk(PCViGjhJp|poHIU_MIJ+(Ns1nd=dD0fQj6u1(O5i zAjq^HUKlUFC^ZcvQrg3uTu=bk;2_JukaZQbF4j?&fdMr@vRq{u82qx_Kx7Xm*z^8H z{smL~diY?Qb^;QM5_5||VFeR$EJ`n);+N$C(v;;1CheF(#(2qsMh?7X85m-xWch-r z(xfcV&KZPnvTXSwYwRHb03MR4ouUCwP_a|MIU#lmI8DY*0p|ozinRfaThxMx9sCRo zso*piI|ZCIVyA$!M(mW*(jKNPkk>V`{AEE_^swjVr+{lSB-=qZHi4{zD&fsYERIht zECt6iL^CL3bb#H_0d__w*cF{%J3GNvc7Sc{D1}BvX%ACDB{-xZhGrFkt%u7p7Zro! z7V0dRcvdP8$dwvB+yzDX>G=gEnfZAj7eJM1WF_-3F!XR1_ zy10YEDii_|(^IEFY(=pO-Qpf$$chLBG}}r+O~w2?M7V$h159N2w@t~K2Xg0puq)ai z&VjnAZA#WkklZS$94w9Xu$H72VsWZMVh;G?_ma%ARH!s0 z5xn5@dq4rs>ylrdmy@5E0@6_ojZ&ffqRjNnyu_S%u<`Mr71Xs;dN@HP zNj$U^@8K>=O^XMQw^o4iNsmZ8B%b2IksS|TI^QFXDgm+``N`7)lQEF;RX3>-$5vUoZC7C&T@db$`89A9rQ+hb!gG-765=%0sOrE0A z!>B){hc&b~wWxSX4|{S^X>L+Z>XaT%m;B^Xkfp^_df1ASGxGCurt~m72RlybVJ^xk zn9{?NlAl~WrH3^McAFg}|zL;~(R&it~}qN2={)Z!_%Q+im7Q%g$0zD=ztNzE(H z%+D*H5<3MEW)&rRnYrn?ATK8Nuoo2NXQd{WfL*RWrH3;)zo4=xGd-hZN{_6OfswI} zLT+M8YEEiqUaCTIWlCOZrNYtKIf?0sQ+n7EOG`5Hi>CC5VJInvs1Qi4NX{uuNd*OO zNoo<)AsLzJ895*;;&T%7(n}N5Q>XN>XCxM9r{?5L>5)iGNr_J@%}XxH%+HH2NGwXt zE6GSLPA#6&*~67llA9A>l98GViiO0S#H7UHl2nijpgxMvNi0dNh%YEgO$0|(L_Q+} z16NFGacV(ga&}^RYIS06G05w+D1s%4Nu@c7MMa5~wOm{=d8y^e`MJ4?c`4N~B}IvO z#YLq#skPBYv0MrY3JTRRNvY|XdDSIJIYqVAHAO{5ImtD(U@4HaLQFLh%}aq;p@8nB^jre&Day&AtAp|~b8<3^OKPj5 zV{~F`xu*1pz+xjaH!(dmJ}ti}HxZP=ip$cc^a#Qv)AI95;)^q@Qm1(H^$5d6ON&!M z(N~t4T0W(thcC6DG$}s0xHvv7Gba_Cj`_f807ZxwER=<$h&Qh^H!U+AW;Lh`U@uMu zC#fktT)_~Qf+{Hgre&s=7J*WrTV}c*SctVG5uD9ALO?WFh$}fiB~>>mCqFrRN)MM$ zW^qYoUOGsow1=%MF{c!q^)xcnGSqvRQ}fEE__a^T(8|!x@b+t;(jy4XWAR9Ni(yI+ z3&_=Al^PkE837=b>}9D%pbR@D!ylrRy(l#&HL*AqF2GunpORP!=W>F%@oBjwQ~V%0 zI1qV?DK&2jM36ftKRGccH9jS?2pop&5PtELM2NfuBoN^F5ggiiiJ)92R$Y{zUs9`A z4Kug4I<=yt7HY6UdTL2YYDGzWVopwed3;)FRaIp?IM3uHg7R#U(|h$t9&lsVN{gPAP`y;D_o+%}dTt$;?Zi(!*I= zlBR2+Tb!8=u_i+&Ll>e}ATtlM0Ate9f(0B;N@`kSX--LeQGQM;Gzu~dI-#0DC0TBM zN@-4NJSZ@Wr*uFhgi7+0(NS5TP_uEgStODe&x z2c^Lby$pSbD+LkdbbbLOGGWoqSCX1r04i#WK_z>}l-Mbd^ve$uk54MfOi2fY2*}JH z-t5%Wg81^pqP)z!bhrZqi%Sa%!0`{4iG@T!k611!YEn`w;z1=bs2(Uv1w}8+BCew1 zlK9ku%$)pmXsGvqg$j!Dk%WZ6fdi_1Q;SRD({d8i;o;0zP?VXQSX3Dg4b2{=f=Z~} zJb9_9DaG-ST6c<{A1GrAK*W%0)Y>Uv37*`NQFvbl*BnYpF8@x__xd5NHu9}lXG;&W2-(n~U6&f^DFfbn^yxk;%-po|N% zLl7*UT3D2t1}iwBg$g%V2I2%*BIYW|DUL5oEy_%*gb8tjgpw1JQ;SN9VU}@~7K3a_ z2Q|@PrWNNV7L^p1=9eJSy%3UEd?K`T^^7N>&p@01>7|(|sW2gkD+-EI!Bq<=svt@st|-VaEVX7BNq#akKQKcKg}59fTv`B2n{cJY$@vAK>K<;9ch^r@!&QKyo?e7 z`!_ccDjr{+nF7jq3=oSTz5*AnrA0ZQ!Z|Y!l;NNu2$2T0Xdrc12gFALU^7!vi<65o z!38TQEWzmmB9ojCsuPk*OY)20GJ;?|+w1BsB%vRswq%(rzryOi4{jECT05urNeZVoFLT zsMbr&i3b<(Q);397Y3UNsW;*?^HMUC!NnL@E5soMsYSVoIhlFcpy~!JE&|qr5RV7@ zw1?@?HmISHRxNT;0qcW$xgaOA1Y}ie#gtCuumI)ict~?*N(V#&ViPz?LL@-$fJush zoq-UCwVHZZ^hzp9piY7K59E~mg4Dd?)Wo9X3{Zm;$w8pTI7}}z4k0cDS%xM7F%Ik? zkaHn@OQ>TdAnpORZy@%>7nkOOs%4miA*O;gL+fLxPDqjg<&@Nl5_r@=JfB}$QczkF zk7(bqg4=gc??G}va(-?>Vsc45sN({UB}l|Ws#s9n2yIjLFzG2kHA5_bx)ojoLxTY7 zQ*eMG7w_PJgIEjIS)80-1S+EaA(aUDV7;LghJg8VnErKO29+1+k z#0p4G>aor!DJdwn($`N;$OD)mQE6CM{s&z2dPc1gpFG;P?&CSix zO$ND5FRK_DYTyP3$VBuKhYzYf9$IXIYHOw#jVV1$F`83SAg5-u z!}Rcg+VK_fsd?#{d8t!+I0{nIz#`Cw4nLR!>T*Fxyke(lWMucS73Juaq*lO&jc|?t zvE?S_l_us)DVdT8N$Xq?^Pt5)xGg0B5lSp5NQIWBu~5sUAu^z{2*S!O%_+%D&d({$ z&70B*F%arNkeZ6jyp&3qxFkeJNq#|2YFTOysO1cbIZ%hs528~9q5`8N2RjOCEV$@_ z)a^`p`A}yGLo|ZrKy^b=Y8t4)0M^F`kxR`<1^2B$MH5(D3?hzHtAGkoaIAyn1tId_ zp$BLl1|@Wkr2PEslEkFqDWIXbocyAq{PN-{sSpovL-l}LXj#iZIUZ~l)P3M_GUS2? zEC~&5h$Lv(6V!VH%Rrr;lAjFjkHeiV04mj!Gg6bY5giza1Edi$um&2e#enb`k|OXZ zL262T5oicDHMs;_=R)ny%*%$@0c!5T-6V;yp(wSm6x5H)NKFK{(QBcxA&9I5(wX*V zgt!k$sw6WvHNO-zOaitKNv1r%C>zw~_h!Y=l$e*CkzWL=AHbR<5H>+&5CPJ|6sHJF z;|jRcfx1=Tj-n>SDj9^rqQsKa_?*n#Oi-f=;#7Bsq66S=1w=7tZX#$rG#xw)2Fin= z-bfD%sGSB1F6~5bMtCmc1*rw6PjK3WW)&%rXl`P5Dl9XA282?ROY)20xkk7+GcP?S z6;yu5!y86f7NDdBuEqpQQY$j^((*A11dwAg)HAfR{xdQ#^vL_?rGi2sRRO7)tB{|j z038aO(!=YUS)81jlarX2nqLYU7>AY*LNE)k6bAw@In3Mzlfj;u;jTsmNe>5X&;*){ zL}5nc<;SO_mLz88K`sLu4ehd{G)urLxGHjU zK%=H5CGfsDe{y_gN_=8TNl|7}DX60j8(I+pwVjJn^RUSYB*#M<(b=h$<@rS^piHdM z!=9J}8cryl0%hf=P3d7t0#ACdgW6F!pn8B4)NjhnODw9K(!&87d`^CTc4+}Dg$N@gz^M#0(FBvz$Vx0rgmm|a^QmNU zNl|72(lAa^VsdtIPGWHeY_LYLpt2+*KQA6s@0I2imL}$adhsdoC6xuR(MISXh6+?A zQQlL6Duy<;Kx2wU9xQ9!|I< zcrZj5&V{MXOqt@B<;TRp0BT=}Af!`L%RmERnfZBBdRSBQbW4k;z?DfLltFET4Z!p; z8X}bOA(Vl;Sy=7KP67=-r<6jczH|}V1rXY^lfb1lRs)Jsb3r4npe8v&UL2tp+~tpl z))P}Y;hvC0D9O#ti!Vtn%7u^5!4)BeS8+*x0VFSG#K7f|+z8G|sZ)?7`4Kii`{x{> zO2Q*GrvTwgX@nwB9|AOB7!Mf?Dyc+@8KfYGD}xNA#v;rTLzo5jb!ri`@4&BLT3n=` zl$ocWkqMe-MQA|^D7d-c#z>DKTn|hFp-TZ_QA%bpXm$ovUZoc0fzoDveoiq`I18kt zmO&CH%J5weJ5(H;E(Jjq9hxfEq8!k~1EkUgclf{xK+QF@t}Q|mRF9)c@)wqX^?~|r zNTY|~T2ufk2NEv^57a|DEId#NaO-SJ4{Kh2USb)v7bSu$huo|K8JS_4VFu|h@xf-& zQpz$5K(iZcPzFSrA4$5nEIoHh4|_^kCYS|Lzzb6VZd^|3VTI6O$qb7QFpZe5gP0wk zSdX}aIVbXO0F%1o-^f2otrBCVM4gpQ5g3I9&SmzBsT?lmu z%(NaZUEREVUC=xsXr>C}%^o2X*TGbR9hG66VFG3#<{v@zX-R&5PDy3~s5S+ekYVo4 z2T=w0Xlia!Y6`UXTUwgb!wcyw#ut|)mXsDx@n-B1MiBv}xuV1=8U8(Nsb#5oCB;+x zkmk|(AOjV8@RkmH0Cb8SK4H&R3|#;qnUSAS*gB<0Bt9(@G@}6-nSmvwj6(3r0dOLj z(mzE5HWdbPU@oY4kyuozUy?bcha){FzqlA&^~%F%fQt1?GIc>-NYw@RA;E)L#Z!8a zRix))Q^5^ zJQbI9fQf;jhZ9^hKm_)I1O$9Um1yOpCiGiWCM*!5|1^Ex;Rd7L7J4FNRv8>}v3=CNyA7z~Yu|QtPItgNd z9GZ0s!~(f2>okZ3vN-Duhy^k?>nzCd(xe{v#4l*3S^%1YAZ^)Vz2qt0%smq5f*FZ< z>8Zu3C7|>vjxL!AYIWu3f#ihHcyq#+zrZX3#|}unB$|3e(*@)VVKiCL0L~O| zrXEo=aY!>_iZ=^<-3iPh(B!N)6NYecNeajuHi$V>ylqN*M4+{MW?njIoCY!+JEgNn z2t_;>RG5IKnV}Ydrhqw$Q%gVt<)HqhMh_o&940db)ItVLBK9z4rcCMK1vOYx<8$&8 zA(Ox?pfY?)j{vwdfb_tNGg4DargZj*CgSL7+$mk`*BDutw{o*(fiig)d-20mqpjR*r9C_;si2Xq)VyTSM1K!= za(+$@WCcp`lpb#AJXA_%a>;-X~z5Kp~~;we2yBJRE*kqMC$dIGGt3KrZg#ElLIV^b&K*6Dx~BR*1!eCdG47Q$XK?@>Cnjg4 zf-X!t}&Au%sS!3SJZ7Egg10MXA9l3D?dX8d|ur$E*%vVqFBypkzdMj*>M zK|urYT9z6}fDP&?zaCKGl{&?*G%2x%3#rc!s!fCcJQDcc<`u)6;zXfvnoeQ zX#s)*>ScllGh?Te_OO>Erh}xWz5Mc`+o(jb!MX8CosVNF2`Pr#?#R@rzRhc=J3YmFa&Uy+U=anQDXMmd^yG5QRhx zH!EZoE0m=cRVoyNmItOPWac3comnYV=9hA1f|rkg9bcZ2S&|CwI)D>fL4Iali9&v9 zi9&fsVhKpGLQ!gRetKSJajKqzXBt=}B|lHS1R>5BO&~Oh( zZE8_bevuwL)tfUjFhtB6ji=;PlH%!6!%V_4^{8PcRpJU-+CZ{*ASh>}W^cbNP<{jz zE?ExD3=E)#uM@aX%yNNHZV<`?LV1Cy(kvfP$$*r1!9_)uAIN-=dEP7#3sK9H(xj{a zW(Eexx@}1Ddc{9ap&+p!wMa)HDZeB`0hCMg(jmbKDR31M6+9rzhjnu@vs2;afI@L< zYOX>_zCuBMajHV1LRxA$S9(!uVo7R|LUKl84rp0aYO$UIXgz0Yib7JQLSk_;Xbvhb zT_H2CBr`WN1-$S;p&$gNb! z&CE+tNJ>r1FG^L&g_InLc?yXopw)3D3gxLqsa7Z%q-S_~5hYzEfa0BM=_)H8WE`mO zK}t~EI1&`N=H^Z+&B;jx4P_RCDqy4phF-^Wg4P7YXO^VqqE$C585tP-3sQ>`OY)0~ ztzk({AtSL^Auqo~AwMstQUSEuO*bVqEi*4QMIkdUEwe%)AEre|A*r+kMFm$uQEGB( z3aDaI0Jpb`!O1$YxHvyKGqEJIEVCpNlt4W}r8cO}DuvV@c?yX+>G?&OB^kL2C7=Qy zG!&hh!c|%Tu~P?B^`&K2=zvmw377$Dl7L1l6ml~wP+X+|)})ZAke-vDl$fIco`F;- z$>&N2Sy+;hnpp%Ib}Py+D9TJMNmVFFEGkYdQqaguQ-DY!`Jp_q7+I~3LSjyFK38!` zei1k{KpG(CYw9U@D&(b>r4}jV=BI#1t`U+7i6sg}rJ($ms-uvRUk+AQl95@=l?<+X zl0bPGTvz60CZ{SC=jW7yIwlHf`9-iu(c^+=Ftp+%V#R1I4w+blMO)K_z;rXBuJJ2P$|^x^r$p>xWMFX4&jU^5 z>K21GUX^5)r7FN?QW5n9co9S~xU>SdC%}_CpjJv!DyVWuQAjLCYH=4UWae=t78JnC zU+9{*VjYFz(&P+~Vk^+#iB&>cVs2(mWrB_Zln>gHfZ!z-C+KknrGf{$6cRxdR%*OL zT7GFBsG3qpaQARlF9tQOQi~Geb+|H1K;?L9Vo@=qeu4QyA+abGQqd*n=YiG-KnwPy z{1niRCQu1no{^cH0V>Qhi$LB{$SmdpZDJ`)%q!7RNYzW%gSijtUT}?v>|{{a2Q-VR zkdm65lUM|9ffeg;L6syHCnzMQfm(1-f#k&E)C6mop_yq2FPCJb<|RNn<50D!ImM|7 zpa4y+0B<}1?Tyn>NG(amQ(x>Hjn<(Xt*{D2BMVf6^pp-r{zNScCt;Q=@D3Jayn`Lu z`$lbk_V7UyF*M)6yaw?Z8$=Yr&1D(>&<-Blv5-;| zZvlvs@Fks}~$aD)+#IHQV3c#vxcR40M_i!<85ohwfG zd<0sWWd-j_L-jHXNDS46n`C$zYXW6~3|K;}=wT~LO)D+RoYE5jn_NlHEXhes(t~a` z22ZV|XC&)`u&#c2W_D(=KGMh}WPc!Ja8cPv7u@;M1-ZU>3N-a2c^nb{Jsd@;#rZj9 zsVP&u8DR;93sKpk`W&)mPCc(%HopLT(08G+{~QBBG70_0C@egda;71 zpNp$sh`x&}h=NYS>c9qq!BarsxmoaF1k$u=Nj?{J@rwee%LA$y5*5l5DfOVWOpkC_O!ecu*ZBh70@xr=h4Rdt90hQsfGRl9 z9sq^JVjTt0n0snsF=$Z{$e`ln#G=g9;t~b$+8wU^JP@N;0W^Q1psR~CVVYVA)|!}{ zk(pWsTC=GLE772(yf+oSg<2@R1cf<{QLL;bEU3wh6CNZm_d!Zrc4$bU8vPNE(WDo; zS(`z|frl1AZiW@NCA5f~M-7wl#}3Mz8OS*_F4tAD<%iOwEFIKQC!_@uhNv<<5{?R> z#gCvxa{)z}xv51~3XpagYE0r*hT>%&R?-JQaM!0#IKN&C=(P2u$6;)3cjGpxsrU)a-fvV;@rea z9WID!P&>3(0k#Vioby3z@ADul_CXmRbXXy1J1}VZVF_d#IanEVR8awZf(=(@UU5lk zVhW@<0`|e&(DJ_CrK(wOil$&I6^1;Fqcbel&5m#CRQq>r{;n7 z`Q=oiltRU+7^@YFLHR=~wW1&=GdZ&)r&1T%luk|2($wSf%mW?vn3$7OsgP1y1X?%= zUHS-~%L5gZsh~nD6`EEc(~b(@V--OQ+VWD%!Fz{wK(mOIT(IB=m3_z|l@DHk0t!j6 zYDkQLSHnPM;LATj5eM2i25Q@i&Z+~s3UrQQF?=Z&q)?1dA|d9%O`9kZ)iW!N#GNoQaMZQX1QkE=m@* zWp_G|S_HL>g{|G@Pt7aM1udCNO#z>^gWA4Es#(xhQ}kT*M9bcwWp=Q|o5;mLNk$^1 zFo9)v9R!UT>OB`(1Oxp$j}0;kWmLMut)*zb_1^=1FynU$j>Xu2NgaF z$QBisBqnEbX@H6$FcY+5J2Nk{Br`E5vp6*cQvQHeOXp!2m!?paT9mJeXAt4aaP%%} zmcB+OFMaE^jx9nk8|94=5+D#v}n96HAkT!zn~yB1y43SHat9tn(8NJGw6nZ*jJpp!ljHJpN3}nJ3Cl#~-3beovG=h*=qKI>;bWbMT+<=;3>1Z!XW2u<-DarBciX`n@ypi}*e5|c8Mr}VHDK+aqSopS&?a)?n6HqwgGu!DFEwH1gMY=n$RnqcW^ zcQGEpYd{B%cekJpp7?B4QU1 z*f?k>7}OO+bdN#%^D@C^BqFvE6cnYFlz{f{fxDGlVBHXhsTV60WMt;#7v~pbRKjX4 zrTn~9h2;FAqSR#2fM9WXYLSwHMu@+QzZGO)E)R5^v_c{mWV0q{=L2YKUs-BSegVj# z`K3h)&;c+l1#pj4N1+@#@&M_o!bT7aKs$(v@<4-#;1eA{N37?igKJg9&?C~)V~B-_ za45+KHHi@&D+PF`oeQ>e625T{+8JgWI*|jeWiX@XQNtX}2zt~om((ait$QZpDJd|< zH#uO@i(1ODL54R`4W5n1U@|H-#ONl-#js9o(;!G^C2>uoIIou29F9V=K?A*zUH$f4A^D&U&}l`9dD%J& zp6a;@X^BM&pstVtXnrO&1-j-cu^7B@Jhu{bzy_o~K%Jv0N>xZKO63BbnV*;m+Cd23 z69Ve+fW|#RV~e0IfXD%$0IEcL_KxeiqfR9uKg&wGhSZs|v4iuI$bYprAT^_9?T7`MR| z$>4efQZyH%NAshGnIuFs+I$bWF%8}ePDET!LCMEwF|!-IcZ5+x@u8*@)N+FdISrv& zautsy6xCKB*TZV7?tw|Rpmf0Xs9_E~={{LIWk%2*17g7u$#~|X^2L)S5fs|RSkO;n>3beU6Clz#B2Iz#N%=|nqE?r$n zo3W%QH8(Y<5|q7j^YawI1p{J5J9Irg7wGIF1xT(}uvGw`2?92_8eCX_ug6kQu(DEc zE~?DTO9xBoD1c9dhsar3DS&G*s7zjdIYb<+DLB8Vs1htw3w2jM=8;JkX*Tg|yVfA{~XC z)RJO_#N?7v@GLNBrAoF!BDir1YM`WoG84E>qNm^nI{7fC5^}f(7wELI#GK5MN-M}o zHYxd_&TwvOVjkqUo$^$L;>1b?Nd0WD0GpzRoVWlL2F*>EWTbL|JJTTT(79i5_ZMV6 zsC|SyXN~A0XXYv77p0_v7noLNrskw5fI5%hN#)F9E=1QEG2g8RcLV6G0|lr)3v!+_sM(rXQmga^Rm-QK?^BBdvHsObre9uMW8$5Dit7SK4lg| z53x$lNlh%WhGqfKNi;c?&^_F+t_W9gD(Kuf&@njhZRt7+8sGu0M9`r%`9%t;70IdK zJBh3nAVXNGIf+U6pw%dv3Q4J;@ha%H%$(Gc1TGE802SoyoZ`}g)S~44+$7NObAC~= zCVVG)c}8kcYJvg*)v)~+DfwthQxTiBH6dewP&eeKp{Y#F0WUlOZM-kmufsQeO ztOzMiRR9f-gI3=_s{QQL6wt9J;ImT|K%ttMS_~PWgO>uiiFt|XpqeL@D><<^IWYy? z&4iRc3ZOPbYDEb&TEN@xAgL5|_*PMhLLz7hPjWV>i2_<3n4AHbjDj9t&jlLK2OprN zUs2^Z9p;MfC?G8UI47L|aCEAW(BW=U$U zLQ-l@KIrC8U=YSr zFktNV<%XtDP#!^P!}T!dq?Vu>ERDxtTwN$~H!g!b0qa#M63o1)?gZ(@)z`rY0A6SS zfRhf|ZYox=AgbYd0~H7a%Oq5Hk`xF?CHJ;Km38o2^OO|;xdQm8g&k`aHnSMByd zoCj$nfl?f-z;dTjg^22SkPSGCwG1}Yh3b;9P{OE8QNv0w23-NFr8QIyv8-~Cao{EF zAm6~kD+@KeXj#Fd`VQm>qJxwZ8l-t>wFF}xs-b-#KjPR>fUBCsoyc$m87HEFLUiSi zK7oX~ZwGa23S=e->mtfrNP@@c6})3bNrDjt&`~|`Gz6q|X{8Vy%LTb+TEQ38OD;+U z?E`_f-oT5htQ4Xjb+pEEaiu9#DAA#|pz=@0F?zD zf18hFG~AI0$AH?Hi3;GhuOd_zXjrWpNf(lXkevcjR!{^wF}KnhNhdZ}W#)m#yugb%z=IW_={j)t2|R~W0Pa93m1P!z#>SK&=@*i_ia|RgK!>L# z7K3LK6N|aZQ`L(=t4qKWeV|Fj63CE!Za!!P4Llm1T9KGsl2fSwKKV8;A9V99nxT+B zJ$z;md^R<7ePj}N$`drI4?c)RPazz(^%`_OT54Vi=-kefRM3fZd7u%36tK5)6DzsE zyEQ?M_;4ugI77g&eu!tB&1_q)+`BB3hXgGrwe1J;|JR$w4VdiiS zYtVd_LPjDnp$*Ax&>^vHp!`6+nit!USUZmFWsO?-!FLN_9KD#w$iUzU9%hBqCeYdf zR6`(-P=V4NWGjGrwYrW1crO67{ejfFP2hqr|A*G0&|w}(b*rb~51Mu=&n!+wGXlNQ zmjK>J0AA&c%^+x14Rt_X0?4%>7edBOz@y`!+7~1Qb~Mt)C6E}@NT^r!6dXZwUzz#P z!UwDZbd(a<)O`4s2nA?{-~!$449bg;Tmd;z5u^!hl|oS}H2;H?fP~R(!?|WOB6l<@ z=o=NV)(K?AUXL|N`QTB*jOs@XGoc9?waI-NPsYze?;26kfxL{zB8uAfARoZGLk6Vg zY6=2_TK&YQ^avPLqDml5wwOLa>TZ1O%drp z=ECyRpfh8j{pXMgro<91$OO59A)c*TA+)d#R+)l38a=eJ0wrb*XdkmvAu+4NPI0Ez z#B?l5rp8DTnU2stokDVAo{o`M!^Ii(h;9?r#+qa7(W8!f8}VH$`US8aHb55`(* zZX}PwEP_-gobV7pHNFpz@wjp$p1BRgo*$6AVOdWETcD%51Ed`1#0~l>9$bhBL-i#G zEFw`2UqBB}vO&@gs?GSkMWviJ8wxO*9jCLRT z(Dqs;1_uAqB8BAAqN3Ei5{0z<k%Awamah1RaxIh}=u7M2p zg2vhMKnX*^)!zry{VM`3UrJ4ZT*n1kgRM|dlwX!wtWcVlnUb2A!v((Bu`<6Dw7v^` z$q86D*n!|-_oCFo(oE27Szd{rf@dChO&+S#AnWwNW87TeQ{BoFGfNb}ryhXKf(&j$ z#@h1pK=-jg&pbkLALy`N@Yp&@2O}B?%eu#W>cGTWQ zPz6dVcoOiVhB<_iFla6ax#fYLh(Wesref4OoK?}7N5~1r( z6rdXdpi@G*3DEKvau^jCat#1I(+F}#7NlbhnyP`#RO#v}Wa_2rf$JKmY49~kT(A|u zpxa83j^BY4v#?1n=smxA`H*YIUb@73=BC0{8s{q5DdZ*K zZofy^js`8b-9mQI!b%b7NJDiv71JqrmKc)WiAkxbMb~RQMHj}55o}r@7k%YdE~=rQ z@fb=*d5Bmn2XZZ}Jai*Fr-5q=SXM)IImiNBSiyp*hKti9d>GL-3ghz;m1?}@kQ(nfCXbl$VrDhiB@hhZQ{9KgF8~T8|SuiL)GY5+~v@s7^^$$N(K}1v&yEB^7*cL`Hr& zXvzVyRtZwS6@!+==49q(f>u(c!p5XQ7uu)hg3j8`OHs&4EG_}9yvoS|AGH87Ar&kP znzks0cB?XrLH)`i@XjEGl+5CiOz7lCQff&#=%fVbLJQETlU#ZEdAcw@WWfcvQBVx( z+@*pJpak7fo|9M!GCLJ?8bxXm*lJMgAg2;^qC8J4XTtuMi%6xmZT~ar4|=}rnZtYLHj8|&6VN|@W~9|Jwu>&4d|?-)FM5ukPMJ- zK!=Yfr7FNTe1RG@pz|I;D#2_1pvML2DY)eqDdgpsgV%zAd$&p8HEN*y(7~r*azVQ5 z@P%d|Hzq2;0s!V}NI-!5+KJGfI_NAW@adVUDbQ`&H14k&Y% zr4|)~&q7iFU4{p$(35jYLG#w&*e%H~&;|F`bzs*&=zywnQ1`zGax`@&=vWf4TIlq4 zCTKY*Xj~Y|2hW8g&37w!rh!MDLFYpupFPi&R+N~VTAp8&4Y{Qo>8^2*(!6xgmgG#( z{$FT~n^>Zds8Eubn+mSXlN0km$D|acmXsFdDJ12WWN;zsZSXlQx{z8MRO}?e@7&Hy z&{Kfr;ml%%-29Z(9LOSWNJ$1>+5s9MujIm3R)LyG3Q#*iwGPzJpfCV8lk^lEixtXK z)pI~M8-P}BfkO(^B!S)F1sa1;0BuAD4FH3TfY_Uznp#k-P*RkboDCY>1|71HU!DgF zd(b8A3L5Ys67WEVrVe<40i;m`*~XomUy!PhRa#u4kd~PTI+GD}@e8Ek2rG_L^HLyT z0&ko^OSLd?s|sAyCxZ^!qEZ4u&E~b3IS2O&0oZ(bCi-S8rcAV=uN9B6xQae<*9U;S z04ojIK<&*$v`ZX83UGF#DOm+EV}N`)33*k(;K<2zNmZ){D7<~CS~}4ssP+v|P_2hl z3(yi5(itjF9mHiWO3wgaNkOGX&kjhV2fb&2ZhDVcQfY}U=ww7)@To_-&=b-yP7xJP zDlLJWbOctX099v?eybU@(Xt!9&=vprp`hb5i9bJ76n6fyPktWgkT)mrg+Zt-WE^Tx z!v7H&sTR*d7R1@1_c0AdG!VTHVrik7GchoL$HmJsQ_De{*dQwa5|fHS&4Cgf(3lFi z(FJPBfLj@mHW=uhr@Yj}BHc{T@^J9!t|f`Z*~JQ#sU_g%K}mT&cojogY7yuNXwbo! zDXE}2_I%JCAeo?xLsBw}lZ!wjFpx`2i@{?e3SbQ>u=_;8yYUc98H)8l_h^Ayk@*GS z+fqOSti>fosfoFu<2Mz+?G?CFAsYpAQo)``Eh^>$xw@pX0OVZI#5n9EQqVLN=rAtu z#q|n_5ap2mA?R?JqSWNlB5)vpTBs@c<$0hp`I9o!6^c?5LF)xTXAXhaM?lwWWaj6A zhmlG^$IC+w#sSSIgU-2zxkVu{Gq)HtVwMCt?1~FIZKRu4lnUZ26yz5dXC~!O(m&mr8#-2#l?CG!6lhF&<18+Vo7Nc z_(&emSv#Qc(#!6W?<;yD**2^2kkHc-F1q3f(_EX z6tH40gkn^MJ%VBW1*v%o3JO*V31y&Nu<-e3Xvduq*8hY!Mwk+OhQS+6XdTlmc}@lf*j2aYAn!ocqXe-cND*m!t$SF&Zb{6-Q&y~jUxX>k zN$Ox-4|`E+8sugWR&YCMN)KmIYFbKuZenKMlpf~dk`#yt^#0@?&Z3+GD@a&C8m&F3 zp@s-mY^U$17bWKACKl;}tB!J640%^q!l2&BUOk^tq8-p`#1c0Jl zlbL}bb_%%B(F4)ac*i52;0|dC92?SSI@wFedwpVRy}B za;4;hE^YuH)dD_L7-SsOWbnzyB_Owf=I24zc);%nw$j%`ZKw3y8uZ=--&#PHM^SR< zbWqYFF^A%*39+@Bui{8ryr`u(yoG^LVFdZ4mbg|F6oD!X&_s;_xZY84f^A)dWEO=4 z(1Zq9U5!ElSY1MO0zy?nZ303GtXRX|Bw2yIngJg!3TtDaw?8(40us4A1gk~~>n$K9 zB!)E!70d?OmWJ%03I=q%Dn?ld3NBdfB90?+prg8wqyW-@rN#kGli&*8i=ePW4qlLA zl+e8lQbD`WJx|-vWdnt7W*)4>M^xRQu!03HhXOQt6BC-?^oJ`rKY#)YIXJq<~RG5EHbZw1+EX`MJ>gAt1#l0V@bnLA!wEKqRF(BDdqxj}8D)D+O2FgcKG6Hv!TdnhsqCEZz(k?u&W>hBO2JQ1dh zptJWgixr?p*@0&9!J8cuQ&I~{K|}k{%Pvat6^au}GK^TOZlIor(i2Ga2!OTyAVUFMi1_;nv`{p1$E5Dg&JuW9&irKpz}O6vYfy} zDm^ft=^7fK7us++1+W~-y^TF=MX70}MVV8w5O?5A^}u->7BJ z6p&UDn~2z|>KBMGq?OL$L#6h)S>qKM>B$1H*-fO0ct5oAM2)WSkJ3$5spgd`B% zV)&)9uq1&|53xh<|;ci61v>4ca=~M!7$a&>6L;vA9PHR6*yZ z>%yFsn3tjp=^cV>a{)Jep;N*=G7z=!HE)nR)DWuiyG;#LbfXq3hyvT2sg$Io*27ku zUkbXb5^O||NJ&v*UU3fikj?mlqWpBwy|Ytlr)c!BmgJWt=1lQs=;4B?NllsJ%}@%7 z%N~xD{Nz&5;LGmg7lSS<`nCt73JrF z7M)G$VG9EtUQ-O8&+lQ&FD)r3Et%q%Wx&k9;Mc>Mo|*?*m6u;M#jl4mC9x#6xFj*R zV2WQ4H^k2PoXouJDSka%P;O~a&J@2M-je*}c+kQ#kZkdk9#+r|bCpwigwpc!OF$RY zB1w8P_V9xCSLT)G##ex*f~I&g_V5*#6lE5~C+Fvad|EukuSXgp0=+=4I36@r6rY@v zSX`V6lIDd-BLsLLeg1gx_LC{zOg&r~i8&=OE^CiqYDH#AJZObYX)!{SH6=BvG<}L+ z4_|p=QC?FoS8nQ zM+Q|g9y}oz4?ciCwP;EY8_222B~yC%A%Tr#3M<%@DLt}iGH6C*nR0_xg+RiEGT;Is~keuPj#acXHwetbnPC`k#VRutqHr^X}e1gDbZlK8UB z;>;3o66KFi$t+Gx$^m%<>PmK4?to-Gp7@kh(3WLz&I2XYc!+=E(=u~Xi>Jg+=@A35 z;vu^aGxPJ}Q}aLurcCMR;Vw!nhjYCddjvtbEIubSFTErq9=x-9im!lr4_`rQK|E4< z?FU*1QV^e%SezOU${$&;Kp`UvQU$iEv?wROBsI4nC$S_Ibh~Y8fv&27Ny?NSzM`~b zG=o4Q2!q~&4B{+FOo}hhOex8j;?0rK*4ZNfsiNaEGSf41GSf3kru49Ywg^q>;VI5d zEGmgFEX^-TEuPZRBMjz4xbZpp$%&vK$od8{RTh37DY~7MCU!mt>Zdf>u+-r=+G8PpO^KBZMLf8WsWz za}=ef!8jT{ETEEWO6-)Zo6HOhi9Ouu8Oe}7OKK5F^dm^L6x{sDOaW_W2kC{dHL^Il z85pwIK*SBuNXk_Z@eD*f1`#_z%iFhth&!OgW;a0uBS`T-P|G$8M5Kd=pCIBJh*%3E zR)L6nAmTQt@zcWzvJtdq31mOS&dw~5eH~dKyE?K!_H<@}?C8t_nctZOGP@%SWNv2` z$jpu`ka-=YJCu%kIaE(bdrygvZ!XmC@*4m4B`T1b}F z1!93#v}Eal+zXmL%L02T5yS<13ET<-dua(s4CJM(t6+ce!YhsAaRW>0#O$`1(ZE!hvl-4OhQ+oJ7Eu7T&T+l-B zba2t6kp;fSjt?>l4wHe`-dP&V;4{LZ{U`KZot0}|X)dTT2j2i&Tmo7SUsR$1Ilm6H z`7ysJ1$2XtuA!BJl97^v29&R0qzUgSf`_>5NHFM8!yF^fv17=Fp$v=71SN9RMi#}3 zgTV`Org4)z+r|oQEHL)4fb!6k9u`kOH-Au#jofr&0hRhwV25|~pvMNJF9Oa6sNMqC zKUwz73=H0&gFL2kqYMNi7FkdfZ^lURW=vVU8KcCTu_kJddmF9dZ8PQZmbD(#K0&gFZ7oeo?Gb`EPGETsoc+1s!r)CwXk5I-QT7?P2ypcPyI-px^5tPqlzo|9T! ztl+Neo0y!DnU|^s%f!$bDi)9i)HuBj3KVdny$WK1W?12Q5#ww>S)we1Oyx-9aTlr+ z9)m2#;RN{H4y0;|ozlY&YwyQS>0t#`ec*WENGUBqa6qkHaHSCo9T4r|NX;$CNG#4Q zo&w3MAa5ggG~aN8*Q36JP#+-FCkXWgOhLP1tl)MH)RY^TF7I*H4=qkDD%MXfD$PyG zN!53OcHN5gi<2|*^KJ1O7RkiSJkZHS;Jq5)t@Yr2 z9H6rhL7g0sL8-X~C6(|XhUP_8qAWwrDSSMzTR9J$t}Q_8DY&W? z5*4fzV)8O`K#L%_)R37OTruE7yQ-6N6HAIRD{3Lvbb>X23@<6E21Qt{LX5RS9#>3i zUJ62`nnF5PEmyTd3{;_qqfbaJS1lJ}@(tX68(616;tLXp#yp@MCODE5_N2s~lAjDJ z+(DyXkkKJnE!x8dIYe}dUk__eVp1w-)POB7zq}|B)LrGQ$jz}TE&vaAaDcCPD=JHc z)dqIB^19cZs;qCy(< z>KJ&D0LhgUn+6GH=(-M1P&y`5s}fzjV$BxfID*ND2c?|eZ88$yp0qJ~Ta7~VuK}psP2_>{KOx&~>k%Di2<>W#%bB?_&np2G2Rr)~*z8SD>~-JMrWaj6?2tkbQvG#0B{Z z)#!6G$D={^o>sUHsuYP$4ZO zMt@X8w}YHPVv$M>kII7%EJ1G8p(lPwSphBh@p+v}9TXiLg#lW@9}&*Tz<^QqE2Jq{ zf!kNbkg{7%AqB>Ow#{%h%s@KfRRAaJ?&vi$Xr+S!*2);Pw*pof!)j^&1oZ0G zl5D$B3)n|^3RnWQ6`@M%6&|B;)yCwO-5_tkD=Cx^q`+E^uh%2SOVw*1<)DC#idEQ zpqYhI$WjJ{j70Fo2;f@`QsCt{q`gbFDUeWuwm&s^anBmyDrvEG1R(t$tRsODID!Q& zHfXsr3ppDQCpgSN@0|_s) zflts;5SI{ay#xfMrj#b9f=<*fEl4d&&d*H(?eNSm0?&4p7J$}?f~UZW^7Bg|Jz&rt zPG|=`CMmTfF+sNoY(@(BGDBE*9Xdc@MxObo^|uF}l#VfY06QTc;x?FbAQ_JpEQo4& z03O51$VT%)%>r;28sutt>jX87Ac+NBDG%z8Ycpsp$i?)0?pzkC=`S58UP*sj%UDB8jt%>%cUwjX6st zC=Jo-^9Xy?ap7vnkTAGHhfJj-+S6F;aZr~RUW?-!2L?^qBTdXhC-T9gz#4D^V56@U zn(%>Ph%4YKp!z_j#aJs~>a5hn*-kJbrd0w`1h)+491TeEh}~$^M!{%+qON3$CnrE5 znFW%9FAsdnq6y*>f-Q?;Pf#~MIX@3_2U=o|LO~Je2FA>?R2_u^=wvLYZv^fQfwrV5 zWI}E>hU)TK37YU>188R|p2ki< zEx@1RDP=M0WFbuFqZZ>_esGVWTJsiaO+k{lDrG8_+tYER zHS}`ZnNYc%7;j9tyu)95d!_{-=JAq2T|C$z47{L66u_Xk1NWT3E3;rDxya=>xRVGo z0a}iO%l~BJ3VXz4A;fR+Vj5}|sHTXqR;a{L0f0tq5tSLJmxwWUHyWt$4l!cIn-Qq@ zOIn~Jm)~rB13q*+3rC(pAG$4}S>frHm{W{ifE!>fz!PZg2GpWef)DoyF@X{s?0&2z zI7kN78U;MoP`d;Nc?o9;4w9sC3BC?TY8yHwxB)1~55f|>5~V^LVkP*{3RL70+;ZSc z@Qpa~6nY76jIZ>BwWz_974Q}}yaf#z|0l}?NN7Pj_ugcbbtF!@9m5eEXhlrVIh4VA zP-73&Z${aSlEMX=DkGz7kJ31V8jG!QSAnNF1}kH@U~}i-aR-h61<=v{;3ZDU`FZelOQ5?6K=;$a7D2(! zQ-t8oZ8J3kVjz66Ln$(36eIT1q{dp z8n*unhu0zYW%Z;AnovO9cCxfIX@57Behm2 z0ku%_2z4%#L8>Z1TZN!|gks9TQiHpn;{?y$|2cew*X$tTQG*P>w#A`$G_#C_QkXS?wiPEGj^zu~$clin$?IN}% zhrL*Z6|~NY#i^h)0V-Od1trP`FX-@EOuRyjl>&%_DuR~tuyPHm3|#0I5FF71k1C~M zE$gZw`^ykzs|Lg-R3GDS9Y&0XTnVUEOrP z1-+OkMq77*T2@eK79<3rCFgmX7a+cz&|}##!U(+tDIrvXAcn-Tb^<9YI^b;`@aRW$ zg-&HGQptdALV(EP13bxqtN1`p^aQ*IQ3@*wVT0b_SqbFn29!xmXh8?kigUUFt-UrH z3$R7GSQ8m2C@~x2)QAO0zJ!z~cL%&=^X0~oZP6zWdsqv=jkLrplyiv?!q^TdVuzlS z2;G^A+C)S@=mONtBB9OblUZDX-e!b|K|&Z>^8Kc6$%kk&{=hUC(Ps2jX2jBH6hmn= z7AF^#mSpCorlJ=6xD=uIijyDrBnhtJ0X!{XEa%MlszMV6sy{JXggsAChV($CGbHms z8b{EHQAE=TPxlC<7hdqe``R!OP@@nO!AOllh($03u(A?dU=usY2QdQfR!|!bX<#4& zyml9TR(6DV8Is~4C6ze;K+l=_s^dzK=#4OEPskD$cm@NVdj%VR%gjkYUHOt&P*9X# zPy||2s{mgG10RBi4g!i`GZJ;gP7_a-#260bMsf~n_Gk9X%t1BS5RbvQ@;bR|O+cQ2 z4F#$Y6;6;u0xfJo+G#ru=xc#16`(gWClP99LP{nAtuc~|B$R$Cys-&x9Ky;KYP2^C zKm&01bg%%t`3@O^fX3>;#StV=LkfPcfiL*2aAbMRCMxJSJJ2l*XiZd@FqS52)^|`d z4m=2mw{;3`&|z38Uy_lkTMRq%RJR0j=BaMFF7znNDd??bkOl>~1_h`F1!N8Q9SJ^G z5cQN1M5`0^P6)!M3?lA?039z#l{+D_B)AzE{IVp$q!eg?RTgp1umV^Ve6vHABABfN zCY8aY3Yb&{9i0okuOUmF8+_fH287ZCE6@Uy+F()#B*B!W3!+%F^dOWzSjqrQ8ger* zbYvNU%tX2&A zCLOuK2Vpyb%mQ6QkmU>(b^(*FVA2gtx`Rm%FzE>+1vWYwqzZKMepU=O14Cz4ESQV~>0r!?2XhiYNYhO zeW?%^r*ng@0?f*UP}vZw5JDA$DUGa5P&lW7h%caQ_z^@Tg1B+~pd;2wk(702fs}M+ zfuuW2v&x}TV9ns13)T!Cd;)3C0(DzTvns*LvZ^6eEyQK@5ULSEHAARY2-OauIwAh< z0#OWE-5`(mfz1G&jGi?KqUaoix&Zd|MF{6Im;=wCpc?_wbMlLe6N@UTa?CP^JKQwr zG3(%imk`2`vK!hSTL=nEuw!O}SfGRIu*@4kE^8#>DnrDbfAc`bp&Hy{OY&jEu#h2e z%y1Lz4ldACJ&c`Pnp09*lnQFvXXd3P=H{0cgSPT2l!8viRVYpdoh}BN2T09LECJsm zSdvy{C^a!BrxJ8L zrh=6*ygLAyn`(hMf^H51-wcT6B$SxmfEgi_#B@C9>LE~a$yyIG82RL4)Tl2_%2Ed1 zSjqv5OVnd$5hsa*kEi8NNlnYl%LMH+hzC{5I21$g84y8J9iLf}nu}ix3n-RRmGtlz z!*=pQHi^UfThOi@hBQjJo(Fj!HKD`973}kj?8#F!8$mZGpe6(Y*sY{4FzYieJf;M98TKJ*=5|DXA6Eqo)xO$N_25 zfxLu#+&DD*KjjAmz`F#8m!+)jdA6TyXuKGYaNBntGNdz@n) z=-hD7Ju9Fy0l_<5^YRtaic(V*$`Xq*K^Ngb?`+P^FD_9iC@lhA%2TYPkX2e-qEM2N znU@W^2{w_dB)>oxe4By-!WC$_nAVn|q@%BR(h;H)4~+_fk$`lmEFub^2L*ouM*-<( z_8`X>B&9%N6Vd7=)_FbHb1uZtqhR-Co#aP3mlvKUG_ua2%Jc{%gUaW`oRZX{yu^~s zGWd8YGy`MGqlCPO0BoofvkuI*2R5BWjI^=o83=4W8Q;@BQhaIOV; zLKnpo&-fV_5ScdX1t^7}6}dc+AOm>;OO90+AS%aZy~k~`paAHSlB|!of&o2)nmOhv z6yz5dXC~#OD&!`XBxiu8FcTF(zC+Hr8X^8J{#FX96^Wp#7VRDoat%R=RwF#oN_yhQ znxXh0p|1}PBQnh71UV7hwS)vS=@}_Y0B!`y*@g{r%^+HB2NOjJOMj3pxGFiSXAzha zdbq(E1LjO3vI9RPLO{;Nk{yyL$PQ4GeZWyoe0InJ-C+W`?M$JxI5h>78H#cWz{k+Q z+K43?i6sh&IXU^|;MS)CsPUPZoLQ1nsQ{fFOHJVdU0wifx+dmirssif9R!<_ms$?G z?xz^7?xLr~C`lz3Pf{Txi(qSK3PNHz3mg|@n2E@Ckm#gBw!>jW52DqZ2)*(XYm*71 z*$eUE0Z_S&n(YwHZ9mel_be(&O_|aOX{Kd$p+*$A7y>ulQL7j~%#4KME0m@PiVXg{ zOTl$5F2A9UQxR@eAjYY{tsP--Ph2BQ6w*5v15?oJNwdU3eRXOKLS?CeOrqilRF*Nw zK+w<=`2I}ruv3;fNDMsYWC~(|#+g1sYQYY>icAY`bAlw zHdPj=y_E&3PO`vN&47*~fihBQ61+=Cg`2wM!&7sT^K(-{_kR@S6sQ*~fNtgm)i~hW zh7@5f2FO^4BC2ZeKm?k4lnUY~DAd6je?N!?DsA8$W_V#v;RRYK_g)IY37~=9lKB;OdrxM|9Xr@{>!7Qd4m$f{kwwc4rS; zL1IyAUdfa!M$k|Z(rAYtQjO9!C9#JGdW9Y6T3XOmYFYn4ZMq(g+{B8M)B?~2vrIkg z$%zG^0i-ECte)UujvkiuocyFIojq(BnJFo$c~d%jc%kON1vnsA^MEh1?%@Jon^v5k zms2^VvxloFu^ch}0_MVO$YK!$4MY2YT@4Ek$jApGSfTeZy+v!Tpae?~KUB9a=r*8& z)S@YgS-4}g2N6M#h63Jr^(#%vdLw|nGoAGjmjv;#m-QQzf|nB)K{WysTB`vMfPCQ12RdEM!;`Hf^Hd4)dk=G1s;1X z2FD4qqLNIkiV(465Av)dW&{PLrll68<|U^VlN3QNprFqJWh|@_Bm#*bBakY3L=d8V z4@m={90lp*lz&svc)`o|uKjomnBE2nDBJa6OH))?h;Jhd`W&>Ht*J5lwYa2{}5YtZOj^ zGNqgg3U5&Jz6Unb3~J%`&}~W?6dfaBN;wJ?&fy>;5JdQaiV$e~Un2`7*_j2BK$=1Z zD+cFNkm4**WjnAF$Dj;ZnuK1-Qsa_de$aT87AaTqP67oYxNztJu|O3myse6HB`-G? zqanQrPPm<@Ya3^Q48>tQwR#Ka*X@G5gk0_}hBO?OLa5~sY9)kP4W=Ls?H-hFM?a>^ zdz?t_b|5vH(sRk~esKBbmt>ZKdvBN_ONtUR(=$ra@{7t7i&7Md^K(i;T?9~-2A}+_|jLe*z)M9moj8u>#l2SAC(iOlX zxX$^x1yFM!YYs|Mi*iyE%TiMy2aH3H@&HX+>gpmS1Lm9wewsU?H7a0lJ*D803#k(Ec>| zA=D`f8j!F|P0@rKS&&}>ADMuC2eVwJQWQWhtK|~{Eqx)~%pOkA%0=usFM3R>d_ zj=-G!L`amTrYImqsEz_6uYmGEDn?#O%1^1}0$mlIk*WY{ZQ_aJ2wGW*nh0oT z4N5A}#tdyh*r&BB&Z)gW=JPG%~}QUf^=+%zOPdH4sV=H{0{q8!qHNGvGGsRWgm zpe&7EVwU8C`!w*J4(}jvf$#dllPLVCYY}Qvptj*C3BVZ?y0k5+H6aPWegG1HLqKV9 z2Do@gOi2MPhJ}^ppw&Q?$i+g60;mj7$j>Xu2dgI(b5vnH~_rz816 zT2hNZ7Xd+5(nC@!YP$k5Rf%Y`slaA{Ig|7AN)j{kQj2iR?m}1K!{=I2*0}d@78fP! zhj{8`ptZ`7#8G0lk*YC^m;pxjpB^L-YQWK(^$xX37177Yz)+kVT#{O#U}dG?mzbNX zplhcP4PwNCSgsWXMIbsPGq?ma=A>(<0A+GPwdE-!7AvGGXh4M(iWO26G8EDkic5+$ z6>Py*b;708L2~L4Nw5s~k}og|bT?-)=&CQ!^>mIYDMg^W28;3w6f|;D^U_N)K(=Tr z7-}jMD=6sdDj4hOD46KMb%HMmLuwg>Dx@mF4axvDAVB7Wbs8ab!ByBQ6e}nyD!^^x zf*YKgSEgVKI>gK=GcToBL0elP9byt1sjI7Ch%h*@C>^5S7Ub-Ns?34}kQpFvL9g&u zP=E_4*eax_mN*ur7b|2a6eC)spgl~Z@dFAog+UcRkX#JORTG3r?ufD#=a&{Gr%vfH zBz9mNsbKj9>OK7itpZ?8%Lkd#*~6ESnVyjY8tIKsEJ`n)Qah!G8?-t$FTc1Xv8ZH< zH)An$sGc_`vm~`BF(*DLCqFqGx)TOb5TXOfSL!OjWERu z<%yM`F6YGEm8DFH|qsDLXfO$LqP7i%e$XJmqR8o&pm!HpfHq3XmE zh181FWbmjz`hfI3f*}W9)CO)yW#$nTcCfM6!4P_=1KjKJRJ9o6>WTzI9<{wEPavXD zow6N|Q^@F~A;#K4euR#-_vn+FHXubBbifB>67@!bvGyZPu;q8m>BkKr zl8}I)r=Dfz=UFKP=ad!|fGRL>T0%=ecod?<2a_;W2MG}g=szd`P=^(e5|AU=2}ppt z4#qZK(_Ct2Vh>0h zp!%RRDJvg!2p_S_6n$XW8`M-uO-uo`fS@OY1?Oa@q$+6SX&Y)%?6h1_fG7V^-rz!lA?;USJg8L9&kNe`2(aADADXh?g6V2EVJfNTI) zBp}aXR%6h<71j`j1S;0Hloup_IS7+CbAvP{ZwqoDu7VzA>m3pEt!zo9IXS5%Q?gF8 zz{lsfA!5+6IkZVYs6Wul35<>?M-Hq+Mz7nEWl+*5H1rTPIckM~K4RvE88+(%67^ilGtLBZW|Er2tc_0B&teNkmO17!JeV!~oT`#5XZykXC0|DFhdmCKhLa z8X4fGD{2Uwo{j4noEg;u{ARSAXyOA2bgto zgd!sYgI|70W-@3RE3rhOJQY-D<>i+sWT&PUC?qOqfM-56LF1M18SKOog`(0t-IC1Q zRLB?t(rhRfXuFO=Y6a-jUxmaH*zf^ZF=%=uH?cqgY@|Y7Vs0vU{u?|Qq5zr@Pfjg{ zE|Y_dI)GNdVJtn+0X2?6LzShV>GfiT#G+IM#3(ytR;?&a>;OZpq&DM8%NVt!0JN5b z2R3S+2k)oK%t;MGwPH6OD{!<8$gT%L-hnj=gs~+Bl#&Oe8dnnmy_O)eE)Bwwk*kGJ zmYcxasv21hs4|dQAa`Hvvp^7W6i;0zBe=0OIG{C2Kd7&URe->I zs{op1Q-IVKsVTwE3bqOwpa~!y1<$+^9R=t7lvGVFE@(0eP6kaB1t+_trh(>#5W0{Q zXh5VvW1tF2njquybQDr_V8v4qD8DNtX@VzNP-lRk(=EjckU5iR13kT1urkneONxRm z(i9D9Y96}YfFuV<96c4L({utPC1$~=6S5Wvfp!os6apVlxL63Z+YmZ!khO$RnnKTf zpt%AgM6+n65YARI_KAV4bs!tTEoIayH4BuoanA_!JoHafNX{=UDo)iwoQ$OaS+5S> z%bc2`P?QQ<_YPV}0$Ch@sIs7I!E;j+^NPXC+qp_IQY#h8Gjnnjl2XB&!!z>|laot9 z6U^XhF*hGnDT1o;0?^uo{33;d`~t8Hq?S!o0L>ueq$+?bZ!XZHKhXR`Vi9-+dPxRo zEqSp*VQFSbssiNvJu3)ZsgR$RR-6htybHEOy&SZjy&N^sj{yHdatCx|`X6-*OKeTK zSV%@hO?Rb9S+uJG_(iBXZilS~NQ8KbM+DSG#HayEpe4JrLb`&6V?lvJnnDGr&_)uj zfS19bau|kf>|iCjvw}uqQMx}Q%^E7CYbvDS(h=>O?N|_t7>EJQa`z036Ch~|5;n3T zL!{(IiA!uHuQ44;UJQGsA&CXNqe!mrEw10sHch>4&Iw+}>gf`~Q{VGUAj z0jf&iJBUGsbY_7J=*$9X?#u#d?92jb>dXRZK-yUhwhWw!!Ipv7e1I(jPxFB-0}s!E zEd!4Rf-K7d*T~C3jsmS@%lZLw3aCqyWdL#yxN4*RkwjUbbIQG$i%B@(8dN-#CiUP-)Oat>%13Cv~%4`)q@ozlaR zQd)rEBqb(i7p10w)Id7KJ?Q(KL7qn*-t7@#V2GWP)d!&_K&VL&Y6_Tw8icaXxdPMW zJF4hOF=|W8+Xd9i;C#b?elky57pgse*N0O0WkeXHsI*mICbWV3cVqOaP zsKt_eg+zstjQpbf()0|4^2D6%k_-qtA9?{0XdNdP^ezVYXd5K@Xk`hcr3G!p&&Lcr zc>04!dlu0VgR#qS9>{#qqA_n4NZSrIwlK$KdtwoD?4Wg6pyo+VYDuaBxX%Ue#6gGC z{QOFD6BLS4a}zW3is5^HOA?c_!DF4EvCov!+yan6sksFumGB^j=15hdEJMvH>p)(@ zky9|n{dkZa3M&pE@yh~oJgU*#@EDCFHsEuC*s==|bAce=z=r*FND4`mbObU6G9HLo zjv*ST#HORHwV;3i6^2=e1Oz?C3L^obU8~engL2zjq5{f=zpxvQxYQIfxUk==2+{yL zmmhTRjbCXl_)>FRSDME_6?!=Ogw%3j+`=}nPJu)aB->p?>rxSp3B)E%jQX>Onj1C| z5ez*Z93z6!OJ94JRQTyp3W<5(`IDkl@JdVt=9r6kRJTRrwbwWnq7iM}Vg&dXlGGsa|CNFqo%KM3fdOwW&Uyk$ z$WOsN3-BRm&p>>%5?K=B5{#6Ho?-RzWLVJVQ20b8WYiZegOaQp5=zhv$u0^T(Zj5m zsFWe0JEk#$0X;)b!pM-ItN1W8B;Fhex#t~P?fAj77$g^g@*#0K3~LS=j1GiECM2PW zilUASl2VCLDak{(W@E%PdXg`LU9+C3P?`t2=_kJcv=fA=MxJH@4a%0=40(jwhF7Ww4=4xc2ZM`v9#?3-T4J(fW9dCOrd!u97LqfUaW$xf<4X zkm_Jqb9&RW;zcDlan!bh;5lo0@_Ks8R$Ma!?6P&`||2*$fy1UTdM% z9HU`_RHJi2lQ1M*Z5jB&-W}o+f`z?#P-<}r=)hFavS-L@FW78BX_78z2BEYBycz<0 zlq!f1no&rBm*bFuK(bANRFTm3=P@!0AZ#50JOh9cID!Q&(uBK27 z&L^NoC)V~RI7@*#s>FQ7)O2-&8;6-s8%sG&Z#|m~Zs^RbO7>=vKf+riY% zmP-<1xTg~^3Ozn(p_i`#_8V%c#|9BaHC_Ra@e~z%Aa}!xJt>96VjO{t>Kc$HqK6S- zD;>ZQgz8lmkQl1bMr3%D+zu(o8!*4~q9h$uH-XdXV4Mt zX{>E?P?r}zv+VFPGqDxStpKrLmP z@szR{gTz9Z&POfAxey*hwWb@7HMklgKTr@%{k@MjUwxy#zPLS9(HE--4{dfVa5e zEojL2KUpR~LJQite@RAJhiA3`+wPNNID!MMi0L_pGU*0t?1B2tD0@&+aBn^VsfV|* z;4MCw2ukA+YAkGy4!Lnxfu}hJYbA2Q=FY+64lq&3>^aVvyy50KNFsv7?Dv7sawi}z zA=v4)bI#9$9Dxp7lmza^B`D;VmMDOiI3cfFO3X_^y?zJQfPnU2xe%tIwjemg@r-rP zMm;gKhZni4nEg9kTEWw$uY_VxmsCL$V$uKWK>$_$=pbh)Xbv zW#Ui&WDQ8nEJ8cA8Y%|yE3}xgC!5DlS1R zqs>fH$V&y?mzjuu#6I!bP(1F7={^d!p<~@P`2`Y-s3C!Q%WZ@P?(!8hFhguh4tuc* zD`=e)i&H^q0#vj@CtW~$!C=y`1^Y4a3Ncm+AQGwwTF%4DHE5#`T<8|Si(IHP(G-D1 zW2_a@u$FbzkZom%3PS^86G#)n$M{=^qajyZ0%}zg7jlr~4@r~J17F5{gSZ4EccAz7 zY+)-UKbX*rb}gubfKgn{Z$%obtKO_U)$Q0WXRhpeE>TOgCZumLo3 z`r5Ff5Y#9HMKDsM5MmKb0jyaFF0gS9@}aju661|Q4L2kgW^iE}$RE!BgrqGoyDwZN4M z&>NJK2sJ1nWe|aO7pUNZmn86kK9~rW!Uv^C3U5||n}M*xgc>c&0??3QT6|1NYDGzP zUSu3?L9L5Jl*=AUg=F>1fT((KyNgZ54wz z)Qym1b>QL%lBXdB|BHby_^ohcdCbNrXp<}G{AHBGFnd^G!dM!kSyMr!D|nL=-gYRs z>4ssU66jp!lGNOSoWzn;UC`yWiFqZN;9Zlt(DNy$pf`;{dK6%K6j1aiAoSpOD)>|; z)C1EHtxVJtoQXK@2X>z`*oe^+oZ%-pOGz*=WDVd6&fr7-ytx?|{IYzw!H2y1aWgP< zWchQ0F1N@E;AUX(6;RI#1gi+*W?;yA#l*mn70k`R(8E!XTA-_HV3IN=D-q`&ENq!kmf8H&Nrz(?hnldP>mL~P^q8yb= zmBW;!K?fsiVL7fizlex4l`u1gwF~Sc_tH3uuaQ<)eT z89<}aZ>_xs~9}{WDy(1J)EF{h4{>p z)LiJhkic8Z# z%&dv5pk5N_yy+f(kQUI9xv448E2@b|fSg!nZ)#)Gb3tVyS2cX2RX}NRhC4XXftMVD z7F}m@sUdAtR#V8uemMY0X(HNiU@cd*0!TaP$Rxy2BghDhlaL13Es(ScNh$w8^&L_( zjfhxePsvXPUGFl5$T|q`0pmTK6}dT9#RZAUsZ)A53W`#TQ;W({r$9=a9xl-0rTCME=mO*Qo;q*OI-OBPh*==OEH?;21!rQ`dnHPwptud zeNJ?Nl=T`^{(u?gXMI}?bnIP#p>n}(K>;lx}i=M`1u@q$8*b6exyb^FJ23l7QDu&RD zAZ&#b)@4Va@(Vr-0y~BQb1`-<_#h&bLzxDZ%OHsol2XhhQ5O%BQpjcTN-_|*BS8?9 ziiAL^F$+{@WeJ1$XlYgf;u6&8CZ)7mfm~)J78K-UCWA-iv6Wf{1v!sqn(sRhT8j|3lrLaFJ2~w@aiM13qf~06~P`W3n0Rb%o5v8yPrekSQ3TK&0GB9{E zL#-#a2sXk}1ovYW!Jr#-YZa`(EkID~5dFvlP;p6K5e%J5g)GTKYja|4T@E_eK~g3p zxnvG}QEUcr3He2_7O3N(fVfFYy%@120<|>6T^MQ-Z3b#_q>ZNUQNv7}wxiBdG-2j4 z3Ob=!iv$ly$ktI_BvfNMmUcw~3yDR72bLnC3bRN6#S}`DEHT~yv>gw;;S7Ap7pSd< zqn!rcxkr=+L>dDRzYU~AkTd$6fzRk(kmN{yMz;vbOsP~TEdV#9z++AdiD@ONMaXL$ z^3pMn=S4&b`pA?ynI@tZ0%V&4i6CejVJl`HqjrH135kJ?lotr=Fda*~0)dsp0wEGh zfslq-AOz=RrlgWzB7h1H^wI*6(!iOYUY0`A5hQZY4}3F=1ayV33Ne-n<}!GZfU)A254z$P8Xz#+AuA`?Afl+of52lrj=^g9y|&oq zC9vF*)x(~XS&~|mm;)WZ2KflK{8yQXI74+XNH=8lFXmttV(A>=;RI-Tf^9GhdiwVh z%8ST{n4wF%B9aa2C1Sf#Sy+n5>6k?%B-MaAQn01PTx#Ge3lIe#rGr-03OJ3%+MOD- zu0$?`#ia&(ge#ZQLf98nUgaqu4>e^HR}?4b=appUm8KRel!6QA%)E5mWv>r4t$`JK z&>~lhc(YLp8UrcZqvlj7crEZ4kE7tt`Yj2%oRG+3H;Vye19(Im)K`F#EE7md{G)4xRX+V_g zSPS1F=zip4Id0~eM(ca$r6^>T z<`xtyK<6;foTOf?kPMo_)qvi&5QB694(P~dP282jso~>Ev??isUOq!D*2^$UN^15b z>hKs(?FtR#6DacSY zX!#9jJ0H?2sXWkzKICJ=v7H|QvNFb6A(esy;8NrBK)XuOZ zD9KkS$j{6xQGhP$D#$M=0Nn`zSq6qkQ|N>;*LV&PJ3ufK&x5$Yt=56L@jW z4&o@Lv6a5yr2?s-(i41{FR4dwreZmI6H@GEa;Z_^R8YwbUs&dumjVujR3cV1M2v=I zQZDM%J|u-DB-cZ-;>&?Az@ew~lV5=IqZF`sR-EynDnu<((Ip|F1T7nxq;ZeOQK@V^ z3W<<^l$VXa=~*^%kyth!#Vi|p;xI?00`eiZl7SL7sF;DCc!aAogbWrz7E}=!LZY>0 zkaPoyOd06`ABH~;aS8dkOT{fe2fPwA53)2gGe56bp*$lqCzY7db!8%Sqvk`RbU*?b znmJ8rpE<8VLeWr~;vr)_Ovlo$;lfQ~=Dda_bFRkBoY=dSC|81DZ=QgbJHh&puo^#6 z9cz_OV7xd{9mP6G{ztUILH)X(A?0#NiiRXJ|A8+yZa`c@ezBnhU)^1rmzkGYl9`y3 zS)7`p0NO~S0N&q&h%NLUlOjRAs6_@5>LI}kEif`L^PpcAXsaTLTRfn-3)?jQD@gdI zP+njpVmg*~1qKh)OTr+{7#}!0`!g-^1#2^hz31brY!Nu@@?keiE!$2}MqA zh%>|RcX}{2VH;;cBv^3qGK~ER$t{p1+$25VZJ0L@myll=If5rW;EMrtV3&PjY=+4M zA59(Z;pe8KPyihkN-51PKtw%yS>-^f(Wpfk<;Fqc4qDR9#wEwL+#kY=IPr0Wp;-jiUi|IV4R(N`bA?16>~ZGC`9(`2~_1%8AGr#ZXDU0;mka zUFxV3r609uAyN+{tfA${Im{gCN9FQE1R9v9C@(*bW4e}h$<%bBi@*@MYtpti$ z(1J(ss0Wr#4pJURTDS<$o;nJ}uwsP^a$y^2tQL`yz)ctWSqn)`kevHMdcbq87&Nh= z=Uns&=pNDJ{GwFM^K%kWk41qfQ$QTEqX0Tm0(3qnmh)12&<@MOa_|fywR(dNO(FhN zcz)N4lGME7%=|oTNAO_CLShA)$Ju14I<|>86^0qpV1x&K)j|1z*kfTLwlOj=I4Tt9 zr6y)qDwGsuCTD}D;ZpMwlX6lOiZc?6K>M5X(_oA8{rpOE6Ts7U#d-?isS0`dC7{bD z6H7qr^SPiW%cSO&WftY<<)-G9fL1RhD&!^>6rh=tn46lQke`&5np{$>ppmJUs;7{d zlA2eNnU7Dxig4W?o5ZUP@|;LRx;2f)>PC#af!U zN8=;5jz;Owj8a&$0=mdqg_wMax)w+pvt;mtH7hWdH}gREm4Nd!%x=guI15M&)o5ir zM&p{PA$Msr$Q!VgU^d{aMrLV)>IIOoxOSP~4joWQg&sPIxv8i|n+;6pM3^u#Fbwr# z6ufQ^TF%p}AVrNmya{6o3(5&=J)H1D7&TR}L(67Vqdmz;7`PXI^l+r+7GxwAXBI=Z zU4dK<%PCBndZ>1TBypv8^oAK~`zs4eGYi|o6JJeeyH8w(;t3oP%#cE~YDgSF#&bpx zM(+ZDYf2N;nnE9)_=?%P0Bu6Yb~F&^?iWx;0Xhx~?RR8gKkkg^5ecjVwt1kb8}!rC zVq&;rf>TSJQ*&~nlWk37tCMTFAXh(>XQURTDyZbCtAHA5pq1oFiN&e9h6W17;D(k$ zQEGu6=nyWIJe69^Lx@Ib7(iP1kbYO5%z*d1450ZBH4&3?-chS(o;^5}OUzE?N(47+70Mx7 z8K7Gd5_5`D6H_V`QY%1LY=L&~f>Ik&JJ$-)jYb~^ZW#>DLoMhBhm#-)5!%&k$1FSH z?LJ(MGu*Wd){@>0n$nsnFX&3C6D=Wi2F*(Dq3#(-%7+xe3kSXk_Jn2()MSNxUOZ&qdJlgpY%B?SXf*nu7eWDe z@BqhfR~8c}`+&EA;vMM%4+Nn%^LiB0Vb{yxI?5W|RR|rB(-w#vl|ynScuzmB-JIUc z$fwssf(l<_6mfbz=!nwM)9c}<*Ix!Divc{n9uytJ|MYr|tOKBM-U}lBgQi9PfQTI+ z?p9FE2tCpsqO3Cuq@*(oB#m_E3|KQb?}9ah$IL;Rvp_`%ZSS1X$ePNH(w#*d7>?fZ zvU1HU&4ru@tpGZ$8kGBsN1YM6^+7^J+1wsby$LK?L!p}3_3E=%8oVvnTr6?<57Qp-|vrg$^gH9;CSPaC3WNhBi^z&WI;#I7U!21C8tgShkFldtYvY7 zoDa4Se@uZ+v7}8*nIOfK31u;5f)Z0EXfdS)@+xXlq)rY~A5<{~I$V%8F=dJrQ>K)~ zlqpI~nWDv%E3IP6X;8%!=+rmb#FQCQOqo#@Q)VbJWrh}03ABo-*g+Ljpu?wV6I13$ zF=b9!Oqrv^lsQ^VRnsb_Dh5?dfzGg@O-xxJ#gqkQF=c@gQx<43HH}s=HF;3Q6zEU_ z+QgJ4QcPJ=7E_ieF=dGsQyXa&Q|ks*Oo4VM6CG1FBy@_D3=NQ?%FqBUt{g}(>QTcS zLj#n^0vU(W!#YE&*g83=V(VyW67hXu(qhXHIkpTbj4ead*fK=RThD0~TTcd6Y=Jh= z(I{^r4_z3dk6nqK{aR8e6DC79itL zVoR1*u_Yxph{h}+8!%`TUC5&rhUmiDs<`(3nmZZX##uR6Q_p2cZ9xLWF+NW+1_11@~%L(E5Lv)LB4@4gw!D^BvFzo$QVd|hNm2O zpdjYbQCyyd&Bc&ahL|_Vc7Q?#v?Jb|6|#T6hU<+G39DPEtEcqK)r$FKf5^8JZP*>g&j*uSsZK_%SnLx8WkhN)3{CZe( z5|dJMrug-+<>i+bB^FHSB=xRTM5J;+oQDyq=!Jv5ODep$S4hlL$V8k0qfn4o3_8yt zu^1!)JIWWd3=eS;7Cieyav;T~L4p=K!+HpmL{SS*cox8sdGTa{tTiCxKt+BQBA7&R z1QYr?+lNSLAAH1GH7NZTE2t@?D1i3hfyERQ6tFI}f=YsPz|yrJ^f+zMaR@Qi3W@PX z@Wb0+s^g8Yo~06R%mr1UfO3L?f|^2lEkp{{ZP9q`HI9X7M67!RZyy{1{)HqpNc>-* zX)ey%4@!9lKn+63b)g4Ae6*A(4si*=46BbP!(us|8!dy9tQ!(a&_T3e{*XJVujVBcdGf4RSTC*~*U=l&FpXsl?SX#o1g3 zM+2JwKw_vy%aY;0IdY&|ORzP4u{74R7J`Z}@bVduH((y-MM)s2ZUU(z+Pj?a#D(ft zMt@X84F<@g@`Tbnq=#{HqZ^gFcU!AR>4N*K^>Bs zmr{*-rmLDlIz$fEY=d5V1+o!Tk3l5itxKFx+VUF> zXxuFZiUS&wxgaUtQ=XO`N1~dXx)7HTtbb#m14y8A3qV`0(o4YyD&&K1P(-hgao53I z$@zK3&^j1aIr}G|*Rqym+l5-dM&l`9DXgTD@feM(5+=8j0(k>oNuh)w1>PmLk}4Y@ zk20d|9tH&ht{Rw1)sPd8tbkq(apA3o;HUMFT7*-nHiDGx_=|h6)2bD~bro#*4lJgo zpaF6QxR8TNXexk?ErZHJYgF7d$7tA~gbi|G-#_q$y(^9sj^5ca4@xaA$uEMG^^hB| zp?heHOOtey^K%PIOCWOz8HtF=gcNu=4jBj}+Z0HsLEE1T$tZvt!Q=F(qxO(7aIEdm zFdV^xmhpQkks6=X;D#DJv#Ti-gYyZfrG~YU2F_Bj(@S9uv^({lF*a2#8Avwq62)Qd3HkQ!(#s2Ty1r9kf)GpI-v$_<}ZtL;K~(H_Abd zKFWpl?4aWUX5^WVT7MtJlhQH93`o5g>?9t;aWz=*WFrZXao{dA$kp)H3FKNZSQtSP z3p5{t)X}&C&%luy(DU(M)O-xS^a?Zxk94n8VtgLBO9|>t;?C1xo$%gXFzl*CaGx)_ zBHmCZ27Hr&PDOlPEa(C)%xh0Txw~2c%{I`Pp6OgMF`y|m#AzAE7^h{_DrBfD*ebvr zkeOFpl9*SLnOKq<3U)#&$WD;iG1dwhAU4Q0w6bJ`hXo{wLekB{fiKUX*Mbu)&n6(o zAwd^&Vjm8z(5ci+P)IB;&QAuVi4;h=hIMQdrB?wTz5wz;XixekART zJL3WJsW`4Y4k;|5^*JaJ;7ZF>>X6q$%4Lkw5UoCsuxCUW7p{g334<>T08Oe}DInU@ zSli~HE-$PS^}{y~3~eO9n(@&2d+;c*2HXHxH8y5^fJ zwJb5GG_eG9eP*#jNKt93f(Ep4;pdWAlBi&)5FMMK2_H6qcBbNK>;%*TJPuDOi%};F zVLBhR5yFM=7^*dCc&wpz{S5LFtbWEgh7lx5<8pf{j3LWaQOU@PZyu0D}@GxaVXD>Mg+rcaY0*oEL8*-;In?T%Z>Ah{-~T-{8eGT$vHb z>Pj3H0BFP(QT&638f&@G%I?uXg?ES%3+%`UROIrze&EaR894G3dih;Kv%=FYF{c>4 z05`x|fG5z}4X8!yL_9?+ff5|-eyk-pNCwrKnRu+Bb_ovh63!AFBuV2E9D0K@Mr&c{ zl;8%SVssFe;FTy9+7K(jhgP5>m*ATQz64)SWC?DJuk?hqs6jVBfYz%)TIui>G-M=< zEE6E11?}7)A)~BoByG~|2#(-DD`I-ip$yi88hfCAvla4Y6UhBnWOVIO8i!D0v32e% z@HEF@WegW=?i@Vs0277Go`Yr(ux0gO=Q&6sg2e2lfzNWsATGhE#?Tv0cA)!Gz{`^0 zW8I*xK!QSkX$k1e@kCHogRfgk%u7*#-1h=m1XT=cKtTJiTnN)pTM$q1cj>TByB(o7?24xZo^#15&38ZOhg(Z+UOyu zmk2Ekz|(gMR?rDLSf=K}J1Yp%4)4}sb~2sw^FTdPYlRX}3nhi)=?b| zci6s3JoOiK!X1+JAo+n+alpqSZ$eyxQ7jXG5gKbiVrCJ%+=Uj35HW~fp~Z}pBI&bY zjkwz}?eL8Q;+O^_?I`?Env{iJ$7rA|YE8>5DlSog@2AX6Q^-qA2A#oLREb*D6R!=$ z;~JRmqxQDRPmowd4GGLG!x0*cILlY)R0VXUAvwh=te|yHEKUW*Kd5Mpfh>VU+1CXv z7h~cTVyqNEBvcW!oQIWbP-Wmkw*X$`LY;}G2qYR~t&oPbtgD7>D?|8917Z_M6Qaz; z-#Q!(x#AK~tD3lwgCu`Qnlu~uGVTk+B^bE_y;!h?t(3qzr-EKgfbXqFT6ck3R#0db zBm|))rw7do5MOraRRtJfgx*3cAyk4OhQzUU0D~CXfqaK8jNT&`YM8M`a!Q9#84WI#mPmbC7F4tsi>a7r3l4W zO_-Kbxk2cw3{4oQ{={q%_S{4n(gT&wkjw*V96={W5ltsN-6N1*c)y$zBWZwzXE z8|N+(^zr&FIX2nK`Hiufk(6wFmt`o`4PdsSp)TkVFD4RzccnJL2bShAS1IHz+3& zYEVMTAOh_!k_#V{9x1$832p|$3KMFyEDJzGhH3GTdo}Yia}euaAl^bR{XoSos3Qy2 z0otNli=$HuF@Qk0Kop_dg6tryrlU1CN8>1?q@)^FLk*fZg5+sP!GCz*3w{e6Sst@7 z3Ob_>bcY?}fIoO+6ef(NF`88XDqX>woba|o!A&;|3w26Ta|?13OHy?a`*QM&Fiz5h zU%rRxF1T(5WZj@c7)w&IU3rJ!`FWsmOVmvkh?Xbnm3Ks(UB^}oy_yKr5+A+t4u0j` zS5R^pz$@=S(J>OPyn6%+=ldWc7er)%h+81yx*`KZDg4Sikh0D!kdn?UkTlYjcVNxn zJPp?nv;q)Lxn>PN|5Sf`Vwc5W+^Ly&#YC2Q0fp$6HH+QpAM$MS=t~m@cFOocrNMI z$SOfih&>;D^7FGx3ltI+(sS~Y5_1%iDiuJH2;NOyP+FV;ULOHk{GY0jp9i{)8+L#& z7nh!%0%#(|$_g|~1G~9iK|!G!zHAqCk+D12T<{b#Xvt3|NU@qiF@ypi@B~^@qoAOm zrjQE~#5(S)pa9tk1Xh54_7eEOrD_GJ$)N4|xJ|Exw@o!L=JhPe4hz)I9R=o~Bp?@1 zoT6qEN)nJiDF1;nHd12Ygk(quCD6SAS!kWBo?2L>5{OYybizhdL9vK63PF*dh}K;I zoeiAHr3OBL0nrr!8G*hSexTg~i5N&|1u3Dn$iu(@89YVg zcy5TZAd!e@y%Kg7v}7p;B@A%m*cMNULoYfaR2dl<9CLE=lM_o)K?g5p=9MVq<)?tk z3Gl#7MrvY#4x$_Z&59+aq!gtV7lRgJfw+08+K)J)mT)prC-S#EGYI_@S0dG`9_s zNuVu?0z7F6F`z|sBE?pE$wCr-4))Tk8++-6npV(@F6<=|*3IarbcYB~TV0*tb3 zP`L~eX^@btqiM;Ol>$l z6%^!DX6B`Xg-Y@ZUP(PE9_D-i&B$Iaw-*)Qgial6*5co6hbmm6=2f& zkYQ{L3p0xqK<%&86fV?ummV<TSC%}Vg8QzRP!D^D;xrP} z03RfPgyBFs1Ua`~8u;Aqg&bq_%kAewGE*uQN(;aZE=VgYF|8!E2x(3Q)ErAxD2AQf zmYJ6bx*dRsL8{=K%#>85LW?l;9_K?h!)S_Yq=pJ0q)gz#za6$Lz=_z>TflHa>#Nt%0 z@{CmI*}1T5^0c(_@=LU|6u{Tz>3~&&=5;}rk${XTEKMy1jfSOwCU}#xK~5@yoWPsH zl~$CW3)WDQUqDnZ4&vZi&`~F_HFV$t2sH8lEnQ-A62bTVWvc5a6ss%56hXMqgPx%y z>qPb2h#bsk-S;vJK2#0z3~UXX9e7hO*;yLZ8z6%r ztJ~m{lki!WENy1c6@SGgMfrK@QzlQ*Y@AX%MI%cCB+3pg8DMb?sfd~L@=H+7HzPfm zvakgYbnxB;WE^<#9^`OXh&WPQKA}1qWHzoqA)~IqHkb=NFjYhu>r~Wg%$5Ko4Wg8e z&=LuB+Ai*L5mYE*EfGP*Dv<-a)e4!QqkTa-ia`v>!e-FG7DjVoNVy!jP2#6a%V{p6 z27~htF=IL2YKOqEd<5cRM@k{Qe?kjjQBvl!LLB0NUosFI1RYd~&=)ir^TM607f zwX}}v36Nbhu6r6Gzl5DuWwqA z(*gbJ8w*GuI5AHFd8#WDa$!5#>>{?_Y)NKbX=<@TDY$=|nU_w?h&Ptj6MEkgxkpD- zC4oA(0=hpr744clP+A2S_uy_Mtg(g5Eud*ja1#qseIUCBZV;>l#Oz`Ec&34trBEkG z5!QfvZd$~fjary3!&4$tp%1nWkMXz)d~IdWjhooI82Ec&Ag{pc01;3R3_TeV?{hM; z8n!OPG)VScguNKwNMbP#Y13m(_@G1yOT4gs9gtnxXbapx$rLnG2~&(Er9&n-K_(Jd z0XGEQk6gSTANb-Odh#kHeWXqmXk-9`EC*%=22ekq=*386_A4xy7#PAcQb8R6w0R29 zI3cK~fmYZnXn;;A1NSuYi;7Z{OQ1uY3i)YVuoGvB6*3abQWZd_bSo4T<(Flqq^4+M z)Dp$1CB9NJl5O?>YG6HgIosMT7|U6I1jY$1aX8jSS_}b9Y7O2G1dyHNat~ZDy*`U z{E}k$);+Lp(4sGn^$;#Ru^+Jj(vDVgl6sOM zsL+dv!O>Pq=28O}%She=sYeu&_||HSh8<~PhulIFQyK69-*w3Of{eUIX2a|xBLhP~ zKGNzE$i4-n+a&W!G9a59O7ay7@7ZR z$TKemyi6w*zbg=p2=tbcD^=ncWZm;^H54Iq9y|a@(aMF zB`CC^Wim9!5iE~E=@{JU1dq}}HIvslvZRvo^Ks?nhSSQF3 z_);sd2z+majzTexofV*zOrSBP3UVyy>SWl~5A?$Vz`jN;rHIr6NmtO4>K5%wDsgDS zxrV)@YQZe2Kz@fr6k_ojq#*?gIl`?WAX=d^IGhBDCrJK(G4T0c z5+xexmj5HP85tOYKzEI&DkLKAB3DSt%u6h)RLCz#Edp)XRImcoJyr=?33!J&v=rc{ zTR^HT(7CEs*v=KhTFrsRz#;k&7b`%-K$k02;vZoKmnX2Y2S+yxm#yFizD9+DmO`Z_ zep_Hg0%oH}m!wccm;;_vS0+L;>U=1RD(>OvEcCfvPI&ae?1ePE7`0Fh<-ubp8Drdt zIbM)!VN>3WdZ?CyE;*jEFZxfoQjjjZ=L>Xu--p=oS$r!rD;_DhE8JBSw+S z11)kveni`-$pR8XHQED@(G(TDAUESGctLVBE_fZFdC3NQ!Mgxa@PfhwoLte{q}Y=v zsAGV6qX;<#EZE`-O{^1?XbsoF?_A`fG-2S2QYVz?r(aPT&&a?4x+NI2`&gkg54_tT zHANwgICyXmbT$U8m+XhMq&6G8 zq!xc;6{Um*AGCvgP!hTXB_=qv#5px5Cpy{ID7HEoyh0Xo%SAb8eY8rRf{jA93Rt)n zo-;5T!dk?KJgh{9v_?tM2ubMBUUm(2OHV9IGkn9LDY*iBLG}fyAOrQ3N=mA+q!>`M z5*(j6k_&;(H1<>iTKQ)MKinBh62aDVgtkJVX#&=~Ra3|XB?XLhfGrWAFRADmnLz+a zhmcW(u7NLbBTILVC{?!veo{RA1`w3f+#$-aUG;(G znD-1vNCaa!A|L74ZqOO;#2;wS?^;oknpd2epNH)zdkk4fI)j#X+o@aLA?^U!f@v_q zgTDEoEA*^cQT9A%_-AP{Gcd$X!8pY}0(9`bqe5|BYGQV!LP=3(ayDo*IW;daDJNB- zI3uwLypul-b`X%CUukXvcsXaWoR?!AEw34qk*Te$`WeSH~Io>Av zGfEUPa|;raOBB)*i;@!4Qx%f)b8=F_Z6q#@qSV~f+@#bZg%W5aC?Ilqzl?VmXuhWs%vPVPz+9#3Pq^}dZ2j- zl{|uttcb6mx$Du)HS#hStjP==#84roghd@|ID=WpBhFHqjdm3Y5A?(-aOn)Q8`4~7 z0g0g+eFcxvxP~#v-RTVS26SX2VhG1iEz& zTmQ5W+VDSty?^=_vwwszPE;alS%PYGG++QECcE zRY_uYDpw-7*$g^(40MzLf)C$n$=%4{dP`eMQ9c@L-${Nh93T^~r zX#j(=7^o?ll$xHIhqlK!+)=BikqSQ4dW-3?ri6 zhfMf%pC0&q$e_#h$iELcO9eEtEWypd;Fl!{CZ)I;7_wx!;r$5(uqbFW)GtdB%vJ)E z%3x9jOsaA-F!Zpd=9LsxPRUZ|W?=AU%+i2RnqUQ5U{V`Q>VPDevUEWdYnC2_(g#Z! zfJsAc28NC-BW?zUjM6L*fF5I zBghW_EGLkcpD-~nWI2O{UBIL(m~;b^?qJdbOnQPzFOVKk*pGzEk3&F#90(#df(n6k zAi@X4^#s*=@XL=u$~v<^N;Gfp>w>th2b_|DmPJVH5Vo@cu>kqMb8if}BCv34!2=q#N1<$uinkt^oKXpSR%OFT4G+U3BZ!T^dzTu}raDP#fNZ-){j8^E?AkElSVav*Ukiq$tL z25bi#kO)3%JtI`P#Ska_@^KWW-UDlb#>yPf zMd#q4SqoypoWEEQ?EIw=YB_{j387YlDJ-!9at(5<5Mv0~>MercFaX`Mn}sWtLSlv3 z3(_IUgGyvU(Df&Y$tCdx ziA9O&MTrF&sJ9!y)o0znWdnF|Iq{`4uR3Z6fpF>E!;zU+l3J9Pm@}oLhpi|zt+Xg} zN*2i5JzR--$r<@Ypo`0=WcWiv{xv8cfNw_NQU@gpMBkLKT@WLBumlSvIk19F%)%Ai z7&Fv}@Z(g6Hv&P|Mj#~c2dspn0;u9kPRvmVD9X%DEwWMws4U6I&zpi=xa-m?P9Q4b94*94$v)t*bfP+EJSE)fy0LM(9Tj;hYfM7lWRmTJkC|XMxc+yA%dIC zco26gEl~&u%~Cri<(HNycqA5Qr{?6?qeMdh&7whEIjOWnw>%@UL^ly+zitM^{wWx- z;0yLYMX}&Tt`S7Xf<_jZ(I5(K{VDk5=cVRUDmWD-Ca0n{|B7iA31Z3xkhZ684%l|x zB#7-8aZo^R03vciF4zd11r62HH&;+4u8NhW00}?ZfQ0q@+S_Nbe zn{olzHb^LB32DHZeF_?=?Q~)TGD{L}ge;jx^l;{67MH|lmZauFV^s=l64eVNRv*yx zEJ}0HorWO|@>Macb%+RQ7qI6L)hZbw?MSW>4)Dl=1TmsEBGwf>+)1T5IjJS_Am2fw z3zB6>H!BO_oS)!aM@FDzfrA3lX(zdiB)tiYa}1{eoRDyh;Se#()($oRI-Wz#Q8tjv zkjHZfkFsGel|kboM3&06;7CElCSfZf_@zmZ(IJwP9NE<} zi6fbNpveg~XhwJ>6ML+K#=wY-^_^%TOV~<6vAzv#BF?%PX9YoaAagk9=ar=9q0MI8 zrBzt=a4ILmEQEwb)){ySeGBY)L?$9OII}Lpjkpdr0%!PXWPKEXkBC7h1)u|C-~nA; zn@#p)-pOOtOPX4v-Rt zEKV?o3#5h{MDTzJkd{*L9D+AHcoHG&Cdhp7AmbN^KWXY4C6FV)zR?7+z`kLG_(lsP z0P;--0pDnY6oP#N(gO7j??Cv*4&)NBZ=69aWZ$@e1c>pCD@Y;OHy|xg--uxM4We;C zI2}Q90=9+*Bt4U17Dg>_1)O5Y$XpVduog3^V1U;%CoXs9< zO;DE)SF;Dl)Rhxh6SS#A&8aJpYml2dgr}~sS9+l79wI9}3r*C16JaZ%$s6bVhAG%Y zJcTx{`6SX?vyj<1F5mo;%rfw7C`#Wb6BL6#>r`Y2W}r z*kpo0ztRXif5gB78*a)133)Pc5 zhfiV^D2<_xZ=I)EcycP|z%0Z_%V)rTrzkC-B-aQ;T0Tau5zWG|q6rd-h?WP@1th{1 zG%DR>obz)FGIL-#s<1S%I0Lkq8eHh1WT}5NO9C>=pam6BN9Y#A+@K3C^)NHlZ*t=U zk*R)=YXo|HkP)SbQ~_x>kYNPE6-MNG1mud+B*@|zdbCF&4Hwdu5t(U$nyQHGPk0#- z_T~&|1rXN8Vb*o{3J7B@)K(#3yP%~N2Yeld0oVwfB{lWuAw=9GO zex3(3SP&r_1P&HbVi9TtB4qu^H3G2*%?E4*)oV)}=Yc?`x+-WE_yWr4n-`#Ah6wgj zu!kuM_9AkPKo53A5l3{k%7f=jNVX!w2!tzi$@K`x6`=Kq{3ZFx@p+}W@t_R`nW>01 zgx;*+DSB^4@SLwVGk99Vn-M&w=FJ4|?t8O=OIdH`(jGpLF~zCLkWGjnQy@ZVndwME z0wwv$psFuEGcP%(GzDxM*g()>F8@G7Xv&~*990mZ4kGM9grgt>Luzr4Kw4%_YH@r? zetc1CQfX#R3V69ANLT+94X`N_vOwAqJdimE9>_oh4`ece2eJarEA8P0?c|P!I<|NU zT&715;+fPGWXT?`l>FSp%slY&_Sz{LJ&eg9r}c0b<>!~g7gy#c<>ySvy2Ql5(8CrC z;Z2^R*$7et&P{$jJjIzwIhlFsj!F4tsZ$Vqr_`MM@+p2jtl)!Trug-6r=%w5Bo=|& zG*kR~*i-V8!HXTCrz!OCXBG#gBCF}_;fznt$jnJ8O3j-RJEey=J~1yp&lw?7n$*Ld zpOlrFTmp);tP4yG4BiZ-J)FrIiFxU%#i=DAXZEl|xl?MVz?E<$XO=)50$Q>U(b&TY z69k#o!wciZ7p10wL`r*@lM4z!MrIw*VqnO+3R>cRP>X>9H9)eCYJv9590QR(oM6xU z7x@=V@$2C$fi8FtNGwXsEe3@ZOvJG$y?BaW)(McNtdn38vda6E7HDkuv=(^%@mVlc zn$*Jz3OJCP;2vVl%u7kF06Pxq8+P=bY= ziJbyYjT9IG4muDJ|_`$^zM_k#$}Rbklebdv1P8DP+?F+!ZXK!`#4*fGXn6 zNGy&|Erj&TAlgBTT|2-o=>*%`0k*aiY-=aj(hjhl9i?z%nF=bA49)rqb^u(Kxu_T% z(NKpW#EVP7*{p}VpeR2*zW{ucAt(_*+@_Ib#>v3Y!&#J5U=`+HkeWB84YCq9%Z`(Q zp=}C8nhPxLoReRi3YYIflII4=`=pk*RumM$73gt+4R{X<8-@EUqSi z5Lbt=!QzP!HduWUm|fb#mXny2ngb5L9**?XJV;z;Nos?(-}Ueo7i47SRp{m9Cnx5l zPU#Vh2e&;Sori#;{EAA*I_MrYh{7p7?CGg_sYQu7Q+ilE!O5n5N>clj9**4n6o}D1 z+y#}oa9)OgmW(!dej`gxn}H!qUYmiThsPHj{R+qiuob5!7A0p)$ zfW-9FDG*yxtU|ZAM;Nj~SOLwpQc%M&KMxTu;J^SA8UAfkvXnvYQ~|r94dNWAo7$#i z>4D_*p>nW9*27woT9gY3Vt%w+K8(j(xOnUf02&7pajg)WdSMVgIM`llrIu&3mJ zYmF&cj-UYNb;&Q!%gIkn0qH1)MyXJKQD%B(USdu>*!XzRa`M_KJ)EF&B_3L)_iz`b zrp1Hj$0|S>rAH(l5>N5q$c~3E=pfeavCU9dPGs>pa+Rfsh!dzjVc2+E*?o< n0#!aSCkM$&G|dnfAxf?uF;va@Nm-zy@xU&^l!7_7G)WHtMCP`I diff --git a/doc/build/doctrees/glossary.doctree b/doc/build/doctrees/glossary.doctree index 3940bcaf27db8cb1a56444223fceb410af06466c..19e0213d46cfe702b888d7407c5876d38c53b319 100644 GIT binary patch delta 24 gcmeyP`dgKyfpzMKjVw-#j5d?q8MQYTGj<9B0Cn;ROaK4? delta 26 icmeyZ`bU+efpzM~jVw-#jJA{A8MPUUHy1H>3IYIy*$BY^ diff --git a/doc/build/doctrees/index.doctree b/doc/build/doctrees/index.doctree index 4d621f1c31c3c1d8ae2a558c3f734147b1d389e3..3f9707dcd5a530c149b7ebd6f3ae707d95c8b69b 100644 GIT binary patch delta 24 gcmbO%Gf9S}fpseTMwTK*M$5_NjM|$QGZydw09R86?f?J) delta 26 icmbOvGg*eEfpsd!MwTK*Mytu?jM|LFn-?(_@Bjd0S_fkQ diff --git a/doc/build/doctrees/references/gm-state-transitions.doctree b/doc/build/doctrees/references/gm-state-transitions.doctree index 57379289f3b6bcbdcdeceb318e9c19b423ecaf31..21d8d00e5b1e418f52d340f1611a220dd7ad7ba3 100644 GIT binary patch delta 2320 zcmaEJlX1^$M%D(_sT)f-vKBHj22U<$)MnK$E=ty)e1=ti^Kr)a3VbUW85kVX6EpL4 z6p~6aC-0M!@-Eg%QWcW(^NKT5Qj54s^AZaR zaxzm>6pBj=Qj3!FbCWXj5=-)niWN%o6_QdFGV>-sbkLmqPF8aA1`UzPx&EA!`+eVV zm!R60Ohx+?!ae-lrev_kPRS7KL9@q^VtXc^@{^kEt|~BjzLDDGT2;}_2L68-nGP^c z7VrpT_nw&{owbf}a)O23=50zh85!?Po}l8!^n`KpL?fBW^R=}Y?@X3g)nL3cxlqBB zb!~=p){V_gs%?x+f1&!p!GCCM~-o{k(yZhf>dyZ6Bi=`2yE%|CQ%nI>nL#xjadZgjBQEND>2 zH2ImC8SAYK>8!NPr;O$?O=h%+WW598PHuFtpUi6ZaI(0S8SCc^>8uHp70n+^K4Trp z`W4IrnK0L)igB`lof$g|V}^9rE~d!}()N>U)HEjNS%*&Mx86Hh$sv-FZE}r+^X3ej z6^xU4oXprHKuVu%_OZLhIJv|*l2K~%IcMk1`yG54C+~0tg{3NouO3JZAM<8UCv8SX zg~|LL5$pyKA#ivKxh!K8vSDUm$dJik&XD!Xkn<}|$}*jN%2k`mg?aKsBW-zDK!8-0 zCS{2AFzQWdozgg^c8W%Zbe7FzM>kV8dytV9n`_)AF*3%0EpY^kFoP{w@l+|<01;>ip7RXG!rvuhP%tQATo+nD)G z?&H?iQ%F>>Qi#b-EXgP-srGZu&nqq|f+zv0i%yI;)QQPS$uB9^NsP~noqW(xbh5L6 zbiD~VPJrbn@-!nNVGAe_jZJ*>Kq0h&nSr4+DI-b~5=E>%yJOOGK_w1XHQZky$3i?c zdA+&$4dppKQ0V91cpIs{I5 z1&}ZRB|KqPMg|7gvc#Oy#FA7{@<=RBoxG4=Mc+BGIMu5(x1d%bCMh*NGY{?&g%X9B zl6-|^1r+a1{_kNYg)>Q%O+IKSH@QHLl{;A>COJPZIk7|`bMi!SX%A?4Xk>W7tWJF zF8=gcCa;e+VV@0hgEq_NSJAReOerjr1w6vp7emA*Cs?R5XKAo(?vK01#MA&X)tKFP zH%PK(^TNbcj7)tH_4~j=EHL$x*GFp@XK}GGFl2Fq2p*6-*s^#*Y(9`RHkQv qRCi{9RCZ>8RCShSDArEV$O0LV!IK5jouQir(wZgCvUz%TC?f!g?F8ch delta 1129 zcmdnfpM08Ce)BQL_X?XsG;T67Zknv8 z<;J*ca-pj1WLrZm#!Zv=YH2WTnp~h@I(eC@=w<`$GDfD$jFT7IhBMBXEU4kK*+q8> zGvj-(w(l@)Oz#;dXBq~As6B?Bj69P!I_q#{aWOG4WJqVdXPj(fB**w3WG36H4C$=b zjGLz!)iN=vOkQ9c!Lbf3!oVn{_1Py~zpIPMfXmsu(A?*qE`t&5+KTu=%5X z731XjwvnvwLEOoOruLgTot86B-fC~g#>ki^7swV9-tCo3AtO#Z;fBUYNB z4fD7VGXq0uQifO$qu%6&?$VP#c&o8#fDGZ=EaNkYk;#a8@iVO*XE@GDU3{cV0*ZHoxozukf4^2XJlY-&d)2(Oi3+LD9uYOD9Fi7O;JcI%}XxH z%+K2_ryRt}t(oPrt^*q{9MB7a(7;`%VNY)7V^? zwTh9+3aWJqSd0atl_~4Wd1bSeu2Lsk-qH~`YU7evH@xKS(&45dAsd5O8HC6xuK#h|2< q1ybFa1yb3W1ya>nnxR-bMFVU=22U19cZO~jNNd(%=FRCPp^O05cx-|I diff --git a/doc/build/doctrees/references/ti-state-transitions.doctree b/doc/build/doctrees/references/ti-state-transitions.doctree index f5f279b1a49a75af46bd1e197c776afef8d3101d..b3e13fff2ce75dbed33bb0a6e72ba584f9c6be50 100644 GIT binary patch delta 26 icmcaIoAL5&MwSNFsV6qFbTKjpPwr>b-n^Sp(gy&HP6>Pf delta 28 kcmcaSoAJtQMwSNFsV6tGbTKl9OzvmYW-Q*ki&4@C0G@6M@c;k- diff --git a/doc/build/html/.buildinfo b/doc/build/html/.buildinfo index 1816677..c2f5253 100644 --- a/doc/build/html/.buildinfo +++ b/doc/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: c908097bffb8af037d3087e1a2a33716 +config: 5e2d340d1e45c11873a642aae3004db1 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/doc/build/html/_sources/references/gm-state-transitions.rst.txt b/doc/build/html/_sources/references/gm-state-transitions.rst.txt index 8713dc6..1c452f0 100644 --- a/doc/build/html/_sources/references/gm-state-transitions.rst.txt +++ b/doc/build/html/_sources/references/gm-state-transitions.rst.txt @@ -147,6 +147,29 @@ Core Transition Rules & m } +#. Again, building on the previous rules, this rule makes the machine consider + unapplied supercombinators to be in WHNF + + .. math:: + \gmrule + { \mathtt{Unwind} : \nillist + & a_0 : \ldots : a_n : \nillist + & \langle i, s \rangle : d + & h + \begin{bmatrix} + a_0 : \mathtt{NGlobal} \; k \; c + \end{bmatrix} + & m + } + { i + & a_n : s + & d + & h + & m \\ + \SetCell[c=2]{c} + \text{when $n < k$} + } + #. If an application is on top of the stack, :code:`Unwind` continues unwinding .. math:: @@ -340,28 +363,47 @@ Core Transition Rules & m } -#. Consider unapplied functions to be in WHNF +#. Pack a constructor if there are sufficient arguments .. math:: \gmrule - { \mathtt{Unwind} : \nillist - & a_0 : \ldots : a_n : \nillist - & \langle i, s \rangle : d + { \mathtt{Pack} \; t \; n : i + & a_1 : \ldots : a_n : s + & d & h - \begin{bmatrix} - a_0 : \mathtt{NGlobal} \; k \; c - \end{bmatrix} & m } { i - & a_n : s + & a : s & d & h - & m \\ - \SetCell[c=2]{c} - \text{when $n < k$} + \begin{bmatrix} + a : \mathtt{NConstr} \; t \; [a_1,\ldots,a_n] + \end{bmatrix} + & m } +#. Evaluate a case + + .. math:: + \gmrule + { \mathtt{CaseJump} \begin{bmatrix} t \to c \end{bmatrix} : i + & a : s + & d + & h + \begin{bmatrix} + a : \mathtt{NConstr} \; t \; v + \end{bmatrix} + & m + } + { c \concat i + & d + & h + & m + } + + + *************** Extension Rules *************** diff --git a/doc/build/html/commentary/gm.html b/doc/build/html/commentary/gm.html index 30a991d..46d5dad 100644 --- a/doc/build/html/commentary/gm.html +++ b/doc/build/html/commentary/gm.html @@ -42,7 +42,7 @@ heap nodes for supercombinators hold uninstantiated expressions, i.e. raw ASTs straight from the parser. When a supercombinator is found on the stack during evaluation, the template expression is instantiated (compiled) on the spot.

-

\transrule
+<p><img src=do (followed by expressions), and of (followed by alternatives) (TODO: all of these terms need linked glossary entries). In order to manage the cascade of layout contexts, our lexer will record a stack for which each element -is either \varnothing, denoting an explicit layout written with braces -and semicolons, or a \langle n \rangle, denoting an implicitly laid-out +is either \varnothing, denoting an explicit layout written with braces +and semicolons, or a \langle n \rangle, denoting an implicitly laid-out layout where the start of each item belonging to the layout is indented -n columns.

+n columns.

-- layout stack: []
 module M where -- layout stack: [∅]
 
@@ -154,9 +154,9 @@ implicitly inserted by the compiler. With the presented ideas in mind, we may
 begin to introduce a small set of informal rules describing the lexer’s handling
 of layouts, the first being:

    -
  1. If a layout keyword is followed by the token ‘{’, push \varnothing -onto the layout context stack. Otherwise, push \langle n \rangle onto -the layout context stack where n is the indentation of the token +

  2. If a layout keyword is followed by the token ‘{’, push \varnothing +onto the layout context stack. Otherwise, push \langle n \rangle onto +the layout context stack where n is the indentation of the token following the layout keyword. Additionally, the lexer is to insert a virtual opening brace after the token representing the layout keyword.

@@ -179,10 +179,10 @@ numeric value – is referred to as offside by myself internally and th Haskell report describing layouts. We informally formalise this rule as follows:

  1. When the first token on a line is preceeded only by whitespace, if the -token’s first grapheme resides on a column number m equal to the -indentation level of the enclosing context – i.e. the \langle n
+token’s first grapheme resides on a column number <img class= equal to the +indentation level of the enclosing context – i.e. the \langle n
 \rangle on top of the layout stack. Should no such context exist on the -stack, assume m > n.

  2. +stack, assume m > n.

We have an idea of how to begin layouts, delimit the enclosed items, and last we’ll need to end layouts. This is where the distinction between virtual and @@ -192,7 +192,7 @@ This will be elaborated on in the next section. For now, we will be content with naïvely inserting a virtual closing brace when a token is indented right of the layout.

    -
  1. Under the same conditions as rule 2., when m < n the lexer shall +

  2. Under the same conditions as rule 2., when m < n the lexer shall insert a virtual closing brace and pop the layout stack.

This rule covers some cases including the top-level, however, consider @@ -271,7 +271,7 @@ system, see References

diff --git a/doc/build/html/commentary/ti.html b/doc/build/html/commentary/ti.html index 6f4789b..77f7bec 100644 --- a/doc/build/html/commentary/ti.html +++ b/doc/build/html/commentary/ti.html @@ -13,7 +13,7 @@ - + @@ -66,7 +66,7 @@ machine.

References

@@ -75,7 +75,7 @@ machine.

diff --git a/doc/build/html/glossary.html b/doc/build/html/glossary.html index a2c61e8..798382c 100644 --- a/doc/build/html/glossary.html +++ b/doc/build/html/glossary.html @@ -76,7 +76,7 @@ code using alignment and newlines.

References

diff --git a/doc/build/html/references/gm-state-transitions.html b/doc/build/html/references/gm-state-transitions.html index 6377277..46a23e3 100644 --- a/doc/build/html/references/gm-state-transitions.html +++ b/doc/build/html/references/gm-state-transitions.html @@ -38,7 +38,7 @@
  1. Lookup a global by name and push its value onto the stack

    -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src=

  2. +
  3. Again, building on the previous rules, this rule makes the machine consider +unapplied supercombinators to be in WHNF

    +
    +

    \gmrule
+{ \mathtt{Unwind} : \nillist
+& a_0 : \ldots : a_n : \nillist
+& \langle i, s \rangle : d
+& h
+\begin{bmatrix}
+      a_0 : \mathtt{NGlobal} \; k \; c
+\end{bmatrix}
+& m
+}
+{ i
+& a_n : s
+& d
+& h
+& m \\
+\SetCell[c=2]{c}
+\text{when $n < k$}
+}

    +
  4. If an application is on top of the stack, Unwind continues unwinding

    -

    \gmrule
+<p><img src=Unwind sets up the stack and jumps to -the supercombinator’s code (\beta-reduction)

    +the supercombinator’s code (\beta-reduction)

    -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src= -

    \gmrule
+<p><img src=

  5. -
  6. Reduce a primitive binary operator *.

    +
  7. Reduce a primitive binary operator *.

    -

    \gmrule
+<p><img src=

  8. -
  9. Reduce a primitive unary operator \neg.

    +
  10. Reduce a primitive unary operator \neg.

    -

    \gmrule
+<p><img src=

  11. -
  12. Consider unapplied functions to be in WHNF

    +
  13. Pack a constructor if there are sufficient arguments

    -

    \gmrule
-{ \mathtt{Unwind} : \nillist
-& a_0 : \ldots : a_n : \nillist
-& \langle i, s \rangle : d
+<p><img src=

    +
  14. +
  15. Evaluate a case

    +
    +

    \gmrule
+{ \mathtt{CaseJump} \begin{bmatrix} t \to c \end{bmatrix} : i
+& a : s
+& d
+& h
+\begin{bmatrix}
+      a : \mathtt{NConstr} \; t \; v
+\end{bmatrix}
+& m
+}
+{ c \concat i
+& d
+& h
+& m
 }

@@ -388,7 +426,7 @@ this by modifying Core Rule 2 to update the global environment with the new node’s address. Consider how this rule might impact garbage collection (remember that the environment is intended for globals).

-

\gmrule
+<p><img src= -

\gmrule
+<p><img src= - + @@ -35,7 +35,7 @@

Evaluation is complete when a single NNum remains on the stack and the dump is empty.

-

\transrule
+<p><img src=

Dereference an indirection passed as an argument to a function.

-

\transrule
+<p><img src=

Dereference an indirection on top of the stack.

-

\transrule
+<p><img src=

-

Perform a unary operation o(n) with internal Prim constructor +

Perform a unary operation o(n) with internal Prim constructor O on an argument in normal form.

-

\transrule
+<p><img src=Prim constructor O.

-

\transrule
+<p><img src=O< }"/>

Restore the stack when a sub-computation has completed.

-

\transrule
+<p><img src=O< & h & g }"/>

-

Reduce a supercombinator and update the root with the \beta-reduced form

+

Reduce a supercombinator and update the root with the \beta-reduced form

-

\transrule
+<p><img src=O< & \SetCell[c=3]{c} \text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g }"/>

-

Perform a binary operation o(x,y) associated with internal Prim +

Perform a binary operation o(x,y) associated with internal Prim constructor O on two NNum s both in normal form.

-

\transrule
+<p><img src=O<

In a conditional primitive, perform the reduction if the condition has been evaluated as True (NData 1 []).

-

\transrule
+<p><img src=NData 0 []).

-

\transrule
+<p><img src=

In a conditional primitive, evaluate the condition.

-

\transrule
+<p><img src=

Construct NData out of a constructor and its arguments

-

\transrule
+<p><img src=Pairs

Evaluate the first argument if necessary

-

\transrule
+<p><img src=

Perform the reduction if the first argument is in normal form

-

\transrule
+<p><img src=Lists

Evaluate the scrutinee

-

\transrule
+<p><img src=

If the scrutinee is Nil, perform the appropriate reduction.

diff --git a/doc/build/html/searchindex.js b/doc/build/html/searchindex.js index 925be43..86bd861 100644 --- a/doc/build/html/searchindex.js +++ b/doc/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["commentary/gm", "commentary/layout-lexing", "commentary/ti", "glossary", "index", "references/gm-state-transitions", "references/ti-state-transitions"], "filenames": ["commentary/gm.rst", "commentary/layout-lexing.rst", "commentary/ti.rst", "glossary.rst", "index.rst", "references/gm-state-transitions.rst", "references/ti-state-transitions.rst"], "titles": ["The G-Machine", "Lexing, Parsing, and Layouts", "The Template Instantiator", "Glossary", "Welcome to rlp\u2019s documentation!", "G-Machine State Transition Rules", "Template Instantiator State Transition Rules"], "terms": {"index": 0, "modul": 1, "search": [], "page": [], "begin": [0, 1, 5, 6], "tblr": [], "ccclc": [], "hline": [], "": [0, 1, 3, 5, 6], "d": [0, 5, 6], "h": [0, 5, 6], "bmatrix": [0, 5, 6], "mathtt": [0, 5, 6], "nap": [5, 6], "a_1": [0, 5, 6], "a_2": [5, 6], "nind": [5, 6], "a_3": 6, "end": [0, 1, 5, 6], "f": [0, 1, 5, 6], "impli": [], "thi": [0, 1, 2, 5], "i": [0, 1, 3, 5, 6], "normal": [1, 6], "paragraph": [], "what": [], "follow": [1, 5], "precompil": [], "latex": [], "equat": [], "math": [], "transrul": [0, 6], "test": [], "The": [1, 3, 4, 5], "spineless": [], "tagless": [], "g": [1, 4, 6], "machin": [2, 4], "wip": [0, 2], "here": 1, "typeset": [], "state": [1, 2, 4], "transit": 4, "rule": [1, 4], "describ": 1, "action": 5, "dereferenc": [], "indirect": [5, 6], "when": [0, 1, 5, 6], "pass": [0, 6], "function": [1, 5, 6], "argument": [0, 5, 6], "derefer": 6, "an": [0, 1, 3, 5, 6], "top": [0, 1, 3, 5, 6], "stack": [0, 1, 5, 6], "p": 6, "negat": [], "form": [1, 6], "nprim": 6, "neg": 5, "x": [0, 1, 5, 6], "nnum": [5, 6], "n": [0, 1, 5, 6], "perform": 6, "unari": [5, 6], "oper": [1, 5, 6], "o": 6, "e": [0, 1, 5, 6], "intern": [1, 6], "prim": 6, "constructor": 6, "unevalu": [], "b": 0, "nillist": [5, 6], "hopefulli": 2, "expand": 2, "thorough": 2, "explan": [], "evalu": [5, 6], "complet": [1, 5, 6], "singl": [0, 1, 6], "texttt": [], "remain": 6, "dump": [5, 6], "empti": [5, 6], "halt": [5, 6], "restor": [5, 6], "sub": 6, "comput": 6, "ha": [0, 1, 6], "reduc": [5, 6], "supercombin": [0, 1, 3, 5, 6], "updat": [0, 5, 6], "root": [0, 6], "beta": [5, 6], "a_0": [0, 5, 6], "ldot": [0, 5, 6], "a_n": [0, 5, 6], "nsupercomb": [0, 6], "x_1": [0, 6], "x_n": [0, 6], "text": [0, 1, 5, 6], "where": [0, 1, 5, 6], "instantiateu": [0, 6], "setcel": [0, 5, 6], "r": [], "2": [0, 1, 5], "c": [0, 1, 5, 6], "3": [0, 3, 6], "\u03b2": [], "caption": [], "figur": [], "gather": [], "tag": [], "1": [0, 1, 5, 6], "binari": [5, 6], "y": [1, 5, 6], "associ": [1, 6], "two": [1, 6], "both": [1, 6], "In": [1, 5, 6], "condit": [1, 6], "primit": [5, 6], "placehold": [], "walkthrough": 2, "textt": [], "ifp": 6, "reduct": [5, 6], "been": [5, 6], "true": 6, "conp": 6, "0": [0, 6], "mathbb": [], "fals": 6, "construct": 6, "ndata": 6, "out": [1, 6], "its": [0, 1, 5, 6], "t": [1, 6], "vdot": [5, 6], "a_": [5, 6], "style": 1, "languag": 1, "my": 1, "previou": [1, 5], "experi": 1, "have": [1, 5], "all": 1, "had": 1, "quit": [0, 1], "trivial": 1, "lexic": [], "analysi": 1, "stage": 1, "peak": 1, "complex": 1, "stream": 1, "token": 1, "lazili": 1, "task": [0, 1], "tokenis": 1, "veri": [0, 1], "simpl": [0, 1, 3], "descript": 1, "you": 1, "ignor": 1, "whitespac": 1, "point": [1, 5], "recognis": 1, "If": [1, 5, 6], "don": 1, "someth": [0, 1], "check": 1, "liter": 1, "identifi": [1, 5], "should": 1, "neither": 1, "return": 1, "error": 1, "On": 1, "paper": 1, "haskel": 3, "like": [0, 1], "seem": 1, "pose": 1, "few": 1, "greater": 1, "challeng": 1, "some": 1, "potenti": 1, "roadblock": 1, "mind": 1, "befor": 1, "make": 1, "attempt": 1, "were": 1, "sensit": 1, "while": [1, 5], "wa": [0, 1], "comfort": 1, "idea": [1, 3], "system": 1, "similar": 1, "python": [], "indent": 1, "dedent": 1, "us": [0, 1, 3], "section": [1, 3], "code": [0, 1, 3, 5], "wai": [0, 1], "felt": 1, "differ": 1, "onli": [0, 1], "user": 1, "defin": 1, "infix": 1, "preced": 1, "level": [1, 3], "recal": 1, "algorithm": 1, "look": 1, "up": [1, 5], "prefix": 1, "postfix": 1, "even": 1, "mixfix": 1, "global": [1, 5], "tabl": 1, "call": 1, "appropri": [1, 6], "parser": [0, 1], "also": [1, 5], "store": 1, "never": [1, 5], "modifi": [1, 5], "runtim": 1, "howev": 1, "could": 1, "nice": 1, "solut": [0, 1], "context": 1, "keyword": 1, "allow": [1, 3], "word": 1, "famili": 1, "role": 1, "from": [0, 1, 5], "_note": [], "found": [0, 1], "ghc": 1, "lexer": 1, "first": [1, 6], "ar": [0, 1, 5], "consid": [1, 5], "bodi": [0, 1], "relev": 1, "type": [0, 1], "declar": 1, "lex": 4, "pars": 4, "layout": [3, 4], "note": [1, 5], "list": 1, "ascend": 1, "intimid": 1, "factor": 1, "read": 1, "appear": 1, "which": [0, 1], "after": [1, 5], "case": [1, 3, 5], "els": 1, "express": [0, 1, 3], "etc": 1, "bit": 1, "thought": 1, "research": 1, "refer": [], "them": [1, 5], "easili": 1, "scariest": 1, "thing": 1, "thei": [0, 1], "achiev": 1, "we": [0, 1, 5], "compar": 1, "contrast": 1, "much": 1, "dismai": 1, "newlin": [1, 3], "separ": 1, "statement": 1, "resolv": 1, "scope": 1, "instead": [0, 1], "tradit": 1, "semicolon": 1, "brace": [], "see": 1, "bcpl": [], "http": [], "doc": [], "org": [], "lexical_analysi": [], "html": [], "dure": [0, 1], "new": [0, 1, 5], "line": 1, "appli": [0, 1, 5], "than": 1, "insert": 1, "push": [0, 1, 5], "onto": [0, 1, 5], "initialis": 1, "zero": [0, 1], "lesser": 1, "pop": [0, 1, 5], "until": 1, "each": 1, "equal": 1, "termin": 1, "leav": [1, 5], "ident": 1, "pretti": 1, "philosophi": 1, "one": 1, "correct": [1, 5], "answer": 1, "todo": [1, 3], "need": 1, "sourc": 1, "develop": 1, "our": [0, 1], "pattern": 1, "translat": 1, "explicitli": 1, "saw": 1, "most": [1, 3], "notabl": 1, "exampl": [1, 3], "implicitli": [1, 3], "why": 1, "am": 1, "so": [1, 5], "afraid": 1, "syntax": [1, 3], "A": 5, "primer": [], "But": [], "about": [], "mai": 1, "gener": 1, "To": 1, "frank": 1, "m": [1, 5], "far": 1, "less": 1, "scare": 1, "ask": 1, "myself": 1, "certainli": 1, "needn": 1, "concern": 1, "implicit": 1, "continu": [1, 5], "written": 1, "over": 1, "multipl": 1, "often": 1, "seen": 1, "somewhat": 1, "esoter": 1, "extrem": 1, "common": 1, "data": 1, "cry": 1, "right": 1, "now": 1, "sorri": 1, "anoth": 1, "format": 1, "odditi": 1, "anotherth": 1, "do": [0, 1], "align": [1, 3], "contiat": [], "enough": 1, "fear": 1, "let": 1, "actual": 1, "think": [1, 3], "implement": 1, "firstli": 1, "formal": 1, "mean": [0, 1, 5], "sai": 1, "order": [1, 5], "yield": 1, "thankfulli": 1, "u": [1, 3], "entri": 1, "clear": 1, "select": 1, "minor": 1, "except": 1, "elabor": 1, "being": [0, 1], "altern": [1, 3], "term": [1, 3], "link": 1, "glosarri": [], "cultur": 3, "infam": 3, "scari": 3, "mathemat": 3, "pleas": 3, "excus": 3, "realli": 3, "fun": 3, "glossari": [1, 4], "free": [1, 3], "variabl": [0, 3], "For": [1, 3], "purpos": 3, "just": [1, 3, 5], "definit": [1, 3], "possibl": [1, 3], "match": 3, "under": 1, "assumpt": [], "give": [], "lexem": 1, "next": 1, "file": [], "reach": 1, "henceforth": [], "denot": 1, "repres": 1, "subsequ": [], "column": 1, "number": [1, 5], "charact": 1, "must": [], "introduc": 1, "addit": [], "input": [], "handl": 1, "obvious": [], "would": 1, "requir": [1, 5], "string": 5, "help": [], "book": [], "keep": [0, 1], "tool": [], "good": [], "current": [1, 5], "cascad": 1, "element": 1, "either": 1, "nolayout": [], "indic": 0, "explicit": 1, "programm": [], "herself": [], "non": [0, 1], "integ": [], "enclos": 1, "rememb": [1, 5], "w": [0, 1], "10": [1, 5], "pure": [], "abov": [], "notic": 0, "accom": [], "langl": [1, 5], "rangl": [1, 5], "lastli": [], "compliment": [], "how": [1, 5], "close": 1, "preceed": 1, "provid": 5, "consequ": [], "ll": 1, "more": 1, "pedant": 1, "chapter": 1, "2010": 1, "report": 1, "heavili": 1, "referenc": 1, "manag": 1, "record": 1, "laid": 1, "start": 1, "item": 1, "belong": 1, "With": 1, "plai": 1, "set": [1, 5], "inform": 1, "otherwis": 1, "adequet": 1, "satisfi": 1, "basic": 1, "contin": 1, "varnoth": 1, "final": 1, "concept": 1, "virtual": 1, "re": 1, "moment": [0, 1], "exactli": 1, "compil": 1, "present": 1, "small": 1, "addition": 1, "open": 1, "observ": 1, "sampl": 1, "can": 1, "bind": [0, 1], "rather": 1, "focu": 1, "na\u00efv": 1, "eol": 1, "prove": 1, "unid": 1, "wait": 1, "comparison": 1, "nondescript": 1, "measur": 1, "numer": 1, "valu": [1, 5], "offsid": 1, "formalis": 1, "graphem": 1, "resid": 1, "exist": [0, 1, 5], "assum": 1, "print": 1, "delimit": 1, "last": 1, "distinct": 1, "between": 1, "come": 1, "partial": 1, "toward": 1, "respons": 1, "share": [1, 5], "content": 1, "same": 1, "shall": 1, "cover": 1, "includ": 1, "framework": 1, "time": [0, 1], "cannot": 1, "model": [0, 1], "simpli": [0, 1], "As": 1, "long": 1, "track": 1, "own": 1, "cope": 1, "fine": 1, "without": 1, "view": 1, "abstract": 1, "yet": 1, "decompos": 1, "discret": 1, "typic": 1, "linear": [0, 1], "recurs": 1, "down": 1, "big": 1, "reason": 1, "aim": 1, "tend": 1, "burden": 1, "necessari": [1, 6], "still": 1, "natur": 1, "orient": 1, "backtrack": 1, "difficult": 1, "ineleg": 1, "counterintuit": 1, "eleg": 1, "problem": 1, "minimis": 1, "rlp": [1, 3], "bnf": 1, "setlength": [], "grammarparsep": [], "20pt": [], "plu": [], "1pt": [], "minu": [], "grammarind": [], "12em": [], "grammar": [], "expr": [0, 1], "alt": [], "stat": [], "vopen": 1, "vclose": 1, "recov": 1, "treat": 1, "ensur": 1, "casepairp": 6, "_": 6, "scrutine": 6, "caselistp": 6, "nil": 6, "f_": 6, "con": 6, "initi": 0, "templat": [0, 4], "instanti": [0, 4, 5], "tim": [], "straightforward": 0, "core": 0, "design": 0, "major": 0, "achil": 0, "heel": 0, "interleav": 0, "heap": [0, 5], "node": [0, 5], "hold": 0, "uninstanti": 0, "raw": 0, "ast": 0, "straight": 0, "spot": 0, "lead": [], "loss": [], "travers": 0, "tree": [], "difficulti": [], "lower": [], "investig": [], "scstep": 0, "name": [0, 5], "tistat": 0, "st": 0, "rootaddr": 0, "drop": 0, "length": 0, "env": 0, "argbind": 0, "zip": 0, "argaddr": 0, "getarg": 0, "src": 0, "hello": [], "world": [], "process": 0, "goe": 0, "augment": 0, "environ": [0, 5], "local": 0, "remov": 0, "address": [0, 5], "newli": [0, 5], "4": 0, "structur": 0, "unfit": 0, "assembli": 0, "target": 0, "goal": 0, "sequenc": 0, "instruct": [0, 5], "execut": 0, "lookup": 5, "gmrule": 5, "pushglob": 5, "alloc": 5, "int": [0, 5], "creat": 5, "pushint": 5, "applic": 5, "directli": 5, "below": 5, "mkap": [0, 5], "_n": [], "tidi": 5, "slide": [0, 5], "unwind": [0, 5], "jump": 5, "nglobal": 5, "compiledsc": 0, "compilesc": 0, "scdef": 0, "gm": 0, "run": 0, "map": [0, 5], "enumer": 0, "Of": 0, "cours": 0, "rel": 0, "becom": 0, "inaccur": 0, "around": 0, "offset": 0, "compilec": 0, "app": 0, "argoffset": 0, "sneaki": 5, "trick": 5, "enabl": 5, "object": [], "digit": 5, "valid": 5, "abus": 5, "ad": [], "base": 5, "rep": 5, "5": 5, "effect": 5, "take": 5, "alreadi": 5, "impact": 5, "garbag": 5, "collect": 5, "intend": 5, "might": 5, "e_n": 5, "nth": 5, "ti": 0, "e_1": 5, "uninitialis": 5, "space": 5, "nuninitialis": 5, "whnf": 5, "eval": 5, "z": [], "plain": 5, "old": 5, "put": 5, "conflict": 5, "discard": [], "queue": 5, "buld": 5, "k": 5, "unappli": 5}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"welcom": 4, "rlp": 4, "": 4, "document": 4, "indic": [], "tabl": [], "test": [], "page": [], "commentari": 4, "content": 4, "The": [0, 2], "spineless": [], "tagless": [], "g": [0, 5], "machin": [0, 5], "lex": 1, "pars": 1, "layout": 1, "rule": [5, 6], "refer": [1, 4], "A": 1, "lexic": 1, "primer": 1, "python": 1, "But": 1, "what": 1, "about": 1, "haskel": 1, "glossari": 3, "index": 4, "lone": 1, "brace": 1, "pair": 6, "list": 6, "templat": [2, 6], "instanti": [2, 6], "motiv": 0, "implement": [], "compil": 0, "how": [], "squash": 0, "tree": 0, "vine": 0, "theori": 0, "core": 5, "transit": [5, 6], "evalu": 0, "slurp": 0, "extens": 5, "lazi": 0, "state": [5, 6], "ti": []}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Lexing, Parsing, and Layouts": [[1, "lexing-parsing-and-layouts"]], "A Lexical Primer: Python": [[1, "a-lexical-primer-python"]], "But What About Haskell?": [[1, "but-what-about-haskell"]], "Parsing Lonely Braces": [[1, "parsing-lonely-braces"]], "References": [[1, "references"], [4, null]], "Glossary": [[3, "glossary"]], "Template Instantiator State Transition Rules": [[6, "template-instantiator-state-transition-rules"]], "Pairs": [[6, "pairs"]], "Lists": [[6, "lists"]], "The Template Instantiator": [[2, "the-template-instantiator"]], "Welcome to rlp\u2019s documentation!": [[4, "welcome-to-rlp-s-documentation"]], "Contents": [[4, "contents"]], "Index": [[4, null]], "Commentary": [[4, null]], "The G-Machine": [[0, "the-g-machine"]], "Motivation": [[0, "motivation"]], "Trees and Vines, in Theory": [[0, "trees-and-vines-in-theory"]], "Evaluation: Slurping Vines": [[0, "evaluation-slurping-vines"]], "Laziness": [[0, "laziness"]], "Compilation: Squashing Trees": [[0, "compilation-squashing-trees"]], "G-Machine State Transition Rules": [[5, "g-machine-state-transition-rules"]], "Core Transition Rules": [[5, "core-transition-rules"]], "Extension Rules": [[5, "extension-rules"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["commentary/gm", "commentary/layout-lexing", "commentary/ti", "glossary", "index", "references/gm-state-transitions", "references/ti-state-transitions"], "filenames": ["commentary/gm.rst", "commentary/layout-lexing.rst", "commentary/ti.rst", "glossary.rst", "index.rst", "references/gm-state-transitions.rst", "references/ti-state-transitions.rst"], "titles": ["The G-Machine", "Lexing, Parsing, and Layouts", "The Template Instantiator", "Glossary", "Welcome to rlp\u2019s documentation!", "G-Machine State Transition Rules", "Template Instantiator State Transition Rules"], "terms": {"index": 0, "modul": 1, "search": [], "page": [], "begin": [0, 1, 5, 6], "tblr": [], "ccclc": [], "hline": [], "": [0, 1, 3, 5, 6], "d": [0, 5, 6], "h": [0, 5, 6], "bmatrix": [0, 5, 6], "mathtt": [0, 5, 6], "nap": [5, 6], "a_1": [0, 5, 6], "a_2": [5, 6], "nind": [5, 6], "a_3": 6, "end": [0, 1, 5, 6], "f": [0, 1, 5, 6], "impli": [], "thi": [0, 1, 2, 5], "i": [0, 1, 3, 5, 6], "normal": [1, 6], "paragraph": [], "what": [], "follow": [1, 5], "precompil": [], "latex": [], "equat": [], "math": [], "transrul": [0, 6], "test": [], "The": [1, 3, 4, 5], "spineless": [], "tagless": [], "g": [1, 4, 6], "machin": [2, 4], "wip": [0, 2], "here": 1, "typeset": [], "state": [1, 2, 4], "transit": 4, "rule": [1, 4], "describ": 1, "action": 5, "dereferenc": [], "indirect": [5, 6], "when": [0, 1, 5, 6], "pass": [0, 6], "function": [1, 5, 6], "argument": [0, 5, 6], "derefer": 6, "an": [0, 1, 3, 5, 6], "top": [0, 1, 3, 5, 6], "stack": [0, 1, 5, 6], "p": 6, "negat": [], "form": [1, 6], "nprim": 6, "neg": 5, "x": [0, 1, 5, 6], "nnum": [5, 6], "n": [0, 1, 5, 6], "perform": 6, "unari": [5, 6], "oper": [1, 5, 6], "o": 6, "e": [0, 1, 5, 6], "intern": [1, 6], "prim": 6, "constructor": [5, 6], "unevalu": [], "b": 0, "nillist": [5, 6], "hopefulli": 2, "expand": 2, "thorough": 2, "explan": [], "evalu": [5, 6], "complet": [1, 5, 6], "singl": [0, 1, 6], "texttt": [], "remain": 6, "dump": [5, 6], "empti": [5, 6], "halt": [5, 6], "restor": [5, 6], "sub": 6, "comput": 6, "ha": [0, 1, 6], "reduc": [5, 6], "supercombin": [0, 1, 3, 5, 6], "updat": [0, 5, 6], "root": [0, 6], "beta": [5, 6], "a_0": [0, 5, 6], "ldot": [0, 5, 6], "a_n": [0, 5, 6], "nsupercomb": [0, 6], "x_1": [0, 6], "x_n": [0, 6], "text": [0, 1, 5, 6], "where": [0, 1, 5, 6], "instantiateu": [0, 6], "setcel": [0, 5, 6], "r": [], "2": [0, 1, 5], "c": [0, 1, 5, 6], "3": [0, 3, 6], "\u03b2": [], "caption": [], "figur": [], "gather": [], "tag": [], "1": [0, 1, 5, 6], "binari": [5, 6], "y": [1, 5, 6], "associ": [1, 6], "two": [1, 6], "both": [1, 6], "In": [1, 5, 6], "condit": [1, 6], "primit": [5, 6], "placehold": [], "walkthrough": 2, "textt": [], "ifp": 6, "reduct": [5, 6], "been": [5, 6], "true": 6, "conp": 6, "0": [0, 6], "mathbb": [], "fals": 6, "construct": 6, "ndata": 6, "out": [1, 6], "its": [0, 1, 5, 6], "t": [1, 5, 6], "vdot": [5, 6], "a_": [5, 6], "style": 1, "languag": 1, "my": 1, "previou": [1, 5], "experi": 1, "have": [1, 5], "all": 1, "had": 1, "quit": [0, 1], "trivial": 1, "lexic": [], "analysi": 1, "stage": 1, "peak": 1, "complex": 1, "stream": 1, "token": 1, "lazili": 1, "task": [0, 1], "tokenis": 1, "veri": [0, 1], "simpl": [0, 1, 3], "descript": 1, "you": 1, "ignor": 1, "whitespac": 1, "point": [1, 5], "recognis": 1, "If": [1, 5, 6], "don": 1, "someth": [0, 1], "check": 1, "liter": 1, "identifi": [1, 5], "should": 1, "neither": 1, "return": 1, "error": 1, "On": 1, "paper": 1, "haskel": 3, "like": [0, 1], "seem": 1, "pose": 1, "few": 1, "greater": 1, "challeng": 1, "some": 1, "potenti": 1, "roadblock": 1, "mind": 1, "befor": 1, "make": [1, 5], "attempt": 1, "were": 1, "sensit": 1, "while": [1, 5], "wa": [0, 1], "comfort": 1, "idea": [1, 3], "system": 1, "similar": 1, "python": [], "indent": 1, "dedent": 1, "us": [0, 1, 3], "section": [1, 3], "code": [0, 1, 3, 5], "wai": [0, 1], "felt": 1, "differ": 1, "onli": [0, 1], "user": 1, "defin": 1, "infix": 1, "preced": 1, "level": [1, 3], "recal": 1, "algorithm": 1, "look": 1, "up": [1, 5], "prefix": 1, "postfix": 1, "even": 1, "mixfix": 1, "global": [1, 5], "tabl": 1, "call": 1, "appropri": [1, 6], "parser": [0, 1], "also": [1, 5], "store": 1, "never": [1, 5], "modifi": [1, 5], "runtim": 1, "howev": 1, "could": 1, "nice": 1, "solut": [0, 1], "context": 1, "keyword": 1, "allow": [1, 3], "word": 1, "famili": 1, "role": 1, "from": [0, 1, 5], "_note": [], "found": [0, 1], "ghc": 1, "lexer": 1, "first": [1, 6], "ar": [0, 1, 5], "consid": [1, 5], "bodi": [0, 1], "relev": 1, "type": [0, 1], "declar": 1, "lex": 4, "pars": 4, "layout": [3, 4], "note": [1, 5], "list": 1, "ascend": 1, "intimid": 1, "factor": 1, "read": 1, "appear": 1, "which": [0, 1], "after": [1, 5], "case": [1, 3, 5], "els": 1, "express": [0, 1, 3], "etc": 1, "bit": 1, "thought": 1, "research": 1, "refer": [], "them": [1, 5], "easili": 1, "scariest": 1, "thing": 1, "thei": [0, 1], "achiev": 1, "we": [0, 1, 5], "compar": 1, "contrast": 1, "much": 1, "dismai": 1, "newlin": [1, 3], "separ": 1, "statement": 1, "resolv": 1, "scope": 1, "instead": [0, 1], "tradit": 1, "semicolon": 1, "brace": [], "see": 1, "bcpl": [], "http": [], "doc": [], "org": [], "lexical_analysi": [], "html": [], "dure": [0, 1], "new": [0, 1, 5], "line": 1, "appli": [0, 1, 5], "than": 1, "insert": 1, "push": [0, 1, 5], "onto": [0, 1, 5], "initialis": 1, "zero": [0, 1], "lesser": 1, "pop": [0, 1, 5], "until": 1, "each": 1, "equal": 1, "termin": 1, "leav": [1, 5], "ident": 1, "pretti": 1, "philosophi": 1, "one": 1, "correct": [1, 5], "answer": 1, "todo": [1, 3], "need": 1, "sourc": 1, "develop": 1, "our": [0, 1], "pattern": 1, "translat": 1, "explicitli": 1, "saw": 1, "most": [1, 3], "notabl": 1, "exampl": [1, 3], "implicitli": [1, 3], "why": 1, "am": 1, "so": [1, 5], "afraid": 1, "syntax": [1, 3], "A": 5, "primer": [], "But": [], "about": [], "mai": 1, "gener": 1, "To": 1, "frank": 1, "m": [1, 5], "far": 1, "less": 1, "scare": 1, "ask": 1, "myself": 1, "certainli": 1, "needn": 1, "concern": 1, "implicit": 1, "continu": [1, 5], "written": 1, "over": 1, "multipl": 1, "often": 1, "seen": 1, "somewhat": 1, "esoter": 1, "extrem": 1, "common": 1, "data": 1, "cry": 1, "right": 1, "now": 1, "sorri": 1, "anoth": 1, "format": 1, "odditi": 1, "anotherth": 1, "do": [0, 1], "align": [1, 3], "contiat": [], "enough": 1, "fear": 1, "let": 1, "actual": 1, "think": [1, 3], "implement": 1, "firstli": 1, "formal": 1, "mean": [0, 1, 5], "sai": 1, "order": [1, 5], "yield": 1, "thankfulli": 1, "u": [1, 3], "entri": 1, "clear": 1, "select": 1, "minor": 1, "except": 1, "elabor": 1, "being": [0, 1], "altern": [1, 3], "term": [1, 3], "link": 1, "glosarri": [], "cultur": 3, "infam": 3, "scari": 3, "mathemat": 3, "pleas": 3, "excus": 3, "realli": 3, "fun": 3, "glossari": [1, 4], "free": [1, 3], "variabl": [0, 3], "For": [1, 3], "purpos": 3, "just": [1, 3, 5], "definit": [1, 3], "possibl": [1, 3], "match": 3, "under": 1, "assumpt": [], "give": [], "lexem": 1, "next": 1, "file": [], "reach": 1, "henceforth": [], "denot": 1, "repres": 1, "subsequ": [], "column": 1, "number": [1, 5], "charact": 1, "must": [], "introduc": 1, "addit": [], "input": [], "handl": 1, "obvious": [], "would": 1, "requir": [1, 5], "string": 5, "help": [], "book": [], "keep": [0, 1], "tool": [], "good": [], "current": [1, 5], "cascad": 1, "element": 1, "either": 1, "nolayout": [], "indic": 0, "explicit": 1, "programm": [], "herself": [], "non": [0, 1], "integ": [], "enclos": 1, "rememb": [1, 5], "w": [0, 1], "10": [1, 5], "pure": [], "abov": [], "notic": 0, "accom": [], "langl": [1, 5], "rangl": [1, 5], "lastli": [], "compliment": [], "how": [1, 5], "close": 1, "preceed": 1, "provid": 5, "consequ": [], "ll": 1, "more": 1, "pedant": 1, "chapter": 1, "2010": 1, "report": 1, "heavili": 1, "referenc": 1, "manag": 1, "record": 1, "laid": 1, "start": 1, "item": 1, "belong": 1, "With": 1, "plai": 1, "set": [1, 5], "inform": 1, "otherwis": 1, "adequet": 1, "satisfi": 1, "basic": 1, "contin": 1, "varnoth": 1, "final": 1, "concept": 1, "virtual": 1, "re": 1, "moment": [0, 1], "exactli": 1, "compil": 1, "present": 1, "small": 1, "addition": 1, "open": 1, "observ": 1, "sampl": 1, "can": 1, "bind": [0, 1], "rather": 1, "focu": 1, "na\u00efv": 1, "eol": 1, "prove": 1, "unid": 1, "wait": 1, "comparison": 1, "nondescript": 1, "measur": 1, "numer": 1, "valu": [1, 5], "offsid": 1, "formalis": 1, "graphem": 1, "resid": 1, "exist": [0, 1, 5], "assum": 1, "print": 1, "delimit": 1, "last": 1, "distinct": 1, "between": 1, "come": 1, "partial": 1, "toward": 1, "respons": 1, "share": [1, 5], "content": 1, "same": 1, "shall": 1, "cover": 1, "includ": 1, "framework": 1, "time": [0, 1], "cannot": 1, "model": [0, 1], "simpli": [0, 1], "As": 1, "long": 1, "track": 1, "own": 1, "cope": 1, "fine": 1, "without": 1, "view": 1, "abstract": 1, "yet": 1, "decompos": 1, "discret": 1, "typic": 1, "linear": [0, 1], "recurs": 1, "down": 1, "big": 1, "reason": 1, "aim": 1, "tend": 1, "burden": 1, "necessari": [1, 6], "still": 1, "natur": 1, "orient": 1, "backtrack": 1, "difficult": 1, "ineleg": 1, "counterintuit": 1, "eleg": 1, "problem": 1, "minimis": 1, "rlp": [1, 3], "bnf": 1, "setlength": [], "grammarparsep": [], "20pt": [], "plu": [], "1pt": [], "minu": [], "grammarind": [], "12em": [], "grammar": [], "expr": [0, 1], "alt": [], "stat": [], "vopen": 1, "vclose": 1, "recov": 1, "treat": 1, "ensur": 1, "casepairp": 6, "_": 6, "scrutine": 6, "caselistp": 6, "nil": 6, "f_": 6, "con": 6, "initi": 0, "templat": [0, 4], "instanti": [0, 4, 5], "tim": [], "straightforward": 0, "core": 0, "design": 0, "major": 0, "achil": 0, "heel": 0, "interleav": 0, "heap": [0, 5], "node": [0, 5], "hold": 0, "uninstanti": 0, "raw": 0, "ast": 0, "straight": 0, "spot": 0, "lead": [], "loss": [], "travers": 0, "tree": [], "difficulti": [], "lower": [], "investig": [], "scstep": 0, "name": [0, 5], "tistat": 0, "st": 0, "rootaddr": 0, "drop": 0, "length": 0, "env": 0, "argbind": 0, "zip": 0, "argaddr": 0, "getarg": 0, "src": 0, "hello": [], "world": [], "process": 0, "goe": 0, "augment": 0, "environ": [0, 5], "local": 0, "remov": 0, "address": [0, 5], "newli": [0, 5], "4": 0, "structur": 0, "unfit": 0, "assembli": 0, "target": 0, "goal": 0, "sequenc": 0, "instruct": [0, 5], "execut": 0, "lookup": 5, "gmrule": 5, "pushglob": 5, "alloc": 5, "int": [0, 5], "creat": 5, "pushint": 5, "applic": 5, "directli": 5, "below": 5, "mkap": [0, 5], "_n": [], "tidi": 5, "slide": [0, 5], "unwind": [0, 5], "jump": 5, "nglobal": 5, "compiledsc": 0, "compilesc": 0, "scdef": 0, "gm": 0, "run": 0, "map": [0, 5], "enumer": 0, "Of": 0, "cours": 0, "rel": 0, "becom": 0, "inaccur": 0, "around": 0, "offset": 0, "compilec": 0, "app": 0, "argoffset": 0, "sneaki": 5, "trick": 5, "enabl": 5, "object": [], "digit": 5, "valid": 5, "abus": 5, "ad": [], "base": 5, "rep": 5, "5": 5, "effect": 5, "take": 5, "alreadi": 5, "impact": 5, "garbag": 5, "collect": 5, "intend": 5, "might": 5, "e_n": 5, "nth": 5, "ti": 0, "e_1": 5, "uninitialis": 5, "space": 5, "nuninitialis": 5, "whnf": 5, "eval": 5, "z": [], "plain": 5, "old": 5, "put": 5, "conflict": 5, "discard": [], "queue": 5, "buld": 5, "k": 5, "unappli": 5, "again": 5, "build": 5, "pack": 5, "suffici": 5, "nconstr": 5, "casejump": 5, "v": 5, "concat": 5}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"welcom": 4, "rlp": 4, "": 4, "document": 4, "indic": [], "tabl": [], "test": [], "page": [], "commentari": 4, "content": 4, "The": [0, 2], "spineless": [], "tagless": [], "g": [0, 5], "machin": [0, 5], "lex": 1, "pars": 1, "layout": 1, "rule": [5, 6], "refer": [1, 4], "A": 1, "lexic": 1, "primer": 1, "python": 1, "But": 1, "what": 1, "about": 1, "haskel": 1, "glossari": 3, "index": 4, "lone": 1, "brace": 1, "pair": 6, "list": 6, "templat": [2, 6], "instanti": [2, 6], "motiv": 0, "implement": [], "compil": 0, "how": [], "squash": 0, "tree": 0, "vine": 0, "theori": 0, "core": 5, "transit": [5, 6], "evalu": 0, "slurp": 0, "extens": 5, "lazi": 0, "state": [5, 6], "ti": []}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"The G-Machine": [[0, "the-g-machine"]], "Motivation": [[0, "motivation"]], "Trees and Vines, in Theory": [[0, "trees-and-vines-in-theory"]], "Evaluation: Slurping Vines": [[0, "evaluation-slurping-vines"]], "Laziness": [[0, "laziness"]], "Compilation: Squashing Trees": [[0, "compilation-squashing-trees"]], "Lexing, Parsing, and Layouts": [[1, "lexing-parsing-and-layouts"]], "A Lexical Primer: Python": [[1, "a-lexical-primer-python"]], "But What About Haskell?": [[1, "but-what-about-haskell"]], "Parsing Lonely Braces": [[1, "parsing-lonely-braces"]], "References": [[1, "references"], [4, null]], "The Template Instantiator": [[2, "the-template-instantiator"]], "Glossary": [[3, "glossary"]], "Welcome to rlp\u2019s documentation!": [[4, "welcome-to-rlp-s-documentation"]], "Contents": [[4, "contents"]], "Index": [[4, null]], "Commentary": [[4, null]], "Template Instantiator State Transition Rules": [[6, "template-instantiator-state-transition-rules"]], "Pairs": [[6, "pairs"]], "Lists": [[6, "lists"]], "G-Machine State Transition Rules": [[5, "g-machine-state-transition-rules"]], "Core Transition Rules": [[5, "core-transition-rules"]], "Extension Rules": [[5, "extension-rules"]]}, "indexentries": {"case alternative": [[3, "term-case-alternative"]], "layout": [[3, "term-layout"]], "supercombinator": [[3, "term-supercombinator"]]}}) \ No newline at end of file diff --git a/doc/src/conf.py b/doc/src/conf.py index 7fac303..1cd64cc 100644 --- a/doc/src/conf.py +++ b/doc/src/conf.py @@ -50,6 +50,8 @@ imgmath_latex_preamble = r''' \end{tblr} } \newcommand{\nillist}{[\,]} + +\newcommand{\concat}{+\kern-1.3ex+\kern0.8ex} ''' imgmath_image_format = 'svg' diff --git a/doc/src/references/gm-state-transitions.rst b/doc/src/references/gm-state-transitions.rst index e44c909..1c452f0 100644 --- a/doc/src/references/gm-state-transitions.rst +++ b/doc/src/references/gm-state-transitions.rst @@ -363,6 +363,47 @@ Core Transition Rules & m } +#. Pack a constructor if there are sufficient arguments + + .. math:: + \gmrule + { \mathtt{Pack} \; t \; n : i + & a_1 : \ldots : a_n : s + & d + & h + & m + } + { i + & a : s + & d + & h + \begin{bmatrix} + a : \mathtt{NConstr} \; t \; [a_1,\ldots,a_n] + \end{bmatrix} + & m + } + +#. Evaluate a case + + .. math:: + \gmrule + { \mathtt{CaseJump} \begin{bmatrix} t \to c \end{bmatrix} : i + & a : s + & d + & h + \begin{bmatrix} + a : \mathtt{NConstr} \; t \; v + \end{bmatrix} + & m + } + { c \concat i + & d + & h + & m + } + + + *************** Extension Rules *************** diff --git a/src/Control/Monad/Errorful.hs b/src/Control/Monad/Errorful.hs index 4aa2d43..bcfd4a3 100644 --- a/src/Control/Monad/Errorful.hs +++ b/src/Control/Monad/Errorful.hs @@ -11,7 +11,6 @@ module Control.Monad.Errorful where ---------------------------------------------------------------------------------- import Control.Monad.Trans -import Control.Monad.Except import Data.Functor.Identity import Data.Coerce import Lens.Micro diff --git a/src/GM.hs b/src/GM.hs index 28bb6f6..56933ad 100644 --- a/src/GM.hs +++ b/src/GM.hs @@ -55,11 +55,10 @@ data Instr = Unwind | Alloc Int | Eval -- primitive ops - | Neg - | Add - | Sub - | Mul - | Div + | Neg | Add | Sub | Mul | Div + | Pack Int Int -- Pack Tag Arity + | CaseJump [(Int, Code)] + | Split Int deriving (Show, Eq) data Node = NNum Int @@ -70,6 +69,7 @@ data Node = NNum Int | NGlobal Int Code | NInd Addr | NUninitialised + | NConstr Int [Addr] -- NConstr Tag Components deriving (Show, Eq) data Stats = Stats @@ -707,5 +707,9 @@ showCode c = "Code" <+> braces instrs where instrs = vcat $ showInstr <$> c showInstr :: Instr -> Doc +showInstr (CaseJump alts) = "CaseJump" $$ nest pprTabstop alternatives + where + showAlt (t,c) = "<" <> int t <> ">" <> showCodeShort c + alternatives = foldr (\a acc -> showAlt a $$ acc) mempty alts showInstr i = text $ show i