From ad6f5ddf8375cd96afd783db2a7bb50d65f7d643 Mon Sep 17 00:00:00 2001 From: tomato6966 Date: Sun, 22 Dec 2024 15:38:24 +0100 Subject: [PATCH] Added future projections, and more insights as well as responsiveness --- README.md | 10 + docs/future-projection.png | Bin 0 -> 147330 bytes package-lock.json | 68 +++ package.json | 1 + src/components/FutureProjectionModal.tsx | 555 +++++++++++++++++++++ src/components/InvestmentForm.tsx | 85 ++-- src/components/PortfolioTable.tsx | 45 +- src/store/portfolioStore.ts | 2 + src/utils/calculations/assetValue.ts | 34 +- src/utils/calculations/futureProjection.ts | 244 +++++++++ src/utils/calculations/performance.ts | 30 +- src/utils/formatters.ts | 6 + 12 files changed, 1018 insertions(+), 62 deletions(-) create mode 100644 docs/future-projection.png create mode 100644 src/components/FutureProjectionModal.tsx create mode 100644 src/utils/calculations/futureProjection.ts create mode 100644 src/utils/formatters.ts diff --git a/README.md b/README.md index 57026b5..fa7a952 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Why this Project? ![Dark Mode Preview](./docs/dark-mode.png) ![Light Mode Preview](./docs/light-mode.png) +![Future Projection Modal](./docs/future-projection.png) ## Features @@ -26,6 +27,7 @@ Why this Project? - 💹 TTWOR (Time Travel Without Risk) calculations - 🔄 Support for one-time and periodic investments - 📊 Detailed performance metrics +- 📅 Future Projection with Withdrawal Analysis and Sustainability Analysis ## Tech Stack @@ -47,3 +49,11 @@ Why this Project? ### Local Development 1. Clone the repository +2. Run `npm install` +3. Run `npm run dev` -> developer preview + - Run `npm run build` -> build for production (dist folder) (you can then launch it with dockerfile or with a static file server like nginx) + - Run `npm run preview` -> preview the production build (dist folder) + +### Credits: + +> Thanks to [yahoofinance](https://finance.yahoo.com/) for the stock data. diff --git a/docs/future-projection.png b/docs/future-projection.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad0484b2dd1b28ec98eb0ee439e527d07ca10d9 GIT binary patch literal 147330 zcmd422T)U6^gfCOP!RE|fP#Scq9P!mbg6Px5UC2G2T%+>^w2{PuAm~IA|N0|kdi=x zv;YYN5e2D{8b}C;NDG9X1PJAwcz@;ne>4AiW#-Mi%w$fIb8`0D>+HSux4v)fXBK9L z0(_!;TwGiNMt5%A=i)jv#Kpy}afAo><^7F~aNuwt=)U3KT$tW-^T3zG?)s+sTwIkY z{5uc0f$vBC@7M)#aUE~vybrYdl|JI)+AlJ?rEeAHw7ARr?xGER7O}56n>&B?x|f?u zXZTBlzYqWU3Uc^LM_7wn28lf4B$faP&uwlJUZC!`R$((B0@(fIO8H~8;7eZ+m^ z@{7P;Whv9%_a#Bmv`F8aTv`^6${Ht7>wHcbBsCo zht(m@2aEHuUYsKr-~Tr^vA7KnY7f&m&S~O~#XURk+Ab$Qkm*9)v*#aA-&WW4Eo`b7 z{r;W}jqn>l}~{c{_U8HsKU*p>y~Ei+5h&U_-1^B zZ(85#rT>dwUiQvG7Y>gr37Z`VN}RP4=|k+qO&o9Ub{Z!P5F#mptw?0ka&hSBjH%ez zrXV6JLuY*~ky*CC-HMGGJ*gEo_jGqkkNR__2YcVg@-np8QYZ8zlsU*ZvN2F(6NMAd7!Rq z$>-#UTcx|7D zn}r__hy$~Vf9hU!d>mwH>8b&<57z3m*ss&u?|N4~IC|OP96U#6_soy#meJFZ+0~}) z;ALf?b>Z~!$9$2q=}z9>y}?`2ztSQiX+xUogb%R6@d(d6#$o*sa=C*&q%7mK;&(&M z?(BT~$K~+}k~+KIZQQdtr;>YeQl;^qD>Lu0yy@oGa1Z1*H}rTeyD;1D#zh}qdEQ_O zG~$9?)V6h<*a=S*I0hPVP+X`+u$h)jzwwC9@j#=z9KP6jzj4aL$Yi&w;q{K^Oj$N- z*)zDpGSe#)IWujKAh;Fws>m#Oqjpt46}Wu2v>xVtMR0sPo#t>Ubo8k+Ymu}-r&q&y zkK?*AvEQkY%-l+hhm&!T8qx#n?A>?-qC#j{@K-mQhffIH-Uk4zD$P0iBf-O{yzyou$u)bwZ0)#A`ZkFEJ+ zX`oa6lky_0Q5-~yxyjTlD_6n$OyxJ#)D15o2)d31Vb23h84e1_+R1y>&e~e1(|^q- zi42o}&hTlCD*Lj`?j^*II4q0R9BPkC`f8%8NZMXk9a1Z~uRyXQQkEv}@qK?C`;Z&T z*ZA|aZQCK--YD)4`=GU@^X$9bJBTKi&W&!G@z=L7X7T+kPZ@aqE%_A_x9^H;B?!>KnN z4P^;qRY|a-u0Iw0%4*7bk(p=G6)@U`K6Y1g${1a!MJ6AO|`hdS9;^1Rl)1mGh~? z--O%*U>zw$(UdPlMr|gSki9a|}5|TW! zk82`^NW6U~kn80%XvJ`@dQV1Iv>3|{V57GOU&;*#j9QiCRhYo8RZn;-`Nev1KNBs; z9LU@Md4O`7r(kXKl=&0a)b_%zr?D;*PwFlDVzwGYocP*(?tj9D^w9i$BAzT7T4^5< z;{HisuLl?ChX;>ImRM4$OSL0!0<6V$1^N0%NB>B^=urExAu_2sW%ZNxUG{0ZFc6Pp zHm(nYA%e|Te&z}47b%f7Wb8YgA4@zK%tQunTywg;owt0XQsd1qnafY%b48QSCRaMH zX@x!Xxj%|&ZGb(Crq0lw<=a+>S-h6-J_e7e*>&{zeJ@Z;}WuNAm&zM@!<8BM|iA6#zUnq1wk#)Ka#{xw$O*41ZHyLk^?rtec1W(~4@K|hHd_ux0<-*w<{3yBvVwFIH)8=Ov z%NgF#p-v&+OgLMR?2TvEuNE0=p$nU!55onrgu$)srse%_NqM15qo<}T4%6>tPeD7} z^?nW#5*4)(55)xtO@YgB!AriDHRT(JAD1#gI{_&Q88w1(>54fc$xfgQXM?DmRhXQd zob>QIoxzsbJL4@zfZIDydF`h}2NG{JOkncT@k?6`4mMHY!TZ1%d+Ez-Zbf;PJ8+<2 zX#*@|vZQ-|syHPVRn@BR4>nO1ch`L)?c9!Uk3FxlFILi26FPW2)O7FFjRDz=+`WLv z&7vP;+GnhaZPHBDiP@OFxoxL^eb)@;CT*S3)m+H5;z?m5|cemws#mg4H>`QIQs z7tN`$=U!(2g`Z+PUoZ*6$qy9X4EzV8it#)qj+-!ubh_yJ-%u>xUqcRyI~vwjfXv$QslT09*k0 zX=+MMP1CDTs#V`sE3~Bb9sXd)U52{dv1u_YUi5IrJyR&ymgAFOejXm5+Tv2T&UXqJ zyB(Ot+~}S8n~z@)Y6&eNUWl5IFf&$w7J<_~R3qxET9R zEL)v(PoL_5^o|BOi~7LL1sS5rzqy0VjsF)}1t&jwLyB9E9ZpV4vb|~PZTm9YdGC8< z>$PgmbZ=ro`Ac3}s}t6FygfaSmniLRIZW`k12#M_YcA=MMWN6I1%F+Ui9JXJAL#C% z_;tnhs($Uk8m;JH8;vJ{pCf?>Hgiy4^`*k}Nh=!=Np1XGaz@hX>a{W?n!hBldTUXD zxyHR{_W}luPduuWf9s7JO0oriQoWp? zKAdkteWprphqE3wccap}=zGu%5KP9d7F>J53nMA+=QdroaFA8;RdJrNyN;*MlV#f|Ougk*{wb@#!u zhJ0KTwoO9Q`kmP7UMCr{#Mr08zcmRLNO=&`#O0ZVhuT|TH{AYhH`ndyLlZd_bS#jI zjD@LOKFu9Y-PGT`w#T_Ea7U)sAY&-DDnwEe5?(3&Gzbf zT}2VyO(C@8MB8nVT#;ncrrpvHyV*w}DRnHSIbZ42ctZjFuSEKmr*rZ7F-4J*aB@6P zQsTi!%>?p^y!6cwJzNM9>gDA>VALh$`rr{tPPQD28AqW|_xI)6qf~T(%(<{oO+_RB z*+&)LM!$=o6*dpojm*1|#hNk$3(7URhZZva$b%)N%VcMDDFs+UP`lVE=rgyJS^+(A zzqpB9qNri@%1OVJ*vT+qZ349Ug`Tygc-#m2f??u3QxPfNVDSUjG~1m|c1NWM3Yb4C z7y9PQ*I78~&0S+}fbsD*?Y`wLCMdZOGNn7PNLr^PnHwrkN8>4R;iJQO{L`SEB*wmD(wWWiInP~-<(9+i4=HvfyB0eGh%uLvsvuCS1J7vo-$jZJ~uU5dB63Y&r z34c!jQK@t2+xL8sm9_BhVcm%!k`JbS@u4>qT8YEi<9GV`sXstG^zq7|3@AA)T^`&& z8QWnf0asG4Ky~(BkBk#T{6xA3*#sV5|@{k>k8Y=>RlWteSs*VqLjG~JC?y@ zj%JmM4NKdI445-08HVKe3nRs;dnzM6sv;oVyK!ZBSY9*k$O#(E$;B$8bRAaa9yGd4l1zqD2IQt zs#$*p<>Rj=m^X*ruZ8D{MWx%4T)geqiwj-^1;dlr3O_o%5U#8T869R>$$shz1Z^eZ zTNd=_(eqd3&_6b3+5D%L9r#YK5Dsv~{Im>(C`ufTus5K-)`8g!pJ;Z{%z!-Cr`%I> zY{ADyC$XW@wfb>5t3=#Gw$grF3(_*vrN0@~ljZz$9-Ei=HzmNwV}!dH=X8Bu6as5z zlCF7M+$i@YE!(CyjN2X9vQkrZ$3Y`SZ8EX%fmlk{*>yLOhT1@(6&;So;?5E!0fkDO z&@&yCu7=F6R9qi*0k@tL%1Z~_!Go|=dX}6ReZnF?hhKhn*?;fL0I`9T+3C(Ua_c|N zU8XBlu73cH0WnEta#D-4NXMJO;m$J|Dfi>;7@Q{4lQ5E;30er@%uM~U((=lNuiFtb z#S?l}T`c$yxH0cIFW0BP?;TGWJScop0?DBfxjtzda+cGWs({tovlIrYsYO7Yuz(I} zbr?U>dmyI&Jcq)%F*;K1o(GUm{2@DEj(U6gR&B>;>Y@0!++y=Z2XH@jg31eB*P!bR zpU+*2O;5FMmYi7@<8smMUyoZ@Sb(mNiqX@=E6Cq}SZMHa-Hpo^wVU7i(v>b>Ia7Se zL86g%HZIz>Ht_a}pnVS7zIM#Zt4hyRFers3z;!ime)X=6b9e)F|A$n_;>fd)r@8JX z;1N<~#tNDf5VaCzZEc?vZKjn*nt14bu2@m@1Q*v^`J5c_klk!&KbBwQAajZ8XPh3) zqt6VC{Mq5&deJQ&k2o}cUm)9#U!} z{WRLk<=;k6M2aT6xu&pb3!P?bygd?WCVT3WwCWL2I%vuyP;D-R_$jaK9{5UQF zy1y6ai>s(09_JbOs-&diA=IMw9DXowxj`=G#prhS6}4E}5pE4V!n!;2o2xl4#x3m8 z7qi^ODzS<1I5fDapGNbl=4s)h^^Vt%=SI(Lef&_*@Qk=TlHfeH|I%R=rw(>y$096F z*I$GhN;XEN+u(l=f;YEBoGV)sQpm5Q+N+L36GbR{hcXdk#jpMR(-+o^+JjJ2LTL*D zz8y@Efj_?(sW+*gajv;MU^<&DNu7>IUJlwE<5x_u{90koXxt_*`FA>6TpY!wF0YMx zG+`{Mmd9ON^iCJO`5#WJn81C->g0?58!sXqmzxX}{j+zm=i0Xa2 zDP0T=L!m-K)P(xIx@C_~$GJX56-js`iqzo{{B@22F`yeIdm+%YQWOBD{nC*=lg zuUHP1gp0hZ3n!b@Wh}3)_gJx=zXd3Sz(>DiG;h4-2cO85cj4u7A@rTPf_03p+*LVJ znj)bioPO}e_6e(mpP8S-E(OTq;#H&J-jxfdxUI891iFjKzb!IiOQsP6(jN|IEVDz# zuV;^~bV){3K%3SA9clv`x*QL2U6mXf945zC509pr>$#_;2@Q{ooB*co#-F9fbB@KH zwtHw1qZi;hxE=QO`hYr zBbjR{{$8Q3^I#{xBD79AFKeg!CgiBl;4PW5(sI}Pbz={QO9COXg;6<1l#bA?3)yP9 z5aW#Ce=J93T2Wdcb9Zc>rMOP6CB6AqEbdeDk)jl*LP1$ z^xXGbw)Psaw9(g9`JxTRmKI54tGWO){9J{1sFoq1rmN=G+8T#3JD(P-my?yH$?}-IDD_g$ut0j2oQ|CgKNFJM~wtgFP}XpZMQu z7{J1aCx}Qa zpG3OzU2eU@xh(VtK2Ef|Z0Q+o26GKcWH5pgEN|e17S`<*h)Ab1zj5(ZfmpA64PkqW zo}^Bokr<`W;q6)`Fou@Dd>_VYyi2{30eNjwmpdb5&$4nWG|RXBEosCk6}tp2q-9Vz zNyF}X9bq>9l(boV(Cjb(DWMZUiXdcr8HMr|^E=+&)wa3$78rw1EII2*chWHd``Zvm zA3jTXY7Dd>C@Ap6GF4S&kW!qqK!4Sqd(8NfWjd>XzqgioesjDwvO;cPgPBt?`sq_l zwwb*_!8DK>{p_qk15pf6I6h`4lLNQDhRo`)aHNd7T$X7rLX0X zlYWWC5ET8PZ@F`Gn?m!(Uy)FjF8m{PqRU}?BSK7YPb+-Qs(x@Vj}-MAuDn8Ww5QIu zRsD*MHB|0A8jl2{&AX0_O^^&7T^LTE`Jym5ntrdLs#ms|MSw1W-u!`BL%LJL-VAFE zQK#A%qR_7JS)afKw&n%o6{LK0G?xBwY0fbD`SZK@?anUh#*hto^5FQK;5Gg~{!LD1 zPW#AiTB)x95&EXB7uIV!(55&BfAPqD5k<}Qcu%0UE#+6o)`H)F$2nOSX(4M!j#?kg ztB*Z6Q~IIGk(}6nR#Gff?_*7!BDT(H-@x0?;a4$;@bX`^Z2cc1&7k^ApEueW4h^-{ zv{UFZkrq9%02&w<*TZ!|DpZNavZ)VixU1d6!bYM)mgAQC$|8m~{{Fr8b9GyG@|cGX zeDvx1RfQ=zKOQQ?iYqQ`X{wq>DU-Q%oYIME_cVc!9zrB8g;xA9fN%zqB}QG=^2RoS z)z}Ja9`@fD35Wz(w6R91mU;|=vA!eFqO#;?l@2{i_2{0s(>UTocUL*G(qHB# zIwr!y|Hi2Yo|B!^*N6TM3g?IPRX=j28C#hCo4Nfz)G{?qgUiD7fEGUp%*t~4$D?TE zw(Qo`s%yHsZmPAg$-$lPqr*Pv9)aO8TX*@E?}LLLpjyT$K?_prUbcM}x~i(*AU+{Z z9n)rS?|{|}6PFO>+k=*U9R8Y!#t_DNczGOideDjGg!e7+anm4kSIcVE!wi5Q8MU=2 zNr!s*9#1d-*!Sv>G9*%fW_#MFP}bJ{TNCz*{iE8JN(s?(!7wj-*l}*k;2~;umP7gb z%4@cW!6Ao^| zp8N>mVwGbel|1`Dzh%C3e>u-)<1+ zdac;C?}S8RK2=k=wiZM6s?ZV!X$tFW#X$vW510oge47OjR}5lZUwMZ5Ux^J_Xkcjy zdzq(d3Ge9~OTPVmDJx4fR9m_^VY2ebOc~W)cU?k_d-;9x?HQf!#u8Is>Z^R}kUrSn z5azBUT*>+_$q(;UT7D2Gm)g<(cOHLJLMHJ^r!p+pw{9Xn&pP{(WMadvwt5{8{dmd~ z-MBO z!D@K!?oPv=w)fU{e(wijHMw-k{yA{S+1M@DEQ^~KizO~QM(38WqnYi_dD#s++Q!&r zcRD^f$&bYOeLI@D(9M_)$1Tq?hXDqQPglJq{CPZ$CM$O4TnM9AM5@Kzc{yo3?qOES zEasErTQoqNLceQ$nv%-)Qt`zXjkA!MpziR{hN*?cQTw3bL)##s(+C5w%_ z7;93fn?Z_=4^#9QjbbbmN)|f$T8)BOv9(nS4GtU_pwbCD#zxW-O*%SDk~=lujh>tR zLT*+s^hV;TEa)AzP8+2|c|S;faz z!{mlQfz=rDK*d;5{^FNb_XG${a+w=?r*fl%~r+B{8Co+e9!WI zqycZgd)5Gg?r(F44P1cc$@GP$Db;%x`e1b(JPTs%&#u-OEria^*)oGpaaV{q`?wD1>F=ID@eakN_Iftk_vE1TyA=0Mqxo4`K>dK1WZ>Mb zU)Mw@sHqOxnLDou8c{-*LgIS;a-*3SZPYYWR6MsEgVe~0ipw=HZyTZAG2@J$`FAJ` zW;k7*UXu!@hAhnpFuxa?H%tctl-7B0XAzqf+hL`yu4?P-jL?7#4`iSHckGRJ!maI_ zKX`5S()WKBr&?LRnL+odI^%fC1|7BTGusRGJiz#jOSBoJx5$72DX93~%zDmWE$)uX z56JaI&`P+u7);WPqK87VO}K+!^lvr<(ouJ9@WBFsvU&?LyT|2!Et_XfrNDn(Qum4c zWdtnm%5t+#6?F0fHedi>5vsqVY6DKUsq^D{`;7aPRmo%ApU?K&r+1gbv$M_aqfV(( zM=l9SqxTHtJ%3_&O-3uaaa$%3(DvR7F)^{$%HY19u>M=p8@OUkXmGU*^}}UoaC!eQ zrUqVoOK)#Ji&oPSHNMb_4E}EVd4rm(=DB;khh>X&U<#1H%CAf;SpJZF_qdZH(OO*@ z@&Qyrt$dE(flodT0QVf-;p3wXe?5tq@BTeaM>`o$5WnUELJuX)D-9Ll%tCHa-G>pY1`00uPc*+4*fQY z(Q?ypu^d*`Difq$qY<|0F}zk9Man^$Q9oRXmP)zMdJ&h4YOb?!*PXPQFBSL1_nNA6 zi}6X8qzNC|-9;Yj44!4G+@*lAjPas*-!&&-_#J}76@Hkfax7bK$U2w*;qgIQ%j4i$ zx%G{IHo(pAhL^ub#lg8hY4Wa}UXC?-m1*l)3dQTXH?ad6l`bf?u2?dKb?A>@`emhFg zd!bn2hpf$w-9%o=>^1F<3g>Uv({n#oh3@|e<_0K`5uCdp>%-4qpOVVcQlDieBWHxgya+}^suZo}Fy*pWX zcY%`8w%8CUXn9G11-erZQiO(h?wS;>>IBQ*9bLU2bbm`YzM|;99XK`o#jkH4la3!B z@psNh+6d+C3(@q;=iw?cDAs)P2I=cC=wX;rvYsUikb?;1LMS+>B!|2o)BK1T**HA{F5Vi@RYDO@0c>=K7i@o3Tg4@A zx5Vd4Q7GO}^ZTxt@_h#fvE&}~O!}}@lm}QV_-6J&E0U_MF`KUp>TwCMgzL`PoV`Rt1#7fGOnt55hs$BWn1^WXhpRbqu) zx9)Py0GvhfT^jQOntFEz4W`d;rbUx*$1!kB4_a3+9;SrBl*yI4dhF&H}q3nb=l*sjT$E??SwnzK4fAK?NA%lKs-@FI7{n zEqepIoT9}WogB}8U$Fo@8xe_%i@~a>8zlzPf0Lg;$}hy|5uX-nIE)q-6RV6b9{zY< zJ;OPW0QMgrowREEPgK-26|X)5%%G2hiwhHt^5?Xm>&4ZJD0vb5s!b@pmMsz0oiyv9 z&_~}=y9EM)>?s8XS`m%XS2AyQ-Y=Ovb=vr;Su~#hN*cQVxHUY(Ig%kX zOd=r+&Wji2NBlQbv$q$qGq0=qQq*IuUWc{!GdCZ%TYtzsBsjj_vwK}}WbT`Xt!B{Sp*sLU z$cSCsLtj|~YA)g}-I9_7CT*4ED}1U2akWc;TCk>IgWUmE6>yuQeqAiITQ6@9jaZ14 zYAXJ^zuv6t2b384YJloLzz6CDO9xQ4Y-bbCop)SZ{=?fa<|{!05feep+{fC0tjWz0 z%Zj5(%MsbNYIXkZ)_x?^B9gJ?42dNf4Wwr#?|DrX*S?q~9bMKgh7=AM!I<^lneY$| zUFX8ox@*v!$&FiDaT!Jf2h{1bZ{Hg|(jy*6*{{{H`h0RM+l*^>OX5yy6Bp_w>(>lDt|# zTlze{H(WQefOQm3cRNTEg#WliX$()L1}?A`zjUMm#9WC~CilbX=S3l#-+uWH@%h5@ z%dS+VXA0=L*sMqp0o*lg=WW>}mX%G5{e&ZDWjmB(FRgo^$z*$Vu(R`WaarsqhXEj9 z`P%Cj6|06tN zjjr1yBYPgMn5f-3=Orw!WW<;8E$jlFR)#%1`wvJVf82jKf^B`mqPYt0UVnkh&R@S4 z_h2~+YOVph1f%#KKLj$*obeC|$a~gX=a@;8GEAXR^$;sBOc))O@Q}qv6=G(=jL~|K zEeok2CfYg19p&Nw-BfVHy=uHrN(x~4r3bz`+JQ~IS0Zrc4fBz2_(;T=kM&XO zhTXq6nhe8G5;29-s<$TcK4_|ziW{{nDNLyCHrGX|S4sdC<}g50t)7xLvv-fgF9;LX zhrqzBxyLVCYW=<3B;ZYFRHzTw27RT<_iAx=($>;wR`gt7iFEovQv2z*KtS)bW^FJ{ zyNz-24)F=fnG+4eBue)4*_$jDV|3GYp7Mu4JYSQwh9qmePX1hWH}BIYk933@w_Ln; zajHuo$Q};dw9Tcc;1F5-dRguD>B8gY3m3Sv`{3F0%-7?9#p|#9vUg?&h^&P}Toy;b zUYiwqJCA=jHhh(U?-=2KRv9n$_|;!}$A8{SpL>We1QA72{ER%7wzYs%-TV>C!Rd?Z z74-q(;q0Wsx!6MS^{FLrV43P^MmQ!5PY1Pw`QvUUsH0(XUG|0#N`%DJYWg zaN^fUZmt`zv$DKIEGiru#`Y#0d}}55HWl#eOL?PWarxV5QnQRBUrgN(9AehX$Q{rB z!ng=08#GnXP@J8ahFS=>g5SI;Oa4Pd;L)4RK}Pjz_hha=IaI$Fl5?T2yPo)u*ISzC z#C)k)Gt@bcEG3(#P$)W4cR`sNf4VR^>U34p{CJ*64yudDD%MI5f&@hx-&^pk@LIZRTY*=4@)Sbp5I#4t#rc2UamO1w$K3K^d6BJ0-&QGtY zIdlRxpB&Nz+<_n}Dw?a5pZ<_{@J0g%MBUdRqp%nSAu1*fY39oEi@}fpp!BqW9mYJBo5(f&}LwK zY7n>Z)^g>t9P6Dg4#C;uapyXKbw$q##CD!MGq)`GaI~MdI!?xuQ~Snc@+4ogNLKFd z`mhyfVQZvl+38h!2F^tK<4dd7->wYNxNY|!L9%N z%TveusA8-dfYy6@K?C#Luo0%+HaeBIyW7i_NrH3QOaD6y;&-gCL>dnm3L>k{CT3Uo#C8Ki%U4JVF=In5 z&WYdH9Rvmg`xVgfZN;x)Iw|+HV&nhes54wI&HjbX*-t<=HoW`J+b&oXPFAQzhjY^8 zcj0EE<|xm90o{KGVlprgqiW=?WNHC9f|`<2`QGdUBTp;R;9>fi4!n4_0$KE5*y@9D zbI{;uzI_=>!`@B`*$6YYjdhf_uTuM6&D=1jS*3OEkeOUYe%8{23`i&{ z?CyIEMpuZWMB@3+OrwS~5`oepAk!Ec9`eP)dxqQ&Hq_2H0?VO4+|lgOMWzzK(qnGR}p~u z!G4jcRAw9=yp`UiSOsX;!_)z>-kxt*6T&pf3H~H!Q4^xqz}6+jA4*96$3X+&=RaqO zE}-lDt^$t5EigxH=MnA!^vmZh!4ozA)_gadSpBD!Kpk;mO?x9b=wez8%3$3IQT3Z8L76$JXfw%{bK{7STsIJ&&bvhng}> zmkHy#%vafqYsS5y13jh!!=zBnF#5cX^2;7h-w4@txE$|)DY_y8rcG4Li~8Ndc`CLe zi%dTMsdwySc@?VD)CT0f#D@{gC{F9^Ic-(%DUh3c9qqaQXZi7A*gy+T>7IL7NkCc( zFC}Nhz_x_8s)E+1oPz4vmkbZp(9-8A;%H^dUo+g5HO&v~$6=f*!%yezEc9z*Z6&`u z0f`tk@N2(+@7T)Y#@GmfWdxBjRs&RGnu)fx8Guh{|G~vuk;Me$G$&Iw{vWxW!5SW* zRHM_Bop0Y#T2}a(bk>ZQ(q&>po|}6b3HuDawP3}i8?K2>dKThF)2PmQkhAyd!PG10 z;i-afuY`|9i5 z8q%pD3JC=$Mm&Ntm5PfNRSeo_@NA+qS33JPN7BcI9Wp3~HL!H}8x)8i?c8z<`9qj<+jr(L5*Ve?4)r(Sj z*ZF&x25x@4hTn`08r!sT44pga;pJ=gH33`MAmh;~j^^T-Z(<|aH1|hgC^SVn-K*g9X@`*-LO#Uk?A@uz5u9yA&Wus97DJq*J_ zIhCGVcjO9$O}kQ2!M{)DTIx6m-?51PDmdVLHdO`8}z&~xV`1Hhjg%4mz<{GE&C!q{v6GJwrb$|9yp%DqM@ zt;ik6fRNfs-`NGl%M~TFKToI<=%Dh zD2gJiO75G=TwM5@WMStDYMJQ!G*X)MMQKh|2sC^j>?%eRwj+*w6t`f(fX2AXXBzb? zJF#7#kz+DGTc4#J7K_oAdSnI`8pljPgj5LV>^FRTH1ls<^1>j^khCAImH??GfZY5( ztoqKkos1LquJHVrj#92rmXwgJooYSAv?V@>tXvMW&C=y;MAQi*vKE27QvOP2!)R#` z=1mag@z$k`X2YKS4ZmHAzgL94^}?G@6N2kz^xqAZ@wk^U_JK!BZ+GpCN)q~@{9FJ{ z2(lIm>FF{V8kY5!hg*OxEtUVUYStWq;CanPpS?PuE)KG@lvJtv{2X4l;fL6*7&8I| ze}85z)59=A=~ccs-f+ju9cljY@spp5y8C&(n+}%#rBz`T<;&OQCF@S?ISp)z3!aX{ z$4Bsh2|-6ob>t(bYnMYPhlMpcU`c!k))VCC@1H++z)KC52Ex{(dPU1(ximM;Nd}R| z24!QW-yV6GkgW5N1-Rk#cPxW4@A+fK&lg$}BN{SH$8GAuX+}n{e%)@V3Gr3cX3?e6x>AuWX0P?k$f9MmxxoLK-(G@WrZ|s~6i6{N09cx7}w<=Q?!g&s6x%%myw<>K809Nk3g42p zH5xl=`}X3NA7WL=CPVL!L{g#2>x1@rGS+t5pVAz$74)51;=Z}Mv-D{5+9c~q(53aW zWj>kNK6G<0cLit$l3W~etC~|t8LlBcPzzev;}Cl4=JW%?vXC4GYbwrucUSi9@I?A% z{%R7*7uMyuRf^nm;@=fx)DZF%w|&}}TJ4dlfw+)ij;*40*pQQGC=dF-{JfCDpG z64{{3h>YbZkN+A5cT?WTK8c`~`Uqo?5@#ht&w4;g;k&pF+ZkAQ1UQss65ptIq<(?6 zAdNxl-aL_SbC~ghAz4@X>izYjD81E6!3L5C>rReiINxG{G-eIRy}Fv(s)eKN^qgU| zTP9$YR9c7dKL*n{c+M4e>KwaHM|1v*s+siDpJwS&En8Ofyk|bpbvlc33ehh)9micO zEpeHP|Jh!2)Opm4TEScf%EkWlTd#(wIW50Sh{C>QlV{O&)W``n7V6WedlIOkc*s|P zEV3{4*!hx!_}1O+WL7c7KzE`H;5nWFz_YFGlAfllO(%~u^`e$dYin!EKCzt5`k5~P z6UsD+4EmlvOtWWQF1O*u`GlLM%H{Qb^FQ&(eLjACq@h=q$DCYTZS7#n2s;r)G_!V= zE+S~N(n0x2ZA>Q9ZUqoxK z>z%xV)eO8w4Q*6Ug>nS}D~N?gx}Hvgrn9~KCCcF${@+R2J^$=-+|Lb4adsrs%Xaag z&Ahlc-$9arcj=WYky_s;M7~r#;T?+b-9VAu#Q0+8Ahk)@^5Q=?UqY06X=}S=7aKG6 zzq^K$iy_(N#h9;}3%vA4HYsQ@*~?Tu(P#9wUv+xgY=W^+LY1s;X?I9fTB3M`S@cqY z-YW(*ZFhy8w@W;=&eu`%=+s2?pM%zYN9k5{MIp%RK_1xda7Vy<66oOiVV_Za_bJ(4D()``!&YDSr{CM9-2Q7`m3@NSJcR3AkW@1@qFm zu8G9RwG>osuL<^Ow+JUG`s3)krq1Vl4rdRSyQ|l5w|GNlmPS=!SoeHNgn_bteXJcg zyRlJWUrXa|n#8nf-1tOU9Fs1tIel<8RVq&Zyp9)G>gMFwSVPER0VEXskR$vJ^d~9g zV~#QFmVfZ8DQVJh38W!wJ2*TCG^A<|9r)SZc`-lL5@NnL;Eqtg(h)5E!p%w>@z(-g z?77+4={wRriM&sZ4utAbh)>9cE$iSip?ve9z0waM!fUSj{mcTA3T<;UB60Q5!K;#& zT{aNXdw$>CV?Ywi&vP!2no09}2C178ihF*;p~kGi9(%o)^M(h8D)gsh*TEl4$_mfS zJQTZeElFa}QzN~3f1)npbLH57NAkNwPhoJ}qVj<2)D#v`+D`puJRSI`p2*W~NY!5c zHJ9H+o)9vdE~!LbKLRP)x4m2{0#kQ(uKU*Ow-^k;$HkC&`{ML(G%0%c{h2c7<>6I@ ztyZYs9xfVgd=v*#ud#)JQw7dNj1E_T-Pp&^RTj3JlK}hmKykrMvQim#EvdFe@$dYZ-=X?$dzYJV4l| zB&|P=sM)o5+5tA3UXE`V;ju88qAHT--sk;exfQ;c_6HtHanVrKk!P>K_56V)8TWj9 zCb{3>uPr`%Ej6{1hr#FvEjyMVkY|}DdGSl7uY>i#uca3{jz3g~x4gW3D+%KO$|n+Z zV5{RJAHO-#v?dR_>6|ov+!QEoNt&f)v`jn}J&`2ZhY71S~9dX#18m zL0^G*+ZR^)PWeXky;hb?c+JzfIrqUtI(P4%6Hf+U1IoL70F2r~{Wpw4R{s>y9et<{ zMR%Qk^gd==aDUNBEMhO{K}R=C{C(Zo-oc51Y2Ul=7(8t<`o)?>UIuMY0N~QkY1>)c z0E6ybf7OHOn%bs~=PrGTu?G`%sI_=MpD*NA!$&!y;<6g~7?d}*xJYa)Z2fh0IWj0m zOi~nGMee*u`52uBwXN&#)rri>X?l=Eryw5vl`pJA#48;^6;&xUNzSS`w%Yam&U^A@oE@U7406QanU9V}hj@n)l+!XA)b6NU5M3&S!Mer>xw$_47` z=()J`{;y(y;0daE=M6HhsD3`2IJW+QAO5g&bF&oRRp)!R*t^uduuDDD>w-*%iK;$~ zPo~rf`=N&^sV$uT%RF>!{QJjmSYG{FO!$(dWaZ79O_O7bzjZs-yicvt_>yX=ALzsf z$s@Gy;Kp^3je{#g05&`{G!1 z9nHXmbqYc~-AYlWn*ODwdaXdKGWr{gIsd( z3sh@&D~~vw|5ovqg_zLJ#q4F{^-uGE?{s7TS!`3UdaTQ*KiWgqV{=7hFl4f{Zevo` z;ws4*&1SiGqaZrNIz@}xkDKxj47Z}@FEiNeNdLbc(0lXk-boMflro3G4}}KVkNmg_ z|CIMZBcEaa+E^kqDu~*unGFu@gKs)_h@w?($dgCOb?fgvNY!1K~7`Tf$ zi#yQo{du!%BLPtIBJ%QpN*EJ{E-amyb|&YbMae6xqmSifyIMQm7%^+mZYxuNB4lKw zCd6w!Y5{3Ui0S(*5qHaG?!iNeNOuX9A*xucr? z8x5o0^NZkNmE6C6Cw6#^tNC>+kw2=THX6v)Pf!nIQzSZCvNGmFI_7g7!7cUZOTAB+ zV$7wJ?N{=%o4OG8kHuAl22ISNoxowU`2g`nkA(bE)2m6RPOhpAQ&ozPA(f3WwdI`# z%>7pI8@Y_N1OMoy2{BFzwd7e?9beS`ZHavrZ}Z=pn!g%nWM9e9l%eKQbMEvC&vh4* zjtT0w@+Ty|rEC=8m?XHc)=cxNe3Coum!Ce2HTgutXVL7zM`N+w1A@{DtoTa%QS(owjoA;$6-)2Y80Fz|5!uBJhl4}-Ewkz;&A0UR775Se1~03-tLXeH zzHY5{IgWtt9F%;wBsq^ZPS9r*?v0>qVXegkF+qda1O+A`7wOkuiirA-fv@X`T?^_# zP){JU;b_K5(x0`io0=_H1fuP>Zo;|lrK#5chuRlBVyaL3iR$PFGb_x*2V>TJ9eHuy z*}fbEa+~eQXvMv^U%LNKA+S?#1yxn|?<_t=KFR(uBp*wuh+CDfXHsPs9}_RIS}E%_ z9^zO0&W?O_ZR;B(n%mfOjUJdhTu@DSF0v>oC)!aS%D*MKPa{MujQd?W(NmZOG;t)o z92ULOFm7}(%7XMU=9d53uSRe7e%Lhqz)rX0Vv@oUbAMXqWvd<2zN&ta0qfcU&r0&g z45ym6yPvw^AFb09y79AANEuc2oOI6rXV1e0?Zi!!lfoF40pI&x$!T3LQS%Bn;r%(@ zydd}Vqte*foXPwDMvU(oX^IK{fe^VSsS&31NlEk$n0>~|)^B|Em2QqZziPl(yy<28Y4=^f(XJFYf2t59gas@S2P=()P7Rp5#AaVDQsbm z%xE3)XxB)ieftopkQF14eZtGWd?4oJwS$R|H(DOb{}Hjg)g~iq7J?14Rw=+S=UkXA zPvmV#o}K!QO6JjYH+mcCw%Cah;T+mMu`6ZW!3Xdkt-Pc1pt>N1%zHsE{}m;SPwT)2 z+C=n_;4al%pY&IQk6sm{DHgfk1e0!y{Ur`rx65p5<;@VP#TA2q|ihK(WH!L6~D1>aZ@d zzNAH_MHh(!9$|r(BYTk9WxZ~0Znoo;~lst&F&O>0;U7Srzi-+faykhaGDJwsK!J?5520bGq0sCpwM8mwMgL)#(!}vx| zB1dpRbNdbBWKgGop*U$c;N`%C6yK2NGZ6VGKnm~ z4TSN=i-#(fMmUNJJp^x_$u=uQ)fO0T=?tC|ey`0 z)vl7YZ_*A#5{-*6GlLdl$BNJdS@p%C z4>wd*l|H3N4tz;VVDLv4T`rIQFp(u!P*GOas9J3EP=#PVI5Obis1F7H4bwplYiCGE zX4RWEw<1rMGWssXJvzTii~5OwmVgl5kmpk!-<|{Vves&4UEb=)TJP^^@8wyVvbNtB z-ae#6xRAS8vGe;JqaA^`{`JApf0^G|OIO_hlH&X* zuvEJsmz1agdBhOeWnq(PQ{@7y7%lbuBIc*Nd@kK%aH#JIgq>?q7MLsK=M>Y~(7J1o zK{`x-@)&s8_i}=P-xBY8Sk8>@@r53IDpdL4AmW+aB&@UUw8#cU=G z8>Q#Ro^vc+kr$=x7}-M^2I8+fPaX}FlWVny!O$M~IiI3RV=?+tndy|g|M(Z(rkYka zH-rb9WNu*vf$9n@c-(R>GLID|XP^WZu2x>Ija#4Jzv^z1SXY%V{c)m82n1buQ%E49 z-ff%yV7-rem9W`U@i_pGA=-^{+<ASnr&(grxpdmOKMLwT?39oese-P1l5qi<>DN+%ep*2KC%wBKwGY%(f*70qPZaM!<;K5fE!cdcmwb%ZP# z&g`Eso8WBeWp;;H93E$2~hfM>0~ zok>Xlsjv>eVwD191q_&^=5HFMzo757yBEBhaG$ZZW@T?bLm$U(Hhok{8wngii0F+} zR2I33QGD}o>viKwB+Zxh=(v!KKax^yf`2ATRGG^Ft*m@$gn5SbMR+?EzO2aY(%Q-f z5>(zgp=9h)_|~Rkl&NX|>(5bF5;WI-9QI^s_&>=A(6TH?-}U>rA*sc_K(69ur47E$ z^~!H6NA7X(Tm(1<&=i8C)jFbHPn%Y6xhDSQw8W7-f_Vw9L+Hyz!ll0YeH@&fwngaH z>;w7)S@x47=~r&k39#pTqkqw6E{4qx4hB9cl&zRx+t zMju$KUarY=wzM=$R4A|m=mts%S5=KeqHEI4Llaw^om3<`4PIsDAAX?Sy(g`A+Ka>G z;Ne?U+VcYSC>L9&rTY1F&pLNjhTN=`=bWtpwj!8!-!J-4Gv#;6<%cBP%l z7}q0gd0%FQY?ZD0vYIq!se?;-&6&vwPs>pct=ZTNQ{M_eVArY?@z?O7s-zgEP9zs^ z1VOY^nfKov6DH}_3)$1xDW)}pvBddx?fGNhT{YpNZo_jvTRKfkYJ3i1ys_$|0Jy}- zllvp4TZyJ>B}4A=dV{1Nfldd%sRFxFb&KQt@!>Bs8BoaACv&@7onIwH|Jsq;Hmw#m zTS5PMfB3MIl=At#Ol3pqQW;C;-&4!rEvn~!P4{yh*^`&^)L!8(`4#4j!Rj{VmNe`x zt(UX8Se|EY=|}EWbv@2MV0~Mfid$byyYg^-?Z(ZuJ$nIWq!OQK-YhqI0KF8sRNtH6 z+QU2-R*c5a%#!x;J$SViK;!zaQT}9WSOithzU2r=hOOOQ4>%_%!N^U?WR8hXa<$O! z^0&6j!|=fyF5+-!Dq&B;7I}U8kiC`|TzBr}v$i)) z+^LoyZ|Uu7cn0OQQ%<{PDXsUl-A>RbgT>VHEzRB*R>-eJsn$?H$zDx(86a<;EY2D$~M-;_q{`Y9DWQ$0~2g}$2t z4ZnY62x@)AHUyy^{8d7;h6wl&pZ(8YS!We6rD;hv%__U84 zOzxW6EH{cB>#&t(?mg#v+^{`xD~&lOJQ?Z0hA)H|P9gOEeOK(~aDPWOYmQk6krY8{ zYH8UYYU^Zrm&7gHSkh+yqSg}ux96w?Py`X@R~X-dmCZe-lVP5C^<;#%+PNYL$x2f8 z4ga+UI}O!7_x#{JBTa<)f$6l1t{yZGef zcv_$-u#bzp#Ky%&?iEZ?&+pL}OZnXWMVYfDoo^LN;_ewIHphktzGE}v zFn@aK#v7c3OPxRA&_d2VY#LnzMPvS~`_slGEhn_0L>*mBUG9I{#=L2Wh>Lm4BqRkb z!`Fyc-9p-|cl|I3KO-2%4tUNU-CeLKGBE6GWFg~SVYlvuOjD$LNj*JKDxP7UwP46;OEI|EI>MJ6y9S|!D4pw#eSVp}4)V@{1}Yyx zrn2KlPmjYDi)$^0pMaIf6ccFtR^A$`u=jy()75;&Cw23cXVwEYmT{VgLH8H)1P*gQT1RwR}MS znBZR<^1~m05k{=?F>U(|loGs=cjE33GsoL*Q0mvR$-Z2Ke=U|MARtius8U-_6IuA> zoQRq%)I!6=+XFBLc-EwXbI2!~Ey;B_J9N_?;91T$mwB&$V~n4DB7rXXnfL#I9IESQ z`WWqP>f(=OI-9_H|VzRd{rSNe@LaK0>h4qvdWjq8|0n> z|M;1y!u{QUYn>*9LAkJ#E7|*145k8)WGW3*xMCJE_w8e|_BD)LSPR{e9LrNv%+&T3 zp%4c+^=mpXbC`K+YPO`v(XBrUnc8ELmPdV(md>7xos@k7{;Ys-ZO6fbZDoG`=fQ4| zfyaw6PfAw4mLHr|uPs9R{c-Tp2LnSxF2LV^I|`Qj8aT~R;{T$DO=7?)uS6-GwS&Ox zwuGZhzvTM&r0)d}yH4Uc!<@`rQ7y&1fCTJ?3L5=?1|+P3cL_{73#(f@d&Un^>UkR0 zXNm4YgVPzNkm^U*03iTOG;?)hqfDo#Uyf}rc*_MWZT;~2$1x7(?@!v-ttD=t@71X| zc08t$yxQ$0)M9kRL+!;G=dFaau8K^p>K3MC#>D!}Yx36*lhj2Q!2OANX;0cKf^Tocww=e{`wL%)z1%yLKUW9#G7ug2Vs7(LTl;e*^OFa5{tsK zd=Fgg!Z+{P)T^g!W9;D5)64+-&C52pV5bM5R-QS`JL^#j02TlYfgoW5gZIRgeRwFg zf9Fi&^Ndpt2O?%py|Uob>>)a7LS7=526|7?QTr3;%QT$_g-??p#Pzi{-GT@76vuK(*g(IYk{1_TM- zNADNLD%HjCJNdYD%MQXPpY6-q6Kt@1hwnkm;Q{0=c6t)m2iS8cRc4lV8a`Jd_(saMP=N#kE?d5!0rx%`7mp3nY zmwzBLC?Fcb%4Z*L;%>i|m>1}XQIWNFZ%Vy2G4M6Md)*R0&DUm=+I{@lZ|~ZN4}H5u zfuCDd>#f>e(}R@5yW1%(%o<`w+{@ys1@DV^?Y$WyS0pi}Elh#utM66N3T1?aZcK%0 z#zGX@*#mPc9a?;KZ-$tSda-Y-$-=x?IeqjrplOr=7Pq%-#lpH4qlh_O&$@jjp_O!v z`O}v<*{(rZJ7aha3biQlp8DcH-k^iyY(aq_dybh{RXfUD(mvL8p)S@A;*q)KHnS(8 z+KXcWHyDQ2cVx1CXy5#l`%h*vKT?U++XQJUAOn)Qo1_XKK* zAa(5T#{(c*v*<`Jn78Nh8V15t`qwAbZ`eCKz(DIN-)? zIbo25??Wt5kvQjum;eSgyC`HurC-{RG28>fbxzCFg@7Ux7ciBW8=Os*iH#7+`PV?QrD`fq_r~r{PiMZPsx4!k-v55 z7+S7piuU$wb}0z|Frc;%>bn>O4nCDt!ocUfBa`U%|R zSEt4?$G2>vcJ*LJApI3(B~rBMoHOy3=qKoGM#Y6s_g;qL>sRFW7;*Z7yZGXFbsaQC z+*aE!`#dji=2V{6s^dh7Gkr;OUa9>|WPb4@_XhsfGrJ(D;u01BFPc9HX*sm8H(~~Z z@el9_gxq*bP{CNY=fq@%7Q)tJhkgV`69!bP7k%_0x#?8#15u~d_D3h9M3k-%r`3ty^RxQJ8!cw(e_}b(`fA66Mzx z%zr*eZ}Bj9xrHej&Q0D|%-u5dD)lg=1GqLz*Zpy&a?)V@i7|V?@|Ng2=-kRnjkjp| z#EGHmw%(K~Pl>D5K72Gfo%BgE(Lgl~QaaVFy9bF;-}|$uIig`BS!nn3ik&W$v&C&u z#n?wfN7aa=Iir&3D55rTccYI!>%s08*3&F@g4fk&D@lXC0$C>ynst9H!q~c3vBy1GTWVevys&tu z?adv`i8C#>HBl{@!J`Q+Lc)e)>1ZEY3Np4vZnmoa})D!y6!b2V6RnS zYpFRCwM7yX6F=TDau-+Cequq!BQQ(jL7v(J&ObtHnSv3sJH#ZYm&Nu)yjnJ1pwCw{ ze{V+yEh`b7LTVAcQO#~1-j$@=vL|e@kp#bwliO_ksehhfZb!P^Y!5grmNKlPuQBxcRNs5n!JGV72CiRm!q8fGF&Rrz;oV330aFla z&rYi^^;PxSuh(~O?0+8Nx<;D&;=hE!h;}@VN}m0`X0>Absq#La8&ULA0H)ofo~!BQ zyBg;gkY0LXp^Cb!Rdj4VqguhLX~QUqU@64k_!Ny3z{>1>3|#=e0{pNH!p&m@abHbX zQcMiJ?C>7YDi)S#2ck?ByqN)g68m?$@NYIvsi;~HyTCg2+>Kk@M9->$JE84%@u&>c z#$>qwsoWpFc9Ea;`imL8M^_39b+!pWY{7uh`L+|6fysXD;lfuwj9Y&eLaFDz z50Mug{;z`|w2SXE1gsy>ZBrjMIO9Sa8hWLojE>@;pThaE-y`YUSgADd z^sNmLU+&*hBN?kLWH)C2>NRx)4s18Tc|zIvIXO9%x+g4%*Ht5%0Mr;#ZDX4Dhg?*Y zl9eYU35mTOvFX?tjKy0mP|K`>A6vqVUPi0{5R#gU9mJ@``=WjO+!I$76&>$C-CfRi zd?H4XdsGQWJBdDLun&i-sb*RBSB;$$NGIGa$)@QEjpc+!b!)Xz`a~9mBuyy92ptd- zSV;G*3Oja8h}w&X9_xR4+&n!&C!K)m;w&GvB;NlNF!9}gZEi$!6`LHk(OG|>#b+HA zyM6nLs+F^Ie%-Id{)vIL!R?iwVy7D2yS3|8PTnxCq#TL)G~dqM6u_-dXfn5DK?AbL zl%$tAN*g#=NMC(Av+k>K6s=0uW;fZBbi){G$f~ODFcvYqb4x&AQIfNqhO((HAClZo zu&;XF_)}w4RPSnd_>N?o@9NG!)FZ`%xMd22aACkl5jWr$5w~>OUdeE>&_Ed0A`B{i&W~Pt5ZyamW6_ooi{p!Yw2WSgs;DY+U)eeL87^lF~KfedOgmW$)q)4jE6YCrujHd~6%~x@lvunP# zOs{29N`sK=pnBLW=?zrZt0!h+n^fk~N&-2hCH0wt zW_KB2&W9qL8-Xih1l>Qn<*+?I(Q!8hWsm2Xgs<>Q>#W*8&AN9|vKF&-Gcy9+6Ftpl zF8BW@5!KGTgEZ+?>2RIHUPSoETS^M@9PO0Yn9NNu_-sSoE zIpfE6Cb%autH~(8fJ-SJq;T%53ft(|BxcOAYt!<1{4jp%hC2QHrOTnYT5}Y%o)wP{Fb-+5WGm} zm^Ve`YE_95n++fA87g%!ypJ9ug^RxoU0bSAJQ?YI?M=y}jq6ubHJ;!&HKjegjv)Q- zZqa9(uf!5MZ?vgOYWa)+m799JyTif(p)jC@JDDESt(W6;N!8B{Ai_3ks{+~}G!=4UmzYhsm!t{QaDD?{#QHdT5n_jYM zN`*#FS%@SmTx&Cu&C=rhvLD*GD1G9Vxv|HfUrIEw_`F+B!G83 z4}}vv{{PRaoGgA(v)DacUh@gq&>*+yKcRdHfbcT5rn`8vw^Hh)Kvc&|@P8vK~#O#j6Zry>i5fGNv5x>C{yrWtB;G+%pFn)xf&kfaD7 zCyrD`^m94i>r<00#tXB|%<^>F0|6#?VK#ggBUuBBzeFq&ev}~pTNxI;OM6R?EU}-G zS%*}^HR{>v8Y99&IhOiwXIy{egSX=*j~3@3VVvZ}|0$SpMDBKe-1#dEohqdf!GDM- zD<@(1kb#8PiOZGmW-r(M9t)71J49+_4h~jRO=`X+b>A{!<(Sn|P3zhmO6<^I69C1L zUBTl0kf7AWzezj!t`9`~foL_{#dmZke8O1N1_;0?p3iON-sFGB!cM7qO1HE`a-%_}KS8!>yMlL@{B{rIEc~E* z@4tflAJp`_(*Gg;|KF%=)SZ=RdCVKZ1LC}Iubkh_DEpt3xJT8?>1soOc_;fRRl}>+zlgUm z$$#=&E8s@G@mXIItiS?z5DIkwyh%(jq8=J|2;UGUbeNeFhp1>Mz>{5K1l;2{8f}hT zrE)l0WL!v9bj<#jUtUbn$H18tz?CXccqWVx358**$k|Q0U$4ep$QlLsawZj;Uw?K0 zR{K6H7y)vBhO)PfAeM&Lg&aI<8iG&lEp~RHL`64pEgyv2hyPl#3u3Px$f`Bl%~erW z-R(GqfzHOxPpKI@`!qw=Uz)~UIA0eI#Og*=#Dm^S0oY;7>+%R)CmxMf;T2=y{;h=!!JQB5 zGj@jBXO2Y)zl%#u_^kS*Xcyo61M2gqvIH(#uECqWNP#Rx7tm!_w)%{+ur9_vs*uLA zZaQ74S@dQ51yke%KuFcN_HKu|;t)4rzp3@lYua*j@T60B+wYlx7xVkH+b5#Kkn0s{ zJyN_Sx8@grdXPbEReK9twpbOG*^wN)9x4*Vc3ZFlGBs8CKCkoXXscrQrP} zd77V2m7G0(Kw!@vN+|;nAAP{x;sKHbo?*b-D}K#y2moO%0qIqfHS*RoBfor3H6xU2 zMLrb2xiUJc6;PpEkGFdn6=gfPiO#x)U%cLv$a{}&c<8;|%DV+V7PoyI_Z`EA%SJ$n!(DSc0L;>4iCF3USs)PF~8zz7Ik){V1Hqb=Nu>1Lx}3eGkWkPA6FtI zTmCTHb>0%(PVr~Jzv=U?sq1bdoamCF%+Q&tuZ8_uo6Ex3pjpq+gNa9^>{`rVM;$|e z;>pi5i0%6(l4N%fpwJq*bl&59Fil=R!3Jvo(Mje zEafmx!x;eHb**PDNCx!RuNT@^03W*L0S6@@>IONXGECva=R`?>?kj5GR1TdLXrhDf zRb|9p{!vNp+@9h(cp1c(a8x6xT=r=S2pTp2y5?zXTeV)-*hnvjl! z$Z!XwwdsjS1R`}P!0@fh+nT>qrIDNcD zO~yJlb5N-te)QW?z;?x)Q%LwZ8#X=zpuWQ&X)A~KH#0m#SusSAL{+@EA?Gw&lIM_2 zy$n)IwV~RMy;GlI+S?_gQ_OQ5t!C}F%fV-{F{Ce!b7L(okeXE5tQmKuKDdgqS+U0* z^2-WQQd9vT1-M@$6*Mj|GaX)ykvt_w4R&KooWuK#gaLclCU2cfiwJS$Z7lr z(LOCXe}3+o{mZdYzjpd)NW-W95#M zOYVH)YlqYLcWqsxm5un7D(;-Y&q(0{z;&S=*3nhIV+0}A&7WW~1C~m0VO#s4o}T4s zol^s2W7>r=Dn%Ap59&X5WaBI;tp~5Ya_hqzQ1}(WD*T|aHzH^m1EqY%f}H`mw7%E_ zg0@}5wY?b!Vj5}MwX5$Obj@B0@ZUf|p4-O0*qIZUcCOF>t?4S6A8Z&JR10K@u+Yis zvuNXXzsf4ZlV|uXw@z+2SSHHNd$-R^zUp-L+8a@J7$uL;Tl#{517K|Ckij;5y+zG> zc6>Yw`G?j%w~B}!OU#lV%z$BahvXH$om&p4R|*eP*BLjpbp@kDLfve4Y@2zkwwxxb zZnKb%8QsqA;A}nIa(7{C%5P@u+kAcD=io|%K2|Y1mFla(dk-^1p5p4J)|UWV=ccAJjbr_{Sz}`xD4V0#)%VA~<9S$}c{C^X zustU-{YsF`C*Kn~Do;#7(DY`~^&RmaRw(uP3(cu-E&Xe$b{gs=8bUs)rZ~BLMBKvz zb?u%sRX0Y$cdF%U!{0fu+FH#xev#;+4n0y-#F&S$VWx2!g6@JFNbHJHCBg%s2Y;o9f7qfT_r-<9k*38n3TLWCB)>8*cACS-abRvK*al8wCFvZtnyi{ zV;#(}=`E{w_qISquPs`GN^AGo3~Tlatz0ZSoR2$h$gt8wNROiCmQxU@%8jn|rAqi7 zVNim=ft=}2)Lxi*RL^LQC2=>3S~W$>jW0^n8(S$b7s0l;dlK~+V8Zt?HXa+fBoUMJ zG7IhKcxJF?;Kb3N&9t8z)eGu&Rw*@aA1ZKYC1Gbz-nd%Lcq#mk;|r*p=N~QQ{je1E z53wdzAvQDLtgVXnNCXe?-^JTX58Z7)KUJ`pSbxFP?|AwT-OCfym157lUUk1d)O8u_ zmpcU{&!3YAj*dBXe1~GbYrUrl#VrZ@mBshB&Z~$6ndrC;e1YatFpDu^_5}YkSnllT zlN3Z(A=7wr={57ToxNZBMo6kzez3}UF>&E!*t?swH!;$6hJwf9V!XBk=io;EX6-E6 zxjK6#LKtgm$%!>`*Mz;??YI``x@kMe$dn{}@Q}RO@>gbe@(gS0Gc#~`-FTZ>L5QQl zV~8T*ndS4e`2#HgX!k;t+?xx?sViBhY}E`|j4@VR>F(=S=NA_%MKj>)pJZ%_A1D*Y zysg6xlg!P`^YJV-9dKOzMvuH`KUbiT5cn%K*8Tah8DakLwv3}Io5^kWwF36Nz=r5X zuKg|dEz3H#$GXh@H4eJr?tf{|#gM&-OKENA3i4QL7rQT<>ieS}%Q|G#ZQm9nlXh=h zLv4F3K{C`|Y}44^I(FnQfar_A%&SOdLh?>DY@?09%7*h^kHKF7N)%qbaN!%g3=)dR<*x?6YAJ&zGlJS3XBgPKR6#aLt)pXx7#i<;-`j z4ZIk{3NZRKGO&@W`Jh0$oCtMuPpM)B{nu{Y>Wg?Ag9~>QTwSJ*2}}DGKMjqa{Cg&7}~WOX~B1g&w?OKq}F^hmH0cahr7?oy(xet2Zmw)ixze z`xZZcbfKA2Uxa|VGf3#co}T2b!w31M^^gDWHb>w&E8R>1bRyDTcvtJPXUI9}wA)~}vi|DSVZm#GGV2y3a000Wz{$A z>Fh;vu-_zy`#pdBD;s0uSx4c|2Y~Vql+_AWButD}#QofW*L-RtvkG$={_Ky?wDU_l z9tgThn`C0WAxnvV+f%I!f96%QWk_SEH*Pk||;rX^)@=*f3_0}wIIxg>)hpqTP z2s^C=rhUkzXB!Q*u;Ml}e0I!ob;{HJg%_iQxrUq1;9jxl;|;bKcyiHsOQ3&#^qJ@A z`@JqF^cYFTbZR;|schUYI=^={#T=$>A@!g;1JHigScyUvq`^6yA3GRJt3IEB%=JE$U zjeNH_tZk8OP5#p{p%AIclDqLAV(7qEHRBpSaE{lw{{VE!l#OZOx`0PL=^ys-2>V#| zF6+!tT3MT7-OsPDPg^3YkRDIL^SoA=j^{iACsW1XEqO59cyy!ba{b-g3P-l<7HGuT zc>S(s=YQZB%j4!3K6^rBky*pUFDL@So~R2|Cu5%cRhZuEA%(s`eUXI0S!&ydTAlWb zt`tB&BsazCBP>0PYa&AJQBT8dL&?g>2I~|UEp5=W6v=BKe?*BTB>cf&5U@R`poZdO zngzsaZVps<2FnO~Dq_cNae)8tX}z$ud{!`6RNk$#kY2D6tmPd;G<9L$ML-cq6s8MA z9&9fLfYmfXLEr=2w@XcCSLu7O=;!PNeXQafzYdJpt2yytS)OWpI7a`d5JDsw1$uS< z7C}3Bp1zv3NlIotZyx~N6|cxzPS>sg&}3;;QC3ya!oba6X_e7udsVldI(@GT=M1hN zS`g)D@lyNgSDyAov;5uC-Tm|#r5WE(Y)1n>;_e;($Y}HK?b}Yf3G-7GUB3Dd;`5rn zjf5OdpDDO~2<*N1+eq_6p@joA5^9fkUJ6qSYYa-GtPCp=w0;>_tDRVTLT)Z9N#FdQ zA0+th99G}h0fl{x$O?XHG}BJ-=jVi_@M`J+77B&JU}wH~hDw3o%y_W)?%9iXAY~Ew zc~DM0Y=lbUqmIbP{Ww+7qiAhDvhp zqZ4~`W0-V}aq6qV64f`PFR)5{`J}b3S{(4Lq`HJ0asrkCHwYx5QPSoX%<)RTcMT7v z@g`c=ZO4NjU{&PDUw7n>B`i0 zw!`xt!l3_oJ@yavvC+%K)f@-`?H+2MpM!grNu^>kGVrCprQaC=9oX^J#^QR}>J24B z;`u6!vLO~@(1L-oY@)OD#4*?rBaExu0;SAC_{3!2;a)mK0N@?u`eND@$scG0b z-re?W1@MQGEvs2-&wK!tmG7t$st}wBHF>H3*?{LdvH7 z=Il9r-HK6sm&-6yykvNnu%;Vtb0cm_H(>Y!*pgOLeq*`As8&H=Qse1Y{x-qXD!ZT; zMK^T3LRgQ$;tY3SH1uQKjHCvN!Lv@<>*kTP#rN6gmk(Nc)N~|3GmrQ=7ZD{LjScx? z->J=1fa!zan|hE=)qnh9npMSF@|KH(#2B)!k2qJ=xrk>7BXSo)dA9dKl+`rHKi6vI zr6jx$zl>ZW#iZkWWMZq%xw80X6#q@qU=di%@{D(_`}vC~-fqYh6^Yslw)eE`32O3! zErOOBoz6uiC1du78P4O52_#_Dw?yME!MA~TB|*|EX$zx%(Qp$mFKF72i`?HkX11`{aa>+!0&l+&E5UG^ zdAz-OQ*vFk*j}S7rWu^TFc?qhL>6svoASe(!a`@eff%6BW{ryb+`Zi!4kN>tqL)CR zm2#M|^TC7vQznBO>HGb0xRByUKDZLiBoA{0@u603KfC@X7r9=&1FvwXV`{U`}eVzPHspRGfWfy#WI% z@cXx|^JFZ=297!rElaE?+V;5uPf00H40*5`5UTn1+w!*{8Q*;>`}hF z{891cw72u+f5M0sJ;=0VkvL2~ikva#kMS`EKV7KCc2$V)`Uy~02bmZxR8;V~l*7cU zvPRL)79v;NQe33eu*FK{ZR)Hovnr*YFnm-&lHKS8wI6D00uj6;@~p_9?)I($7j|!P zfJs_KiYND)eK^LW`N9LDPg|*M5zF62_ zwf6?!gFjnXpEoi9^*zRiZ=aZ&%#A~Ij;0N0I9_ZXG}B!Q1%NJOF$zc`2Zps86pnyB ztp?K)W-N`^5b6_@91J|_)nEU0KSp2ZXt@vWvxj&m#Ew&vKnMSKh1u_}!|2q%Q0@P* z$pxUQR|SbY-Sj))4gTxsg#xp9VLfO6^&m0ft|AtT<-SCxsH!WSOgtI`m~#Js0WI&S zd!BXTdX3C&qdL!~=5elUaeayQMnFj|Cuon6olFGx#0jy8vZrLUuWp_k%<+;($G9l%7h$ddt{v zP0d#Qvx&gF8eg%fCPir5nA-FWKl~qu%)F-w(a!e^{1;q}1Wr{D1PXtk{`>4D|5qpU z`QnSgTn4Jf?X6fBrM5LAbgKqns62z$$+YHx(f4Sf+4PFmE}o7?0$8y&B_UIvyWxl6S}~bdQW#68MDLO_J-%YsnJ3a?*~Nm3nIZ)ozoQ}G$Dm-aXLN*sK32~rqicr_G& zB^$QCMz>uoiC?+Rn=MuqmDGOqrwu!U&4P~~1gA#4iw$4frEmtm`0bB?$&yont9j81 zJsgr650rD<8`5`uFk)GT9shb?WEX%egSb_B2gnWI5W?W+|Z0|7>svIy_iWU4ta0 zb>l9r%Zarm_QN@i17BIWO6OF-n9UVkf!%CXU*mUT3F-e@dV0OV_DB2wGVz#AR2v@$ z^+9yo9H;IXd*$UQln2}r11T=?Pw(jaXMfHDst}qdKZE%P5vfM!ZCeNYTV9q`4UF!= zA~J}L_t)R+q|m(mVyYJ}IwaZoWP`LSYQj($14C5!B(y zok#}@B1>Q`Q_IqsPbuZ$!AopUTZ;3(!dW13-d)TIvGQJoCwZZ*v;~z_REJW{WkE;i z_qNECTvFT-I^i1rTau0V(?hSlzz%(DYGJUr4eRM>E4{2n9vDIWQIqi}3Bnvr+nuNs&BB7eztHlF}{v4fia4h)HV8Wl1g5 zXp{hl9Ef1gfP%j6!Yh-8yzUn{ zOfW~%&HO$W{B-M@E1bQn3ap;i@ecaSB^;*_#@QGJ-K{jW2ioWF*P%foOEV3%U%8O2 z$HJq|j(U1HV`&Sk8QrS6kgiotIw?bdE1^5K8mfQ>FJAxE^NxB#U(>8{A^>dSCYv>YF|-FQEv#@comMfO zZJ<06xyb7N7*kb_+r$`uq^87_H?*BC>TK(9v!$5;WtIGTDKl|7Co?+`=SvC0lh-EO z?+1+3eO^Ba9IoNJ2~K}oIcdKtmlagLRg!v?9~X8NY~s$V0Iic~<(r5F7x5hTiV~K% z7rbJDx;V>v>LKe2F@$Y2z!B3Q&;P)K_Hkk$C6s(`-k!cy({5czrgd2cy!g`Ur^G>3 z*=t|$J_yqzY*8mu{mL_o9ucN4%vnHAgjU(WaxE@Sx!O9_{D4txllq?yXvsz@v>igQ zDoI6C2VrYNuU|Ll=4h*LI3A^RpNCDGTR!oSl_4_+6xe}>;F%SKKgTRvVcgsm569D? zMun0RADewe#>}vM-T8*fk|8d*i zqC9hjFe`psjdevZNWB#u;3wh_EHk!zoMJ_;x!FEPN!r&Is4QTOO+A`;+W{cIP}yMQ zx^D}9P=cG?P_nQflOSq8>N!@+z+6Vf=}#uTb{>rXb9K1S{rHT#-=UK05S=^OjPnQI z?r|L6ko(mA*S%|(^H1sOyvueu~Lu_DfpwUspeBEuESmA{n@;&W=4`ZP|!X zv~)P~WeVZrR0a#pWhHuqxFxl*Stm=*$lyyzVJOy;NMG~WUdBMoM%h93vx)F;uVO-m zM_K0qEKZ8-GfdK?Fe_S}(l#a53pPSBR6*_PP!&EUOINYnR1gMha+{*t+HNZE!_g*M zAZjj7`2>csl{J4=8%KtZ0r_l>8ehAah^p&V7da+P$bJShJ}6gozl4fMW~ruL?ZU7( zupIM`iS2_bwhYvk3d|Ody>uGj754-=o zi`gmUeRpM>a<#qxz#A?I$|XEyh6d2xbBJcFQz~{Zo6Qs7+7dgR#k3qU@6~FZ67ri; zcam$@JOy?Mp*{D`UhX+DfUbSeHlZ0#aS|oX;(s}Of~3ilhegLl<_T67}aVjx{uuHI;KxDHA0;h z)e1R@Y)T4h3uV!6{`J-C%plt#a z`ZyV~8VU+F>hHe-_x`%HM{_cJ6eZTM9fA9x$=FC3l?7hxf&wAFgTt!e5E!0;b ze!D=KL*}497@O2J9x;q}iSgWuQBxNYum#w2|8HQ_F=n!8U$L5MVHC@0|I)-9ehv^* z9mQHi2@~{MRSW%)mH*A~4KW^1z2Vr}jd-(Zt4BT&f! zlqo;t5-bXwMW1h-pWQwnW~IX>-FH$!7ecgGJlLpHN0_wh1`cM6+~F~k1y4=dr*>k{ z9D& z+3^zXZo81UO;rN!?UNLtVPB521Ar^93JwD>7)WSTFv+s zGR75R*``lHz1Kf}tGV$7HN#%oTkBC@uil>OyKfcWhHspXrd)WZS{6A0dl^nH(Emz; zHmrRh!8#8$PThA%WHUWGOKTez1VBen6c*SI6YT$Y_>AZh>a^&*cpKJaS%GF<93ygG zI~=GgNDI%7howD2;pW5 zG5p5>1^h)t#3JF_72Q%fr<0_h`|=2zGK{JcYy)pFr@;8c1mnc+cI3^+>l%Pakf8Up z!yg-7h+hYhiQuYJY1ue^UPIidb|*8yUwbCKb;Yf&PyBGpb(&sf?hzRShsuK%IA0kx zMfH*V>Ir8$Z}daT6Z@y(-qvx|4(<%HCu>VQ>}kdJ(E5SWoU4bOC@;|N1dQ1m^U)o~ zEvM6RU2+TCKzcWvr#-sk9}m_Tqvg(i)@9#Mk1CT zFLfYy0GZ@-`4{h92fIxyw*=56uYu-jd0s6OqK?K8EP%EDO$GIRU~u>8dQ8l|^PQcp zb$?q1;MLohB6=aU@7J@ucNyLLPp0K~q&%BnD#vF0TxsH-ZxR6PZh!*<2x%r|mC7xa z{>mh+iIGX6wJzZUE34rj8Z&REyDhjHvKYB&M>2!8S}Q{5UtI7!@qYSqzu#Y%3Ot=x z{3FD)9)_33H5^B!q0AlpL?!rhHF`CH@P9nq{RMyy~%IO$v_eUit!eCG_!?`i6b$6p`a11n^WS9`_m#p3N?oK#5 zYBp8h2}l;)0=cVCb!CF>h#01fpNyQ2?EG*R!**+)xs!Yg_ih~{EaL@M%a{HWezMNN z^wB19k|oDGtvNqLuFTYbVrBofq}eIRPbW+sMgK8&i&GG3!4Y zu@*(0NTWdhQUB*ZYZheFE*c=eDGMnpOgow@-yJzD@p!4B;GU8-{sxpRZ8W7tjN!={ zNk-@eS2(TPNx2^uq=}DG_x!T?CwyV{U#=*>MWmZ(SviDN(rAA}aIz{l@d8wTd5*Tx zj8)8WuFaD4)&lPFOJIxCusNngInT8piZaByv*-z*-X_pbQFVXNZ?hJW;m_ehhi@p* zRQcUeY89IXB@2p{MI|a8~7$d@F6} zSkab8YoL`;?Y)B9mX@g|kPPT&UEVjAAD@)1h{F4xpYAj1_+ayluXb`{%;hMTrryGR z;&WLAB48Fq&ba|l=IS|~EZ|*f+C-ztjci24#l!z2#+0wwDJ`HgK9Fku1srelad7!4R+7!8hF(KH!VMT!9IXLf#7WBaA7zkSR#rJCw zXvE|0niNn^A1^dHpdT(&M&+~MSEu&QbF1V>&32;H38w+l*9dI;K}xqaT4|xu*q;vn zaklGv(pbsW966cCjWde5s_xOTdF;}BX{3~q zg=KYgXhZYzQKs4h&74eAUnGaMK;|kx=uwK=Gp4Px?acsfca}ZLVOcxFutlH17Po*5 zkh+ovZM`317RoYEfS7HP)Sm|3AXcf;5>;(2Q=6r}%cG&8r%l?-QyOZl9uk`PuA|0O zo4?b$-@YiIJU{rciG@rwB5cUP)kG|5VYX8-h_UZpY^{`}Tw(JUkL(YN=--8YM`Iw3J>H*P@0l=-2GS15-Z5f1d(LW_ zgxMIvHyKPxx|MW52Y?l$KBTq<#-Q5L5dcs1@Ds0HN$sr(M4OpcQB<#@TAD6iKXdFM%H1X@;!bi0JWIxSZrD-9BsdS#e^MU*S0m^P$ zU$-2%?0sl&GY3xk`wH^m@1)x>iRPFXBS3%I2^bkvw?8Uah7Yc*xHlgjh&HQ6FwYss zXx3QGW-uf>`K6yrMPte%;#(@fUqIe?ng`Em>Lz&mrX)WfsS4F^?jmE9o^L17 zG%~UWO<%9%cfARP6B51!Lg;89Jy|a$^$zm3W4PS`-CN!C*tJv$FE($g;YFT-5%$z{R87``vLG88m)UMa;(Q71T#<9D#g+0HD_XCB6*`JR$8*R zSS1E$7_t=n*?m!2JGb-Z%^Sy+4?Pi2YnRYla~d}u_ZSa0l?IUUQ>GPBwdn5LDfzf?!2fC=0(n<;%Ye8a44eedLxd&v!0 zjp2g_XJ0&qFg8;8KK80YTwHea>91IXDFHo4^W z!ut>)Z$Bc&)6a{XcKerxmsVrtPHch7kbDn{`%N^%$SCCem~(CNq~`T)I%La{q2CTe zS-L07tmBBwJLcjR%)rvb*`-+oJIZtJCHj*ks>QqEbSbmBtS4~A1d_IMK=_m9Z_Rxg z8}T=)>N|g)>FOwC2>zhgdt)%F+wVUSt#9yLuGcyf7AS4BhNd1i(9@HOYl?xg3^QGR z)sbTFHyfs#(Kb?Ns#m7JIC8K~4HGc5_GhV1hi9F5Dn2|AK<>B4CS+`)#~4o8*U?ei z>s>WWQ>GrjXcFwt^T&|JW8^p_Y0T>fDlCU0VptKR7uYfjW7b5H3EF$zV#?an1?DhX zkRUZjBVY2*J!_J53N%EZvy{_6i8Hs2Z#Wz+zn!$kiZj7o&R8=KOfzs{W((Nr1J@lK zoVHr|(AAWPY1NR=q54+oISLhuNjnOqZ@j-QKTOhV_c#w3>{Nv{k4Vv9ew%Hsq41@$ zB$?MCnn&;Ja*`(K$K89`o=KpYydMplBesQ3dHOd)c?|Pu9IXdDv)8GEuKqax`o0l5 zSj&RrjLng)N!6bHEE|Qlsq);_CeRAw(%&8Ic*gT-7aC{~0p)ybr726H6P#})ypGV> zu=Q(ZHe)u^gJ!c3m5sX=^6boZdZ*~hnEGRy4j`Y!`62#ix-^O)dbMkoW3G1+Tlw@O zHaBB4KL^1!_7Z$EP|^?rWSPpk`#pAZ6n4FFa3ZZ0E)UCUT(^n;NcMy zxfzzIWAI@abF^@3U$bvFPT16cRHU*VGqUm!RcMui>Zfpo$^{mwbRJGi+M2o9%Hfz- z0*-&Z9==yc&+*lo(1-XR%}zU8KL4~);=ZfpGvIsYdV;OS*JQ;%w`;cCT3;98hg^G%O9^>J?`|rkQzEy1Z7z9fzE%{>#$jrv7iL|=A=%~ zd`S+Beq;ueMe4L-xERt*1R> zqbousqwO{7Gj6afANxEuc_*asoFjM-^=Iz~G8V}6gx9WvwElI+Kd2!=df`$Z!>Jv| zeN@B<4HHdE$)S&-b;~T4eJHa0dPRH!aQfZ%L#iNu~RyH4J42qxE|HhOG9m_hvr-=~J4oH~Dvcc)ye0al1&ESLOq#LUlri<$9Jx6>cLBG#GY z0tJ^c*|_C3nLz(-nbap20rB%PMU;dds^>;yu4;{EkM0RcsaH+xl5r5n;C48C)7arI#oqMn^!JKTvS{P~5aj-tvgjQ3+Wk*1i$#k;$yX2T4 zvZy%b5Hy@=*V*5S4g3mX8@YQ^vBgb~(Z2l-)7qUr{Z`dZja|^CO9Jb~9cLJ2)Jkod zc{?kQ-rF@Ud2+!vpq+dk5( zRbDuk<6@Orh5z9(nj6h9p_b*pFK(#*Olfp5@Nj+cz8uFg?I8>G>}lZP5p;cWE^m)M zq0`e%f`hnmn7KRlWjgiH$yZs)bjKrcN28Fs{HWTNys>jquIboK8k|h=JFB0i+P`mY zQ&f98IQ*bbG5n4@}MuvIkP}nM{r`76}!<(^# zApcw3`NzJc`g|5u=mA>?Ior582W#cepEqL@RzZ_&WzK|RRV-a_(Vpdl;7-5A$I_<$ zz1dE#_gbiGlc2_`;knq{eKUj|pi|W!^`C_gE_Fk%2aq=%`k{~ZZW%RXJI1mIF&%vI z)luFRTE7j`>TE|xZ&(8=>(-}@0Hkj}(gDTw8pwz{Uv0}~!J&G3TypB4mrkIyp6?Wz zXL?26(BnV5-HHG_$~mQ%g6FrZNd;hP45pKRbFYN5j_u45vtfCUtnw3eB3$}55VN(= z2#0DlVfOrK1=OFA^22G>Y?PYdFkG{qH{ZOS@ZqF3+Hq=YOfks^rgf45$SFk_Alk4P z6BjDjq$jCHeEH0!lOyRYN+74k2jgvBth`woYRJTcA5MR;;DQMlX`W}dZE^sGDtbPr zpHy!j*QXSv4Gv39Z2epa=&fDnk|SnISTG^Ng)I|Ujl%yF8;{!Kd|d-wgCpm$cz;98 zI*5A3*;V*J5~oSWpl*fhohL}9edBhUyQ7tvDQ`R~fiFQ%wHras_CXO^xKF1zoNxXE zG(2^UL&NKNY0Q*dOIs+8pR@To?4^7AZq6beC+k?rB#89ny+0cwzX^EbTbreLEni&J z>5TV0HBMjx^(jtGg=6XNU3nh?Nv}u@Id?DZ{#eX*R>|6Zc%Ht=P}Ny*rfWALP8aA8 zo%zVr-=`s9X9ShEcE9MOm&eJzfuz-Y>iITqi&EZdGqpL{ccopQM+U12qED`7;hm|i<-M=Y0z zaAADk^}mU4(cBalS$d+P|4o8*^!FbJ4YmIxN&isbm&}E@%38$-&K6c>N$Y9gGt3&x=9npO4M(_4<%-sYcpBA2L;dk3lI{r%62OG=2pHE$E? zb#5wInL76&5C{iJ5Hp8$$9L=hKyI^(wrQ#i$cC+TDN{EE4`AuAuyn%tQ4*#dGwl^P(M_Ye zRC$KAgGkXU^C7c0!IO=Nq}FEf_E_}D^sjfC^wptYx;&VS+$Ji>{fDo0dYN$SEFanN zq^hHf=leIN6dJxOa*VHwOG`-*k@mknkO9)Sa|TGWK#1^0uGf62nh1yi#E;T@pS%DT zLY`<_4aE%dZS29tOf04_8%&^kV9@g<6W1(Iq1iW5YGB2*zV4I^8W49~RBjCk^)~GF z{;Tq*Cf|o15WU7dVQDKhL4a!7STl-5kX{OTLB~uFSYx%8E0xoml>!%)ezd7jMj3xD zz~DDKsQBR~_2#uu9kvj^lk>rPf>$1WxB+}|96ZJJoU=1R`zP!Phy#b9XZLXESPyG;PZDKIhf_4IFju$y#X5bNk#5- z(d?~7y&qCJkeyMgR6lw3yPxS*MDVs&9w5VZ#FEQPjg4JHxaCgkPBhAR4995Q1sd)X z%|KiGik|4l^`%Nxuolg4vK0_4z8CyXKRcI>XN+Ic&+C?2*%p}W(8)~{h(tlXc5;xm z>a}MMuA>~m+kZGSj`+m9Awium&l9oc**D4YKzFLaYqJ&-xZ?@(BVJgd_y^Efb0-4N z-l`Rss@K^4T-Ixc;N)9(kPYDZre2hhSP{p_x$R_(z7yE2ZaHGfsM_>DSHq@*7EC~a z?vI8bp7()31I!UU!sCFdL9793m>QV9-WxX|&{gjiI{=mq;ms)PLXiS{pboSHYX5Xj zwx}q1#EwaU_2ipKh z2Ke4V>4eudPf1y&m^mc_FX>lnH3DIWjQ*n=#vUeQs_}m-3Vl z$4y~M?06FQ2D}nf4n2IBs{^`eSXt@Z?TPqtzxHoU`;BxD22p}@v*%|4XQIsDJ5>*H zJswy*xGM^3&o_Qj^~hfo%G|hfCNCr^Y6rS{w;t;28!~rD7L=6~Ri*%;He&GZC@%+P z$N$ur$FZc~cHP032g)8bUI!bjMD%1TB+44m1v4`W3=B-9`2$dgFuOF~p^+8jy=h@A z>F2^kg{!d`Chku}>SPuN#@ zW9aHn+yz6>g&5fS430KGZt{{&&VqDz*3Rjr3pJLnR~2WQson-#d8-0i8TL5dt1GeR z9Y7yLJm&Jn*~%$Wn@_wBQwE&NuL=!g55f8J;5cmc74M$6VNmwPKd9nj&%Pn4-h@)` zbu+ERXmA>O!IM`BG^Tzts^RAUPuEvkGt8p%)tvz#1(q@9cy_`p%)mrOk}uYWWSYbu zpSmLLuR0o**->`l#i5e6F?I2F!^w(#QfyE?Nv~_dbYs4Zk*!7WO3{^U>}Q#&!___2 zdbW~t-?kex>9#H|AU-1!?^~~6`1t^n_H}t|lISa5!fn>42C4eG$#xsZq}UmgydpWL z!q1Z;<89fP0xcGcww-15%UKuGBOohARNB%;o0qrT~UYWM#7O7r0AJqvz9iX zsj-B&ZaiPb3u*|!(*+yH8>lQaxOV2wXt&d}{E^Vh>w<+kW&FC4(Z4^~Z*@CmZ$BG! zvSG!5vo!kc34>j8UsJ~fc zzfII)9tt(KhUH7wJU=r;`2yiao{U4s+Eck8w4YM}C}xe>7d=@ltySeM#%avX{wBMl zd_Fw9HOVkFlL$(Ub3a4(F#qDrI-Fx3cy7I3LV=p%C3vdbVV?!iFKCz$#bM>_Mt`U5 z@(O#KL5#=~6O>-Y@DXErcg>UzS2?xJTQ3h|`^$|om;UICm`LM?z7QWZs}VU;O{#6*8f20 z3bu4WEd+))8Esu!W#)@CnrOiX)UkAua%$~^-Cg*!Uc4g)U{&@@X?``1eupknqaJoI zM#WlY?EKDEH{Expwnoq;Qu^wgqP?=`1BzcuzMAaG?f($kXUI7HbWuZzK0huFa^AsZ zwKfP{Z8xkkgO_xe{_Z7xxAg9aR$Jh3V+!bYFxB{v4gj_x(sW0XhH7z& zcFElJB=<&uiB*Aah(<71A8`*3tN50~q@bm;CQOf`9I*aAT5^Vf#8FFnLP$7UavZVW?qjsPWR@MwEo#(UXWU(oL*`tZlW z%@yyqBwU<%Wrfm~$)kU>YEcz#NhEcj zGV;r(Fs^4`ToZ4jTzlp!WLkxqr_MIKJr9i3e;=()BpYm&EUEp8LRg%PCFXpIv$Bf# zz!gE|riK%)sK}OYq`oI%o~0e_gfk(Zwz1S}R)uEN)=MiZ+bFA5AF%S>>v}(4FZp=k z4S8(zt4EHUrnkRX_wGWBBI7>b-&i~Pwbpj?aqrd3B{TPT78@HGrEL5cV6|(~!re-$ zg8aOJM?-Eo+rmpz@{pz1N&Ui3In^+a-$y^)?l()R6BcFdhtL}z{_0Jyx%AYF{=VY_ zH|UZ-MlDWKwsn8WpRB>lX-iskE+D-?L0MID`kp>!Qr)b4P*IU8fT%?C9Vro9^IbH( zBU|;?!8!2me$VuZ(1^yCS5J&w#YrjjR1SjQ5hg8<31TFTpZaC*M+Ewp-nh&YrWWRx z(R12CCuUcG@O4U&Vu`IUWYZ8UW|3oFS9a2#d_6ER+Os$nm>(vxd-Kxe#2y^7_e#wS zc&ib#y|STKycj+@29~ifY-~liyB#=ZaI$J}vSlxSBbtII(u)bR5Jv4s8`=>JDN?D{ z@~eIz;HmR7H({MVnO?L!3Z%t_y^*I=xast+vz;u=y_*lO!#S*de`6+&)q8XMR>M9W zO2L`2$W|;Rr`D_ZRa+C^W$5o4HT8}aUeTWA0c1TCzaq5M)yP}Rnzz5E#kiU@OxS}i^Hsne7DbI}8tqTZd~6s3ZDyD5J4 zZj%*xWX4Ww6ZTI}CaUF(|4!F?&+L%#Q_f%Fbcw+($k*tY_RVoCEAx*%brPaAcUI9H z*1LAX+wOxFlyv$Sw9 zPN5YR`o70H-$Ln;TbG9hZ>F+N)~nr8Jb8O*`-T^2^hMW3Dw1dDrt&!eYOjnN;OPOc zuODvCh8i|r1Ilm+|LYjZqv~vhx9*-2+y|k z_ST0tG<-SUwxVNnuI^0FG|vfoVEX2f((3OFTUDm-f)v)JX`1h%GR2;$BJ!W`#$cF0 zX>%JP!LTA#@5|oLkh2Wd36qJC&8KYHTnfP-<7^)`j97Q)?kwRYf4r-!p}LuGpM4Ln z);1uYPFo#@HBYqK%5TeV#^9&sr-aXrez4;Ca%AW>eexlktAk>`>yyL-HD;-7SB@A3 zk5h9EnPH_TH}uUlRI|$Su!j#U@Z=U2KF$pf&xV$lYXCiX_1ud?!`m`bE+t@}0T`+j zVRqO@&c>E~<%Nc-;>G9}WBmM}TBv~I?*|2FNJ~lL3zB~w8JRwFa|P1CH6a2mj{5zr zzlA%`c^ASKY0Y@{IXutsi_*E1eN;F7(-g)S4EBu8TRTA~8QYv@XQ59f{`}%(t~sx< z?3YfMBSpVrPjytNL%DskNUe3=pIZ!MjJdMy%y{2L_D1Ji$k})xS~r1M{&=(bDF4o0 z;PrqQMMYs4t@d?F%C?BldIDN1Ktr#}m@j%g9U%uzWV6Udfl}i0&u70|&Q5|pwj3U_ z6pTlFzt<{yj%kp4CNV6*{3*C2;o)3rjRDKQ3+N4o z;+yw2G{Nt7bK5V56V#DU?*z^#ybH1eVAvM)9 z-{ss4(<^{FQWU1g-rQ{QtuW3EdL5zYlmR`m#?oiF8Alx%zhUM3j#K;zCxO(tZR{fL zzA`3$=#rzfuKo7V=^eX(oF)gcnZV*VnDx1rGR=)8;>+Z?igR1D_K?TVUS#{P2&w;Gf% z&DEla@bKA3>%#<6nS&w7UxQ2QexyNzuyhJu`3J#dlC-2XreA8`8d^D!v~q@O%11*n zE;z9QJlynq-UsA_7FS?=0yDDhqn8;E9zCc-aM7-vlVtdh2TJeDG*lX&y|$SJ`Q7=J z(^^Pps87}U!9=4()tc~jgpDxRGKz{Wms@%8;H3-@<}0hhm%Yfxo2Z_P2UJYr&Ba%uI9V9P3QP{s_JotEzI?~NWjy54_s54(gT*$a}DAzh53}&^6tQhZbwov)57H9Tv!4Am9Ks0{u{ZhOJ#?Ye&iN&FaX6)F zhJJMCEL%a$LLR~2qd3Bc>v&~Tf~v?xz#MR|61iEh(qP?*B~n?h@Nd+`E(XRxBt=ni zE3=_NMNm+PR{y%@(2N^FhS=fw%}6hod%3zVJ!8Op5!|qFuJqft^B-C1Bv@KnRwmq_ zd`N9qK&hc;)(o!X?2gy0c&_g0GJG;C@xGAN6F!1rDy<9qL7Ds(m`$uL>}~<;96LC| z6~KhBqyO^7%E6ky6xNH?h@JWMA0ZuFdCr-F*#Ga0SJ;;tZ?1h2f)FEh4wap<#9=MNQ8oGAGM0kfC`$e`$yvxHxF}>+6w{qKFf5=F( zAnYY7h2acR|SN=o+H)2T|QgaCD6roZ!~?5}PJY#MCd)HtY@7=5N|=peu%mPUqnML|tEb{R1pGo|BX0Q{j95ay=-<-{A zDF`Bw)NXybqo=2OUjji~Kyue9k;))s@7s~vEp~R3QiZL^oFKvwv&LNpsxa2+ZU*iK zFNaFP7k%vX&*m>)5s(obQ`huIFH-gbevMsci_E@^&h{_Rv&`&%5@lSiu8&=Y+nl?j z{M`KUZZ!O;m6EQjD{HHXKYl1COZg=ZjSQ;*mdRPI4Fe=~HcDpq(dwb*w^8+gJ1)DM z;@O`+1~aqXd?x-L4=mHyOd2`uuW&^uAAa7G28loXQTsXo3-&a8HSeAoFb*vxPD zS7Fe?R>w|?TyH(Ic&*AuM2a0-qGAQmN*&h)A!-T2q9#?!Jj#xHu*Dm;n{{Q()G`)r+#3>2dy@2aHGA%s z1v8!q9!WFg8^X_0<2?IU^ms?KIdA8`3^d_mu+;ycH8A9A!(BK7B@wUhcoI3^RsRm` zT1ZP=UusV289X3+7RenY>V3HU7#%&dmb{cIx7l4g_3<{zk^!f6S>x%kf*&2{ZDsDL z#xL<#VIU%Tdkt~UE=buwuOHXlH-G6@R!E_(qzt8xZt&>Dpv8o5E);6!>+6?W=bU$y zoLuE2^`i$*Tq|!G)s~exNip$($seLBZv)}>zxaIwb$a3K3m8&mo@jB zDm7*!)zzLIFFh(q>m?dXX#?k zCzFTVw#!a?_Tl5uGx-k*&69LQ(mA#z;#Ni8ZL(W23NVrsRh$%sWpmoj%%BKcM>Oq9 zL#BPkgiqFDuSMyF;fOom+uwU^WYjRhX!!l-)EIc7eJLz708L+X)ZAZ1YBetIjx@d? zH#sSpqYl_C2_bLiVUDz3(^{`|>Lz}ysv5_RP*+ihWH!mAxK69ar=;9Trdz4>`A**e z!E3~fGxi8O5D1~w_kGRHQPEN=$;?>>;n6bjL-Av7$@)kP@VU|$%zx5LBp zo<Ps@bIdQtMh6ZZG8|i5NOS$Tx3XdzB0J3IxWD7J-&V#e5MZ{J(|J8ce@(0V->#oM zcdlJXxDD|hvha1p&WZFeeW>d0Lp8N0iI|W;sZZ_GR#dV*T7S(GRlcvU?|KTVc#m|z zz4SG%$mlj$W0R*7H6aDKX-lIzqQ3=$U#eEKFwhK5)F#i?E68sHalCl+Zu#a$)-g zM_2;3RJP*?SrXx6h9}HogRD4;cd2ZN?y}KYD#BCa_|2rZeO3Q3{~<0&dn&b`)gzOx zq8JA(MI<+PErY9Aj5jQ(Pzol6Csvj;j+eD5eJwrDv)}&8gQFacWIC9%7eJ3S2Vu5i z*Mz6<^%zM z>xPWNx_-(X9y9FAJ{Z=PioLR*Z(lTl=rB<`m`bx6D#hQm58hpB-nQ}^JxbL`7c=$o zxDTbl+*qrhlX%t8UC~3+T_2FvF4=0zv*a?e&?+&#M;`+_*H{X@jw#!5ZiI}&Z`+Kf zE`=gx$H$lIktb}abKxGCU4ip&rkK6n!2M>oXDmFMHV5+CxOJ zFLf$63S(BHfmRa!MVFZXSYCV2gT4^?)+^`|la@)0loM#Lp6}uk>uA$DLf+OS6OZ3| zb^ASkaRIFX;jSzt*RnKeFJX|f0Zs@5aIW7@)=XxQb?l11&yP)LNHs+a7$}|5Pj3>v z-$jRbjB{-JzV_Xi8_h$))mjd>)Yn<5|ImJ^C^d)b+%<*X6hAocF@lVq(AuB)O7(zN z5#^@s6-4(nzQNK_NZ)mlTy#cuaW!~}KKo7t%#`9bOJ zj!=2LPIx;%H_1b2S;3^VFY>0LhIadT*BXj@Hxf9)@)W_S1Yp)4y(rxu_ zdNVyPX9sy+vQCJKx#2YW%>W|3`A!2tiMu^PJ_(U?;>{Y_8LPcfbXAdx`NDgdzanA; zPwbrNqHev4C&USUgkDH`_J2#11`PYLl1d|H5jo6nYRnGS5ulfid?xamegA2K$2ornwccU zB4?3KwFx1q+q0L-Q3YWmX1NF)eOZPAXYfpsuJxazS6`O)w6JF$4$-ts8}KZ`n#q>k zneDn$8*APoSPSl_`+d&b2~}`=IWa$4&q(HAv}v?S-WZcmm6{b}b?a4C?3V1ouXqNL zY43G+Rqt}-ogoQ|C_kyzn$3BC)zoi3ysxU#{g@c5Dkfs94;L@KDFRxSN(=0)= zsA;Ky;3hnvD8fckF;m^+$$cpBWRXJ}P~f5Fs*4cb$@%mR%!#Wkn!SKbRD^P|5x+}Q zn$k3u+>8FpzwDQ@rR?OR)?GDforLRwYJrriBHvSg^!umxi;JalGz5hI5N-U?AweYq zOy@sW5m!MGf76+XB=pU%%Vft}GiyBQ54R7W?u(G<6`Z~DRm);#S>2rJLrotkD{4iE z06$qD7;G0lMb$mI^Fw93$Mfo#KgFJ<)&@TH@rJd)@*U*}1loR4+KAROO^`e5Y$->c zf!!~9=eI(6w!O+d&aK*(BfbVtx+6j}ps8_+wQJ{0q3a}nK8c`5Mmsl|rEQSfdb-_- zSPQlzw>|wmrz3h-|3taj@5~$)wXsJLF3}m`8nnSU;7JblnfzhE%JD-4MrY8hXladnLBx6>JewtGv914wP;ZWlB#8RVq zsi3pk{i*TR<>3^1sh@plb|NMEBSZ0%Zx%Q{bt}P_DKu6*_NFK)R?ebeK?ld6m2-Y) z;iY>fFXIWzO${El{j~6y)Nf30I61V*N=NBKlk<=W$=|U~*Vd_4eeeeAe3%f<>4V-Z zoAY~KO{7gGCD)^>crDU8FHBa;rHwd(rdW-o_cwa(ac2Mi2dlWb+z0dDY}`v^`f5ug zyAk*YqbcG^Z+A`eV-)M<5b{J1Qj5E$V1^o1rO%m2(KcL{oZ$QShAG(#_D#P#;&L^g@uN>8a%uv> zjDBTN;&zlkWBMM3Mxr{!)gFDr4?KNAa=&Z6VBo9HVUeoQDu#Mqel{dHb75xs~t zU*Q{iIg`$C!w0nX=cZ`CD_$~UUda_vjTa_Jh_?8K2d{-p?bcVfZ*JdJ#g>?3BbZqn zD`UaQkFGr}ccY`IW;d%Ppe@Af-+YLFve{$!-TZ{SrrD?tU0-i6i0dP{JbaX8r-=Y?eY#Pd zhS0mO>Pfd#7dxG8ed(WQFNI(kU1}fd^5D878=D+37Hw2up=lah01KiD z*4&^t7Ond`ljTDzRPx&z7R!ZoH=LbsFnyl)wN7eu`BUEE)ACQe>~qjG=URVU)IsXJ zSyh&0+vSKq$BzJ!g=K5w=>E3;f>$CRr&MQP*XT~t{O?~?cBF1trx$EppWpeCf#vER zjEAGpj4B9`n#L zcoq;~$6XzQF&)uH5MNHTVUFhLFKBC%894Hh*v5wV=;f4`Lqv1TwGl&-ON*AM116*t zVjP-xzR3Sp4V|*;T(bb&VG3-d6OB9;;ZbrDvYtoz6x?#n!?m5iwC$mXpcdo%&~;U} ztZ&y`gNa~Q=uJxTUd{$j$CEWbfo0BU9ID+pMCi1UoYFx9nRN?M^Y?pkOLzZ$PNPlc z3W#%Q{V-W7$+p`%f5gtq-pWfaFZVsl&nGm@N=&+eN|4nsLbC2G5g4XiQxzc?rhL=d zO2Ifs8Z#|!41Yr>b|C-q0>7vrQ`i|kR`R0@aZ|BxaQE;+twco$udJ*j(Bb<$d!J-a zI6?G9_c42#_5K-m4Yg4wQc<}{bba|iN;(o*V@+jfRN_!7t`Q2m9Y7FRZ%G*zyL^|$n& z8WB#-n^n+iR~`L@-00SSZVg^7upRpkdm?(C_vzZ`;?!fdU!x-pw}#;cotS`p?0R^} zl7b>5H>{P73qk9CGmLrvOZ1$>t^7z#v+>c>Dz;rVv@AQt1@@;o4JSe>?|WQRMseVQ zX>3{q7~G;hTty0Cm#SH-$F;H~=LsrY+IpkdMbd7RX-6w;~Y7seFC z@N7xlv@h8g+rq)EaJ68;raH3!C@#aVCG52A{ng^byiHb}jX{Yoz~##id-N&g>Dx9A_(Fxxhl zko$qNi65-hX)(Gnv4)}hYd@5}`&$JWrrF_FXdI4|44>nzLyi--41@K)|Lxyc`yR{M)RcAQ7ufBxM*ymfhfvw8h_!gZOf{nvs)3p^Qgd&UU+>|O*~ z9Jp8g!VzDkhq4?7 zoo+8>JjctukjAZ=)AjRHPN~vlW^FVJiM$+gE2U%U0k~tD*FrMkrCXJTZ1C3j3p|%& z<~5C3?ItDTeJiVaCJo5%@^&@$mh9{yQ}WKJaXntm3h&1qpI2jV15@*A z@#~PWZ9AUKD$eH@8Cjbmu+UOoSs>H^oRhXTUhzu}Eq|S2ygN;(6C*X^cE6i{yWigc zxy|-7aBo;_-Oz}az2Jwa#!mF!dovRgduXu)%cVM`SUi3#!h&M$J74X%gB(GP!|2^g z87Lwe-)gXzM2?NMv_9kQq;5e#=Ex*nX3iqB$m!wD%)G_bpB57c!J(;(U?e+2L8SlI z&CCaVt7O8IHofU4w&ya8-X$9>QC43?Q;*;;$A69H|28Ntow-L%ZFT3i=O{%Vn>wTy z?E-?Pm|z+Td3NwSgn|0O8Yg|R{c;?vtjZscRFaC;&8757eG6JH@&OO8huLL6zONCH z*+XZuI`(|%>fC03b{ItdZsgety%DK`ES~md7#B;&8*?U~L!)wV5xq1b%S7+{UriW% zU%NdXa5~S~QW?wM@phVp!U2si5Bi;`^An)~%|48fD@ zX{<}@q{BDA?LSOt*sn1cbdjPSWQJ2#YLXP6DETR9*nQ%U(;YyuR-N{!MHx?D^Di>h`uh?wn)y<3dK>rVJ7+2oYy?8?^ zAEKE4tEsK`fNyeBJom=KEBQlgZ1jXfzu7aD_{1+^6Mlz474ZI(Cy`kAe1Rf4>|bFQ zNOQKaX=tV0nfUPeBOf>SuYrNFJ9~T4s{&NL*su&csNOU;n@V_LLQ|zZl(x6GzZ5v< z9h1bJSLBU-PaUngB_g7ei&ti1pO~7umU%=YV4^9(CS**i!> zfL^ZS*F&%B*sZl_+Wbu$rM#dlDCF-^Nqml$JTIZvw|M?*_O)wno~|U+t4M^4Ir*7Z zT6}8Ckq6A-{qx6akF`4EkYgiGgg=N9q1wnN4=g~d#e>V;y}i93`O$&S&V7N>$FIzf z;Kvm5?jE35$<1U{fA;Lzm#Qk20U^O#LhL4ED5)WOs#ty)iInm=`(w6w)Qs$p_yu_4#)>_1nBS$?TwV#D9&4Hy8lp~tE=UOT$n7;FX!OBO}X-kOnH7IzEC*nqcMl_;q%YZp%`FNR;3+ddVB zzvAmh^rN%$$$H>$!SF~x`NfWXVUSI&EtQ*_i-nM%P#!Uat+J-V+SN>tB)L41yg9Me zPQ;T)q}(&V^;fJ+mp(ji2$rW;{edVV{kyDh%gD&sJ+|CP9TmKLm$kIi@y^?yQ?%NI zAvnK_S3Ju7hwe7m7vAfmwJTI0obsZIZ%!Wn2OuecYCQcP2r# zi(4p;Si)9`z@;-Q|<@%&j zxVHLkCdZuf|2R1|kq^z&S8Lik?IM;5v=$3rg23lu{O=sw$3MMtnEn$dfX31s zw5FpKV{w_qsN3(b^audp&h!(}+9lMtBlP}K(Am_w5wA0g`Vv}vq(U^}#3yP=+C_H6 z$01Lv+LVTo+`(unb$qGOO(uYGA{Nn&4wyAoKbJ{Gz&oes150l3W`uXOXQtR(lLbh{ zJ}G9Nyv0tyOggAlO*wM1`HJ&%Z&=>T`MT5ThVvrKH6kJaCg(rfJSY?hd_GT`n2;2E znQX4xE2Ycgm%n#FK0}XBs(sJFH^u3*o&2C9nmZ!&{1}ze9dX^G8IP!%h;+^he~14= z+FOQ28Aj{EA_yoYqSB$Lbb~Ylfs0IC9+s9*8Wz95>D{s~HcV zoAX|Wy%yia(w9dxvj)1C6A(;tGl@Or6dC%r^Q>2cQl03vewO=g04RL8h2;5V+&ag6 zr7Nj&#gI%UqfBP(q>jK)SDewSf1HaMW1-_FC5!IF z`NlbxD#kqNAgVdqZVzRKyqN3A{ZiyQeWDWQ!?|jf6Z78K6XLYAmWuKij~NLZf!*ro z&6pr}mU!ve=3nuLoXXCqnQVG`nVzHc9%94CMhx=X<%Y0HC!)>2>0r?r#m*vf8D>%L z8tzt-X5r?Dd(hnIH+PmgORx%CT#;J&oit$=;V{>P4mqN`dY$KYA~yk3X>AO@X#Z8# z7y(s?SGfne#>EZdCEbEKdFv}#K@4A9^GlQ&wT)@x!DU-0;@@@>DhXeV zG7B+#XJO?4EtsI58Uy#>jt$|F$LP(o#X8&!+~IaS1K~6jKV5s@hb?BZKv|+I{y3uA z7rIE+Ij1=ZV+wx;<7H0zL?z7y29UqurBz8hfwL_diPDLy{tK1qJ_m4Ub8i^fc-NH^+& zN>LDgWLl0Z(jR43@D}r@A@i#M{kG47g+z>t6hwk_W6=ffW|VYC_y|LXq}y*rM?rMz z7cUK+Ta(h9>2}k<9)+e}+|%4a_`}5mvz%K!f3v_X=op1JiKb+I4q|lRZbKX2+WY3h zP@U&ySMmOH*I)I+Y2E89KICtyaM>&5c_4UZL||RV^rLI%4|-!ukXzzlQPyXl0P=kY z-Sv4krjghYzP0#;+GO`M1aFGU>BN2T&1`hpH5n=Hxu(83FYoBnC!|7DzM{YRJX_)I z#Ud!m}Bv4{}$LR-R<->`P8_OwAr$FKSkMlDY9}`u&SsgQf*7aRn?Uz zBASzEL`U$^-5MmZ{q%ub7gYC>HO!ys81I};hLJ#;;R4^+s4YfK1x~ZPM>B*m~4?;9B?a6Kw`dg;yiJZ9<07D~qCS`R6ZItZX zgfo=)#eyOp8%j){&z&=y9Q^U_4=182DYtvzu8b3K4kMuyt*hvG`Udl)&&VJ$!W(bl z-!43V!RX}wO?do-FT;abdBSiZZ-|;O5i-*)rfqD|?GuH%hD5oKKwPsqy-n^B?%7tB z@XUUbO5CGEL)%X1_NH(0nnDW_I-#OeO^7|+HVjnEZaNR;7jtLZP4YJglTk;_Z#>)w zD+1_@C!FCvGhbv0c7kB@nBI-)pUREs0O?x4E8yb%5jMul!Px7{1L72-2u1IRxKxw5 z4z0_EsE9aIlNIZ{caMA<>hEvwT`M1n3-%Z5=e;}gX0Uk{T&JJmJJB_wJJZgw(Pm!* z=O-vN3a)i`y$_4HJ9;Bh7-7R7L!whx?v^umyzrXm_nz0jzE{cq>q$LXA#%7IoGtBa zZ&P3xMvrX8=w9OxSY`b9NWJrRZzVJ9uN^KBnTH{kqH8pAhG!c@KK|wXA;^&ZRa4p_ za)?OOwdL-XcD?@6Y>7C@{0^Z6WaI3kfFNf_fluXIay3G~&dnsxMe1$_+lez*K zwHTtb_x5g09scPv-6%1!wZ-z#2S}8MTRD+g0_7mag<1QB~r=YwbBz5Pyw@ohim97D7p*gC#=PdE$ zG1u{fqp{hrUil!6W@v9TZ{N==pj)(7G-KlNs9Rc(5C1Q>{tZLM4Jb~gurK78_E0== zuPG_*W4PO`WoO8E#4N*{i*M>FjN%-)o-f8s+_u0=J31A8>svxGtLn{p7%^lSZ!ofa zJy8{>$(SV$s~)G*?!ORFuWak!-QL2g#|NrW@6zty(#(%9y2ekEl67BtI9RqshAA|~ zgI+EM?KiWb?kC&EH_Pav#IJ=Ek7f?h!hf=q*C_qwH1?k5-rjnz&;>%HCEQ1B!8%9bji+}EvM-U?OZvPG%=2FQpW1q!U;r+ z$JcY=c(&gy-Rz-IM&o5^>RNk4mR7%Y;lrAi%TAUpzw#|^gN7HzlFqySQ&)~o;bu#- zJ4l`bssbs^GCn1&d2MAJ&}&cqLF#Tq$|rC!K6aq zO1NLKNqpeW5F%rBg{Z2SJvR@KeqO`vS+kEFf45SM*f!e1e(ESNJ%(4)FlxY^5~5sg!E|Jj4BdCb?YyDRep#+#^C<*oxa^DT}-$@ z&lr2Z;#L;bkxIed(<`EP@gm_tVsyq9yEk&ucV(a00YD!`G6g%$_D*0nJSM+SH%}*v z{p|O@Sie%+k|Bs944DyvWi#E}S*1lwP+*5)upVS_1bDxUY-q_b1#{junROR zE${#4z8CUxnegcj!4dpQ2DS_FuBV(z6Dl3$=;4s=FY90@;x7FzXk3pu5(j>B;Qosr z%?!K5)y3Ji&~M6kdD*sas!c6^x~oZOM|nJ0bzMD=qKqa9IaFIFMp8YSN@_iP4xs#M zz~Ut^Z|qI;ann-RY`r`&x%7fk2aZf{)Q_}BB3$d)i?!UAZcI!97n`f<3Cu{$>?cIR6`2g8W6kSu_Y)p{Z+m^Tx`x!1f9t07{vB%zUx8=)ffl^I_vYw2TWLoy6M4*Y0XsqTxN@tI6@@e2RsqR#u9}v5 zj5BkEoQb_vmBUOEjc|F2yA}1#EV0@c2cK)jgwCO3$M{p3I?{B+r!T(Z8#%#>ZR%#p zwqH(_uKATuwEGk1>!X(y)mQ4~o&-f*@!dK_vp?Tl1{#tv<7diYWy`_XPB4|0U5F`N zpxgK-k*Fh=7aJ*bOB){3YD5&9F2~u@6T_>1%~5;tCdfuRKlhBXL0B`Cc0Lh+II~|H zYcRZGiyJjYM~kvs6jQ%2ZOsAjtlHqz07qVJntr$$@=Ysf`npRwZf|Wkyrw?b*!&0N zQ{4;cGC2|ec_t*vp-y38rvIg+W}8|BA7-`~GB-s1`~DRV(v-J< zEWLQw;GK))ybCVdSH_zqOEyY+$J3^MoQhrXD2qttE_U<(X(65A=8tSiziE#|UR$~7 z_Dw;3t9#YhfImw#?!w4Ovh3p6-+H_@*x5H*{XwyK=ua8N`wND%|1EkpYy>o~p|n9n&#WB816bP->D>mTh9wuL zR*@M-6Gd|L#V%NdFnAUS*b}ACG%>iXPGgIRE0JP2-|UgAq)f zOzX7RBf~p=Hm5@*Yt=9#Q$G+gt#J4O2M=DramtIyP9Jb9PUKeo%^F3xSwjOHSyMf= z#+SL*cnr|^N6L~PA_4DWb= z$l3?^Cy=~eDOj=ba8R##ioN7ezxA;HkM`8Zp55IF`qT^TRU`L>H{8O9e7$Z6J_a8^{0jV=%l^L%-9EHRuB92 zIo@$ADSYf(!edibiSH_Wzb|e1Y1-mklH=Eh8XF*Rsm!(%(dDX1EyKybV#qoFnvqhq z;jZ>kb+@ufiL&r$-P~1m6GE}TUK z`-LZAs)xs6c14G{^V>v1Q^zj}5hS`R(DZj-946pgu4g}}MFZz6?R9JQ6L}2ohsQAJ z1kz^`;mRJK+ewDH)_J{%J|gM;)*|E6rEo+VF-l4*zw@zLni*gtQ5|FmHb)=fpYN$}lx(0m0qa(@Fo&uWe_Z?CmQBkCx6Z2D|p-Ej*@QBhJEc&Qp0@c6= zLr64>Bc_riPTsn3Vq(S2gfd3D#8>hkHO@PSExLvWwFe|`>Ly@&i{x`2u`$xb?XtYb zQ{Jh*9deA}5u(#-+~rsBDNF0Fj8c}@!D6nq+x~%RL^}nd3_KlZ4r7A&sm`th`}>ws z7WtV;dU6sH?^4B+ExV`oc)G;W+ne4ua)(^SY}?AsP>k7Q1}F0#Qa^3*fve5%!K%e|x&t zz!>7}oO5UG{AfFg5prTj{n=D{t42sto}Yrk+{yA&-#wn|U;yphzzYKK{nY^G>zt(W zzLutHT=(;vz7P(yr}Nj#(D%^Qu|5+}DQBd9gsbfGQheEiFUph1hNQsw|(Miu6)fPJLuROkogZeosivxyn3 zkPVu6f~rr;laA9Yy%1009&V1FXQ+_} z!pKPX$$I}P3G{%|mU|Aat(CHeo_dHNDXF53YltQpaaEoe;a^1*_z&tY-*aC0LZKF@ zZjVZ{sl0a+YDc$Tg8B|$Xp_qV_K;QcPtW{POiR^Wx7fQe#Je9wCg ztL2~bU)k?K{*^C+UAh{Qx%((oiQT21Yjv5-`UdUS;U#flJ{j%&M+yyJA5$?0FmBLR zKF7^uFDZ<6xw8!Pg6xv}SAwfad&rf{CaEhnB&Khw*}>1I)9fcf1#;SNEtWODv2ZsA zR88RPWr>}GL!1{GeS#QAL9{mG`eF7fpF%6Oi?5jOt=e%1c3j&y-hvFKQM#{|`m&}5 z4$Dvbc`{F<=zAz{FBPZJCUO~>6U<@z0RJY`RDZ^ru{e zazTZje&Qj-$-T;p-dx{mEP4})az9oOw+-%(oTXw5kGxx{fpL^ToPhl+fYx39 zUkld%TVs6TwL)pf!Y!Y4$?=y>;&Ud{^+H?|aSm&*mD|h3@z6IE8%p2mbFtoxYT5Pct z`S8B%&gWYW>*!ji8S6_D0I$ox_07$O>xim#gI&>!-N?^Gny(_6J6B@V@~`y?KB~JcrIceWj}^nSY_p-ZW4>(>V7uTViT(NIBbq1#Ruel z=S6x2=_(WBL5s5+{*JLl8>+1m#Rqq_<4EKJ$4I4k)O!2;m1GHHWEI^p-#x=qmpU)T zPSa@^Z^j(%GX!>XytDRw@ZYCnme6FxJssEFwt~K|=~s=82^X~Dg$z|8c@$JtWBRDm zC;t4g%#UFZFT7x{blg(#IjrTGJjx%+(5b&~AY7V+H1Ty9tr2VO;>$ z@Hk|jJ!|0n40%55i}|QOLOTv|+YUMRKG#j(na!MSLDgHs(do;(f1(A3>Ld9VJ=a`4 ze!|xF>tkN|YG?Q}ZY07v68eU(vT+S0RDO||Z1!)ScEOYmPff8@dyrJRoU@<&WcE@F zFpf@>@{(VHm&FeSY?AAV1lG`rxvE$43oISA?!KICa4BtaWm0Rr>{1O>bDZ&vND~c| z7ZYz>{zY)uKU2FCKYmDRV{M<9ZZOeLz)&ZvuA#BikxNr=v*&m6Bb+f_FCo|U;Fy{% zEtaPhlT6l253T8UrC5G&b{+m*4?3^Ft@_AlZ_!RnGP%wV9P^9dc3Xh(|T!7b`<~~Z@ zp^I&AzjqReZaUnYen81Hp#X(>)L)j(xFYBqbE}G{e0LuA0uzfK0>&0aSJ%oCx3x;n zG+_g&^Vo2Ui)lUA<5jlFD!VudSA^80Iepc{EOC=+%UL~{!H`#|Rv2n{Y=${T(mi~- z+AG{>rQ43nb>q-r=@;e*yx6B^#Ii6~d`#dj4mderJHZv?_moZ+@};aHnZgLE*G{OI z)-(CW>75p@C#M*KB{Rk*lf$i9b|D?woa$1e?FRpF3FjjQYAU+;^*_FPt(Nr?d%;k1 zATml5gT5?c?_Y9bybL<`Q%SG4W~_o7r^ifA`OUBk51Sk>nT^+1yo8%H-KU>u+%$s@ zT^NnK=KBxSI<)991n#QzexEf#mU!IdN#n@$UAUL5q4lcyS^gGkxjz&7* z3ZrcVrsKIeED`N`@Pm5o8=NOi$2-b}u1u)5Z`LSvc^>1K^yUX%z29N120$V6|Defe9wL*Nxe#ILLd+1jsv?fqL89_YP_Gvo5)OT`AerX@Qj5P4RZbH<$g1l| zfifNEn4y@5(~h#U#puo_hDQYl}gEp5gt8u#;03 zN)04%nYftRgbIdx-WZFd9)#^Z{mK~LMkm8$oAN6Xqu^0$G__&x2%Hi&D_Vl42TNji za_p>N?6|{RZ=hyd3-MHNuarm_eU>^whJFQqmb~crQvsWEvtWu44ZPiU z?=7biw1?=;9`Szi4}bvLJ6@~ID$?bO3NwX1Gfq^v#x&IwjFkSG8Oq4Bfh!(bf=&~&lYI;9Prkdbjq_nKG%BjGCB%G9x{O5YW z&!GQ8HVTy!rjY-{4|TZDOK(S?|CesuMAyC;UjB)p<)Nd++sf{vhV!Kn8WC;P_`P~d zC+W5ra-+JZKyrI+t9C?)q*U8DU=-DSyhgcy>3tzoZ60P-x=%_%QW$@kZSzWYQ7B;_ zf;Y;d(%M@5&IIUwd-}^$h3B%_xNy?cWQ`0a3e+#cD;Y$$B@f>*qS5GnClg;;a4CO| z2(k*Hb_U@JT`}ExmKe;tcUQ5@>2Aayqv@NY(F7@WfB8k+__Zq(!Z{ul?_yhi`AzoH z|M=Ql15H;;vmgv7Re_l`Z7lkH9XIYo$<1xrkC)zi(R~;yq~*0Q7WOO15&;jQ;UCt> zHMrLFb7sT}@mw4MvWI)4Y$U;HaI*QY5YcBOhhYK1lX|mUch3lsk4|}0uAbxlf{h6( z-W}9XTw`_weO=bxm+ajt;U7ljCO;>#7MDWtqucj>*JU9Dt_qRJlx7UG(-Gd<^A@anrr|VmVBq!`=lRd* zKhC4CH&UU%k|U97x^vRrK)Aenu=vr89zI?He9O$hxSjp#w5d=FFwD7glOR-Txj<%O zYR{IY>?jmE>S-s2*zj;>?6m%DqGe7{JLq7<4hvivEK^e)*|`w+Dt;(1ZIvMWtKnGi z8vZ8VS_cDeV5u>KU(J=)_BL^hr_)O|x6g+yxWp+!{Wo4H1y`0CP#A9rL0%{;RulZ@ zfBzoIhkyNtwDTT5FLWX6 zp>%*_^o-mvp6H}rB^36|XJ2QikWK)5HIZkLkH#puwTkILCqL{%JsA>`0SH8%cB>0chpR1X%da?QVH`p;wW+~oOMr24p7aq!#3w!f0U>T zB4vao)f7vgvyojBn%jQadw!orrkVo(MyIsps#khO;(c*pP8vNYOv794D~8NQlIJf6 zy(T^b_c!5UHI=l8^4RB~@L}}?RZp6ccx}%&v-}5KT*`e45f8*!rbx>O2)ZGSy`SRo z^kP#Ug!>ZY!ag*sZGAMo_DWAXtC>mkWf>`HFI3wcuojX0ip?vWfL9THNeQ;0|fB9-#HS*a0#(`NUS!5n@S=b-`0}TeM&mYQXdlf5ZRaeC$ zMBggE{(~Xq7ZBJadZ?lQeojKAmRp-I=G%2=d%ipw)pAkfTd=|OYv<@5+uVKs;)T3? z4RUmQqm}Ql-yH3lv3`9DIz{S(oMCp|(y#hn>(!HI;Ft(JBbKiR8k6Y#Vzy05K{nYnH;f~~y-MMPu{*%~EL&Wwk1q54 z_gC9qy2e_>YcDe1u8xzctumav7pkgpF_KdLBN{4iK&o*@q}S32!Jp;~Bx~IRSWts4 zMa64-imO~)|Kn`nPQb}tTx(+R^-(qGWJ<<^WNqnY;gK}E+_ko>6jprVlU2(709o4y z)fX)R-^7`yubO-c@NJfri8^gFHE;Qyf0eY<2Fd$b*D{S#Hf&VAbN8q74{r5*1t&Z^ z^8Aok{AF#C5gV%you2E2D(^{q;&N$(I4+Labz#5BsZT>Qp}kZc=?TT9bEu zW%`1fR4D*5&kJVp{&TL6IJo{7D7wGiQfq7;7hpA#?esKNZpTWiaEf(~tr+GIm+3J@ zV6m6oR9}3OL1~&9Z(TzT*u)0AjpPIrQ2kzuQ4}Wq z&hILt+%q!Dnas;2Gj^wsXo558}F#yqM&#9gs-_5P4J?zu7k2+3nyliwNTP9hYtqT?H8?xOI8Q?c2_z;=cdO(NgP^wn1Qu<&sA zH}g^N$WRNfEraEf|7EypH0Q+Vc(aoV643Ge!(Bwr7>XG~p~6Tp6@pp6=iItZH@*IM z6wpGoDth>2*>&{|na0TW;A4onZY~w1tm!2zyRNxbD?|;oNQ!T*%o-2=NEZ_;n+jbOS!0^gLn-gEa0tk9 zDYt&$ufn&#-V`&qMy4ZDCCxuP0@B;hcp7Cf<=~50i-&L7Euu}ia?k8R>11wkf~?|* z9~f|N9LSTdjrcJ9I)OhF#27V0LD^y6$IsK+k8ZZaykiZLK|lCzAj552z(V_5EY*iX z`NxT(5QuN*2OuGW>$gep0v;Z@XFKRxQbh-&uOQN$M2xwvuF8WI5Zv)Utq05*U0(Cf z+*~7UNdc_|ejJaUYg}Gm%1l`L_sNI%EnOZf9EdhNVvN6SERI>T*8-k)~!4 zMYBGsl`x*vDAp6{B7>k)#XVL+^!Yp2swltmmz#YD<6pF6 zF(gP!|4uA+JVgh~>2g^tHH389Ze)r!^2;yVrjgV_%V^4b($VmS33J@Z@Ly)G-j&?AW zw3^gl)vzknY5^+G6|WQRY`CiG++7nk_#R0Yq&{3O@Rd#`3 zNHMh7MTGo~OV^!xHcgid;kn4;dw3%Zg^lnNK1H=OA(-|wR!aUm zkQMJuQiL32kEcL>5zhTPFC+*O15X~_nEi$FZQL7H$N4A10oB62eHIaswii+Lt|%qj z3rS`~!CJ;ovauYgxfBo?q-(FlrlSiyj&v zzu5qnXU;pzD+7v##@hBtledq9t%stO|D_w##nXgmgC-1YU2g>}W>PHJpUMGd^|kcW z1A_jDoGQuz+ZGQvcX=SRz0RoA?mJTb@lyk6xZq=<;`mGS5m`?c$FKDJd^8};;GC*^ zxw`}KlwE=*Q3k;#G&Iz8d*Ke)RPT{49uEG7DurW{V-|n+6gEx2%KU3ShXR?}2m5^r zzaI4kP__*>RjFyKn}Z}SDDdOEYF^L40B;eQ$Z2+pAX%Ly*fsko*DarR<>1N`K}NoY z>iFBK9^9$k3}#9cg4Hp?#|$4}mOFCoU>4^C&S#bpo{ZzRX0TR_7j2Ty(1k4?7_Mi7 zm?rai!^t|w1ceh5N0meg?;{5gpJF6DGxhli@~ToHUWp)-G>Il0#;fMNs0zt|F*a%Z ztLruqRbvG%-1jZCpC)h4etQW#_GE-!5=%qWTCH0hRT$;1VbfnaFSf2Nj*pEopW}vt zrSLyLAD$U0R=*Gy6yyYKkY*p<*2G{cb8YdISd#z2FhW z`ZldGQdP8qD9FTps!4e_RiJ@YS>@6>MgIdMRv0EHm!~MtyZW3XB|b0AxB7Mpn}3lg za5jkdrZ2D$(2AvlK(&^Y%5#3mQPa_Yvo28DWL+dBVed~vquv-D?DAIucoWWQg1p`^rXDa|g(r>HC+3xGj_8U6^|4B+m> zdm9pubL)9h9I^ zAN;*HQ2`D@Hm{lS9d-umC2<|#U8@DprO-cQ!6wW+-o^DKiDx_9{=->il>iRW{PeVI zKMlwf0~+V6=NPavGWjbQkKv^o7V}M$*qqI=@?Q9wZ6V}rb>=@HV#ax6&i6XC+y#P` zaK~1U2yDg%ks&C8rS&uL_yN&(CGu*cd@P%*Th&7@p{KcLJd%>il~w#&ASI`{fDEjV z{PkzW5&e?6mArmKpj6`%d1Xbubwl73_Z?2Off{7W^AD8HKqp6*5%1y8nD6?_$>IFh z`RL=+n9olXhxm71dslvnyH%R{!ofeHFWFefc0H%G8QkHa@B5F9?PBv*w5h3hzsjT0 zaPC4oYyLbvmeXh26XS|7w93C5WbNn}2N)8w1_E~v4@EFB?e1|@Ko>~M!0@Sm%wu@g z#RxE6AbyBOOXoAfkTh~#K+s`RFQdBv{=Bm#_P zBY0Go;a#pY7U0u1wN~#|WWKzgi>(jzzS;K{7$`fW9~>O?fCiB;dn=fg(l>BAAYud3 zOw7)taAgZcO>5vzSuE@k3kz8D&}QZ4i^Eb{3s0?FqdZd#O)>Gdzjp$zMU%sXwy6JM zQ*-H8n983MkNu111Fmf|HCWr6*K`H8rzvVC0;Rm1p2WYNXjJ;K+?fz?pOk4ah zZbEDFw6!eq_CMI}4gHV#uvW?QO``qrsqkl4C9N1j+Cj59`o?J@r?IL3??ZXe*lG4B zX=fTgzaYz`n{2rdukkrNd&>7tk1k|Y4K&c)7&}35<`fc@ zNzp&!ql&Vjl%ulliVvbmG58ai0<8hPkb>ZFUSy*U2q<^eWPxy$4@W4g1e6M&#V0{s zfyIe=c3du$YJp!0jMt%I%jn`*|5@Uq-Uv1sK$1g6JQu#x*JY2N{wS)g?x@bsTOesfM?-SGJz5LEw zaF`YP46hxigSG1CWte8?Ket>J>hcvMn*M5e=OY=AzZyI)LlILQZB5z;2X_xfR1yD{ z3ZQCh@I@HAmLO?MIE^u#r>CNLi&A&9SI_69(im@HKYxen`I)DqUO6~}W*cE`JXvA7 zE&%lMv)(LZ<%oTX8oVy|^NaOY(B9argqw|IUE15c7Y*G`(6umX_?^ad)s4kz%DW1b z23RUI#`y$4iiGzi(QxC^;zRU)`l-6;WV+2zaP$r{7O2zT6JwI&z39&m`09$QoB)O( z|Mb^o0&6>-aNJ;yQ}xDsKcBf-O{aw<;6R8?jYfSD)t8SGptvC;-$G2v&!ehaxMA3` zIDz?gGvl;4uJ?`7`Ywp_t(XjvuZaWB2O@oTDySVr9ot+7I*7J%?Mk9{Azx99e=D{H z^$$q%GS6etq@<>?{zqkLeQBi>rr|86czO8o zXM1F|Nh>!c&)DyNQ0e@kuyrp6)9|#m2A$csPw>9OY34udtBZer`tcn!2j~BrrnfsH zLgx(Cb=YrZtf^>ujIQF*qs){A2iB?CO>>=gU=0P`b1glc?;tiB@7nvvlW!=y93YU6{!+;grgkE!*{Z4XX#Ds zRKDnTXZ^tqF&W)n2+Q)60J?E7Z_30fhcKl#T?qS5diNJ6t#VWPw9HwsFv15R26T-# zN$Jy~Vcruk)U(p&ywotL(9E-skz3&-EK?g)-OOhn7bqX0Gq1%@a+THc9r4>?}tWg$L%$0Fl=Kd^f;Are02SBlkXWq02 zhBSd6M!@hJ9HZctjjG~->!)ht%J?KX3Ba9@Y#M#RZ4zJ!S{(oe|0-ZK=-?ABHMl6( z(^)d1C0c%wbQE)#VDYfhUw}jC>=6Vq)Szt=7F?M-?HlDzH2GdX_7kh#c+HSV zYRtrs8ImKd>DQkFD{HFm=4O!xYso8-0d`mMN(hfT3+bO>DR-)!f+dZ6<*W_LQ|GK) zLVDZN%`yS|@sN}g|1(*#9?02-DoC(Wr^o*LJeL=4P$>(F=^D4VG%4syZk<#<7IFNq zeM9{T69};!P!|eq0N)mNi0?jif?1fV-!aZf>t$Ek5&c{Uod#>VBxEo7e%`HT9I&j9 zJT1Oz%g3~~s*Fum<$gQQTS0Tr3S9f#a}mMN$At!P-NzQS{ezR~`@$Y(6Rz4?iIY_? zC1~5Z@g1Tp{q7!9=jC*9X7jY1HQc78RIu<#ZgN|FcWQThX!Ste^L2>1J`TD%`_)=? z&3oqteo+~H{P5f%1qed?LHao23$WaodB+C4uj5FnN3ApHRk9*!oCWz9Rh7}2?(L+_8YiWIJ<`HB?r9ACji!(AQ6iPq-`ZsZv94NCwPP zggR;;Jd^?3us3^FX6@T+9!>EFx-z|8d-mD3w3-QQ7E!|EDa zsLtE09DVjT4Bw;(UR?d`&0v+2KY2c(e6+V9RzDg??kOF$ldZd{=vdTTyY*2vJVqXj zksB74#TMz^*oWy}| zN8^K)=D!RR_FDlZ(6iN83oannpncX#YQN%N67XJ~ZB{q7g^N%+E*DDfhu<07cUKH< z8lk=bvKC97z8Q>H;cex7@uRK833{#$S0_ zHGgGa3j+`6+lJ2SOFi-8pkh;IpAU1tfr_%2yMwNjK{*eL}( z*?#|Zjo%@7;EA}DAtR@r0T*#G@>rT1(d?8zknW(Jx&D`HxLjUd>3I%5 zjRM}O=8y)KTykn1OOqO-lHSk=Ll-{YlX#YCt5j_nlHBXRpJ`?EDc=CKTpit84IVlI z*gk9D_{7`tPEO_avvn$-_EWd_f*N3dv|Bw){u{~tjez6pFQBOE3W_(sBxZ=U`Q6hy zsh8{-cV8nXH}`ZMP1^OHJdT2ohvoTY#;xFAt%IUTd>sO_f!!5S6O|<5JW75$^Dv?T znmMn2{__6t2-;3SNfd>&9 zw=DG5qo&k1JPVv&(BM;RHGWgA4u>(+t7ZfozI{3J?A{Ir;^%5!pI5W(uc1~70D2;~ zG4Hd?uxi;yKiV6s`(Hp2xh75|Lb^^R^c&uxqnd-Pf>hrjIpNZNO6vL z-l(u4SV<1<6gHBmm3UzYk4{4)G^ds<&hVHqrC@$Rk?hNYmvyz;$4nOGK`wR}F`zoH zFqa;o(TZNG<$Zg?c&eWn%77;@_FG?p8^FIUMHE>H>M3BfgEg?e2)I2)5B@6+72dX z0*{KRT1U-5YGr~^U!&;-zN}~~BkhmNlzB!slW(ixa+@jv!W(ks^DVW`xt||h0Ja5v zOuYO&ywRY_6!62FaEs8Zw!C0}L}h2Ai~5n*A@!Nvh}Fq)S9M_O;+7K(JPc>-@olXyr6N3|I&pVQFDM#Fl53iiZ8vckMos zwN?TmVc1#;C1`x82dbR2+n%GJ_y95h&!M;^qIQQDpW&`ck za~$Ad9p8}**b7E1f^D>@cHQ-@Y5JX!@5)SokezyrDEUhiheXqfixye>YFpGBHW-$w zFIG7XsWjHt>Ik^xM@MgXj;ONy6@0Q?06`xZxwIN)(!a@CF6v*T_<<;Doh8{UJ@u`? z?4?eZkXsmDUMY0>$ zwPv(mUs=2#gYI(8W6@ZCrmg)fEM6Z0yx!UXhyACNiBf1Zj>JBFu<8Ayg@putz()k2 z8F|1;ovlNRzo*KlEX*}N&n?TA2Tb}W4@U+`muIp%EGdBYDdT9`2zu|0}B=W69{B%_th6&y_s?`+e2RRuenNgp^_ufGP>)faoeqeT5fPAglaif5x#e?c%Er@hQ2fv$I-srdU1zkb4qR zf#38S8XB~0ef=vc+B3FS8EF(WRSxE$g#Woh{|C8jmlR|$w%%?EAMjrE2IJIx^dG`R zdzEcfq5`}kR))0ME<3Gj9-&jmu#J}Cr>MPwkKBLJ%v zg8HDpK`XeBhWMNJJRLNJP9tk5UH<&R$cVbd;D?9c-bDeAiFI1Ns+pi@ z4@+6E=1BT;{@`!B{AQ$~onu@vI*J{J*v0)dkbL5qL{5>F=Zgvx+FvMkDx|v<*po1> zwM`;Ow;S;PAfT22 zz>5mH91Yezl9au^?_MlgD*5D<8sO`%7fqg}vf^h^Cz^a7Mc({bJ_69aR)WQ$VP9Tb zy`Hvuj`~GXO3Le@Qil`^#k&O$-LhKG-H)Eqlf{qah%Ut4qOjO|Qk8;C0YL#6m~Y zCEWC}UNW`o6#N@(c$XO{qMT7hspi_bqHZBN+VMT01pxr8`iS~+^i&PDHzW~L>!2@g z5&Aqa_psMwu$c+cqRqPFuCha>zDnxSFNQj8qj(CQ&+>)pr%N*y+$+A!Fyp^TD=O+xy{ZC$h&Bg}w?2-k;`Ay4|<4o7@9$bF zd>>sacOjw#e7HCM>Nx*M-H;gyZgx-&JFxh*Ki}bNv#xq*ghh*MX$p}&PJfX=>fIp? zpa}wPb^zvf_sAej^78T^LO`8n?z>rHV>_3Tgh|bGC5UP~!a!NN+ZF&Sn|y%oKvern zwO)0@e`~{n-X2``9rd--{q#e};!Hc4!MDQe>alkMbb zQ9s=RE&fZt-cO?TNv?F7T5Y%Pi$HBkOegX*k^i*U<+FN#IQeY4@thsu;M@ag7V*u` za?*PMbS58&G05Y$!xIxu&9jyRg(SG(*&9wXO2Hbh*iWB7OL=dxy~FsiJy-@%XYtjo zttPnxKcj|(L$O)OUnGY4EV+pt)gWQ$t$bl+lx(=3{wKDpQ%FS68rxuzHasZg=Hz~< zczfeCoCQHl6TBaJ#_4mqYz784vku=1s~S+2omcwLJQ4NHdzLcQu<3yiH!?#4D+`GF ziOS#p!fo0^WbF%;;h?kK6j2TGX9@}-dXTHXeh3MT7U%v{TKmVh%GqY|<5h_jJagEK zY~tj|B8gNGYb|=gKdinfcy&fN#*prgCV@d~eW}3x6S3020)2i&zT(D`yH`WgPfKIO z{);(j3viaR#MnfIP#dXjvrtEq%k7&!#De`YuG8TUz!Yr7m!w(Y?a60YkGFEK+Ad z_EYXvX;tGp>)Wx=ojNTn-~PSY>xG6}@eI%5MdSaV?XAP2UfXwX5di~47bq#CQqmwT zF(T5Tv@}XdBR!;ufCz$gceljQp`vtm4@eA+Gy?kSVcU zLM(bWkgPitJo#k6k%H~crm5^W>2_;bZxMma$dEZWb1_c@IeIEGF&`{4ky)GFlC)xU z61T7o?5FGBO4$Lx6s^!~xY$|r8F--EVICL~yPZ5^yD~>Ylq)(%*IGEFkZPnob|-pm zF`RhPBYtfRsi~zkF|Q>TFT%0x;k*$wKTqe@9!Gx--9AT*qR*uFwOi@LV@l98I3UvT z9JmP3tt9(=UI*N;(hiRwk4|6jAC3Arw-!#=go5Y&Fjs@M%~{ce^Qb~*XeCgK5c3Tl z`ze~H96A-j_5to|TgMBE7KtlyuFESc6(JlIh~K?R6f`tZA)=nimZ&;KcD>w^?6Yqr zQm3{%#*G^cH}@g` zbWc1z=+><0j-)&meo^gSQfGfyRj&X~?g5_+MZ^k!@hGm@EHC%0`zicvhI=1lH#6fF zmK3#eydy|2sJZ`Qbz|HqkX2W>=K#%Jfl1lJp3Y%LBt;<$wbw}q+-BW$>)b@WzV zuC<-9o}pRYkG+a-iUE%kQ`Xb;EK1%Vwu*RT8*#6RLJ&Lk*OU!Th$dH^^T*fP77ZII zmYKYX$>s7KXKh=os20e28kj`t>-X_+Bo}^2BbUzn8=}bj$jQtP->p@!xBh-1a^D`v zJIA6OM?#W;>nj^kVk|K|t0@Z(9^cjr%Q?B^lh4@b zvwi1%z7pcK{DG?%-gswL1_XW=TYWQ1QxUlSvbO3$ll0;!Y(Kx_)2aF8`(hyt;75&y zBG@~tsqzovk6$d=89pzS&!?`L)IaHGoZmd%@^?ZMIpceN?QQw4Ywf{0x!?r5rW0di zVl*1^lkagf)$v!n;ntGp3(XSb?46S>-%luiJy`>jaN)J~j!icrsbF7Eq80?}uEmG# zWkas95!*yZE--YnHX^pZ9_xvN|6_5g=8~xSw}I_v6ZnY}n4q`BV(a=RUGPuT*BX<1^pD%K z=WQBxYz)tT`c3)9-SG*h8~GtWUAocCW}za2MB6=GY7ak$aoMqE{o2ulT`L~p9K`4- zsk4H>Oc+cA6IAa>2Z+pdUog&eoHQ3QcDhflJw(~Ua%9ECFgsXf?r!Pk#c~mR1S`qt2jQN>z(t) zi|U&Tvr>nyyWEsstxKf3J*LoDV*O>0HgXfsqZ#`vJ!A@6f&vSDMf}&;izn251OueN z8C`bV5O+}l1{Qr_0Kh%rRq$yj23|bqYM6|+injqnzc{z+9{9U&&m<^bGp8B{BZ0$?#ija3#QdgTSCOJmnNdV1 zMc9iz-(oTfNRgLB&Ecd^#Kej`N-VD?#3KYD?U#Hqr^?n3h_wZDy&^y8FoEt6c+kXyfxwr0o1T|mBD1;TZoSlLN}ASbeeUyMM}i~v_^TderdmCT zA1(?U@&AmF{&Z>;HlOiSMouPTrN#sd^D9(EW4IMD7ioLrRP}<|CtM1D#+a0ma}uOq zSrxOzUiUekNqB9w3L*;7MQguxNP*3X42L8IWhp+u>o#vfLP$*1Hsr@}%-uu^-j*)5 zb-Ti938?laxU#U?s+1{P{PYYN*)I~2Vb|r`*GyH=BOA0r!vy*Q>uh&7q0^s7F%+0r z=)i{rtS=jB;`-=3ny!HLB)W^+<9WRd1LMrnw(GzK481LmRl)j!7u67XQ6zQ83R4cW^D38^>Ni29#VKi8nRiOy_ zYvxO&HmD*|V`KD%h5T_}NJ-~AP7cs$bt%h6@V*mG5)z_!>)Ij8lt+&jBrclu(En@!F)p*gjoqVx1I$j3ulA9 zQCA~SB)b|ZRBP|1NZ4ipjnAUdb%o#QhCkKmJ^%-`YTLjluk0ouF5~lCzYtwfurolpP;Zw&a1BIv%e@cR_XKoB z54eIxM29fdv34a#&DFe#Hxl%6xw4s#dV9a9jtoSipjc>Un)?~Ct*0-HWm?ooosBm}y_O)mM>njQf!jP6$5_NlnvK_hW|n_iH0_V> z77XSJbI6=8;uT{`0>gd@=C80o6c=U+d@WPh2~u$Pb82)92P+p2J%N!8zKh8$g^^j_q!@`Z#K86^vIhU# zoq>(tUIx5-`Tv7-Yo+e%<#`iTYf%PFp;qdMbrT7{7iD(25u~y9-~8UXE~g>DgFQBO zxzuBz3#?}*Y^KtH0`V)$S6SV>8#{h3lendnuA304LfV?;i&~w<9_dh<&V~n#*0J}B zoqx2f@x=7N{w%M?asO`!x7XlZxo$@Zf?c%tdJ_hMP6ywfqDF*h`8i&fr)pnW^Z+X( zdA{808mE;tJfzWe2cp+D#ErZI4y#K`U@3XEv)XeJOaI5N^4VeQ^JJu*`e|{8nq4lx z?n1MuJF(ixU_R+huAKe1Gi1oxs(U$iLO{s497cTkY9Id#f|#m%g+3BI9g-wAjLtW_ zX1biGEB}+Rq-0V2Ul~hVOIZ4|OE_?h#9<)`cBV~V#8lTkZXo;UtG54osELC2g}vTT zDqQ}fJNRj?ptChELJ+Jwa3o*wo7wV4>=imUkI-8_nk7j4+XP&`<6`3(=#YfaIQ2pY zW_SrSu;*^!k~GuZOS=FJB{2={f&vupwB~)UiQT6OF&TcnQW)=P(akV(d0dGqSj*DG z{$N(pAfREi+hn2!!E3F@yWIWo?qf%5*u?f#^_w&J`CCL4@Zz@uC}Uj3jw;eu4a%{KzcL=blaGb~#`d)fJ%Cf7qYSeJsY4QvA|0NzmhKA2G7v zM*_pS1pOFh+cKgr(YSjBli!G8tj*21LQ~^hT<5$SA!1j0h4c3f{C@7t z{mQ#=4QTa(*@t5vFT~7R=wl+>=i*UHOx%;;_N!B+Ln{@MtOS;ZIBSbNvGj1ScIYHB zpzP`K+`WletZdA;!}h%245`b&!AQTU7an>j-o0zo>JO{e)^k~4o6EWwU*NlA(y;|4ye)hmHOxi3I`)rLCz zq8yj-AW(&5!Ml^Ly5q<#>XyL(Q2}5U{8h|5^vC(OwZ|d|c>AhiXUqK&o*3(NO@$SO z?{O<_V@UfzY9S}t{{H^8v8$!_r3+97?AsOWQrUkB!Gj8nFT}_%F5{`&dN|rjPp?u% zxm4f`CH)7OJt z+ZfEq=u-V2!$HM4`Ms+-;o;%9WY{71n@Z2~HCWZb>hD1G z>?SxYIJ`Elq_Y!lG+I=$0;5AF)@Ep%9&B16*BH6#dN|Az7|*wk^$&Bv-VX%d+xma* z08eBTYaFBV##9l|4@8F=ciLLi+6g_6Po?F^!-^v`I=%&4B5IJ27lQXkeU39r>z)GR zWiy$}%m$UuQvYtXJ<1w!^7UIN&ij9`rV4s(>D zsnjzRpKh-^@lJZ&_wwyD^*j1e-DT{~PJ0(%!l-enJQMSA*mZd=PsXuU_-tIXsOW zq2o7u05CG(vha&N1>c=GcHi>@{nB)3c=(;jx8v)`B(Y^m$_iYItHF?!7EIvYz?7DZ z8Ks4+v`4K?l0+HEvx>rpz#<9WYfL|0snviM_}63@YxCy~66I^K!S>GOV4H5ogvx6Bi(S!E7`8zyies`W%=3+^j zy4+W{3%4nG>@3vPvoa`o(rnDl^NdU`E!y+q#PKYm7jq&6*LFrZ!5k457nKJ#)~`Ie zO|&=RhA)yWnmuTqsUY%|-R9w4HFR*Z1SbDSWop(gcBS0w?6g}9^kZKR#DjpTveMeh z?(~;2WN*A#oGRIimF@Y=swfj-oXc-5S2&T{aLn6(HzErAzyavfa-&OOt7chSM_%o6{_wf*`>*BN%PKz%S)mMprMTR(-nUw&A z)aq>N3eH|Lk;THfVy^GFN3>GBMK8kgjO}NLkz4!y&~d-p;BtB{`+*zBf)`nFjM}tc zGZg5cEKw3kC-TXLqB==>^6j%;ui4!Ik)p`i=}$=32Y4j=Ur))KrA>|vu>rUSWWKk< zTDiDLvuh^XxL%+ok#9lN-K*8zU#x8NDvYHc@o$DvkMQb*TMV0)%IH$u2PHmI=H{!J z9W@~l(?wr-Iemu>J+2RFCQH>|oOyP&-t1(0zZ67Q>3*?JRH1%Gyn9gk%#k%ew~$JW zD(Gv)cza-!zUUqmSO$CO6Fp+pu4%pgmC4i53B!2d!{YH>N?RoZWiNqCgIPL*zy~;7 zaUE>=cW?d(xo~c%>|(R(H^$4$daS8rqH?!2zuJ75cumEF2BmAOV3N7lR#_C4pRm8)u6Nby6VGFs&s84(>f;AI0g;hOcY0)Tj_ZsIrTxe78t{sB8bi?qw+ z0qg<@Q_qL@EV`Dpd_&7O0UJX$_9b)AT*&PaIdQL#*h8(<_ShI8lgiB!ZVDC{QXGZa zXf$oTWo9Xr;vuc2Vx52~dXa z-S|d~lciZ_Py|vL?CtjUEhAozj~3>QD0uJQ%3{?P=t=ONF<@?hUkyK=KWMj@uPj7t zH}AC_%ogRbMg|2fIm+y^fay~`A_tm2lP(Rar~A1Ale124@CNm_%adFVr@n#d=-=XZ zL)?o^W=Y|_1cMyV%5^Y|!qYGkG5|tgkQJ(Ua7sY146xV-&k#q)y;iy6#zN&q7ih4g zx2G2Llq?#K9T=nmDR~8NhPIx1hsT+nH`X^phGIt+zQvBrdksc(EHpSo3JKaY*bmb1 zFi-RF@J{@j0{!*j-@v9rK)_Nn=b5(|t5VDaTN`KhZwByx;T1Mtkl`_O9lLLQzh!2@ zpB?fLKmCb;6{sK(6?FQ3TsGVTX54Q-J9zgmJj;6QwQ?<*VYtiUk%9Z$gWyD9X?VIL zJe`bU-5GG3-(2Z1y8Dh>G~to`w<>QUT98^W?U6bdk8Y(S%=76zNf1{sc3k_hEEA%- z3|fi_{Sq-yT=V)J(Y(`#l-pcY{vh{gu&Qjy%$B5+{6%^k#2Ao9_`6q{cx1C))VxmW ze86cM;l>lqn=8n>xL*(X=O4BVe_HIsD|$JNPWw&)zSR#bQffa?goTGM0DneK1V!53 z$yRJwe!pN09o#w?>%8zW{KRP~!mPh9uq&nn!gnKTVvk{|5<`kY}J z$Ir+pp|7W8khJL%78S=zJXNjGa4>)d{_~?b4lm`?HEk~ti#mWJDd%vGq9Lwt;s+a% z2f;~U18DYKYA@)z3E&(C@;gSI2Uu^w(y2U~B>;|^^NlPO3L7jNJGVfgy6_jKFT5uwq0Pd=sEfZ|-`P|MP>s`aXS2=NuET^fqdMPS7}~m)w5eOAN^6DR zB^9)Y0y+hF;Q*h<4m&6aUeVNaMqp#%^e>fBQAJi%Oc?X|PGOI$G`kvUF()NF=_;a{ z{dc|eRBj^QQg$aaQYUvc7H+2QkaaCz7bCU$?*_-v=ygFW<)m?rGtsu?(%0sID_sXw z{AJ1O1$$*>a#>xC27ZEzuwlQi)I%|HW2A^`LCL*%1rW6nR9j#+z790)=gPt=cBNg* zfgelLIR|Aalk86N|ZSKy2%o-UID zTMX~o19IR`UDO_yme7P2dEH%L9{`>VFE@q&nMj4nKBc(cjITiVUK!C5PP(~z?4;d} zEEoU=%T=p4gSEjN7mhiVenuYA6FuDSmZ-T6B=vX`hmndsWe`%${3Qj}R+e10Z=XUW zW?*xxsc{3Vhx~jSNWIq@F*w;o>2X@Kv90$HOh7S8kmwej!Nv92$L42MYuR+W_h!q)sXVr4+i{Fj*OL$T z!I&z90-u7am$(BSXKpfp$_ZBsM4z08$UZ)dzett}_TzIRA+W@;2V*kg1ArZF!*x{L zLIuXFUC+B8`5>31!OwnQ2orEh5&~R6?)!7F&lwqX;Dr-9u#QHY2Qj0x(Tn?CtKgBp zZCAD+9x|B;JX7BpVH$FaRaPyMnjj4TE`4cu_C`JD^EGG+-)s|q}(1(?IPav$)-=QVWwRA;lad9Xd6$2u$1f1_*<`>}K z8WF7!_q&4y`&`oAGSF4`XYE)E^Rk|I)Mb^GSyBTE zc^u`+kn-!S-Q2~0HF|<}&uTZxvMJ@6Xtu@9TZ(f{-tDc|pb~PXGIPvdz(3WnUCjs` z5gH1mbSk8+r#u6}`3b5Z-Pe2$KnSy88v|er_G=UMYJbwWl~DN5 zYeF5I`GoiP#zI8$z>BtjvNhJ9-`^X(*75cTu)JD~lUES-%nN!=i(-r)8K8IVE>j;I zJ_I^~0Byj46NWu9yBd^b)gN+!{2t%Wl)m;i%o$Wp*L?zvn_rL1v@H_;^`SH?BLh5E za-9o>i4n9qch%q{kWyX6!+1f=EKU>ac=Ma5m zU_!K&Y~bOo1YfyZz^2qbkp{j5Os1}`#~H=N`oIs(zQR>=1j1c_XH+H7-PIKZNC8l= z3vhmxlWb`Y_V>WERZdO;>GL6YH4)f;I7M_I>mm2b&S5j6?$J)oq(eDA(+vAZtx}iA)Y_x1fvQMOjlSq&jWakdWPKt z8c1Y<-eMIKkeUOZY?1xmJ5cD;#h{UnK6Xc`%CN&Vmz6_}=}eo)tD-=^RtK2Zkl9O> z)^RPc1{Jng!-1orht5u!;4__&cXh1pB@#St%!gq$rp23Pi7al9R3oBaprlq+KYlp(p(L!ygO7%ZMihwVt9Cs>c>w z#d4e7!U`{#p+UGPV=GS3BSL|N4t&r7{3z0*%c^-dmxhuu%p|`~fJ6SB=*%Yt zu#v=1AW<06%B&m-5*>2sd5OhSIZ`FoMsFjB`Dl++IeM1DYE5`LLLQ+zwp_V`i~U4@ z9?Az-iVmHe;OPlb=N~T&%gIyAjBT;^?x3i z<9YeN2IgKVj?^6CyT!YnfE!)=TApmJ{I`8xb&AR3-^>K1me!lJY?vrE0_LT+?gYp`F;ur2dcpo zoHI!>n?h9}khr|Q8SN*@9aq>>#2k&WH)+c)J3TBQ!m}4ec^oSW+JfTUt&q<5Vwn1m zl!yj4{p$jY$$TJ=`y25FS)?>Bbbo|!{L(FB`u!03mS;&S0E@AR0zREZ@MU!pbU4fb zPSy!A2FSy#=eqFL9e_T@`CX32$krC3qNq+H9Hv3wrUW+k{w=xpy^Tbm>FCy5O@8rW zEWmx>lXc)b0oo$s+Fc@XdT=|sTLd}^@7)yv={4C;i_@^-rlW5H9pLt&7)cf9Nxd=E z!buK98;!kBr%TU>Z0b&uz@33=7%!U%hZoGReL1HMjzkJ}v&u74vLpuAe>;av9`<#U zdJ-l)0TALS~i0?>U`nh3ddyahlY$*11i7=;WRt>-S@%R-u zU3mpEe{l4RM*-}khTwN!*uC#JfuKPEV1i((a0C1$kUQ0L-%Ak@h-3ot3Y!8xp>W2K z7J6~nJ{lafz}r3lReKRH2Le_Ao&9SPh;!b z(Y$3DR-Bp((*Prag#uJi@b(u0{(94&+u)yQ-A3Hp^BW(W1>!EGX1(CQ^8KG)i9f+Q zrQ<+`-YUeKD4dBF&;y~dIUyIk=k62v)57b8KHMK*Ht$2BH2)p(CjuZo)cN3dPY#;J zS_>HM-Y!}=mE9Nb%w?_=O)dq0e3R~0e)ErcpjYpFI5_{R&Is|rIiw(?u!%xk8Z#4< zjJ1}qer6U5mph)0`;BzN2&p^a4S;$8M;$%)Ktk^9eLR%-q3C^R>3%Z}MA7D;au8EBp{0+}%UFYM;^o8w;b?e#d{mS21;9yx8+(vLO- zyy5irn-IY+5l7gUuO-Q147M>@s|!ZU?s}mh${fq7xP|?2r zQx#&Foo`0gg$Ba}0q635BtBm5t%aZJvC!-ZBm+paQ66BF07DMF#)74@pYR0V{@p+* zn2OJru$&I7$d;8+N(INvlRqD#!6guS9^)UZ@DnF^fBAJH@Aq4vAs6(N+&qxRHP;Xy z+J6;)SzdhTvc%#k0!t{(e}&>lOU^5-zB(iw;5!D zd8T0^ck(!|{Z2fvV*H*ABv=z$`$g2?ujjdL6?wl=lhdn6RXrkiaK1oVA>xx+04NeR zogt?V`E)I-*zUTbU&?L7?32$QTGC^A<6Kv>P;q5f1l~Cf`la92MooHD-F%V8QBgKl zVXgNmUPGa#jPUaF#EF)Qx_4@qs=k@K`>gk{+`W$Pk)h;MR5>@qqXU{!a@L0(8b(%U zME$myK{+K*WW#>Nf>Z6Mgh?dX$)f?~rrO7QxShud;Z};U-+<1*l<=}!_#6Y$+R+si zw7Vo9LP2z{0y>d(z&BQLI>WjcUT=a#os{LNp(p`p4j}GSr_9W z+uk87snx1D_%Y&XTWQ4*AKkt@Q+(k}T-|>o^Dv-VL*Ku>h2tfFY|1eMU;Vi|k?zd% zw zjjRk><9kQ}MLGcOa?qhmf%Txw9isS-#i zr6eSD16Om3iHPKikqYkzfR57tP=M7#{RlICZ@K*Rw$)VPIxwJgz5%`RUkH?%c+_7c zW7EC9!f{?|IER2wE*NsLSg>gwnV3N5j|h==Mh2SXWRaJ$-;fvbPaR0{+^6imw)>JF zuO?vT#FTK=-ioX{fl&SU(14M|}6xq$@Gt+98hJdn30&8*`rcgLWn+Jh z^e7(sfBiQU8okUFJ1g7KhT@V9=S;>iu>-K$zj9CWPuncldN9`FAxFK&sSW<%(}7>z z9<>X5xCBxcSB^KQIN+Y!BR4Isln-4^<1W1G_J^boL1eya!MYMZioRhGOJ2#Kvu}9N zo9)_%g?vp*D(n8$c1^ybL&?X7>0o29o6AQ8hRepb1i{X}>>~iU0Ov_>_7Mv};bx}I z4gA!|1V^2xE89bRG~{<$QW5D$!3@*ldE~(wHk~5Vmj9KVd)1?Zb2%p&iy7EYd6gA( zi-ZM?<`Cn3^lI2KhQ4Jma2&_IN|a_ zAvh}Agx872e8yrgpdV)Ga2wBv?20|La@2U=6KG7KYiBA}hIQ19bs(0ghztR^kSwj$ z)y+zR(m=-7vyov5bRsvY>pb zRVZcm`sz7%{~RbM0~lxkJNv9@8*nPrR{Q`;F2uFKlW=1SaOAqFJRP^&K`{~u4O$0g zoOOc5 zKuatySNCOKM}T_*wPtr$8;y*`>Tpqcqr;xzp5ZRha(1$Z7{HA8wpJt}UJ%&)RqUQ2 zCl|QTzi@C6FY&nkO_LVpoK&F!d}c=$?lL_e8*x-15(~%f)7)GOb#QZEH1~n#(TKC5 zVczk^!?<5sa{1sYFYDDvaq?WKwg#xKnl*&W=|N1=MOx^m0LuOM#rc5p#_eRv&zD_Co(Y@}%z!=f{tos%5P}oifpIf?t*y z3mZv#t0%p5iHV_Z@LeaoBJY3%a1jLE%uz#w!=LhqB>!iD0=Pdn6yx9d)1N@vh$X$C zQ#BugGw|JaJB~-$q+X0{uXnnS35qrX0hec0_7h@`1R{4eXDx=B8OYn#mvyk0F>%@s zXR;ufc|B{lwT!i`{oV5`lppye)HA2I0K*@=Q_}7WyUL6d!=I4OIomEnRZFahFTZrM z?6x5F@%|dMS%pZ{br#$99x9Q?@z+cD-fxm7FLveu)-3T!hrC@&(t22gQMc6W5whdc zN+W-E-egYo2X1ce`Qdet78c}0mzhCC^jiz`&{}&{D<5n<6%<12N!E6bQq%C;GgdR(nC`o z?1Eg^m6W?Te#Z`EyY3g*wRN-s|7rY74^j1q+u+U3)bwusg=Y_>PH<^R>A$Mn2OAX1l@5=K`Vz{o{OF zo~v0;Drx?HQ)M1M4#erOwI`?z^<(%2dFgWdJ~tZAEt!b|31vQ^cJjfqMt95k;h`y0 z^tbk(k=x(nv)8c{2+d(Od)e)&6{?c~z(&{h2UoOdm*WqFL@yU5xFK;Q$9t$3-JRhX zwnP;G{D08L4-^SZ_z1^d#J!XxXwyynlpF@}1y#*0sY=I<-K^uW2!%|Z{bwlYVc>|B zdX~UzZuwUF+d*&Jz#_KwDXG-h$PnH+A_UG5$Fj>{8d zS_(nFl?f@lWR`0?;1lvvv#B)cuWKp>g4xA(r(GCw+fxPcq@AqFh3*j*D?A@i%N?T8 zm!xdb)z2*G@ato}jxe_dKE8iOW?_e-X-1~Bq-&nYycf?7Rh&?P2U^EY_AJ&?rfvmEKz@Y2ueIagI1TkKl^DI`^aV)K;8k81$66w(# z_(?rrLk)qh_m?VSe&LfDcGzecC6__GeS?j~p^k!UNIJKp&;7rijFrDcPBH$aawGNG zSa%`SJeV-%$I$v^l>s=(w_k+h*K65`M2j7NKg*)OwgyY%{MoM%i0&}AfWP+qWTtAO z7SYbOsxIrK?x%Yk%&`tk;8CSvPu!j^(y<)YTcH_hC!+zcJ*4R_ms~+$++q~p^71+o zH!ZS*OwP;8%U}|B_4^$kw|g(1lr4Xc^)~db{?KQ68bCY=nB@*aziVxCo7oS7*}M&v zP`yU{sXulk_2EG^pKiY0szl~nmv;D^L`C0jYu?K*9HG-L8s;A(dm&U&PA$W1p{W@_MK zw~i`|AJ%Fq6B{pfZr`}$J@Py4(d~(XMmFG?boJ26sH}XZu05gs@(wXI*UMVi?PVkMQLqu;M@z!afUMK4dL@i|p%=MaqU*$$9V4PUw z)Fpw?EIFCvg86OSN=6>1Zp4x(V8KZdQC}swaLeM z3vyWt?(6_g9$)w{J(i;zt$B-IPaLFZoYyDrH6msmg}kEG6www-BRiNa|IPC5dUrvm z?E(+a!xQ)JFYUn(?-r*Ov>u>$)GgvGHH!y!I2r}FF>9j9aFy}9n>ticXl;A^+w7rMf@l@< zPy)qV2~xw}-J0qym_i+AG&?)PT0C;{%}I?%-@pV}%y4>kc8{X76Q1XfW!O^Xz@0nZ z+pB?elRTZqAIp<0Nc7vK5BBgD#hVi%r03*r9Tf!L&nTgp=^!&RRngaZeBY*Z95(YE z$1DO?Q&YR{Q0%CLQ$PIket*?tZ?Sw0z6h=xV(cJCtcAs{ePTu%H zqVyPO#GPMjn?of310_Q)tHM~EBg-a1gMT&O3QTURU&*NBOw*Hh`nbLIYxZW0r-q}g zd3GGVfaJ%kxp)rt?2Olr2K__B;|15Nc^ef@^Rl*^jcF*z=*mLIqC zfDpYnaU$_Nw{Et7G--oaLXivU*%u~&PJa#P^o}Jk|L|cINc}*9 z#?1Q89nkhva-gUdB9HL({&C|nz<>uP<6lFpeFOU|3Q+^#WAJY8O}16X>=Hj9E%F_% zHtU}e7aWVV+dS0;$3qLO=3D^rQ+qg);@!x}$Z=E^chMsp*5F($8z8JScz4}LX4}WY zTm6}*5t!xIrjTPB#4sD?4p}4g@ZKL-ILJTCY!alsJ_n<49%Spg zgNUIz;LZFp6*VI8%=#)kvxDvgaUpGxKAEgpzYSLT*g9&=q5p;klf65}{@FijAOvfz zG};ob?PNH7Dw8N}7e|UZqle~jKmrFa3mIQ;A1cM+y0NnPX(4Mhru!cQ7g4@H7YSFy z!w2A&)5VkFzKf{;H@kzG5sg}-8z9(hPxqHdEE^`AoV?ivwAsBTy6h6Yfk5Kg5I$0J)5qrlZ5Ld{C;A z8ZZxdA+nfcU^L}!nti!C(EIt@&~J$k6Q5Gpk$f?w(i6G*L5(Uqt`)1cm)c$Zp1%CPuUw6|G+z4ye-EOgu>CZrrOr= zlVSF{r)d>-bSVHJ3V5h<0Pg+mM~_q5>sRL_99G?&s4Ns3j)?(VAyfE%j;_$Fk3##F z(ZJylJK>B`xMqC3=m>5Bz!tHcDz%{w-t$=%lln~qpl_AB%tDwUiEE3kNxHyQ1gA+D zqcgiAzFn-4e!Tapw-|y@{c+O&26$B&M6MV5G#L0QZrP!y@BB^YeVZ()(cRSzJPNH{ zT@~@9vG=*Tb(O=qC|RwVtTG*2AZvs=Ho z7nQ3kIvcmzj9*nP^4Y648ArSX-)kdd6LQ{BV_*be{9{alggc19{!yZAex~ml)N@02 z4A#ZqFHjnG|D5MZu>x|=AhR2l1Psq}HnGEajGmWXLjZOx5m^hj>AW1&p>i$=e@>2O zsrT^cpPEXy!?MxRP94=LghI|YZjZ%`{Z_-DpSBx|qgs(-n@lskru8{r9s_2aAoMO? zGbNQi-djE2xcm|a1nCpZ^kje5-+USZ=D_!mft_4c<-r!EYEQh{1IF&3BdzJ66YsT! zbv$d&S{RUdvg|&*!u2uV{_frW;dOgw@@g_7kZU1ah6cp^L|pTk03M(@M^NdFb&+nh zDp+#}v8e2Cj%5Ll*I~m1aM+x?OwN(5YHCq!Z2ZN~bC1!S2x!+T2CI(3s}0QmI5R-m?4gE9{2k2N@vBrtpe zg7u#L;R>fnZbZFq=xVY;iD63P$cIJLKNgq=>IH2z)>Drbk||{iSYTK}`WnHgsn+?myz~_(OZYV6U2frHTpUxZA@d zc2t>g@W=@%%;Mw>qMNYQPFZ22{vFrT6LELPE6}$URAtsCVz&tIv`=&U^Qc4>l+f zmY~NBw9buA46fRsYLrYg)W-j#cyGeVDssTIXJX=!>sm(QCUOc4<8pJz#RDtc$yK3{ zP`Acz;o_4e^a2!DvlVURCM(XH1Zyo6)i7%)Eh9%>!tx#zuV*2c2H@D^w`$V>XlL0O zp*2xiP!_MOA2`Fq&{uAIN?qGCTYXJKHMnuX$h2)*o4@0ma|kfW3ZM2SN`fcSj^9xK z2ppK+<^{`GjArYY1s(a0l99=*x#27xxzjt({F&I;)HZ78)c@$kaBwae^b{%BAsgCa z*x5ssHPv6~I9wz>Jsr2ok7rNtwrG8T}guvZj6_FUTD}*@vot-tX=>bn8&Qs?5|H*5C5$Y@UnDB zqClZ?di8<--WN~KZo9RKGL;3tESSIB0T*Gj2jQGrddQJi1IXNiCo_N*aWbU%?Wo(1 zo3|$PycI2r&hNsMT-))2L3pEc{ye)*QRw30ffo#;CMOrKQ>B`&+{eWYR;jCNf!p!J z?g&sCV)#C#XLZ&v8}xF4%Y1gXPI=4X2mZqKJ9Znw@fIXtb0e~pa`RvDy*K#PTENzJ zhjeb*?7Xl+@b;yk?zfMq^^AXC%}D$${-nxB;h*Rp{KA0_yT*nrH2GCpqo54?0;jNsGdcT>DA zsdsN|+VbE$Q7Ezg>%E&Us9XKsa@DEQQU^`JnYK@+kn(2d7b|W>2oPI~rYobVS26f3 zfg`718a%Ims|t~L;0muIM*F|F4SreI+OyO1)nkd#EDW4;m*Q?wq@~sUNCHMd(1@|Z zA6V^y?xvZ_YrUj0Ho~vmF8eWPB`_{N+&JXs4I*F=G0ME9>Xq&qwR>G+v7eQRt1oAZ z@GHb&#V%|KWZrJ@Kc`U>=FvU{QfjjoX3$2}Iz@92^rM3Q@-pV8e^01AQFR&gS zpsKZjJ}jDF$3Uc7VRn+2qdO|q1a@Vmu87|o_dR_CzaFelr~Tnhtq!x6HIV%AMLQ~y z|JcCgrpj~{5IZeoD#caI%F1llt=xPLP+~4Lo1>+QS51R-+inE@PA6}cxC<%VG|$tu zb+t`V&nGCa-??!=#c}wuMnv@ZH`aGgCuxatbcxg^0ztPKks56Q9*a+w&#w~m0$Q-M3Di44d`I*Za_DDUpSe#A!7OY2uzi4|*{y1rjb44bv-A;_;1Ze#e zS^8{t5nZAQ8G_0N;K{nF4vu@H#=#M5KX9P%dfh}UJqJ?i)XfqI#^x)O;1hqYXpgV1 zuWIBTdT-tvSll_cqS4&Ira6)EUqa4pt$6$F&*6yOJHlW6yUEOC?Denp`Rl*9Mx*~r zlbH|!|A0bMeVjEd=rLaf6F<#b)DF-&ar*8nL;-F8&*QLn$< z_#^&4bT28n?Gi}%W&e5AiyO9zz?ZcUc+pBF&5c%mE+=l6gt=m@#Y+-a0u-HtfgSq1 z3hVrZHx$MVZ?678iv4_m?Xbxs#dN*H*k_jBf5_(je?(vvjd=clMqvGK%gkINqvG9oypEjxX@NNcyk{q)oM#10w$^cjC{8A(zE(j~1wdvpG4Y%7p90{_8Up#@qDghl zqAn+dI4l=WZO#3a z27+Pu%|gr=)mD~|)&oxP|I&AOvK0+y^4c$K1br39E779&y!QCdjGn;_-}!G$v25NE zp$E}oWx>-5ry&Jpp0ckoeYtOx&io%`n$S8jyWCz51dzl%=RC?mYa z`~Lx4eT^;r`M=9s72!-_1;xK4)PhcS8TcZk@`k>9ZE!z#o*uiiuWz*;io=h-Q}8_F zJ;EL>?_I|mh$JH4_Q9L!jr(K3M0k5PW|3F0(`=o_e~18Zh^B3G!O2KLdK~2NgpIns zK5dU-lV~`t@$1neOa9+`AC3Q89oXTOeWO14Wp}IPeWqTeiqI(Fxwxja zT2||P^&;rH%8Gj>TQ~gA=vzGh^eID3;xKKZVXsU&Cb1%->k|jO!zV?%bV5rF0-U_}=>9Zf{Tf|d z;~NVFnRa!NKv1A9@iXz*sbiJkdhn&e15~ZPCw9J=5e(B-`L~{$YKiSncOFs+83>;{ zB!^hA+{C{(&$^|+njP}c(zT@^^0#K>0TjRq)ro5DLv}Qb4sqsFN+TWnPa39@!;Zfa=kS-o+{Lo|ECH$ic zjT}QOc>}ku=jGR~pcqe{ogGFOFxgYPt%;3+AUkg~=JQC8uv2SX{1kVli1JcMtG+{~ z6L#4sRbkJ@b4S9Wn=nfkKJ&B3Lvm#`udq7Oa4Jp`amuvQd`sUt$>Zn>rY+uPHI(H7 z&Ym3HMZ%fcL{^`x0}p`PjK2n&b5Y#yuu(UYzwHX^PMPDUYD7gVZ5~+G=@lOmtx%Bp z50~4M%Xe~jUn}lOn79!#k`DK3I~-b>=zkbW3*X>CDo05wMhVvE`#{}YsJ7f+dpVm< zxTxZV`5Eu}?Qs6-C<9xa9wA(FEq6;5g^qSvE0ubLZeoIPGKE!WubZ9zSqk_Ya%QNX zef*to|KdJGWP6{*Rtg{rGj?y)o8a4;+Gq(uGQUCl&p&cw8B` z8&LjIl7$hzhVd)&sSNF*;so_;h16}d%whzu6$NXkYjttXZ$iI;uMwbVzI zC~n?l^F6-iH~+XV#XY}pTJ~OAwZZemI^KM$y&IJeGP~Q``^MVm+C@i=x)V_)x$j-O_jE z+{2v8G3+dCp;Y|ZyPyQ2+iJUa7FT6;e02tKJgnd>oX{aKASEf8+2}P>sB5C;>N8_{vv7*Imwa$S$hdf)Dk{C`CG@~hprhV*YhrWw)w=Q-t zW<^=*`ZVLL?NfaJ&IdA6y>(h4>l3aML7TJ@k5Z@Bd^<)8NCAkn+J|7HQA$5wo=HZx zEKjV$$~r2Zt+Ft}>{;}lti*5zHanP-#dtZDbj!X+m;q3=N|Yah){HF@z`_%6O6MLn zco9swVm?2ut37|zrOskJ+bl&;z!aA#WoK_cuPzs#AmqigaKM=ZAG~>cEbHRZqeiJb z_Y$dU*95&EZz-RI&q;zxBNdTndn+AuGz|um?r1lTWrDixm3Y_jja1?_9^oS0j_o8J^Qistiah%{AF(ql%f zJTbqjnkgBnsFLDgWaa3~Ya0A?Bw1cvU5gciiQSpvjemSs11&hsq2?%k@Ls=RMAt0S z2%o1mr&u#iv463ne3d{|ElTG4(c+7jws*eoeTc%pIwLBIkQ|>78c=`0NgmLy{p}03 zX>@naac}9xkGJC>;Do+H-}NB2;@%f4C9~!2CRlwIE?C{t&~VdNNO$?S{aG5G+rhl1*9SzM zf6um(cW-536=0%8!Nf;0#U(hZWMf}nJFcO%`Q zyn;wcclQv(&>bS(F?5J@!@vMTo{jH&o$LF%&UMcD!~YPT*w5Z;-RraNbs=jL+#n*) zyoYNxk1z3L=?VCo*JFuXU}(&N+yYv@&NJ_!r0Vw>3LWI`IejrdjiJ1-T;8B=O_p&w zJj1qQbBc@qY?44{jx0O@*u-ru>Lzc4`D;iSCOJBlv<7qa$|)(e5;7$endXdu;xvbJ z-Qw)_`Zj!(lS-h!&V`mMQL(T6tCU(XgX8bq*=)SUyMf}lK10*7e9UPqdl8U29X7rW zM`z94`w}z`=uO;zH?v#)x1~3}am4(6tltcYmDz4hb7%hJk@2~>JdtnMi+kKm7BSdK zC7>^pu*eakhXclt%?a{KshHG)=aWckX>u4)Ij+4b8V<$ZU9jm-z}OLxDYpSAeqnbJ z<0#i#-DW7VRE<9YP!)en8zf*b4=#* z?ya^*RukNS$NUVgX=oMib0wIIQ)V)=iW*Pmmp-3uP0aORVB%VvR?!63Uh3mCMg*`6 zXSvmD;@^j8AaI9{CzAj-OuiDmV!_wi7Lwl|n9NPb@cnt9Ky!03w^;-pwb6=9%J3)? zKzxTAvE{NMrFP*w&z7wBWP0^H@2bFfibD~ed%o7nC_ClDogFSS@`>Xx*13}Dr^Kn4 zHr_Ia1A~yN+&=q_QL+)loK?R`6^-48CQ=VA-MyZO>bw1?&uPsUjCxAkt>o&<#K;&(2S=EG?}jKP&j+vRp%%^EhyfhA$VV zV5OVo)!=M>cR_MHU8dW36hSv`JeSx*mefBzF=~Vi^fPRpt|f74-k;_rH8kt1>>{J` z`ZspmJI8VBvRk8DNR3vGk5Oc!txE4Tf|gfTNgW--UGj<5&KnFUd=rjqF}NQRlTt=B zUG){a+t+-0L+bbisaIEs8v2x7 zec&f@6GP}PcnfNGvgz$Y8GB3yg|+@}2Qn2nIL7jxB}@~2XE|u46g@7NYY@uxRX6*Lt$T*xPaEz3M0x>~L^W6Ytr>UxHiQ20SC3Lt_DxV%8ATUYf;WzTQ z*nsTh$2NV6jgb@!{)}ku#sv>zIJ0}Ow>&pC_2bgOI~!+{?cV7}`KI3t(xeIQEpJr0 z=DrbBj_SBw4c-C}HED!d-E!SZ&EHV6QvQHgTYbXKk5G&1pcOBV-DE8PtG9nIQ`ABD zlhxrpU*Qu9grL#HUa$9G z(a737Dlnb%pz>K-d2Zjq@2j~oTbV4L>I&VW^+-j%4_8WNf36tDOKg9LV(*eSaYn7= zr?2&~gy$SPc+kTU#4=BqQF%C zCdR{sPVlJo)G~ocA!p^#1M!~Mu-`;v6d4TNBvzV8px;tQyM zF|X7%2>O0-Sqabg6F@KCb7#%F2_#0Sj9?F3%EvG+pBNYV@u{Wc-SfLtYAuzJIUn1) zm+U?7#S`kI-XK7IkiTZ`q)0P-A4PsHn3=gsoAvm67<7#Tm5Pb5dh$3dtYD=BA=>{? zvY?IOQV6td@quB9BEBxaPl_%4#oE(ijAWk3^!Dqyr_@N~=Tf~3@4EUJ822$s(p+ap(4 zqO5&$JjOnRHOo4bZN6l)it)iLOL_@03x2w~8~tZ?Zqq$5mGzg?yevc4JmcqN+|62z z;)(n!1!z?Q?08YlQ}HwGL89pJ+k|_rQlF3kAt8Fv8NW41@KPgNe`9lUUj^ZWr^Q4B zIgT%V36b@I#x^o6Wz2Ar>_&EffITR|MpTJA`^`1vDx4hH@BYk#LtbHZNc7i~4F7o` z6Gld$4Eq+j`5kI$^*y$}d%fozj`b3e=8Jp_9D6+5z?NE5d+qOgO%Jw=^SDjAUHt3y z!4QilCulROIJp7sXsNXMQbkU(FPmT#8v0;sPn{tF_bn<;#8dj}RIb@7Cw}q7XH9K+ z!Dnj*9G9sg9%3bP)-habtXd2kC%q~=4ldk!J|aRVx((n;wB}wxP8CeOCI;@lMZtV8 zvC!jG*I#2I(VPcoiwDLVfofQ-_Y@U2gBA6&gA#rJECwz|jiyP;Eqs$aDc}|wuZC5NWl7nOBQHq%m}w_8U@X}~9kMCze2ZMUbt_&{G-&@HAK}Ld@~%ym{3vol zo=|t@yjTTS5s$g{DxV$3sY;`$3y_OdDH5^v8p)?&RZ!2RP>hdlt6vHd<~o@APUV{k zcW*8%+vccV&zII|%IaByJWEyAHcTM}9UrTQGxvq+mUO{L&~s>muAI1YF5eUFn)328 zV=u#>k{tfvYXXyQUuF(0wde0@t)xXSKpR=E3$i3_W&7-i*_36D(cYXKaPGH#Uiy<+ zziar{9FS}92TlZ4o4<*2-~(?a@=^~P{Y@UtLd^&#Ju>e(*khOIo+QhvvNil z4Fx{t;Jtr#xDWj$ls!97JQ*SQMOQMm#L9Vh{4En{U6jSe#AF3A+K^%v%@D+v(mR4$d;*WxJ zdEGji6mUszvwoQ>6*?ayK-V{4!{^P$o~ZT~qEIdbw`lj@>v9$r3~+T)MxHSE=V!f!5TwyRr4%dHEIld?1(xfC6^}^rMp<2=3vZ^2zQdJxzbXO-<{4j2mHoCL_n4t^&#gIL?)BxF$a0Tc8) zQ&g3dvJwHLoi|tK3)lXVs<7wj2w$pLQTE`?-bs-!n$ooVM86E(DUQVD--R?|!3-OZ zI6-QnhyF8)T%DonDjttf(PE~s0n-Sg$nGKv*kj5kF~P^w4-Q~gYs*M{5d}UEl3UHX zNs8Ye$lz9khOk9v-Z}~WE_vsUEcR05;|hoN#y$^jQ`7xsMPzLV0g#7yj*w$!k)fb${eO)JvDhw;Q0&rSSox6 zd+)ifmbUq!rk2i27MoQ}PY_n8*Fm+<&I3cX0u3^T2z1~2ys4{Gn(%~xW!{!90Cs$$ zq;ER=?Ct4^vv3(60{)fLtsJ5KZBa_60Qf~ATUmKbnn!wmP3#L-?2d~0kuxA!vZ&X1Beoc9xZ zxE>=a!orFtj)cDOq=Z~ALNM*deSTo0PCSmT;CQ?t&ZYc3;ZA*p)?41xI&9C9!fYNL z@(Kz&+Vqe`1O{U-4+<8Vym-u%LPx{(zx$#0lMH&W0_$(~L}ZJsJ32JH2*gd>W|Xme z%@=hbR%I_5?1eR%NZU;Vp;pIsw$4WSypgAnG`p0VIxV@;IEOivT+jb0_VI_cAt}|K zZ6Mi{`R=j0@ARMiCqsFdDqnFLCfiu1sTjCJGmJp;&GBbP9q^4eH@Cn zpp)0@h%^m`1V90twqDk+%(fQ-2MxQNA{-tS!ZK)qtk2aVy=u=-VAgyS|H0E1g1XFa zf^1$pbt{c@*w{>?cU$L_OIGaAQfgspthjUkXZnF4#pO(#BkNeC0 zcJaJX85a17as&z?gJ~3}-d5Ap3I}E@>Z4+#4u`?T1u<=Vhm!UNsoHiMWs0%mr>Fk_ z(|=9J1pJ-fw$-lf&{oo0OTw?BJEtPaeM7A>x^w?A$NBRXshQ zVEVtUoimVyje#|LYt7!w6{fHhm-kN0n=&9!BAfo}rAbIQtIh&hbS=>3imn>7IqoNO1qfrQ z^XDralb#Y1-PrL?99pUJeKZnH8Jj??yXUFtdMllsovpM#OD$J43~Tm%cO&o_zG7jC z$O@-O(3}Te$JMUYJoLapjF8`bGh{xu@gl?j{K%?HDbu?@I`GuHW(C9DOMih9y%?@L zI&(H~VyHql2U_9}@4By@2D;i{{E2g=%sK^4k+a7}*E+UaQ)rB}g%czh{n4T1mvoQo z-B9G}L7(|r^g0kVR?-aM&HvmWRO^z}F8MJH z`6cTnC~k$LPuPAWMHMGudR=t8GqrVv4-O^HM!CRmyqspTwaHeNEFwR|na_VEF z_4gj)o9*w$VqZ|iyOb>TRoehb+2OdsQ{vshd7Fc}2!WZ%zR|m~ZPY%wFV2%7NC1-x zUFD%5vc-Emngow(mh8NY_t!DY7OG}2Hy>6U3x?2YIBqCuT|9i8Tmw({BW0KFYZ4YL z;&&9vz8P+MX)Oa()wl+;UXSc9D$OxJQmBe9pB;BzKU+YV=ck3ne?N^|0<%mX6&7yM zff1?y>HzXPKk-NvEJGugYCqkrYuVgA&Ua++}0pp)f z5_8qUmnU*uk7P&^)ZI3ar@ykb8yw~mxdMTbVQ#S%uN3<5;s{lU*l`e!r-dEGwLgAF zAc@dY98*FY-V1DVIQ}`iYY>|V(p1D23n!<5X@4=fKNuBwDPG7UA%+9hnS4w8<@agi z(iHV0Du>zq%xt%z#LjXZq;=dsgHN|J1*)`KzK!T9e-49j+BmNM+X_EEU!C+0bwbw@ zJabjraLM=Lu`jc!(H{0-_r;GN;N}=g7J8B&&fxoAC|LnC1UCA70pxjli(ww8*1N=U%AJ=&Lh zHhS+Qx~E`x%6Ci#dl~i5+x|O4_T!L-gAyLIyEmyP2v}q1pSp~jJkSmlId!u==@RQD z@!xz3ziE>LE9;Z-QE^rthJVlombrd#Ebeygz+w*lo7U z1LtU2dHG7Y+}x$82OSp(1jETem>teiFe0zT5{L&x_Z#DghnUT;=Grmd?r5j0Sr^?n z9rI4&u^+TFP%vj|@8> zz&mBz`ROI;!!Ru+Df}hpL`-1|BWpvYbe%i~BjvV9b@{u2ifWPCvDe?+gr-KgE{vF7 zRu17+)=xChy-b-i4K2jQ@NavZyjZ_QhS(VqiD2=a1Jx5|mXM5w_@!btW$woud*_p- z7kAFE;^Vb7!0$Z$^-mM!|9L9rqZf0z(45l+O^VwFdyJH5ZmFTMR z-FYjFKfo;{@BL|Tmm)GLDXY-yy)TIE+uVZUi z5y~_B=UT)-DdlfBg|Bp-p~Q;8OUh9JR8RIX-f-r$y}Iemcif5b;&`f-TW#q{_wzM^ zY+|g7{+SWvg1OQQ_0m>REKS#Z&B9GJYXY4GbXi~w@AD1WG4>F`*u1`ok4EpWmh>*M z!2a2cV$vJu!_IZvTqn?|o=zU{a*>;tM5V)*-XqCebPK!r-8Fusyd`=pazaQy@VUxs?M^fuWBn_x z|2`ZPVRhzNJ#vg-v{Lzfd;||H;_rD{?_#Ym0jH_;T1nJyo}xjh99oGuG7r-0b)EF? zlEYXtZ1+90JN9Bir*zTQE%b5)6Nf5(GNWK5Z$MRlcdSsBgk5#jkeFD3@?$r7WZC!! ztLwB6%BrdiLz0J;P#2O=x0Ss!#-gV*G>O51VM5ev1A4KA6Sh6`!u7^8;QZh0dQpnCMa{ zmXKcdo8i7}Rrk>8eWtImS&y%?FJyOY&}=${4*bNWib3Wt4N-e&&x_$UWUEA8?t?~= z>x(Gl30pH%P(3-E6DC2~hw3?zXj9xd{2=!lnx=&~6s;AZaMHtPk-Z00GqK)#UrdDN zy{;pR^qkFj*s`Z!Gmq}gY?!p8Hwo%Bq*Vll9b$lLT9*lf>YqKiJJvfJ+me5=H0^?R zEk@zw2Yp-J=mz}+o}G~72l;8f$MF~aQfyMMq7$3c@SxNJ>0h=xF;=-_v>pJjfmL%S z>oc|H*<@xbOH#==1t>XrxO3mw^b~AFQZaVd^gI?9)SkJDZPso`jXCrWh8u};yoj?< z1_dN$4M#4ft|^)oba>ZJ#x-4QcMb#m6)R&j3@+n5Ev!Ap#o}S~khjDILWWP+7nWx4TtQPy*9&w}IOKtw4{L%R!z)+z)L?NW*Y-g8a^Ms2VaQ zcsO!IM_0axS`L>*Ch1wrkqw4Q7flY~|^IO5731(=olwb(7jsYCR}Z zZ~NZK21n7bk&}%~&hpC2dIrQx1jaq4vL&0ay-4&)NnTMqKNer|#p4Jt*Oh^dX}GOS zS~kF`R6#`{*HZ#7EPPAX#Hx_VNv?Zche&wIkPLseS!&+v9HX&6ppLW=|L9#%gNj;= zl*UK+^nCUeR%J!@2S$X?enN-5I5_MZrCn5GL&C6L3JOZO-twn32t@G8U*^F@s$|aZ zC~D~xRQn5MoFKlJsW%<)rAv%w{`4wP?7ZX4)$yx6lx`dz-Y$y2ix3qdTwar-2o~5< zr^cVe3-DuNQ$gc>b&_j;+0M8?m?Hqm*ZgY0WC>+-@`1~$s&1=4CBn=_TC8~*9}O6B zaByUV+b2wmgt=dMezVD-w>*m0&YN#5PD;wzaS0S)3)uC*KM+9jdNWHN!CSua98(gh z?`24^aB-k0Gev2SYJ%}*O8ehA_XQNebG8s(K^}YH#{-Ol8f2-0-+6nDWej!R*^3b& zVqADlR7kpYv=FxVEg-;Xt<0NwKh-cvy(xD&USPa-gyZytaqz3a-a)4!$G{p*WvI;7 zL|6CdGZgOw@;w8(w87&wJjkO(^{0da1Hm|gX=!+~k@xk&F!$WWo1cMs>{}<#M+eQU z^Tcha)_`^1e8?Ktyl7E)1I?h6y~vW+T%%QagX6_g!QPrQB#lbAOs-_XIz@!&Zt@^- zc#5eyX7%>EvstsG9{)*1aG?#IJg9y*El?Tn?dyT(m8*Z@p!q>a;^yK4i9DNfs(^(m zTG+v!lToXz(ShfwrwBhm1dk8wNFsC7fF;=!6l&WeEi+%FuFt`Cv9D9nachbv`Q$-gOcxFyu|N&HMd(YEz&Z5smInIEb@JDeoa zpNa2mx^>+hFwGurvd?$>O1y8$?k+h--%|XoFoIS4zFVD-4qxZ; z_APxj!gph14?nrPuWLZLNAbJymyqpbdUm$_;F9=yNAb*A0QsTY?|`SrbJa?N&j_Ec zqrt>r_#79DBoTYF!JMUVIGJhRLb>oU<)45@hk;`Yc5U1v`=t6BeVw*d@9iEQx@_grg41QgeupD%-7BE+ z#CGEFwC|^4${=V@i0)0BA3DrU9)w&R$e|i8FO$31xKHZKNBiTD# zm(1Y~Et0#+%u+m~apg;TPGcxx(ydiqry!i@gd1K|#4P+pjuB(iPh$B)s+8hb%G|#FuWPCCj33!s{m)&uHp6q(n_XgN>#gcs0*kpnso&uzTUNckPEfeb z19cYppHzbJkereHhkv_2lFD{sjzB)^siU*fUz$*@UThH4oD+GW6t4a+>;e*ryutt& zcMYDfn||F`GLag<@;q?55LmzPJ*tFaGvWQJg!}Ce@@0Oed!%k| z0l3q`JZ*VZaKZB<DXUEPOkJ#Rom zSxx1`XO*2{O!Mo&V^>}nA2s5=-Vga2xw=5TDn%}As8FU%h6N|e@#JBQj^a9gZ<=cd z^jsk0(){h)RWH|mItV2F(E0&vkg2d3I+J??`Is|>HsPu!UNoqmTWgYDGNxahE|XZ; z?MX|;*b#?_trY94Ul~}R9n^U^v8TJVhxKS%FVuZ3(QagI)gO`!$^n^yfn{A~u}&Os zwX4%6H)hqk69&b*$t{72&tfy7a{i}BfR5_b1mY&RP4GZsTVXdtS~jy zRij-y#RHV2R@U?<9Mw*rN{n2&?}A%L7Lw(?(T$z8>a@C7mx0{|Br9_8*@ENCL81z;52+)gx4>?-}^?eBoKf?}if?&~gR}7}; z>E!w5mB@&Y55%S6)rD)a3y?A1zo<{4rOG^ z$G`PVoX#zdwmlD!JRlKHII6YkB8|JQU5vem8(>76zZkELAUmo{>mfrrZBY?NYZb2^ z>3mL29MqB48SD#g1t6Yw<2)zg94Yx_>rn|9Ki-z^aeLp2M>78z>7+oR`;&g`0POCk z#F;%W0;wjm0wEk&9WPu}^9GzkE456tMw@@YyOTx)k%=*hwL@9Zk2|I|3CP+RCH5EL zamT&Q78a3VLwyvH84@NqI>rx{oqIc+fh5@WNe=sDrwWiP(!bWsL<`kwd5qPCUR4ir7hD%32?=$7Slrse7_ zbZ4@Yq!aF>C_Ep`ZJ8W9X4m<!bHW(isegF?=8L_o@Ig|QOR}Yb<70dvK6h{3|KPm1 zhH{!%cU?BsvM$nolJ31nZ`NP<_^wE*44+X9HFJ>%=%Z z2-^OVRA7HGB`zPjxzOJJUa8SWP|vXhV_?GigX25D5S#WqD&Om0A)f`mtoM^871yeV zFEI@phA5?2yq4uLiM-e@R*ZHHKMK1L>kzFjR@N-JsTimg&a4ayKv%|>d$w*Td{Ybr z2``ya$N$Z&?9DZ)&R@RblAIV?9m*cCA1XQgxnk83t;)wUwt2uXoaAD9AZ60}EmFDN_BWzd_28V4|gjQMpou8p1bE8ziC2f zvMsvLPU$DlL_~0q5OZghb5pA%#%X|bZNHlJ&dpZi#rlG5uIBAyN)PaKwT)3&5mk)~-uCD^`olTHlOXP6f|GyFjIDg0x?#594kj?Xx_=&rzuXO%GN(p1BTjGg= zJ5rTN)jw|Vu#CcbIdRTxv0quN&k4+<;CgQvrj)KBRcpV{xvG*SuH}iN zS2glmpyF}hW7>ZavQm>JO)JX{@54fPMzr)nuO7PS)Jp^)dcs%x7-eQTF;HW4;jG^^T4bk11V<#%h{BiY>nQ0mInWKgG%Lhd9id>tB$iibPxp4LC2fs zU~`gt5}bL2oizqFyQsd*5_gsG^YB7s2;0w`x-VPlR*%v0El=G1`4v7&g zpv-M4&^J8qa#}$%#iZ0B5WZU)>gN`GQBlwD2mbu~MCj=ONX!+oc-~Ka0~Ov`JIM5< zXKVcQq6l`gH}fJYib`d86f6l>x1%FlL^ep=mBi^;H47?cu^J4}YtA-EzPS|#R&!aD zHx1{r8Ss$;xQvFz=tkBqIeqqWM(t(w*^MP2Q`gz70{WSAF;ZfO=O%Oi7TI!hQ#EGi zrr?QR_WB}kDgak#$XVTPa?jH=&s7eMX5Pjfc_}2GG!6iGW;WL83lQhE$~hDZ(DT-1olr zXk*Uk9h)+>RU@dF_I}zA!3j+(ReWZ8GQgs!q00#IxujrvS)Q?G=cIhx>3gOFYEaE5 zg3UD7$65Lrz=!bG4m&Et9lX~O>w%boE^)H{$ClXn7k;&Kci~@@QF^;*7GLwia!g zwmDoemMCD7n4A>cR+T$l4Ut$3YNunZ;%$1vG* z+Fsy@MpJb~Wf(XP+*j{%-&Wc?Wm9qO!fwNIu*`0elz}Ao*3k+&izHDq^}+&WNy#2+ z0z8Z_gLq&d+i|L5`DOQ1p9A|+()OqaBfDE(Jl zKJgjtqtQ>I*PG>el)lRIe~1_wI-gr3(xA}0oP7wxs` zMJVE6p2p2Hrs;U77GEwp9)0~V0SEuXd5h}^k-Xh>sVYd;ZZOfWSm?UBI*X>Om0I83 z<7ar?!+%833)7^rFVcNJUE69@=MICPvQp#g0$mrCU?JMdRyCZ~4*nOUcT#%FLkoLA zgHIN`Nt{x|srhe_DJb^y8{HC~$|FlCQxOB#*tl}Rwb_tdN;xQ*j_~y!#v~zL@VsxP zo@%nJ9X|{NKpz|>>G6A(nN_=ivHju7$$2(36KpOLHmKQ-h^u$*abu>Ty}sMpr}*55 zDvH|Kg?>qQ+*wrIdB1jU#UwJ8H-*d8`@8|Tv$0uDwNkTmbW#-U%BCHCCUF`>aQ}R~ z;%(-iK|>y%IxSltI8UX+skd%-H&Rl{6BbieAt2zHU2WF_?vp~tbfwx?U%t-cY;_h7 zvBnaMY@v-@g2gmN@R_*%36YfX-AWsVr#rcv^sKMP$3#vI8Bh!aU44EI*0Upe_EKCX zN&CTSZy`pGYR?EUF?rQmT&aCoYWfH2iAF?PNer_Sl9Ol{6e2qO}maw7a*E7m&lga~zPrza+H%PL~bn}_J zuMq|lKl9%MfMjBfER#&7?>nE`T+yqta!F0P(>87b6QUac7W@yfU^+q@YbC55VBU8W z;V)iU(BwKXo;|ZixV94&5NX$CT%$G}*i`@GHqU@e$ez{rH`H=?kkU@DyIZH#dm=$4 z3#p5CWeFvDBEL6T_jc2A_~IuHiV-GQZBqeu1dn;&8$S3iuYJo~T>n*5OfIxcTQB_E ztAM}2GOtd8;hL(Wt$;yb)5n4IGyyZXsmf)MP4q)Y*KTOpf`V_1oaWiJ9SJ4Grm^f4 zOnl7AD47N?grD)z-+nW*FyOAGq2%hBnXN`z-nlYE!4vt>|EkEcD5^}+F>yOOzvVty z41;S?6k5Fht<9|o-i?f2RZ{K1A$KZ*cCfv(FfmoiIDb@lQ&R1u$sol<8roB=>Ilu0 zpi!`}*cw9f-bM!TB5apLu*-Nqm@Jx&aX#N5KHGbo++f>SR&h5lFbB2};*xUeZeqy! zqI#y@@c!M}DTkTF#N$dRo(0)pL>dmO&AElzruOdc4qtAga7cc`alTLz4LRP&t)0Fa z-WP2kj`}?^Jd9vj3OK_3AxWG?I+3LeUZ?{&g8pTtz#e4{=x5c;hN4Qvc+c><&yo8TldnQArzfP{zbyo6iTvoq zKHiC-x?1OHEZ+0ldzrFZ1>73=x&%8R4OV22ni~#@+kvhBY8BP_o`crl0M+a3rnrUI z8EI;dF%c(wnrwEBzJGfbKwS3(q|e}}ItlA{K=!>465}i|v^FH3sIJe`J4sI7(tG*d z-SY)GMMNtc--L74h9!ny{*tWCvNk5uG&6bI+Cq2Y1(=2mSM2+JF>BLH7Gc)wxqNM2 z90$*r%QMMD$e=j6g$$*;*`Uy8&j@=e$u>wvg%R?Xo?E%j$nGgARms(xawXXW?8bM6 zgz}>f+az6!Sw>l=a*4K#4t3wZ+pFmF^!M_i)K4B2f%@wsGi--@NcJ6^qit?X|AAXX zsysaTY_l$x+s4@b$5jU{S1F}9lW#>P&wsX&G}N!$_QlRk*?N6wGt=Z8RTt#cyx*~h z-)n#tOGdYZ-|sG)Xmh;akbZGRT%sI`a=l(JSElq`_v0}MkWleK#Z^APN#HDdsz2Hs zuzj$fx80!fmH^pwcb6aOkiyg|t`#6VpWR#T$+$cLH6XV?i`YkpZS9w3_4;C0GEz$7 z*kh&MpuMO#VdivN>c0E?RGADxMnPj$36q-;Xm8hssXVLfJE!-*xgqOzIzi6(EB@4n zWfrr$#M7|VaU1l zgOCI-R2|972wA`~Mm=K^K*5fEhfT!8r>h0)j6Z#v1fM_X+YkUbWc*efY`*m02*$Rm zqIYs~&Rd(=^;LqM#ZKwJ1!h5Wu}9>34nky@e?&z``R>1BpsZLuu#OX&dAZ1iRi7WW zL&TnW^h_mvsZe?*+5PYE<=D!Tom~0L#vtUMDhRXPHEz%^s$js)wK{S_Uc7L`QTtv< zqD*mMcYVbJ(iyhP@U;A-!M>8Slr23Lm9K*z4F>S|z0oggM~>GxMW!qp6Q>@frwVzu zf(u{&w%G}5HtJ7!{u@`SAKRCKKH%Xp>Z*_AzCP~_ejjgo+podrlcDVirqq4Nqs#qH z2`chZN}e&_*gDK@7J< z9Up4PfWvRFh=>i)oXb^p=1T3EqWsKT_klyzhwF9w4bm%521d$=25m=iNQ*qz%l5A~ zF|^>=w522T1#FNk#!lI}Ypbc)fx~>fRKz?h#J*MLb3-CGCUM6?=Oh@t3qCAj7>UY` z8rXa}EndrI=5(Y_V@Wz`O@lkkDef)>kVeJ8V*{s80s2I5X;OFa2IcDnv@F=Ff?Axa z9vf(73QcaOyX8LKQZ79-*t09SF?bk^9lTj-aJYL6h%9^#zUG0@;^ODC)Wt5 z9jZQhce53wlOh^?8Rux(_TRu9xbGG_YbVr(h-j zagGdJzMj#gA8g*|XF`zU&-#WdEX^8*ocf$7V|2qqjOuT%*H2oXo=peix}~h z|Kx*cH|%3cvx2}~y~y1~s&3=;0p4U<+AI%p6D4VB>8|y7{-sA*&rYve`!=$uBiPiO zK9;aCUsu*^4kmHp)r_v2%hPqx1Hpr@pvf$Bb5X+^Msnh9t?pxB?xy@Mqm-xGK{^2E zT&Re>e{1}MsCO|>HTz6?V;Nf~Q~ekhM&~cD|7i~vMo@8h5#DJ5jlDqCpQM=K?F~(W z^A_I2f&CRA#Wo_`+Bf@Mt{qA@VY9{8xx6f(>?4#=GJh0 zrscu!nN&R^n4Oy|IjC3XpaS88X$e;f9e>@K?Co63D9lq!^<7;bL(W-VjnSK-M3RB( zv2FrqjTLm{9l!f{H0b!GRl>D8=dH)Z!R?Diw;kOWdLcE{=)}0-;VLCcBXQf;}Wly-A!tXkj*ej%w`t3pvRqWuE zFF#L`Sn~ZM!vFw|L(0P5qZ6IdfepI#2I6{m{oV{_Ujh3TAPv@d*}T6SSA&=1@S25~ zif8SdS}7*_X>V?5KPNwbK@wey_8H&zYT;fcG-D*?xBPU4cD;VfD^oZ7y#&BH!c9F$ zM6!thM1TvS`;F~qEE%XU0!%7arNA%)0aYgJ)SXYI zViuV7a&B61w0%QC2Tfcnb%%P|2q}Z*O|SO0d79iHzoVu~{&eVQKU|PSOLN zZTmCL2P#{uKK9Edu&C)wwvX?xj5s-_=xi{q-(!tY6{tnlvkPC3(T+6yO=dvQ8YvOJ zU47FIta84p#tHLAdIL`i^N(p4&6=ungz{~W>tdLe(&}lS5q{5V=oa{Rsx8_y-H`{P zU?c49?Tzt0>Sz0}DVNP>H~xXPVL!WSq;nw|K%o}q&@3z||DRmLy!p_j1ElSBc0}@*FuI+HqK4Id!k_Ym0vKYWW7)^x?J?Eb3SIq z|5_!0e$^G86|>SkLRrv983);smN|b-L!+rn>3dX~Eaa>zP+zyAdgF3F-YdA*1a!Wt zlRf1^8L=z}{-=aTUc&_9-Ui{?$ss-Y-*Y@w`fOw=;@g251$2W+jg7R}o2_KB9tsLmSM!_pLZ90`lbJN#pIlkLw5ApJEKl`9`$MQ{! zvE&=v8jgW~sIxmD&zmPcN$GB|CGY^lLJ?O#$Ej#P(xckspSKJ-;%|mdtl7VMs%d|l z=Qo%*wr0TZalAplOmElZt@b9=F>-J453n_?z_Fg=uFhB(*_iOz_{-xUE7`uWVJ#`2 z3!xPwtMw8keWj4)eBJu{Mix{TC9Em3IY!}>(IDgmt7E3BR)ccZZeX&h{XG`)&l<$2 zpCwcnEU)$+Tl9h^X|@ebZ3L^&Wn7cFOu|xx=(%xQT_1^&FK^dY+uhLKq_`wny=$c7 zfAXfIoCr-NB4&KH2VPeo8zy|5&LbhU`2TRR0Mtk9=j82rK~_!1oOV;5{#Pst==YVG z?mfMlOe>#_6je_7y`PH~I8E#?NPXfIMoc0PF(Ok|z&D`h;!=f)MBWJEn+`AEm&f7c z^#V(ekz_u)>qVE8f7aw-GHIOw_c0w_3ewMj&_-j^v+9laRY*qDM98@aFLSfJ`lBHk zan(fTW`ndqle-iIL_|bgrBe5up&8|6!ylB@Zs+|13OEZ>EqZjRs^lqg9;wXbw7@yw z@o(Tz99DhlU+pfJU*j&sue~+(TGygu=u4V*1vn9Oglg6T-6Lxfb8JQk`p0&xZ@>?l{;46na9K|wy()u6gkF}n(vm$sF1Vh%r>$L2XSibfm?$m znXVNXqYjqv=1T??_DVTn-b&>>YJ^jvB=)e+ovbTQQ)&ex1-o6~(NEq_jlZr@*_pa; zRf}!%of=B2K0~+&XIicsJkaVQdy@ek;(PG3y`l4#w78!(Zev>nMS-Ez!Rit$g}R-d zac4Ha3AZv1NeVCW<_S;`?^yGK>AMch_p3g?9Memme~PL*!#;C^PAI`cCn4wYbG5jQ z*q0&Ach)+8R%gU1%pmXuq}W!w z{RjAips8pq{cPC3e%ZI-Dg%f}?6xZlSC>{dfwE^!v+qjiKRGy4O{Cp}Q!lV;lU}?Y z&it~$^;b!#JG}uVZ09Yb0FVMi(PEuBYA_hl0qJDfS#<&xY!H$Q!c=Y{e}pQ^breQN zveZWAQ1Ykxg-CQ7zcUP<41I1(AbO^;z|2^~A9A@6J|lKeNcL^DQpRER=ljNJADOx6 z;JRVu>csIxE<4%~C&EWtw`49yt8brm=+5m!i+_zP!wRoq-8NAv@6}dT1{xXD_%~Gu z;|p_E%W#E`XUlJ9!58&l>!!?$D=*w>j~z!V&%8p%lx3+c z9LKWYn}iLPZ}3^*R<$n8W)zPME+;2>w5~Ht@*eLep&t|KB4g*7H1U)DCfo5F4IT)= zyi}u^mIZ&*T2tuvNJWNMprW6|S8StCQc38{>LKJ~MV48`QE-ii`TSs}Mv%&JGC%-N z7gNZCjM2O;oYj&HZj>1-F9&aaIZocS72cC8W3@6y;su76<6bt28FgajR%KkH4QIan z?o1oAHaaOOMhD?k-erlZT8Wj!ndY% z=`+15sdpqZr+cF7DLRi{$3SUX{%kAxiL|JkHGvzwxoUDlxN115~AN;+KpU#z`# zT$F9Q?|myOiUKMk4N8NAfPgdz0@B?nAPq`0l!}6gbV&^*HN=pE#4sw-B^?8d(hLq= zL+%s2pS9Ps-sfF=t-aUv4oaoYBn0x>CixVyW;#WUydr$X|&sTfUF?cp{Y zbqBLQg97sD3_uvz>!8R;6viA&3)2`r8HSs(fWp&QRNzwU|5igeY2%)rNwmA zqr>jty2cEiT+P#TGcht^#L=aT62HQIpZx@!%~VU4O$cu~3riAD5Ad4Sa)MM<-$8`= z&d=k6*@&7c2sIusYJL-VmABf zk&F_3#{BH2oCWmpPkIm04f0HyRMb?ut)Ib@j)LoWv`LTh^6vH`kE&=+v} z$dLUE6;5kCA_xWoURisw{Y#6B*uN=9pGBj@>LJ?_Kb2mOo3j62!YP}I+5HVdke9fb z5<0+X;8IXjKL5i~I(_2v*wgOr?!MN@#aMgsXZ)WU8nxL16`7S8Dleu7 zML_n0q9;`6PJjxvQjlszr2~k-BCS^}n}w-l4}%{KP2 z%=ymMPP-DUyZDTlqhpHMcPGnkUrsKLVa2$Jq1~~|9MOG?FRLE&bkwe?&rP2)Y2HOgOlJx|o@V4B^~=O<0r?dRXyA#)PGVK)qKJ38)d ze}=hhXkMj_1m?)31O^YgR zR+}Y=e#>a%?#j4BckXb=1mD?q;wlo)`8U$^ zOI{Z0_q0t_b3tl_ej*4im|%EaF=>`AdVJbE8t7b_nKYNE@L}RxAKQHPQmS?4W$Sz1 zS8N4M^)2bW%2(l(aP;`u@U`CDYmYwZKwfRcsiFCsN)!xjv!DC&xjA`ya4Z~DjBFlo=04mF zEacw5SjYoWt7%`N4}3gMh`LAcmDFR~#bZB#1D6~30w-T|?Hac~?Fd(U%v1I1L7xga%Sm%~!>%2YCkwe_H45*=b?YcbR~A)4-;eRXzTem&iO=6~ zS*+i9v1e0z%U9os(blv6nFr64eujkVEop}9n zLOYS#ynRp)K~&nh=$!EI@T5>TcHmRo>7F+}lTC?}xTWV`Co!nUxbxf$kzkaNHlw2* ziP8g=`vnV-ZOxaWo`_2}H`b zbmD6D95e!Y6NlUmt@lOsQ?6dCe1XSKlkCPXm^0x;Xmsu)l~@^(obMW0b2y_(9zWy# z+WPVP;^93Z9_M*k-JmULTDtDxCe^Gs-V5EL7A@Cxv_AQDwPXm~!X;R4Q^uW>=+e=U zw^q5>WySf@Op$cV{gp$^*qEXHs;Zc-h7F<-p;U@7F$lBPR?}$I0G9J(x*X|oV|otz zT+ItESsL4Z9uL@Mo0gV+coK-N4%%`>-=j-^b|}5D3CS%i?B*hoN;-_Qk=M?(Sd{1`Hwh+DO~V6&R|(cD(f0OmQReJ3*s*DE4!L z7Kd&FzbBEVdV)h>%LZOpuD62n4n5U=xmV29_KG`oCtLEBG8FFo2;P12*tZZw$Ad#U z?F5&+q7~zLP8X-=KH!o$#>M&t%)AgNqxTy-N}gYBa}kT1kU*zt*aY?j;X#6Ami-!c zGpq;sec9_^I!Y#Dr|Yp6hc2`lOs3jG5Qb!$qy*3#qzJ@bs?&c}Z zE6R!xrV=-n!z>ftgTh0ulc>4YxFD|8w~cIUO;U-Szji%R=T{bqsS*Oie7+4s6X|=p zb*j#pb7g55h*D_4j^DoL;pk0?mr}I?RU>&3xT}<_WAS{jbG|qM>kkg^HCu9BeUOQu&&8D6??FEt8fqgBJC>Zx z^VMJ-g^nqnR3TI&NhvydL-owmzsSj5Z9c6Qa)xQYk`e6g13(4g(vlc;9&7n}kq;vx z4roTkji%MXQ1FQSM(G6mO3Y!(oGlD$e9D#FXF&&noylgMVJOh?U5Jpz%Q zS0yZ`{Z|!vnz9%srT7ZI8jIe@5Ow%u!{4f8YH}4n!A%a*gHbOeQ~$!@_;xBea+g0} zdF*~kd%PH=U%*808hgM^8)m?9k3jP3p30|pi*!l?CZK|wK8 zjUth|m!i#AfqsL18m*L*%>ACN_Mf9yY9-bv`UN)LfB2B0YAj8RI_@;TnbB+8{p-N+ zqOKOTWAE=t#_p*Do6uFhvDK5;;?QlH4U?VK4uWIe4*AtUj$Htf>VkipRja+RFDIFD z=!gIH9hJnOew?upN$-Lsuf2{>Hn|!kJ_Pl>drnXszjxQL9ySGXALzka-^DNKvd1?3 z9u1p-eq__#y#oDGCayiqbW&$C6nk-S%@}i7A!rk+K)O0$rJMRxcGJQ4cUvF`;VruW z8g=e8vor5@)OIT)U|+MasH9?EFH%r-dt;C+^dD$5YpvFy7^=XMU8T}lo06pdFP4QI z``J3=l5Atg)Kux8nM;m>IO&3exCyLUZNw)WN@D1t1?owh`Vjpmds@}Mx5V!fRyK0A zRvef6vo6=zM4fOL;?OKCT182#5s3EOHNOq7MfhxPSP+}km7_3P(i3ky^C2mC>m_Ye zORn6sl2sv8nutPSs+2(Z2R%u1HF?xo43v|fpCQi7GA%E*=K@JBH>0q z)FA#9s;>dFiQeH!UFb?}$NPCjD8-Bb#dny!a``Qv&aFxe*>VJxZl$Jbz4<4Jmb&e!$b2qR;*j>Wd?+5S0bNb~Pxw);0A=VO=Q2~I)j5c&GW zo5>$MI!C_~Q>8X=#QhrF`khkpZRRDRjKH{HD?Ph!kLJOya^#zAGJYN=P6PUcE94KE zG~{h9C^LMS$9c&dBJCtQj^Z}Dv0iu={allbwrZ`gcXnAo>~@MbiO$Zf%XWAXDwLHg zKxJAd6rp@kW_z=hq$B9yI90D>dcE+AkZ`?>TYzWm99%=DTAh9rr5Cu>vTGwgnD=@S zPrMn&#%Zy0TS?mc{Ieu}iYJM)?=f+?=jSp>QZ)N%<<@AabT?%kVCM2n1UENS42)AI zPs_RDPcStnMSMfd86rE;X~^e~C6Qj8O6^W!2$vsLpBv9mJY9NPCd|E3+wTq+Q2Szl z<{5c-LqxBi?If#2?R8(5gT%HN3NMHsKEW@5HW?}Drr|Q-5Vx6B3JR8-2lfRkp6MbF z7pnm;tt%w*XX8$;?cB+JFQ!_HAG3PcqCaOGbVvcd*tj=lwNbe%8H+$uLSM|CN>>m7 zWQhsFdjhm-h4?cMyC+viCdVvQyCY>hIX|%%@2E48_Lj z<`lWv9ysb=$LW7{ujhG7qK0_F-p_4#v1gFQ9dKe?Vi#i z=b=zU?4w5FNz&=UY?$U;Nay-F(>%iX=bv0giP z$*_*oTQ7ZfZ<(c2KZ`!MZhz+jeOx-{M;A|ALVaG9k^DZRsGaa*#yIHCN5}})T56;NU7~&D zXda}|AL6t~3nzkB!kE$eg)VIy%(qq&EDBU#$CYqKH*#yL`_xGYC?)5x+wjDgs5h!9 z{NQp(ws^oE#}89Z)x?T32A6Biw`CILbyEk&>y@5YS8Oz!3LNN;o$X%zzaQ!%j5YA3xZoEi0*j6!CI)9M+&=sz9PcNhR zNlg2>n04c62G_Xk_Gq2Q%DHBG%XjmJeRma+-f{5|2bK}z0@Q4a&X)sZp+|I0Sef z(|dQ~N`5&A4u28URe5=M*m%A)G}q^@ z_jVdSV*J#xS5S9y=RH{ptuSN3{KFx+PHD?mejF(Z0pBYF1ht|oO*_t$K2iO;@TqpO z#@h7Qy??e=f%;pnmKb$>NS4_cC0D%Pqf{G5kD}sjmjoj9I3EeaehT}zq8Kta{=@f& z9vi%KB|prud@1T7W{H)*gy#m#u=&?JX-R_!_^>W3$^w|D5AU{@hnC;BJ;i!~~{kivfYm0<(AaDO|tk4qm zwGQ)1ezsA9s&lJYP&e82(mfj#Hnp^N+i6Gi((aqz&sFsVWq{D*bAaBNx)X4XJy#y8 zZMgBkzUXK$%!q4gePeGX5uGw>$O9Z~od%JVh zeL+m{h@)2x0>=z<-@juz=GJ;W3*F7PcEFn8l;QxG5ny}DgSR$s6p&gqbv0rFk;|$RR;F$3&6KyDi{QZGdt~h)?+FPH?)& zFQRq;=c|N2*P!R5j}P*6Oz;SOD*OHSXx&%H5G{Zr*W`79dcxrNB-@qyHtW&)AGDo` zP#CyaEPoitGLAM_I)4jPO|0ynW*qy`Fb+~7|9GT4yxh@6!eU@2>TQ3_vT)pLn15lG z6^y3Fg=XMDxW!){JqD^hL7AtxS=0)7O+N4Dc!vZaWQsrw{Nc8BRkx(deyZ5ncYf&A zt^oApb1fGXQoCYq2tZVKVD2K6w8DAauEmH?3NDBVkPyuPIQo4xm(|~Vd9E*Y)*%i1 zt}DMm-tKlJDBuGGo&0bAsPHs&afU6!-rKacT#}gVpJKD+!AN*Kc4#SNH8Kn=gvqK! zT$uf?n3eEIPEI-O|5W`qDZ$lz58lWT5OB0HeYMw+gRd1Mb$6sxJ%}$pF|iFK|5UhF z-{4l!_2?8bk)ZYWVE0(wb-?WS$5#Uyrdf`@#%CR}hmsQ;uf!z*%=vIl0lwrMaLPRQ zsKL2RHpong9RD&!zucQkZ)Fce^*pFK8VyQ9L%fc^;CGRSEmw{jOlSk17d7CIS*}E? zcVtN{>uOALA_=^AvOi=(dLunIdO|4x)wCKUtxjE$K}Y`~zcKMvJ%XdqY*HuRukCSE zB`Z77X6wR?1+3Gs;{Xw3WRrhrqn}%)HVYswfI;F>JsX|`H{<}IYF`Wy8P+=nfO>bQhh+BptmQb>;+XyAOX=shih+6xICuS*YW~tBRs-*bV;B;fHo_im zzG5JYwSk8&>{)$OJmfP`(@=`&x4$s><5ZbHfo3Qjw&J!80ag6gpy#!>lF|%mjzRqp zOC)hB&}F{x{60D0%g2}*&d+ulp-!Gy4ck$hoB$0 zmD{g=%|7Fg0R{iXveynB*xg_`xw z4InJhgiMJ zWC$+7x~QQ*p>dlU5jxUY`3+Lf!g=D09SbC0PFN`Lhk1q%9-qg0qL5HX$xXD*lFw}6 z$kwqAq;#LAoc(Q58SD_s!5MplhIjud^hAk?f^ z)MX4S=ojRp${=uv!wNbH7)z|x%pAemw0*xG7J(0V_UyOFOxx+M?%Ml%O zF(y>iW@yvf@tDa$mR{j&on(ScZcp#r`T9;Bg@7}%qYwxM$()UKe9K+Dud8%RPWd){ z0cDK2*#IwTku$w6JcE)wy1hUj<)t{cN`n=gov}>FhzrKwj2(3()xFj(;A=bge6D~N zMjJ!AzsZ6PLxwmXt<1ZmM>S!qy&+d07mv`FP$gmvM($;lFvQzpL+2FennmfN*p@@) zC{p+5!p3j-!k$T+EkgrwzSW0UiGw$yI|gJO4qS_z$Ke5uFEkn_9%OEoqn@fn?vkq@ zce0gE1goWH-H~wPsg<6%tgM((2rM$}Zxc-oqKlB3cG*ec5@1qVn&1_YF@EBS|6K^Fb zTYJh2OiqAj5xUTsChzSy2pL+zlPmSS569erF=hlJEgFXovY1i?n2x3odxo)}&V9bDeKW=5YJh&yptPZiJYF`OmC2#?6S z=bIe_<8b?~K5EFC8=gJmaQu+liGzD+N4RJ!HiY?RSQ}b@f7@{{@W_17_VR(B91>b0 z*||3{4cI|r$0Np~o|0u!CYvr7-M1WBum>B)V&hNYg`P}U6W4OHd)lqPg3x`Xo9iDT z4EuxL(g!|>z!FYgE>umq^1_Tev24F!jKsE42?Uo>vYM!%EBUQ-loliRhH>H8tQhByCk}~AG?Fv-e{&(QG8ADE~ z@)04}=KAg+CUP~DZK&2m6G<5CQ13&G(cep>)o$IlPZ;UU!3r+dU&H955PA9wGn(7S zfw0E7G>ra)-xgIBmMwK}$eUu4>YbXpwRKSE105kX6{T2oJV;53f9Ni@?p6`9jVim$F88;~sl9;10vm z5sKdEsjB@=Xzw$LI~(nnQ=X=?1wbm5rE+HLiXWQS6q%u5O8N(v{4)+KJCyqusiNDT z8-%dQxhN;!ntRs%{rjg2j|ez_TrHfdw0?jcp!m)eMO63xycQiU?)mcz5|QtOh0R?c zj-SB(2s3T0^JA-nkMMX`iS1xhOHmT@k*S$DSX|AX( zW$8&ln?jVM#-u?SO;;lAwvnM_<6x-EGVf5q{-cQb+sZ{XkLvt}L~ca11vKYO>tn9O zIiv>Pg>PApyc1^A4+&AQ3C@>wZCcn|M*W&EcwbuK#!{21nDVXUrY8D3@0FQG#-${G zD(c0gXd(+lf&cyxhJv271J^E2)l;Y?>_eYSNgsd79KJV%NlBlJ+i9o8dt4T#Fx1L^ zJ(;&|e3R(y7Ddo~xQ=M9+?=~KO5s3BLDwsXpHGs906TB@5Uw=Gq5y>XHpX80dxHlv zn|q(!yVxdY=sjuOn2R!{Q&?S~Zoj>RZs3by>&tdH z%4y$|h8M4sE=~m@u|9|k1pWLl7dZl7t>WyJ{dS=%h3-v7E_R_6ouAmKqo$gEX-N&jZP-R zHz8zyvNn?}nb{Q*VwgKG7qKt))7IY50e$>Evd6K;*~ebnQ;!csb2%IhDqipuZSzFU zJ#qbU@A2ceoYI$-o8{^yp<`wl`{>SG?|$BZoEcG{(O41_sbW`g0#0`0`Z`VT6?gmq4R&x7wmR<#K`-zI!loA9txQU= zu^E?|p;&TqWb7RZbX#+z$6dU!4krnmy+fR<0a*9(@!_l@3n9Vb!d+WMm#V7eUH_SV zLF^jr4)#&;I4^_^kk;Ms9iCMBt75R4g@uJBhb{uF!JwYLqOWhEN0E3JW`5es91wFwgwShUhAqw(C`$Khg9-*R$ z#nB=_5Or|i+&(Td|Bce5OTFSr3x|0gV%llQk5|9n*hc!SJpC;(k-hUv z_n_`m*&fKI5j|3G>E-u98=N9 zmU-f%W!D-NXLhMFD7b`;*FMb543~~4lYZoWh!{v4Xd{J1SWU_;m%Pawr;?NPk4_I; z%dK&@LZ&tRc$#b7*uCs9H(ug$1x9m|3}Cn7zQ+92Ar4W|*VVgY$Vn-^`8Ic2my|q+ zE%#0|lVHMQw>kOwz@7;wj0W3+r1QwD4;<8vO1du}-km&pwneI;X_OgMTs!08 zj%k^jGA5PU$_HJl{JL#5l6MKecgPL&l8fwB3h7M*viFKq1y|IGPRnwPfgJNW;0c`K zWUqbY4UB0yRf|af43#FumE*jAyd>%QF;DU8&Z%JJI`cGz(uI&Pi&SR?*|;p(ic6jY_C;_`%~$bM!WnYO-_!2Ly?gggm!C+#wbWL;T>EZ+2${+9k6-lVHKkau66yl7GZVqNO^3+(M z)_OYz#U%uYn2qH^sUEVnM0QMP)(M@Lu6M79iP0P@cdlG{aP_8Vnoa(%S6=Fi@m#{f z3i?O#p{7Dx{2w@fj?(Yk06Vm@p`?q>Ki9{>GHmX*^OVbKbV>@RL{#M0wGWZ4zvs$% zom$N#B}q*skQ;{r3i*i&t&aJUB1OBus_F`5c*8x*(?Hpz+=2V@;k8p}MOiK#cx_%_o*(5Z_%X1*Qp;^!X(lz$X!ksFTO+X z$^E{dx5V z&(xIPpMt$v`!r{iZE&nty|YiAp&H;qgIBLd1b*@G1N9pQ{hAN{caS(RYO634@~9idM;~)z+o-NQr{XL)dM)F*pV=X( z1c|#6Pv)tWc!g4@msIpIx|~laQnaN-e!*^$k{J0x%(Su3S3$uZJv{Qn*cSCbSoewH zlSVano*9JcXnnx8X(wAH%EzYp+*rL;M8ihq(l|xfj(w^tRP!Pxv1?=fnNbgJwJcW@ zCFCR=oyxtM(dd#p!I3<(hzR7|6iagd=3Kud9_qZ_YKfSeWQLp!yf7P`-jqP&rynHk z{@_UPHCwE;bPuFJ;*WF1l(H65%@>5e2A(`SIB*I}bU*Gc6mJaMI6V)}#Pa~^t>hVK znYSx2<+K{Q>F=K6+W3__sB(^J>S>U9mxl@&T@L=K2J${Bov(Bc6v-|kBBEui&2jPV zMbXdl@DulHj!q_YWq_NTIF}5$Ulx6c!bM9w=MR@1zd5gmj2Q)O5I$^X@=cw}ePR0o z2WR~k8N{%xR{hnUTb=f4*ygP-E6)PT8=hC23YC=f4Jo2U3G-mk8BKj%Mm9QR#r(YW z6Isu~DvzyYZ0ce;dFLdY2dgNXU|xfp_U5aZtA~U>n=ls-$l~o8vGTU^O+`!Mu=bnX z0>d?%Z|7Df#~)PpChsi7+ttbi5q@Gqy-bDcdd@+PbARNwEN_#G*ACn=6 zFEdy7477zvO?GVsewq>E(L8?Eq0rEL-1u?nBde(VRUoR^+}+Cwo%`OJpPQerPij?n za_l!(Jra}`s+=12?!BHS=h2Ff+=kAbN%F{xgCmbL6CyK3IgtWE-?dueu^1;;wW@Ew zC>##?olo{ZgfqElq?f52J|+_u;-)L#zTPk@U$WyDhDf#Z1wndq6YtDADzbN{rc1bY zeZKBcrL*>k4xzI!f>51|&ZwPm=$>>&;8=~MOz{_s!$E_qG_BdDNWtvQME}Mt#4jGH zFZlAI4_3Vno!gHi*3pW#P@vlKjcaYu^V-X__H-HA~?VT}|wb7f(hPN_J*H@AD^6c}Q5X$2Mk zfx}$p8`1t{QL28PGc!>9XQfsfF|ZRQCqX%h1p%5!`MSoVn?aV``V__s7pd1e1$nxB zz-2FNsJR>{w>TY`C_**2Zw}qnWLz5#P4YD24`O1jH)+sWpwQU3kB<1Ef=;(T@|YbF z8W4%;T36i``Rzp;+pfU*NfdJ*y0*aK3{9tFLpnBGrScfIz8*0@8aJw z`3W!Lrayjh>O|k<4z;~jWG8!^rj>54xRdrVLVy80SZ@UAY$|B=*0X!v@y>e$+q_m8 zz-qrPey~LbEK4zoS-(c3i!K+K?|;2_GeVw)Rw#$8ZSJ*<;EnFf6y_!d>1&-{QOeYT zwQ5_Az72An^*CPg+bOmaRXHWpiOt0Fb-7Ha&*z%E2mC{yrGh)5$GnA-6-tIuKxio# zP4Q~Y_;fp(CGp`+31JPQ5e;qFW;h|@RlwIr8&@w&<8ax;4>mq)Tz(&|Ks&Ox%VvsK zZ5H{J809hRoww`G^GpzoN1BunX?7)gU70?enrVlA^;`cYCRIAtrS)n!+Mw`GYWz za+xq{F0B}Q$yH0yO>vBSQ%?@@xnQITtj9*W+UNpXJCD?W+oE^}$#eN3w*bAe_{c+1 za1Q3_L{deCvu?;deyp+pdU85@Q2TNEWUU6aF(@%=*N!5`YxXDd$lVOSKZ$0Kj`uMV&b+t`7 zW@cvG0E0{9@aHi|G09YOr-=+nMv>fJ|Ij@GTX2eMW53$8`t5GDNyFYZ_l=Gs*C{^h zTm6lj$fUeHWAykcb)Wicp=sm=|T#tDJ zBb$19`Me$pNui)r0m(Dc{9m-s2q*^VXjY0@Ll8RbRNpRAq%DvCcK+<_oi{hRBTRE> z6d7LM?VM5AQ`s2vd@K>!kU9pYFuJ8KII*ySU3ki(L2sh@!v0d1YsG?G_F>)(t=D_0 z$V%=E#Y0~wn9#+Q>j->O|+dCMyiO1zREyuSp^P+XCRxcu;r}$fTiy%8nE;FLBXAo;ZY4Xz&JN> zcX!_^XR5QNKJ#5wezKm+&N9SzIiRbnU2jt?+&apRv~S>OI= z_?-7n-baVa6Mbeh=^sVzMk~}AS3f_El^Ge8cuzn15}|mp%I7;_ePIaa^kN^HxSwIP zrZpw}1!DIsre@6E0#3&-CwuS!ZK?OZzH)(g$>HbKUqCK!EhK%3(&1j;bwfo3Hv63l zpW^SoszAgCj@vY$gV{E3WgTvSBRN#oAqLc-KK^sY?p@q{HNR|08;(= zt{oI`#ZJF><3=}Gu*08EX8QuY;Gd5^PzQC6e?B@N21ezxqfgw|?P^EPu*ZBd$fGg7 zx0RrZnUIcAQ&|1LX*cBOI(hE17WR4*A)H2u4Sx7hY-Bw*%UQPlw(mhIHB7byLd4gW z#5LRLtH@6S|3$kLfzv0SY?bM_Kb71jB*f27AEofPg#Igva(N8e{TEkZWbn(|GJ>yF zq{~j>18H<^ciWn(1b$QwT)!qtU|=vbc&Ee}w?EcSatY@=^Xf>&$^V9Q&xLb20-0(d#`F{C?b!~ae@NZ8>+ZgWZr!MS z(Wy|e#w5odD-!bO^)7uoI}zjMNL~>r@%iCGygwLvvfm zE%CynTlJF>BAYL9Gk^)-yYjzGYm^!Ap876hRvV1pq!8%Y;ah~$#SyRm= z`yVyWIO_@Q+I;`f%;H?h|CO1A;@LBZR|EbfclI7H@z7s(SU8V-Y84=@@ec9T>tz_> zJkH|AP=#hQnnUuPg01;_XID#dsP*XAC6g{s-^0nCp6=hUUoN^eH^6eey{g?y?C-}K z-n`IDa@Z*799^(i=~lcn_-#%1@?U5%(e1;wwu0ZI2t$_%r@qbq6mamxNbCFZHunFp zL=Rf(&^?-HaM>Q*7^Og1@iJtDmO{;ZkCSt>JH3nW+8Jp>2hWWr2Q!nJ>kL-9#;%Ie z{UIE%ZS$)sMoCG&L{Y#ei#FaYbiC)sqgPQ*NXSCq+J}A@Fb``fA3601vGr%|S(nv;1w3O^2= zOYnz7Tp1b1I4|GZg3RJx2v)uWVqdDct+A_5yt6|ri_65%+Luj;sTe}>g=UONqnj$g za>rm{O3MkgB4DY_J9}W`9jTwBA-pG{HM85%;so~>`Wcr$xQyrgl4s8a>R;ZnoQ=ry zmQS|7iF?eR6Y<;0o}Hal1W@-|w{Ewo2kk)L$XYsv%{q5%wCy-$q|uTpYc!j&r|uNo zx%SGVlBm=*lxd?~PUlg1^8hHU`O~H1^`fL825L~zd+DZ=ZbiAeDb&kz>E4(OeQDx! zhw3mp9iGr^{;YX14`YWvQhA~ZKizmF<+^o(MnMW&}P81Xg(fPn5lILj$!Htj|mxq4Y2F?>L z?G7R7?}Utob;O0>8ORis#=x}IKhE&3p}~ZMi!0hP=_XdkPna?hXspfXtlD=~{_UEw z^Xjx(T3hG92@;ciSCQcZ@*I@J0ARP-!hB&Rv7 z0YF^Ou31V-i!}CZTt|E1CRkI2h15$N;lT?&fExYB{0il(Uxz+U8!mQ<{U>OYf%`o| z;9(68e$voEC9@|_%IkJr5h^}_X(uAg$^9{3rGj~@KFFwOlJX~04mbVG2RF}~nu z?JrR6_vh%O{jUcv|Mk!zj;$tB+(FeA`tK~uZ!J|>>*(kjYgbLE%DWeHoHdKbiMA6d z*>k1!l}#xrlfXdSN1UF#8gk*}X|b)J5JB;~%oM%I=?+%M_op+63f~XUffUA+XG$8~ zz(wQF@&6o?{ma{$1)l3sMgz&Vz)dxb9lC8T=SJ{YlzZs32LN^U#xS~d`!HolwI9U7 z+n$1usU^^5;u{+SeL?prj{i8bni1_d;%em1n48Pu2Et_RPBF`ae_H1Bp{tUlJf3F+ z68kDu!IL+xqeyG~??i#u%_Mc$=Lj*z;HQ*DC!Om-%Z&Dp4DuNfx)bQT!1o>l7wC4D z+QG~rpy^W2j{|s7FCIyqHjWsPOLcjx>0wS*Ou^IZK01Tg8;9ZLP~6zHFR|E%m+fxo zFtuH{;CT7jjqhWxXkUw~h!IGL5r54Tc==XWl^C!NN;A@bTl|<30#)f`iRZ-H2>r}` z9tL~Yi2q#uQsqu(+vtq0aft=dwV}KB`+r@>#C#U#7^(cR7E>zGbQ7oO0c!>g{hZ*Z z;$m6fDbCHRT)!_$fVKWS_mw-^>l^76pj;iE=qd}~lA@{cXTB=+h?yzb>hC!o=!O2t zql}swG5?gMIe1tcii@?aXZFvtpcpEjJTD)AoK586pJ1OVKsqWJNcp8=r*ZNY3?-~- zHn9^rheO?s*|XxK@ssjVn+MFY$h&8qR#TL(K<$Ru9l86FUhP8hJ{Sl4fdL=+gWuM7 zpGUy?NxTG?_OLx+8!s6ym2oK{Gema^5=4o=E~$KlqmQ2%P4%?SM|6A7S_$n0uKm9D z^H0RjPY%!m?0wGmjw7V;2-YTm>iQw7{HE_K)oa5GVLk{kaoHuTQ!a9p_58q?(i`Wn z4U5X)>13s1?XNwdNL1~&a+x2J#*%UW7V7=IFR?Oxx-aqLp3pGig|~JzPJ|zQET%|q zYjV@*Hl$An`*`e-qq>~Zd=*3J(t4Url3Fpi-xFP>)GK=VN=p!K z%tX9hJv{NvsduNNkrw`2tM?i$*(Sb{0OhJm!_0YHOzS9Geg7YHCnTV}=QjGa@cLKk%%21YgYaN2D`=8}I?YvfN^~gR7SnGR& z{6N+}6Gi%Swb^kOCjP6oB3tG7Kex9MJ$=>5R{kFQfywjvpFSA~IXfk`w?8R_agEr! zFJaiHcDUfPMT(F+*{|ivg9MB4slS@(B1HZ>u@Id|m3cO&-u_bWR2&ROWM5E}K*pwS z3};<6fT|NU&|fLYtY*8J@S<8ZUJJxE{rRu4R|HR5eB|T@9hX{Oz}ngKd(9N<$ONxh zy`4L2Ms`aQr;&~KafJ!eOM7Q!j0KHwiPg64F@*PYS8K>gp=hpka*&H>q`qq#3oC0V znZIFC^OlLf@$y+X@*ljHz*t%J`Tvgvq%msr)J1g2fvm5s8~fA{*l7UgQY8fieIuoU@CN#^ zQ(j1`!H>oDgWqy;yO$abRH#5TXmvPP!>WPxY`0iQ#G`TV#@+rw4@ctzQ&|n%c&)0C zs}s~{#Eh_a9SGj&f==F;)CX>sdVnIA60jcrr=kBe!}TYrFb^WZQ+B4&6~sLD zFTaeFwB1m#8mB5l+xy(fM2HN86J4D>we7g)T|wXgCU?E3(tjezs!_1RM5Yv}$?q&{ zfzIylp9__Os1j~~X-BW43eY$g|4KVseZ9L)@h6A#jgDmitj^tLo`nm7PRk&cUF27< zOXf{YO`RA!Emnj?%OEOeQ~&-FArMSc>d5f?n^D1^w<-c){eLMHX+A;%Cr_8^D#OC1 zS6}F6`b5ws1m}G})$3kmJDUiyx4_QOUzhFrUQyDoe|3Rny?+SV@(SJpZ>oI$X&Mgs zXUJripwwZrsBu>toI&7zMg6nJ(2R|nOo&W4lGG^OE{_l*-zntCw8)=+>o$rX%)YNrW?Q;{R>Ms8~1!D+( z;rKqWex--R(ZTEgGXa+|zIHGYd4DhU@4%;7dPLRny05IW}yVVQfXRLk2n4aiR@8uGg{q4N(GHwPE*o|eicPfb6ucMY&-2%B>C3ADs zX}PdU$o~W<_Ox-d(Gr*r?DohZ%41~KeZ)B(wl5zy z8}#ltU9x!MNqeE{GVF%+`PYIMDlbp}mL`#*&r5#=O%Jj7LG|SuEbo%Nv*Spwn%8|h zR~pjam@Azx>1KnGyy9tJ>y7Exye-CSBLy%BoUw2_h@^{a#hU*$ko8Yagqs!69skQ% z)Z6NA(>3qwDQ3(*iJm7Uk+plM?V6Rmhyeg^Vn+mwBc=KByLJACW3 zF(tp;b+s0~G{o_g@Xh6xKAy3Vo2$m$&JgNeyNqC7iZH0jrx{z`mY zxU1btU#*pY_hCB6o+lck(uu~8Hk9Kd{kvMGNTKQH4oy_lE|mO<+Rv?G+B`s9mMK@0 zTVg7uF`jY_gizAUTsPziZ9#O&JUzCub}hH4GGXUw>SYz%dp8g)9l_ls?`=8D)h>!L z>>SS%wO*1raKd|th0ItLe1p~ote#$WjP_t%5EDNIh@UP8YSx7lz8P>2%+i{(mUMsHt=psCW2WiA50q33z_*Sy5gI{RHF6%%e0o z4UugS1s|??EguLgrGqrcr>w@|6yuM$F|)CxnFLd8@++&Sl0jZScT4Pp<(e}RtW@)F z|FQS%D_l^Jm$zv}bf1o!Pz4L0KPB-+g%1bT)((y;Yum+0Zh<3zKbsd?NENnv4OKTuYh4E1&|>#1``1z3vhY^?h(VwVyY zGDJkH{cBRBw%ZMnr1?Xt#1KQUr`nT-%pBlLw+mwM_t4^zXn-?@=j3huv$_w@v;NAI`Ky zMK9z&D_7OCmB9%U-awRoskv*C#dEES3V$s#vrqlY)=wFk_2E;AD=T6})`Eh%9V?T| zU@#HJh_f6WF%6rzLH$-ealaq9rr@S#QzbOt!0jrbU{;SC6<7IO`rb ztPw|Wbeq}1tUTItUBW_Gv%Iw{R1U3DCEkUA>nO)lY%y7m6n~BKETD^9TuojY9lKq@ zGs)5Cm$*3bLRsBoLX)PW)IM?X=s8bZ7hWxX>6zH-dUEiXBx#T5q-1`N4Q^HU%PzNr za^29QPt7l8e*}iX43_ex{M2DE&QDpTdTMFn&d8JoD_=>DH3)O&>tU#(PRo#xrrgla zUBwI{7~9|>&CCrdO?Yl9$Ba(pr<4ay{z2EW`_5UOcRU<;5nqwr0t zqW1y?e8x4SIMm!X1lX#Lb7KfH*b6uPJCQvO4b?j zr50ETn_3ZdjtbV_OkefqZNDIpzPlHRLEanQ>cN@yI!}U})yOK|8AK<&Bzfgrh)`*o zw*m#0Pn2h}m`K}d-IE6W#2HhCisLSAr{gzCr4kp#&zqBrDOdO2WB3r7D|jnGja|lIw(RRYU+@@|Be|-@I`(|2vM!a(n`PH zg{+01$#`Kih4xavgu692F$xSwg`~?f<(|v1!UyqA1W-OwgG=Y?BqHW!Myf>y)}7!B zCavAwsiwn&=@T1Qb{f!*-cO#ZXrB{4_^eqjWwm&}{PROS0m2MqGGx%at!PkLve?q!KGNSV!^GrdvGhotq=$r zq!cG;AvkBz=Xv)2U++Hq-RGQlpAT=oW#zh(thvUTYtG-e$GE|vv!{u&jj`fPk7X5p zP|*gmcVf{B+PQ!;#lLn~6qs1(_BV60j(a@}A0==29ZcrV61rxW+-phd&2H87_7<=d zvtT#~+lOlq<3w_djYft^iTfA#a!elW_Y zv!&eSq9$4O*Ao7>!E=S$=T{j35M=dozl{tvyn6ij$kf($K{kc=)vK>TTkEc_p2Q4j z&?NST?QG~%uw7-_X?4X!RNuwPi6G(>VNhHeQNPv2wGMwqu)cMonBFK{&$c_?AhSPK zUcwKqMQ%KNb9iu&%)>Xrngx+KZ`8f;CF#Lx6@iF6dGcgCEzy+4RG$Hjz@N0l6tbn~ zTRr=ROIGWk3bhiCdFjzydVucN4u+Ht=f8q#R&NBjM<;AMkU&fK=ADJ_HCP&n8dZho z25|#;8OS2y!1I*h(-bG)vDH3$me6$~VDI$fzEGMBO9n%XDD}QT30&-Um*YGw$pHLA z7?h95Prk_*(RZrp#vantKz ze_ls7*ax3j3b8C+?zP%k$C5!8bk-N0Qr^Zm9m%ep#Lv%hTMl_WU;qZgOv@&me9$CIJiAEbu_@BS)TA~M!g(yZ!Y9_N{R2-NV?`NWH_{u)plVy1d?#*7rT(Oevw}F^NAQ5Ny+@vePz~AK_&0AVh9VIg0h}LB_;U5^GZ& zVDGU{ZGOPr`Z6$@^gX6}J1J@DFGRywfAhNFY`sl6+L5!_Ms$7L8geLc+o`#U=N=F@qkA>TNpPPy`eq`Ae~`(<{aMr2G3McARut-5Qj zpGd_V#l$#%=}0Cp-4RWHM5NM-IEcMs6M?zUn}1zH7^L5~8uiJ?JPkj*!Y(2ewh;Z| z@Ps{(J0bGsDhMAVW?a5+^hRjCmaR$dcjoM_3B_1S=4NAV;ofWC*GRR<-$32r^t1{pUZF4_!=Zd1~dGugE_46?2 zzhxI6s(Xujg9)ZI(=)hVj8ssESZ%QT@T$eWc~0u3??o=$2dFbY8R8z=fV}Ur9S3qP zA{F%CV~FLLQ!aW3>@<|1c7=y)2}wyJQ-EOUSk}p@ovkS|eR%kWZ2XX@B)_FT-au`< zs`8pjO;6A?8VW;Js9>Yio9)YK?w4Vx|Z z9-t=oipY68?h@?wx(6mQzR29+9sd=i9v?nz0q}R;spC&^CRa7q-Gq&`@u6znJr6s+ z&mmAV968?JQ%t}K>^#6j&pkFma@&i6g|mA(OaWlwLRi-(ndY)Uy5ieoNA{6#^T{aa z_LG%M`kHA2LILuS0>z6(Nuo~c4r%nRIlFE98v>G~6pY^U?qKwolx&3;y#}r|LAz&$ zF5!EeAYIzHOt(&ElxXrhoC|-zbK=PU0lmFQBvi_~a{N>zM*kJ=k_^~+4s5vq(!Jun zf9}K__JUd#{Z3QD?(tW{Kc-rrLn_%cOKH=e;8;4C+|#}%eNX$ogoW+-U%t3Hz;-j* zA-G4=3E6j7j*B``F4=vO%z=2AzjWHH)w>uo&)YSMjXVCq2%sE{gCn$vy%Wdp1ish+1+YRN2Z^ zV^EsNp11G@Z+I91kbl2xRLAc6S1xFZ{&(2c!>vsx=z#Wv&zo$Pgpm|w4E7P9LM5n) zcwahSvgiqK6D?~kCoj(|6IEmJ;EqS`Ql8ljM2bhpS=4p8y+w#^h&-3AxPLtAYqsmO zu`1B8HH?j`(p-&nAUsXtU)EH*3jEA{NvI}2FXFt4;;+cN%PTQDoxbCL%tJbnzMDh) z6N<=z;Jv}I!N`(;qBIW~Ln)%vM)2ZI64+Mc{KV zQCA0Z=S51~@gwg4psoStBVpIw@#1U_QGdB-zhMpm2J25rE; zE6DRQa0TKgoe-LW;>nnbDCFO*Qgu zmGH25ES4{uLg3|_kySYxx`>~c^m*+cdZ$d(XoZU=CV?4t3i*E7U1~=M7a;f621}?ZV7bHKX!HIVA#A z>mP=5+kbAzO_RLn=eW3ZpDyVV1asAh174vlrz~fF2gSU~3p{Lkix8Z&rlB50`zO`a zq(Rdg+yipzWG_BjBRGhRQ-3Wu{A~AU;0nR3pGn$!bq9{C!>EuLASqSW=D-)cy|0i! z*l=wOx^$4Hz0vwZY~s(UsDLDzlQMNit&Mq35?i{GsfBpo-Nm&k;^Ux%hPs#T&xZos2y5;hFTUM_WRny-hZZI z9M;%~=bM(z&Ra>|GU@9C=Ds+8QRhu9HdpxJ`srTSD9ISzHUEBH~a;Ilw&J<|hQ_rU-|T?=MJ z5AQ1bYc81tbW#JBi%H**>^e6&Yq({Oaz1Sn0hu=p;nyW#eO&VLy88 zbiW!^Uig&*dPEU8%Fy^O9jBN5GbtsC3wxj{2-=jqb9C0CV(rkq6pmS?pE!hZ$ESuX ze*gtZ?|-l*0}{zllYU+p@PFRii=6nC^5WjRTh_+W+v`#*&$2a@|^g#CXH8oXpvz=$*vxjVg&_aL}Qj*cDqK&SUkkF<5 zB#{<(X+X?SaRgryGh!{?8)!4QmSg_!bYuD7&DODfyQ?c2ad|QjXwY7}ZDA*#5uZl4 zqWnEI_meP)+St1QR2CLy+eoqMd#7Q!(22YZJ`4{R+Ixe8w%TqE)c$V1V58=QdyZ4A;In829lluuNT!i6fvts=9z7-DT)t3d0b_E zA9U1m2Ao_mBce?O@?cjAYb?CgTH@B_5~Ec0=0S0%65`e>508?HvzrG~o95^0>uWq+ z>z`mn$;!wC)Im-GV8Lg)zZmuLWZQ0QPq9Mt?73Nus?QKohwDzGAXf?G95pJfe*_1f zjbl6r_86YNOE`K-KKyr~)L{>++A{xCac8#Yc=k&IUkpWhWj9jiI8GwLnQu5MY^iBG zJ^RSPlN|)!6Gd4Ku+rdAgqmjtP+X-Kv<(>M%(i*8@h}{%rxgNa&finzMxDpVza$xW zPN&L|+fEORl1^;IkA3>qO^v_BOx%U7>4qPDRuXkq_Lb|knvYAorT&$pIdaS29N*2M zO)(stGRA8$WKlvlh}mAbyZ*B1e$alogx{Ea9~|<@*zL#W>=)Rq~uFTvyOn% zQQe94QS{n*-s=ZH?mw?PmH5h80SV{rzN@VY&INQ(WKe@gnB?;{y#b_^v8||Fu*Rd{~LlG~q zkTH+yR911PF0HKoDB#@p;(&ncFTmQ#d*jn_ebpU9Cm7SI*)#ecaXg5=YHWoi=~};E z;V3aTs6q$MM`-PynsEChRsh z^f)me`uraEatVJ$0Z_?QS@8khW#VIhGo0*ssFtX&ei|3~*s15J>%v0oteFCQfHli# ztfkG34{4J6n31kK>hrannBXlF#B)fJy(!#tFj!*e!{TgRx1BUlnKEpVR=dWP=tvWa zN0gAtA9~akgSPpIsa=A8e2EL{)WB-0p9s)(CZ1>fFtS19_z{tD-`P3QIjMNy>xsx zE*okuhlq`cR{=!!o|T^q#H%F-z5&j>55BScK6n7)CHW3dY8n2K(Q`hg5gIwfm&~zF8>w zY$D+0XOHs?8#_kZ8M<&}C6^G>^NG~MqK_ICHR!^ej(DIfBK!Vsc2|^hikcml{%+dq zguG>AbQvND`uV#b>rWQ$Xv$Rvrgl;Ro#z;yjEnc-?k@RUCJ-zPLHl$mPk2~%k152z z^!PC_TvTLkajilWu4X=gxHI?xy*@>7@CYq<^snNmsl9)SqvR|z@4L1JHHl()h#Yw= z@9D&F1FiYSYuu3z;s1BA*zlDP0iPNX*u3BceTrH7db4*)&LsYV{X-QJYjpcY*J5FCpV|=Z7exM#=jk<=l*{?;LHikY@&vAj@P#%N&9$-ZJgXcvw*!frB;=h?iMD zi0F`wiC%xY`ZdyEX34J+gmeEyPRv7cX(PD17^8$q;14Y7hX**hxq-=qAW{^*9)-R} z{H%p@bDa7mWZ|^-tR_h~G}1jL-60{xct&aZ3JYvgirP}fk5Sfha;l4$XF_2djy=0-X082US3qjNr<{Q+ezN>o0q&>;>C0fJiI?f}P!|Nvl-kL2w=H_$s z{G~p*1&>5S8E4-K*~oVMd-2o^Knb!7disDkZHkE0!H2eP$BXgu<^)ZsGE@#W=Au^C z9K99!4r9pDtA8J7qFE0?wIrReD7g^9FVi(N%qd)Lz+`OebN#O@=w5luUROywx-tCTy49C}5n|IfZSL4z^aMS;(NIiB-f^y+p zOIKCozbQEuI{>Cv^f=ikznY?ywde>wqebV?;qwm0Gd)nDZ$tMbi&@CMERm(dQ1t2` zuKrgBPAi3oXV#tqY0Tmx)$^G}HNr)e*;z$D%9u-+ zsEu{WFaPE)=XKQc-UDjDu5WWpj6e2(2teA14inLxxE6{1lo8SOSI|RAW&gU63mrIV zHP%pH2Xc9#f_2sh*NpSGGG#x|JEPfY&kgx|`&cw(-_P-Kn0AgnyWs#(UhSB58dQMb z)*$3r=tZr>7Ia3rG-!J+)%xV7;vZw81rA;_keM=kJ3ID8$TW)Z^ts4KX0pUs$(J~M z`ACOoRRjv5m71ZG+b@5h5j=5$iUR%3w18UW8;63^e`>TardAFjjQ@gN%xwVd8s>gV zRsNbtV~BF+)sut&8R|Oyw(0R?Y63nd!(O5s^SA`=MZiF;7~9w*oGnIn*`Wpb&V z!Kom?$Ixs^tV^#?#ciG*yy`Jfm;N8Cq~72EU13}KOAtkKfhsd2Y;&=bFak)YaRJM3 ze>X@r$u21E+KiG?ZT@eUk7_%$CMV1?gukGun1p-3HtWxkdh=ob*K@O&d~)YW_T#E1mRa@bX^TSdAQpz+n;qhem-xw(b{J!cl6%$Wb9tT`Mi z!7^MP9VL5@MM!GlMaZBRiQ|tyVtEAFELnb7?M2c+DMzBbIt(I6vF0# zylg~rKL(!Gton`9HDh{~Wh!ql%IaF#I}ZP@mNTpbG_UmH3L*;;GXd<@V=K5zt93qO zCWP|e-9y&WAtSt}9{;b9iy1Ars6EoHi|nJZ+h3c(J4brG712jxS3%@6%?~;sRUt0P z6HHA+5?%_Sn#;Gm*=lHG16Lz~XG+zvxI`V%KeC@FYgtRF1jR<_Wlc>z?{u90<7ur_ zE|)rU&w_X@)PjW^YdO1RjYDRe>Kg?Be{>TUHy_voS}dD)GiCr zNu=yajtvyTMv3e#&;uj$mt5#DKU&JWD$TlR?h^$E`~|s)y`VtpYuu*KArf!fs;x)f zJQse*{y9=#YZjXfl?;;%pNy1@hMGDx_8PT=HN~l4!+7$4Cnw#BwGn2=_jV3rTb2fhInF6&(FSp z622WC7uvG{RArm4xWY87zO7DqBizxPfx8m(->=XqGbW)Drfh)z?6ImqgaQlfi_YCf zAwhWKi;i5>9TcPdS15Mt2W0KYdSaKHT2I1ousO&sZ~QraYLBJ3+jPj;OmYe7ASx)% zTGe!gxKaxd@RY567bWD|*Hg}?QWAM8YVTS9!e5xtvL%04#DV!AO#O9`TK&E9-=Dvy z`!5c9(l$@(EFEiE{Uzs>SRXnm4a(0MB#=we*)IHZ))Eo~WGAYBe__pcrXqqnDF`lZ zaa`b^$~-_8^76m!;Ct1+LD%^FmEgiw3suzk*2^x8>G7sHrP6wlF%g7DrOwu(*l8@K z-v^tH`HATrUZnl+)tsdcpULarPz5CW?bSQ0!GxF_?{7X{D<7sXyWsl0Xj zt`t-5j#L$bqf?S+RX@$!z=krm!5wvMg-)A349(t9F=GM4pXbzHspUIR(X+xmb0Wm+ zKmw{M%p^PLUJ+h#y`8|;90c*=YJ2W2wXLP5rp6W34;=F4|F+M?^bgz)^Ao<(5wMg; zchr89sZfjW(-`?+yTN`b#ce!n#KtxQu3ze->_8Yfa~fNZ4Z80W7BTO>bgTT-)Gq78 zyvg;7XmHIb4J6Z1hu`)xy&)Z8Xh0(SKmll4L))j~Y;mLmmY41ouo4-h7wC$lD@NRl{KE~fozkLLT&LhUTiV<+F4w2hal^2UOuXiAuhG8IKv z0Z&hU4RR)ILh!-QPPo?ILZCa_LnFbXK>ZSvK9qN|PED4FpD~aDC(b7RAiH^v(zvm- zdiH7rM~6=c%T`^{cSyHaEGdTMgz|gFSOdsZ6U_DT*N7KU(##XXN$U||(y42SMLfMj zvPn_;O9O;?+KaS4tdu0pJms&xgQZ8}W<6@PUoA--&Du?E&+ zF|Yo!0A_bH=%YHsx95X%=xlDoa>eeudmLR>1_z|`28&k^%7to0L#^W(HxCO?F-PFH z(_hHR1(nnn!LjC|h-X?6VR_nB!}V#J$oZur(3jreHrVp?T!n^!lJigCXK8E*2R54HY3y%Zq~#3xSd)W~x0x z2~U4Ez0Th#rdnjIb6D41M45NNtrSn3tE8txyAFei34iREuHyoRjhazGseBjCk7|0?)!_*z=lNa z{F8!_$KKTg6PShOQaB@Cv~;ILm?k!zAtdE|4vu52|*tF*YVyFXkb3K?(u3T?ZH zNV*dAXgl7!^cB_JSYr;dU+tw3^Icy6-HKNE*noT?J)X8VzeV*f4@10;HA4rF4V8Mu zF0T@n-dWoCWo0FqrR)!>7GArA)IyL0hKd)UxAIDb*k`R*`@yDJ9!pie<(G*4#h2Ia z7j7Pfb@Qh^1(gbH-yjt89j)96csl3y^XcbLP9Sz^3&&&FjXZE>_#Qllp<~|79WnRC z>#&CbesECK;_lGMUFe}OltH?YoS95Qh>PndLf>&TapQBNBkybMVQQ*F@hK4Hh^Hl! z%yB+*lU=FdoYl{G+5^S57vm|**y~0A*4dS5!;@Q~EVMbo#|xhbLC;*=-OpETTwEqk zY_&ED*F?QGJu<5ij!L&Cd(!K1_Ni7!EVb$X+w3u?@HQVn?J=a9iNG#Qo zbYi|%$(74Cnxs$VgIQje+r(!#7jkpLJ3H5DX`tz*(iODCi7L}D*iTrwZif86D-Dgw z-qrcg-o?pQ`8Ooe!O;u3#~3Bx{(IA6Z+)aCzxuN(>!s(HQw&DyM# zca`)O=cM_ubC`10-`cg`U|=H%v|RhSqm@dFzhS)7StAR)bdQ;XbL{urAG~XNzxckuiQBMMQS=4fpBYfBquOza?<@07dA| zF8mUV&pzo3m*Gnk^;;F^ZuI^(gHMR`gZrfG66z9iTA9_$&^>yM0mngS+ zFI()L6=sbwMu8uEhLxtx%h6z;Ad!tzr9$vxRXgDNY}nN}KRAGCJyfj#GPw8;z5O zhGs8@(tGz75T&iJ@yC?MFG<6$Bu{I>{b(Pb=7Jy3=hh7ssG{~2%nL9xN7WRBuGf?a zC!A!MUAukQYAI+L!m{;RNHXHAoEoj!Pg(lCD54rel3!_uwxvB}er+#7AUN8+5c$)6 z$m!d@$N5q8u(PYqMe=~4Vy3TkVOFo_%+q5$OI3bx1+)~(N{Xwd%k5IG0i^phAoYiz z&}~e_#Q1H~mp<~2pP3bbP3(#iQ@AJf(!-}{zqIp;u2j(O>&sO62oT>;r7VUCdPU^t z>8P*vtX6y&k9$t?d|ba@k~X(zyS@EnZ#YFRzdH2M+m4IvuYe*$)@@ZiEI@oxC~RZzr>G4c=5%w9P6b0u%#rId}S z(jxvIKB_;FY4C(Jq?>}v(jjQOm*em8VvbHL`!hzxE|J7S_Ma!+5-vQh>kVl)%2oHa z>v#5A_Su_mSkr*D%*||6OjOc(az^RE2b%c!JzG3})jG~(G-$jG+U3Y*UQ5#VO};ow zPg`pZCKYAYnqT$cMarMiOM{6+@as#itRxDO=AEFe07RQ_CQjGy+1e!UA68v8pp6VA zpG12DAvfDoD4SvXilNuJ(cW))V$i z+qzf7zQ-xuoveTj@p-zlwg$!E#b}LbKKp*PZ{!=R(4iyRM_+8EbOv+-0b^-_Ff5wHCkQ=}>qFC1@y0omjcB zZDIVUU|QP3P6lf}6JBn%&M#bU0fDWcAsCF{_Va9`l|o%CXGsLU$B|xrqHxfQd0Eh# z@S}XW>7f9D{m4EoS4U=j$i!w8=`=XWxP=PEJaDfr2tDig^0o4?g?t2}a9}Rx9nI#8 zndMn-PPTewmkiTpV2+APL0r}Mj-Y70<9rgxh*jSi^?G1E@jMZkG4e3~gYiAv0KOdy z{>n)f8|_VZnh4zd9<+wj`L$NtH{8JNq}?YEbNVoiZ;+seA6fe}EygFd_v}RMy6v)i z++^=GqnP9q+N9LYDpE9yPt+hSTj%qi%REw+4P9JZe@eNy;d?%`am5VJfB}xJKE+4h zB~GE78gJ#l4BBjrwtvK^soJ36NT(5KF+u0uugj3~)up2vv=ce9WNErrG)lBXnKWkQ0UML$Gs!BHo*OaK1~Kjn zMGVLp%J#81W3T7yG^w)|I&lS>%C1a&82b7C7jPke;4Xxy*JHQ{h~-W+3GUxrNF0sJ zf@f(UM%E1ho8pcnL(lQ+l{S;TuApL+FFs#2!%3@bw>MhaHy=Rx4sd*xVJ!HSwx`3;SE>J%jtNXCWfp1^Wu1|cC!{poQ z_o6xERnC1uPsT=krksj;Y|6+MFZ}pD#O2HL(Og)EBv|mG*gl2A<^7u15SYS!cP7dH z@^$5Wtwq|7-uOzUms^^Rjh$;>Okb8Ht%r!qrUlS8!GOVxZ?LbH2f$Fw1<* zM%QM3WJJNfFIp7YL%4L|^r_sbPQBFQpO~`_K_)s#V}qleJvTlpE;aLYz<0zJ4?5sqeFD>dbHux*E64flT?HT2 ze}|0ltarymU#@CwTgWZZQ>r=4ooO9ii|*ZQAaZ%IimcRHI?89^N7t%COKk)m`*wC8 zm!g!KTd-c@Xo^kMD=*d--v@TQ?;iwio6TPj^gDjkX>V=28g`MBtKHewS&^%dk|H$s zislx6SO0s)c>=3P(&p?o&b{92uKprw8V+B}oN4aSZ~r)j_0*tL4&!8-)_)PYxGNag znV3FS9E-6;;*rY&_APl1EZ#MvE#7{E;ikN+CnAkjk6KB2o+(ppW=FgT{RVoQ@Is}Y zUPJ`ahC`_3e{Pw;G29p4|1&SUnSj7i8H<$9twsrb zir%Je%Su|w0xnF7k6Ff=t+*f4&piYYoL*2Ni7k;AcC-&;KRUaQYA*1ZEVjO}r#Mw_xODw9nhbGDdrM8Ve8FXLh3HC|<+Vta?S zOx^U3U5JkuB&zk93Lz~Hl*0tPE3;IKZpA%+ZljQz&4*py6nf4OVl^OW8fEvqJV455 z>vQBSkP$| z%h)UOMQHW)=1j6fY_#HU=q+Z_n=`R)?s>foQdaxG?XlkIhoz#=cXLslU^@g@v*3zbyV6bZP&5 zruIhx7Z#=_^XBi*r4#>)gIlqi?`;73oBvlOJ8la5bmdcU$V*)oee2?^zsZ@l4fue6PaGuk8VpJ-^U09uw+&d#ZwjD)GTPu8v9bnN&qDjxmsk;D~&V4OrQhTj54{*{822X2Z>x!sU#cfG6GL5Y_+lFc2_ zM+z(+(Dx2@Dw}U*QAXI6GEUiVq`v&wvft9AyCL^P{JvTk)G{}{h>VPETpJR)x`@($ z*7#-S0&!b*yl{?b5ACIxuJ=?w55%>PICoeiOXUz*Ko49Csw7K>L?YZbdwjgEPPHg^ zK8SvY@Cov+yFC$Jx$!*o5>sMqqqI$1OCG)GwhM)RTWfr+p)-2Q&W=SVwIjGO$H%ZQ zqYO_clT%9^r4(NZM=gFM}Q+Ca@GpOHN;g#aYP5E#EZ>0vvu)ML7OVMA$J1E-wo{u z`TM=d(RW&J?Jhj|F0zx6ICSlL&yE1C-RVVXum)ZQ)cvBq!)cLq__(pe{p>2+^2MC>12=~UHu<+|m8CZIm!kcc zudY1&valfoG+ON;Tf@xMoLKx1$5Y0)cy5(yS_46Q3qK2cSzsWDRE66^ef){(|t*M+GjH27+SC4 zHD9^kJf<1BLu(S+2H`p;tsV(1rqk|64|2-3i2hTqNAx$>>$to@7aJBDvmlgQ9@L-Z zMzL#g1ORM61o`p%ZSoc`dB;@3t6oSFUk3u+y$nhS6NZp4Y8zOW*+JFn&5NH}Ns)XG z>*pqT=8RZ>zRuH+u0;{(9RSA}OSNZQe&GRe4GE|V>wlY@Ef|QWUxI)587>l4?f=D} zmj$;#@L3lNA=+ZO%2QcQ=ET#Q(V1X+IhZKXO=v6Lj!xBe6=HsXCHH_Fj3fh zS+(+Xc-33Qw_apos(EJ0e)D1c76_e9MqGK@%ObF{;xQe|wt3%h?yw)pyTx)R6wu=6 z>5_~>%5uxOX`8%t*s{SKKoa5JV`|F{TI>gy)u+1Oww}Gsi*=y>LT}jVt?~MPNpK&D z;&V^}maX5n6T1opM6<A?>O?@0e8DPa)e1wtK`Kt1{ zjX`;Nd3)kubhKIfp!*E9nX_|kCCcc<%sXI>h}>p3INDj3EKR9$HE8GDDT(ua@ zK<=Z?H-I-Rbj$kImG)6t&DzgP#n;X&8CJ7=dgqcx7fR@lwdK;ESlGpA@IjL^ z6)6uu=S!FaqKECq*E&mI3yo9lLfvIs>+tr|*&CCg>6-xPTh&piAbJ**~)2yX)t06Y^(}^p9 z^q!<_Xp_lsRKP4mmhJdcMeQcV%MV6I&T)rUik!5Xagl>XHa0eZTB}^K0NETH%i(@= zW#)c;@%w%7%?+0Q{vtW>42Y(<9)`Dq8n`uvNgY~$MU$OZacc;b@tI!s{&xdU%+_1^HkxxBvF;U5^J9qTPQuIac}0XF zTA6ck)jDAlL@qMGDa+no_K7uRW}Z}3y2lGS9Ysv|MF_RF_LSS&f6S2iak2V6k5myR z!{lmc6MxBsQ6d$0hzwy^fdBG4Dewin+e&nrc0iBc2YtWAhQpZ`0#N-{ zQ77XW##*3-9mic~w$*wfyL0vVtq#D03L7i8tS2!oawhS6)_Br}q*;!damWhVnfCN2w_oJ521Q^= z7sX)7;FiylavGNY67E!lvFjdu%050j@DwgCIbDqZuaK=@8tPePt(#C18&GY+4&$@Q z2U+_0TZ1`R@L_7jb?~zDE&=M&oUb}GG*TE(^63+F@NfbmX~&ETgSZ?6vaR*bc*3&t>F@1Ibly?dVj&CWpz6eC=Aqzah4zB_{WiIaeecnWT3M z9@z`RzTNHZ>y>jJ9-T6+jvbJ3=fy~8(jk@)+!~+_yf$~4fXjXOO)A4J!pl>dz*t0} zePq7ayZY~h4fFpJVLNH#k^S+e>J5%aJ#U}44vHtE_&6MSxErank2AB&oVaU(sJ*Q0`( zgaYQ@T=Dd{C}X7WxSH6_XM$mA#C3O0hpQi;HR(9t>E2t4X)9+B$k4HIU}QHzaEb|7L1DYX&(rlOF?fj|c~T90>c-HdN)*>!Sp`xs8F6V+dM z%~^8!O-Qk28ir}+XYk~R+l|g@EfttJk9!h@Pqbr%`IvcMD6PEAL~^N3xP+e}lrK^~ z-`RDMBi^8p+`ZLfFO?KB?9j(eH$6eraZ}jg?#J&r3~%RB5BlPN(eHP)xN+RuXM?XM z#{n$h!Oh_*&t2x`=NDGGFBjPT&eQ$!TcC4wR^{yKnaTaWI=!-C81F%dg;`Cu`@9+o z3$pb#FlDVk|MOGC<=XPhfxN4ym^{pPREJh!C*Y2!C2xnY>&JoFti)l$YPIzx5bj}# z_3*eIZca(=w?yX6M-bAqj`98ll?)D;7@L)a2P|eR_5`#Z*DeW83_WVEO{U%=rC>Ii z0p`;QcY3+!Kugi%9O{kjRug)N;-{(ht+~k66t~A7qdMFBYe@z!ejfYDUI#`c_h_FK z{gUD7#Kilum`A5)+^pak7AXYIQL5VZs_;J0o6)49BZa z)ta$7Csce(svj*o-#}HzWeUKEHQ#MWO#Z?|YdLr!>@2g?YDUL)nqkHi*S=C6cLL9y zaA&HSnRPM(z^9w=FLEyFO6VOs({69=ZkY6Cc>h-4hEkNs9Z63QpGT@6Wk{9#MX-Qm z&@#5)N4#9ph5T+b>1%hHNB4whip=Y6e13{tsGZl-wJ8a{JxH-hKv)p|On;f^)j_k6svh7)!adB`9-c zfJQS~giU6@C{U8MrZi=3nbpG9qTtes;wM{$sd2nIbnA*@K6UtLP-+g=YV(tk!Nz)+ zPVp^_2d-aXb5ip0p7GE`D&l?$~ z-Af)Y4t!mPB81BwKI51Ma-9tHGUHkK!;*5O*%vL0Xw`sqZ0SqW&$2wS2*x}ZvsQux@rMI^mQAu2R7V0C_U zdc*}~WgV#~wFzc#q9E5#MhHwC5KT>(jLGm#{_=<$D$E)U_S$}iYsDQ{S=GfK$X1Gl zv%^jduB^GjH;2Y>o)^ssrYK$04ZVlK;fcSl8ybf+E1J8yY+RXg3^LGuc+I8hOW`!e zi3{^^uIQpVB=k%u)dy}rLYb3&!(+QJGayQ?mR5FBP)H?`;i~$afj~?5b;crPYz@qH zw0{@M#;i*g8b1BT7DUSdstV4 z@^iK#{^f8z$cOieR9&SbBQL~&XB8aahRn05e4!XczVag3Em3s^lSi`3}S zA!(RyMW4*eL9qt*P#*S47E=SHv4-I%;uPXEPR2Lk#ySa4W0A(!k~Yh@Gh7{E(z%R9 z6?oT2<5l4+(U$d5=|9FO2`LOf9=*ZsXyOE>h5MVIhhKTlHicgZqhCqC_#48ddj67R zImkaHt8|Hgf;XxI!*ghHu#Z(&s){FLK6+*t`F(hROHF-}o$dLQzf1M4$aE+8y?M)7 z*yPBsWM`Ts)Ive%#^S!E4<|E!ZA@TbG7{@%u znG6{YHBLvmFxR5Bkw-Phu;SJ){XYxY>aC44{}Na+vF*OMX~*?1m1B*~f1_{xr|S|; z*IbJBqax4Io3JqM&;O{vOuPOKVErdN>F2^NYJ+bat~4b@>pkElBdI7+@zyBte*hhO B>7)Pv literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index a249d84..b4ea7c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "lucide-react": "^0.344.0", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^7.1.0", "recharts": "^2.12.1", "use-debounce": "^10.0.4", "zustand": "^4.5.1" @@ -1285,6 +1286,12 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", @@ -1968,6 +1975,15 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3579,6 +3595,46 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.1.0.tgz", + "integrity": "sha512-VcFhWqkNIcojDRYaUO8qV0Jib52s9ULpCp3nkBbmrvtoCVFRp6tmk3tJ2w9BZauVctA1YRnJlFYDn9iJRuCpGA==", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.1.0.tgz", + "integrity": "sha512-F4/nYBC9e4s0/ZjxM8GkZ9a68DpX76LN1a9W9mfPl2GfbDJ9/vzJro6MThNR5qGBH6KkgcK1BziyEzXhHV46Xw==", + "license": "MIT", + "dependencies": { + "react-router": "7.1.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/react-smooth": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", @@ -3775,6 +3831,12 @@ "semver": "bin/semver.js" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4079,6 +4141,12 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 27e6453..7114d0e 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "lucide-react": "^0.344.0", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^7.1.0", "recharts": "^2.12.1", "use-debounce": "^10.0.4", "zustand": "^4.5.1" diff --git a/src/components/FutureProjectionModal.tsx b/src/components/FutureProjectionModal.tsx new file mode 100644 index 0000000..a682973 --- /dev/null +++ b/src/components/FutureProjectionModal.tsx @@ -0,0 +1,555 @@ +import { BarChart as BarChartIcon, LineChart as LineChartIcon, Loader2, X } from "lucide-react"; +import { useCallback, useState } from "react"; +import { + Bar, BarChart, CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, XAxis, YAxis +} from "recharts"; + +import { usePortfolioStore } from "../store/portfolioStore"; +import { calculateFutureProjection } from "../utils/calculations/futureProjection"; +import { formatCurrency } from "../utils/formatters"; + +interface FutureProjectionModalProps { + onClose: () => void; + performancePerAnno: number; +} + +type ChartType = 'line' | 'bar'; + +export interface WithdrawalPlan { + amount: number; + interval: 'monthly' | 'yearly'; + startTrigger: 'date' | 'portfolioValue' | 'auto'; + startDate?: string; + startPortfolioValue?: number; + enabled: boolean; + autoStrategy?: { + type: 'maintain' | 'deplete' | 'grow'; + targetYears?: number; + targetGrowth?: number; + }; +} + +export interface ProjectionData { + date: string; + value: number; + invested: number; + withdrawals: number; + totalWithdrawn: number; +} + +export interface SustainabilityAnalysis { + yearsToReachTarget: number; + targetValue: number; + sustainableYears: number | 'infinite'; +} + +export const FutureProjectionModal = ({ onClose, performancePerAnno }: FutureProjectionModalProps) => { + const [years, setYears] = useState('10'); + const [isCalculating, setIsCalculating] = useState(false); + const [chartType, setChartType] = useState('line'); + const [projectionData, setProjectionData] = useState([]); + const [withdrawalPlan, setWithdrawalPlan] = useState({ + amount: 0, + interval: 'monthly', + startTrigger: 'date', + startDate: new Date().toISOString().split('T')[0], + startPortfolioValue: 0, + enabled: false, + autoStrategy: { + type: 'maintain', + targetYears: 30, + targetGrowth: 2, + }, + }); + const [sustainabilityAnalysis, setSustainabilityAnalysis] = useState(null); + + const { assets } = usePortfolioStore(); + + const calculateProjection = useCallback(async () => { + setIsCalculating(true); + try { + const { projection, sustainability } = await calculateFutureProjection( + assets, + parseInt(years), + performancePerAnno, + withdrawalPlan.enabled ? withdrawalPlan : undefined, + ); + setProjectionData(projection); + setSustainabilityAnalysis(sustainability); + } catch (error) { + console.error('Error calculating projection:', error); + } finally { + setIsCalculating(false); + } + }, [assets, years, withdrawalPlan, performancePerAnno]); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const CustomTooltip = ({ active, payload, label }: any) => { + if (active && payload && payload.length) { + const value = payload[0].value; + const invested = payload[1].value; + const withdrawn = payload[2]?.value || 0; + const totalWithdrawn = payload[3]?.value || 0; + const percentageGain = ((value - invested) / invested) * 100; + + return ( +
+

+ {new Date(label).toLocaleDateString('de-DE')} +

+

+ Value: {formatCurrency(value)} +

+

+ Invested: {formatCurrency(invested)} +

+ {withdrawn > 0 && ( + <> +

+ Monthly Withdrawal: {formatCurrency(withdrawn)} +

+

+ Total Withdrawn: {formatCurrency(totalWithdrawn)} +

+ + )} +

= 0 ? 'text-green-500' : 'text-red-500'}`}> + Return: {percentageGain.toFixed(2)}% +

+
+ ); + } + return null; + }; + + const renderChart = () => { + if (isCalculating) { + return ( +
+ +
+ ); + } + + if (!projectionData.length) { + return ( +
+ Click calculate to see the projection +
+ ); + } + + return ( + + {chartType === 'line' ? ( + + + new Date(date).toLocaleDateString('de-DE', { + year: 'numeric', + month: 'numeric' + })} + /> + + } /> + + + {withdrawalPlan.enabled && ( + <> + + + + )} + + ) : ( + + + new Date(date).toLocaleDateString('de-DE', { + year: 'numeric', + month: 'numeric' + })} + /> + + } /> + + + {withdrawalPlan.enabled && ( + <> + + + + )} + + )} + + ); + }; + + return ( +
+
+
+
+

Future Portfolio Projection

+ +
+
+ +
+
+
+

Projection Settings

+ + Project for next {years} years + +
+
+ setYears(e.target.value)} + min="1" + max="50" + className="w-24 p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ +
+ + +
+
+
+

+ Future projections are calculated with your portfolio's average annual return rate of{' '} + {performancePerAnno.toFixed(2)}%. +

+

+ Strategy explanations: +

    +
  • Maintain: Portfolio value stays constant, withdrawing only the returns
  • +
  • Deplete: Portfolio depletes to zero over specified years
  • +
  • Grow: Portfolio continues to grow at target rate while withdrawing
  • +
+

+
+
+ +
+
+

Withdrawal Plan

+ +
+ +
+
+ + setWithdrawalPlan(prev => ({ + ...prev, + amount: parseFloat(e.target.value) + }))} + min="0" + step="100" + className="w-full p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ +
+ + +
+ +
+ + +
+ + {withdrawalPlan.startTrigger === 'date' ? ( +
+ + setWithdrawalPlan(prev => ({ + ...prev, + startDate: e.target.value + }))} + min={new Date().toISOString().split('T')[0]} + className="w-full p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ ) : withdrawalPlan.startTrigger === 'portfolioValue' ? ( +
+ + setWithdrawalPlan(prev => ({ + ...prev, + startPortfolioValue: parseFloat(e.target.value) + }))} + min="0" + step="1000" + className="w-full p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ ) : null} + + {withdrawalPlan.startTrigger === 'auto' && ( +
+
+ + setWithdrawalPlan(prev => ({ + ...prev, + amount: parseFloat(e.target.value) + }))} + min="0" + step="100" + className="w-full p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ +
+ + +
+ + {withdrawalPlan.autoStrategy?.type === 'deplete' && ( +
+ + setWithdrawalPlan(prev => ({ + ...prev, + autoStrategy: { + ...prev.autoStrategy!, + targetYears: parseInt(e.target.value) + } + }))} + min="1" + max="100" + className="w-full p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ )} + + {withdrawalPlan.autoStrategy?.type === 'grow' && ( +
+ + setWithdrawalPlan(prev => ({ + ...prev, + autoStrategy: { + ...prev.autoStrategy!, + targetGrowth: parseFloat(e.target.value) + } + }))} + min="0.1" + max="10" + step="0.1" + className="w-full p-2 border rounded dark:bg-slate-700 dark:border-slate-600 dark:text-gray-200" + /> +
+ )} + +
+

+ {withdrawalPlan.autoStrategy?.type === 'maintain' && ( + "The calculator will determine when your portfolio can sustain this withdrawal amount while maintaining its value." + )} + {withdrawalPlan.autoStrategy?.type === 'deplete' && ( + "The calculator will determine when you can start withdrawing this amount to deplete the portfolio over your specified timeframe." + )} + {withdrawalPlan.autoStrategy?.type === 'grow' && ( + "The calculator will determine when you can start withdrawing this amount while maintaining the target growth rate." + )} +

+
+
+ )} +
+
+
+ + {sustainabilityAnalysis && withdrawalPlan.enabled && ( +
+

Withdrawal Analysis

+

+ To withdraw {formatCurrency(withdrawalPlan.amount)} {withdrawalPlan.interval}, you need to invest for{' '} + {sustainabilityAnalysis.yearsToReachTarget} years until your portfolio reaches{' '} + {formatCurrency(sustainabilityAnalysis.targetValue)}. +

+

+ With this withdrawal plan, your portfolio will{' '} + {sustainabilityAnalysis.sustainableYears === 'infinite' ? ( + remain sustainable indefinitely + ) : ( + <> + last for{' '} + + {sustainabilityAnalysis.sustainableYears} years + {' '} + {sustainabilityAnalysis.sustainableYears > parseInt(years) && ( + + (extends beyond the current chart view of {years} years) + + )} + + )} + . +

+
+ )} + +
+
+ {renderChart()} +
+
+
+
+
+ ); +}; diff --git a/src/components/InvestmentForm.tsx b/src/components/InvestmentForm.tsx index 1dc4aed..2ed0aad 100644 --- a/src/components/InvestmentForm.tsx +++ b/src/components/InvestmentForm.tsx @@ -1,3 +1,4 @@ +import { Loader2 } from "lucide-react"; import React, { useState } from "react"; import { usePortfolioStore } from "../store/portfolioStore"; @@ -71,52 +72,57 @@ const InvestmentForm = ({ assetId, clearSelectedAsset }: { assetId: string, clea const [dynamicType, setDynamicType] = useState<'percentage' | 'fixed'>('percentage'); const [dynamicValue, setDynamicValue] = useState(''); const [yearInterval, setYearInterval] = useState('1'); + const [isSubmitting, setIsSubmitting] = useState(false); const { dateRange, addInvestment } = usePortfolioStore((state) => ({ dateRange: state.dateRange, addInvestment: state.addInvestment, })); - const handleSubmit = (e: React.FormEvent) => { + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); + setIsSubmitting(true); - if (type === "single") { - const investment = { - id: crypto.randomUUID(), - assetId, - type, - amount: parseFloat(amount), - date - }; - addInvestment(assetId, investment); - } else { - const periodicSettings = { - startDate: date, - dayOfMonth: parseInt(dayOfMonth), - interval: parseInt(interval), - amount: parseFloat(amount), - ...(isDynamic ? { - dynamic: { - type: dynamicType, - value: parseFloat(dynamicValue), - yearInterval: parseInt(yearInterval), - }, - } : undefined), - }; - - const investments = generatePeriodicInvestments( - periodicSettings, - new Date(dateRange.endDate), - assetId, - ); - - for(const investment of investments) { + try { + if (type === "single") { + const investment = { + id: crypto.randomUUID(), + assetId, + type, + amount: parseFloat(amount), + date + }; addInvestment(assetId, investment); + } else { + const periodicSettings = { + startDate: date, + dayOfMonth: parseInt(dayOfMonth), + interval: parseInt(interval), + amount: parseFloat(amount), + ...(isDynamic ? { + dynamic: { + type: dynamicType, + value: parseFloat(dynamicValue), + yearInterval: parseInt(yearInterval), + }, + } : undefined), + }; + + const investments = generatePeriodicInvestments( + periodicSettings, + dateRange.endDate, + assetId + ); + + for (const investment of investments) { + addInvestment(assetId, investment); + } } + } finally { + setIsSubmitting(false); + setAmount(''); + clearSelectedAsset(); } - // Reset form - setAmount(''); - clearSelectedAsset(); }; return ( @@ -257,9 +263,14 @@ const InvestmentForm = ({ assetId, clearSelectedAsset }: { assetId: string, clea ); diff --git a/src/components/PortfolioTable.tsx b/src/components/PortfolioTable.tsx index 5f7cfff..87bb8d8 100644 --- a/src/components/PortfolioTable.tsx +++ b/src/components/PortfolioTable.tsx @@ -1,11 +1,12 @@ import { format } from "date-fns"; -import { HelpCircle, Pencil, RefreshCw, ShoppingBag, Trash2 } from "lucide-react"; +import { HelpCircle, LineChart, Pencil, RefreshCw, ShoppingBag, Trash2 } from "lucide-react"; import { useCallback, useMemo, useState } from "react"; import { usePortfolioStore } from "../store/portfolioStore"; import { Investment } from "../types"; import { calculateInvestmentPerformance } from "../utils/calculations/performance"; import { EditInvestmentModal } from "./EditInvestmentModal"; +import { FutureProjectionModal } from "./FutureProjectionModal"; interface TooltipProps { content: string | JSX.Element; @@ -49,7 +50,7 @@ export const PortfolioTable = () => { const performance = useMemo(() => calculateInvestmentPerformance(assets), [assets]); const averagePerformance = useMemo(() => { - return (performance.investments.reduce((sum, inv) => sum + inv.performancePercentage, 0) / performance.investments.length).toFixed(2); + return ((performance.investments.reduce((sum, inv) => sum + inv.performancePercentage, 0) / performance.investments.length) || 0).toFixed(2); }, [performance.investments]); const handleDelete = useCallback((investmentId: string, assetId: string) => { @@ -67,13 +68,14 @@ export const PortfolioTable = () => { const performanceTooltip = useMemo(() => (

The performance of your portfolio is {performance.summary.performancePercentage.toFixed(2)}%

-

The average performance of all positions is {averagePerformance}%

+

The average (acc.) performance of all positions is {averagePerformance}%

+

The average (p.a.) performance of every year is {performance.summary.performancePerAnnoPerformance.toFixed(2)}%

Note: An average performance of positions doesn't always match your entire portfolio's average, especially with single investments or investments on different time ranges.

- ), [performance.summary.performancePercentage, averagePerformance]); + ), [performance.summary.performancePercentage, averagePerformance, performance.summary.performancePerAnnoPerformance]); const buyInTooltip = useMemo(() => (
@@ -95,16 +97,29 @@ export const PortfolioTable = () => {
), []); + const [showProjection, setShowProjection] = useState(false); + return (

Portfolio's Positions Overview

- +
+ + +
@@ -145,7 +160,10 @@ export const PortfolioTable = () => { @@ -154,7 +172,7 @@ export const PortfolioTable = () => { - + @@ -220,6 +238,9 @@ export const PortfolioTable = () => { onClose={() => setEditingInvestment(null)} /> )} + {showProjection && ( + setShowProjection(false)} /> + )} ); }; diff --git a/src/store/portfolioStore.ts b/src/store/portfolioStore.ts index f85901f..ba08554 100644 --- a/src/store/portfolioStore.ts +++ b/src/store/portfolioStore.ts @@ -15,6 +15,7 @@ interface PortfolioState { updateAssetHistoricalData: (assetId: string, historicalData: HistoricalData[]) => void; updateInvestment: (assetId: string, investmentId: string, updatedInvestment: Investment) => void; clearInvestments: () => void; + setAssets: (assets: Asset[]) => void; } export const usePortfolioStore = create((set) => ({ @@ -77,4 +78,5 @@ export const usePortfolioStore = create((set) => ({ set((state) => ({ assets: state.assets.map((asset) => ({ ...asset, investments: [] })), })), + setAssets: (assets) => set({ assets }), })); diff --git a/src/utils/calculations/assetValue.ts b/src/utils/calculations/assetValue.ts index 3b28a73..463080f 100644 --- a/src/utils/calculations/assetValue.ts +++ b/src/utils/calculations/assetValue.ts @@ -1,4 +1,4 @@ -import { addDays, isAfter, isBefore, isSameDay } from "date-fns"; +import { isAfter, isBefore, isSameDay } from "date-fns"; import { Asset, Investment } from "../../types"; @@ -51,13 +51,15 @@ export const calculateAssetValueAtDate = (asset: Asset, date: Date, currentPrice } }; -export const generatePeriodicInvestments = (settings: PeriodicSettings, endDate: Date, assetId: string): Investment[] => { +export const generatePeriodicInvestments = (settings: PeriodicSettings, endDate: string, assetId: string): Investment[] => { const investments: Investment[] = []; + const periodicGroupId = crypto.randomUUID(); let currentDate = new Date(settings.startDate); let currentAmount = settings.amount; - const periodicGroupId = crypto.randomUUID(); + const end = new Date(endDate); - while (isBefore(currentDate, endDate)) { + while (currentDate <= end) { + // Only create investment if it's on the specified day of month if (currentDate.getDate() === settings.dayOfMonth) { // Handle dynamic increases if configured if (settings.dynamic) { @@ -65,7 +67,8 @@ export const generatePeriodicInvestments = (settings: PeriodicSettings, endDate: (currentDate.getTime() - new Date(settings.startDate).getTime()) / (1000 * 60 * 60 * 24 * 365); - if (yearsSinceStart >= settings.dynamic.yearInterval) { + // Check if we've reached a year interval for increase + if (yearsSinceStart > 0 && yearsSinceStart % settings.dynamic.yearInterval === 0) { if (settings.dynamic.type === 'percentage') { currentAmount *= (1 + settings.dynamic.value / 100); } else { @@ -73,7 +76,7 @@ export const generatePeriodicInvestments = (settings: PeriodicSettings, endDate: } } } - // Create investment for this date + investments.push({ id: crypto.randomUUID(), type: 'periodic', @@ -82,13 +85,20 @@ export const generatePeriodicInvestments = (settings: PeriodicSettings, endDate: periodicGroupId, assetId }); - - // Move to next interval - currentDate = addDays(currentDate, settings.interval); - } else { - // Move to next day if not the investment day - currentDate = addDays(currentDate, 1); } + + // Move to next interval day + const nextDate = new Date(currentDate); + nextDate.setDate(nextDate.getDate() + settings.interval); + + // Ensure we maintain the correct day of month + if (nextDate.getDate() !== settings.dayOfMonth) { + nextDate.setDate(1); + nextDate.setMonth(nextDate.getMonth() + 1); + nextDate.setDate(settings.dayOfMonth); + } + + currentDate = nextDate; } return investments; diff --git a/src/utils/calculations/futureProjection.ts b/src/utils/calculations/futureProjection.ts new file mode 100644 index 0000000..d872f6e --- /dev/null +++ b/src/utils/calculations/futureProjection.ts @@ -0,0 +1,244 @@ +import { addMonths, differenceInYears, format } from "date-fns"; + +import { Asset, Investment } from "../../types"; + +import type { + ProjectionData, SustainabilityAnalysis, WithdrawalPlan +} from "../../components/FutureProjectionModal"; + +const findOptimalStartingPoint = ( + currentPortfolioValue: number, + monthlyGrowth: number, + desiredWithdrawal: number, + strategy: WithdrawalPlan['autoStrategy'], + interval: 'monthly' | 'yearly' +): { startDate: string; requiredPortfolioValue: number } => { + const monthlyWithdrawal = interval === 'yearly' ? desiredWithdrawal / 12 : desiredWithdrawal; + let requiredPortfolioValue = 0; + + // Declare variables outside switch + const months = (strategy?.targetYears || 30) * 12; + const r = monthlyGrowth; + const targetGrowth = (strategy?.targetGrowth || 2) / 100; + const targetMonthlyGrowth = Math.pow(1 + targetGrowth, 1/12) - 1; + + switch (strategy?.type) { + case 'maintain': + requiredPortfolioValue = monthlyWithdrawal / monthlyGrowth; + break; + case 'deplete': + requiredPortfolioValue = (monthlyWithdrawal * (Math.pow(1 + r, months) - 1)) / (r * Math.pow(1 + r, months)); + break; + case 'grow': + requiredPortfolioValue = monthlyWithdrawal / (monthlyGrowth - targetMonthlyGrowth); + break; + } + + // Calculate when we'll reach the required value + const monthsToReach = Math.ceil( + Math.log(requiredPortfolioValue / currentPortfolioValue) / + Math.log(1 + monthlyGrowth) + ); + + const startDate = new Date(); + startDate.setMonth(startDate.getMonth() + Math.max(0, monthsToReach)); + + return { + startDate: startDate.toISOString().split('T')[0], + requiredPortfolioValue, + }; +}; + +export const calculateFutureProjection = async ( + currentAssets: Asset[], + yearsToProject: number, + annualReturnRate: number, + withdrawalPlan?: WithdrawalPlan, +): Promise<{ + projection: ProjectionData[]; + sustainability: SustainabilityAnalysis; +}> => { + await new Promise(resolve => setTimeout(resolve, 1000)); + + const projectionData: ProjectionData[] = []; + const maxProjectionYears = 100; // Project up to 100 years to find true sustainability + const endDateForDisplay = addMonths(new Date(), yearsToProject * 12); + const endDateForCalculation = addMonths(new Date(), maxProjectionYears * 12); + + // Get all periodic investment patterns + const periodicInvestments = currentAssets.flatMap(asset => { + const patterns = new Map(); + + asset.investments.forEach(inv => { + if (inv.type === 'periodic' && inv.periodicGroupId) { + if (!patterns.has(inv.periodicGroupId)) { + patterns.set(inv.periodicGroupId, []); + } + patterns.get(inv.periodicGroupId)!.push(inv); + } + }); + + return Array.from(patterns.values()) + .map(group => ({ + pattern: group.sort((a, b) => + new Date(a.date!).getTime() - new Date(b.date!).getTime() + ) + })); + }); + + // Project future investments + const futureInvestments = periodicInvestments.flatMap(({ pattern }) => { + if (pattern.length < 2) return []; + + const lastInvestment = pattern[pattern.length - 1]; + const secondLastInvestment = pattern[pattern.length - 2]; + + const interval = new Date(lastInvestment.date!).getTime() - + new Date(secondLastInvestment.date!).getTime(); + const amountDiff = lastInvestment.amount - secondLastInvestment.amount; + + const future: Investment[] = []; + let currentDate = new Date(lastInvestment.date!); + let currentAmount = lastInvestment.amount; + + while (currentDate <= endDateForCalculation) { + currentDate = new Date(currentDate.getTime() + interval); + currentAmount += amountDiff; + + future.push({ + ...lastInvestment, + date: format(currentDate, 'yyyy-MM-dd'), + amount: currentAmount, + }); + } + + return future; + }); + + // Calculate monthly values + let currentDate = new Date(); + let totalInvested = currentAssets.reduce( + (sum, asset) => sum + asset.investments.reduce( + (assetSum, inv) => assetSum + inv.amount, 0 + ), 0 + ); + + let totalWithdrawn = 0; + let yearsToReachTarget = 0; + let targetValue = 0; + let sustainableYears: number | 'infinite' = 'infinite'; + let portfolioValue = totalInvested; // Initialize portfolio value with current investments + let withdrawalsStarted = false; + let withdrawalStartDate: Date | null = null; + let portfolioDepletionDate: Date | null = null; + + // Calculate optimal withdrawal plan if auto strategy is selected + if (withdrawalPlan?.enabled && withdrawalPlan.startTrigger === 'auto') { + const { startDate, requiredPortfolioValue } = findOptimalStartingPoint( + portfolioValue, + Math.pow(1 + annualReturnRate/100, 1/12) - 1, + withdrawalPlan.amount, + withdrawalPlan.autoStrategy, + withdrawalPlan.interval + ); + + withdrawalPlan.startDate = startDate; + withdrawalPlan.startPortfolioValue = requiredPortfolioValue; + } + + while (currentDate <= endDateForCalculation) { + // Check if withdrawals should start + if (!withdrawalsStarted && withdrawalPlan?.enabled) { + withdrawalsStarted = withdrawalPlan.startTrigger === 'date' + ? new Date(currentDate) >= new Date(withdrawalPlan.startDate!) + : portfolioValue >= (withdrawalPlan.startPortfolioValue || 0); + + if (withdrawalsStarted) { + withdrawalStartDate = new Date(currentDate); + } + } + + // Handle monthly growth if portfolio isn't depleted + if (portfolioValue > 0) { + const monthlyReturn = Math.pow(1 + annualReturnRate/100, 1/12) - 1; + portfolioValue *= (1 + monthlyReturn); + } + + // Add new investments only if withdrawals haven't started + if (!withdrawalsStarted) { + const monthInvestments = futureInvestments.filter( + inv => new Date(inv.date!).getMonth() === currentDate.getMonth() && + new Date(inv.date!).getFullYear() === currentDate.getFullYear() + ); + + const monthlyInvestment = monthInvestments.reduce( + (sum, inv) => sum + inv.amount, 0 + ); + totalInvested += monthlyInvestment; + portfolioValue += monthlyInvestment; + } + + + // Handle withdrawals + let monthlyWithdrawal = 0; + if (withdrawalsStarted && portfolioValue > 0) { + monthlyWithdrawal = withdrawalPlan!.interval === 'monthly' + ? withdrawalPlan!.amount + : (currentDate.getMonth() === 0 ? withdrawalPlan!.amount : 0); + + portfolioValue -= monthlyWithdrawal; + if (portfolioValue < 0) { + monthlyWithdrawal += portfolioValue; // Adjust final withdrawal + portfolioValue = 0; + if (sustainableYears === 'infinite') { + sustainableYears = differenceInYears(currentDate, withdrawalStartDate!); + } + } + totalWithdrawn += monthlyWithdrawal; + } + + // Update target metrics + if (withdrawalsStarted && !targetValue) { + targetValue = portfolioValue; + yearsToReachTarget = differenceInYears(currentDate, new Date()); + } + + if (portfolioValue <= 0 && !portfolioDepletionDate) { + portfolioDepletionDate = new Date(currentDate); + } + + // Only add to projection data if within display timeframe + if (currentDate <= endDateForDisplay) { + projectionData.push({ + date: format(currentDate, 'yyyy-MM-dd'), + value: Math.max(0, portfolioValue), + invested: totalInvested, + withdrawals: monthlyWithdrawal, + totalWithdrawn, + }); + } + + currentDate = addMonths(currentDate, 1); + } + + // Calculate actual sustainability duration + let actualSustainableYears: number | 'infinite' = 'infinite'; + if (portfolioDepletionDate) { + actualSustainableYears = differenceInYears( + portfolioDepletionDate, + withdrawalStartDate || new Date() + ); + } else if (portfolioValue > 0) { + // If portfolio is still growing after maxProjectionYears, it's truly sustainable + actualSustainableYears = 'infinite'; + } + + return { + projection: projectionData, + sustainability: { + yearsToReachTarget, + targetValue, + sustainableYears: actualSustainableYears, + }, + }; +}; diff --git a/src/utils/calculations/performance.ts b/src/utils/calculations/performance.ts index 5b5883c..ccf3d56 100644 --- a/src/utils/calculations/performance.ts +++ b/src/utils/calculations/performance.ts @@ -1,4 +1,4 @@ -import { isAfter, isBefore } from "date-fns"; +import { differenceInDays, isAfter, isBefore } from "date-fns"; import { Asset } from "../../types"; @@ -18,6 +18,7 @@ export interface PortfolioPerformance { totalInvested: number; currentValue: number; performancePercentage: number; + performancePerAnnoPerformance: number; ttworValue: number; ttworPercentage: number; }; @@ -27,6 +28,7 @@ export const calculateInvestmentPerformance = (assets: Asset[]): PortfolioPerfor const investments: InvestmentPerformance[] = []; let totalInvested = 0; let totalCurrentValue = 0; + let earliestDate: Date | null = null; // TTWOR Berechnung const firstDayPrices: Record = {}; @@ -49,6 +51,16 @@ export const calculateInvestmentPerformance = (assets: Asset[]): PortfolioPerfor return acc; }, 0); + // Finde das früheste Investmentdatum + for(const asset of assets) { + for(const investment of asset.investments) { + const investmentDate = new Date(investment.date!); + if (!earliestDate || isBefore(investmentDate, earliestDate)) { + earliestDate = investmentDate; + } + } + } + // Normale Performance-Berechnungen... for(const asset of assets) { const currentPrice = asset.historicalData[asset.historicalData.length - 1]?.price || 0; @@ -90,6 +102,21 @@ export const calculateInvestmentPerformance = (assets: Asset[]): PortfolioPerfor ? ((ttworValue - totalInvested) / totalInvested) * 100 : 0; + // Berechne die jährliche Performance + const performancePerAnnoPerformance = (() => { + if (!earliestDate || totalInvested === 0) return 0; + + const years = differenceInDays(new Date(), earliestDate) / 365; + if (years < 0.01) return 0; // Verhindere Division durch sehr kleine Zahlen + + // Formel: (1 + r)^n = FV/PV + // r = (FV/PV)^(1/n) - 1 + const totalReturn = totalCurrentValue / totalInvested; + const annualizedReturn = Math.pow(totalReturn, 1 / years) - 1; + + return annualizedReturn * 100; + })(); + return { investments, summary: { @@ -98,6 +125,7 @@ export const calculateInvestmentPerformance = (assets: Asset[]): PortfolioPerfor performancePercentage: totalInvested > 0 ? ((totalCurrentValue - totalInvested) / totalInvested) * 100 : 0, + performancePerAnnoPerformance, ttworValue, ttworPercentage, }, diff --git a/src/utils/formatters.ts b/src/utils/formatters.ts new file mode 100644 index 0000000..002ce46 --- /dev/null +++ b/src/utils/formatters.ts @@ -0,0 +1,6 @@ +export const formatCurrency = (value: number): string => { + return `€${value.toLocaleString('de-DE', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + })}`; +};
{performance.summary.performancePercentage.toFixed(2)}% - (avg. {averagePerformance}%) +
    +
  • (avg. acc. {averagePerformance}%)
  • +
  • (avg. p.a. {performance.summary.performancePerAnnoPerformance.toFixed(2)}%)
  • +
TTWOR {performance.investments[0]?.date}{new Date(performance.investments[0]?.date).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' })} €{performance.summary.totalInvested.toFixed(2)} €{performance.summary.ttworValue.toFixed(2)}