From 0cd82ab66bd998922fd093b51ee62dd58b252df9 Mon Sep 17 00:00:00 2001 From: Brandon Goodell Date: Thu, 8 Feb 2018 13:51:24 -0700 Subject: [PATCH] Adding brief technical note on Monero BPs --- publications/standards/bulletproofs.bib | 7 ++ publications/standards/bulletproofs.tex | 105 ++++++++++++++++++++++++ publications/standards/logo.png | Bin 0 -> 41390 bytes publications/standards/mrl.cls | 43 ++++++++++ 4 files changed, 155 insertions(+) create mode 100644 publications/standards/bulletproofs.bib create mode 100644 publications/standards/bulletproofs.tex create mode 100644 publications/standards/logo.png create mode 100644 publications/standards/mrl.cls diff --git a/publications/standards/bulletproofs.bib b/publications/standards/bulletproofs.bib new file mode 100644 index 0000000..bb700f3 --- /dev/null +++ b/publications/standards/bulletproofs.bib @@ -0,0 +1,7 @@ +@misc{bp, + author = {Benedikt B\"unz and Jonathan Bootle and Dan Boneh and Andrew Poelstra and Pieter Wuille and Greg Maxwell}, + title = {Bulletproofs: Efficient Range Proofs for Confidential Transactions}, + howpublished = {Cryptology ePrint Archive, Report 2017/1066}, + year = {2017}, + note = {\url{https://eprint.iacr.org/2017/1066}}, +} diff --git a/publications/standards/bulletproofs.tex b/publications/standards/bulletproofs.tex new file mode 100644 index 0000000..399575f --- /dev/null +++ b/publications/standards/bulletproofs.tex @@ -0,0 +1,105 @@ +\documentclass{mrl} + +\title{Application of Bulletproofs in Monero Transactions} +\authors{Sarang Noether\footnote{\texttt{sarang.noether@protonmail.com}}} +\affiliations{Monero Research Lab} +\date{\today} + +\type{TECHNICAL NOTE} +\ident{MRL-XXXX} + +\begin{document} + +\begin{abstract} +This technical note briefly describes the proposed application of Bulletproofs \cite{bp} in Monero. The proofs are used as a drop-in replacement of the existing Borromean bitwise non-interactive zero-knowledge range proofs used to show that a committed amount is in a specified range. Bulletproofs reduce both proof size and verification time, as well as provide a straightforward method for batch verification of proofs from multiple transactions. We describe our implementation, noting specific areas of optimization from the original paper. +\end{abstract} + +\section{Introduction} +The implementation of confidential transaction amounts in Monero is accomplished using homomorphic commitments. Each input and output amount, including fees, is represented by a commitment of the form $vG + \mu H$, where $G$ and $H$ are elliptic curve generators, $v$ is the amount, and $\mu$ is a mask. Without knowledge of the commitment opening, a third party cannot determine the amount; however, it is trivial for the third party to convince itself that a transaction balances (that is, that the difference between inputs and output amounts is zero). The homomorphic property of the commitments is such that the difference in commitments must itself be a commitment to zero. + +However, this is not sufficient to ensure a correct and safe transaction model. An adversary could easily construct a combination of positive and negative outputs such that the transaction amounts balance. A third party would still verify that the transaction balances, though the adversary has effectively printed free money in an undetected fashion. To combat this, we require that each amount commitment come equipped with a \textit{range proof} that convinces a verifier that the corresponding output is both positive and does not risk an overflow by being too large. The range proof scheme must be non-interactive and zero-knowledge; that is, the verifier does not need to communicate with the prover once the proof is generated, and the proof itself reveals no information about the amount except that it is within the stated range. + +The current range proof style used in Monero confidential transactions is a \textit{Borromean bitwise} range proof. To generate a proof that a commitment $C \equiv vG + \mu H$ represents an amount $v \in [0,2^n-1]$ for some bit length $n > 0$ (in Monero $n = 64$), the prover generates separate commitments for each bit. The prover then generates a Borromean ring signature showing that each commitment is to either $0$ or $2^i$ for appropriate $i$. Any third-party verifier can then convince itself that the bit commitments reconstruct the committed amount, that each commitment is to either $0$ or $2^i$, and therefore that the committed amount lies in the correct range. + +However, this comes at a cost. Borromean bitwise proofs scale linearly in size with the number of bits in the range. Further, if multiple outputs are used in a transaction, a separate proof is required for each. Each proof is large, taking up $6.2$ kB of space. + +\section{Bulletproofs} +Bulletproofs are a recent general non-interactive zero-knowledge proof construction \cite{bp}. Using a novel inner product argument, they can be used in a variety of applications ranging from range proofs (pun intended) to verifiable shuffles and even proofs of general arithmetic circuit evaluation. For our purposes, they can accomplish the same goal as Borromean bitwise range proofs: convincing a verifier that a committed amount is within a claimed range. + +The details of Bulletproof construction, both for prover and verifier, are discussed in the paper \cite{bp}, so we will not duplicate them here. However, several definitions are useful when discussing the scaling. A standard Bulletproof that shows an amount is within the $n$-bit range $[0,2^n-1]$ is called a \textit{single-output proof} or a \textit{1-proof}. However, it is possible for a prover to construct a single proof showing that $m$ separate amounts (with separate random masks) each lie within the range $[0,2^n-1]$, where $m$ is a power of two. Such a proof is called an \textit{aggregate proof} or, more precisely, an $m$\textit{-proof}. The scheme is constructed in such a way that a single-output proof is trivially an $m$-proof with $m=1$ (which simplifies the code). It is important to note that the construction of an aggregate proof requires that the prover know each amount and mask; this means that while it is useful for all outputs in a transaction to be contained within a single aggregate proof for space savings, it is not possible for a third party to take existing proofs and construct an aggregate proof, either within a single transaction or between different transactions. + +The size scaling benefits of Bulletproofs occur at two levels: +\begin{enumerate} +\item \textbf{Bit length of range}. The size of a Bulletproof increases logarithmically with the number of bits in the range. In bitwise range proofs, the proof size increased linearly with the number of bits. +\item \textbf{Number of amounts in aggregate proof}. The size of a Bulletproof increases logarithmically with the number of amounts included in a single aggregate proof. In bitwise range proofs, the proof size increased linearly with the number of bits (since a separate proof was needed for each amount). +\end{enumerate} +We discuss efficiency in more detail below. + +There is a separate scaling argument that is useful. A new node that comes online will receive many $m$-proofs, at least one per post-Bulletproof transaction in the blockchain. Instead of verifying each of the proofs separately, the node can perform a \textit{batch verification} of as many proofs at a time as it wishes. As described below, this process requires that certain portions of each proof be verified separately, but allows for the remaining parts of the proofs to be batched and verified together. The resulting verification time is linear in the number of proofs, but with a significantly lower time per proof. An existing node that has already verified the transactions in the blockchain can still use batch verification on new transactions it receives, but the benefits are not as great due to the lower number of transactions that must be verified in a short time. + +\section{Optimizations} +For the most part, the proposed implementation of Bulletproofs in Monero follows the Bulletproofs paper in scope and notation wherever possible. However, we include several optimizations that have also been discussed for other projects. These optimizations are algebraically equivalent to those in the paper, but reduce the time required for verification. The author understands that some or all of the optimizations may be included in an update to the Bulletproofs paper sometime in the future. However, we document them here for completeness and ease of code review. The reader is encouraged to refer to the paper for the complete context of our changes. + +\subsection{Curve group notation} +The paper is written with a general group structure in mind, so scalar-group operations are written multiplicatively (\textit{e.g.} $x = a^bc^d$). In the case of elliptic curve groups, we use additive notation instead (\textit{e.g.} $X = bA + dC$) and use case to differentiate between curve points and scalars for clarity. This is purely a notational convenience. + +\subsection{Basepoint notation} +Throughout the paper, amount commitments are expressed as $V \equiv vG + \mu H$, where $G$ and $H$ are distinct (but arbitrary) fixed elliptic curve group generators. We interchange the roles of $G$ and $H$ throughout our implementation to match the use of existing base points used in commitments elsewhere in the Monero codebase. Note that the indexed $\{G_i\}$ and $\{H_i\}$ curve points are not modified in this way. + +\subsection{Fiat-Shamir challenges} +To make the Bulletproof scheme non-interactive, we follow the paper by introducing Fiat-Shamir challenges computed by hashing the proof transcript up to the point that a new challenge is needed. This is done by introducing a rolling hash that uses as input the previous challenge and any new proof elements introduced. The prover and verifier compute these challenges identically. + +\subsection{Inner product argment} +The inner product argument in Protocol 1 of the Bulletproofs paper uses recursion to shrink the size of its input vectors down to single elements. These inputs include distinct curve group generators $\{G_i\}$ and $\{H_i\}$, which we compute using an indexed hash function. We make several optimizations to this protocol for the verifier. + +First, we observe that the curve points in Equation (10) are in fact linear combinations of $\{G_i\}$ and $\{H_i\}$ that use the scalar challenges in Equations (24)-(25). Next, we note that the point $P$ in Equation (62) is passed into Protocol 1 as described in Section 4.2 of the paper. Since this curve point contains a linear combination of the same group generators as Protocol 1, we can take advantage of this and compute a single linear combination, rather than separately compute Equations (62) and (10). + +In practice, we replace Equations (62) and (10) with the following check, where $M \equiv |\{L_j\}| = |\{R_j\}|$: +$$A + xS - \mu G + \sum_{j=0}^{M-1}(w_j^2 L_j + w_j^{-2} R_j) + (t - ab)xH - \sum_{i=0}^{mn-1}(g_iG_i + h_iH_i) = 0$$ +The symbols are mostly those used in the paper. However, we use $w_j$ to represent the round challenges in Lines (21)-(22), and $x$ to represent the challenge in Lines (32)-(33) to avoid reuse of symbols. The scalars $g_i$ and $h_i$ are computed in the following way. Express the index $i = b_0b_1 \cdots b_{M-1}$ bitwise, where $b_{M-1}$ is the least-significant bit. Then +$$g_i = a\prod_{j=0}^{M-1} w_j^{2b_j-1} + z$$ +and +$$h_i = \left(by^{-i}\prod_{j=0}^{M-1} w_j^{-2b_j+1} - zy^i + z^{2+\lfloor i/N \rfloor}2^{i\operatorname{mod}N}\right)y^{-i}$$ +This optimization is applied only to the verifier. + +\subsection{Batch verification} +Our implementation permits the verifier to take many aggregate proofs and verify them together as a batch. We do not assume that the proofs each have the same number of outputs, nor make any restrictions on the maximum size of a batch. The batch verification we describe will only succeed if each proof is valid, and will fail if one or more proofs are invalid. + +Batch verification is split into two checks, performed after iterating over each proof in the batch. During the iteration, the verifier keeps ongoing sums of components from each proof and then performs the first-stage check for Equation (61): +\begin{equation} +\sum_l (\beta_l\tau_{xl}) G + \sum_l \beta_l\left[ t_l - (k_l + z_l \langle \overline{1}^{mn},\overline{y_l}^{mn} \rangle) \right] H - \sum_l \beta_l \left( \sum_j z_l^{j+2} V_{lj} - x_lT_{1l} - x_l^2T_{2l} \right) = 0 \nonumber +\end{equation} +The second-phase check proceeds similarly: +\begin{multline} +\sum_l \beta_l(A_l + x_lS_l) - \sum_l(\beta_l\mu_l) G + \sum_l\left[\beta_l \sum_j(w_{lj}^2 L_{lj} + w_{lj}^{-2} R_{lj})\right] + \sum_l \beta_l x_l(t_l - a_lb_l) H \\ +- \sum_i \left[\sum_l(\beta_l g_{li})G_i + \sum_l(\beta_l h_{li})H_i\right] = 0 \nonumber +\end{multline} +Here each $l$-indexed sum is over each proof in the batch, and $\beta_l$ is a weighting factor chosen at random (not deterministically) by the verifier. This ensures that, except with negligible probability, the checks will only succeed if each proof is separately valid; an adversary cannot selectively provide a batch containing invalid proofs in an attempt to fool the verifier. The benefit to this approach is that the sums can be computed as large multi-exponentiation operations after the scalars from all proofs have been assembled. + +If the batch fails either check, at least one proof in the batch is invalid. To identify which proofs are at fault, the verifier can either iterate through each proof and perform the checks separately (in linear time), or perform a binary search by successively performing the checks on half-batches until it identifies all faulty proofs (in logarithmic time). + +\section{Proof size} +Including the amount commitment $V$, a single Borromean bitwise range proof occupies $6.2$ kB of space; a transaction with $m$ outputs therefore requires $6.2m$ kB of space. An $m$-proof (with a $64$-bit range) requires $2\lg m + 17$ group elements and $5$ scalars, each of which takes up $32$ bytes. Table \ref{table:size} shows the space savings from Bulletproofs for several values of $m$. + +\begin{table}[h] +\begin{center} +\begin{tabular}{r|rr|c} +$m$ & Bulletproof & Borromean & Relative size \\ +\hline +$1$ & $704$ & $6200$ & $0.114$ \\ +$2$ & $768$ & $12400$ & $0.062$ \\ +$8$ & $896$ & $49600$ & $0.018$ \\ +$16$ & $960$ & $99200$ & $0.010$ \\ +$128$ & $1152$ & $793600$ & $0.001$ +\end{tabular} +\caption{Size (bytes) of $m$ Borromean proofs versus $m$-proof} +\label{table:size} +\end{center} +\end{table} + +Using data from the Monero blockchain\footnote{Data was taken from blocks 1400000 through 1500000} on the distribution of the number of outputs in transactions, the use of Bulletproofs would reduce the total size of range proofs by $94\%$. + +\bibliographystyle{plain} +\bibliography{bulletproofs} + +\end{document} \ No newline at end of file diff --git a/publications/standards/logo.png b/publications/standards/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7f647a20ac3a785db4010b1a3516997f86d02377 GIT binary patch literal 41390 zcmb4qWmKEn(l8nvg1ZEFcPF^J7bwMxyGtR#C0L=jyA>%8#flWC6f5qu#T^PC=e+ma zdw;y^UF*w__y(*nd>g9vf zOWw#!*VWd`*V4lVPR82xjSY>mv!$Jlj*X?Yzx$|-_zPCMgPxI>k-D0wm8&zSV#^q<} z#>K0h`G|H0+{KXFB6J!~w!Ts`z$ zU7h}kCM|ncFIP`{S2r42*}tQQhFRUx%E9HYn=F4h{Ds4d!g4kq4n8*43LdV`G=JM( z)Zu@Tf}hvQ*4D;agu~kUjW7qlrHufGCBGmq2OqbHuz0Vj~RPM^PQtU0#} zEj8MBJNT~u@vV~<{M5`Bcru>5dJ($rzw_>Tay(b;Chz$hT=ywFPrQP(QZj4}9Dshv ziu@c}`M5p=7DZzLrm)egDn-IFAA{wTQegogu~H}eM)@%lQ1;HVIhS?r<2r6$2qJER zwu1&^t#|;474Sh60&B91?m6Lc_9aZSyI#Zo}MP)^Qw(7 zgXl)jFA4p6X$42=KKpFSB$p+BVuDJG}mknA`tAv4?Ra_;V1?~?a$?dXF}lJy58|BLb^ z*2W((b-cch;*_7JHAj+43f>-OgY$5CbK546|BI?t0Rl6aW(wB>)wta=ekY8GycdQ5 zzHNpPLu>XbEnmFyx1^cCEI5eh6O27+gC-B#Ig@_(EvO#NKfETklqZku-?l?5%$BC2 zi5a3;@Du$GexnDL z$mNIsz+?h}A-D1L5sIgHrvhJK`UwPB$4Og<{}w$Hc#KtH?%xVaf(GSV1gmUnfm|`} zGGLqHl>fvs0Kfl}v=OKuqaK(tRWD(4hNyg7kDD?)_irvGLLdr`9frn!bd-yq8W>)< z9%9CXR!KYmVKbWqv`yK?lDnEty%i{D_=4eYHiDQ!&-*U}lEm}VKpxQj<7$HX-h>P} zVDYy;BO7n_Go5<a*5g$~+*@|#t|kpXbea6K#;X}Z-70*iwNB_F4Lv>wIF5^|-o zv9&!PdtE~20rjG--r_ES)#NpcoKwg(OUo(6!2qCnun%e_L8JbN2FP1H;l;+uv&=9% zUnE2>|gRz$vezGS7Xe1TSMuda~99@F(Z}VP-DF z80)*}*Ul@Bu$HAylCZoiRvi>ZovrV$^kavlS=O1@#=Wv&3#IHDGa|j_DJPlX0+_1z z0@hITJ7kH`Dl=HEeHWt$%1?n+E`o0>r72le=$PMU(JSeyOjIQxKUCiHD8&gbDFDrl z*kTZ$Vj2d1>!7@&aiZLe78tbrsS$>L@sK(ncW)1}8eP3-Y4@0dJSz2=k^n6j*+iWw z@xg)Q%lSKU0j)&{@MAc3gT7Q{(0iY&4kbudQQqXKe+t2yZv9hJcO>S0J2r|FrAG0# z>|k*wDMmIseL~jRG~kxFu=a=u7#qZfGmR8Rqn3;?d)WgEMfFb&%F=8k4hu^%>`J6Q zpSkc&v6EBU%=C4jhbW;+sp9qP0s32A4TP!sttSm1^KubN+@c6zC=lvTk#$o-FQT`-7V!t6Q9ObX z5#^~;$5y%jg5Q`Zq_^1M%uguUhQVSpbziX#h^|DyLRN2{Sc$>Yeyo!V{QlN&N^CU# zvIK#pdw0!OFZWinGVkc0Gr#S( z1{*Q%NTnfTK(g4-i`l5TiF;(7ypNL+&b zMA^DQ93bD5H!OdG{GPWVkNP7v*1NsMZu)etxa)B8l*j2iB4aN(Vo~?QNNifzEA{uo zz%NXGIR>RmuL?*oXM-ox_apP+Y~9-kc1YIfVhXFd=U1VzQe4?!0K6QJpu%0(Y(liL zf0mM9NODb^=S${^o_&qAO{H;EbMCTDfMpd)j z!$*|n|8n9-MuJ(&OjnIPybX@kJ!qe%#blw^EEBenK4z|3r)#wK5XJ3xKS#dVcg?h< z@z~w-6xEdPBq?)u@>^C35~OCbrw~g=1$oFx5qO~8)l1dse%3lAFy@epje++F0%#&e z6jCsoAjqy15cm=8q!v35usB>kT@#)s(noFTF+osqg7Y5pnfjH2b#8qdU){w^$l4(* z`Qbhi2%>9NPNI)iz9yCLj1(Ik`#|!(Y<+y_yn*`bieeYCtYIDiAS+sdl_WgEY)vnSNPk8$gk!=7+ovN-EzHlP;}+&#HINN!r`i zn$2d4RA>cJ*AxG`t0?hFeC;b^_ zVJV&k@Z@2cM+KcHre#8Kt)U7x|Lqb9-1*^pN35EhY9=vKP zm~mR@Zkz4^s8LU?Ft)iMDo)x^(hw3%DfnbR=CplcO>yw(<`TtF{W1CH5j3_lJWkxlW>sFSmdTpgA%qB&uW5>bB&l2!?Is}I8 zObPpN0i!3Qz0S5Im~-#mKB0E=OZ4xwT9dB(b1h!nB>|W7?{k4g!vyGFY8$>|r#u_E z@3f2K%W1LwP{cajD5dnsbJYwci!~rYN>wnf8-l}Xxop<9oSN?hoBY8cm$W_aGT5Gty{!tGW^P5tsSQw(Y>Tp@Sku@!viJD>r=hDx*{Jg*^HaPvHxNznA{J zWr^P-20yXWr%I(m!oCxPYFg=_e!a2m!X&|TZp#~wn~lJBmoi@aYd1i>ko`vqwLTSv zG9sB(da7A5n!}jxRR^|55{`f$6;LCnM0Md@)n-z42Q>BFJW%>++=3<8#Jw3A6XhmZ zRs92LJU>zo$6S}&4f-8JFWE|)3|`PWu-{X^!H5ekRh}8R!LZ*i{yG?P7Fl2Q}S zr+^1$jy+i2n-XV}+1oQ%n7+N~DJXc&@rhYg6~gGvR>pMWOQe2tAF0ye^_{j*qrF^n zD9iLRqA3AxF?ZSHhNA6q&w$?ejn^wT@#!i5$@p=@y0@CxzRraGtC25f*~Ooub^7L?#TDSJuEk?a}k z=?EjJajh3B`?(YR%rJ5No}#^;HoxKBmBh<>#!lJ)E=FbcY;>0ph*fbz4y^$;zB+CN ze<*bZ`=C3dghsht2Q^m3(2-Tti!)6}E&cSN5-x}JH*1Wbl;MKu2a92!f$Jfx;g$Sy zR?S_Lea7^tmi3X0!x?o6a`x)M5!DbF66nYGUq7^(+bci3pZ~tX2>JdBh5d}HprBZE zqtL@jnfNu|xW`=<6R8sF+1lzatmp)Ie@H%=APzJIGhm(xH~T6ByheQf;bjl^saa(D zcY$7>1%AmazjlfOms>u4%Sri%{#cP`0e2(G0WmYddG|s^2#^p;&2$oL2O6`FggvJa zLK|T0R+iuT$dF{%Gad*hWB-iu@^)a6SZ+eZ)bLELBx#KVbc;u8QX8gT$MZ%^qG5}t zoc#nu)JfVY;FYis#03gsXi;gSllVh99L~qhFRkQ`5sR>WNceG>{N2>?O*IR`#)Wa} z#FA>B3b?*LQ|fc?5wXy$GW%&UF06@I6Q+6Ki|F`=%ZEB={jN4lB@`8n^7fqqrlNa6 z#z!5nl#wNEZ@V^g-n!VWfpw(g8znN=i$~ABYJEPm71$dH;jE2%HL?!&+C=fUARYve zmv*u32rBz%CU+F9%)i3jJkJ!bK2oQFv?V)6_bEvg7*eq>`<9PhV4rVfEuLb(S1Cf1 zt{Ab#sdF?borxP^g={fyAVYBXkU`#A_4+af-!Q;JNqFa;9`zHbVPG&Sny4{r<{<*a zewB%E!7IQe6>bO*@HAwtVeTefhmyJ=S4c)s5lJ17tE$Sa;*63fN}Vd!xOVEDgs>y?$Zh)6gW1Rt@HY^ zYi(%Y$;f|XJ>52t6QvOs`GS^$$bkZTsW8DEE*&7IjXyCIgRoCe$L z>x1Q}R1x(f&8veB)Ye0n&llU`?F*$h@3gf1;x<4bDP1?%T`cJ=dSrDzhgmcQR&#C^ z^1ZcvL0x_T!Sg^qSGL`!ShurK`;OsYC_x)HaRu-R#iLw{80=jSd$=&As)r|We&(F2 zMNv{$k)_?|ogCAtM+LEyFkReCy&lYNDeoYp_D3-j@9=SK(XO8{OVQ8L#&^ zZkwd9zq!*@9pE?8`f?j40J;Yzto@ItpWWLr76!zAH_&8YgQEvWSMIWHxO?EMe1oN+ z`8XojOH^iJG^6hp!md7kD|WP^zUheN1KYTIY>K)n_g|Iutq-t+hGF`T@8$|z5lxb&ot~^*%I-6v&UVC2w0RU$>eEwW zW}u$rghw2ZR?mw!v>fw`Z_hF17) z6Ba`MP$)QHW$H35*0KYBef8wl-m-*enilL$A3h1wCecXxCM@Z38KQPfB&hpNRQa`c zIdP%XR=W!je7Vw=*sBS!su#}ax}mRB$h_1SZ$jkqe2+tS64$W-GnN|jT#Ce(+KEcCfXzg@M z0OvxunW>91d(~ffNFN+fvRvmDWU76Dzi~(MH*~%vK+K~yr{(e>(M~_+PuMQDAH!lf z&3!Z*;Zm}=Z~~rN=mu=LoR_U)L|7v1VHlUXiJKh~R}?qofAN>bhzl+G`~b1~okTXQ zsC4Qtind7_$t;fPf)fhwdia4)t0MqXYAt_p97O9ax;SX)8 z0W-Y^jq8lC>|4@o6}dFG*Hq$!?%N3yF*Fo3{+!NcmNJ1Fz(g4|kB-CA4)X4Gl^ zdxD2+SG;pqb*q8KP|K|2%8CMCJRXw67*?niw6p?=*6)jBfDZ|Fz4FJK7$v-&ys2q^ zNiV3b7qEXFC=_GE{R?i>tTkCo-PqeIQ|1Q2*1jsVHi!d)*maV8hSX5~=F_P0g%{_))l>MZ5JUbS( zZ$v+I^KauJ!3-2m?BakFp)*1&`nY#(TeNpLD4nJ+I+p^9q*HJx+l)u{Sss6Hhechr z$_y+rqq@_UG66nT+7r!J3R9-t1}``N;zcWhkMHg80eYKX{0;mjPuRlt6f z{)S75eWzkt>~ssmH~Dnw+^HM3oP1ebJ^}|z4?u9{rK-tS<`l z6L6(WoQ!PZ34Kb$(oqNHZsL0E3Ct8HYU%-#_+WF*h?|E@SO$MQdD@8r8c5vhrjMjD zqC{mA+3yK&kYskfSDmRN`Q|r~4@v+<`+Uh-a}I-F)Q_r9ejSlKmgx$dO1fD=&&-ep zt${X_Wc@By%6HT44-l`tZD=whiNae``CnSX27-q?vo0VuYB94g1KbsX_`sl*?pYQP zWGtyi3-m;UU$6B(NlaLWrkK)R44Fk*{huO)Lrsq?< zY>xv<#R~N4ij$NKxh94Lr75h32pm=>qH&!ir}dC1R~lM}_t|S!PU#7+i9)Rs@OA1o zKRj!W9PtMX$3ewQEMLjpsVTh&(muxw@Z!n&jI`4UBJds{gW`u${LDY$FTyPgJ`R@O zm@DkvMId^F&L&u4GMu{*+`U7o%HHC^ExUZ+e|*YkWK%O3zUNdif)y}Y%E0~KE91V+qskk8GOJ1n(yhi{`I!Mg}4>P8IT3Z)jvsFwA)`#qXu( zZiBJb5TiztG&2a%L_k$+)m!G&n%gJOSdI6biQ2-pOm|o{Jh$y1HOj~ALiGl2AChgl zdSa4DN>7~FjsKLZi|ojV`=A@ktna)A$aCqJC_8Q+!JYJOU+otPj<06ovZgT_Zow3uH*b3HgM zi=^?76_tXO!Z-^u-h@K8os(6Z-WQ!|%qXF1o9XGd*++=)=s{m&!%l3=6&hrp=pDaPX!n9%p<6a#R4}=-O1X$oaBPy@rJuz0XX6kA&<^ytjx&DiJw; z)M+D#1VV?(e&a#|w^jAbJoUtdb5C%{ad4dH3l3;R$e1iFsO%&zwM~ zc+>1d;`hfQ3yjJ+Zb|U)v(gc!I_A%ZC{G%vXlvN=mtQ8$G9I=i1D<`Su?;=hkRaL} z%7lPhVrzdieQ8C_4dT0t;%9pjPlP4$MHwotOlQocT<*0MTDcOlAX z3mWO-p{q!O9c_05#(7k5TTxk}?QsR}qZVu+9?86&#HyI4XnyMigZI}y;?3k_iA*?> zYt>M<=Q~nz>D%FasMA$ncTraP*kjJ2&ZyS>XCIh2Y)$*|$H>>L8n-Ur(pQ!C;;`3{ z1kQ!awVU|@=I+saNevSW$^z&QB>o<3~4L<2ppz11C7K z3;y8mv%VaU@D3zss)&GPxX%?R#cZ^SS|ZD}2)3?lWGGX724~&+Xm_v-(O|Xrdkuze_lbSN%4ex;^7uLao1)TBoWhCkb}nff zYY5ViR&%=ME$JTu6x2hds<(7%9tCd}A$N_FP{Dnf{E5}8nA7{L&rdWt@-FrSM}FAg zLMJvbEBQ@fV+Z@1zK|HGm^gXaoT)O2WTvnb>K?v>MA(AWTvu7SEiNtt;3E5$y(ZyD zEm{{i%4rQmja#QSn*ETMEgXAH#kYt~?aT$ydkmJPSGn*NP1+FYGR57;5k>4*_@hOt z$pEU!P+{w$w_u|no>%ZBl)9-zA2wkhod$ri2@=KR=EP3GM{LWRcaC>WNr>;)iJ;q- zh{yZI`@@oMq=%Jn(CRU&+5!F_ct`?~`g!#APuNrUp+|p`EoHnXB~XKIwOts*7oly3E7Hi_*8Tqs*`ZNIzs z6|LN@rSFhc$YlPbP?(IIcf|>6{sepg@00S};_0!)_}BQpTkO{m?WI{bDyDh=PQE*V z;D~x9=Sh(wc@!oU)G1JlrA{S|3`D_etoTeGIWa1;r==rUGp|iyA;;-{;6R3;aWlTt z)`(R7V0LLtH4xgsOyVOy~rM%oTI$10bmksTvbK(#dCq_IzA)D5EZ$KIKJwtl^bk@ zA}@uLIz8K_SO)`cY2vFBX-y!+Z7ng&kE&2NXSFjhh@wvLExEm;mdoj%D<*GeJbNJq zKgr4o7P0r=pc_>6r#&z}k>J*S187fHbl8!?zI|(-2q*xJH&*wS!-sl|8mwr_AD_Ve zsq-(#ufye)i4i0%DW3TWGYMW)FYo47GLE1@)K!iL7iqu+dff zCa^YhT*9@sj5TNz%nNJH@Kv*4{UQ2o68Wk$iaYY|1Wsmu;97<82PyN26R+ZN!BZP!emLWVDQ{AXg44Qh)V;ideXr-quliP@MX zm>pe+KHQJ+>f=hUEIEQcl;NdP#fY)vU4>3OgmO0P@{IjmGMx&S(jQVa2l$klx8@lV z`8NF3FI_O|52YhndsFx%C0BEoc>ZC%#^vsc$fL+h(_8&ul&We)-@|BNe@6((R43(? zphEix%MLFs4_woF=U;7vlx=T5Tk>nsJUw8Cu%WJ+X18hw4~i5%SmwL%w|Pn?4=~<1 zU^W*B|CkQcHLgG?dF^{b($A#7$5)UkXP#n}Q*;_alsxZQ$MKz&5m7WYrb19_1Gb;A z*$L6INuN+VclCB_wrYPhM|LQGG_dnmMHZKgIQ71&M+SMH1HV7hDR4macanKHkfdj`xy5~Sk%SBiIxKCvg=a99Rq>nB zqwmJ)k7LcLJ2|gWxUTf_JjtUKDqUr$%mnD$ziZaJ)RfeEW1WfjB-Y&&4(y%eW26u> zrBd=&C@vn%Ii{NWO8r_%DDyhOWBQ6|8Wz=%WO<_pe(M>VF`YL6uppc*IUrlyPhmmz z#H_qX>|1@hr+SiLXJow?1~|~TEyWJ6jOO3^h6$|KxQXX%hn!HyN3M0m;{3_`Ml|w< zTMfnIY?7(^cQQ6a;Frk!<8n_#z`R_K1Q<2$UQ&D?4WZp{hGbP+5*Dy0{7kf=6zFkP zHt6)wM7W+|BB}K8w?-dAj{yaR5O0nh8w!kSvB|P#8q|KqVV5h_7 zZ=JqF3>fmcz ztD$xGT#SSF+7ZGT(~=r=O=DkhwAC<)e(kPX6?PS!ijG9(ZD?8MRGdlzIXhb4IA6zHb;+ z?V_}|a!R`e){(pv^H1e(gN4O{+%Yu>d}XiOw$6xrr1SKQ0UtLsy-vke=jB)45LR;3 z)&{KdvrutGNS#R3>83{-)wJs^xz*FM?Hdi}JSW#gV*=<1&yb8+nE6(xqm`W(#qtRQ zL2e!=I?$0dz=~$XRz{p7jY?}g-t+zy9py4aR zf6#Z<+wEzHS*}kj?O0|W$zAOdP51vs)62Jfcaj;071_f!>o#I{wm$)x2EY{kTFO3d zs`ut)P}2>CRp3LS^SGu=g@7{+`=`c*`Sgm{f*Z->BlsVBn7t=4=X#mqOJ;IY>et;) z8U?EsGy|zl$}9ynYjpxzSyVj{jMoZYSo+h(xLE`g~DrV z0%!2#q}jYQjohQIzTkP24_|SXCx5(5KD=w0w)YSN!uMw=>;W}-nOn|p@ROIcv{snB z{s<%LY!6sc-;QJ)JPM7?bw|W zR*snWq{|=whY!SsaTlEd8rYYv+mHoQm7ExyeNV8}$-fx38}gl5!UB_|Kw!ymq(K4w z%%aVz=eRa=pY-RN90eH^Vf~=0M7e`n@AON9m9YYvcvM_0OP8}H9-{vDuVm1n*g1WlqOjp~W+T1{)qaZ0)6ug;_I6T60(F@ur^MrI2$MsA zmKRkj*R9ie)p4JYa~?)2b7~Hs96F26^b7;oHZ>o_m>F6aRtj_GOQs(;$nR=l z5z5Z)Y$<``!5+WJ%wu~HFj?U9BK^`vr6A(0CH-u_jRtOX$Lg=ew9F{mLo~C5#o>0v z7k*dz;2wR*kbS0*3dh!!2AIC#>2T;%dFzxosBEV5GG)er3OJ}6sy^JwEBz+HCh{l9 zUWT*VXCu=u^Jn}R>x22sCD<2)0$Uq<9aEt85l>2}ulFuChY+%apGfFI=k3&|XJ$sQ zS#QC3>id)3Cs?p-k%A+2{WOB?i-L_eq}2SY zs(by0m&>?>{N3-#R)bMooY>9Z5;-kx57J4D0<|=1%bpV9#cb93`Pl z)s~}d-@vsw+9@m{D6p>(0PKe^`HtQx{;v0(-ESKxW9bD#p>Kj35j_=3TC+m^i z?^rYexHp>A<rUPUGS{#KUcZ>K zg@saN@MkUGLdz35@3Zncotupwn{}|aX(dNsU zFnx7lC_Mi20xrB+qA`f$k8cwhWu2;R<`bVK{VF4>t>DOOjMmac3~a`$gudTzn)^S# zo>yz02tRsT9J51R2$#S*K!P4fzYMne_y#$or2nHH8wF~_@kIVLCrOoG*Hy_{ljC5F znt^LS<%{J=U9ifvFLsDTI7``V^nHZbAhz(o>F-~ zS80?~l!eujPNZ_4L|vG@bqG?>bcbE{*o&`PuCAA*{Q@YEDvW{Ks&-tZzhhaUk%O5F z*uNF)DfuHKi-d7rq{at0Y7yl+ja7xgid)d0IQltyb^M(D2tCBK0yGT#Bp}_BN~f+u zER5z61c@ylzFkLzZ<&305&fr2$rg{0&XLLdN3Mgntf2+;Ihc{?G)@oY)}2i)$!5hKx3SD|VS`S@bQWjKSSKjJ+-W8H<}csPV|iA&k& z^$Bl_w?%2RS*zoEz%l!yec4Sqn=MhW4sHvI^A&>n>fpP%CxFDxgHFs9i=(O{h1 z60!%H;zgr1GaNYoN!7seW9LhOA~v;`=fHmxq~|QYv&`6;_tVT9zyFW2GY3Ba#SS}t_2MeT@4?6vbhrta7tfpE|L^6zWh<*(Gjo%_c3>{ zM$1frjWOV57Fv?k>U%~?x4FD4tYeF=;d8SgH=td)9i8yqg42^iDKaTaRMmuIEJRAg5uurPF0tcSajBF`a)iR!eZ~C4aP3)HqMWW{@G}q(pMY z4Cj8?(Y2haFB4?jKW~&41g;}2*|FGG)KV^6zIZKbh5yHX4_p;V%ziLO%i8Abe$x9C zz@olVb=^5!)FnGEfqp{}#;ur1pz^xurb@<=_Oub-mW%*8ubplEEko0!ju%MYO>9%V#%U@qkh%<*e~_iIRHO zgW8?oCqcTFF#hl){`k0q_b(-QNoI&AL6S(UuoHoFXN+>}u-wp%x-(&yc`PA{MM|H> zCg%MDMEf!ozB>(Pog`rfxrt~dbmmPzKW{Y97-GLXv4TIPt!<`Q9x9mhU9iH{*V}qw z%kSd{nTn&ak_NuYDIOI9R>GoysFGo{_T`^r=~4T~VLEkHu~bUGs{pe~$_JG8~tQX(-Ov^U>RZH*}<1zVjs?TNN+4RimVEq+&8Gm%(0&z8FL2WI8KU zV=T5TRGLvU<4MBiN8zmRzJ-^4g1BLpdWu-e092cJ4?iduA3St_yZP)yB=?h629RI7 z_!>ZpbcWa$j!K(JiLNbU3xI0>CIDsCK6BuPFz4<6tey9Yq=Eh<&q`ZA3V|YDR?$Fr z<&o9UYsD?N3TAmx80M9QM_&y^VP<{XZ@zoh7b?#GeHtQ^vdrqty1tqbJIWe%nqltn zWR|adL>@e))+8e5I`bfqfK@!Sl$OOIPO`RPrqV^3Oi3YQOR^-%a7CD?$#61js|JU; zWamI~!?*k!j_kuHU3OHhgx}k;<+Y93nM{GbRsm_V zs}GokIM|emb4*FaQ;eq1K@YHxUIP{Hyc#m&Xom3UEW-&j)?dk&Yv!vu^82Aj?e0%w zq$6XCJ#FhQJe6$NZ>beT=Q@B#9}fNSi*V8b8Qr>K ze4dT2C0#)uA8QAgm-1!ZOH+O7*^+FM!J}!+qxKCySXj0EBST6uFc%VmPCSvt0pM=!wQxOZqu6Cnan1EYjQ_} zcH2>s^TqRkSZ1xg(~oUO<;ReZTQ}vrzho4TzYaB5w+iOEz1zCMmkLm_(8wJPD?BvZ z83(40_<9k$TVh0t2666?Vr|o=9Iz+lJKM3%Xra2j&o4U*=xeHG#H&EOLWbvg%YR|be# zNeRvyo-qOlN-dUjK-$#ldsb1h68j6m6N!lMTc4>>yg?WK-1*@rVa7I( zb3IE}e((tE9{g1G7?p-AqjHwsby5UJx!R_mr*bf|$cBneKD(^kefz6Ih{0GlgX;U#yE&s zZk_|T!+sCp{%}FHqRQAAX=-uu?ks0YBRt4QNlO=}_@xQR4YdNLIs2zrb%Bq-{lF(= zE)d?CzQ2s6bD+Q|56rG|cBqb*L3-%ow{z|v+Jqh}0*|?wZS1v3-`Q8Abp+>*jhI?5 zebd`+z!uVH)q~O|J1k?WzX1|(N(JZBOEH=kqp%!_}pFX{0 zX^C{~&Z@e18V^pKW+H(s0tGsD%+`ZV<`P};*e6wyC(k9JnxcwI;LWU4M)bQTni0j| zbHa&=<;u$$Y&MRPs4rN>@tF}mq)(CA5+56)^{*x6v{N{g6X9{@Gtf^CDM0%y6enyd zJ?)Q-{+U(bNAJN?De3WbWQM4uxqx*yqY-K)O(o*02M%k>Y;)psVNJvVlnUT^MWp)! zYWv`}-9u}cJMLT49DpMtZ{Zzvd*PqDVwEZ4>dWXYD6)AG<=+t(>^$JLw;)qMnWdlxJt`0baWSr8nmT zJ*x-H$%wNY`3>c93#>Y7j6lw;8k+)n*1#$_&53vD!=5HDQ)ODCS~gHY2u|gXG@{ol za}8_2FQ+t>6UG9#r{bB5=R=&PxsRtt{_v-M@{3AQ#a|)^ zptUn$eMiQOLVS51mEK7?Kg+X$C~}DMvuUubR7L0LtfI7p3p9iR-0nn059gMeyUNzg zqwSm3d!_sc^aI-mZ;7u@l<#66sIW)B7S09wwq*2XSVCdu;+`NgNjnw+7R-w-OCu@K zrW(bZU*%{UGrrY!%;(v9kvSD_%fs4k7!lX8qI0S!hVNn*;*YEk6$K_hW3lTg{p%;z zARz}ba`Roo=$Y6FYv=?INg3kza}@sgm4uqHPIGwBFHL*02SptnLMg_U8CB<(4sW~! zZhvFi^EV`sqa4CA#g{lp8E%btHwP*wcqGxLz^l{h@fFA~8A*{rAaQT8Q5GOg9GGK@Hd5jE_7LC-cZ3 zL@U4?x1NT25-nfDb^Ck(!WY`~wX7xd;SbImoqd2#=@}yof;D2n@SfQGE9Zn0II3n0 z-P09hp3wMjEka9_&p@4_jw?=SzYAS)EKKSROBKoC5Y1Z)521N$U-43Riw=vCLY6in zY{qV?>E3AJu9huJPWDaMzr)sMwmAIPe!+;^(LO%yNySL1BbMGHLlruu4Dyr^R*(>? zjlNB~k<8JuSi!7)=+Kl2*UnVd9xjLiwNO+L+GD!YNt16IR(7V{5aYRbjj6}*V`T0# zHw82OH44@?_^i8sV84onEiIQ{f*jS3^-71DF<&`jllseEhVOI6Yo6{MNExSz$rcDo zd}FA)+9`=w>e*u?oy1}42#sdM3uaYP(SpsIj-kw&q9nXTo_DEaxK<0mv&e*T;ZS$h}NOSdH3cS%C>nC;E*ztDBaxU5AUDv8W%~ zz6vJ>5Gz2v>k>(6({j389Qg< zox_FW1fY+~k|rBjX;1j8KOci&yu5zLo-^hwA%#lYeAM2uoRG;@5PT*`IJrwB{5)cg9`05_#9tDPmX z$)rN4Afl=c}hAARFSHS;}I7 z4)@+;UojcR1c;Tdik6>`F2dHiwrox+TlFUaB&o<~`p*MqS%1yA-ihYoJk+s3xqR%% z8dXC{kqOgX%i>}l)-FFj{zNMqPhrFhYda6TwzsmXYM{zsCOv^zl0tDf;47(e#MgoLo3c4W z<)jwEO~)Wr`I5}bU2#Oa?an9m>B3DPFROTvX?q4J7ds_NgsSVRstNbb5ELY72gDx&^OWvSnSKbE$4a} zQ$0z0%qh}-saUDEvKWw*JEWEWe&v4~#{U=rSSgg_h-bs+k-{1{vv#eD^g znVlaPtI%{gpYMLw`Ir~d+dxaTW>5Z+DT8+ifZ0+Go*-SJzzibe2Yoh zO_TGyp7A>Ku{y|N1at1Equ>moXKGT=7&h`YsMT`EvCMXUW|H%jtPMqAF=PKXdK`^< z_>>~6LeL2~y_($pLR2*=qNZJY6ql+sY4oisF88laIfj`B29e{<{;TQxZP&quQcBeJ zw3^t&mni#r>7$b!IgPHjiWPYI%KK$x(VMV&1#vPOXJq{C{HcKi(~hJE(-E@V8K^DMZdp~h}jHn_`M%hSq}O`)Peon}CVY$w62$e)0cx9>=W&}Fb*HlqPR=V`C}hC2U4 z^vL;LGj%JgNmi`j@=mLCJ^mkX{o$|wKNU>@*dUfTG^3P3)$Ge}$KW85D*%R=XsdSIGyz9TW9nZoac;2CD zMsRG<)NVSs5i%p_)H^(n+?=+}@tVywO0hq34ni+L* z2kay)V)4<^6ju9b_g*F@2btz(wLd!P;hs*LmQ)??uE_!k# zK`W1a6(Upf{oA)W4h+NDhzCq<-tLL;MRT!Gd)CUVr2yzf;~ z>|J?;rJ^{g7E_P2dUfKnby`xT7hj)E?>@;LWRJmG(@Un}P~uR=)KB(jI{oCg1MQQo zP3D^tU?`~?ts>a@?mOmr7G>hULZ#m`kW4H|(X;U@6Kj2VKm|#?FZt$N!2Ox7hK&gs zlKrfb(l4Hu2!S!6jS;mcWg?JF9Md)3&sHIv|IT|Kn4_}6F8p%-Rg5c4C4(5le_fsm zp?eR#5v+_`7jumYGgVaOQt7h-mJC|RI09E$nB z^oIg0=N0VyBRUru5Soj7lJhJ&p>-`YKD0dpG3(te?v6QnqLFRSQ5p56XfJieuAb3_ z)HZ$CS6|#nvhQkjykLF{*k(2I-Q(BA9SZ$klIiRx(AsXmjyNEqvT@mypY0lPcdrs1 zLtqMp)yquv*suWU(9i5bK<`>mu7aV)Ml=rg`d8e@*l#c0nJ=AE>gcgppx$GNm$P>( z1o26E(Wsj8+L2Zz;9cYm+-DI_e1=<<5wkRDVM01=BfBY{(;lMKKv1;#24{PHr3=`fi2oaMJb%wZZoR{Jp3`8g1n^fYKBj zcD&MU!u^qH{10|h63-=PRRY;_i3GVy2k*aZxTL6O^3(ozpt4fdA{)K-AF^x>SO z-nAN`K2O%*a~d-Jd!$#$(^a4?5BgXK9$#VEv7+i?(W`DB4k6p=kra}d%t`<7L&Oxj z*HW(~yjnEzo_*_t8Fntn)6N!id!OU5b$p1v@HG_zm6) zAtvf%SN}&y_4HVTFmo`p>(z_`0vF{$tS)Q*rk5L%5!-QaV zYHY!a=%)rRD{^Cj1~$u8po}3&*3pXh*wIYtiG@oJjlQcELD7*l*;SsodLi@g7ykNU zE)UsX-r+4RfvV3pqjv9((0ydl*XC2byrjri#Yl4XscK?E0Zm2;R#-K> zvrM8&=@H0tpdcTK>b}n{!WYYY)}~Pi|H=Z*SCY`A16&tmeC&)Z`z-1|vW4GE-#qSP zQa!-`$ZGXKBEK71x*Z&>@nu14)&ZpD`89s84dY`jRwKlg!u%4P1>c(aI-`4gn>o=? z6he2Ig@Enn^;=Nzu%GQ{2H&oRigP5XHx2oY(2cjL9{2;yRsdw#G*SHeQ7KOKc6hS* zpTw{|whsPzkk{rseY{3;Nsf(O?awLeN}yHrhObktZuFOVby1XP;MmLOlB7HA`7wTU1Tmqp{`vl$_^wChhF%ANfDyu;7i8P-yALm@rx$*X?IDLYQNWBur zyqSo?wn43V_Zq_I2(E$p`&++yvpf*>pZp{rwS~aRe(4tiPcEZgNV53&(;VwbRY5MB zvkMKjRyi!3I`p;1bi?y#NHL|!VmZpcsyv(iy{JVPz#|0uO44?A1}Lt519Ymw)v~F7J7ZxVbq{owj}qe1RMRjkO(`>#`J#h55#D{C(8w!oogD(FDEaAuyGb;|bfyB88iEM3U z7$hJ!<8>JW;;x-3@ebzrAW{b~@dXB&G`TQ)XYC}jisu4IzI3N@wqa8*e6!9HOTZVc z#8Jz|Zu0&yG=&6rVsmZJva{rng=h$?;?KzZ`Dd=PITX41W z4pxKOo;I{-tM|AZ+ebW!6Cma?rT!Yt`>)&1nl|t99RUun-yeRjThp5@5gFggYS!&@ z0H%k*rR>^HR*?J#psCn

hHZf14gW88$ZWY*oeOv!Wgv$jj}``W=s@w?xlr3r~GiaSgE3_RBs+g8Yr7=;QykF<#u40 z-JyNTmJu7FPaPbwH*>`76t>}xWjwNo z$1A0RKVq7gEGDE+ohzUnNtWi1tnOkE4r)(xT#sak6#W zgxQ?hoO9BR12(Jh&lf$~7kGh_$Tw9^gbtbBd@~G&5#*A;_|!2im$cE_^g+PiG6|j1 z!BKw7azz0Vi$S&R`lL2u#(!*4g9e3dYeYnmfs*CptFa17$*hMS8En)DY@aA^n=qd> zUfoT6EGq+5emcN)GMMNvj8$h^L%XKbm@W*q6HKE-HY}bCKkm`Dg>Q^ z71^V6iFh(pTABEz2lTOpaM40lNMUhJS%=vM>RCOq(k5iYajnEQQm%$9_svVY3VwdgzJ-{r)~U(mhh1r zr0hR@++KugvisqieMhCstFDO8fg;qMVwo*}^LVBIsqn^De2a)GO-5_MdLk&pSlGR1 z^N9$R2y!u9jMPJvWI6q-F!&MQVsF$z<>qTZa>AUv!@x8j#5vljjE*SZykJ>KDhEj5 za`8#rbYbK_a!3@ksC6WcsxD54X5pNY1k33w%^>CEu%a+#mm@?_>dsvHT3w$fUr^f> zU_F{s=iKo`F@Ys#7+vZexLRbTaddYoajr|UPAUp;<)_sLO$-(9P%#=tnvvwvGMh&C zvSVM^3dYkVrk*&Eyn}YxpVp2LiIml?55CAJENC+Q91VKGnqlx5nVwM;q$GNmN>fKrHpkw+0!$ybT%#8y~EtanOjR%Y41}XjC_b zIDhN=(bJ^s!!7o!qrPXY;m1PQ(CNM=QK(6XL1)}}z8(+S@B8ytqw(!V5{BN&DCHE;trzv1vhkSi({^n#;yuU1%;;JgMKA*VXfLb~Rou;hdNw0L>ugtD4& zLf4o};WZwigdY;kY;ZCAh825qZkC>kW*c7X*Y!^cUA2{^8QPO}ROIs|3Be3>yQ(VX zA%Jaj1}Lu8A(|zeO|3Vl6{Z6$z7WC6lfCnc<92r_VmhmXkSU}QvS{})UB1_*L(=;J zZ=r!Wx`GzpquYmVuZl^!2{b-my7jksLgjk;<24TbSqZMY!Er$5l0Ndr%<2U7K>g3= z9H^ES)9|}{0t2#!O>>zmVf;Uwap7nf$#PJk6s_LR5{RbXwQBjSoa5(d#g!*mZujX9 zZ1|9g&oHsv#?#G;1YHAr54C+_|B~BZJIAR7DOzrjGqu%RU3%NfIrN`yh1FdVTX@gJ zC5?Jeqrb!ZQJftnLVFGM9N3pE5b`ZRml0dnzP3gM$nyF;R00S%ep1!XPjw}Atx zOAQci=xeCaIqv2$sQP{(1qG~^maa@KC{X8rHM#GQ%R?`l*OxAVx)b`vPXU!0n`sht zC~xO)(&WZk2r%@*VMS&FvtP6wg;NO88}g1$x}I+~ZepQLtQ{&%F@-&RNDA$~nAkZ` z&q2|1*Z*Ns=IdAm1vHGn5QfQL43&iS+G%MwrI9JvQu$R7c#%i!~7m6 zXU&W&1Na;}4mRy(_t=u#f{woR0t$XH2!@ObLe1)9;KkmPOQG zRQy!drIEeP+S@(OrSQ$}OFW~O?D{Y&(zRl5%#p^YhDQqh#lLVE)QzOOf)XZU z;VC}e3CgZ-74@Zv@~R_#Io}p2L{{Poc3*lB_nxO6673TdtfKJQmP73;?u!R@+ebX> zWkP(H?MRKhriNu@t`eE?19hz>L&=(|{E8_%K?rZ2syMDcX$g{wMF>W`heR-{y&tt;DkOKH|s7_xdPxEt-hJh{x@~^@>R3K%|D)S zTC4L)dAiy{RFIzc-w3&NaN!CWacdp_P>HJ}>>HSdOm-AOMY|^H=pZQ$LR?{C>xs** z!mp6cmmj0IBo*H!0rydApk0F)&;xUs%x-TS+?(=~qlQ5BCG1ZoEV?S^CX!g*=hLUF zuBntkJbbrrPHI+W-L_Bu7S9QOtAFw&TC~Da>TrJM(PVLCU2u1V2NKeLoyC|=`Wwkx zth4a?%wrUom?DNutf=$ci&uf`?(t+ovfHVYYJ~tc{F=$Fua;ymyxNC_nP!y`M#x_m zCgiq?X)C2F4u?$SifSmo1v@7Xs*L>d#b7~d{UdNL$mNsI9%fsuf@N$;Q?VOn?zs~ctSWrU8jr=zGG&xxr>V0kG zJ!-1(t&*h>Y$9T(#>R>q*W1(s0z^58MB&k)WQ%6yXzcUQgk?_98>Gi}UJ*wY!sm_? z+$C-H%+xpJ_|z`%*kFL?$an-{s*BWW5l3eD zms^Qn*VPiJrb5o>Is6W+6LmOkax%l&S<%gD!-Zw^`BR??^iL!@hAf3nY|JIi*H&!_ ze}87Vn;0pi74ozEYpO`1aFyq^9qGR2GIXWhD~JDWxhDDg$mE@FTIO?#9|P-udTOts z28{S;ugar&_%)DeF%Uv9;C_6fR0R`duJRetKy%aDVq^Kkl~G;4Cci)L#5$^K0Zj2_ zmS_mH_I-YZi!nW!Mqp6?YZ4m-|19{L6RuZdKCQ-pM~Fxr+XJ5f{Q!|opiV>ENCKYe zMY=90J6|{_*}iX0bw%0eAf5Tm@8`WQGt9{{ngUTdUh8E5f5cyXx78IEYE(?;Zd;fK zBKqM3k8yxW>i<;^LzD!8q>v3##gNTnp7*~9ygwbcAx=GG(M2t$;T56Ybe?E33^VjG z=4Ek@zLnl!#=ut{XRmTSA3VnaSZV+NgJ=|sT_eN6FpZ!Ky+3Vd`j|HKNk1M&14E^~ zgYnvo?l^D?3ain5JT(N!7fXhbs`$mn;Ag%n+@PrsAPJPbBO{7$U;BLiKSeY=958!a z-J8o0%yDAQ(c=O0PA*NLR{h!&Oie_f~AbV}@2^sXbY+&jafd_!2llAoi8VR}v ze?_(oUTcCT^3*3fSH!U+J6gxaq2U_XkP#$l^5 ze(}cbbsd4*LeJ6Re7}EMORvGrEdOiAFlb{x7(Yw7d&?OpmqXrUzRWnR<&h0Q^m`~o z9NWJ$fWD$3w0|;gJAfhoEx9@B_enM3l-j~>41gfwE`|JB8WUt9tV?A1zh<-sK@1_| zJnvzl*Li346~c0o%ED70|Bj`Hg1PEYHTc1nDh2i|L82jpy0{ME*t|044RdDFi_Spt z3<=ZfNS@vB>HjX^f2$2+Ljg4${VCmK_X~jur|6QA2q2-t?!NBje@4@I%mjw^qv0p? zAsZ+{j{e98(1j3m#}5{25ytYrwd(0Ub`Q2A6DDJIJVJNje})Uh0e`AI;>*TH*O=aN zg0hiq?`5|VFy*(Zkb?2{h3G@EtET?W;mXdWuu8w1j%+vb($AQ3lA%NMsWP1ZHw0ox zK_Xz1@aM!XX&5Cv;PRn(Do-r0R7F{(neuzOBpW&VATeW%RE1nZZ=fn!jyp_7C>r7H z5M|)FX;Q$qvw)Ggp8ws(X?bMk;mdmU$A@geCs+%a25V(yjCGGCV{ZTF+u}juq&!?F z6G|*f<%a1PUDzCl}FUAHInDs^y8}0{}t9v^R^7MAb@H-{lBv&Ne_arVi)|# zLgJQtgpZ2IKn>+|e&Q!9eSY?7dpU1E`ZXo0Xj@(IllFInlpJXIlg{^C0*gy11zSG3 z*U+gmRj1BG`Olv}8*DM+z>4~*@~46UuE-lC;{P>ZCJN}=V|RH4-x^M|pw0%DVU;{d z{)^R@FB-`ZOP}VfMHyJJaxxaiJOS0iHLaQ|n$DKk@j;$W;KRxek$w zCk~`u;EUhgpZF21SZMqE|J$A}ddRS5CHr027RcRzh>jkw(C;>jOS~>F(&_^vr0jB1 z=t4=*&mG{3N}p=T!stmKnkcu%_1Fg`&3W0lE=cKC>q+pfyK4$7%_DO%5Syg|L!O8y zpEV1Y)uR7sRY?qocNqWQ$JT%lZ42jRhLi`}@Yp{$@Ma8v;%PiFMP^2OYwL*QKAX8x zS{@42iH?tQ1=`j!lj^t6*t-~X*fF8s-I8^0rLBt!-_T+QTvQ2 zBQsxf3YX`=8@2zpD5%WCUvf>S7Wss72jz*lfGko}4Q#m(v!~Dc`ug+B%jM($*{jG# z&x}G{QnMrTkSmymZq)$Rtnd=uak)O|`ucj?Vv#7qa0K^)z=1nE-yq>Y@YjoG0I)c> znfd>&iS4O!NPwwaNdl|Px&u%=(K@AxTaX$u{UBr+8taP!)U7E72!!gI`tvAf^Uqv) zh1{t5H)ONs{zwQA>WGPBP>w^dHE3iqQFdQ%^Vm<67(sSJn3?h*;%w_|4fP!CoRr}N zE8W`#Y+BcUsqZr9PzkvOU7A^r1~%2o+xIC8^Pq?E!tZ@0EH;jP;IB5=<%7OevuEO% zq1!W|j@aOomVZ*ijDr(WGzz4o*(V@>*I%(WfF`E#nyn&hd6xxk-5Cf9E?GR^N3r;g ztPZD+gg8{rWfD5uVlZW_`c!tcS6n%6&yLaD=jw20loIiOy)1@J)0XMRgOF*;9(gX6 zVGGb67!l=&l}7dbD?{OGXm#?58>_x_Jb}DrYVRkSxcb+wdu&dr;SV7H&=gcg>?G!H z`D|$At{nGgNOk3$U1)X6=9Vs42Uj+korn>QXmKcxTye?xYmOZR;PqP$%z!sKDsupF zwl;~IVQX)Ewq|A|6AS3L`H@5uQch*7#WUlHyp^yNlp_N>sP77G$mo&Z4f-+ywUwyF+4(+r9y zT|I#(aXG{8b2Y>@g2?H1ouB@hYs%z}A3$DZlcX0OP32XTdjthGO?HNoq}<`9Ue^>i zyi+lq%T=ZJ9^x*#(yB?2Ry|+#?fhG43oqt^z;QU7@&St8Bgau-9b^fP;0MU7?l3{@ z)U@Gno&Bo_UJ?>*kalbVnDyt?!)5&j$fB&*uDC40)IGoKA}&zV_Lezp`{fP(-#r^R z&Bv=w41acWU*A}Elf;v0FQ7@~+~KTNowqSYl%08p!3x zinXe2di&b?xMrW~eDsO=>W{gsSoWHi);QfFy2BXq09G${It6HN$`GyDO7YABcY|ySR*oToq zOmWzmk#N)r3-Nc^?ppc%#s%{(A8+6dma>~~eu(c=@)iUzL#+Gfbpoj(pK17OaycKo z%+{v2dmXgVx9HF?j0!bgjLP9lvgLe6>kCOJ1wQJLi%EkO%;1;LCN9Lidua;`ngeEs z`uZlA9+RWooc8Xj#cI+8#O>wfAql5TtTTD0)rP3a3E9Wa%XT=d8AdcX7Src5) zx>d4ei+bog@4tYYei0_@Wga|K)B1(!Y3GK0s7p8`V3gvSA$4p4 z<#JhfSxtY2SkrS-ZMN37%o>3oKbDwmVd~BMw79bX23AK#dpk5Z3Xq9Q-KkCoY8y$z z|5Rz%%m)R4-|0ras3)1qaJkpD!siVU>MrNXxIj{KQQ*K3ze)|0rf?O3OYk)2>Avt{%I+eUQnub9hG# ztDU4sx~GcWF&C5E#S{+hPA#6{0zVcc{0`#)udK|ULRs@?D9{=Rp)l2PbX}1{Uf-1H zi_%HsUt%e{$h(uJ7YI5|(p-5S@Tt=^+n>HMk)g)Hnwul0MF*-s3g>Fo=3Q^|PvzXI zGKG^N(;q!^sS!FA6Ep}l<#Aspi0sbTyF~zDUvO^drY7^#dP2`rr_eq97;uNTe$l7J zPnk%_5md#$(MutG!;$3omhq9Tl(FYMe0nPoh0!eoK&7gni&?eq3j^Zr{Gh{>v=(_a|*Gpi{sRenAHeLaL(AGK7`$CV0PejSN z618|-RO64@{RmctH)Dn_4P`EKvRM_`oV!$$!ozbpB|zC2t_JTj5cC=m!!^hNQ@QV* znvNbyWM(OL%lN|qi`oAC1*^51fqE19Ny$7J2pK#TEH1NFDddl=HsWq4+7)-v38KP6 zHe*&JJ97Bxdb~zeIDFz~e9l+8jb!1?nj?eMpd-^5vX_}lJJkDZuoLo&6JOp@wyhT* zGtjqQ_Q7cX`mX+>n-Cqb@suS}kH}2ElFMdcfC}3{=R|niX>(fzZ*;i+dde@jDHps@ z3_!3@Q=UIu#PJOQy1t~lyS|^^VQ9s6rR`()b!*zfA~mPyQtXn5R)|Y{q;~3HVM5*t zjgtG3Ea00_{Tan`W;4IF_AUXiz1q65<%Au_Gg;)cp~y^)+;1u$2vZJKAeVdpe(LMg zDX!~1DGa`sw2MZkf`|+UEN`IpZz|`8Jl(;KIADoUSFK0kDqSDuBDMKT^dgMzPh>r8 z&sS)UX~*Xbm-6IQNBPSneq*bwB>(4UZw7NG5m7MZQ`p#4EUr?(q_M1kXlSVT7=<3? zi(v&h%x4XSDh333K&*J9u~@0cDs!UP3miV&i|Ab?kCYraEqBmm&V?CutO|FidOhb- zzdWVGVPx8oiINJp-3!PkwT)1$-F%STScL;m&U5n$lRBwE%Z*C?zb(AEU;aEQ|DZ{s z1Aqba?E)61xZs4fK0M#jxXDlpbl#UlzNfz06RzG*0PK)X$L_cLz`*Mf`rnSY;19F| z6K1GjZ_}2dK^L=(ZD&Mf*vJSe|A&PJ2l>R0jP|r4k7Z7-h^tg2Mc4@5+`^H;oNi4^ z-wzqz%d`YD0LS#9Z)EQqG~kGiY^hbD*OefuG7`yM61K}DKkC5gXa%kBbyZ1Za8b#t zxem$0!r+o{CNeg|bLy|jLakD5-x7qhc!Yty-4~W_3iXyE$OLY-SHHR za;~dz24U{<+Ygr?+j3-ysNyw<0K*j?ZGFdwV-bYIs9r zJ#hyFneIdP(~66me!nH0>1cQjk$>f9<%YwF$d;%Z{v)fyT?*6{$9M?|I^P32Pr|`u9Q=Pc1Kw9ocOmrP7NIrbGiJRb7v)c z)J9H7G8vqLranpF&F`d+isjqHs!PhBU@1+Q%UwEy>HbnXMNFsy4WCzd_7dJU6xxCSoRFkH zKdRx;sUbo*T1_f)+aLO0{Xli0A%M=jK{}VI!}L_^UQPztP{fI5!d5}xK(`J%W*?*4 zU#p7fhmF;GCklVGGBwunvvbNgEih4C7>8cS zJ~YO?ODYllTo$b!6KW86;umX0{I`~FuD74i{>NI1mH5{f=vKd+HP1CJnPdSN zrD{Lf<@I)S2v4~ps-Dl#vYKqqv8+}QQ*6|8B#Opbgi@9;0btGf)VpLTHY6B{H2}56 zeVIWVY(M0Y3$#|(h4Y;qs6~F$?W=!&V~Y1+=Ox+rmsH(^J+nTEsb|4PUzJ!(u7vBF zhVgk}uD5+dMTdi%{HAj{#OZ)jL$?BV*tS!lia8NRzUWrxTiJ(J>TKwv1rX}wl0A$B{0))+UHv75_xqYfztStt+y zLP6$;JwK>bXe5w`Z3AXj89Gfp&$r} zP93c&ISm&Jt<}KswUW@7Y7}F*Wxdh@IaZ2)G*@`>QpXR7Fwq>Ss)Mi;_W|oMp2kcO zPeoWsjZ>6L#M{{M0P8*-UIza@bu)=n!G#_Pa`^=mnDp=+lv+#H+7(qo#j91TTxJ5J z1%DBr$a9+N?&ng8IG<4VN4TXc-Ux$}<|GENh1jg5?!01Y z2$y9e)}%r^MPFmeclBxRHSuHD%ohdYPo;_vCSPtY?25Na!RI!uNj-gBuy9=H9%8_( z)}ll7%U&ePY`62)gRYqh&9Y*OVb+{i(j&K*RY?Z9G23ICMNBagX*?WKiQ}I?e{Qod zs#$*-j3M@=4f)?>e=u-CiszGqKb-%M8o{nObeNC5SV?u61z>`<@GLd0-0mOOuWZc92P{BDg!J<|CZS%ikMAq3%ieJiWZ z_GV%#bpU#ZtOdp7NrDOZTk2pdzWqVy^VHr&|D5+6N^`&`2n_Kxd?(Tk+|k+1)Os!j?|BJ0~@HMJviuWy2)rKh%6wD5`_zE*9~Dmr*D=%V(I6bwPi&M zC#ehoZI={DFi-FPW)b6Uj{GDNI%@NX-M_roN%z0xKd)(=Hltz8-XRBC8zYkNVW^kW}& z03-L1*dwCh;$GdCI%ttb0{TZ8t1BuZ2{Uc(@S2i(qoPphLL4qh&{6gux1H%9W@`lu zl#pwzA+pBuG0 zG-1jIGHcA%B++RhHR>NcKa9Pw(PqpyQU9oRxA`7YsD0 z0AyD?gW-aDA}lCJQ9zKsyK-XQun!ZP>XN4RiWl`WB8h#z=dIx;fo~pdC$;V0(a*yg zF=B6f_nDIWq-PfQa=5?yw1*-$32J2nczHJWo!VBHv7q*|y*8CoMft<_0X|=3#@iwH z-{u~zm{V=z%bV}^WuS@Z%v~xRkx}XV=TWlnIm-c{&G=< z&#c2vyoTZAv?h~vLaKy980z~n$^G3^scC&1r)ngFlF;H)*uogrV(*C@Ln}cRi+pIy&#o^^vYdKW$V$Hh!oaLHNP}&IeTV))~w`$6Bi4j=9f# zo@lNhLe|7!0%ZKo;VqFZ{Q%Zo4cBfWb;JC^V+)WK!*cYgjF0_7Iok@xs-aVlNwrS^ zGvn1fD(I3@-?H)j2NAC%5P6;c`9C8xunu0TzOd4L29(+*+JU?*xv zvS9C(hKUb0RxLx3M$b=J`16WEQXs_g1-33fDtq}{!{w{p`gd5o7k-VM$6@L<(;F@e z0U%_gqn(AM%NsB#M0TtI46$x`%LmyVD@t1oM@lFW5_=|@u6=rJc6!KwZjxcp>l`zW z>COkj+@h*ANsn^}6hhNzDB+~l?ZEn{1AWrdoumv|$7k5Z#re4tBcrgy5BsO(1**)= zSvahy2yad9-yeQQ6Ml8Hwf(7xoLr$~wZyU^9vMnZknBH}j{gZkbwCpO87p9E0J0ARju@7-okt#2QmzN!dgM%arBr3I?l_R629)LzWU zzo3aVWIKbAN&SBYsOeRY?>i-EnA7(mAY}dI5eqjiVy}!|y-T9EkC8rUh5A&daNJ>L zF!H@mJ7d-9l{V@3Gj_oN+$uf|b2oV67P>Xe=aV-vUtL%eX^*DvT{-|Vz!SsHLL2@M zp)|90am~9yinQ$lL8V^3UUZ=rf>!mSzs-q84Vn(Xwz09vz(5+1no}PJp@o5^fw1^G zE(UH0(W{z|b8cp22w6E!zCgu-Xuj@GW(#oLbZ%Y;tY-FgIIXpC{3tG_5sl)zAm;7* zDRy&nS#KcE_3f*0ZtI0R0xJx1|Ch+KX@GxW_|Swh3iD0m%o1RlFpjiSGH?hfatX&A zuQfdh71*|#)*74R`)-6nO1F&Mn-cpaKYjZI`;oz^0sxZAaif=x`^^X}Va9o3O5(2* z%2)-?hNRfVeZW~^ZZ(!=C}JN4H3CD@PRz}8iHoN_D=p#{_$mPG~tj&0{MYaw40ndVOM9zG1ARfKAUpL z1ye(0bkA+8D?OngdF=6(mTc&onW6T;@87gSTe0swyg&4(n|^G~?Td2|HQ2xfIXD`1sNRNW-5D3`n3=0=kr;Q$zsf#cDI#-SNWM zVt|^^cWpH?S0KX&K6+Kg~$hxTZ zGHlslHk!Dd7O!_HTQpFywX3a9)o^a1jpR3lk4x>fZGThHL2Cyg9&@^DMP&2yO!}%{ zl-spq@GWLpoQrld25^Uek;#V|<5N=RaR$74t)BFt;5@W)Y*793S`mUTl(a2+xIK}8 zGiXlPz(Agi!e_SL?DDUza0^BT-_qiI*zT}hV0yltQ(Xr=TUzR!-a>z_uBb|QBXs)x zEoZ7IG$q}MR}MudARw5%KU+=yu0l{8wJYbhzA)ILc%7*yf%El<(E^e$hBcdFsqyv# ztv3al(HKRfxt#Er`8_vsuxR|mbO0r z4C*d$bcPIw5+?oAOv|BpdZM{lwnOJUV{^sJGX*$0j%tTtEn@tnFyLsGaN6JD*_hfx zpX8L`M_VheQ36aNH_N@`Y-fByp{1oQr+k$KgM-i9JeaL?u%~cE1|@{@d41T$@}a7mSqIbIzQZoGgWTf_XS;lQG#aYrqcK+ znZ?^nH(foAOiWCK-4CamvxjZnnI>=tSNnH8=KFyFMJ%hC>O(o&f`~X5BU1;j zB>nQL8!aNzfRKt}odHw|-QmN3Cay1(Bs-Rznxs`mqB>GYt%WqJ z{ytefEuA^780fuawr{NZM&?x%r@a<3wAlgTh&1S)%r>j!0|8qSdEo0Bu6LEYv9_Xf zsnWfn9hyza8P$^%U#z0WB+?3jwF8mk7F7H^)7k@4kNe68AT){NYa}c#|3ZgKCVj|a z-&jg`ij4iv!kUeBis{H)+_s_UT-}885&|U1HvDM51PqxkQA}^HYuS#{qE{IoY3t^T zaUmb!inKqlcXC#D*BGyR?Zh_NEwL)d%cJo4&m*%XFs=MBm(Ap{OFJ`( za-tk9%qhFkE+?0ITclP#Gx%a@*~nXK#aB9)U&H=<*<%k1Xu?HA>TWXIo@aBDGoT7+zY9O&cn4#&fAiY*hp3W26Sb%V&s|z*6uu<4BOi};io4E zNiY#}pv{A+I>mr8)n0?WPwu=|sbk7JCH3qt`&mu_@ENg{*nO^7oD`CNb+vBnG4Caa zFyH@FF=IHbD){h4pigFSg`ammm@u)jE@Eu-BNs=0Uh`aanD6xcYWO0kZXh#tCQ=PP z0~RtqBy_lzI{omuJ09rh=zuKN=&Lm5se2tKscTyC;FkzpiG&!Bh|tRFJMk3~$<;}B z>dTJ!e~Ty-J(M7?x03`1r`Z390Ni=93zW4KW2a0bq>vO z1oS(+W{~KxbSU*<2l+pj5N3bO#OxyEE-u?FYktRSv(01*FsX{_F zL}Bn3=qs6kp<}H@Fa(<}nK;u1vGG?_y$OrN>b4X+5xT zR6muFUTK=H4LFjng3V@XNw%qyqSe~uk=G%HjcQm46^|pmzqGo=2NCzXSg8&)pOc1_ zRy8p6Kd&#^NklyT{U9RxZv&oU?@E*&Qd#BF7u1K(te&w;#raCU&kOMJ=?*#>Y7HBv z5S$9VIX>Gfj>--BFLsl4?0VX_R6*5hGo$Uddva1uH&a6I%=69`9sOx)CuG(KpUG*d z5K(O15+584+jdwOZT)`x{Y)nHIt;-#SK{fZ zdWn{)HTOl4g+Jzf;0=-$Sd>@V9<8yEqCW3}W#)K;!eip}kH;-<)8(L3UmH8(4c^)gc7@d^&qs3oa zeyn+$T>tw&w>@xJYT=mV_7@i+MFI`4YH6roPE~n8d<2ZGM67RV_-EoGHIZZ+`#*{W zZsNueT;=Vp)X@1m5+PMX&QR}cJUmGUbF0vO(%sdg@PAk_S0ekocPOmOJlTUS;uKo2 zDIPT`zp|+%ruldihrE;Gl8lf`#;qJf+U|c7h(6G|buV~8RA6j6 zjfFFH$7iO{4UcW4P}aX?72w{&`Tm}>v;nl1&0@}`aXmGCU8vM%ZoBAuDG&VjE~s$` z6vvy6%QtTK1aVsHN+I&=8^}DIFI(xgshdQP^b7}-Gn#Jd!EtbKR2CcbDWVsU=$GiG zQbC|7ri-)b+^|7a{PVO1AQc;v92eOP>3^0pat{KMN7FPJDlJOkEOI>f{z#7Z(4YrL zaC2FF)ORr2jBO3%*U}K_d6YuuL-DE0rc(cTGE-ki8CTDc}ER*;?omo{Nf^d z`R#K1^>R%R+w|iYW6u@p)?}ii!1DTJNl4{3!BiS;iq|O9VVr|6qn?c^9%5n@l(-T$ z@Ws7&ni$CWJt0B-VKY!H=W8z4UH8LZ_sRPRFOI;%8A?X#Sd53%uTTfh{$h+lnNI&xcGPS$ z*^n=e-9^s;!Ynzis%m);KI%bPHeIOUX*HlE$tPi2MrAk zQahsZm+Y2!(uaJB8JX$!=3)_K^qquf1RvON$pk{VGxNz&xAX4gdpod``4s2wHQe3u$jTzM%+(AmhO32afz$B za?(jc>5p-9v=;aCjZt;qUnmd$KHc5>1ZVL%ZFoW{31cSycMBB()DW7O`qtdZPrytH z#gY64`bqwu?X1Ra)BRXtN^nS+^G8KV-@YjwOy=0k6iRcuAF9dTdzY6(&exiBLyrUI z%UG6l1yVROEfRW{*#lWRA}CQ@xzfh9WZD^FBXS$GtZmmh5ff%yME)q&^`UtMP3#<2 zEo)3VJDVn`QS_|s=M6rx?cC^HoMdcnX_1?$Vx8l6L=-q;x==GTQ{jr2PM0Fw+?0Hl z5)@B)BLiuP)DU`nT{~>B9c==;}K-Ec^b1>AjS)i3<MizP6O>Xc!TT!F- zGv>E3F&FVM8rX z@mHCAh&d@;p8wL;as)Y}|^RBN_>SG^0&-e%E=n zIa^~F&INgB3}EwQXIK3T4{K5S+iO+F2n-&3E6D@kI_Pg)GN!~DS~-euOsjF&_Dyu_ zUa5T*!5t(4oiBRda@)%E6#GJ~>S9+kxcc1nFInngKT55ca~y$U+DGpy|Cf70)356u zNUu`JK?uQkCTAn)h_ER>f_eM)tBMzKB;p*H3C+9?E7QRUXoq|0rlnY7uk7j8F6ZrK_4 zz50;}5c;bTM?AYy>;go=$6lFeLw&JPz>*~_7J6v%BTzhjRkVK~v(Niyo4gl6VcL@u z*~~)>+ztV}Y?a=9L4jR05?;OJGC@zUI#NQFK*fcUy{_6pl3_;cRl01eBQ9GFxu6We zknx5%v)qq=mWiHE3e0cSPSP5@zHv1c0E51+xggyg&V)cg#XB`)vbhhAI1J3pMNsH8 zQ`nnx-F1v5?v}WE@Opfw!Ru=qDitSR0$0rkszI29)YQ}gyp$lKL4I>T+n6z;RkN(I z-=2=&428a>-)ZET_E~P1+$HVa6B6yDTgagDi-&x1e8wv@`={A5x4CEW+i8&jLmo&=pIRi0L>__?h0Z(Yr-_dp*14 z@zwPr1NNux$r(3+9KTF%ql>Yc?68d+{L81v2{(JmSET|m;+>$(lprM}W5p}SGls<* z{;k7L(p%={=4R%`trjCmHqitu2DW^P9BTx(C}!N0SN4ApVQ;@nP;3aCo_2D(Y!9dz zgCal!U!W8vxqf&JDZ^$*<(vJ9qCdZ^gcK0@awm%f3^ginZqAHH9o6`SlI|AX2m6^; zS{CKUCn_~>TKr+FXfxIg;Mb71wvbz6RpoNaND&TGPbWN-!*g-;;^{=aB2~w;!_ENLmRXKnQxIu7D8I zl(=Gt$I0S)dS>QI-+AaQRdJGSOjaa)f+ zP_}8wIFDt%H=WeiFf2+HRpBdmBIx{!89&v~2l)7) z?L0qN$RJl?yr|MpJgeb!4uopjDEsX-^kcg-7C1i1jyOo1@3S`_v6}5xv68s3W{jqj z^|<)tO1E6IX!Jd2;{e#Q;66IZYPyOO?w48h5yuS?N6+VGiG%i>Y2}ay_8cSn& z5o^ad>11ko9w%xh+Hr7g`n$Z16Ia@CJqpNp+)V;;mn(Oex66dw{fD%NVUWr=bzC8m z3%JtI@E3_wHr2zJL?4&`Rpwil(kxR6ZHXw_bg68}E+t-aaxy7cVxgO6c$S`hBxrJ6 z&-A+99cen`Vl*S$F1f`kdfHMOxqL+cPalf7d&{E zmY$rhPrvw~fbl#U(PWo&!~{NuS<59??_!9i`{Lskd_wDie04I4Qa{?mYd1L+5NW_? zyF+Wx7W~L!(c(@f$F?nF@iy&Rm_>CnhM>{JX6~rTfP6{L+ua^~r7wk)DA+wT_~1f4 zC-;ypA1R#zxGSF0TmN8b+wOVRR!~^D&E{$Ez{X-Td`BO*J^u5SFlzaY(wt9zZxB>oux5Yg17}GQwd~dWACWntJeZRDHS^!BEI>d0|IB77RJKBALO}M z-FJVzh7yS(sDvP4haG{a=TXW8X&Bm>rI%R|-+OlwVXykz_UV&)eDvd&|F5X?jE1ZI z+Bnhs=uC(iy)zg@^fDntZxPW&@4^s+Fc?uXTJ+u}(V|7~UG$P5dMAk9-}!%e-s|&O zXPtGQ5BuKx`t7}?Z_ZP&3fJkz*3X{p*hil1WZJ*N_{e8Cmg$w{ckK0~i4 zhF_adlA9qH6u6zS2ny{O%og;5~5_?~BT z)^L_eiYOJBi$e)lJI+f5ms8U-LHo0)`UXaf-XK`<^=muWXx3f3}X+_6O37aj7So(uE7Z zmy39_X_V-;N9}p`uo+R9OX-2Gp5F7{sUX^a3@beF?(c3Asw+hqrfD@lnRN+42%6fk z?IwbFTwMm9Zos>ERSLYTOsEr`%){-8cMq*m0~L|Lx32}+E`O8`i&#$5NL%fqU$M_# zHmG6!*yl4U-yhIlPOGZHK1dP}E+g&$t%OesYJ;(0nk@qIEYoSMIv z4vl~Jn7u0-x|1rfLfdZt4eg}bWf4s?WcmK_%Pj%sg{xMbQjck3@l;BlW4dL=hf_s& zer#ps^XL^JcR3d2byPU+y!D7%5(3%1Tco>}q9Jb>?to+oo$Q;O5xXfyaEAs;9EP`E zGVI7yn+glFchXw7X)^FL0^>{5M^|kMUeKc)ll88>s6Fqx^|}`Jze%?yZC}t0Tb4tT zNsN`cooFS;!&*xJHec)CAH&wokZ8VE&p`sDc9HnVo>ya%MlPKk_MaV{`1!hcP=b$M zlI4xDVfk~Ck5f}q?9T!eISLcZ6HLoc)&&5l!)!oRjL%k+-Ck%9TSz!+r8A6VCof8n zn5Z1ISS{sPVv-4tCFnEAq$5^DUH4;Z2NVCJ;AhQ)5ULt|0vY^##SVKu6V;@nY@yo; z8<~pbpMs&xgt!etjnV$35cJWvVMMOlodpGvr6sPpSwY9G%IX_yTbUdR>Ux6QGNe1z zm7Y7UfE<3GD>`)(Zz@X$J(} z!90%xQuZcm`M=~X#O>E-pg-8^0Oz*xdG>9#hOB5BwS{pH!J>=HvwzT?48H@5g3E7N zQ~xl^pnHAX4}Zm)1z7jRlEq+djN_Oho_$w1Sz=rq<%=$)0$Hyc!*o``=MdbGOYp5J zLOL=sGMA1j+036OGwA**mM>yv0PsCDV{!pp7 z{MLxef444ggk?Phd5e&D-3&O001|WlDzfIuh0oMvizgzyU2^QA2(N^Z6LZdf4x>P( zgID75GSDtn5YiQ^7g8VV)JCzH{9e<2*Kfle7m~KIRvXZoa(G9zHG*CJBtx6|FYxC; zq|Rv`_>9$@!D~f`A&O{hr`oeIaFN{KTbrfvi`zwIfD7gdphPK2I<*BhX}}~#W0LO6 zSea7qc$EPPf6540QJ_c$L*18@F5U835JC_Pv%ClE**nYJsu)@dJ_#B6tbhDHpXFwT0ru52@Q z?7pqtGUZf9PnZNC5ewX|SvbhbLP)r9eN|EiUH(y+k{*mu^fv3#Op4%1=(xTkx}Ygx zlDjYmodukW_#GaX5}cs`$G67RIl&yG!^6YcQ%B1kp}9d@>+48DR{Zw-AwnlvZ>!U;<}qsLl*X=rzDAUu8K zDLi%<#dg7gtK=F6DPmls&aS|b#B0!5@=lJ$>+ARyCslBHTlbF=to-I!i?v<)1MpaP zQ+#3TsXyTNJN-bd)%Pw4yXaN=zgnwd55VKex_unwK@fY;?_{-SqcjsyUDuP9NW&}* zTvgMyz&pkK@Ns6=P&_<5up;V1zg4X#4?b%I=!1ucM=mxiVKos{8_?-Kg>BLk7Y|yD zYyR{{&iU((e9hBlZ0X61xMbGnvIHiYIryKkC4+$KcS?hQzpwgP(4utjG z$ zFQsQI1#)_)9ap#&6WyO$x1kd2A)x@e=8dtrPatiZf_uxfVt2vsCN(|0U1fLIP( zhocn!iJD4fvln&cMqfJiufXhxIu8tnh^CbL;vOKn%>>`h?NFS7HrIe(PGM8=DbQ{0 z`~QW~3#Dv!T_W(2ge5mCS6c zdmndXvGvpWCLKJJm3Z_ge-U<`PWs};=DAhb#wxZW$0ByE3_4jZxylWN4PMmm^%{9; zDa|>9HewJW^is-Fp@BUlX`}|En(zTSUUSqr4QodygOFu~$PtcK;3A#%S4&`%Y0eB4 zWwTneOK)R9g?x;}XdW3>(n@YL!d&ZoF9JKU;x_nl+?{H^S&&p4@ZG)i&8lpg!doAb z=p?=v$WI0bs+-QV75Mpbjn{Vq@E&v>M-fgwNlxMKtw}GM&D_p-+)DmDd|C{@s=S;{ z!)~E(0n;eRjQuqtIc2m-8;e^|(Di$!AYLE{+3qj$cr-6?TURR<#3^q#IJkX2^4@;> zc=B{E=g$;ZE1tt#SLuYOzm1lZOua-xSs8B&XQ;5C8@pb=d>1|@lx-&72DpG8Md+6& zGv2@`_nG1o1~-8}o(lkfxMJyOE9<4bzT`*E%HdVrps!>~*nXgYye!2Ftr56tA^Sj*$AOGr&}&yGQ~ zcU-;^p;cY6=l9*YW{o0NH2J=h9s-N(6pkS4F(_V#!D8dy%NW~Eoa?J|Rm89p#iuiF zT1QinlerGgOj?aZ;FQeYQ?C7T2ZsWD*aOQv)7JfR-U6WaOKZ+Z=Z?$E%i;UG8@DRa z$nkZSc8lh4jZf(k!JWklq)X2dRn}yeG%5;Nrh9C~k37zK8lBJR{C!3h$~xJ&mK|C^ zy7`>;BK9l<Rbt#6%Sk_evmt4L$CaFWrCzRGw58 zBpPo8XN_MkuS@Z|Uaqzs#E&L>ow~!W6-=&PNCdn(ggvZ)ZI=ca^&zP#e zzC6q-!>Xq$Mf%DV3pJ{i#F%kw&ORwUHiUXD7v#|^ba-_6+FI~KR9+xX6! z7~w7!K}WW&lK;DwlPv19r4Ery9ardmVjzEk=dOo70ItH&*tpUxiah#C&81nRrK-Bz z+WhU&?2exZUh&sQ6lPN=?o%w!)EHcq!aO$d|MhrP_&5sWRn@EgrN(DXd>$wJQD1NB zamSV6cR>ms`|TxM#(O9BHUb1mDEZ^;cK*kGQw-t>uiPB)?B5B$Tt%G2Q{1!|G?#1x zo>2CT3P^D@lvZa;h#P8N0ECSvo;Qo~Z>0Z87%8T!#=gtN^0&j*1S#NEQhB|5nkXguD$|czc>^ zT7QJZw5VFO_3IPa?cgGdC0)?HsP}^(yFhAIt;b*eqlZb+7T>Z9p;=n)lD?HgwjmuB zJqAW^&hYi>J1&rwK)}r$4{4`a7L$VNDRSHVxu?C0rr^l_V$$FJ`OL;%C|iubDJN~x zY2Ru7sm89tAU`+xS-`2W3JpHvF2C7~QQuQBw?ED5Ab_fcYwx#1B^z78llyG2S)k#~ z%sckhlxe`Ky2@)jR^E4o%Q@sn-~oDHC@3pbwLf(A7jcLgznRIAMV6cO5`3rCdc{iw zd1OML{Ev_H(Lb!?yzkRD6uxBZ$-|?s&kB6Ot&;e&7UqH(^cl5q>Va8`SzO$dWifBw zU2MBaeMqpgLXjrwLO0cYrkj|`v+Q2!(#*X^f4l5+VF7r%(_8KnS;T61@G+S$_Nr$?L0OEm-)P z2XY|W`)tCiR$|&FzUQN2a+?Q<{dqYu4Q<{|X2>q?%oHfUK%JdTNkvTz@|py)&x1lD zc&-wU%Sn{|7VV$N69c6CoX%)H>A1AA_JOptJst)IFBqJK)0TMekXq?m6sUsBm5PVn!VTyrPgF z0AAmr875@QJ6)8gq!^@hskhRbM>jID5{q&N zoY{Y7!Rdw1t=cv5`Rp5J(7;m!(D39|`9C#W9lk}vvY(_nvFT*{ULyE7pVoH!mL8i- z{l1LsKAt8}=3Y9zVgvRH?=n9AQlTtXok?;LP3li2^oITwQR+u?g4EB{uFZP8Y;Gm* z4n`N2@I5~HW7k)+Bp&cYefFX^gRkUcJn=s(-S@Yem@*z1-lucf*fq&UnJ4P-BkXiY zz(LG&`mMk8fp*ECN}iQy1>}+>JX-KoOIToyD;FZutCuF42>!%bfu&~0W+pdlYHH-$ zJjev*qFoe7T|KivQ~tdt>L>9vw|H$#p*46{>?K5raL50#KtOp|D6EM(Siym#mH|V7 z49>b+!BdOwF}6vv@g?a+Rs@(g9~OE2%GHJzcHvAgi8Jqv@3*T}V@H{Isd*<|NceK`*cUlyNm z$Hy6JD^nEPjP;L-k4KX=Idlz}Ry-b_?S5_}z8k2gC+1~jsW)rX2EPBgr*Z~QQBVa$jqdDGq$m}*69{uDI z2^jncA1EOmb$3UA&j>UNm#!}%F*M8dB`b6c3t2hv%?1wk3BA?(5#3whDf?Ep zrSS9Bz$=ZpS7w%6$JONMtFaX7YMkTOnn*khG&PT*IQ}r+U7vaJ(?a42!I2T;&X$0K z<6C>>Zs9KliCJ3DROu^zD;fpFX#~BHdl3;8N(ouvQXksBW9xJHeVr*b2nvbv+0RE@ zsT3JU1C@neOD~{JGRk(+n&w&&?@wD1H}Ppu>qx#|l&tMh4=S7D@bQ;!>!KweG)}=_ zTy$M%G?9=B?HKDa41fH2qrH0ACeY>x&X%q4(B3h8m#1@`{v>-|eAQM}-mD& zSI7BPp8#r|WZ1=GYH@R!iM8yXQx(2vzxibpq&J?Y(qI)dkUVngj+yH8s?^`{GjS;@ zV)tqJeCka{%dK!+apoNQdeGr-{FJ%M1g4%=?YDS6n-vW11Y+iy!ZBu5DF!_3c>bL{@NKz$>HgZ8Q4zzmgwvbjt+mHUHC`^BI)u> z6+q)S-@X+0)~8NU?=`GhUt6q%Su2L*c?0&T(hd07as8*xKEk`1(wdR>_Jrg7wb4A< zeGLUFG8{LS>lE+4$eVB3N(PuGhU>{W(`rA1y`5-79Kpk@qUi**#cL-d)71$@-vo?u zhWR1FaMXyIFw{_@Uw4JeZPW9^wBMI$S698egexWbYR2R?N7)#2^tNOF*Y^toCc&^1QY2F89rgV!1h&i)zau%t3 zd)LhWJE{F(-^VxXg692~03)=t3oD|F`zt!^0y+xjtXI_`omJXkJ09Ku+LY1$l`td; ztFd++VpDc~$m_rIz^fH>U3LS#!uTl|3@PV6Wd4x4&+iL~S1Rj_bT#>TynlP`J!NWb z&Vz-sZ*12^^r@4|s_}#x0{)UP&e6DOVKu-}`u*l>rm$Vth;>@2|rF*<433a1WN35;cYtPS! z)gd15&PrwB*F_eS_a3IJG-)-+-+K-X@^G}FbYrSkyk%XUW~!IsaU{Ai*=-v}#Tu51 zS8}37f=?C1@MK^>%jXynEzfa5(T~gQ4+yDBzomTk7xdj+_l<+*BF%f*C$unOdWGW! zrM-vOg zFe3pjoDHQnL;b_5I@sF3U{jN2R%d>zR~}>FV$|!y`;FBfw4Ra%hK*}WF1#cEDvxqC z&cO`gsd$@JgG|hXpY3}9VuGhX7ZiW{H3ok!WGO6}V~`pGg+>abP5R+O_UV^G8i5ag ze~H94GRi#@kILN~$9AMc<;|6BYe%(RYdbVo50>#N9e|Ex>|PA*sHzDkRugkf;e_?n zh_<0cVjkE8YHAu?@Xr~;{8bB+Ny-J9^&hKsi8f#SdA~(VPam}Rf!5{gAtu`he**XU zK+`4%v<6$Jn}yKGn)EFRYCAhpGS}!y$A$zIoXUrt`cw=4SS+Ck9-eXrbR5Lrpmg0^ z_o#V4(sjqC`xEx9%h5`;30TRzLX>FbT;EV;@j0x|;pxB7AwOcbemq67WE*{Bnr5`k zAkCMhQnIE}L_BCj)#?5c!m`)X1h5&4&HomGgk-Et_?>|RZ%C$JYkKPhJ134ws06oa zy=70uk!;YXG79mMNL3(Qxs)Hgi1)vj?Zzn&@tS-77B*mV{Fgk6@Ri%Q}P?kR!R~<d4{+L-PZ0!Bx;o9UtoJ zvmzg^6qUXEioT90-j+6O-IM}0MUgDxl8PDQu*zhF`f%gKlsfJgtxP~@RS4Qb zIS25dmXp^_zl7-xI}tm3ItYGG>C*+Pei&@OPEq+YQ*1jf0ToAEz9Tr!8!!$ki#!7h zx0mj?l=vQ!tRi;k${f+{dYyq!HOOk#iSR@94L3FO)M#4T%6R50j!>Y?U6CbbKZ9wB zhc^b+2!me5umf~m%8eYQnmK5ou$W0$Jpj*A6{PGJin98 zFxCj2dsDYK;#0;@dT&5#+!N)Oly{CC(Mckf%}n&{?)4xnh7JE~F)`zInIz@6QVtZy zZUx2l^f(vR&SchldFTs#=VjNv1rTj=Nr2ANog7;RYucPAj1kSaI2%f#* z%+O1}c94qT8CCq3(g~!t(tiS(Xen^FEX#=GBNGOOXTMEM<}m@{lzD0v71@7!N!S(h(n@~DpEZ?gBLB3e0iXLqA&G1x-FIha z?Ei(-#*@cC_qBPEpC3-v(mZBelAZ;emnYs1impo3D7^@f;Q;=pG(Z_)fncB@j6h_M zEKc)d@8^TFQ)7Hb(Q!EdG~IqCKwB&F|G$Sgl8ayl%>BR80OC(`3|&JR zgc$NOAwR+2GkZYC)DMTtT}~c~0C{CB-$*ZMi)icXYA5^uq*!w7l0j!3br~e8fPWL8 zYLdo|vJ$ecp$$3_S)_5u=IVji#WNnyyG4sx@6#1js+t@A_Y25g5<)MzIYjfqtBNp@ z>2W?=s*Au+aTu4iH~oX$5Cc)Ky=^od6eg