From 5d83bb8cc013763c611c27808a16378dbfbe7185 Mon Sep 17 00:00:00 2001 From: Jeff Everett Date: Mon, 20 Jul 2015 13:30:23 -0600 Subject: [PATCH] Added support for \limits and \nolimits controls --- src/Parser.js | 13 ++++++- test/katex-spec.js | 34 ++++++++++++++++++ .../images/LimitControls-chrome.png | Bin 0 -> 22356 bytes .../images/LimitControls-firefox.png | Bin 0 -> 23733 bytes test/screenshotter/ss_data.json | 1 + 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/screenshotter/images/LimitControls-chrome.png create mode 100644 test/screenshotter/images/LimitControls-firefox.png diff --git a/src/Parser.js b/src/Parser.js index 9de048759..5f9f5725b 100644 --- a/src/Parser.js +++ b/src/Parser.js @@ -254,7 +254,18 @@ Parser.prototype.parseAtom = function(pos, mode) { // Lex the first token var lex = this.lexer.lex(currPos, mode); - if (lex.text === "^") { + if (lex.text === "\\limits" || lex.text === "\\nolimits") { + // We got a limit control + if (!base || base.result.type !== "op") { + throw new ParseError("Limit controls must follow a math operator", + this.lexer, currPos); + } + else { + var limits = lex.text == "\\limits"; + base.result.value.limits = limits; + currPos = lex.position; + } + } else if (lex.text === "^") { // We got a superscript start if (superscript) { throw new ParseError( diff --git a/test/katex-spec.js b/test/katex-spec.js index 36b4f91f4..927cd9d66 100644 --- a/test/katex-spec.js +++ b/test/katex-spec.js @@ -360,6 +360,40 @@ describe("A subscript and superscript tree-builder", function() { }); }); +describe("A parser with limit controls", function() { + it("should fail when the limit control is not preceded by an op node", function() { + expect("3\\nolimits_2^2").toNotParse(); + expect("\\sqrt\\limits_2^2").toNotParse(); + expect("45 +\\nolimits 45").toNotParse(); + }); + + it("should parse when the limit control directly follows an op node", function() { + expect("\\int\\limits_2^2 3").toParse(); + expect("\\sum\\nolimits_3^4 4").toParse(); + }); + + it("should parse when the limit control is in the sup/sub area of an op node", function() { + expect("\\int_2^2\\limits").toParse(); + expect("\\int^2\\nolimits_2").toParse(); + expect("\\int_2\\limits^2").toParse(); + }); + + it("should allow multiple limit controls in the sup/sub area of an op node", function() { + expect("\\int_2\\nolimits^2\\limits 3").toParse(); + expect("\\int\\nolimits\\limits_2^2").toParse(); + expect("\\int\\limits\\limits\\limits_2^2").toParse(); + }); + + it("should have the rightmost limit control determine the limits property " + + "of the preceding op node", function() { + var parsedInput = getParsed("\\int\\nolimits\\limits_2^2"); + expect(parsedInput[0].value.base.value.limits).toBe(true); + + parsedInput = getParsed("\\int\\limits_2\\nolimits^2"); + expect(parsedInput[0].value.base.value.limits).toBe(false); + }); +}); + describe("A group parser", function() { it("should not fail", function() { expect("{xy}").toParse(); diff --git a/test/screenshotter/images/LimitControls-chrome.png b/test/screenshotter/images/LimitControls-chrome.png new file mode 100644 index 0000000000000000000000000000000000000000..0695620b4eb34b2bb08e102c856a7cd44290bc67 GIT binary patch literal 22356 zcmeIaX*ibe_ceYQ6AdaUqGZY}Aw;GqLxzwLQAws!W-_HwN)b_+l6lOSDO4&maU-+J zP(+zB^Q>Fn-|_t4{9pWz<9YeLUwl5|91RW**C;7$SgdjKwbrmH8_sCy8*G!Mkude$e-ou*^XTVqU#!-E*v4K#a>ElA+j}~7Z)!tg2F>uBtL-TWpMu>_?igS6L#MI*X-F;KiDplLLLetHO+Q+`^aa?M2R%{`mU!?d5lCuV#y9 zr%`lwpTlKUo}1`@dt-HBRP@-fV`2Xe^4}C?ad8!FlU?!Z z+pKc$-J>_DtgAb2CbPDa*87C{h@txDNm*Gsmpi|FIUX(dwB!DKX}Q+(gCq4D)?VLb ztwhn3Z`UsCHa@qwIQy$ZoR9Cv+Z*fj`Up9X$(zh9`z`#AZe5F=CRUUE8cN;lfFb?dwD6JP2X$#3WP95MH$#O?R5j$9k1 z^XI?+Y)KM5Q(EXU+Lms)7Ui+q^BguP+Su@m8=09c&rN(!PEL-C0YZV-YP1U_qGcP2nw$Ef0dVKntkrWyITyO8R*tNNS$?k`t>E-acDL# zFE3t|n(}RJxTu+#S!*QM+B>`Uds18(?=G77{s{+5^WZ~vS=X=cXbvC#DJr7ExkdbL z!rQfLQ;Qs@ip#3_fHRNZAFb4?kD23+p2FOKTnb2YB5n&RmI20 z7fbWI_l;oM;oR)(?5m4^$4cb7wXSnEpfn`?Ph-9=8VA^-O+Du$<)mzJuu7#ISn)@>>*Dbc)S zYGUF!@lDm%vciwz2JJ>YhkI+6ZgOiMb6`hbJvFZ`K}TV`IoLxw*MV zjvUz|@1=Io)y-}5#*H5a6xLpNyz>OXNFDs_S+VoaX3cPsYV|Ljot_;z7o3J0BqbzB zmY3I_M$Usozz)$fDhSdK9}?o@2L=aE8X7)({`|G|=eX0aFTcONan~VdKHlZE$bNLB zmRytYNM^{~Ot}^z#CGMiBS!qcO8Ec(Wg{hqrXoovrnk)dw3%7GE9cskbn9i&`_#D?Ck9Ajcy!v`}O7O&*lUK&3ReLwI^!#2YfhJ;G}yU(SW18{I|;#32fSy))SeC+I$o*&E|8jxR;ozBhQ0LWC9c9^V!^C7-Gvi(w{RtIxp?tn%BKR`)*76v z2i0qLeI>$>nUHn;6|0K!f8=?$Q+MH26rBsZWs&D4t=7V?;!@`+Vqjok|KjY!T~a~J zV&dW@?h~9Dv^&MlRfh0rlAiy&%{wfwqAGUCdQK;+amO8HmAd?EY^>hC1k(M%Xc@|@6(R75d8Ok!f_YO{I+h} zX5+R>t+avVz|AnrwOh{%da|83d-iM|-NR42B&-<)tJi*Q%`PlRynFxNCK&bK zkbl9}_BoLf2x48>sxdGn!CHT z{948(G7@QM{79cx0hW4-U0S^U-Lr|-X$Aseux;D6`h8SHEW_WiuJ$6Qi>SbWAB&5N ztH_*rw33pNCr+HuPttaAbw$||7ZbB-Nvw}oe|)*GtX|_CLBvW6N6_Zs2s!kYzMx6c zj`E!QbJlQ@g2>zwpyIo_?B?O&f#j*B_27pucX=Q8o+_=$a+2116RM$GRk2Hbk=^re zI$s>Q16=0w^TgY?Z&7Yu9tHFyy9Gtg=-SQV|Ld#cIx+*FZ18!0fid2PX zi1?%=Ss59z?+DxoDTnBxDGFkf=fbqja6?o_gMZ+h*9yQWKqZsH0CrwUNy*UA5XZ;W z(Q#p6G^?e#na&^3N8|YMU!;^4EWr+86Yi}6w3~O6t2oNrLF=Y|eCG4R*YJ{@0d59n zp)UoOo|}|$BQ1+(x>4MF@F0x!6SkZq?8%dyD9U3ePo5m>DLFOqcW`h}VRcDdiSf=R z_L08w^7z$9^Um6e%AOs&tKcUoDR|MBAoD)?z*5UfJCp*?kT80r^hCp;t~`-ly{Jmb~*=P5TQMc;<7K=yjY;r+v584s7L4ae+s_(1oMnah>DKAz| zac@;$5oDsjrF<3}tjNJgM~&OZiM zFc+gpQNi-`>C@Gf#ostyxSL&)wxm3p7M#5T`;L&YQpFuCJ9kFPdF0r&XR4~I<{xaR ztBX8*?Qg)geG-o%npq{R`+t!i$9sdq!@_#XeHHfZ{o0vthXsE4jr|(-dKSUC`>O$VbnO+s`^lAPR=B*f57T7uNKqs%>*HFzXgYz zf}o}+3fA9x_wv}o%bj`rhYv>;y++x^aT34SVBcMsJ>*1XHuU31p+jF85FdZ@+(7kX zV6XVUE??#K^;>+F7m!XIP@6w|_;4!g%ti)=66c?K*v5=cm%9qafVwBU)T|a+4tq+l zc;JMqs?rqAk7kwE$SkcaFOqgJMTD;>{BoraZ%hVG8rZyb`@>I2oq4ZbS@7^w)zr|_ z(WxCj9@+=U;0exj{^R}6#|?@2e{4)K_z9|ky1M#U*XvVm8n!15449ai3%nQqhK4f9 z)Zf2h|%Kj!E1*)_fl?@3V-ArRf%(fPesO8}7U@`fyjV zOWKVaR2>IIMMXI{EM`Vpg{&BgZMq6BIUY*U4+{%>uuCd4HC3aBKPBwetqr>Oxz{j{&4UlX}CBENQbt-@T{K-E|h7HNde3MRnW!_h3Hxm`c-NM9v z!p{!HLCXD4zrVjf5Gk2TfB*Pke0+RpXb49ErzVhD*b{K+=K5{PchXJrZKsCn?Rhp7 zS65aJkW%#Xb{QM*R`6MB(NRc|<*DB(=l%!L(HJSiWp@wJ`4^a3(B~Z>nD5H`o$l$$ z$&eOl1qJg1ei6ryPB2gqez#u`gsSkFQfYuL^~bzoVq$vNv?3xR*baL-S3TNG>d(1Q zyIbBXIfada&YuJLHqL#p2>TMaLo`)#kJjYu?CS6GRphcN)181;o4BXAI&r`Uzz@?pPxkcXO&&fy{WhNOz@NW`FZ@2DL`dJTm3Pj*BiMI z7)JL7ij()!T(?DYbWxkM*Q0dk0v_&k8jDK!bBaIxrnnx5~o6RJtTH0T_ zgsdhRvzeQR=Y&+2X;F?tpSD+zy4Zyt+(E4r~tX3B; zxGXQYbXG;0mALXdrUO*{eIKeoaLCC;9xC?xOGgO$QxI1+9%CSkmwgYpjKqIEuJ{c# zGw*J?FPA@_CTATCh}=3%t-A~8bFemC@QZu>Gs&6X>%tm`W2CR1gBW8ufOB!{)~)>A z5s{I{&GfWZ2x26}*4%sMWSU_{RXxDq#QYNQxQ}r!7F8RIYWaXTN>RZ)H2w7niXZFq z=g(U_8F1QCc!d2r(@l#)+BP12g790vjhBguDH$Q!RqngmZtg2QZ+hm8&!7IcCYxXU zT@~BE|3^>B>+~n64y3*>$Zc`sJ-HWkw6r$fM#x;D-@)LQnkq2j>}bG8eA&vxq|zg? ze?PGH?a04Jj~*pyU0007;@Q5;%JPNGLDQblP+c9odLtuY!^Vv|QHNRqr>ci=P17Y%Me*y32jd+nVL@p$BkC z&wmOkDlCiu&nqc0FLqXMu>RHDtY*o0C z?DL=8<#sDEk~i4JXj8tF0ZQ0FUi=e!^1|X)tLpoF79Vij#i5b1|Ds!zhtFomXIG7w zHhiBr=x`Xef{;u2AU)ZMDtQ=xFUgi*a6y_8*^LUTlocu=xHVaEF4& zq)Nv8t9M;p&zE@Z`^wC;YwzFRF!E~8JdNVz%Odkd$o~Vwg@uJU9^gC~CixoG_wj*; z$sfo{G~pIxvR+)56)`PT44hk7$O&0b*dPk&<&~1t)7hjhn|gQ@73(*bLVh}EOS;Q( z7w{@6KEBHK$)iV#K9JKw6z;|$5f5CHm6ff&(-@tU||2;jw z?^oCB-_WgIU+Ox_SP5_pwT(Lf^3Gqtgqg*5cEYb>@Zdot8{es+ja@7hehps(R;9dm9XtL^BA_^NLn|;zvFljsS1+ckh@|Sr z`^vo+4JVGIr>7ru=w;ivGr26?DBF9{)%H^Wpai7dmPG0cJt!+HC~K{qg5xyUgZVin1!CGb&0-EP2)4$B*^(^g{fjS_s0x--$*MWgCF- z=~XJK8#t=+FFpQ;u%mhk1 zuv#!FY*y?HL1#pJz4KdKvze)BO-+sU1O&EVu46eNTZtch1?Eai3Z#HxYn<{bS64j% zwcxrY63H3h9+#tc8mh8d)b+})u9Ct+qxUvxM^sgB-MMq;iH}*`_zK93{XUwJe9swM z8ejEE_fnwYoG4M!I)#$mxxQgxhYu6UPd@&mGG(zP8Y&39)8-e;p1$_SW$nDL0cC)i*2s;(X`>p_m zhA;z7oa13>iooiF!wNR*2{G$DJ)qj~eLX>Q*n7diw)EJ;-K-7NgfkmG!4no9{y3^< zm(*pi@opJ(0_N`+85?JyLa<N&mS;mYH&nH=QmI(>drk0pVgIRq=OG^qx;vJBw<(T`jbz*EOz^y zId4fQhQAKCo@$rF*_sExo%|mV$FSGABF!tv4mwdbMctNIzpU44% zW+*-FW}YV{4MVu>?(Rm`LD-i7R{<8GByiqn2(yY8l#1G`dos0FV`5^=&CG;dPNA!^bpFDOjJBp`nw`nBu*gU`$AK!8`_rep z5RS%D_3Jk8wui8n5g3qjt7G*J2i=}Md+IN~yUH1ScZ`Yj;memfY<|w|-z}x?6UuLI zK^h>W1CP)sf)=KmnU1dNo0=CqcPG2fJVmbxQ5Ss^@C?hS6r97s6>j^*) zP(gbL>&(a*yX6rMsFFzCPZByKq zih_cIoR38Z_ASH*xBAAOczM)COH&_&{7=19U#ahEZ*?`lynGqZnSQ$Lycaf1MS3}R2S_zq?DT$D6HG@UW!CvesxqoYOaMBC{JeSLl7smjf} z4jy0023yhlj;xDM;nL95^!D~9Cn=XvSL8$-Mwtf+XdetzZ}U%cAfoZ}c#o_JBaNTI z%;HAB$};aoHg@*yHpV6Gk zENT`0;GpY$zkK;JQb-gv<@NG%U!>aCuV?F@OFfsc;Y_;#k>~8$uLz}E%6s3oN)bCD z4w>;00L02ij%?hpfypK^G;|uWQkpDTO>^njpy0R&-7hfE-#0`u1?d9(13ipTd)A#h z(Sqa^5z$_`d6_d<&9ISTT)~|=@Br)o`{$s*soS!G-iJq zZ`+>9erar1kOed0z9g#oW)GF33CI$eDw>y{vD3^pLY)Ju?oKxr-^dLqHC7<9PWNj0PSnUBollch!+wN>MHxk1A2CY_O&;WvF(c;fXSbh$c!Y%x9 zF9n2XJ@m|+Q&iLejJ9~H9(-=$`ZgLxv?|Y@eUbi#O_X5Tw>2PMWWE=h7#qtm*kF9} zqzedDY;3HES#iYErxWvDva%)k>v-2|oi^tqpgO)w6UQJSK0A1+W_aqkq}@Tt=0G6T z=3i$j1Gd#%PBW@WeENV(yW&H30uF$~;IAc9m>b zuu(EBL&L+lQL(m>vTi~1trPC0$Rs=syiD{s*dj^4$sKKUoV8>}0G^=;>X8d5m^!d>q zpE;$sF;@UjZr-FWn4-Dt0X~UfAnn=d<~ECh^D2si_#vUqMC4l4hs=bxqTMp~%iv{t z`tcFPFHrXQt`=Z*!S$Q9FWB1JT3f3zXrl^qFscQalzGXxgx|VFbBU7+xfHE~)alW- zNb)f&-$zSJ3(lJt+yS%#QG+b>`(!bdcS8cT={t;vmCkxwna#IF~(#H^Tad&U6J>q3GEU zGek17u&8Ta>mM8Qo*g#}Rx{AmCG)9~&2>089Sux`^NvLtMIg9HWBG95(;r>^UBaTG z4m^pJ<`_DEqwI6HEPtLmeE1DymlM10+`0u} zI-pZpTwK3eG;AXZEHF4}3E~Inz(;!=@WIhh!C_kT`89(DMT~Q9%5igZ#{;o-SmET8 z#G$@jLz6Y65vd#ktz|6^Wq-c~cIzNEA*Z=-_k?!>b*swrnE?`NsJeHPIyZm%$G*W%c|GvhrTAZRr3MV93A7#z^Sctl6n4 zyQWx*vA~?yugjf(hHTxJm7I+8o;$#e9R9NRSo87c2en3K#ksj}cK$+qohw+sapOr& zDZ|jPFzAvGpOs#}uH@{Tm;M)t2DMhNT%3Lr!Ld(yaKhbj{4dnOgfkzSn?n|Q6@-N! z{MCKLaTk=y>$8-SxN`x)82AA^J7giN+S1nc*^?(9UCSzXC$*p!h|Y|g3tj5|jO6mA zW*d;|B25Jj4L84qYH3CsN zBQ=$?3-$7dZAjiJ>d2F3W?J%w`^LJ9^jA*g`1B@fN12RnhbmfqW)Vanyf4CwUQKoM z0(bsCJ;-@>^(s@&MFgLS$YrwZy=NCMnXs*1h}Cb1J}fvd_Nt&j1ReRY3oEOcE;@xo zY_EkcYZC&*xTLPWzAN7@soHWxZRL0n1VhxbVKC5vEM}ov&@R{UZgocLho59UCb^w9 z*kv#ao2anA1};96QXeWUE(p+JohFGWzTY-`n}7d)-I3Xtzr0GRAPZ#>Iymm4(`p4x z*gQl?iScGs6#I;^qpj@-uz5s%-r!=EEIPs3QHMUTofRdsJe0)L@ld}T@E*u~eg{Dr zaQ}FZAR`@&Al7%9ItjvhLlOgl+Y1tXsM_-4$hwkMo3`|)=;F>KzKD;vgwF(<3%Uta zZ6Z9{t2%@yq~qm{8#e|Uoz)pDf#9sS$j88JVqiOf<5x$8sD~c6oKR%b3+f1heDndt zOE^iA+NiXS9|vh^xZhq(S%E9&-c~d@zl1YX?EtSqjj50aiVrDfT}q#?a<(3|L^>ik zzpRf7`zd_rkV(cov91Sp7)i-6j=KnZ8d}=szc3L&zdykRaPRW;3=0t}VkAPqYXZ(` zIYw>|^FB@~dGzR!)av8s&lf?DM@B|A?~w=Ccm3I{+MI}vKk5zSU6gL`<%N9zi`r^x zkEXwTotn?FQ{l}&<=iY)8e+3 z`sOol1 zB`jYYmp#D89QgkI`x4hNPxxk3wH^B_D5}??cW>h0giH#`uE}tqq!u#zbLNRZf4=0| zJm#E#W!GEkk$2GsN?l&H)SyKsh3V*#SyU}_OVs5>jb6pJX(B~6aUu}oh4q_2fN%!& zxFDgg+r-9^L`|dpb;2FjZ20O%+oy+ncxpA0Wd-~1f)U=mOIJM%g{}E7>OCa60A|ZF zK+C3`PZ$W9WnVh~WSy*IK%UUnw?j4D$jr=4OHFP6<<*O}_thnhkR?f-(mXsouzWH9 z>MK_eK44WBfj4zAI*#vDIY_qB`6gb1AvbHwxU{A)27iW(j$G$kBn}b*rcm4I{=FOYvs1^LpqA)s# z<{zXR$9rz`=fd2CReGESY{ zB%J^1)uZCX6fiG5Cx4Znlm2h}w`UYov`bLt>4VnI4ThVe zX=R7A?sAbP-O15$a%yT@fQsIoo$QC4?=rK`4}2D`XV=qz(29NNEuYJE6|l57Q8b9@L8{&e&7G@`wB*I`dY? z!ouS61n%TYNIiW$qkWlU3BQ6-+}kEXUF^$c#vJ^Oh_ z#;aO>04ccJ9}aDm7nK*6w@6?32|taiX+_7F$%tC z%6+_h8e^V4TUc4XW}-VdTbMpK{j&widc;+8b90);M^RB3m4u%tPPQ;Pnl#@AeHV~| zh&k96r7L*k$oof+7z=WBqhG${k`XbN*VL>PJO43Rc2B?1bwx#yJ=$^gRU3#{4|`^! zSe!EAXxsaKvQX(gqBzu(1k^0EKE<%)%2$6&9%_Nz50k12>DCYBdMI-_5Jp~9U_N^i zPDLl`jcHT>Yv)l+n0)H%i#e1PZr~-qx->t9{cAd|QK1ApiJtDuqwaFi{zn1`f^_F4 zjUs@0SDwwwYDL*YjmZ$gmB&qwC7a1F9uQ&)sXp0TKE zXw=|j+q_+vpry4&QXQsqK~uKIy?r^gQ|PMmB== z8kbc4ln(<+8=WA?C`9ZATqXBnl&GkPk%?V9W5o_01Y*off9eD?!mOVku`!7{auN-9 zB-IxGh?PA=ps7oxme4(a+B3V}U)M_>!U3BhE#VFkY$cbXGXXUQ3G$rlPcrlV_94(%eSP6~NL6`P zFC(46EqRgbYT0T><7fDgSea=zN5@;|@3Fo-8+~w2E>6y85;l6D#M`fKfNP@>r7N>m zM&=vTJUw3v7@`vTS>iK^*iK5tkzElBC;YApK^Vu;KpL~OBqg5!2G|$KPjPJj@G5kh z`za~>WLJ!Cb{mb_wPVEZFWKkO_{sa6>^9yVydlV7U<1Hfj%(}Hn!f-iEu2`rneP+g zGqi!07cR7tTN;fOzgAzu(D88h;d7a9;pEA9r%5ECwFr}lzOOXw2k`G!FNlrMj&O>J zO_0}!V`!Cv2Galkp$j*(vm4A3y$@#O#-%xDlg=7QJ&y;jm^DXLvt`u*cal@}Z1mMvnqV)$6z zc+KnSr%({D+G*6ZDJlj(t)g-X^6@>&mjW7VidD*w9+(<#%y9+eR&UE}YHETiT<$gB zj3zc#8ok*A5)$zT=g@BeXR|rRuScM<2Q4s&gARvM(yoov8NFR^UoKYtrT-o1-cLMq z8h=IRIu6#LByXkujOPOFH#fXOQ~t}BFTe{x@tKfCW%8tWd2cggF&}bnzR{j;%vF?$ zqXY4m(wy;?1KQG`g4nsp!pl~6cC&ES-6IcDQ&XFobWN@RMb)h%Yi^n*Cag+~WC|*& z#76klWa|^yHHB+`kGGu>*+Iac;`kT(seoe$BG|ZO0fwjz5CyR?!GcL;@OACo`yx5{ zZo!qEPQmGrS5QUs+q|?RrT5P7KUaCzWLItiF1s%Fo3H407DD&L38jX2D$m~l^It`W z14uoj9=ZikTVg^&$CodUEvdqoD20 z@&$qc!w!)=yY`?Dp?KpYwMjk9(3`Za0eo#;% zxmVo4*7F%~#l)%W&9&D9zIV_A7B4^AAB+3b-*KR&rA5|fsqowP&o6r6h2s-$Ms6LV zVwh}qS5)*%pSPqSNY|q%$^N3px#6`A1kTol`fm>Q_UTo5edn^J_wH31$%NZ!s2bo3 zz~Q6)@#msH(Al7Yd2#UqN^?kKex|@iBGx2QkVwzSC@R&6L-8YNvjP#rqj(A;h3#SV zR{TjPsCjvL(NnE+N8=rxM{(_I23{j1eyiuWLJ5lg zpP8A2P2Y|4thWeA#hxqs2G{~Kl~6_poC%16V~mvuEzjv6FN&5Rcp4FWWtrPf57j+A z5{T-%4;{O=GwkS03QLkr!(AO6V&6l`8IO}{ks#sd3hy|&V$ThM417C8!Qkc52dse9 zksnR>Th;9ZdwzhUU#&2J41r<`EBaxl9b+zDP!N&2*8Bfx%h+{kuWiaIHRLATIhPdD zX$@P~B?}A1UCCOxU<9bV+o;c4TNj@Hv}xX);Z-JDdQj0}W8&mmSy{n3vJ&Iz=de1Z zhz53NR}T`Yx$klq2OZR!YBo3=pH&u7`YkS7FHZkF!k*d%u^wFYB#M>=gN0k+sz6|jK7ZBe~;b^L*RgapO(h}}H(|QU^G(2}ryh#p($Kjzi@TloZ0=vAswp&#M;#=b#STR8!DmY(cQvcDI7$ef^s zrTJWF*Bt=GLpbgUXGTH02865D?vfpdz-Qtc%~a&ipFal%rm-K@)zuolf)c;519=LW zFiq*5K2vz*x@klQ^j{rp86x^K^nW7^5X;%DmLah57h6 z_KpAQeIuI@(+uG{q6k(j)cQx;C@~qMzrAnQ45zuS8gprjQr?+PD4wg+Keu(MQ|v%w zeSWgI3}adKn}5x3Zr^+N0t1bYZzr6Y88AVTZxVvGH@eb8`g-pGK&{Kap_2%4V;ZLE zlri!FccI;jfRJ%p-AbzVfSR_rH1DLogoRL8`a|WhN5*%>E8D2_+z0xRd3JX8EVGiM z%o~tER>+@vFAlCB6X#jct5ZW-CdXm{ZFe9o|HV`dc#qyE8|UA>hv5y1kH2}aARa*) z@)9*ZrhsL3fzSLYvs9YHST*sL1Zu8FI!YdE2|--LO8cH-ZVkm z1!3S$65!{TK~_vl6D*RFmM&~-4rXvJB|sIo&GeBze&mHSV=UgUBvB_ud-?iRC#T19 z#_n@}_R91mrKJ1>hWq52NW{K0;v=eLbRyR5kPn+zmS@d}wxJEOj1mFw!k^cDK4hl} z&;YVggy2ziY8o2&Guu30fR8ubUWZ!SL^}slQAT3oQ6c6)70warTU&wRaWmUHE~v(V z*x(3^tjeeKLV&XAafE;k=VW)rX(`*tPv0>ZR8m@M>PW(7+B}Yfg&zX)qwOTb?FF;o zf&t2yMmJ~Ycpu17!pKZ~Hjxn#))y|QUdlq7uD`ztSg&*ODf$xDA9~7-UNiV%0%v4F z3ptZ)j+5o@&y#ZKZHk^llQj4@H=JwmDw>+Ib=gq*jh}l#JQ6oDG<4h4ARr{Pfu3G3 zZrc@D1aRN6bGP)MMF?*dnvr)TTh^??3SPeksw_bxe`fZG6F4&jQh{Mv@{L%z4 znk2h4$EyRW=ZK(N;Da=794O$0Q<4p1m6SXw+{Zf8)Ir&gCJ#wU z8+8=!u8Xq#O_Vr7IaU;|E-v2FKelwOr}Wc4|AL6s%2syy(X_XISlkdV`C_Xi*Wy^j7?2Wf(Vnc%oXhH?9hfrlLxP( zrlq}o>y}takzES9B`_X?Xw<)Z=l|*Z&(Tq=n%w^V`+0efw(W%ii5;7sn6T-{NkBTl zmbkba#-tKw_%#4lAak_!&t15Xkd$=M%Bl@2F_b6u-Z%Trz|TO~wY9aeA5blj%VsAh zO-fuZnV38aG2eg9IhRm_R`WonqsVDrm-_WKK0(1n)QmT!r9#jj@83ruM=k3p#eC3c&n=#1NYPx+WCi2nkGU=%q5&9&LwW5QoS6bedaQ80hIyHQ|AV z(bN)#?2!=xmc1|;oGuWjnLCG@id68GS7Jm_fS2~HEW6g++{8=V1sohK#yOVjFYQNr z&F|oWrav>_AR?pVeP}Y{-B}xs-GcE27MA#auUPnJ0Rd5qUiL1-&3_r(O(+p|t5|_& z(Qi!}=m{7Io2}r(c(%Vp-CU!kO9QcN&A#TUetD z0UC>tRGn9rJURz*aTT3NVg%_jase89c?AVlA}NNA_E=rS`9NYu#wBNG374-5c;=;~ zpGp@i8P-Fss6%0;i|y_0Fc-YK4JEs#H@5w02Fr}h5(#l)WO zKTFy56PL~K2kks(6C0b9tSp#_53=AdWbM=VxOxWsEpiwzLvs9BS?TrpItmwg^AOZ+ z8K=|I(pp2K7f?(ub>s{JqS)`FBr4<|lu@`(4g`=2(LDmG;1#Dp^I4gXDTqaU2yJIe zu;5_~W6rn~w4nTyuPkUz%0RiDpsKB@0fI-)^RBi6okn{rV_}KJi%uP8DUkJ$C=Ole zC&(B5>bR2wfoV$AyM*z{KYyB9TBdKt6XYIKoIIV|)vGeNN}L$nb1Pt{p{Xf4Sm}hR*lhG zm(hy8dFKx7AYmUuNtb|LFdFd4YaB=j`L+DVACSBaJNH+hp!D=C!_y7^Y+H3=rr2fl z=<*$e#`^j<6ptinbP;Q~Jc%c?#E(LlZXiUw&{aDMYp=L<69==t-s=msPjGz?yCdP> z43B=>*7g_gCZMG;0~^8CL+P6u+%eYgh|nf&fhrOANgxtBb+K(^4(OL=(zkkW*^jB&RV8@CfU5oqCs7i*qA z!$aj)0P{B60m~}%TC1yIuSnsd7-6}txE~)0eOd1Y(uQ4kq1b7Dbk28JCllZg31wH3 z-qBeQP4H@_0>s189TE&l5W;E<)=psGzI_}V{h&yBbK#p-Y0#`bcI1X13>OI>qcHCU zU+iNl;)hVS5ki7##PkVRjr_I0=`UXF4Kz+^gqI$TstC7Lt!EM}2Q29X$)D_oPp&|a zS$xLu5$M0x<<5={h=ot#dWi^mhT)LScrL0NV0+ygK%%THN!T{{f(E4sjQS|{kSQ&s zSI3s_ZaD#g8o)hV>E3<&E+SSz`-%~G=?9UN4VP}BZ#whm&%b83D*D=(>M{uC#bMGp za-Oh!Ls5ZS*G&U+6@q)GTS7uY?%H4ba1k>E``|cw186LO%@`la;Eu!&$;mOvz(oH6 zlQdPbDrB( zgV>}>Q4KIgTRenVw{NN3MNC7mslNtU0c0Hg&gv@I0K<%^0`<{b+qQKps?+vu+a5!g zoV$*yPyct-7>5$^I`-=qTw4(H>HL4RBsC&K@mxdQ`#L(BrZR+kV8=4Y?j{5BtgPRV zX{xG#*>R+CLd{i#n0?XcL3u^aZ>Xv9MAa}c>BMr=)6<8_eyzAp1;l^GE*DloJZZ|k z6ey{hoa#w|Wn{~EHtHABWKF`XDyqWBAb~;42cK0a{>)9BPq~U&`PfaA*Da=hd?xX) zk`E6wbkMWW(a|YBI{!yYr) zcC2|y6|*YaZ3=vrJ+Hr6D8XUdK}G&v0LA^V1R<^;zXd!EU+TuZxA7;aX}_-i|<`Y|dWx(+<8VpMRgtinh z0o9W<@pczMv>;~$vB|u1W$r!zzmIBkI5g-oC^OK;NY(zBlY@tbCkDes=<8yP0)j@{ z;gc>$aK03+Etq35Fg?P=#!ZfpFj>GSW|!&qoivN9Y9H-3vL6a%<-W5DC9B-m_ma5+ z1*$#q;yNV&1)1fae0uj!3#tE6M#+mg<_Cdk-J(ld7Iq z%-`W7M-X%yohd?0h<`5Yw8ds3Ru&TuzlMiTtxcguzMQK|!W|=-#UBmYeORMc3H z1&sgr=AYR?IAe0GK0!15OG8}Q3++TwsmIj9#I;>(3ph^6fpJY1332h!&oA$oWT8O0 zU<_}|?%mp#p}(Eb$$BF45(!&IM#i=wkb{oQ;vCz!9&i57s})D$_M;Gy>u<#c48)Se zw&$%Vpn3A~5WM0bhX!}&Bgi3>0?JyL?4LHeAcp9Dh- zcg)Pp%)a9hisJ~A#_HV{rhaPuJGi0U%GUuI=B*Q-2i5$Vj0|RJ@-J# z(6=)8-Mo2o{qe2q2tp$eu1h)hR|8X<6_#Eh`@#oWRMy=0fR_B*WF3+o0m8QbM#xVt z@-GNKRa<@n;7&PET3UK~q*aq0>5=^SkWxk<4;MNOZxWWi`b`Brs!2QS9fEns32%xk zW1W&C0wG)R#UujdjO1SvUi_*IM6lX4CQD{8#tH?er^g%JrMeQY02E!5c*tIe<23ze zYfq1*zo$)g2qP63>(S*xvM9d#{V1G7$x1JDt?lei>*^|QynW}+Ll*JG@uIbBQe@|! zrsaSl?>ei)sG_X=4$#t?Z0l|rUxBECZ!;JP;aq#~tM7XKXW1< zw_(nRQ+(|ix-z%u{m}E#eBe9x=X$ZRk&!zJpKWDB!)0&;MDez?nyprQ+ z^Y`F@IGjAWT`~tP6u8)(QG4)+HKE^5K#~e(-MncNuL8ax0T?2xxV^R21q{pO-`6@2 z2AVG@E#UYe4@sZSu~gU9Wn=+y9Y#yHN(+(+pume+G6N%sBtD6a$+~>@?U@*7%fe_Z zdcmMGNKKGUl@7YEuDpT69*Ky>xXf!FiJ>)EZ0&`7S}&vsge3S#+CVPep(BR}-Wm=@ zYHDiT-z(l;UWOSa37slyyBIspWJY(NgAN`z$1rnz83!%~TtEy)Mi^}{6uG%09a0lq z=+Nd;b(q&aVPuGb-VgRHcx&OyIHLXh%p1=r1>fGzPLu6LYj5j!kDo-N76+F&QYFMk z$pZ(@jY~>NVeh@6o&4vEO{7QhjVF(Q1}5AsYybSY0uuz_*P%1Wl;pQJOp+oH8fWrt!v@~NL_IV8V^GE3{uewV zf%ooJsgcFykPy5gwCvw<@M+Cc_IKo7%*@PGesN{u+Xq0pC#^#A^1W#1CMMp#k40Bi zQQ;$(3p|n;21^KxCTE5zPW!(4zFq`!x(Ag0}zOMW@+vbHRWHX3CV7)*k& zAOdH*{XzRL`{m@kFjuCx3*$6o{d!?*MPJ`4I5^sZYo9QpTus@JDHM!nyg2#{GviTF zmn=BE&wR#b=;A9Xo<0R)sIp!A#sI=L&T>aAa$GYf76$hJN3Ff@-`^-UhUoy5r90t& zu7a5$J1A+P_HB2F2@g;D|NaGF5-BF`DCj!st!2K{fdg^)GMDR);cJPJNZ>anVCMxw zM-h=kRzl%I2E&w1a7(m|7UL7@wdXaJ9ulTbEClT%8(q3#)0hLQPDx3j6(QFng5Vx( zr_jZG);wh5xe zd1{lZKKYSCTA}R+!N&|MR5vib)Wx{9KX8P3_7RvwbH*5ltnBF=8*6KK3`xODpGGdf zcyQdoGnVjOQ3E~YWo0XH=Ul*V^!a6gIG~3!2pCd!D$_xg{OU`9{MOWYa<7#|Jg!%y?Ty*vRl0~ zFM#7NB%Ec;!-cjSz{m>+os-iPjA$tX&1;tsE4`hGz*l4#LH^>Jj_!w*S;$vN$a^4HVcFc+JlTRQV8x0zSi|*5Qc|Piay1o&`=4?AmeLx ztgWS?Ey_3z>COW7W*eEp3ClI${&!T7{A$HV3P#dFt z2R0_qy7-o)gL)^0l>SN)?`uvD6s%CRhmq)ta-Wb#*0uW=4pm%k@htgmMAFx_RQlcN zxV%38#)$lS+K%Bw+M4AF|DP@dX{ELHb8oe;N`NPn0J;oWI)D z74tv@Ok~EpM5N4C3JK`aF$2x>eG}LSG;ot~v)VEFDbtgMl>e;(Y)%Yx8&XD^n&Lht zqy`8%sp&~=xMT9ghQpwmffAC2mwf)JKgWfB2%x&qaM;32-)^IrZB0m75hGby-Ns#@ zV-h4o8=HQj|9hvLLlqjZajGb#TM4u`z}*DP+2MynJR`0FM~N{AHJ9`4|8$(r3|YYDC{n{%pp6$@9YhhMbp|;E-o6JQ-5}o$BwB7I>jc0=Tj3D(qbdxr+|M2VMV| zjX!d^=TBC@8Ky;Jc#Q+#5r-G2!Tz%#+ccbaX`5Aq?wh#PGx1Ho|rM6yMM1Az0dgjuob5xs3bt_qD<7`%|b7iBTkMgHveH z``@c#hhNhJ*a#+)9y8KbPe%hRLvue!kVibd_P|2r?=(Ss2IhJqF2v0GXf zFZlTc3CKumSlw0YUxBf6;Shm$rVb__bK@o8F0u~~^3h=aT4(`AX27>7UMu>=57^066_YMY(bZQg{~nqA6-NBi`7OuK=6Ob#hKXCr zpxoP-f6uf<1HMn)n@PZ(TfmASX2{g!-hTaeNdamvH4|fw<`eK}M}G)cqwi25D=z|j z3s@v7tCQUUs%bq`vCWmBf43j>vjXEmX`S{?NGVxJco%65>D4{r=LCh zP_$b-E~p2!A(XojSO z&HnPg^>bpw`M+{vt8jRWx`pjR3NDm~sma`qHjd79OZsQo&{zpr1t^((+B~9;e)2BR zsYa38aZVLOB;gJE7 z>j%FgsF%U0CgX+d%i&<|_4?oT@S-d`-wv)_Tf7%g|M}RG3{yD&y<%JyL-X%qiJw!? zwbGA*Q^d)L)s#Hd+8c+?)mZL0{)!-}^(Glcycu(6T1n)@2rI(uXoe^~Q92!hjc{Fx zvUZOUBc-$F^)KWTzxx8?j|d|q)TLO$VPuJ&v46GuwI}+V7L6HIhm^^%8uecqq06_8 z064jEjHs8q%)~FP14+0Yv{|K5CasDCDwKzh^%VcYhb~_*0`NYFVn0|v$KbBX)K7Mh z_-V%dcTNTv$XdhFkHCIn|7)bw#n~l*_!Hux9)CFR*0L9cbW%TEioeKSvb-Shns1-Z zl-O#M z>t9PS&;Vhr{*1S3qr!NKE7|r6OknF!u*@1@z zbgx}hyv13DRA*npz)k%NLf8ZTk8prUH3ao7T!}~5KIHFvWWnZ?K=*P+kQ($Kf6A=*7JY z`Ipgbf3pU%zCgqjP1x|Ek)s#U4|-_7|5NQ$KR1Bf(=ob0+XO+SrQgs>%e{>a3+orO z?sPCcKI46zIfW5G)y^uzzX>t(^W0yarf&LkP5*`w&ihtaFnth|meq(;t z*V`;el$eMv?n=1tWj{IIq@0)jhF$$RW<`Ft0I=M43FBwgu?u-2#2Pvz>i1pVSpA><|SBOQquelCmJyAUis@sMn2ZvS-M-z^G3+_22}hE zZuvsr$xN&&+$t8>&z;uL?<|&+MJ4X|F@Saqrwe`t_tAj%Zg)QWq+}#%x}7+Hib{Uw zwBkl7sDB*bF)Xtx5TaDhep%nI#}3tTPd^(lj%cR*P%?@Cswr>&O34-;s{35j5z>+( zo4ei$>c}C>dGP44?+uBct@UNAs*%f&%2q&>eWVJ?>f&X{tP2C7*9~ zMdfu^3`0MhHN76();ai%b-4=;)@@VlV%wD2=!5YY-@Kf)Qp@L*BOHdwA4Z0Wi0+*s zQXfk~JmszPH`}*IJo>p|;*|Tpx=%h<7s%>J zow>f&iYj6`+lGfKkXQ-5&96<8qMD>q$?EJDuD`na2TCkh+3|Aejjb-2-j{fhkepOo z+9a@gFIDYRR$m9!#P#UP>V-b zNlNkG<}(AxU0;+It~4SpoMFXb0jnItjY07BS;{4;FR>V+ncqDE*A8<}Zy@3Mt9Wc| z)y8r7&G{_q54@&KW*3_0JiFTrFfWzaOdu(`M9WRIj5|tt$ZO-~w1!2BckYzKMe#%w zWGITCmo}Xo-U}?>jxAyc1x5*QIn@j0MxE3u*;O#jZv{#~*Sarh2qQi$g~nQtuVy|+ zL@EH26=03!dusH!SW2ybt(8Hp^2x1rU>rP{?x&0L(Wr#eY?UQS5q8C+ zJ?bAypf4w&DF&!IED0D7im~u1LrE(`RzuBY$%Cr7^ir3|1+?SN=WoArY2oHd9i@w@ z{OM@MqVhWxakm_dvlW=^T_5RDOqy-7FDe7w%e8{(v14b)FoeQJ7hG2Bwz~DC(Z|LS zZKa0roRRP--Qb$hp;@19OcX4D{s^(oX;z{v+Ac7smrQ7vcm61|)?R@lF(fN%^kJuaj-CeH0huM>_Om2!x}6C7nQ-Vj zG&bpekAn4gBs)IItK-yIuR~g^)(@Tt*<4Dx2%i%tm`-*_^ZkBkR*3ERiIXHku{Yr- z&8#S&r3ni)EKp!%<~*17;TjgJio4gFQi&{4KLDc3e58#(iWpNg@p$UXg1!8t_Ba86B=1P^l%$G(z4!vy$6k=CL*w8rI%bLX6yhidoLfudSsH?59 zeLw%QYX6|Xz_WqY2|`MW;N9V<#VGtzlGDdR-zrS@aphDCgzdea_uv~GqR(l1C&uy? z(={}8)OSmIHO?0NYzQd|umDSd+ixiXpM*Z))is6q+}k+LI9_9>_kwxN1Sp$_Eahl1 z^jdeUZ|!0a`&-W$o7L`v%q6XHqDj?@ljl&y&&1oFVAeLssB1XfYt~86SL9h{H=~K$ z^fS_A+9MDoj^zmrWIVEtLKbUfc3XZgNQ<7qFFk= z`^fvBIoOz3+a9;jxV(U8W{g*Q5g-Ex2Hh zo)!HKZe&p|;_GyEin_t1ZL!$%^-NTYI?wO(~0!IV8WD;mMtmg2zROl0^i9BXh=x43; zLD~NOwRdN2&duM$CgrX_kqg%ELzaIq>ZY=E(v0pgzKIMQQdbp{I?eCwVom;xIgMy6 zkBYQxX5@=_LMnVh0&=+HmipSfL6m5UZkTXNJ&gm+Mm&by+vDCzO2+G&V*^%?d^v?J zU=*{iYu_W@B6jGx$@#W-{S48di=fM6dEC>AW08%2%)~Y@4(|teR*u0Wcf%wo#-RsO z4xG~ozj~W|;8Y~@ce@GaDQ!EQZ~Egvf|i3+PXX&@W$5j*%IPj++J*1xORK{qgee{~ z>Knxy3hRe%#GtM zmD_ctSjdcf-a!BL3-nn=lsaUw&Z1RGO^ zCw!@g57K3N3ZHNx-h{osS)-2v0O+PME?cfEeB;nu(^(=idb{O07`~FvpZZGGb3)pn zV+?hoh;_JcgwO#a<=HBqqyxG%>FIZC3V)kHQVv zp`$p>mGvSlm2R4?4vx(6w;!MmVc7fu#{V8)Ynn&p9kU?GoGE%6{shvZ+x*hfn=Q|x zNPK-n|JMdRD-hIc_0oA0{ecD7NL{WaCaLDJ)q+ctFn!<0(;5!>^WaU#IlO9+_C4;` z=wuo89h?vXIo}vL(~Z(!V95KROvnp-+^%W1&miJun*Y2(=rIzIjWo`X3P#ECsV+s{ zl0fAA!fP(pSRbLU%(Ju3@KB7CTMZ8?vtr?}&d=Tm_#vO!IW2IKKtrP4>w84IyYv|q zjny2-4HsALfMOSC)1kedOoV`sK0&e8j-W>8oCv!^*>SR1j8UK&0>PKgkVF=8fEHR7 zf~lB*DJ!OYrIOQun#&ar4HK&*G$m*{K3=Du9Jgxgsilw8Xjut-v8FvQUqe-4FCTD=N zEWqlm<4)qvYhyNX$Ko(H!qvCG!b7!4pOBmKe8ca1;zDrDWhxPU*bnDz94Gyt_BvE~ z4p6~+En4uXa4<(qRHXn^FyIwKP?;|UE>nNZ>xoZTJ4crs4b=I}B=AS~)YnBgO6X_1 zBBX6G8p>yG`0AuuGnMU$V-SXFD{LoU=D}oK02vm=&kz1h?UGdJ>ntvDkFC;@l62L_&=Qpzk&t_ur$(T5&>R-9>tkQ}sbtp~;Z{3!OzH(b9csUUHjr!-UU+-XDk_ zt(-Pv^CFl7JWIQOPK3Ewie6kFp#%xOi(avxf%=19Wu37@XN z=1vD~3^rr*(|CA)%HE8SNu$CBvO0&Nm%r)lg7DssxpLY*=3_ZKv7{~ zdG#mPvjsbSY2gUt|zjs!)x+55YUr7Dif z-RwL&U)pWaK5B^GxeW$>u5Q6LccGlKT1qQ($mv!i@)gur-)|!@+4X&Ek-n)$A$H_j z>Yv*)?cPvR+x>ezT+DmR55E7sHC9C%rSR}R0u}OEntS+VI#!{PnUtN69}@!mo;MWF zg;vCzvB!wOi?8R}77_{KmM+3rANEBQ1EIKwmg=rh0+ADeNuJh6n$a~cOp(6AJ@z#9 zv!ewkQTg#+o`rKqyAa})mxJyXrRcpUH#i2RsE=Wh`noLYR&U45?(>7!wF+oI=%Z-6 zQzb_6qUDDsa-IpXX-2GvLhvr!6kajFH~o1x_OvniNq~Qh2|KoG-WJG0zb7nBL(>G9 z7O!v>?Dnv|lhwDpwhO*E{8$b;x4R+Ir^xtZ>vduJ^**Rhx>dl_ocYV#t;U&a>H1ii1cC8XXEjdox9S>IKX1F)dyz2M^#vPI03xO7m zNe?<8>l@5fF{6Ci`rnRaR`>g9Lf?r`)&#}ppLEH?53_~ym{_o@h*)6x_)LMU zL=?8!n$Ti_766`}JLN&;CeGs-X(I08g?7BKK6@WnRcs^{k1~-Uiv_!BI18OYQ{L2O|12{c3UQiqh7e?+n3WM{LEuM`-H%+=sJbpag8$L z2jc7)7LoOnRWX&IS%sr?SK$gWPZgiv9yrF403Mk&-SM@snHyJi_i{3`0Jv>saE_NO zV}S(yady@WFveq{W>XBx*M;id{pwFB&=9ru5*iFR1EB)E^jf4T?ie(bD7mdZPBH8r zaER4jb#t+gR+RSbn?E#D)jvIF3>oYKa zLMmO{0M2zZge|o2*8H5-E(p;K%UG9KZ@> z@=UCeXO@!LOernj$@7evu`{5}1oI_70KL9FXA+27FpekwPgQoV1?TnMOA$RPV8z3x-f!5vDvPgvleO^mAwbi;L0}-U|#ZjDp~_fi|NPLD1@; zUKsoRL(gVM)W!W*-9SxumLbvA_d!N!Q7IUdZN-5m8!yAqJ8Z0<&mVvn!JQ#w_~WY4j0aay&1b z!Il*WYvCAe*ZB++@D1GnW5_(O)+GylG5BWGGe&!q%}E90UDX?r|IGp{)2gYo{fPui zO%|WCiDN~W47=)4YQq8_n|0LWH-tVt`t7K1-ffVe0mIqR?RS;i!;fC9K@f5b&X4%` zPy?fGsHg&M^} zT4%qciiwU=_9AWwju`=YcNg;0jJ@WXrtOm%)uJX_j4*5XA4@j>h!IcIqpB%)d`td{ zF#bjSg{e}ggcUXcBQRP-@dY$zSHpCV0!5gMvkbw)tnXSxs;Jxw1@}N*wnvSG;L7Zu z=)GmN#C+h@_oHpcDjjYnu86=+L__qd&Hmx~ul%ihSiRMXHq?PY-WvoZW{Q|mSNV1k zr}@;MUf3EoGlX%oMx8>*CB{&Q&DzWiMjSro)`d^MaA+Ab|0i=xxfb;aYo3Q3B~z$i zwG&$l#Yg()p76F-X&$r2B_VBT%5tW{#PzA5&E7$nf|Qx|n;tLI{So9n8^jRG1LN+G z*mUu4B^(DLdeLouX0Ej#IZRaeb3B~JgluANl%j}F6MM(WJi4-y-zKkuYN{?Bgfz|! zRH9+TNxH?(-=g}oq+Q`9DkrWJlS-RUaU(bIV;aSe`;`j0-}E&iO>o{lcb=RVw4eYm zq52?^YGH95io<+4t~jiBqThw@lV|1kYTVg2*~}D&rRrl)Wl`Kf!fB_-+?uKykd4uO z?liOh?ZWjlj`FSkd*coXU4;Ql61!I?c4Q$T0=Y58a8*r~fi3-Q_>fi6=6a47xvxfL zo-}u&A-i|VsEB}de&?ZLI&R_}_iz5JlOr$b@`AVK2Bz!PMWN@;CR=;{Gh@l_(EKe~ z5dm2AAF=vi{NwW*EETIg3!RC;_ox%pkCWvE+f+_zX{2U5zx!R>ak8Ygq6Mr9FQ?~T zYzuwu*=W%|=VS)^%v}ZB)Rxx)%6J-y6F~+YkF2Ic#*H~Q{$l5+nqsf6W9E8WJ9=Dc#`{I?4y)R$ z?M1`e(my5nu1=prgdx^_0F{9itm9fL><4%N7QO=)mo2~V^rh+tx%SIzgIJ-3-)SwQ zm^!}q0y*5!-YZ`#f$lM_-owb*WN8w6L!>w4%cUz(>Zg8#NbS{){8;Qa$ z>0+LD2NMmLjO0B+lMZ`|CQ^^U>A2~41auu`w zXfcNsm;9x{iw6{(xfp8FFn-Fl7^haP&`F+Wce;9Evcx$=xPUb5Q7^-7?d zEnzH6SWC2ZLfn(DUlp=wVUg%M|F~#m|L+X)77D6>D(>r)wW$O@(E5x@^Q^9%Ckm#>*#Gy&HBq5n>;7?0=3Qfcla7&eH$bjbDmSj z9m#Efpm;vMEj`qOe{t%GE@;Oq^Q4ooNGk3*AH~?9(-ou}s-c)L9oQU#M(A~h5NR4NV#VTHrln2xDLYkle*G^S3 zbR0*6a*H!(W7aCL?R+`OLXMO&B(W~WbYZ-Aqi;Bu@t&p8pNi`gf}P(c0seJcRgTGK zgxjcZ^;psRrTeb91+Vbn)qh3L{$+a8oG<*qMNskC$1Y1p{HGOx^KCHIRQYAn5Yc~h6M_6r|_pQ9%2q4vMa_B_XH;3&Mzn!9luU_oz+FdON}__Q#k z{xAl|GRaWj70#2j1ZAi0p3Y2&OH+e2D|*+Er|0&im$p>NiZNP3IU$LltikS1j0a}dx;;)@4nA2_WbX&@2oVU0 z7SgQ?^kF@goyXM!EE#qn#^QthHGa5yPq` zZryNDU-5a{P3f6+aqV99TABMT1oV((_~y}bbmEfzEk1}8nr>1qKoK(E7FgG)f`aV> zulLxvKnm?3sTkh0^W$Jlr|v{}&}1wxve2KfukUJXs$hJN;*hCG2t(z>o(K|msQ+FDA09DpWRpN(IkIXZx+HR1a5cm7UcYb`lUSJx>U)7QL z+$&Rscs~w!nVnOx9&gP!E@P6Ng={g`mV<5I;58%Re*^uYEE{fv&Mi)wz`;PX9dLn_ zByH(yX@hNe|9eRM2g#2;&hSGIP>zzMop|xvwscGS55jFv6FQSW?**rCnfbjF zlb|shKR&P!RAIJ9%kjmwFw>zc>dq`YO!k8<6@c8a@>v&Md$OvgD+5dZwAghDR4M}p z*TTKKm2ekAfMFzNiNyq!cBHm{>j5)%JOPH1!*LTd|$(iPOd`-TN6#i09JL^||af{3K z<98h8Oq@Ugvxi|-PI|I|J`TlGxLnR@a`-011AJ`^eB0-SnV*}JfH;_ZDX)Brt}0ik zVkz1+EMW2!5y~1!nfow83GJ6&m|eq&PcML_hnH+adm*492iW#{zB8~TK`+KpsOajW zzf(1&V?n!;{lPRS&a9VE| zA{fFQ+_LB8xq+EEywBTpS&j(@$d8Al_c|7?O6-0BJ(Tf`$-jwLgZ2KPiPM%*UE9HH z;Z_Yr>&;7q0hRTI$B#JZIa|4SzO5|zZ&Kb%E*peU^mMn{n7CXvM!$Ae1Af8+FxPYW zZb>fMWJ5{skZhv}U{XosG6}2u4njAr-0EC>mDSH55Bq?2>YCVkb~#&3 z|4&5cMiq~+7T@dY^*{~rpr@|ihrU6MuTZhEX{#;(Dzea~y<|L=Li5vzF3uE5g-d%( z&+VDp^vkTd47WUO6|*u^bL=h{@h(M}om)<lmn6updlVMZ84t6{(H1@+f=P!QJ>E!e?Ryq%`)*`81NL zky3eArYak0LZAt>t9gG}X`OH!v^&pRM%d_b64JWKw{G2A`aWqu!=1OSXv>3v_oh)- zzK&KHEN^NEBgAcZN{>U`voUdB395B7dURO&q>nBiIx8^N1_O;>i3He*eo~5|@pC_M z51u}g$9k*D@zTT6w++zvLSCQIj7E-9kbbo!mHDYXr?fZe{8~#?4qaMv4QMQ2A;$SiCVQO5`K!-Os_f_Ur zI^%VU7#qru!q76@+I7_$5LhxjHl;6{DkNzhN#y207Vq8S%9H$KA~q9&&VOJ^0zdtY zRV7P*lp!%m^Pg!2(?>t4^K*zv=tP&uK2O5gE=}y**<(Hz^dK^<-+8)V>!Rm&w+AAB zQ~ahNmxC_gZ*RYGd$qA?9~Rmt$i!^H;q_e?>I6izphJNA#OIY&Y`SFU`xwq7GFoy^ zI71(aae?X1$;7-Ft(kJ|tlI2b7C{uxU2}Q&nCKRia3qe^bV>IjT%$Lj^l^ubSPB#}S+ffT;G$jFXMN)^8vXq(81DmT4jG zXC#Bzk6kf1cA%d*siXm$fVl^yu*xI^;dbjw#8n2DzUmNy{k^{fy zEbM|uz!8*@Qj))jw8#LfwYst|*y!shpr>r+dl-6@-ce;TG(U%1Hj|IaPf3x1s^jes z1mv!o$_^3k!f6JmpVj{C9z;$t%$Y{DMH&ssHMibV3-i6~8izl5Gl!`xurzLGRN);! z2^}HyePcagrZ?D}ORPu%p$wFl5aT^@z7;}PMmiFP5C_7D=Y{$BBV_){Q15NMXRA*V zY@n_}PvO&<8&-Yft6f}mrxxsGMAVk?O9Q4#4}IY;mHoqHIZF6}u-*p9HrEo?=mKfJ z8n2-3dop{7{@~i}DBs#Eh16M@;C$!YzN9ub9(I|MA?PGi++M2Q*iB4n>?ec{P-t71 z`o^_@S7yL@J}b!_UHntMPo-+T?Wly44S_GbQGEn?F%D=yuMkEY%^sqPgpt#?f)PF2 zq9_6uyOFM9&9>k3XtO+Pxt2G@;OH)vDM6>-FJ`l{r0FXw~>m zKFnZw5gN4O==WU_&VSZ1_o_j0q}UQZK&8!J8yzm%?~VVsmB^#{tTW5affXLqgG4@I zKCC9|SZlVlPu_p_{A!UQ8hXu&kLNYg?u$0Z69i)31PX?LbWDE`Dx( zSR=S8Fcx-fvyKC_fedTZaA=t5skg|C`@tDMlq71v&(G2b`|?fw{AV;XX8 zgvQ%zfvQNd;)rTWVgbEY#5eT4Syg+u+1(rCC|>Hc-#Pit;a^_7n^w z-Wwizx~N3C`x~UfXga))HI=AFTg4em@A)!x-obXJ!JYAw{2cs|^w+d^UER>y;!VohRFa0!LhJ5Hh+?_L zV?Fgfr!+pHfFZsgpXov$eDewyJpMHg7y%|gLjLI8L?^Vm>$0TO3VR(n;HJhm;sNGD zf%A{belvb<@|p(c*UkJD&Znjb*<@(nR>mZDRr{7rnM$*bW5&jI|HoyQ&4r(rq(iwF zHT8G;VsxMrLv|!Aqj|b#aE{X_dg^)kAC>FDn|nS(Mh`qwTvLvZ7$nr z-@M$dD6lY*#vEMpHn82tD3Uofk^Fd8IPnAl3xX&^S2yl4xv%d=g*bN{xi@gh0< zH})BY>Z4gt=ktgsL011QKhCSE=TY{3i(D9SvXe)(Me$7|e-&@CvLScmeBOIruzjq- zR@1I{v>{i;(*bGsUV|Tfvry>Wa^#^vh`klZB~E8lDO|y-sk%_2`5&R2PY?wDN2*tq zCPh-ss~*gd>@p?o^PE+3>2Hi=E1QhJRzjQY*pJ)IB2NZQOsiKa;)Z3-wI8)uH~d_MbbMOg$L+e1${otLAxz4L^8EO`SUlZ>nuM zH{Dih;nzF!nk6f`>kq08d-Hi8JtV-#_0f|@F2scKxe+AzUn8i7yBW{0b`(kK2WK3i z-4$F3xbfGOlOsb+Bl&~LSyCp4-HkW1ZY}(!rBeHC<{Vxo(d$C<;z(65!}e(eJlqTx znZqOM(?lMmPfd9l<`s_R(PxVH-+~C|m-I{(-MzH81~xJ1WBrES+fnf@Y3o=>;RZNQ zrL=2aJ#LFnRAsz2qNc3+bzir!C%7vd5Jw`AqLN0Us&$q0XPY4$r{Oz9%*|zdZV346 z|2-!|Jj~uEOwXB)j%jZur)fpe%Eh0#5R1BE-x;`m3ibMd2N^5Fk)}ZZHu0(mir+9E zq5-DmCN8Q^P|t~_GIbctX>YptT6kUPqgpaQ-4mKH_WF2g%RWtbx$vZD5Uc3 zUl*@ztj*u!n7mbUlA78ljM_u*yvzg>0l!k~WppO#uBTK&->W+-tu)=s+MCmg6+>hK(#`vFjgxl-M3Fhe5Z(Ol z&z}Y=Z4+hgV-B)vut4ZsWl04bpwUtP+Xh4W$|^)Ic-bWck)N zyUxvcryZj}ozbl-15Q`909=>kwz%4_iMXqQxE`#sMZy?I%8v{9T6>~<|svHby zbdyLAA27Que@DCw-F!G)ooJyFPQC4kcilac{wz-ijbs8PoIqFux5gOBPB^WN*U^j0 ztBm&%BgPQYzWLURM;N_>qv7D82}51?&Y9 zD6E|q-95AKx|Vbyy1qzaD9V}fIs`f|)-S0=^fyCUr(eXeS;E0yAb{Q+2dugpNd71& ziOL)e9&kTFe(se_>6!po(U)){Xo$dbDp`dHV8se^0PLBFZ~8*BZHv5ukUZ_Y&_8rT zJ4cd@CD2La=H5ZUklq?gsix(KV~Db3RZhTZ=KF^u%-S}H1OYU^% zP?-N(K*)!vK+b56pP>YdI1jUXuceUWE6f*Td|BEIGRO->W*`&R2@ABDLp#tQ&Gl3E z(iudQH4uu2NlFTqutI~ren3h{FNBZ;F_`69nQgK zh?+qFRP*nt62CyHeqExUV`-_?a^^$NJ|3qWw61BmA(lyf8iaa!YHFVnW@s&>dofV) zN-kPzOrQZ5YIo3XZN6XZ^lk9Q>SntTM%ptMiL-kU)?fBDPLz=ymXW6Du+2*I>!en1gBlGiP z(W)(DqU4OVIW(9CyqTyMZUpshYMD`F>W`a(eH_`7 zOc+;ltu~TemX4r(eECa>xS+lyJ^8JbC3jRtz%!&Kjusp1dHRQyXPRt3fvzTi z^|^v3?HUm%+xyJFH2I8sCR44ru?X(U`LLal`JlYC^&rl>>8fQN*qIr)VBo#WUvCdS zl5}pG-u>DBmCypO*D5`{$l&8HVQJidJYGF>DHw6#6GavqW7zh4 zou`mGJ!nU83ZA0p8)xAu++CwXr@X}#pE3>4itTxRvj*3HMDm{MMJW4LZ~RbC^K zxivp3-%s=9IpK6GY>!P$?!lBt(6;zkSGIK;yJ~bhuKIYRjuvtNms|~5Ai453=WAs~ zz)^f1QRHkSzkwLaFpg!`QHFNMo=4J@|2SWZ1VcF~^w62Jw4lWKc@d)nFY!W3r&r%b zSj@Ub48LFqsFSrduWo2SS&hRfg=aV8%u&PwB%5?f9m99U703PfpparH$7L5&`I)Wu z3RMdVi^J9Z3=V7s+F@8~;T;>Ge3FLAptY?6ltMptXQNWnOD2 z0hu?<#E%t`)ShPzY;}Ev^`9@MQI$M(Z;}IDVk7zDU=OIHos8IEB*wQrVf;Qj+(r&* zLoCF0@kAkM3|kh9G+T0QaG9xt|4#%;EgYyRlG2u*-egZRb9B^-dY#|6XZY3%T@ z*Xh>SJ0dWeYAkGtzdG$U-ENj`tCS07bkCo5VA=a9=0WY+(rl&kp~{R1$|^PudMNwRzcXj58<%V>{sc6_*6R7pp*|Q zjQz%TtF$oHo_?KF|LUjw8;u8BcrAStH65z4zj|ea1!kri3UbPEHo>$p&UaA1voJ1g z*io|>QyA*SbBF52zbemI^i62~y06YEX|+BC^6(v@ls9!wHrl6|q9szk#lhD__ZogM zS?iywG~t1DnMSInR(hfl-i}N+XwmHQBpR-^Es9kEujL! z`dX~Fue3}VonWCvPY)>VplzMH?XIE8IK8~eZ=Ywvx8BPW>4yS&kdkX8b+JG+*qm1T zbQ77+mEQE!_=BAna)5t{;?CM<7d3yZm?t|IFWc!W&$4zQ!ac7Mwh>;#!e|J*sAJceoW9Hj9hTYYsi&y7U94T> z%euHv1j>|m?R|Zd+Z=`=$$!kgJbzojKN*Hgl$SYP!{k zHnSxi2Q$Shr+q~UIt``>TFgc<7DGQw_rKHXRCS{oMiQD$=rvT4>%Jx&FZ24s<-f~4m zckuL-j56T^%@)rI0dHR?j6X^%YSDgS_g0tNiausUSihF_+c8sbT6w;(1kEGT(rzYo z%U$`i4$1_mPPi6N(I%6>zS(R;D6QJ_l}=`G!%EB`jL^iz1P;nRJU_D*`b=>s5o&gyj+AnXP^=G!N`^pHGBEMJRGqw~>@<^M$mGT55DM zQ__~sLq{k}JiGo2A2AkxVMl3Ysk|GtW{qBwXN36s8BS{3umb|RX)ylW=zMBMN5ddt zXFZAx{a06kYVpw;yOq|aX`ee{l#M~># z(L&miyG$GD_eTwx-$j}#4Qf*Eo?7B}pSD%XY<1%q3`lb26W$hnr&Z07d=dXz6}Bgm zP@*zNO0~uc8;?PaC>WLg$J=0)0^>J$3d{&7c;hS-6#bcEej#|6n3(SF?%t0jm=CJR z!6+?klsDC~&;J826@e!;k#j0vY1*SwqQim5X87py?y(G7#z+o)Kb0?3%T+1TV2Edh zzI!PCO){s2N*+`c7Ci#!@sMcvbSi&$vAvpzg0GVO7D40eDkwjnURZ=F$FwJ+Kqr@$ z&PZ|W;lp#4D}B3iboBy!uKvDSTNo&4c}(aGz=C>xIOt3WBZ#$x_32etF3nA_j{PZg zZ}C`m7^MkjTKI(OR=)r}iX$`>!1Vjx|Mu@I0-QfP+0iQzfp~+i-|jzaLeZe9d|Gux96$I3863?aigI^2oaSsjVaHDVWv)z6g@=c z5xwO7%Hxd3C^dBCl|dde8j6}B!ZgkpGk5=;bH1Gq=ltYO{HWrn~ncNiowH#(IU@oRYF>bbomW3ePwk`MG)r1bl zpey6kGMMSI0*0X0b5_(QhdH?G0(VjRB7!ZrE{w-)}phge44*CRe_m<^8^61O=`l@mVqpwcQkRO)7scWOE+ zWUXjneQs{PRY#}R!9yr*g>Hk9O7g~WS9$NI3z`EZgaP9-12nlb#b;kgHrE$={!5|1TFHpnSmT19XPLEBBvWqOK105+pUP`;tBFcbUstd4& zde=AKA7`hl`i!5y+?*wEGUX}128oI>CUg1j0q)eo1he_=(~n!O%D}+R%=APh$ZY#Y zUTGU+09rMX?vZNku2UlS09gocF7gd zAr6CvGZdA{Q;kIU!m#<5gKD@8-YyL5np7}3+1ZA9Hr=;lo4HnV=_G75{;>-xwKU6p ziIVmKiIVQls5mG^NLizO8}aTHmfx~T{gpg7)c5QyOB0z6ESH-Hk!#pi?!HioKuv*I z`DZZnm7i>$A{veWiN?SLDkQmd@t;XKHv1pF)Oa-eHSI*Ig6`;L(>)h7-7}Eod%#o_oJ`V$7FYg6G}E2 zP0=iUI1nurQA${$^va`X;jdgS+544%?zx9<%5NBSZ3UFQX2~&9XSd0c4>Q+z(iimqQx-&XP{)m`hPr(NSNFxfREn zI(H>C<6CgADn5rU==}j`v;M_LS7`2xh)c5>p>sRx&gYk>`|QEI&C{Fi_frcu))*K4 zh0}Du&$1oE>xE+u?7IT+ zWGcH$`b4R&j`cuu3U&1j*X0gt8=uNr%WfZDoqWaq(&j5E&7;y*JB)0S(RZkdX|V^g z%bu@3h}Bk*m6d+izheE9Cp%bQe%e{3b?V3M`We>kZ&BjjJL$wp(hRwdGL}9j1%Piy z?eE~g)<8zPN*q=?ZOtqR$k-@sU4!sND#_nWv_wdl-UH$cmW)%C@BRxI0 zAeGcz_+O+O@`ZtK3Tk))OS3wQ5T;Ir+qW-tH^2k<%& zF95^{1V4~PA+#fxEf1IILVY9)QgDSj z5UyjI2Tafc;UmXlmUY@F>b3epb?8iwWTU3V9u zha*e~M_PG;G%=f7&r7QaiQ6S*s}V}V^+G_9wRS>|%I*teancIVADVjNQ@uPRTHOaF z`J!k=US<~~^u4OD%XRvROebU|vg8WosP(_@VrDn?VuqWTV?~rA;qK4GPj4S|$7r&p z)xxLl@V%Tow?ZnYUJ&+)fKpeiy2iAn{iGsFPqE1&s5O za9@K6@o?N5dENdXwVjq*AM&cLg4E^Gb;dP{EW9P0ujTi>p1c!z{H3y{bVChqCSrR~ z2+{+U+YP2t_^r7-Bbx)xlvM2npQA|j(ZLDI^YY`-9<84zm8@V(mJjh4 z(BT;(KJRj!%<7Wd3}f=kTXd+fse}`20SeC3^jPJMU6MMzqD?6)`NOc`L&mWyGFW13 z-4|!0zzGiJl@xzu)6swRKY=^Yu)F!jGHU(T-Msuqy)i<|%6b!0c%M)OcI)36DwQR8 za$k7I0KZZ)!2IUcx|t}3l7p>@-3$r}0*X!R+2xEWOPb@{b&eM7vFs&EmRf(G(%x4w zk8YF{g>gTQ;a`8yN0?bxDH6DUpM7i=oY1Qz@gzUjs}-DRT0lquXeQ{`85JCTdK@1s z$#BfWpL{>Dh_62ja>wt29@8jgPjgYyo)047fJ5dyBE7z9>7Zox4NX+i>ZT$Y(Ab@e z@p)I3sD9W*FtZcSxOUGdD*iukT%aEKL8jriF|JT`s3vl5=-Wq2CM8u6(mq_nRrECK zHuUV7qi;h`Aq>&5o7J$4$|f02sMi#r#c|!30QSL>N1%H1}y= z5yOYSzi`Nk5?vAeMHI=2$MY@~`mpqUN1O(|SQGk)?izls0fd1s7RGulyj!_A2`x71 z*{Xl{)W`NtalE^Y#wB!K=tO9ne?