From d2c199da628eabd31053d502e7649f72b5ced68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 14 May 2020 00:41:29 +0300 Subject: [PATCH] Revise the text templating --- docs/en/Text-Templating.md | 116 +++++++++++++++++++--- docs/en/images/multiple-file-template.png | Bin 0 -> 35207 bytes 2 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 docs/en/images/multiple-file-template.png diff --git a/docs/en/Text-Templating.md b/docs/en/Text-Templating.md index e421f6a8c6..62ecaa6bd5 100644 --- a/docs/en/Text-Templating.md +++ b/docs/en/Text-Templating.md @@ -125,7 +125,9 @@ Configure(options => ## Rendering the Template -`ITemplateRenderer` service is used to render a template content. Example: +`ITemplateRenderer` service is used to render a template content. + +### Example: Rendering a Simple Template ````csharp public class HelloDemo : ITransientDependency @@ -165,11 +167,11 @@ Hello John :) ### Anonymous Model -While it is suggested to create model classes for the templates, it would be practical (and possible) to use an anonymous object for simple cases: +While it is suggested to create model classes for the templates, it would be practical (and possible) to use anonymous objects for simple cases: ````csharp var result = await _templateRenderer.RenderAsync( - "Hello", //the template name + "Hello", new { Name = "John" @@ -179,25 +181,115 @@ var result = await _templateRenderer.RenderAsync( In this case, we haven't created a model class, but created an anonymous object as the model. -### PascalCase vs CamelCase +### PascalCase vs camelCase + +PascalCase property names (like `UserName`) is used as camelCase (like `userName`) in the templates. + +## Localization + +It is possible to localize a template content based on the current culture. There are two types of localization options described in the following sections. + +### Inline localization + +Inline localization uses the [localization system](Localization.md) to localize texts inside templates. + +#### Example: Reset Password Link + +Assuming you need to send an email to a user to reset her/his password. Here, the template content: + +```` +{{L "ResetMyPassword"}} +```` + +`L` function is used to localize the given key based on the current user culture. You need to define the `ResetMyPassword` key inside your localization file: + +````json +"ResetMyPassword": "Click here to reset your password" +```` + +You also need to declare the localization resource to be used with this template, inside your template definition provider class: + +````csharp +context.Add( + new TemplateDefinition( + "PasswordReset", //Template name + typeof(DemoResource) //LOCALIZATION RESOURCE + ).WithVirtualFilePath( + "/Demos/PasswordReset/PasswordReset.tpl", //template content path + isInlineLocalized: true + ) +); +```` + +That's all. When you render this template like that: + +````csharp +var result = await _templateRenderer.RenderAsync( + "PasswordReset", //the template name + new PasswordResetModel + { + Link = "https://abp.io/example-link?userId=123&token=ABC" + } +); +```` + +You will see the localized result: -PascalCase property names (like `UserName`) is used as camelCase (like `userName`) in the template as a convention. +````csharp +Click here to reset your password +```` +> If you define the [default localization resource](Localization.md) for your application, then no need to declare the resource type for the template definition. +### Multiple Contents Localization +Instead of a single template that uses the localization system to localize the template, you may want to create different template files for each language. It can be needed if the template should be completely different for a specific culture rather than simple text localizations. +#### Example: Welcome Email +Assuming that you want to send a welcome email to your users, but want to define a completely different template based on the user culture. +First, create a folder and put your templates inside it, like `en.tpl`, `tr.tpl`... one for each culture you support: +![multiple-file-template](D:\Github\abp\docs\en\images\multiple-file-template.png) +Then add your template definition in the template definition provider class: +````csharp +context.Add( + new TemplateDefinition( + name: "WelcomeEmail", + defaultCultureName: "en" + ) + .WithVirtualFilePath( + "/Demos/WelcomeEmail/Templates", //template content folder + isInlineLocalized: false + ) +); +```` +* Set **default culture name**, so it fallbacks to the default culture if there is no template for the desired culture. +* Specify **the template folder** rather than a single template file. +* Set `isInlineLocalized` to `false` for this case. +That's all, you can render the template for the current culture: +````csharp +var result = await _templateRenderer.RenderAsync("WelcomeEmail"); +```` +> Skipped the modal for this example to keep it simple, but you can use models as just explained before. +### Specify the Culture +`ITemplateRenderer` service uses the current culture (`CultureInfo.CurrentUICulture`) if not specified. If you need, you can specify the culture as the `cultureName` parameter: +````csharp +var result = await _templateRenderer.RenderAsync( + "WelcomeEmail", + cultureName: "en" +); +```` @@ -251,13 +343,7 @@ An inline localized text template is using only one content resource, and it is Example Inline Localized Text Template content: ```html -

{{L "PasswordReset"}}

- -

{{L "PasswordResetInfoInEmail"}}

- -
- {{L "ResetMyPassword"}} -
+{{L "ResetMyPassword"}} ``` #### Multiple Content Localization @@ -396,6 +482,12 @@ When one template is registered, it is easy to render and get the result with `I `globalContext` = TODO + + + + + + ## Template Content Provider When you want to get your stored template content you can use `ITemplateContentProvider`. diff --git a/docs/en/images/multiple-file-template.png b/docs/en/images/multiple-file-template.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e7327301a0bb1edb9c5fd6202650556d996004 GIT binary patch literal 35207 zcmZ^Kb8uu$*zbw6**MwQ#>TcbwzaWsbHm-(ww;Y_XJgy8jXUpG_p7@9+^Ie_RWo&- z?&;J0^z*~~QIHcyfWv_U002Q!;)fCdfa!uR0$6a+C$cCf#Gtn?_7a*-0Pq##gB>vDU(~FL0RUb;B|^jbrFk>~Ia2-tB5ii3uOgZnzws{C87c-DNKW*H@a+MGSzYl939F3c~hiqM@q zlK>UHZ-01=-Z5){;c5!il6K~B!!?#xC&G7e+&fs2dFY;w@8PU+7NX4A1F7#l5dg|z;W zzO)L4DhqbB^^I`yJA0==+%Q_4d!#xhd2U!5$D3LaobYno>x=BMPu8F60&Yz4*54Vb z)hvfM1o$H@PQN!$;5z=p^}I}J;wSl?N+*0)=!~%%l>S8&yQreAr6xC*n2xS8J&~K6 z+xa~G?|mi{jZ$wR1Yn?2oE_bvR(4U(7|-z(j3A%x#_)XOUY?s?3D{pWIqt3uc41Ts zC~TbjTqtUPw!C{B%9CTYi^<{=bvRjB-IqSy?uSkI2_Igq^-+l4@3Yu7ZNbx7Bu^G$ z@C9i9nn3h(T^By+Q5O)HDe>uUW%P<3Mj?Io;OJs3V~L;qNnPUC?b#Mc#mT**mTJH4 z8Gn5d`PNO`_m)ZyGjXu-BsSx>2FrSBFXbV>A4AA#{7`$?KC8^)#5Ud_6krsmJ{+!0{$m%z zJHwYCbqi9A6q_}|0{qNC&X;J-$LTcW3L3V1OUsjarB<^Pp6b*0Rz;_~y!&dIFT3^c z>OSx3kLuR)F#-{3U_W0b)7g9fK&-UxG@4@81(-&|TheuKQ|9#mY%Ib2%DK|SmH&bdOVD@N`MH31N-t%Am?d%` z4^Pi9X30Zof`G{2eYHP%$vd7SaMM{v<-RwjXkb_rEX&UCljUWK$7%rv445y_L#X@I zS@e~0K({_LtKwl^VoyewMn2n|E_7fTH#D7s2h1E*3GFWUJ&vapG6Zq19U>j$G`uYx zxRf_iYz$Sg`$DK!YhN(z0fN$zG|nrxEO{bJ>-G>cfIr!+1N;$?t;4+1t5A68eKBq1YrHx6*K<3=D~ zjF8PkJthP@mGXD@>b^(~_zUM{Sr+=Dk>z?&BEcOJ^J6^M?z4WX&hd*Lw+nK36u3Vx z!^iM7Jbom<^~B6bpf?%fOR!y)LW0f)esUfg>K6A_gT-S-S>(!CreD_U{rR8io@+ny zMF@a1i1$$?;afDKg5Sv@#IhwH!1-eW&rUsFg&~8p8wogJi9Y97#^ts=n?g3@t~bTw z%TiES{|GzKLc+P96O=~*1dTo>M6M$r&s3R@vLN^(zYIBP-vK%Qq&e@F|5V^DY%y&5 zo$6xB?=X4vnlor40x@i*n{N(afJW!EbT;;-4XI;F=aFjlm=UF1A`SP($;qihn~6*E zsE+C9UqegEdlFkk`DkQx{A$#(=nDv-HL17Dk4p0xl>JkIOL)NK)x4J`nyUA9iW@(bKPHBpWalS zIJ-6CMA8rFE9vlf)h=7iojC+n{9v!s)x}YaMRR*|RzBY6eyA1VpJ-_yf8@sH;6W#g zlx&KJ^A>I)J**q-8pCc=*dv^%cY@;nXUtsqQ&Lt|Qrz~4M2cAl3qqJo`Hh_PReRjU z2(kT<>B66A_*An{Xx20e>1wa$2%qDN4#cL`CYJ^}? zcn&W9jr(evXvN}}e&5y;zncA+3`E}b8Vg?5L``I-jz0B6beGTD{zE=-_kzVxX z9;hOrpimR@r1N@Am(^pqw4#srBWZacTJdx?PlN;7h<-5}#Xw*<_Cq*+XOf|)EUlC0ETPKe` zD|LD*xxS&HX^Y|BWd)bnDtaAj;j8amoK1lLIQrJ!xa5C{-r`d3iXXoUGt^z80K8|C629YjXdTAAgrh zz?YSsqGs6gsW)0LU0*~zl5KeiEzU}tbzsCSit?vw$%T9R@lCv35qi@`xh3RT-{6?v zb0xwp1jA7OVE-PcsKD*T$#a%4y3yBOvGEkn=U_MWFe`>|vne=nWlt&{@jMzkn8;gu&m{zBg=KC7b zA$>g#L$&2BFumK(+a58ZaPj(0>(`CXetlJYP$hh|Ty;p5p^)ag`9LaujY!8_-^}H~ z{}Er+&{`o=%2JkoB4u2=au79%J8QKv`e$eCJl(C(bj0}BOyG5!!FFnH*@$;_jD%jX z?Q&>6*_e5GUSyMy>O{cNJBR0e0>T{kU)kP@oT=~aTmGglE4|m`q1Ud7XmD_-Z@5b~ z#u*zsoxLMv;Up(;zyc<$`uY9Q+J*7{QCMT z9#pp~^(U>_^2IE#b!*g#*=)tg{ zv$mj0(PobJpGoaZ8by$u!0tfuI-HxI50yMc{QLX3sqEEJ2~YWnJ5!nE{CC{k6cM8z zU01H||3>T{bz(=1hng;^zClIeqxD$QE@*jQDdfpe@U*>F7nt@BflUzbWu|81JMCP) zK}T=*4FK@Te`rnH)Gt09{td9Een0JX(|)kb9HdV=ikh~xWFG6n=|`xz z%H^}~qzULj^W2XQF+KDR1;a?J(ihs9cW<7WMy1xgIhXqGh1*H|bM@H{Vo4n(NLKIOdGmI)>-jbBJ0;!wWnZ$enVj1;qsN5^dqs-2_sQ${>%@q$ zDCUk)wBDGdf{NM#JGSh~No`!*D0gKnQA66wjU{e$RrWFuA@`3$K{Qv=`)~MCjG0Th zN+156aj8{fV76mDzv7s9Lkc9djruR06cqIITK#S*arvLwlew(d2a%ElIFw+4EvDKo zDh{5es=^K|U3>O%{au^O{?@L(wO)%kqRG+rgx>V1+nEAms1y2o3~ETdVwoags zpn{`mjgh_@|DxGRAT+Ty+K&ze05OrH?QroT%@CM5)X$fF!REs=ZX0Qv(GK>n9|0Hl zs@7yeK5H(2l2!{~K}w zAEbqaiHWAu{)dVmzXV7xbLi+MmL`w7RBe2yWfH3N9-huu@;Pj`Muz>R9vdlZ z-%cUN z!S6QfTOB7nNmSx7!Ht{mB>q#1YIU86BC-5x$|&7OROK?MT2<1=45|Ne)-R39%cc48 z(_No?3yU$Tvzq!9^d8qypmF%~tKSqa;)dSzNh|qV`X^ z=l9t;aFDfY5|@lNtY(-hZ5V!H5ZcIa#9(#X6zdevZtM3Pj_5O4goG6#I+o2IqvZC> z4F|V|9_$*|9sdvsFAL<6tz>h|u=(*F+S#w-jQ|UQJHWijP(rD4(FmMk!Ie5a9o@K% zG`mk2eq1Z^cu*HImmOJ{(u+RH$w?t&;P8ukl$?gN{M`sHTaGF2 z%9?>%FnKT)pc9=j^{%R2=Xz{;>*`l1xAJ+h%#Hr~S`4r? z_k1T#Yo&QAb=Rt|mYG@fhAvjth4_^VL0^JM5W5ky1BXm3zuk{NDs;U<3q4t0=t>@RzL{QEn=M(?Zc5AT+nB|s_0x$0hKwfT1Sm&F40?|9$?B?F>DCCNVk{k7 zoFSr`m9{nLtgZ(rC4sa(T1brYrrNz zCK%wdD^!Dob8`|grQG$Np;X3>7Mwc3sz)eJ-*$>mM=apQG&IP=JbXQfN%Bb~?&+au zt9CN@TdUXkJcM<}TjsM(rur6iB%FWR zo98qBCC}PVtZds8%roLvhbqpf?TLf3_Q4lK$2A&S+UaTUz>W(}a9u6cBF5GzEOW2d zN7Ig6$<^y;gTLgBuCi>k^s8&OY&l~1X+9W^J78Nyo2g=Pg2-eeGrM#$1jVgv#S-|@ zBpM~|NeJRJ`b)D@562Wg=@%y_)v3@omcEr%R$AGd_dA6%hw^rPq)s0`4Ctt(a=ufH zJKM=^wtPmQUL~w&!&JTL&&Lg3?uH4XKaFJ&mwK_|OI8wNaachcxm=|7R}9>$O{jdt zErvzv+-1NJwlE8ZQ6eczyT2OJl4aDZqh3n}wvmDf-x}-DOWE`w5 z&{2jH&f!^vmUKFL9tvffCEJmFJkb}TE;ZW5X07#wM)M$MzTPpOiV%9I=n_wEcU1qL$yx6jvwPXEG!NVU+2l*!fmi802EEF4#}6y zK={i}6?p7s+_>5;d6x|XfSBr9bh^%lx54;Vx-N=gux_s<vipR?1= zR~tXqWvhs;$%Spi>3E787B@e8&QH133W!P%uEF9V&zGgW;(52pzw^bH?<5ZMX8-gQ zt^bTOIrx}O{+ZZ#z0XdjAyjKdN#nF%t~FEPnfz67c^dvgPO#!j-In#Ym2L{`Px+4D zyVlE!cDbIydm0f;xi7;c0`L85QqY^2lKpMmcA**4Il@EA%fjJNHjm?8w-W-EVfBZ{ zrUmE$SH1>pYCLrnHg=KkHE?oz&9aG_#XI7ltD0z)D=G?A9w(~KH$ZnTsg73tzHBuL z*VJ5RRFFiK*m)2@1tfyZ2foR+jxviV(JGcxrq35aBU;iKE*nun1NUihGYhmPCi@_k zR#S8Nf0|}$YN}%k-VhzHC)spbw(gky-Q7)$RN+KL(wR-V>pp8b&^?yVW^XrZq**=HLUh%gDOR${M zA0gUp(uGQ<<~YgYEs?b|J`MqOJHyGI7W`BvKyV4C|v|%+%wNS z9TnsC6#Pn6PA+zGhIyU1@-f7b(S;KBTe$XRAwh6{I<+AfyEcuYy+bx_XYFiMERfUK z8J)-L^iTU%OlMZq+d=&jgKPF8hzZrFTF^?()+sYDqaLTOYmr89o?6KY zVxdh%r#s!E)(S`WqO|2?>)m0INV1g#sz3P|k8_2#^vtHZrT-Lq0a+3n;s<}HQt8|u zGYRf=mFW@+$vpZ;B`JKq?nQN)#Ff91T$rGpu%nIew(VO$>SdAXFqK0jVa(~{+27bHr zzA|yuSq%PECAy3GQr*s{^R{2cz=HGn=Q*W`4I2Auu-a}lTl@OBYVg;I}<5z zw#(D$5`y1+A-wBFORN1c+=epkg1UNY+#SKcTUG}Ez^^=&KL$bwHA@t1)UdX%e>z(cfXnGZ^i}RLQ77tPc2FYv2&YY6a=KD8Ir|x z^^Q|;McTA#DjEO1xoK0E?}ZOigTg+sR1zrvlZ6y!1cihQz@%`fsHnbQ<%FYo_6BnH zmu$_UqjyMMNBI?iVAOw%UP~fwn3JXoA-(|5*xwB@QGh}^J-?Sua zqAAg%k}c3jM%VXB?b*d z{KsSgXlZ~p-pNT?Ow3dzzC;`}nQ#EMD5w@hvkY!6Et$5au0jbQ5(NLUH;%;0zU6b~ zHP=gto*?FS0~_;KXj4T~;W>vzn~I7cBTF(cI(qVE|DUq5avL=QNgS;BxC}Zy@ls_& zHyQ8+4{^1pCwB4>1yWH_u~dor+}Z|gctI^PKR-}7SD{qvLh<&Bi^22jcMY_(m57w) z1elbT@pB$qLqE*iV7ir=u7@l|zBF5eKw4klJ_cp)9I}JJWx{@b_h9d8Fy&Cl8txz7 zlp_n_e($k<)$vk74&ek6fyv2>Vc%#20t1ymV^Su7V1_463ga|^Ru0KJ!^#vSK|#V{ zW#r@x>e1K7!ohT_FDPIoA;A-^2@AU+7J=65%*e>h^op)Xop#d8*s>;u`1SS@^+X^A z5umTuL#mr9z-4rJ%GA>CyL;HqyQJhF_wqFBHCgsy;6~Mpx-6sBJlJJ>iRo8#!lQ>X z`iOJ2*6Tsy3Uf~uiIx{ak^OX<9C(-xpRgN}_qCN4L04Bd+xw;_G&FQ%E;11tgnCFu zsIAAKMclT7GJe=~cA2wkIp4t&5?&@GlouB6v*J`XG`N7oL7$hq9!5|ac5`rGPao&b ztom{~S5M#Ws;MC-j@-{@97BpEGrmvVq6*|BBtEhlCVLG_>)GfX8M0F&Lip!0KYF67 zfctmY`N>;Rn4eS`C+?Vnt2}=i52m;ZFI>JjM&wg{b~DxU?6#P?SokVNDt&d1mG@7! z5)88P$L$b$o~E`e{4RRn;661`KHrNgH;SR2DW!$-=uq5|P;Ux*8 zPY({XR8@WMPuLQrf{Fa|G%Qcp5JLlrBt%7_!Ux7iMoLRcjJ;fN+#M$en;wB2)|Z>} zh?ZgT|ckqB@+n%Q$M^q%LoV+-JfkIr;XoH;bZ$!z9NDXVV(F}AFNJv-ud7R1#F&JHX+ zq&A;@Yuc-GICRIfG;T*W4lWg#=))w;1d7^5 z{9u$b264l(j$^w^Nf}T1Y_?eb5y^4@v?tTU%S?(n)vc zxGR|_M?oInlP{u3JS^8C=^;dkgv`o_?b4k_b{(1Et*ou*PVWK1IKljBZ}0ZZ3_LJo zjBs*f*tPY-`S}LRyDXFsI%3x-@7s8{(3Y?8o)D2egM&y->-C0K!Vcj_^M!Q*bN#jCO_UT4ZWmBPn(7=Xni6T*hO` z1fgtJ?&16VM_TS8W=33pxPUu4cIUHtFXoUo<%|B&B+Tn4$*OPL{w^Jbwpw~eJ( zEjvt*symy%bnnsIDK8qVcChUFzg_^CTMI$dG=1E1J9Zm}&UHE~0mJPwOiCvU0QgQY z$x9*iGQtCsh6fE#c+_nG_)j%lnm5Wi^#qe)n+;&x{wbsM1 zCNc(ygjWWs?(lvt=PI$|PdC9k4Q#xhxr0fWi88D_z0BEr(bB^Kg64x!_>OyRkG_8v zm2a;0oT~rK{EtDveSb9Z{q?c$uWcj|Dr_&u(cv{VZEyrEBFn$ul&L)u8>X)(2%eBa z6%`el6|VV!kiS^I0ahf)kZ{Zj-=}~ss#tL7L^P0}+`+%0H)Vg3OpQj#@a`_pXUcJ% zS_o0;EZ+4>uV|ou^*ZKdbF)_?|9Fd`T1dFsdH7VSx1m|Sf%H0x0L8hS0_Kw#F{FTnlEEzLXnbwTARp%Ov5i!tytL5ZauCXBFan#$_N}FP+@6=w1{e8Zv%p0CA3Jrr#x{Zu&2xTj56 zb+AMPS*fJ_s2T(?YFM+}Gn<```%NNgpxV=5q2h2;QqeK6xZ}e*8#h&a0P*7?AncAz zGY};uK=D>Rx}jX2*Q;Y%rWVpRU+fV=|5;X}_U)KBiiGN4v*Sts@m>ToG8cU6`$}Ct zpQqwGH89e9)s8y1AePd2&!(|Si1S8>XMLQ%S8+5)Af z;o)BgQ!^4he8|uUUuz(M-p0!^Hd|*a z4lw*BUR+w9&Qj*X;i}nR|0uY`Cp`Iod{_9_X#2`i{VHVSLD1LBiwp>#z3g!!f5SYCFpv##B_ z=24`9#dusNulC?n3uo`NrQ1f=;Jn+=b&6S`DUgQfuOaCHk{VqT!S{O4?F$tRlpw)` z&u&2-LT(NwNzNP@!X#JK!vDp8fqA{wF#o#g@#6Fk{(I-wbV%f8cde$O{pmUU*Z0@T z;;^Cihxal~updq%gnE^m*^=6)F6JSa(nJZsY^%I}%?72)cm2Eul> zUg>^^uV6>qG}Hq|a>X;<`;L9Ry(%=S-ft~Yo9W{RwY9Yq4m9F4I1>H~FDHW`+zlHtsP3M^YtII`vwfLR;3cj0JBC8?GvO;z8IV7LwBa7U6e}y} zZqV z1+zD@3e3X>9K&!--MJuuDMskZiMXKL)Ww5#9GRx3CN`#<3<-)6mML>84i1h4s&nhZ)CL{h zBhQm9E4Boxpf*<9{e7kQJtr7%v^~f9e1<7x;Uhj5IZZ!yy{weX4zKgW?DmKrxvR{5 z;9oA@qwgu1UpUgnfsn9pzse6wJJoV9PPuK}`tsB;Mvi}8Ae)yy`{wfL!BXoBw^UWK z<$2&6U*(hkX}YSGGK?O?EQ`B}u^ut~r^)O}C1n^z)mn?`L}mzXdY>pVq)hX)41h%w z|4{vM^B7g>i0Af-NRqrA%VH+JObj$EMir@~h{$k)HIv--w<0x~a+v#@%x-Z4Rb~h7LU+UhV+#X|vm#1bCFmaRFWjs8kceWI7yVto#F-UaQF`c6V1E()pxgit zAWD=fR4V;}Tp*rLprhb>EIe%(4V(TqmBIH6B{=r8KWVR@B`|Hxd)G3;;&{J0*$*I!W7VE+(?wuUI;C?O)*}@ePV3GK-+ML|%TztTZh3E+^b-=3{O@RC8Bq>|hUM^Ank*c~E`g+>L$zjJab!hhq0wGOmtYY7oP zBQBWsni1|W+$wFl#b=PxawX}`AQW2PW z+If64fDRng->2Epc51Vrno3ELv}48{%aj!&`$9r)TYOD(G`bQ$$Et$2+MH+Td}qJf zIMK*^KJ<>g;2V3A5tPZSJb&-Rc2ARe)89yV&2NiZ0JRUB0_Sm@MaZvofY`Vl%Z7cp z&(RxyNKUY(*cbZpJ@5|ztl7Wss;fs}3Cwr!1>5#q*8Bk!lAR1LZJ|VzH8rcD@kYA5 zt=+8B8rhrVkjQL@xnCC%vBg!Fau0>)-tO18$3BF3A!QQP8$W!$0p`#)N@EkIR_3Ge zV2Up0x6waUtB^&ks_-QjAd}}3^ImGX0f2e8dXl4L^rg+-dA!i9I$;a?>1lp{8m*|I zsjPJCG36G>p_g25f-!T;pjy{@dYw?_=*vu(Z4s!{Ol2|orKe4Rs_HTJ$31`uH+&ZH zVx5|G@lciK7o(bS#)pqM@wAd=6&OI(>259_m{QUK4UpMNy}5|EOxHUI*|eH|Z}YzS zp~WSK@biQAsN-)9RlMmrso@RXm~AHv1>eTcGG?m#&j5FX_w3KTbn^Tqm*k|%XGX5B z&Qp9Ust+#DX-mcwbj` zCXW>gDj15&A_wH%1js><9UUX5;8#FEFL?A%97yoa$jEU%;TAq;f`c(D5Nkk_l9)J8 z%IBY-zk6EUrKqGdv$pmof#i$^2^K41ZDvM^5iUv+D?!%FIHu325GN!w?L*MQ`gV5cKPMi%4h$F=y0KB0A!leLbTjqD4dX7*OoN@Y@tkYa*i@KVnP-c7M7NpL802;A6C=Z zZQ@1<L3;o4G8bRzpvBDBT|D!qAQ8RT+Sfe+eEVg; znIacb-)G~2PH7~YQm7TPgM%iKuBXkiu4*>^3U2C;fxF%|bYjWczkjb*?KljuUQWuT z-{0N{g4LCXke{BPJ-obb-P^0AH+!E;TjDbrJwT4k{|u9*_aAl1HqURF2ERV=V{-?rOL(``}%&U>-j_y9hIrtd3kvWxM$)-ia9`J%IWFqehd-% z5%7B#G&ZW`PcJMkanJFS>sFvZ42Q0WkCga@<`1 zQkgg2Ls#th5@tK|6(8>ApqD0CxJqF-Ffh>b$*@UAO|4OQ+SX28MFk5!+4AqAVlB+uk?DpY_05Q!(F zzWkGnZ2C%YdN~YX-tzG{eLLWC-UH|E+BYb3c1RC7wU@zg5i6eW5nf$$k`ry2u!7+1D3>O z()Z?&)y=a6OhMkpjf6U@p-OvrKrUV{YiGa&Tu{VdC%5@jD>^qkR3n?qRbv6eVt~nc zJ0Vw?9YN6HtoZ%elN10%(AmA$Vu)aH0M@-rPQ1;zmDvaZ^iNdJd=W4~a3HY9{dxcs zG($}`ujDK&xBREV$am29_xD^J3Z*JlRaJF%jNVW7l$6DHcXvxmOI;r?v}|k*+6R3I zbE*x&CaMcyJ~m+f6F3b=@5v!yvlBxUy0o}AGp)(u9w1kqmwXzR-@X+CXFUd9B$sy4 zwZ_f9xUzRMh#K>l)!pReK<{v7e^9D&d<#RE3|fT%mY~KmK6}$loHV{2GZn|VL`|Qv zf47tt>5Jp+s5ccMt3H^UUUCu*!QKsJ{`(+JdIhWf@o=KA3Gtlkwmd^k~cu zV>VdG0I087_-vMU3zgdPS-i{nFb$+?YHGT=SvJ|_Wo4kYGRT7r>0obP+&}=ApG1l z55vgGk-OY_?5Te?n(XxZ&Eon@+cO%y@l4vHf`BcHx;cE9mFoO-!XO3Ul#cV_du{y; z0TcYS^5Eq+QZQU8kVy${R*fgt_VGa&T89e;XG|B+J$&c`1_;#{OjbwDWolf%7N%ju z%QVs&zhdqViWk{-0RWzGr{8T>xTp&tn*IU1)T(cI)Y9J%_mBWp9lb@#_qmZhj)NxH zw)$u~W|=U8|JobIj}V&l?olZj{?B-o^ud?k(zq+4qd_qcPx|BO-ZM=GruOnexr6$H z{4S*W*MOm1I=c%9jcPYqbGe+%z5j^q5)z*!qN0lF(Qj^RYiVn9XmNv52QfmT!7%3N znyFAWEX-QcG*b1bpNt?|gY8r@x^WYXvud(gG8N>EzFp^gNsq4!xkYfHO;2h1O&G1h zYc~-w;4ieUq@}fFn%^|Hz;SX19t+uRGADQ#w^l!cD*`j{O%+lSq|~^JJ|3DB98znq z$Z2_K#jc2+m`s8L=2hP-&25qTHT0A$^lLQn=)=#E323Ca-Bio#yt7i_H*kAtf)4CK4qu(+ z{;OeKqrvO*;tX&)?Cgn{AIX{vYg?hvGsHm%$PCxqW7mBY=QNTa#pBr0JEuv9{^{x|f`bFHcwTPYZnfHT zST?+XfHzQ5U5yD#u;33)a`SMCNj0*TN(B?BYgfj=ecv-P?nY7B(6Z}C5h}Y#O}j4( zojIWri&6KH>C@nbe#~kVEN4X|YRwLjBkS*u=c=tHfXd1pd2*vC;M4YbgWtQoD5=A# zOJP@3XK^p1eVccPoNA$Q$; zJMDn?bIrxDKl-;%SLB*p4KfrQzI=uAK3oH|~P4h+lc!#OQ3sMd#WnrbOp^K1CC z!)boA%teM_v_52j=uh6A@Z9RZ*r8)v9q2%kd~`z2?&N{mjH0<9OygwccklD%%pX?+ zvQVL}=M06*o{U)Qp9tum%mgj-3fkK0>XekfLyeM?5))NHCzuZfYyjCvde+xOsl<3E zD}sWb8|UpVSbc+%ILQ9sz;B3yajb~Z-L8!XuNoW}|22rN{$Lw#(*etuo+T;r-)|%^ z)3u#%v`_$Y1U{GR#2$u$X`#W^lZVjJ{-c`?hd;H?;^Sd2zvkPZ(m`$zG=jv-kI;s! zcY6BjTa2UXvnQuF`S4`^&A+=UA>H|#L9lx834kE#Ni(6Zy^qy)S}@(}gc^ju*&Mp( z=z_>1Poi+0oX5rExURI`t8wb~kP$PGE)?kT+JxVcn)I*0>i2T(`0;)6B5(1AOAQL} zCML6xz3KS&?$KtMAbl;TE!X6S)!_cuNcbjzkPxKN2v!UDzDeaT zz`BCXLVILwJVvf?GcT>iZp3uDtm=`EdjdobCYCegY(p$li`pQ4j`W)!p{y$Qxc}5q zYe>b}T1aCjSip>sc2ctHfO8mxxp zqD#+8VZsO`j&kAxobqSP8(HZ1iS-tL<^ z_GRbZNs zV`rq-yuQq-!P9bq0ZO##*{lGpkC7t2bn*1kZaL9E@`|$}otW|*QlhzQH;ZNeI1vNG zjXAHPBG{T6I)PO|!8zMc5Y*xED#zT&$noBYvS&wUogtaUGEcWjPrZ;@=LAWHHKDG- zbnJ?!tXgm^qc&AFha&zLxG;iSB#A&38l5)R^F&&8xlHbLO>7o*nbt>>WzHDLQgxN7 zFlCf@0ze|p8N~e(Ug!~Dzpns%p^K*s4agvH#x^+piX4d&k` z$SJdOEmNuZsvw33xj~?|*rnZd@6HbZ%@dlpGg0_XRYSJ#+gslP|47A4UK19o7ZQ_^ z84rZ*gKDxzDiQFQ?_j_2BQ1(^w`#FPWr_2dwB1OxyQg^T734CNuMaT^_hdC&ua`MS zrIQFGavi%B-^7o}K|}oh{rlNChq}AF``Q(ehVLP%zrUiiE;lfWqmoai2ssnA>uog` z0Re>M$v}q?!KO?0ar@<`j|ZW2ZC>~jal)B3^@C=L?|K# zZ_}I6WWxxiR|NOVv}jKB1POPk7gj?;3ALNPtLtL~A8T<`OhR^*vTGj$dZM0aUj&UD z*M>UVUE`9$V8*N^_#aj~XInhiB4#wzeB(EKd?5QEsU!;s-yQzdyuDhpKn?U2aTNTL zD@MX*Hoo2&ARw4YUoPhf>^}<1uQr}zA(PyJ#t$>Z3ba@#O)Pd3k*&&yO#gO1et4@s z4oAY19J1s1oCVo(>^t8xr=h2%%0bq>`7J6*vOs#lcTcs$t*;D=ZRm6Uk)!k9V%LW> z>ffNO4*Y7DEl&G*yUMGSVkr)LdPSzgoYmzFF9 z0pBM}N2sNT^w;T?dDpRO0iL*He#4$(>5y}Gua6qTtrkRrowZW&q=3A~<487i6cm(j z3_52ww^Jod!2btw0Bx@H>r}>jL?qmrah~+6ew7fUwm*?RW2$7YMDZ;6&!ArynIDl+ z_Fo;nkmqO1*|>u!(Sc_1acl$iPQOQxR%TvF8!0d0Lcpg6`fF#9VtkzY_b#z=W%k0K z61_ID;azw%mS6!?yeR71M~8#o7|(q|YHX#oITbLf*-mCt!af;Q+_-)LwG z(-;E+D4~s$`$^;F53Q`gYfMndN(8%ee%@idTn<`^kV078{<}IdEQ0o=NiNWIExxz7 zaY3dC9u0zjc6A_&P3ux;VcMjcAJ2<_Frh=S*g_xny!(t>wuD&hf;i$6%kXqo&PCF0 zFaY4dp$Wf@1b`PY6V-ApO`VOT?l@K}7pnNkJa{i{0ZNgc<8-H*h_bLa-b#@iLLCO$ z(JG=>-?#f!QgEGf(X&?@8mIx%?P*skbJnrJK?(|rhYM`D;NW1Lf*N6_nU!xrP2_b0 z<1vaeczKfl!5<51YcX7NTlIF;O;wDgZY z_(`x#FO(BY_F7wzum_M}g{8wcHO4{;Ayes55$#ilZmul79L$xpoN}zP_WQk^Pn3%y zJkDzUmv{3Mq2s@FIUmmyO7ltZg2*7DBNQ54G)^xIMX*%;0q}|F$?w||hW)_p> zsx3Z4CiY=dTSwz4P=SbNGyeCxymU5b=D?RDC=9!lp+VX$K@ZCIa}6x;QB@(_3(T}$go ze<)H1@818aei(#E$URr}Qu{L+BGSxcl1Y_Xt5qF8D?8hrn8UJ{>@&h=L{>{*%S$}y zd65F2j*KZb5q7a;&eO-`xFLY%T#);{rVR`I(}19>EtZTi5l_Xj*~k6%z$`9kOv-6z z9vm@z!^A`^Ket6RS+lHj5gZO$fYoy5))fK(+!6UnMC8tjSc(~FWI_J)!^h7Z(p2V0 z{PdX9dz`Hm9+K1{U(TfIaXpb?r_UFg)rgj_n?8LU5H35 zF&s_cn=Eq)&R6b^P4OoR3cQY4b4xM8h%@6)Uz<}|Q-&vs+2Gz^USX%wRkz_ZZ8c|Y zc7Ia^p6?vn4Hbg{Tb1O`0|;8ASJoht5Q0gnOCdHm8Yu!**oI!jG65bq7zIQRH&cN`EnW5isSP;P zz;16mF~WBYS`bae!g5MrU`mL`gF;86pih^h$%-VyiJe_aqliWAlJmsiuc_%$6Ljt1 zKY3XFvjuhNIxa5GYv~OM90U}RH=2LhnkEo0l8EKFy%{lLeO#zjYUus6$b}_$M-F0dP%fB!Z*4|Wx;Dj3EX62*MNT1dejZ6mj zz{72i6CR2wI!o_5W|w-3kK{1uW@0G2N}qFGuL`fZyaC}79eJ+6S5{-UI# zV|{0UA$9x!1iVwmb+jKiH=*w%jc*{uSbim&7&HXKZWK`$$6;qCGpFXR=2?{q%tIUafnCnI{ghWL1_9K-R=nk_|O7koIw zfhfpmDES!H7_G{OMLj>|a<;D+-;rSgZBfog%RHfw94gZ=I+L2*&XH|CNAqCZLnxI=jn;toc zOj27LH-M3YgJZK?{#VYFMlj{Os1=oX1UKry)t-pIKI{ilkfeFU} zWO^MOJiNQ>q3ktMHUc1qmEr)c2MGtBDg@UVEA!XP5w}M$@i9Op;?|g*p$C^zC{r5G?Vk~p}WSPy}yT_8GkCf+D4GJjZ|A(-* zjEdunz6A?!+}$k@2oNN=ySr`|O?WtF5I4^jvyFay9-*OUsHtk^b2EOnbg96$i_makb{Mk;UUu8PZxU zsq=XVn?F^2t;^~(w3s3^ zhx2889JCP7;~|P%l>PS~cAA%dlWT&|HlgB|E+m69<@CDR?G{gKCHp(sNh}>c(IVn zL^99527l$2MU^Dn`G1cRyRnqR{?CVu3XyDGoy@5H0`L-(7}`t9`XcyNOSnb1g|^efwk-N z0ali|KbtkX9*@oc9=z_B#t{j=Kco6MpEY*6d4G($4DKcND&8UWF&p2$loh>qJg@ah zk3>vaOO8>s6YkaOH68)l`azFg^)rp!)T}=6zXv z93;Frsgw1lae)n%cJep}ci0Vmw70L8&C0j=bmvp0V>gvPr=o3RDZpU$DxskZuNUzDGvD2FRou9Mvs7N*(N!8w( zTOEYEb6Z(IF}l8rpgR1I2bcFf`6d=lL)~tvk^f^_@x$Mgba5?^<^V!)&?KP2O|AWUM!Ex^oqJDbNgqwq& z%=&Fo=837tRWsauJ(_uQuOulVX9CNwff)`|?dSXSjR$v?fzg)-Q^Zc!=cR z&0;r7tby9q(fk%ohYCQmGkk1>LbOMoSr5c785Q!ObHqW(-Zqp!J-6Qx(g9?q+qbG4 z^SFtp57nFWOU?ENcQZ8l_|3nx3?rws!Mz~(z+&&qJOoe@f#-API{1wGL3aruxU_r` zasF20v!Smu?CgBDmUzh063eE$&W}ZYR7>LX^a&M;)@1E&4ocyomgkMO6vT?p8Z6iT z%a%@_ZaWS+q_GUJcsOTF=6`9xB`xaEtSgzfYH;J?R&1|LZhxvikUUK&fJ@V1%3WloB}dNZ5-D?hd>qWhzRfey zqlbI~I!97FohsH)f$+X2W4)QmZxR^VFOYSE2Lg1+p4ne~<`z2lLXgv*4)xwDbTk?P zAU~P_?+4RLlm&(1HvnJ^QAtR`z%^W{ZM~dNacTRS^=x>R*i!hZHA&?&?5#r38~s!0 zVe%&4#45#Y^l#;nmdivL$Iok01dNuX2$n-MRdA-X%drPhDNl!|>C1QY8{Wq|bYJ$W zeLC?V05Vl3pMxJZCu0HjnXW#;rZYuV-tDD5tIuzQ6P%SD?p?`lS!0y*-Y;7`o%=fB z5h!e{i$03ZtcmnQ%XM|jnTTG`19k>*zt{FN&>~PQr~A$7%@R+ zBmJa$by48r2=&6g{A0JiN~0AmF2=kjM1f3&*jjk*ubYZcLRJXldA^h*_L?|BOAe~o zZNdy}WBJo=0_wsGK&D-psB|_{@Qtv;$0>l@Vdjx0E6e+>yYwOH9DdO<(d%K0z+^jq z33b(N!P*k%g5gpXOP%M}3D3`%HBB8wg0CV4a!VW>5UAMqv-N)=Pi~r*LYvrpMXc+G zztJTeR+c$rPGZa-xYSCwqmwoLlp)WH505HD#(Np3_BkWHnI-=7!tgr1?Ku5=?nJ=j zuCWkvBrL(Q)61#ilgCOvO=c#4!Qbn_cJ{^vy|&vB)Ol!9cUs9CLM^{;m(${98vfhJWyGS-_0o+WclxiPrERkTPtK(%T!`mP9ay&#|Xn#_0p{yN~)KTy~0x0}z%vMdPkFRE@sO}i;? zJPd>O{08gSn%D#W%pjIO%*j-68j>`TpsmNrDT%O@b2K=CcW#lW%JFzsRIPk=(%L^; zSmV%{+AZqA%*#M&1OaH=Tk9So7Gji(IAn+Pgar|$+n zizC-S*ZGE?$SU?vE#;pskf6B&H9rq=3VLr=9cW|`xxCq2L>4! z_!lF$;gfo?m%jfD<+Q!KVl#Ci(Bw9fxIE9Qx5a2@e$+g)-?|(EPL7bG#||+I0W{5s zW+~N>xXR%gaqchV)cmS2KyDXD{JFU!gt%FpM}Z|g04&exDrsSs!wc;WHET6h6y|mW zp#!uc;_hEeD=JDG>n-CyePZQPh5^ba^wpI1FQEWMa^|BcZ3mOseusP_3WcGu`9EX` zp0&-eGs(u8r6Nx9fSiRsat2cXoAvYY>d*@+hR?-;fo4z`wyNst%k2k-*OYcw zN6ph@N@&E5Pty2$x(EJv((e8X{bD5F*19zQ$mk0n9N4!f z|Bx8``1lA$8y$EOyU6(?r^^y(gCPLO7!tWliUzyRg3`M_-C=TR$q3arDmoY(e8St#`c&b*Q^U+Q-uihAo93JLUXAgPcbXO5AY z;Md5ms~s0}a!#Sm#p)_@+F(ph=hA`0s-~MensZrHzJoF@QnYkVh*L;VHoN<9x(3er zH#{)m^yq+y6D7m-Ax+IlvR1PIcJ=wM92@uQ`^obloBtUdTKu2)(!8-l-ETBa{kj(D zRKC^=vF%-njn1+S)T-6HUU`>GY}t&5?(K(?IUD|`_1vGN08q*z@3H?!t7T4O;-%;8 z;`<3XI>rh;wyJ51&}+~1!&s+*jNQD({7L{1la|bTS=Fm+hqzvD*CfBd7+Br)`v@OD zK`&#^VB3HC?Z4gz2q;+I*UR46*w_PdWQr*NEbKC!C-s$Tx2*AJH?3;x=)KHtsiBnF z@r-U&Xh~`P#6;sb3@mB#a#Mb&A7<{&TxCz|zaVsP@mttaq<)x<|>5C4B8ZRdW1D|q&!5KQlUvDS}F@;*Z zG>)$9Dhp;PU)_upjBQP|xnXz!uSESb2nk~Ijj<~0&xCI;=G5qbn^RE5j8#45EZCH9tno-|Dy@1iyMNA_0Zfy-st~aL30&g~NCpJF)Qa z4D6lk(i=72cS)U0zc|S^;^@j1#=q5)oLZLrr3i&|`sKcJ*YBJzN$RtZvBT1RQK+OR zUVQOKL13dT?+Xy)@xX)lqVvu>Nl-F#V#pF%K`5ZBn#fvikS~spgL$-Gd;0sqhvNp4 zO!D-v`GXw(7t{1?PazVH^TH4~nin+mE;L;8cgHOno>Fa2ubxO#gNe^>Tki^p6W2Gf zOui>;mzlz%a%3Ni^GcAr03guMQGhPYu< zoTKD*Kg;!z>5%nZ=Whe}(gp(Awg*Ww^_23XJCFAs_5~g$b8Ps%UuNW-2E0{1-d-zq z7G9s6lmI#Wn^V3&GKp=^L(`CorfUzctPk=G-iI>`8M?UgL%Cp$?T418gk>TBZ5Gb~ zuU^akT2hwYe2?g;>qUFoFCy(r@DnZI&wlFt^5I>6GX)G-8o1w89_?7JKX;s$3*dx} zM4U5=`0YFvE9HSJO-xc!m-l*j3bv)!Ujhs?)n7Bdu!yd2Daa;UxL#bgiE=r&r0ssa zSl24R=jsdG8rC;YaX090h}-WG>GxE1rh`G7YqVk0R`G5MDj3jb?bd6u7;At5j;not_5~-~KtEV`C|{pz@A-QdOAoDzdG8&;C25H? zqf7+rqB^O?e)LF~O(b$2!2;U!`NfT$3f z7*a0;hP!EyQlQi2w}m|b@MZt3TAAG=k~4|a)qI2NV{eZacd(RL2n*Io+qE$0lO8U!`%iUP`$Pu4!!|aG`7?r!^vduMWwufZE*iVm-H&l7=wG+Ol~-N zQsdqW*Z{8OSe(7zWWCi~Z|15!<}c;P<%PIE!^6`y;9AL(VZt-(%5 zXqJsQps=G9=F!Bl1aM>JO$#+oo!5YYlbGt?Uh98E?6g{5R($%VCxySonmJavYcxOr zStvU_lN!oAw!p_}1OcnLZg@Hn6NHj(Z{+VVv9S`NVDiZh$RkNa2v)z81UA`7i7A&E(1c?;ZO8JNx{<64UI1O3OoT z`FacGWi7I)-!b`Hkd)zufjEDh>R3gvVsSVwk}#BI9O0hDlC$C!O3 ztk^fT%DpEBBqk?PDn^(84)~78!lsgjUG@B}{`DA}eXjB~#Ce2WuK`OuJ4hK_Z*H4oloHlwqO+|0p(>PJ z-1>$Gs8#Q&W3CfRfaX_hw_g&r!~0Yc#fG=fdrHD11Wy^&(hAdEhZqTp=D7sdsy4C(CXB zsIIQ=M$^)^`X@d&TQr$5Hw=08Ik_O6M$y9mOZ>7EGPglT@utfP4+@#o*L( z0)_Jm6#=v$--(k}-V9f&@n8}fa2qx<3GZXa%g;|VG^BZmrf+$hsDh z`>O4*sXx=K-W@&)>ry0;;#ezpMk(!!-X43twQ?}s3}K2Ok%z%vEs%Qu=!M%iF$b~n z>gwFhA!b=w*IiWy=xaZg|GlWyW?|BXK*)o)S$o?+?O304)J4G))4Z>!{Ut}43@9p1 zm4XdQA8(Tw$hq>040xFJNpoB8=O@!sogz9l4NfBoY{&RGBH_`Azfj|*m3cp1pXkYv zXo(IdU=}GHM`)g9D-%jDct1`}2OPL}V*+w3q?l4xCSLNz8%xH|M#n+icz zo^^U(>e*QX#)V3aZwG!JC}+zxh6^<=^rPrn(WH-CI}H$GJ%4G=)8^au#}2$V`W2;I z`0skW8WS$ujYQ^?(@Z0~^iy7L`3Z}Al_`uF4xFnolCb&AP+`Jz-=6Of2XI5>Rr)jG z+k6w}mqGrMpNCYqv_ymd&Fmnlz!J_~I}m!IiG0$naHbsl2*fCS01jvY5Z=JC+Ue{NQJC&&;DFBPjo|pV4o$IO-GxLD|kC@*ga_(qJe7DX~^85$AMdQ@mmP7WKg)6}Wgx;B1eN_>S0;T#WB>9FkB z5+ff@PP2UA)h3IdOM8d^JWW>+iNs_eb76iMCjm<6eKJd4KD82{TLn! zjUNhn|5IcPPByr?v_GLnBRp8G*HCmmKvlIjZccQvW1p`7t?zTc*PydonhMD8-m~`t z=MuE;h7v;;4_Rq*zsJTdxUBG5yMT-V7I^;_i|ix8xh)4y7{Io!3hE}5b>!;?x&Nl) zA`p4T6e#Ovb}nhXXW--6Y;PGm!MR(X|ENMd!s;C|c8EnW<(M{TF(_-=V{X@&8 z=#Iec#9AZzUTUy@$0hwu9N+4op?4A{M%9AP zM>}u3C6wJGo3x;YQu#js5Z#;gO7=MR=TyeFVI#yl*|o@y>O-Yq|lIo1b%b?#L+4la6qi3xPM zGrJ<6{lB#UMWj%hR{@o2JoIrpT-lNL3{^fguU%Zr$kMvBQ5%!v6;-0#>IF#%0!E!x%*{pN1f!HQdq)qU%b8woe5&Q`VANkTEbYl8Bq) zZ6$?;w~h0MMr5RdQo`Um^$u3?^&Ug^65#^fmaLRhW6&6CM~dSp-nKqr|c4O4}mA&sl!6 z7~>++SvM9@oH!bhl1#@0k0^^OVfCpr>t&oTBCg@VhZ%tr31te{ej&3JwQf5rGQq5D ztasmyovVK)_P^CBlZIAYqQc|YB^{~3U)B~C+FYp>YtsGY@aHLT7u~ya|lzr_QxCI5bf45dxCAvke>^MeR5Bvp1N*)X)^9h`N>Na6vXpGtB7 z+ho0TKUENmPgGOy)+~4y@FfGiqGP5Cg7XXRHvO!H6QvSWmK0u2J3j#95)N8u(xMIz z44nCs`IG5iGQ)^%EuqIZ4{Zp#bT|-A5n_3LtJ6*8dOM)-YS2TW2oI(G?kOnOm~41D zrNoZB5q^b4fsjiE^6x_QTtS^c%%uhKGJ)DAAtYoF+9qMzgF$)E0t=~?Y?7!*@FfeA zceL%u2nLw_oV1q~7_@#kL<}8hI_LrPB~7lG(c4^%kHmvtW%K6$nXpvIhZwo~qFnM; zO__bIt0*EvfTRfro3Dc=9EuP){?W_ z)Z4nrqL<@stl5fQikG^_j^Retfx%NkX>Z;AA!TJG|GRLSM5eNj?9nyav$6yw4YVpX!fx z-QOx2u~n5b&yL+gi(#lBxoGakiw~1WW3@GopRhpgwop|;4d=;f|GqoUSq9D1mS?5Qwasl&BZk zJz&bLkD2!o0k|CO4x=f|7K1H1teTu6wRU8m?)rMV%mPQ6M=AjTp%kb5t1S%)d!p5K zgMC*%$U?E6+Q`bM(x1l{1HQFTg;IN{%6-lo4JW2v>QC+2#qwv3S0YJf^1JM zPjwPtU{bw~1DdA>bsn!8BNcdpX@h{I}pd_$ORdW=*t?oEF~7601fhoV`T}9>otCP;QFYoZ(B1#EwW9C z+t!rFg258f45pFP-4qi-b4|p3+zHI)+H6eA1$PKqdj9@%NA4=t?6t@Bq<)#(Ma-lE z?N^O{0LVvu6V?Is11IfZ}rJ*^6R-%Bj8> zJg@P?+eB_$rb`y;y{|mTQ|`+nwh$d9ZT&y&NOf|G$)Wy;D8vMxQQrqF74n2w$TaX+ zzGlx3SFury(0gUbem?B|)<_fcWO7fezAiR{%!X6MP2h)ss5WtAwD@=VSTyuXguYyj5W)?u$HtdT{Ks1X+n=7L5_>QhQvBVHh(f^txwUtdDHY* z+RY=|(_$9pq#}weN@x}l$8VK+@~pWydsT##;(<f`QD`xAtRE&{q>0Wxg<8Nw%Mg2nRf4%3 z8EFfQpYfF2cD>M4$=fgh7t43hxNP&(XeeYmjv^csYWqt{3r!R{ zUxw1ZDKhkr-_qDKx2_ZQRkZkZPE#Fp=lX$?kcPKsdR9e@m7@pUGzr50W|IuT(K|MF z+YB=}_YnTmH^Y?=e|WO!*ZE&cl;Qrg+Fqx*1i7Ed!dgX>$fSA;sN_Occ{rs@6f;Y^ z&>Kq|Hlpf_m-Kbp3uAx9v6M+VB7;Mrp>e!y32y$)Kd$;Au)F}SoLb!8M*DGDA51CfOaw_XKK95`@i(40;c;x8ZEDaXqeEgU&Le;=R` zq>3O2s}uu2HBv80Pyc#5$8rkg2sESao;=%ZSLqWHpLy`b}vHJx3>1fNt$}xJx7crxc?$PXdZLDMkj*J zkE|u;()UYXVO=grC?M=Re$|9!;}S24&19}PqXrS7Znkl}kPlVR7k`l9p!p8$exM0! zW|p*kmf8=qU#_JaZw@6BE;)?K+oXY1$a*MrwxL~Hks94xdA0blTS0WV<4>HCkPzsi z)oY6=LTJsx5CABg77HOf*Iz3?;KGpeQ>buSHL*X)GXx63P}gQh5bKvd$tICe-B;&e`@eEa!pBc1;)zLL@bbNw$PF=6zTw1eCg1`F4y11^$Yy8`7f zve1#EZ5aIubvOnKz;~x9TR9sE#TWM0pr zGtMNi3*I=yS6T`sd~VO;^3ry0RyV(HsD3IeDqLk*XVqVQP9^|MIU{$hRUkPi*(CIt z{5RjIVHHwJEc0#bd?K~rAsG3{e@JE-cbRmkVuM%yT{qT00svy$mgS$c;1Jua>rZA& zgi9p)j~0REaSGUQ~#%)ccoVd41hyDn3tIPS$8iD1S1l zC_~V95Jj&N2E^p&OgvKhM(v0C%a96P$Na6W?rjMf%Z}JnGk3cG;y`g%ti8O+HaxXZ zDZCIG7Bg+>{^C!0EX~Xv*N(9t^5R1jl#~Gy@cx@uuF(3EX0!iMpP>@%4q~diTt?b3#zxR@3F#KTTZ5o`B`9G?xpUI{MQZ>J zEH*JZMCE8moS`VW4PO}GW2V?m%1SLjR_DW%B4{B((P*-=cjsZEG#^d9mH^2om@VkiZ$TRmsf;uOe%> z#rsL5JjIm)IQ}pW{*o-(6Ay2Y;6k{|^c9SdPpT1LPf{zLmhze;ez7Vd54e&P;>~MU zn`>b8y5xx}%*4?}V)E53IxKJN6TtiLy0UnCXrdJ#Q*SE~biz5lDY%`-H*^W!?l6ah4KiTx1dn|pv*yI z3jfoU6CV?E%HVoALE1ZeulVtcd&D;1T*)qxk$U^6eQ5Pd54?NV8Csg2l^X19zAdY^ z2>xCY&;@Uav1hTa+V%}t^?n}~Q_B#AVGd)g@ZX97EkUaze52?G13>h<>7oE*V~i)~ z$IcN1Uis`y!lu>kVrcQ&&Amr+pKU*NUDs*)G%fvdCIUyOSmdIPvQoH(ey;N^BhFbK3iy;>`wKp@R6Lm(;(ai1Y?T9~!C_ zI6R~@x001fN;LHNL0Xg~ho)RLDm!P7RKPB=fp?YiO1TJRY59^G60P^odeo00WS?m)vP^+ACP`(s)@ z!zLfNF0lQK?uYHi|NI#gTHn2G=L#)EehHD(-(PLbkChK;D{XvaL_;tc^~J*XXYz-& zjm5{^%WEF9PKBpD*|o`k#1VA`TXil$A~9d59eymE9Gt0D&(6S_p(( zAUA)c?4(*u1OR?9jv~{cqPl)X(K6o(@dK!N9!j|<#J_X;<$aV>$AQE*trr3fIiucs z885C2;E-v-dzf5q^&%o7G9#t&J{|Xl$S~lHm`4kvfl-1uDqA86rE(EcZeg)c(emT1 z3(R(m)JjI z8OrDX*?-rIQDM_F$aZq{j+FnfWKnmu4>|3j-xBlRSSyM_qN22qwZ*@5 zpvXc;$uKoLO1jE_D+kjACRkT~6~+5vf^+j;sM0)T=l#*m@btQ-1#drm4rUS6%ndP& z)RHM&1hYsZ?ytd=-g-(2g-(m9gbeOl`VIAD({W=K;+h|#R#Efi0(B4oEQZy}j1OlB zyf;Auz}I^IFIIgFqypDi{v91=mIY*I3|uzu>1+TP7MNXF_;`ERVCsCmPG-&nI|8ho zbGv=vjG~XHix-rt5XNCtNuezhFUw9RWxO-_2!2{ehE&RhOpIdnWAY1B`hiVQ4=Vp#`w2LRwwR_~}I;J>{{)Lc7PWewi=*-E3OWG?wvx_kU_3=Vyj+Gl~fq8}HD z6s9l4NOHs*91wtOgUQ5ldq#nW(B$7+h!RmFYQjWJTu7h-yVW^qO3KSVu9pq;NC%eY zEw2IqElKQpr%O33;OmftgQZ^IBnE(_NHTH+RR4~wro^ILG^Fv#tiQW=O&@W{t?FHy zJJBNo*U9PVTCo6{?ZVlL_9-+Voe-B$^gvWsY(L#g8*5sMdd|5@J3^R(%SZ|6zRaIm z?MMA8N1Yk>~Az{`Fm)rvzSR#iIBu_Fef$Js~ z$;frOc!zGELDa3d+;9JG#I6{g+jR}e1jcw~+GxWe2N4}j$t86hWUL*?@?5kpHAJeI zx8`3jJ~RUe|K#o@0ND}IC|%kdY$q zHmBp~{Ydmg$H#k!>28n`Rf_$|PV_o+j>6ZRc)IEhK8GxlB%xTUIn&`cu*vTFtdxZo z)#GKUCU8YN`+I+ z;X{4g9p*JAgF}koa54>P2M^EnY!RpXNWZ_+%4J_2Z2~M%mqK{})=ptdf#*hP(2S_>x}WNeP9=q${CvrJvp?=;yq~NJB_$r+Y<(}{q5#U2CXRI-5n)5tlT>OROP`YR|5ud1+`WUs>Siv(baXxcV^dbj*9z zP=Lb5?MNKSf~BBRxkgoa2&wnt1!~*X0HK^5jR~VU9E5Dxh!Ln6y+|0O>ql<{&j>{7 zI9q)l81yF_zQZc{^ro(lB?c|xnp(B4IYw#as{H6D2FHxA-B?xmQ>Fc1L{TcT!LR z_e^toVlP+UK9+S=s~?i({;0k_;*z$s>_>A5=(T12gi-z^!Wj&jX!|j+R_NcD^}@d~ z0u-)|2-JK(AB6|wZTxtRyF_y%KF@2Txp#hb2U!_(FK*qG0_E_R#tF>c-MdOB_h&Aw zg(VNXY^nO*7a=lyNLK5;op)PuP$Mz~{zgQqI6uPe+|9wt%;ovzQ?OBgJXX8YkU`n- zm)+(4z$}Aici)RWAD_mG(fZugyL0~~qh}x0>IkDZ6M@dV%!#c%AP1$P?X_o>Fy!NY zpYCMIvmtju+vLw4l}gQP@u|mor@;ASQM6CT_@MBQ47)8Aj-Ltf)>dFCTHJYO$4mX{ zgpGh;$HUAjeWTY+mwy4W{Ev*^k5@UC9yXfhjQ!86*NdY4=Njuz=ZdU|i>1?DMmD2O z?K$uD3~4?-vg*gwEftt*>rW%mOwSoAZ2C zjExUy1rzw_hy@f?jqT30eFSBrqSZhD3oZ99Efm?)Xa7cBq)~3Yv`ry^2uvzARujmP zkW>g1GS*xqP*N^lW79uOenBN;fe;vjudap)DRkGcF1}|0fVP=7ml<(>BgN-f`N^DD zr=Q|Ltc^Kcjr(X?A`Yx8@ck6~=VTDA>ae2GaSW0DT%0E=6tG!sv%X#9v222QMqKo{Kc0t1~={=T>v z>5bSRD=g9>@&5DM0|S356p#oHjhDFNMG`ED&&jD39ni(8w>GC#*DAftHB)8K2?d9+ z;r&8fyR_;i6}6MDPGcydO3rN(hw$x^pY@D+MJv&gGyvSFZ+T6;teDD2&U#QPtMUsv z_ya&J_?@Q#x9X> zwX(X4VO>0CO$1Px%UZ~dRxow&rtClfe=L=S6Cj{a)Xu))=TaiIdD#3pX?m8@rMan7 zojSwJ@+8~L4J+Ew$dQlEEgDWSfAec4$)3oBL909T|ADP$n$#>U=g(V_v*pMy$Js6u~RwXCi3VI{UC zzX)R!V0<KEE9O>Qo$eKUoj+yQuiu z(ZS8{6*=e?xjCS)pQd(xI^2RlG~exGAh?WXKjjmO+*Q>_KhdUGrYVfUoJ&=w_NMs< zM!0Sl>cG8PrhZ5-z4#VQA1QR~mYsB1y$d!v5~X7IuWE$vymB*9^P4vMcN@_-#N`6+ zPL{R++s>NSKSv*#O#f;OK%b*oHy$vkem>Dk^9h$v z=lw{)|2QLL-5+lpzgK32bD#7TMtgjHeFb;ht{GOR&&7!@lm1Q8)^=s5fs0E3voW zG{t?rg|DFA*;<;@`LyH>$z|Ok==t(%N?CP7_sM}66&pK0^RR7$Pb#xl(Q6sU!yuCn z$C78o{dJ+BW=$;5IZnotKW(+42mUe*EA{R_1PnSVCLBvfYiq83`6v1l3tnU453IYe z5JcUsg9_T`w?7jf&iyV6YEOKU1a0~oH6|k`$H(Kxv`Sb|5S@cZ_A5l*oeF5&?>87+ zes+_YpQ<|NCft@#M$+NmhlM3Hg{1?xZGXsJVh6(pH;O zF*U|#&09k~@cI_6UIagQgY9DP;Md|q_eg}Z8nobFqV@WpmOG&@`@dzuBJO(hKZWZt z7p1)_14^p>O9+URFqeFS*VB+n+S{_l}%=`~~sVuMhPfX6|5vM1Z84v25G2u3ci|wtWt`D0R&gnBz4$aKtF(%|!fr z&(xL7fRadAb?k3lJ68831 zXSln}44cUG(A>42{YqJ46vh93q%hazifXObG3q#R*Ek_>4mlk2bE(z1H= zuV?2=IHZ**s!8m0@++UbmW$y?LSca}6L;)-k0++G2lZx602l}Fwsa-4dfRG~%+E6d z$tf1wF(549v+r|JLCxd6!Lm6J+sKP{0BhnI=x|bH`M~9w{zVlhZK|lzfe8}OKWXUn zk?L?8t~+9VVV@zluwQ7QzWe3$0l!exkNU&b#JJdIXz*KqAJv z`H7Ig_tm-j-}>OlBa53tVhzR=Oj9jKthzxhvY4jfNNh>$tzrP#?y;FlQ)|P3bS)rg zL9ruTJ>XuOv=8CSk{m}FkcTm4XmSRfhjAD$s4Dx}(C)Zv~xv97vd zl@vrBXcR?I%dnV%8YZRgFb`Xs0R!log#X4k`-bdHAXNSD(XpLKaPw?lU8s`A3%Q6+tC}LMSU8STj3rZqC-&;+BpO z5v~SJP|Cm$2r~0h@S|6=Cll*KfHz!H)(!2|wY>Y={gR1=Nly6{uuUB~wnhT7Ik9p6 zWbbK9pH$?6e94YO12qGP0N*%802E~hi{MuXd75;~4mN@n+8=gszLGuw1bdb$-$iu36rIw+mx#Wutn84!&9S{+@e zA>8C!x90`6bhTYgg~T0mQd~dZqGS@CzHxx)kAz=hE^aQaNujPAJ2VZw}8fk$)Yy?;SU5_&NBW9~lB>u>>^- zGH!5JdG6bOV;CQkH}bzM zd`)##r!Uq4%E;K1qVP1K z$OeRMi^QgK%+V+U%6c4#AsQ8h;JX*C!G`|V&$%iK0DyLGTlw3X{p}eaQB(T3>u>C@ z0|2^Z{o*BC51WP1)SIrmIyFKG0D`0Fqxb$e(YPff>4xjB@$LBJuOjuRTdyCM6ngBN zhgN?4>&{k)8#Hg)D3uHcfac=WKmNAEgQ8>ae0<8t?2t(A!RMcAsoebevVF-TZtBZ! z{$^z{!vg@skC`!jXbb>=r|Iuyf9xu41ptU0^uVO-9osi154bulLJ9tcWk3G0x4{k) z5@*K6kOmY*Gcqz}&AP8|-@Zq5;gpCN4u%+Q_F%{wC~zzS2!azl6Y$s?A>azvV^fT;er&423Yu(#g+ac2c! zGSm3`KDZ(7`=7r3rLZL~EsLZS2q#NEvU`(1Y<;E*=BNlzP^z)VMsGDXz|7zT0_r6eeK~3i*{=r-fX~@jXeBgoEIXOAU znm(Nh5kYxFw5;z$fn{6=ci?KBDk+EcIQfG+2}=bcLbwj4C~8b@XMRS`GPVTU zZzJhg2mu@Yf0hTWL`-=Yat{$R#d!6T;?ukT?qsyfsG&FS1oH@OF=bq#- zeVV`_!UfRXf1**zkd)K@qTS2yt8~UhMy32Mhe;`X(b3mX#4ERJ^~r;~46=`xaiAL?B8NMFwOF1wdy81lqKr_fET_ zZq4V5c2%^Olk38-yL(>ma8O62D0n+gbRwpTjO47yK*8F|BX`o(PsUPE~6AUQ(xWeA*>b}4Lu>bx*=-74O3!QKL7mxc2x=hI7*y0t9kEn zw@%5GEqd$Af?zBWh_u1uuF7E--1h8VyB7dLaf*b_0|Puw`#D{h3E+r@GbxwL1aE!4 z72v$rPe}A|F1uwjh`?i(3h(+Ky_l5^69WpFk=IYkYoyXWsP{Je4h{ud?{J4=-L1tumw zPS!s^|NZ^Xz`(%3Z|iJK;1UHf>(nI6=Lc4AIf9t=U}NKD`~M4einOSsvo7q`-S3}1 zf5LW&%(u%oFFyUR;EB00s?l;pqNJco0|$S4>EL<0bnmRgqBNSrDF0000