From f52d7d3dbcd9d1b2839769d1096058fbca596007 Mon Sep 17 00:00:00 2001 From: Dmitriy Zarubin Date: Fri, 7 Aug 2015 16:17:47 +0300 Subject: [PATCH] #111 Implementation of Step Builder pattern --- README.md | 9 + pom.xml | 1 + step-builder/etc/step-builder.png | Bin 0 -> 76038 bytes step-builder/etc/step-builder.ucls | 181 ++++++++++++++++++ step-builder/pom.xml | 19 ++ .../java/com/iluwatar/stepbuilder/App.java | 69 +++++++ .../com/iluwatar/stepbuilder/Character.java | 82 ++++++++ .../stepbuilder/CharacterStepBuilder.java | 168 ++++++++++++++++ .../com/iluwatar/stepbuilder/AppTest.java | 12 ++ 9 files changed, 541 insertions(+) create mode 100644 step-builder/etc/step-builder.png create mode 100644 step-builder/etc/step-builder.ucls create mode 100644 step-builder/pom.xml create mode 100644 step-builder/src/main/java/com/iluwatar/stepbuilder/App.java create mode 100644 step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java create mode 100644 step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java create mode 100644 step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java diff --git a/README.md b/README.md index 377cad846..3ae006ff8 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Creational design patterns abstract the instantiation process. They help make a * [Prototype](#prototype) * [Property](#property) * [Singleton](#singleton) +* [Step Builder](#step-builder) * [Multiton](#multiton) * [Object Pool](#object-pool) @@ -181,6 +182,14 @@ A programming idiom is a means of expressing a recurring construct in one or mor **Real world examples:** * [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29) +## Step Builder [↑](#list-of-design-patterns) +**Intent:** An extension of the Builder pattern that fully guides the user through the creation of the object with no chances of confusion. +The user experience will be much more improved by the fact that he will only see the next step methods available, NO build method until is the right time to build the object. + +![alt text](./step-builder/etc/step-builder.png "Step Builder") + +**Applicability:** Use the Step Builder pattern when the algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled the construction process must allow different representations for the object that's constructed when in the process of constructing the order is important. + ## Adapter [↑](#list-of-design-patterns) **Intent:** Convert the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. diff --git a/pom.xml b/pom.xml index 13105f139..1059edc58 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,7 @@ async-method-invocation business-delegate half-sync-half-async + step-builder diff --git a/step-builder/etc/step-builder.png b/step-builder/etc/step-builder.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b623657c589b4cf18160ec268733a3a16f69c2 GIT binary patch literal 76038 zcma&ObzGJ0)-|dKNJt|{C=Jpe5=tyeS{Blcl#-GH5{r-y>5^EafOI#Abf&w#NRqt+R(9^)4fQN`1tpSc?yc+-AZYU;&i6ef(pr^$z3sN0<^Sm z3?gw;-z;Y|HesHTHN-|(y-yCa`$}uy3nQ3?NV`W2Qe$OJ9c^OmgKTi zy_S4gzjpXy*RHSrRQU}a8ZwfnFeR=ovPuTqo!hU_ki9%Tj|l#L`7`LBFIR$@kbM?! ztT=z+WTy43Lcs^UW4$NQ-DQ*?WcHyBnTj|fEWY)FWr z(}`}%hz!ttSGdd;SEWK^I7OJ#qX~~P@kWF*kr~hNIY2@b*_GS0M{ zh30+Zp5?xz&&kQyufNs})_rO&;%Ll*Lbu0@O-_CfM(F8OD|uc7n0dsw$Wdl58|8~j zJX16l!zMcIhoICtymCM2ysv4{HR~({OPtG;y=-ZD(Q&oVJl*u!rL7gEQF|*O0u6)a zOLz?GH+VK`)cz9!G^S5ZcGPgAj4t0YqSG-whRDd~o}S6zC)@UitGXea!Fk75hy9V) z*J8CFw+7N)ErpP+QNcRGbhG5?XcW}rObrd`<$vJ$ooS;qH5tZWEy5ETS zIas&(bX7x}j^pkVY>a~e7+;MT#~LcuCY6nk4mSy-Cl30tlDxcuA9lXi=Q$BERmBIA z@A6G{fBw8u-ux6dnx8;jWU3@C<C%GEmu8v7^*)$V>%)nJwX#T)Fa7J;N03=MetzA$ zPN(h30(63D7M95*!30gkVCClz5aQe^bvvA%DNH!#`5pUj$1dCDF9!!B@nEMq6zdrUIzo>sdwZ3aJc!)zRW)Fc*JQW6!Ju~lC8|;R34l$N&+9z?7cSs zd-~s5ctwKC{&Od#<*Iv59C{FuD&g|!2DcQ;sa2-gGbPngj7K>#Gq1g%PDkrBk64U| zlpkL(tv}O`JtN%Mkk!_{`1zn8K8K+~+vk0F=i&*3o<@add9Q_P^F{DtOTh7BTmXSz zp$^%>R$=>8nW=A$plQUVFP6SkSUibRVKS%egU_%0+$TyXZ`bd7#Yd5pospqn1lyer z_q=DRT5vTt+`O2++IwgyNK)qO=~>|Q`bhs|H+1Da+pXuM-+E5BAU&?Kam6Uc6P(qp ztj@?84Wq+VEENHSw~`pXhUQlfRxO_M&D_Tv>gvo6RCeFsEma z0m>=h2i)ePl+*^~rzbUM*$KR-lame=CC|2}#xQv3#-pyRK2eo&-?_Dx;L|u^g=oKW z)#ckWw!xvtI3ifA)@Y=F@%^Y#vG|!Z3|&;Byqg7|7ychJ_;e{Xaz8p9?oSsE!jp%s zE36LbkNGpJ4Nc^hj2pindq}!-xqF)4-@Lkud?D=`7##e_pX%rfo35N#rDUSCPspFm zjR-MCWWb}Kw!O%AnSN+?+X$!!!Ms{Lkq%EOFtEG{7KDvTtme4fXhy**=ARn*ckImY zC-KKJ^?3(JDX^uSya}g8WVrtS#7)W|C0c0+BYgQQI#O79R|p7Ws2YjX(ihU_v}1C( z9(gJsXn}DUnb>6Y!$}jK4Sx#J>o=*S+808jkvLE!Av!LAuhUD*->%YVy_fk#r&Kgn zwZ`;Mg!uq9bdpGb_fSW|JD(U^tZvzui*i#9GWa^;UMDvJa##W{!)-7xDd8(?oS{xi zJCXb?*tpfg`w7K|VZZi##J2+xzAd(${c$wOc?4=7X(amRD25W;-|Qi3;=D9q8eFa? zeMd7v90s(!7=O}0SSakJ+qE)S;pwxrRb77ir_1{{PvT=AzN@!>=$FZPIdes`vvnKb; zQJ*(v&>UyNqiiAzbf$bF9*~=SekMG-kp050t!~=#-9_i{uzvfOS2;PD7sp$Hy%9td zi1W4I-rf^>Zsngr&ZWqHWQ840xE}t5_}pgla_!kL8z*(}qn1c-YMOijaH_W2D@)1C zk%}JQB#(QcV+cih4*4k|LxWAifh{-p4E+EI!k$Lv3F*riOAzy{L8{GyW)=A|QvPV| z$$O2s__)?j5n2yTCY1ZSe0{Oi27IunnDcVi9U@NCswoH@7;-i**rZEdVyP7sARPp* z=j6Ak4G5NYhZPq7`a9F_-)onfwIx{b{G`&={nB`48w@9_?2B;isSr4heD-0eC7>A( zq`NBjo2RnX#@(*SWoy=(%Fp<}f86>OLR#NoYh1Lchd7#bX&8`zTv@-}90}((yUHr! zh@|t)7XA8hOB7E+CS(c9tSSf6CoEU>wX0jw3q*!277cKO6r{RyUbUU`+8uSGm`bj5 zftwLEw&_(pJ2MzvP?9ohQ2G^xg2uCGRc zb)28S*qx&YaE_7yMS&`(!Mr+I(A5 z2j7QTIESIyYN_PMN-waf)Z%F9pW+-0Lcip?IW62vmz;XDcRiZbEO}FJrt9&qFXQ7IG?Fis3w3+v+@G3< zRwdWH-3@#=Ty#2Rb^3OU!rhgnNakIBVZG{o@M*PyYYf}Sd&hj&z`2o8P*;qs=CJlZ zqfW$py%#BNF^PxqV1Z7So)dvg;`mz~sla}^N`G9uKdulS_hlp-ZeZYrTV-R&9+7Gx z2iZ_>?f}6o`;L{+6vVt_Y-heWKKOT?iD0&YhNe>uk1*30mz z>+_=D)A9XW1}_Ki))fJ=jkEHzrtxLQ9ch@7qeO8F1GJ(4R zYti8O_NI~H5J-^4#*=)eN4F$54}JE`AWW{#5#YJ;?p6N*Grg*!kh!9t7r58kl>*Vu z=(1Hvun*5t8;)*$3INT^*7MMjCE6 z2pCUt%PO1AN2cQkI?@-W6D992Hfnd1%XvY>iGvLl`-TJfu5fqOHE{}iw<)0=dtz}V z3aRAq-G|yAJa~{v)5yjxhnTnxhU~PPtE`JSPWeO_J`N8TVtHf38sUsuhy0t9*}U~W zMV(&<4n&*!Nx0j^k@6?3|1lttp3ErB){6UX>U*-yAv$X^PM1xg#q9(V^%NfUS8BBv zr@6XcRsO=lZ+=E9Db^m;wfx}GCHP%|Py~^>5 z2Z}vc=_KvI0>gu?A?_r+Dj4sEUhV1cL^0Bk^5pr^x3#rBungHeS6iz7c0O6IW1?$5 zR&abWC5T&8zTIOL+Tx6gw_`^e$sKbeWh-7Ncj-15XvKs&un>kvKXb1xud3L%gKxnV#@=dYuKfKk<1hMH zd;7V6wHssdTaA8^MWaD|U_BT9^{7#8j}LLQJ}8;p&v73>$mUKt2I6v5b`s0;#i*Jvl!@igC2HZ$R zl1u$7$n9ddKYsC6sR;V+sJ7qjE*m5Zmy-)oQlz$b{dkMf_3@-+pppgDcfL-mlti(Pg94gLtM(@^d0+pU96Ez?IYRG*r&9s3ODhbxEI%KwC-o1O6n3yR0 zCC97LF}F3jF6$1coyGi4Y#esBx3)kjK7ocqHrn3Zz26Ukrb*k{ZSj7XE()i4EGpJc zEd&Z%ezTbxg)-GV!9`8FGRe!+_LEKH{blK;mo8TZW za_=sGWoAuDOo4BLK%wyFVIkZkJ1)5FnOGqaF$qbL-I@V%L}c@TSJ82;YGHD86k(uq zgY^QkMcPAtyLXtA;$^|VpR(q!{hmmNT(THn*!Ne?K5M5k36M{ArSQugVP(wo2%$%# zwkbG2Y`4pF-WAjv$I}uE$dp|DO;!!4fJ)0C(Tmm~hGGM&X+E5U!_{+ryOplD7G|b` z&CQ6@?I4vLNLkQfVCf36SYcEUER8g!kyN;#I^uKAQ$s^T`B&21*WzNWMj6or&gFc- z&nxV2R6D29&h5$oR zQlg5CT%}zdA>>+x@W(?~TJ)$R#l=zLuT7R13#okvf%@|NMM6TQPKgn|?C!Rp$=-bO zZrx!;shw3K-Ub)Qeh2BHqrLH5s0s1${XC%*P~mRor}&L!Rc)Y7RNh?0r)TVo(R)y@ z$aYH;U7Ovhe&@A$UYuQ`&W!bN%MhHn^29(cOf>T~RL|?jP^OaagAJb(>;-P~cctIF zj|s{ulhI0F1quj0R=CmczK3cL=V-!uINQ}lXi0A7A}>#kpOPcmPoaObhZ623)Y%qt zIMCKq#>z7J_+=T!#-K+@cz7s8_x|Ts7ungu(ay&iI6_W1321NawkL6)yL(aZ%VN&` zJRpJ0qRv(yFTB5Tc`m4U_4&-Bs&H)io0^ix6%!Q8xUE_jwu&|HzNxYKrHEVzwe2p)U z=dq-PMDP=LQ(%#NeR~9bo514s?%jg}NoiD^oqz)3q0?=1pINj?$bIfJ`MpPugaAdgs1U{DDd%z(q3T_ zNjQU8v7=5*OdP{-aC&?!=(I=4&#s1=_?X1jxY;xB>gfxIg~0Lhw~;!#=Z9!H zLFGdV#X`P;w{@y7CqMmgD14Ed3T5&cQgl){ zaOI_?JsobpH3Z*^DsMUtP?GKi?M+wPg#-u3eTj#-3zcEYem)vtn=T$;V}UN?^m^(! z=oUP9iu0_qzyJM;w}Za1#CfXDc=>z{Zf61BSkRr?lR(LHp&Q^)7mt`?Lc{ToJi8`@ z%(6tvk|(7va^#--lm6H#UYaw^-ewB)`!4Q8-&E8TBxdUgBi~nC4B!dKn&ctUV+ABp;IrZdCK%VG@^!|Uc z4;_ny(nHWL2H=TzjPh-1Kq3$!%94u7f>C!68S}V%r78H-RrmapnN&=!{`>EZKG;Z0 zrvl!xK&#TBP?so{%~CCgIO+k$!F<+4IrB@tv&Wr5Ow185MWH{;#5=;Ml!uCH7+z1_ zylUHC;+-=pv$~atNc^kh$;O+0!zGx}j}7)(*%_HQZ8qsf42 zgp{aH7w8P`?40!V)z{ja!oSws;RKmsXwKcF^21}zGLt%+C4m^<{Lb-W!`$8k8j0Zb z&>yq)-Njooj&6B*aiuLz{i{ifXq@(W{#3W3iI; z^-g{V7Oya~p=B&6)Ng*?vBl@p72n+0*hEVP3cj$P^amNmcuSuRhUk@KD$AcWl}U3; z;|SNz8>H6T3%xT0{d1bBGm8b-)++u-YgsbDR&eHcvkI9{ljPv6_h(iwy{1Tr~>2|c9?tabql%N_Sz2~9;SU-~kB0#X!!lj>NsQ?1>hSgcK9`$Y5*fF1QfB-! zW8@%;mt~YPpCYBmC`ngD%^Y>X;8eSH`p$eHG{5Uo}OCK+sn zR3`emx{81WFdNOg>##X;5yZ}8F4x8uk{e52-QYuXeWH~d+8+jx^<(@+1pX~^84in} zxQ$Ye+u=JcEn8`~o1H77df?g96X$#!tU|ZN&@wgg5dkQ#h8q~9C8X`VHZf6LX*lM6 zpM^+?mlu|a&+ZJr?TUd^f$cog^&^K1F z?L2tfkdcCPhJvgjK>~Njmm)gq;dlJ720)dYi~UGY;FstOc(RZnw|NZl5GA6)t^eIb zOMmER6IZRu4`xQn0OYB%kVM7!yyADiNzL43cs{q(UOP{iE`gP?&rm-Sy2j`VyV_fD zqW?%@H9hXK++jAI1^8+Uiymv)akPxH%zHb(JV4cqQcKyYP^mx$+zo<9&R+(o@Lit~(B6RR_33+I56mpM z3=>r#GS^$fqU;r}_s;d}x19I0VW@?aipnfS>L8y4^OH3qM?-rflJ@VNQp^vHjBQrB z!5x&%qiI(aVQrT$ujELndc$6B8!=GsR=r1$VTUuF1XxFX`^HKk(80*kV^sLaU+?9- zE*78l+swCW&KLLqYKD=n^;`KoS@R8V*`=|L7w$6ogeBriDT7vjyexee!_;61X`}kQ z7Ep?wd8(#k&;*`WMNR!ZJ&zJKUC^P4>NwSHB{hz_Qte;zb&sA95C+$L+}b?LN&T*p zE3@OwS3;%Y=ISlMA(3m7c)4<Pt7gQUqqNz|V{F-1H~gOgue z71Mu#w(Jq)sdHNPC31SDR}o_<(>2=vs3)bIMe+REAm7wc&9i@rb|nXX>`N(xOJ|gZ zMgF|w+n62gJm& zA!NK}Py#%>!3=4F?OB0kYuAwMCY{j>pKSg+2F)z(g@eMwMSs@s8!~81Kt$SJ9ZwR- zzVNr%CLT^s?mXS-u3VH;U$)py7^)H(uFCXO9isA1)gM-}h0=TUR3LFb9(>sfwLV%W zb-Da7z4|M6gMhwj<6!76!|Rq>-2M#)qmE8Wup4dqNj+dO9b-@c0~@XN$=t88#hb17 z4M-0Xxwj_7$*}bc9WjoS0Kk#$ziNoVr{-|0VTgq&1+v?RqGL!%Ncg6w8%nzb1qBt4 zwY7cA&Xx))$DVpQb=v&mKHCRvJ>1YcJSga0r{>Q=Gto}$`^q&QDUU?AAP2aa1d`Y@ zd?MDbalkJ@TIYB-MXCkXj!h@LlIGt{FY zJzgULv~!$ZR@MFK<~$f($-F18?(b-9)RHoGd9=a!^pVz7-}Dsn;wfI0T-l%d;*5!* zU;kV}BB70<2T5(p27DJ_-4c@?_t!B6w!B+EyD;sJIoH)SIZO_a`d}qZcXc!zvhGlN z<&HRZ%9795yS1|iXz9LKWQ%HbxkW_-LqpFvIKnJrjPki~@{guD4acfaZ&sWws3YLt zTpJ~59x1Y(h7Rntn{a=zvumTPLSDT)Q16KdZs;gUGdNdsy=Twr*;|GXHM+hV@89~n2n3xKH^u0kncK^YnA9D#& zQAd;Jg)7U;do;2oqeR8YOG1g9T+GV7xK{=Q;dCmOCGH`-$zMe-C21u6k^=qBJ_%bgn^_gZF<~chvGFv;~8%`rXRi$!wKe)z#J2MV;TQ z0#Z-4w6t(=a6&@GOp8_hmUF~-kPEs4G@PvOB8`tYB9?uXyG27laCQq;ont94d_BFN3&BjF-oEH`A+A&12iD|3b!_S0~iYt{bUN(T&~_Hk3zkwY9I5^~F0viQj%*A=(+cAfr8@3nc@-{6}k1+p6<;zANkPZspw0#!PL{ z=9~@ve%48=dFy7$>{bL_WY?D6)ii_X8O!MkvXPYO5kV9I|K^;>k-N8-bb&@+mFu~! zg+-oBK3r5(v`FJF1Kt0Ih#>d>`+?@w?qBqJZ1v=YKSZfR5SSY`Xeg1|r4QcZp(2fr zjy5zjuxRU3{`(0GY{oek(pNcd`)dRC8oTA>kaqS4YC%>8N?y{FE1mxn2Ge8rq3F+_ z&GczR#H=lGEpHV%`guDYE)GrB9bNUOOM>(rcLxUtf$3y6 zNM}KmsXA~JRZvAyQUX6LK^+YiWq&~zq1!>ne&DoYme$T%4;?Sm<%NCor~_b&3T@~7 z*Ut46uqtFtb;D;TVK?0yS$ozu)6?Z>XBRII8(Z%qjEs~Gm!)MfX ztj`aOq0oL%#g-Pe^=snmB87*CD-wGOKScqjH3Q%lxZymAz4mVT?d`%~+L?af^gA$y zpj3WK6U67D$!;|2XIGJD`!3Pz`FBBA4!4Nu*ehj#4NX|pYKF9Pg8@ySXmt$7f$MAu z8rBR@|H2nkU`$i}lG;{iad@KCC)nZ$ZBU252_ zn!qa={AiHEv)&~(2>Ko2gJR>n{CoXuv`F7g;q&Ql4T%fsWDjKn=HZ8czL1pMI?mba zLjOLCe7^LmjaVkN4Z6)7>}wnHFct1=nY4Ymka&-nw}9PW@=kzN;dIaHF0Mk(ape5I z%f8mV;Vc(X2krW=*u{0O=gKX@a@L2AzjD>?O+X5CAfOf8go?_=Wk||fP`Ix>J#`mw zcz(kA8Y1-~7uNTp2cWnTXWZPD=o2kRk!R&7iKHtnncH&|Qzga(%b!5+z`p)0gDIb# z#ebOQ{W|ON)x5};0BOvah7lLJ>_;3)$oobH21paMA8n!@kh)WMP^@IbTi}ywPq0=< zK|B536U~ik!?psu-J9;?adBEm2sm@F<^hV*cb_cBaf$Fa`+D>B92~BKNz$v%Yk|6H zWwpR^ylB>{aRs0`0D7&{x#bp3K8aDWvIa6g>Uifx5)V_%SvyWkL#jUKZ!*W6PQdf0 zczG00Xo#5;2<<9i-S~6bJ!PbPCSj~b@ocAYDOQBU#QZN`j^-$3c~PJ<;G&hhda=on z=9=w@P!_Zu_?hSvWJi1x`YEV5Kng~>f0T8W@9BqQ=W<-Kcj$70i*ICVvOeDIw{+eQ z@l4{ctaakFTHQhM0UfasU?6aXMdh$fOi18 zI7TF+>96amxP5z&hsVPncW2nO$G-vL$T~V;p^}r6&(F`%WY69@(IJOG@Ro5vy3d$B zRti$@x1s2Zi+}k29UAP<+KPdtaeGJsu%_@34VYLXXbHPt?Q;U*jO9q79&tEmr^?wG z8C_ZVekp`kSj6wHtYj-T)^~2RZeaO9Av5bcANmh&j>ndgUX~N}%oXbZIzd8$I|bfS z$QqRaZ(;a#{nLw2(13;Ybzl&*$m*LQEU^$QG>RQW`0*|#K%|+Pnm%7u-cQ+l9R`tt zFh)3!LGQ-PUgV#Kyug1L`M8{gAHx&2b%omry%ls+qW%Ev-?w**i(YfET0a@Ywa)S8 zFSD@%mC6s>C);z=^)8ImH&=(tz&9oZVY<@xgz}fSq24YoF0wkfNS<#w{`~d8DW+FxOzAE$CFMDHBQ7Xn^t%ECmFOrU zVBe)OGBP-Nm9@3yLU}teo?naqJ*fy+h*C#K$DMk&k;;-gH>tO_$xj(QG&B?#7>K)f zeEdp%6Cdxn$9Guf+B1>{lRM~IIw=Xid4Q`DY7{`fIK9P2@`&+h-R5;Ka2f5@Z_ zhMD5`{mH8Nnsf{dxz{RhfUHqLBFg15`|^;?z!uXAkaGjW!>Q7dyto8JtL^!7ifnWv z#xKT7w0+2>ZuK#UjK@AcJ|L8X>t#A#TJRX5qprJSauq=74j$7%^wF)_u$p_d=1*z&deS2K;iXy%9Z4~L;%DAr1fKW!+HKv!inPebg0 zM>)2lJntfaQY&iW>Y>+q$JW|f zaPB)!3p}1rB{H7?pXqr~-t}XpI~Jf6Ed_-X#X?2N-C@QDMp?+`>B@+fOu{XO5c9@A zECrnP4Nf5O+m)j*r-d=ltQwzkyu5j){TdMaA(_N$>58GY`C7!2^)6WekuSc!Th6}L z6&-lHTPcOfe^WfDXrvXKCc-?$(HjvF5dgZ3#}SBpqU5LRpm_NOG7}I$yu}dxtz0jD z)g#Pn;2cOsS>m1Us>?qB)$-Jcqn|0T`~_-O*4~Z||9VA9g(ueUUx@Tf zFd9%(Q)e&}dMZ%M{DNvGyDOS%UPhaK0lgu=c@9p~!2+GbyZ35>!2SzYn7~DQuai9Q zs1W(=-20W=-~Um&TcdDde{X_|r6s?XM*PXP`N!=^wx(}q=Qh!!f0i=fa7)9C{H0-# zM0SM_H#Rm*_4QNJpuCKahernJB80>4m2EMkc>qzwB@fTLh}bOJ2pALI z^J^pAj{bg}2M?6@W3<9+#F6XMi;BWra6Bd$e}3E?N!8Hw5)irA@NwE2ZJ4dERo95u z)N&MXd->|%AWD1)O6QfF8^*<^*U*y@;pZo5Z~q*NPld-i{dJGL>0SWk``hA48WN30 z>K?&bS6}~HPHuc@!Mh9n0~&@ypdKidNL>NZ3>w+MRgjy7b#;?LSuQ2zFEir+9L4Ks zzAe!NJjd=ooTM*v-Ph4or1#sPv&FH# zJ~kQ}vCTzXqd?Q)Z%uzz^`B2eZf$J^ofuHVC=!eBWXDCjqxqubnA3@HeFy)O8nDmQ z9d|)xGEKAaoH!k`gN6Ww7D1~OR(>lXlmXdsgA6=@k&)5DxaKjx!}9X7ln%8R(kG)d zj|{jGW{E23@G60W$Y22WNxZ(exF{efD9uw({^v=tbXt#U%IWERDoh5e0L4@9tf5^~ z_L%dpzIZ-sfxTH#TIwQ49FY7%VQ{!!+S4}f&X4;*7j%Wl+^+aWbpz1zoo-e7L?+l)n0&t#G@F=C!A>z zt%1$V^C_!O7BfzqtvdRg6p+5%u|o6DsK$Qi&HuilzY&uk|pxj1eN32}eCYtRyO_y2;6zhCjFh*B&rxv;PlKtEa!?8s@k zBO@ClmwwMSc$a^7EW4znB=N(CB3wS+-bGM++%8O@g1WgZ`yrnwm2>%7>WdCZrwYOWNuT{(}k!KD;JNxtf7h&w~h>!T1?ahXFdP<8p2u!UB zhlFjZdbg+U15nWyOzeVU?7`u6973{G_R*a7V1exMfw!_K?VnKo;J+fdE!SXVYxuU{ zeOn23KLc*u_2H~gkk9JnvKTr&AJ72hEZadCRlR(YjKm$b zskSz`L=T!Qc*|q$0_NbN6s5k8U-lhI{t;Z01_L>-eV5Jrdw8ZlSGDV>tlZqk*b~)u zoTR8B;6SQbCeoA<_U1dKJ1=3a7w9F1qb!A3WIw5?+fu*3f8X98$7!}I$Bsq`tggto zn;wWB?=eDdT$Nm}dr8en(LELvUyK@IYWS-X_|tk^pv z5#iy3;Gi?v{12$AVO^cl-m4z%K;v&E%}EZ*AIETB%Rn^reF;h)hYKKA1EThWS&3WZdbJg~0GN%_3B3X?Q-)!J-}f)o_QUzjUq>Eyh+7i>DDKal?7Z?6zQYz3 z1CNKB{i=b73j3sBi;epEe(_;!>Z-zS!-0?sZ~H`5R_yq9fQChSa|$4?u^tT|K&Zui znF#Yry8w*bm0yGG5R?PgsL%3bT_2UPZ46raK2&x8D3Y>ye@Uk*lE+*EOl&;83xJPB z^+T_Q+im?(?wcQdZoFj6&3N=>`YI_U=s}3VyHV7;{s~r%Gc@u)!VBTZkG1=vgZNjp z*B-@lA!vnArUl8`4MxUG?+-eQsA;H|i7mZR40f%1A)-29bG0EaSEml~JUN+3(TsbX zYJ0uk-d=-W^NOH%N*oniWn%W(4-*Si?6m)hE{UcI9Ldp80RX;xPA za8}kpv*~2n-GoMhj>r2~k1t*U;(Sp0#|8!lk8mRBMJ#tkAHfhc-|YvW9Bfv*B536N zF?(Ii5)laj$t+(ic3<4$-o7wxi057wkX-_R?B?pr(M#(;QOO=tU%};CC0LhL6_lq4 zUC@sW=`CFqF+`GRfZ_9*$U_47R}$^kK!r#s^OZs~xS&<~a zJuktMtkySbS@MqqUS}BD4I7x_Lm=4n^nIR4T+hA_0(FzaOB41Z@+*X2%y)RoR9mQ{ zNVr4@snilQ8f7_Hmk>bK=V!|LVV_|JM$cCM-z3{q6skPVyXi!T zmXAKINw%Pxf&-X{YJi3{)EZ=3QIXUdpOU%oWd1E-dxz(8i4mrBo(esM5ioZn!+v5m z3&R=O)-aG?fKL#=T51cKKw|O6@NhkfBogIHEj72eV!G&JdaYv=?TmqgnEb2O&wd55 z(b2cb(#`|I{~vEUaKpiEy>w(#NeoC0JBqY;6MsCMuXXv>8E{*pqmQ9*`S3b{6{#Vp zx9z=pGqrFIG=z8_NU{;E9h$dzpU$fdu8T&S%=BnEJOJrGf1Vh=1FDOn($dHp!f4Dt zzwQ3dzp|GU7e}Uz8p+JorVN!My#41Qqu;@!sc|3R|L=#j!R^H@ELa4ul=uJp!%TR~ z!S+oPrSHjjKlBjQ(J0eC=%)EU3EA1Be@d~*R&cPG(`|z7+^*YRL|=bl0cfJwUKxAe z{j~hQ<>WwFuY`Y_0a3v?)6DHe6^GQLKuKRIj3cSgpew#@gk8L8>?1sh2aD38(KNT8 zd}xvXyR>+^-LO?o2E%eN&1R;i92D+V_NM#>JF|l1gv(7(n#g{uuK2(BAv!QD4A*&E zp6QV{>|(V`(0%N2_s;_ddiWagb(c@AzXo2oU%gawraS2Vl5k0ITTZ5^=6{{3`S`ZG z0?r>B7-Sq&P)9yIl=jlW!q`ap-V12*?=Pj{q}&sN`KmRz${RGr!D+tOTUqYFVZK)4~jpagA#*&kwy7D0Npacp#Jtm_xT!M zT*-x<>cQ0#ulj>3>(TIKm8|L`pzT#H)WyPQ0P{pXuWCUbYjv46<_$!rwgU4Uh~-O7 zm5^IVO1^@5BANO;wN`f<>DfNh27dUb z=-6ZCA7GKpT8cQc0R`YcV4-fZyJfNCB>7$lBpO5NX-<&BCw<%t(+c-dqr#acLoO1H z&d}fWZ9Jdbexru_(p`hlU6nmBP;5bfFm$>Z&Qb!hN08$)q<0D%KWLY}!y+Rqy}3SZ z)^iu!*)&rFpy=gCv!>Sc9Nc!w`{aN=@T|B$QJ~3f2%0o#aS4_AX>HThh8kBuZZEp} zS8o4%B*(}>86XJIYIg&&ug;qu;)7LW4UvDK$Zpyz0s?|H%CImFes*?rFVxNZ6?^j{ z*y25U?nymenwC}xDp{`V-#F%rdy*@%PET?kcFrJ z(g=*?Yu!)W0m5|4DIQ6$s3>c4{~yokLTYQxXBHXZgs;#Qi`N5@I*C zAn0^BPNh|ss3@#@&|^tFPQNJ0Z+YN2(+7n0K8tC8h4sTw1yR7{$jf7Q_kFqPcmLl1 zb>$&3F_#h|C@A?Q^}TyKg?jzM z2Ht~03%`M`B$>~KZx{+-0T8D3N#uuRE#GAA%qCJYM}3EX=ye;_X)jcVq%Lxs9<-h9 zvt^$!9UDpmOlC2bB2w|b|J$ulA=(NE6)G$ymU9aoqAso?We`6IUgEQ{xxML3Ek3(I zuP3~P8VimGMve|>S_M=6{Uluhtwr!YH8T_OS-H5JVuGXJp7&6B-u&!^JB&Fh5{#-D`KU@BUtK*`lKMwbPgxoVn=E5Q zav407aO#YZj<|u>xcmN3xOSZdFWpEYkog6%;BeDnQ>vgP=`{ znhK9lOTs2EwoBCd3OD~A+D)W-koPziSK`5=`34&94fn$NB!P3GQ)_&ujiD0|nKCk8 z*<5T4q^g9yUcY|#u1$D7n2c90Q&r7G9t;=)orTJ8{PvWb^|8V&kdgH#Zq+tdkqjuV z2twd1dw^)A3XU4@J|ZA|Wbk2j+8h@u6Aog9J-K@g0Rj6c6lfzkKY4#8f3%JvVrXjW z^#z3RcffZ*(IOd~q%+odbG-~^z{CckUb@FdMw*yS9`wYs@_A!@_zOzx;{s&vBci_6 z{FrjVMFNWRx`V**k5Bv9#FwTpr>B5aCfZOppfRE>>>V?@jppb~-2YiO%O) zyQQ{cphj)s1e2HOpENb%0iFm5e&7TqCcq$N&d4Eg$LR3zUGxFCgi~Aa8xwpmX@dTu z^+@UR#7eX*hxyz#s|DX(#`Bu2)%KoxY311cdw zn8021zgi9eV)B8^19a3%j!iJyZX}Jq!rt9(@W><5{FdHHHF zQ_1sH4*H+1EYm&_y811hhe=$~Bt=(vf*)}-Z08>ow4~dy)&|D~N(CyN)McOG;0I)6 zWI3`T9FKrJT=pr&nkCiUOHrhf>lL9Ew3f)cjw6DL#fVt(Kjk!_oc~c;NCBNwvJmU3 zh(`VGljFXjV%oW5K_V2?)uo_9op(_);L4lFyQ6Hq@R#(>{U7;ZW9$&R!{c2k2woSS zuW`QkW9f^H7sBMvEylyJM2hzryf>J`$xSBZh5j4B;EQrhihqW>j!#Ssda*vc`(NBa zBvXK!jEF>fZFe-O%J_iJ#V~KPk|2IA&{n3`VH#RU&AX4$)4$B}JA0P@w5ca3SjVL*Wo7*YH(k}WLSo2m8t z>?NRVd^Y<|S2qI4oc1-4JF5sxjT9A4f`~%E#KTN(Y-^_M6!*8-tDqG2*F#Y8B&h<8 z4`BmRyK@j=

MBpa_M#_enSb3IZfspcBMTYw69OtFmd9_+pQS^*HDZ%%T6z2J;H3 zYH`#H_UMG2AQA56gFy+PRa9*TueNZ0MD=6W7v7nLb zeRH05NAe+|g|)parnrEt`(leTt%J=*kS!Q=4|M|5M^2k>(ouz+kMMXdPb(chmLKjt zQUHNpffiUY&5qBJ4F z55_?~j|7UW0bG|87BMFP3fIj=pg5j>56!i; z<=L${0D4H#l+<06ceQ+MQ(O|dD&aWmHrC$NRc5ZHbR<@EKI5q2cA>7R<>-AO87fuR zV=cV|^}1J0K-C1`khcwBLp(Eqgn@W8&}coes2S)%{PoxbWiY9JWpt7O8K6a~fxWDC z8=KB#);BhV9AYM47fw!7Pvil8f53n+)Nr0Lzg;S_*U%u}U@!=v9b@5@GRY7U5^K0H zyN~JO^x$?x4GEXm+6$MU=d`J}7{)-0C!6yIB4QzuC%nU=MfBV@LrgtRPjxiV<4!D? zPWHp8qyRh{DSFHuXDQqOJIje@aOQ_KML-z|>?oEczGcY81&36iYK?!l4l65|i`q>> z;(;RUXs`y1nZD)XI-FSDUqTjyPb8fo5J5X%+WT@kEskg3~bZ?dzvmfxOq=L!wMn_%(r`Cry)` z_E*fRoe4w5yH9<`B~PQY?dC>DZFqs&`e7a~9YK)NSC|)^^-`VUJ4*}ub6YTn{w4q} zB-px{y{x9z^sl3}P66hNt6pQ@1$e9ZuXwtp?|29Zey37zU!dz}h|>mR_TdTs22^=- zWAod=SH4{$jRZT7&?!|c+3Td%D zXf!||!>-T2ot?#J-+(FC0!8M~FkGvOTzB^^@U{q0`@icu@){~Bdwy4|!ouqs=R4aZ zxAMksi{5-A5bmrg9n*kv0AS&^fRxQM$yCF8m$o(=Q(*i=nN$w~;6tBr&>R@fpP(|a z+z;BpWeLB9oF3hKU?gnsA;%$*w5}N1_-4SXNK{!ljmMy&6l-FXV&*i5pk5o?@NRZ{ zfuK#Uik?y~aELIEA)|dhqz8M!185U83XCWIt-NdACF8J8mP|~{O$qF zkXj#xZWq2cVqJpsWEp@TJPXUyolL%g_V@m=u{34a&Smf3S$=y>))~6o*LvWm<%b61 z)gBn`{byX@Z8eZiha3S$7rf*_jH+0&e7-%Lph5rTI+Xak3JNyuoY0607T8*wR# zG6AByiDb@2fGp!E6pYhW0HSQC3B+wGZDq5Srf!R0CT{_0MI^t0st*5V-~#1uO<%W zrC-uOGM+cVg|I(1d)ZS2LWU9Z`I0Y_*a*~%L>0U=L=FM+(SiT=(9C1Ei@tNQiIrtTXwTaUyL<>aW)fkA>!DPzpPy5FGVVNeB< z@pw~tTnpDbw=tC;tk2Y9BDd7LNCH%s3I}LatstYcEl7#M!9ge0>Q)O})&YoQ5zpcn zOe}@BDY-jf!Vp9*8*$aAodE<}cDDGhUu%JPeW0uvr>j2Yh;2~*7gPqL*GgB7LLU6qnrHX#`fW|ncI z_CSUYD_qgJNy}eXP$x)pEC825`LOHYYWVMq9UfmSh=@D^*2>28(w7G<0Z_EwxaYuu zm|pjXicyJZrbhPj0LQ&m2xCjC{x#k^*Ca%pNsER~=G8OB39r0k zy12;54$VD)3n#|oq;;QgV#z^r#JTboANgya%(w0>oP_l(b{gJtVzuL}gK-}F>x0~Y z4z211Ok(OsFjVUl_4Z|aBjaE1+Ii@cqBdXH*Uf`eYbg0^*@2^;7h)YXJ zFoAAR12TAFz^y4$KE-VLYwi&@tj4s}s~Df#8ZQo3xenM(!d#Vx;7gWBu zY%DAfu(9Q3WQMNQXeOqt8bh7~wu0C1O| zYiVnH=JvT>Zmy^(=>OsDEyJqX_V!^=ln$l4S(LPNqaYp9-JwXQ$RY&kmXdBz=@yah zPD$zRlvuz!mhN-TQ`i5)`*mLzZkTh9G4A@^BTW9q3zSy=;nvpH*;&#h7z`%px-Gsy z6;2i&5urnLWbn-e6$8V3i=3RCmWD=K6c?go?kP#Mq(58phGnZ%+LUaf!lLhdZ?+&e zH#+9=1NHP6W}xfA3y-pu)MH;;9#l(=i7#M~3w{g~z-+I2RAA3P&|Zaiiis{|w!|2( zYcKIw;->I+!rZohE06l(OAIMeYC%CkOw1!ZB3w^qF174nIWDz8zpol_yKOuq)Nx># z(sgHYO+6T+ z0(lop!NcNG1%HTtgsqK&G!=?Ui)(x)ZEgu6lJ^p*e!8=i|7DD8(ZT%T;8WN{^f$b` zHn1Rm{?rm)q(dNPQWbwdRHO!%Q+u_<(nNh;+4d@IJcWwn%ztRVrV1zOk=L*(LioA6 zv{deKWLhMzY8U-J=CQ@|fB%%a*ps=YhZQ!XHH-Dh2V69^pyp$l{;rQ1f;s`IK_DQCbzdUO#4f( z(@-?8$^7i#f#WXp$7+0NVPM6WG8jDHCf++YT%VhJ-G!uac;OS(--lLd$R92i^BasF zb6bYLnyHci8WQM#ijJ?o7qc;#xBQs*O(^3+#m&uc$jL^OQRCYLwvhkGqZTQ`)8uRK zM##*cx48}g-xip^K+}OqfZ5*6C6c1$tcL0t%45@Bn~8w|loy6Y!Mcn>H#~3KFzyC$ z`O>a@<5#C9+P*lO{Wh8lI|Lm7@|B6k2N&b@`d46CebFj?==YdXY^*igVB)g|*v`-X z5XwJQB5JRCU;lK=qPveglZg@S&i@MJ_1QnZpR=wj@tmo$A^ExR)CJhhXx4SopFO@8 zLYK*zy&Gu~o=tB-x->-hWks1D=&6L;L%;1Oa``#VoD<`|EbuivxTeLFhiw&*s*b}| z$`de81bih?Z^6K=0$^i-UFB@&XPTIg@VTg`8V6__+9@RkOTVqNbGPa4hJ*cJS{DSq zusS!GwpLi(8I4hP^xr@zl3#A_FtD22klvoXwfsPWPRr&X3%lBxr>6b|BLbGzAsuVD z=}^i>S1TBW>DDZ@% zpLJz3L{RZnKJh#x#Q7F5SOIK`Io#^sd1o&@>U`|>XY7CUSc8U!D#~D4Wg}A?o9uE9 zdV^qTNur~~(+|eFm6kPfji+^u-nAeVQg#tZu6J`9N729{X!vQLhaWWCF!sUHq$`uYPwU&_u#cl?TUQ7Yfx@Vat^)T zqu9M#iHgz~8v4QMeF8@Nnzf9)AJE7~lcIno5~Qf`3$Q}v2mH1myn84QJ{*EPw2BdR zYj}iF;PltOS}gb~ak>Ff-YH?kpNZi4&y0)p<2fuW5tW=_K4U{7ERx$kFa&s2cNorG z4JF|p29*wg`aJw9*8s%K=Mjx`8?KaNSu|sqiyJjS+8+1FZ`7XutXs`IYCQzra4=o`+W=qrkUmr}V_8d-oEZ?Sg_r#Pi6q38 z=@jdUw4m*d?E>}&SzVo@w}kM$DLguHZ?ha$1u;;e5JkKaFmQ8i_ImPb%QArDq8`yN zwUeg5xxU0N^+}GeHf=@XL;CkfCas48e^=A3AZk7PJ}xMviHZ{Zsy6hj41@5=r|!4> zpk~fQ$X{{lUckLRL{DBjeM49Hv)AuPm)$9} zCx|6VdFk;S+^^sJ26g!Yx~Y`Do1R7&+!3GawV9)3iAAZ53U z_u_p{yTusPX89y^$h1ycclywOvUf@6UezfjJGOf9DJQFnhsn{ z6bi-HduJ1VwoQD3KAjUZ4UWNS-?1P{wvb?=T4M1!Ekfis* z4j%7s68(-`SnpZ7CSdQ0>|k#__)ckD*^TdY8A2)A|NQBzsWJ+>;D`v~s$h8Ki^J6x z;AMrl)vtfP1)C$v)QsCY3&oLP{M-FfgNF6)dM$SJbv|k%;Pv8D>_<81>vQ0dVmZ3k z%82=9kk)zqR@;P-fdSCHEUD{vH)nPPrSzcb<$EJCfCflvsN|0ESC>aX+03?EV*D6! zmXue_=+p@ie`8}K%gM#dvu+7=X9BiC1DM$QlTHSjOBWGdE)M$5i9Ssvz|R1P19!LAaR*Hc*uT4^FOs`J@#Ei6D&yQf z5EC9^Rq50p`v4-YY&(VXfd_1lUvmWP(7VCgc7b3Dquly9!x!hTZfik0mRXb8SyNpOz#V1l=E<;?bMIz@V%H7jftvx{JSo3`<9sE15X-DMZRABQ=RWdV8>2qnmuU4lVfFKvxHs3MY6 zOLyTzIxHbttt7RyYOw#_N7g*fphSLD0uGWHgqjdZCtS+q9egA7!LU1Aaz_w?1kHIL z-+_X=sb_NgTlNyuRYspKzAsl2rN(IL0#*Czr}#R-kT3LB3I%SsgFPV+*jRaq8G0mP;)UP>f$*4?GWw^(I{T zC#tK(+X=>ya%B3xX~%WSlX7%b z%|yO;qs1K59sCt6ojIQ3^}o`)y`2{zK;WfZz=~%?GRO0FYE4faL~!>QWnRZeKQxcU zmx8+~jCw!y)zv{K*O$~(vLbY~5ui4sF#@gSZ~iq{P_?FnxR*&#P4hpdbQF&RBXVx$~ZC8{7uEKq`t7w z8YF+?mxPi*xIg@3p?&Yb3sf?AE-7#m(wR7>4E$YIZ5)*!Th$OBEPiv%8fH<5arlN5Y7T%rDCz=GWUA3?3-p8qr*fK&x4d@*HD?VCv$X4=s%s=C z4RrXT(KxaJsS~AgDDeMb7tMmM36Lkd00ehxcVS^>Vq&n(OdPaRz`Ix)y{{3J0zQH~ zgt*w!xIfVUqh+7R5C{ke0HNknP3qkC zL?uYbQ!@~-rTQvvCV?c4IKJa+R_hUX81Z(u^5fQ+$imw`vLNxWRAB34X%$uD(V>$n zKYq5X57_jE+!+vpfdj}-W?{A!BcNx*4$=)ZZ&Y72c^uJc?t%hl6X##wtynaQ^@+n3 zpTL_4GQ6AcD=;?jt@_wMC@_as1xH4fs4w)eqW;g{6gVtXa*de)@W6YE5FByIU|8)) zddI^P6Z?SGqKH2(|44F%+fLAqwmMj0Awer67!Y`AVNr~N;!y8I?|tEL{fPEzb}FeH zX;=zwR)NHgei6uA?QU$?+Wm3^=?T`x+TWQVdhz3Aa2C94N9o+5?qG@DC{bNLt3e`L zOH0vNVc?(7$iuxk$B3V$R)ypKs8_P7pe>54h*8b2GxdVeo%Tte3|0LDS>vR?UD$p^ z+GMrRKKWI6i2Cp$O6I{hD5D1Mc21KEsM)lP0-%{)>*8;N#FJpW3`xQY`4u*mM5pa| zCk{1#>CFb&wO1rFa$qJDRQe!<$)Nj-dJ=P6B@~W0Fbe=w=1@5{mQj3L>9X~aTIy|i z;HRHolLy+7yb3|MLo(^f29_9B`SC^u1Q}yf)Wn~3JS0AzNj(zuJHtzn#J}#&5{4bZ zE>}P;5^@qCO~~;ertAmeT7bq<|Nrw!n15uyxEBnOm+u2QolO`u<;R8?QQ%p!!<@RD zSoB;$q?^-m5X@9i@tqP%F zU7F#-T42ajAM;qw|3`{?Nxp;_G4TYEz^GqGVi?pkfsvOid-oLHi$p3qM-hIgc-0iuBPkS*v-;lU0j`E6~ zUB)`?e-({M*h?L~n)v_jMuL9x zxhtg78&$>ttMSpJN23WKZflndpYaUEq5fnj$H8asb@1yE63NrIi-}`tJj!DgH=cg0xi&Q2bwDID4(H;Fi*B zhq)ip+14UWYf$K9`_$SSMmE!Bg-6`jqFM}fbP)(WRFZN|4xdOQ`00-uTsNlCJ8u~y+-1x#NGHxJ~E>G_IN2WPcenSpMXRh(sT#Ks3pc_Kr%+% zr{CR6F}6KcJA*s5_9{1odpN zry%#=-n2g_a1WtFDeij{_ps7=t?kVuG}ejRxHGl*D|Y2R9rPB7qt%EoadK6O!ivD_ zyyeEBx9vv7YG)G5p(!-9xX#t&H93ZWKs{_%AhyA8mbr@`)&o^5@-O%>+!FW9ZE0O#qs<9sn)7B8O_i;}G zND$5;Hl2=!`4i|^4q^~g*{5#3$8}N#POjavb`M!EM#C4|OzaDwZyzJxcyHI%&28?h zPD@oRC6uwZSNAdAc&Qe7{+^Sj`6iH-fm~l1nVKm@KAq4wW7Ls=<#cTp)2ixEz32V%KnL>ymL@{2k4#QG<$>!w3qW^4(`?y#Y2 z8&(Ma;JL+)?=T}k@37dPXW5&dCI7h=M)-S?mxuY4sj4d4T0v4$&*}`?-VA=!m+kd| zu%WbB#2=5I2_sEXQ_703R<|y-?Z9B)#;Wz}qThSzsHGRn42!Pyb_X9HJJC1Z@2I?( z`0nYu4)G4@My`MM>zAE4CZ||TrwTM1yBS3+D<&74e!ODM=OX0UBbu}?I41+Xh=x`} zb}|F2^T?++zaKQya*7e#L9X>`pkG8~>xp^I1~n&xblgoZQ5mtP?qU07OjSmuGc7{Y z(huX5AP_4WuVn{E=yELmbG89kbs8dg*@6r<`MZWV>6CdIbhoAi==2>3g26{gL{GOh z<{Uwrw9INOT6C+$Y3;(TM;ec_#cWivM`COfZKS4_Obwd!ga$SA3 zqH zK?WHrR5?jBT91y@)HoiSESB$)@1&Jc19(RH_H0a9#=u~9__w>DmfvRwbVHp>&R*j? zU(*ZyJlw!3(rntY4F7^Am{m)p^)%ht~!K%hio zb<~x-iu3cH`*Pr*3c9(_^o%;_xVzhnc^;QBU!v;!&$@qg+@10}y?iOrqU(6)nD#|n z!~4qRfvMa6-2Uc>I%`V}2=riSWSQiKuim8jxm7e-?9_I~eN0i{UbnUIPI858+n7RI zw^r8H(Ejx}SVeJrLUKGf)S^z0arx{XS03U+sHw9+M@%bAHI0|_onqu&zJL_p2aAt% zZ0!1>sQt{)tRg>CQwFWq#&T)QOtQ3XG-)CY^IcsLtYl(PhxiN=(l|`{$bQwPHDxtB zu7RXVjRI^vwNr(U&dcM>B5fI9vBl7{54i8o6@C3$HMRY993vz5zv#M$23^7q;qE8s3iLPT(%(zuO2!R5pK#A(H{(?&obfNPP?UoDrK zQD@#`nrImv2WAl6+-fW|tr|O()!0J##fl~`reDP^!`kWP2^x4ZKpP+z*C^Lc#j6zv zQ{uDK4E5JA+iKZAtD;Z;lc&Ao<^S=6bv#|2omeD1-E*(YiU0QxqU(QZYi;#NSNQKg zTOkL6w^2?mRrYfi^}ibD!TvyP?OZ&VE~2a7IhQds&YOHT`fh8K{zSv>Oa5`($G+ob zSg!7h)fdIytBb9jQfDC-kIT*oNeQ7t|Dd2sDw2Y@?O%;*;_=JH)x^mMqx!0XqIye>*sXt-;3tp?o?;O*oq%V-r6kmg5UaA@?3X)POb)%f(SF{c>Em+u*k z?P3S6SL2=l@&ulZ`Kjec>igf#EC&Fgf3 zz<1wL6Pmq*4O0gYgVPMw;}m!JQlWo!bo6X}llMMF;iNT(?b>9oa#gMpG!|p2{=JBj){*Ar6Ns)M;nuZeI$gnAag~D&9@T)enAdSCu-ri$wI8sr$ZC2bl?2K^+!?Xl8n zt+2XA&ucUKVt7bddw*vZQ)si{01Ls+ldQ9&O+;IW>Dn5pV?VIgPS+9zZm!*N z%@1+0HUdx)llYzJs(}K~yYI~sYjYX0@KvwchKI!0f3#R7C(uT5OVi!%W%XQ2(rljVtxd=pzPo78)AFJr-2+sCBhrv*f@O&Q8_$dZtgl~!6&m6~)F@(d==LR$A4@ z1qJ9knM*=jF$J-kHD5Vz41%?x`VIe8EeLMV(a|x^quDWYc~e*KSNN{c_pQjU+^OgY zTb8S+0ZH#YF|n$lVTm|RO(J@qG6K0Vng$Nj`Jk9i#p@ z5z+hR>CztZhe2IYvzzrYh|Hc-kKRR1nANfUR7+r{vurnOZP z6j|NA%adzk+ny??z2k}@ed3x zY!PC1H6;92UFj+c-Ex!nrAnFRoR9wSk5;K0(3~$nBW5+2G?+GI6g zL+9wZq^4l3dGw`Go0BuH=jXf57gn{&M=Qu$EIxi{9hV{U3E@kSbja9e%&roU2g1k4 zm*Z={`dU_2rc-GN%OdA%qjrVfzKU%^zzsFprvK(u8}LrhDtyY0o2noXy^HCGt90lI zZXzpjoAUdIn7ZFR%2g97?LtYq7D!0ZmCMV^Qwv|E97X>F0G_TF04#VC&aY_>Dw}oa^CZ?mav%E?P z2??0cyEtuI+uZ>^$!IHpv;5AE&mcX4;;8(0fUd5%$ax}IV` zs&o6PM_se%DVKq^cK1-&jOD-oeas6RaIuoGo}X(nnCiYXWMyUDZ4befRyi*)w0Ry85E+zBTYVhLJbT%KV?Sga7;tuq;PHyrA9#e_?NG6yb#g3 z(2}JCQU*CWQsC>79aADIJw0WVk-6@S$k>^my_u^g7u4&h`F>ug3u`x;)hU`NHKH65 z5fVzlE;D1+t1u6d&Y>nxFS8dB7UqbU?`sgBV1}R1Tq0ry^%X;7V-Fmh4-A=b0-iLh zp(x(B7jLd8F%SZiKd|eCwL(vD0~^4~iXF-zjy;>z*0;zlky7}ptxd=3%jp}{H_`8) z-(0rTKoaUQ4)TTDaRYMv1C^7aoDwP1w(aXo8EITx9HK&GWF&Y=;L;ZY55mG3tJDlz zwfqeTIO)L=Oh!WTf**Ab_wnP+-QB{Gi@1?jW$zZn^_AyzYpQ5%wqzoA?^@A^K#-#K zRL@@V9@KSbT~aO5KN^7(3u_=>fmlhc1J~fk_k-aqcNDRk^V#yAxFFYqUm)_9uI_R6 z3cB!vLgcNBq?sK!rjjkX=tP|v(C>=B!jk&;r^@x`m}ef^-jgjMA=@P+nnD(?1;9$8 z&n@;%l}OJ9B)|lG&?HZ&sZD@p6TD+=gal>)AXZizySuix`8{;f=bwQ?*3i(9lA@Qw z`{twFBfdW34M>W*;>A|0?;}&$+iM^>0O-ps>^=A~nOLgAo}52=JX1oXVh(Vo`3Cw# zwzZg}xUIPKzn}-N%5x4lBES3CDg6z6nSeB5yVje$+rZtbj8L?>sUmUhAEjPr+7Vt= zg`$v~&&JFmpV%LYJeMW8c7ConG7hkjiR-fF2(RxK6fwVv{|FO|&2~9^vRGnEn%ARw z@|N{52kxe`{rLuo_Yc7&Tr-2Ds$6aN?m0&7%&UaoJe7tSHuksy#UPYNh4BcJcvRk~ z7Wb)3ZoN;F?PzY6k@uN|`6^O}nLg&J!obBp$mq*z0l+gV4=%L;&o{p$wGXF}?_T8p zsNUMvh3G3RoSFqt-j54Y2v&c8a?8cfPfwj`X*%U6pJUHLGHhjKQL#}`=~e{d5U~oB zFqzquOsvjOf5pXD(=iqrl^X6ZOBCCXZZ3*eT0RJy9fJQggZNh9)(XqsxT4*>gp{Iw zvL7blfR&()%jx{WAK0_u(KX4IiBekjDXOPc{0o_q#CK~t%k|TXh{Z-?HI8u$>BW37 zFA0hHqsjH7DR@~S?2DNPP3+B&vXR#hmt3LH`Ma?X=mJ2lp}Pa~tP~XQDbs~&@25UP z1I@}Dw6wi_eNUgdJ`!S4RT`92m$YhZoM&dP3BBw&Tnygjok{=veObQ=nr2zYS%1WD zbsun-yvIcm88l&P-4{<{o(qE8HO{ePTwJmm6}6#iZ)8Y#La>y+`}nAN)SY2&s7XO- zhBEBv^3{8k^=jGDIH(aSWg>HVZMBVt!HR??OJSkjuI6 zxDiEv?`(J;EmQQc&iatGI(AT(8Z{YqMJkz3RB3>B+YnI$xv!N9V632^AhYY)QU$@E zzhS&h`G4V~wsUL~p>ISUJ_X=6pPqKCf?zyL_ts8))v7$9CM&BObDq39T{-LhZVqq3 z*tw9`Hph=e3A7VEe;!DqMajnUc%xwZ)p(&+m`meuOzHLSKAmTX~W*BG%rh zVv9`}5R`p4_k3pqqht>2VkHReE4z`Jie%F`jzbd~UDN__*jfXr{;Ry@M#1Z!=fAhc zCcx(Gb$+^~(7`uF_8D`w@Fdi%TsWCI#926<7>FLG)C|)sJYkOR8SZ-@1=)--3g>_Dg zd9hWH1KtUqJBArqNYp}Wp4Kit@*ya|QPM`k z{F#D@C^SB14Qp5coUQgK`q#+6kBTDI^F8C^eVqpW_9-#CWXcA#RPyGVNbKt zu*yb4+i6`P;Rk&};@b<<;{_h8&Cas$*!HzRc}_o_NvrS!%IrZU1^|PwDGh@{00#P* z0DGWctzs$z*Fg?Z+}E97Pz8r0Q_JwHFIrEWV>+kUKuFD5dbeECK8_MSr7 z-BZ~+99K84dH|rJ$65m?e;>*&0!`$lsZ26p;DEkOIG=G!3#aR_raMAu-U4EkuQ-A* zDI53UF=ZU{+2b&>$tba3 z&1}h>E9?N#fPwpwnm2mOMCJ2N5B6x4sSZACRB{$qipSqFfR}K_=Z0TjAL5YS6{QTl z^>hO;cS;ToJ#Gv6Z}i> z=w0;0k&wl9alfpOUK8mmJ3=?u!`pzc#RbEGXbU}SG*FQpgR1`SeSdzQU>V|8Xmv^B zzTtoVlJ*ZeBTjfG6Es?d%V1;j_U*@<9PgFRp|kxxDCi}T&=Qq0t7)CdvprnVq9nxu z|8_k5-+ahu{XmEQWA9nG(sZVtlOijhcZKQ-|{J0gYl?qCfrCdr) zji;a(^e=h$q0=_7It=`H%%5`vY-U^`3PZ~9)<}?<&LkgPpDK6fTmt98UM*pN#@$b# zYJdY0)yct{7YZ}xMW!0SO-dsVx<@V~2+WUX7e$4Pfu|+(-`;sHWJw+1Kuve*-#%@! zH^Tnfy|4h3)V5e1HyEgBs5o5c?TzZ$jU?}Tpeiag!wkfsa7xymcPKUJsHiS(ZqE=M zl9rJt<|0i!|NGymjtl+9VH}_xdpDR;FkNeZ7Kkq3=B5ZP-Z=pf2hg?Pg?IDcJ%R4D1;^T|KOISt7^}Gj=3}9IJ zOj6O-U;}#eXoY?!TSiGu+4EAG%vjyOy0Y@&cMg`1ZNig*4JugEN%r8+D5ue{?!*Hcpi$1 z2JM4#0c{`THow-^>H*yj*d3ax(AamLk(28irPT7>!{IfMLFH${gA>}R8K+FIZwed= zrUW|d*{_pO#(Ae1}9c*Mw!tcoT3TcTm)Q5l2?@W!Lesw#wW}cS^MnvK% z$>#)GjqA&?h<3b$3@TqNoM*$4?j!k%VMabT!ByB)fg*wAilOBK2uwxh7Eg%z?4mO} z7>;kT8hQqb-@JW`cYXo7&m4AtmfXC5H~p4?9g98)M;(uVSCXsm-?G#F5Rn%YnkM)> z87A?tfcvt)cqs&8XMhfv$A)H!zX9><5?E=!lr2~kHpy|0P4xbFvv1`&y%Ee2L9ab% z&_@O~cFctuMsxRPEgLC(9}A4{RmR?ny@l)!CoFF$yY7ghTT@-_Rugp2-8Pt8E#=LA~4t3FT83-Ulg^@bezrUP0BQcO7(rKQd*_G}M9@$Hy?NWL9BUuF z&iyququK3c!9$Y?(4f9Ll+kY@JUH#kFIIka)u$IHv#XD9Q1g0BtON7|~ zmgY{tyl?50O94d_tJAD>Zb={d<^37+56qFh!*#QkzkhJ>qRP}O$ymVq5uFcA5%)aX zk8s3}!=G4iC>R+U9j+XTS#S^rznRK1u6No{YQl*wU99rMA1kCcU8EsRn4(H#!U_6W zGZpu=ohZ50fVRdR$dQ6srIHj?;XEBT%(UggZb~De!8t1HLK)GTY5Z@KS^W~&g{!vq z#&S9An0CgCPJr*_*!Dq4oF`p){cbY{Lt$lq`W|NI4P=JHAro7(*0@FcYa-G(0DWdx z2R=Shj(l;nXNNE6EfD+U6S@*R@3Ja9fO(snRCk9eRAmtlYd_~Gn!ZS3*nR%qXdtEF zQU9c;G?znz$2&Cy;u~3U@gZQ%jWyE!dF{(Eb*ZHp#Imzf7r*;yqG?4QUj13RgUS=3 z&R3@43gxi&_X)`gj!n8e0zQ*<*z3yuv^2$nRR=W5X(G4xQ7m380Zy6KQs*rOg^4JD zrVtG{$}ehfpH8ALW&Q>AYUyKdI$aKn=!_seE%hPyJS`*}xmOAHU8%#1g}Zt0<5dPc zFbl=AU-rmsvLsEJS?1Z+Xx>f6?RcghAK^2S?Vv+GU~(7w3GcL?MZi*B+FQ0ODiTm; zs-6y6N8rWrNG-^{j$+w9;pw6q_&AT=dXiHW+HM4Qv%_=Y4}^a2Rd!Uy6a~XmQlGJa zMr-jWtMu_;-&@ReaD79&Ur0-l;c|V>AJKUSRMtfHgSI_JZ=bGn`2GNn(9tjdei%O( zX;67t#f~y97+%hm=7-M-m~>y`23basrlQ7ZuDubHw=9R9wdgTKO-Y~`HGYbE$ZjC` zrYE)tA(FvUvRgyw9h> zwbh+nL$J#YE(sxmrvx-?AbrC&i;>1stWi=pG?u?syxT-gcch|k>Nxj#nP1^_2n7!K z|E`3YiFWZjM_KH+PZ3Q_NhO4s-RY;4g#E*w`I*MWb$4}#3oCJ^dCu$MEgiU+ROG9& z)q-A_J??Zs1beH|cUh$CsALpALi~Knxa}AhTi24S;|8stT+p@3Zgz-*+3JjR<34V*|Ia2{Lp;7Eq#Bvltwk!owL^-vN6_fmS-!5_Xa? zyBGkNc{$FA`o)1vmMynSNtI@OHlp&$|A6Xo_N9VeN$u?lof>^)DIdOAR38(LgVU(a zyeQ%1rRz#+CQIjLIE`)D$n>48RiLmnu}$dpM1HMuP{hnr3v;*4;Nm#{iWgsw-P7B6 z62!;+-R%_bh6+%D=`$pD2Z_dsMybrq20+r7r90)(+?CnY?G2ZL575o$l<()O^7HU; zu(Lmk5nS}^p@o$C52SQxu^?lPuGhch@RVC=)po0 zDKlh`SfIiuP0+QBrktf>V7Pu%cP;dT$eVxk)AcDs*K-ay0RRf>jN*NPC;I$@Tq(_P z5%!gUmRv4#X4hpHQHgs8{Pa(g~$e{6bED2F>UAb4@V<))I1R}>~BI{u-ddqUl zhM4;7*VM8dY2_c}b$#|z*-&8>oZ%t~kz}$rV;LmP^x4@Ats1`1AWF9H&Zi+%&%b8_ zZ0e_p3&CpfxjTyL2XT~(gT)q+-}?p+c#{F@E(?$mRlF;sxI>q4d1~oax)c;gQpXXpdkb=l+qUf9Nb91e(6v~xqslu zzQ42-KK;}1r1Kfz7r|NzNjQtEtH$;VAJ=hzHG1Wx=;=kj1a+wLa-#tSH(m6wfGup% z3nBeSqLXz;&TSvg=#`5zAJM+c@VQk6jBna-Qk(g<5?*f1ZlNC>eFUo~YUaf|Y~v}3{M%dT>hJ0C2==o|p#kAX|sk2fGRX3Jz7 zkOu}Y3W~Z)>saA}HABoBxGVJEI7nP+ug^u6H3%~-bL}FG>pz6ksuzERkUxZmxBFkx zE}tD9+RWS`oNF)&h)jTIyrezH)tdv_bB}y?Uf7Kd^DGP=#eE0kWB!OmenW+3& zuK#Xpn;_o@8toUL+{MRJ#!Zt8C7{nJ|4?P6HklkuV?j^@vM&$lARbaz18sj0Ny&R@ zY2>Qn>s0*J68`|@e@NDU$cMiNNOyQINk*m_#7%tJfF1V*HRu0JakUvo)YkUc92OcG z$c2YESrmYWpt|0RFT;UT5j7KVYmw}>>!P^YA8T5Y`4M>QwD1pyzCr|=O|JgVy8$Hn zlUZ%SedIutGZ&i8{M{L7b?RuII&OH~26F|g;p9M10n zT5Fdhy%hb*Fu0_!Du)Kh4BmhNxTLOvL~53BZ~rHJR)JK(2R{GFa~+{f@PjPkL-gz; z7dm`EPfT&UV+o$@Vtmck4EZ-Dou&{QK|nUvt=*T+j|GPqh)e+;D;{riyl1P6GAv@N zTCyu;XQo<8R~IRp`IVHul2W>n88kE`Szq^?;qY>rg|t3r@vCm-D!M-9se(qYhWCH3$xV*(Y+* zXbrd|s|1&1eN9cFT*4GfKzVe@a}kzg18W7CO)m$4B>(>P%&a|oVN1bBaO2?TNgOk$ zUeF{1ihXsebsJ1OFt}bM%jN!urp(9-Hhg?>)i#X99E8=#Z6fKLc@vCweCPnudmdXvc!QlIhOw*<|24y3b;NqHGPS{O(N(% zSDb-6Hb5*DS#$N^!29~#q=&U842$}&3>^5-fHUsD5E*0k!UwoH(v35JnG8zMz|Y#* z_sCsM*ZT;Ws~{_ZL>klX`&Z_r2_isls5mw|uE7#=2N1}kALy)((YjS-vn|rMeAwBmaQc5eI&8=WKZG7*KFZ$%NleqTZGl}<@y8m| zZyn~wMrneFKE?z0LOFeo=beX<+WivOG(iETeWFhOSeq*`2}eg0xJS!Nef+xA6Mg2< z7SNP8wr3uGM;&dCg}d%!i^Jfi1~UN|LQsuzMhOBtKho9{EMCxPiD9W4tHK*51m`oz zs9mLi&mdS;2zn#|d3x9}9)@I>BKQ#HANP9%1bxOBu?9e)xX%BFQN}EK9ek%7!f>Ja?g*ZK*Idd$MQ?!7!Tv!*S zz4%gQCe#{I5~LkD6~05q7E%{&dOo4$6;8Aih7vJrARE_S+z7xFi)0Vb6_%W|t8;Z7 zxov0h&pdT6TB<*#p`X7y-+%e0`Hv25AUAc(v5ejSNNUMu)o%<$B*6}{$mM^{D1j$l zK2(0d`ceZS%F2iOYz&rM z_1=LHvqszMWlL?f?WKZmefJU)S)3-$RFMuk8RsA{%G%K6x zF9WLRda^DdfoJY$-Hpp6A@r+0mmPDB`l}#FBH+=MVgW&TW8-I9&0cF@>eiS{?6Iwg z|2Y$(ersP}d^jb2dPnKvw<>0T{Ym;kWi>Fu)C9glpu{)?jupg{*=uNkGhw-e<8($GBKHc1#bR@W%Xhulwl)q9tK; znR~#Os_R|qmFlfLTO57HkF8btuS99wZ}nkiF>+VeH#x!FNxd<)bUqA;0_I+TrX~lz z2O2*Ii)X~~@1`bB7i;@t6_fdI&&}`RewTePz#3Z>HOx8cI(m-s%q3OSn+}W7?sAc+ z4wsQhRtk~KXpt-5uOl`v*8K;HjROW%Lxb1#d*lUaPY?3?w2RH0@Z;kMMoL0L2J36H z@4tU7aD<`uml#o^X2kHw&dn4ShUBIfy?j3`Su?|IBr+Qg_-K`lC(E@ximWhRBA6NZ z%#Ve8!!22^qW@t}t@S)8i(DP)O-2H6P!|QIprXLJI_6UH=v8(o22BA%LP9`tLAz}` z&&z@#l_G2!Qws;3D}QrgV*l%V@i2gV_JC3IB)B^K2T&rKxv$SozI!-EnG?j1-L5=% z@cOmBT81$-~}He zUlb(w=k&SC7>9&iH~aIkpz3jGhNaFUA< z^C%9E56=GsS7S+}Fj)OT)y%R@HeV`W_%gP=hOg?Ad+}VT)6OxXURA3lxIf>w;VrTn zANm)@UgbXiE9WQS6nudI3jj|g?*gk@gNYP&G0_Fb=JND^en$`vDKQ*4m<2bfL@C|g z{;IX7{8b4t8P3%DfPFAqngJmXIV`Sa@O=Bt1>_;59}t}23Q>S=1)aiTaNu(_m~}b9 z$OS6ILg_(pqV!*&nTx`~q0GqGI0HmHqVYztDbrE@(eJtZv9&P&2Q_%QRDgb8I+*_Q zAQYdw+xSaSQCM&9C?Zd028eSW{Ca}e4!gZB|KDj%ypyq}I|JyJT6(UMZ%m{27;wn! zXKOH?qGWF^1_NH^S|GZxf$%4S0&&W zLawj4b*4ZQ3l|py-s8u?-PQ_(gyYf-c5{s5)-ZCiPbRW1E{x>g^B%hXYBBIuvnUPh{8Lcg7_bK$iaC1mvW@tJOb2&B4xs-*6RMul5^oZ-rB z)7Kssb-ZtMJwSxBSWoEPQO6+jwO9=Kr~gC|mhz8SxazQ{A6y8%)-3ZN3;^>DbARR= zo}N(rL6>rAu=ZlNPirCr@2m(SJ|N_~?xbTZxBv>0Ve}h>>tgQ#fPBn&Ek`}Bvi zfj7=@ai1H$-Pqb!lNHVUiAI#ckdPP}u!nI8c<()tVkvhYJ_Ya2_;opas9@%5-W?f% zN8?{WH=;2-BRUAo!INJd_mMeKeOZOF$&U38lLQB&9C!o~uuOpWo;G*SIrt=FHh^@4eRA zuN>bqmx1QBTXxd#=JiK{%U~FZd>1aA2U-{1jLxrue%>GTc<0&Q_4tu;u(jMh8kVF8 zzIwpURzayzS8oOZ(iSSJcJ-Nh$JN^W>f)p|Xq9o&4DfUj=7Aicllzs`ZFL@(9pP(O ze)r$WJ^)7h{x7)%NOsP5=JKX}wE!70);ZKrpfzN{g?b!}pGp?ApKkInwcdIAK{jt~ zwTMs*hT^<`dO9>HPX{^wiyzI_bo~DQHoiaCsABUid_*A{K>FeK3o?*?8fPYJ2FHww z6m8g7PN`2U#qtnSQJDN_ge6Akyy&@1q}ZOMsSeqKx82Kpjzy^0uc{oUp5yhv9U#iX zov1>zf8Fl?;yCHY4oRfd$Pvjrqpm7a0Ce#K- zpbsH(IT|Kdk@YY2PSIcL9i&RQ_;67eTJ`c~6EgJsLmS7Z++j@4^BMXLvS|0PDotgJ z02Wd!G&6SpXPNxvm-eXU7UP;4?WoSrc1xp7f1Svn<&v6MQ+^W^)A`IHw9BC|Y=!*` zgq9GftH5zFiOXKegOz*p<0cF=Kaj8Qw`73ozuOJHpm+?t-E?U0;$pqfOtiT@rnn&a z6vVa%q5NRrk!bANmuyGSdqPqIyPqb(R|*NqeR_%uvA(NY0dzbk-RTAs2i`l5`slJh zyGeiZrfT_m<;_nbs_mQgG+mL)3rFC=1$yDnkfqQ)m5YaV6Mjg6h<*$Y^05UtFfrE7 zCmuML$8+{UR26$ZSa~zOJt4rm0s_2t$Wp}bzg3k|7eUG~X(@{vGvjLbKg!7!^?vSz z1f1u97$%|qzQSh+9Cw8YEt&9-hF+GtTT!i>PvjfDP83})@9PoeP^_&d@s~u>bk98O zO3}x`WyiQBXux$5AL8Dd=V5voDx^VIc>mLbDLedL>xxvpFQs{d!}{`vBnIt8LYa@| znsh{kGB_oyZzyY*!I#WjfdQV!q__JlzmGTXD2_!EA5?c`=~;8eB6|CPUbaD}1{VWx z&OS#q$+}#Fszxhr-qg!Q4bVnitgbbc6&OA50C(Xhz1xvH@r93uIBhscKHj*@S>O$K zL6yzSA$Tyb*`8~7o=i|p5?OS&`P*UDE4|}3KHfw$Ia-2R6fbdC2*_`+Dt{$%0}R$* zK#J=qo^LsQNY>>Qy3?wN?9<=3gKYAjZoiRTjNYSlN6_o39cD-|3n<_?F3tCvtmNMb z(d0h@4uh+j9CJ~b@|B#fd&%f{Q9L%&XMpLIV^&F==5t~tL>{VE`bjD+HYrKU{isO) zp7aHb+=8=VY*H_$mg(?MVsOD4BWD-paP+-+hnb+OtaR07AW38C(}2f zH4_!9yWCqGLYPMuiDR;9sB(ErPW!Hl7<0zCHJzm+bBZnc8^*VZpFVd21;N1qr}W@) zBxf?!jzudG2ymo(D2u&7W6hPE0_ zG+fywsVc`;MEM7kiv(l9LAFCI7eRjV$l~yuK7^*>ty#&JUd15JV=3j!Qp;D9cgl{} zD(;kgi`#NpUT$9>AbWNlST#Ar(-o%V1QpVgp1%**cHCzRWePhYz56sZj4Q7BXVA>R z-V+y+hkIdg8Z>j8;>5+RkKO0o{e7bjjGsS=D-Z0Wi{)NP^(DgBML&Jat@qQOL6o3H z{^vmF)W=$GJwlA1dHCF}LCI!}R;uFL<|-pHnfv6pkoB(@;&pD_`Mt`dK0_fRy;Jd? z$UeNE#%0U|QgPIqbI?r{(IC9N@mN%4cPBOGv*X{l17{ic?Z^8?`xcyF#Az}^wu-{8 zd_!jW?*YbKFC^~KBbkSz6WLSbAAY?rW45WCS5y0c-5HnJTK>UR+N%#UB3ForT(HrK zKD}S50w7M8-J4baPJ4g*BCf>aZK&%tU<4R0fa{Nzfv0%O2|g^q;ZvLJ>2YD)E4KlNt<}rRDWdRPlXW#B!pcbdVe-QMq;UET zLiut!2NYnx&Fcmko%J8aw|d&^6i55^FkimH+wyz-%1X(hY>&t2;tV`v{d=H70=&Ue z8l{Xg4e)fBS-8xbd-LzEXnMm;qL>r_FB}?c4tO@tJ@M@S2z$E+1d%FXjI|`kIX|nU zCt{!$(uvSXJln#PJGWCzTlU&IfmWN7<9%bJu8PVBK5rENtIu5!!c+4 zFLxbFDEJysE*oAsiBy>o6ltv2E?YcFt*m^4j0#xzE1(YZL6(GS!y1(6YE@~f4&s-v zTlvQ}WG-q(ycys(@GkeK8tj42WNg6|TyBKfuegI=1GaC-Xz1#9s@tS|^#-w^E^)Z9 zAnpC&dO9S;(+QM;DBxG7d@B@N?vk<+rlP62xw4Y|qh)PvO+i5cC|`<;idO%DAk|V3 zlXuD5f7)f8o?A)TD=J?;@_x&*BbB>#)9L-!(hesuT>?;pWRFIu-&iYYesfU&3hK32 z2f2f2B&8O2FRX>z$n-Ee$65kBB|^l`?k>}#N0UBaCTq)nI~D>nA8xNH5eP$oT^tNu zH9;`*2r9kO>HMKK9<%r&Zu*;g*O7Uu96uzkoDAGF0U6m;krpS6h^-NrT4aj&dwP1Z zx7{60{FQ$y<3W0R5e9x@8(!9goJ&ukoQf@vH*+%&DKZdT#=d3gRnT z0y7yOJg|3m&bgVZb22|#9|S~xlNVmKMex|GN^`OwpN`#XJ$$>`C%jfatQ=!6FfZSW z2+~LF@~gRQIzW_HUe3YE8P5(HSMJ){)4<_!%g4*p6B7&TxfytmU{M(r(qnu8eU}D& z1?*UYG7>SYJY|gzk;I)=H8a&+i3h?5(5C!VD9DG+nS0BWaEjQZR1B}2f|UE*;Tg$ zEmC>{na$RJGJ&hy@yToSIF(^z)5w63;FZz8P|$t8uB1_rP;e&w@ey)qphpmC%Hlj_ zz87fS0^JGSMi?@_ql?Sl7`ny=w3Sa1fpm{?%qWR=h(Y2UL{C~)qeytO;f9=QJ8X_ML+5#+?q4B-!@kSyXpqNG zezj~2EEbE;$z!3Rtq62}wu`vd`|FHUl~y~VGAZD6o+RY8PNh7dTgk#W+RPpSyE3pR zoVw!^fD_DFtpFx_T;}E^`(=Ha+%>9sUtRZC6r`(LCL|^XRs^E5V5qZMI|CoCWgIW# zW*GX8I1~rl2tb!YZPpw#P6j5tG^Akpc-oI_WO(A|fD4+K_{na*5##=FDHBM}#m>`| z?#4F%`wC64&d9V*pm?jOsF1GjpPZZw2tYY7cMj9_k|W(fVW27{@#1C=IS0#i{*62# zS*Rs0J|XxDCG_`oqD|7#eCIZx=EhAq!6?Wuq4HS2_7Jw%QZwFOna@m+J4QkRd5=+#u!l@}_5G!uzfPmP>@I_jPBq zXg*WBPb#+!?0d;QB9gq@Y<+`QD~5TKL~Y-J15tZ>NAR~l-;N8DRodSWrVkC`^qDW? zz_)3$!cSyC5yZ+V5G#K_!wD0&d{kztiQw|5*Cy$O;DAL=^4V`&K(%Q(S?ai~e)$da z`|j64@#V0OEX>v@)1XC#aQE9ltCGf!OPS8|nZGvy94D|3mHqE!{IK*AwA`3!XQaAS zR*KouiSZXRWt3V-cV6jjr5Q}w>B zmJku#Km%kjZ_8k-uJ)AFc{L@C(HLDd!ToZ|ED#K{@IU|0@8ARIi>YE72cD;I8Yx>2 z+2pNRmmhVhD;(ja>Ebe%kZ#`^*D0qImO=R5L?(QD%g; z{E$Ieg(M;2Lj}0JuFA7!4`e>?=R}i$A_6L9bSFUGycnF!Ykxl<80+SUO0zDr=os}L zh3DkBz5F^bF(s(_iSwpZ>u&FptIrOVJ?Il+aGsM$I|B~oCbG8m)M%7Ft86o&LfHcS zP5XQb$j3DCcVN*zCgh|QZ`9wcN#MFrXL-9g<6=RN`hF!$|A-|Fy)wB9I7rwS^&D$q zP^^#C3r)?GEg?g6Zs;PE)$e|5m_?PB?}R$tLB764`*UmT1k4NCwx)XYEy-unGm0)8 zs(|-1L28vw5wqyU(_pXh0C`6TOPn0~mC1&)DqF3x9Zf5l)?3Qq6=LUt~8 zGt^?>J-+hS&2iqv|8@TUra%7e(tIXoqv)ccu*>UuRxM`cJ0zOF{Y`pHN~Krt zfP%#UJ+(e&-cC!Yz-CX$n_K?QQF$UvcOocuL`ARABsMy4c4G>)cq9Y)J-%2qWiXNp;W`{g$-g48uO_CX&q3_MXve|-QVs9+UW&x+%qzApin zGm9Q@Idg`gbaf%9yE?SvH-kKNXsLPdJ=gJ`*_(fD>qK_EyrF|}mO=>8=W!(cGSVcf zt*y=2SazwQ!7ylV0_NZF-or%Cts&E!gtRnX;7z~_12cwk6glAUx$~@zm2P}EYRJ$n zS=UQ5pODEc+rLXAe>17j{F)%URmjX#jn|$*CB;~;7 zzW%4oh`zBt3}rS$6D`P$k~csK;-JRVlXxVfFv;PX?SR;*=Zwc zwFQW-DS@Fn4Ng2ME;yo+-rAz_IHeeRFPAH;L802UWy+qM5lNKZ$`hNE#KaqnI#obR zt8_p{%4yo30ZC;#gohoM)5g<;Nw=T6d$ zD39gJKg>l?W`U)oAtKjt+s&s#P|Dp_s3#bHv9fp}Q;onz&l*??%G9)*pc!C}rtU8^ zWvW)C0K*DQA+(NZzIv^0xDNM^cF;O^m%o;&=?D6Fp48zUl_xNHDXIIi7Hkic-qzIA zyf0RX<>Tis$U#pYr1&$_?>z6F&3$K(8)r5?0Pt!?db*5^3|+s7f{>8VS(41V+MK++ z@0aW&M!CG@->Cj^Zz(gX_yY>*yjfH|AN_V`>r^%<9t&q>WMs%3>cuu@RI!|U*l;@q zj{{4kRB%|QDEzPYNCjG)dn!X_^S||&+0j;iJp2R|@Z(UzFz$z#zEm4~PV8`O_&eRp+KgXOwg^lJ1*ECydr(5WTPiHQmc>M&@I7JEHV{T7 z;wKK~-xjY`WxMZ>&&}!4vy{1UQYzE_mOf5@S)g+V_7L~GK~ycnuofe3KKV+gsF-9s zr`wZR2P73fOMx2%_+}Y=@e|pSc|d<6T?VLN@uj>LBTOB^r@P;Voqo)#@xQ!%MDSG# zooS{8l3$IZu3l04QQ4d3ei1?8LuZw_1`SNPSgneHqNOLlRW`m0nePC}iJoz|gbdPa z{nrf_*)25J)zyK$5`&oh=FOYY(b2cIQd~tjIbu&sBqxG)xUJDdxBo+Ni2<74phSV+ zfjPNnSfA7DLP`!~898A1RSWDei?=Mnt-f$_wFu_ z-3z%sK=;5BZu4`yxte^Q{i3V0*-J4<;jQpvRKpBS`78>_yYnjm3kBf*Fr3LGSi;b{ zS-2s}#vcGws^cFEk+wa6S%7=jJ@|~E0Yjr?{dD)cAH(^j2bc(<$?>wbYR7E55u%j9 z3rU$7Cmy)H6^uiX>&%2rwr|@TM=w+J-d$ZwE59InV2~r1E$2U0V{#T2_j^L+YAg&- zS2dPaz*Gdk8OM*WUIqhGl!tYEH%r0qi;Cz)M6TRV93_v%JVT>!>2H7`nAY>M1o)x= z+CPx`j!lEMK+bCf<-CGHMYVPgTq0iNj~-XzIzBFLYPuDt)lqE96W;_;n&rgi#pJQY)HXEC0xlaeR7;ak~l^o-_fpY#rnYd}XXq}a%toW1q? z&eX0o4)AeWa65WZ8JG0J{rLexj)Gb=bhQ;csQ5R)6o?O16q*9rHWfa;R1``dyuDQJ zIa$j18if^6xKxQ5(GWvD{M>SVz+lPphOrulxt$=i*ZmKzQJNemU2tbLdS(MdpVuyc zbS3cXwU(cvhj|1cN-mk<+o?c#4VtBIy zh8Lm*#&KqSd#Fq2&$Y#u*?@6}E|}B#0q&W%+!H$vhy?NM8-MGN#R3KP*;)pu*%ZN$ z7+qa$C|`WwP25N4?_a6kN*3i8!OliM2nM_Zor+Sfkn^qa{6Rq5GTDV(Igd|NMgH3V zRFGajQwKcTcGgzI(mNKXpf$srzRckp2dKD#d9WOUFpOK@JFOmr`HWdGI!om6eKDhQ zq2KKqeh;AHJl>*}9^7FN{#UCsg=<#Zg>&i>x$CL_tGA~8iLovFw}ot?w!qxxu9^EO zpMZR`qC!Q{BLdqPlRR0`#%^ysbcfsWLUjB8wi9DTo)v*1b;3T?95eP{RJEb-3L) zAR8V)f@}NyS@c z0b0YX?C+BYY*8zMjXZ5z^2nfP!h_a8$GE+-@k!gH<|$|EFLuakJTnl(Ho4e9-Xp)k z5?uwDiL2KAn=f>4o`rffKrMYiyLeJb@7*@mwalpdF zRCa2nzwOKAeVAL6PmuNzMDX}%YGblLe6JiPL>;_2YP7`J3qO8bRAe?GU+n$-dE=K8 zNI=?Q_p<`|Uu7f!JQytEt+=hmrC{$Kb8{y`l4ufRV(z~i1YhJig<_$w%M3e}vW+sl z?E??2gW7LWOk&8Ya0Ig7`aJ|uAi-ArL~gAl!lw6MKqgWmyBao*W(~@5CPv*6WWZ9Y zk6QxAWw{e0mFfui3K@gJv~C-WlK`3VU26Xu1u59|yoUxCMo1f8o2rTV??m@4(zp(dPgI z0;26*ZtG;ClUa^~XcnhWSg&ypDFS-U=0Zyv;GCa)r+sDgQ1&hJ z=r$p4&hH9^2RlFiTij2|{u0^|C0@T-;8bT_;Wwmoq_zQ8gYFh<)~TNGjRdT85|Wab z<}kG+&JFtBJ{-#fGoVeRO-yn|Bb6sX?Y6J4uQgU(L;-l+1U<7dd5$S9eK-Fu-Lv;V zbbk5sWb;dQd`rtI;AEAp{>2$m)=Z9=ilw~-_2VNj*aG;$iI%}dzId)XnhMKc1+{Rh&0d|ZiuY?kVaV{$QB`VraFq@zQcs-)BVB8KK`ghc_|)>oTSSDCC9~+vAzb%Z!L52dLJ5 z;gIqAstywUowu{3E4Glol+Jh7?QNo?u2-5Qfm#uWhu~}2Hx!k|#iXfkV+6N-(|mm) zjN-FZ(nCwbj?fdzYzgQH>XSLrwEQ@}PJcU;&GXEYqE^%102TK);37kvU_4`~D%zj$ zp1#BIIWa^Hqkj@>^&!@jBe7^1u-xI&OlHr$FRGoPD|g=&?yMvG#IdpMK_>)|$mob< zeDye9N;iY7D&h>i^a8Z%_Sw^s#l;`m6K2fx+hTc~W)h6j+i*5o?zm4?k=hg5uCpJZ zaw6w(CUNztGSd27n>-$K#r^s}P9HL1fDQE9EQW|0o5aQOC63pPmtV4_qoexXG?Aju z+U_ozHvZArZ&O%vcuI4)J)tbz{=88*!0`8aF=p+1Y6?|)^=qum8h?kjLd70 z;qr0g8zc>A$CZT6fC*LqqV%+Jy|QI%VA+}TSCC4o9Nf<>`)>NpsP%bmO2@zjO!@!| zCkdlVQKFF3Ya{c&`0!v^>5V{U3TU9!s$X8XcmN*?*M++XNsD{H-N>n@KP4{i3E%>l z51A~r&}}byQ>{5o@QWATx2%0OD2k<(1km`y2WnFaD^XUHrBy**roO zxx^fvYr2BlN;G+Sq)V*aoE`K6Sp{{@=&5T6;K<;J`hhyT*1@F!Un%nvBeCezUHO%I zAyx(fAZ{1X>;GL?qq_;z0LLT-M9|e1J?inp`)Dq`MS;KdRFjWOBi2lYL6TOaj z&jTb(=^Nq<`1+9DL$taTtJyzUhHUA{{6LdwZ-K^Q!7uX~SYmWNQRfGS_>}}WnRjKC zSW;2!#nceWK{uTcg81rPsM^t=J7p&-SE?{NytfS)0H(d83e>~Kq~aYh-<^hBMEf&x z+eQ#qX7u+|+`}l9HDek0=5hMz&5_@H5A$Y@tDP&y;2&E>NQ$K9&#jUx%gy6u)(q$A zcAFH$JEVM-Qzqi+Fk7TN{vW00n0q+v$LD-Nc)SN}2YOCu(1JuR}QO zAly^~@oUK{D+2I+zcM?cOoz6ldd3A}#CymB=NzCB8?E|A3dsETK;B&gh-7(+=0+HA z*p{P~^P(}-cCS|^0!=e+7t|Jol)PNLTGs?es#6+{pbrh(o9KH!!>#xghoDP(_eq-! zj(TLGEcq~NneSPz#jD%`4^mc@{An1SDnX*wEj54e0|0+=jxyWtUV|`{#x34ZSLFq) zcn}CPWJ7L2%G~(rQjRB)RNq1;EAKjTWEt4SpfK$`67~QSA@+bj0t5!c6jL&A5spy+ zn|Jw34H&3I@F!^s=kk;F_xFc~h5dR%;Ds@$5qK{b1TMo&Y&rGWIZwBAmE+LX5q$KU z8x2|5J)a)3!R@K9}V=h6oky0}(|%X=0l9nB(4zs@Kjp>8w{9||70nT8kYRL;1ej}# zzZ`FTv;N2N#tit^t_l$qAMIpTB)Z z^r%ymjqMw-;ObLX^@o%} z6AK;fr=f;PTquMZ?bN^GbMzmM0R?L7opwc&)UU#3Yei2O%p5JZ+~q){H>^UU0+v&u zz&*nvUjy{Y@FJ#MGjDIN*4ENeQAHyxH}&Cgao|}msX`8NoPnLylWQOvEu{m1J8D7M zpC5x4D>q0tvGdg@(Wp*j{yytGtuFB3F4wSgU~80`Z8oIH&7hJIF*P+s9@$N&29#4l z!)<^S9T&&1tP$Y@>Xryypl-Q@rz%1$!_g4N`S}IV@&KcRV7w9v_SSGh2}(D>p%W6a z1q^A(>wO!MZ%2&U$dRsbYQLp^e|H=s)V~;x!0mCPwR3-*$LF9qq|tA=04KKJaC{iR zan^YW;My+`fL+Yco87NcczLrmSdly4^kG#e?|$GJ_UN`P32Yn>5kh#^?l zj~cj&#{gIP-aj5LF)fXPkkBM5l@BtNEcc2d6>q9edZ3k$*K_85%-kJRsNKBMyEhmE zGMI2LnzXqn@u7C*Lr)r7bEK&lzc=W5NWH-m*Xk6BozQpmn{K2 z{mdWrc~5qo{jWx+oAcCD36n#?8m=YAj?##3Lp!5oAn_IiDr1pL<^y1B6f=kZF+ezK zQqTp4(w6{ggb#eZ!iwo(s;X~Ao8=hVqlBC{?>e4MxznW=;-$;u)*(GxhTF}f;kcs? zeFH4%`KH32mdPcC2fzLHGfoOu;|ArS2OB_F@&}kP_>V#k@cTz8$yl@n$v(at+yU0f zC|HNuHthkvV50mR?$i+y+LGq!6@VAvwsT=XNfZ(Ux@N#{H}o>(%M%Y4It30;52524 z;o6q1xddvgzYL+HUbCz-#$hFa2H+RdQ_|SpqgnMdXhFalC<$KvEJoX$n&Q%Ga>uPD z%F=^j!rgK~TMf=D7w|?}>pPvlq=;(DlphprR+CVJgV|qC{t^NHcH3u5=k{s zYDQ=&Robv8SUz<{o9?|%EMBOLY9FkZ!+{-Jp1YETu3{R-{j=j2Qt$yKxDYjFG7&xUVdX~HhG~>mW%psq9dzZkga(1v}u`r$jO6DAR z90pT6mFOX5g|{oq1b(?C62%g>h!^EW65`<-WZu-)qCGy69^GAEEt;)jdUriLGlSDf zi#tfitn3}P`q=O^IpuIx{Z~EIz-X!6fr3ZkbGHKUMu12;0co={))!~Wmf2Y`WlavS z95U7rFMH9yoR)U8E}tt$2RPyQSM*YA#O+1vfteGn=%^^i0p^>OwxR=y|5yr2vyNeC z`BxuI>#z(J*w6ClP`F3WCtzZ#3PR)HXMn_#d@%i!f0Lyi|6!U0rm8w`BG)2=VDL9R8RyQF%pDP2?<27dn3NEj^?Y3 zXWxy|ex7J%6_^h>z4^{Ov&ZRSMrvU8Q+NKyk&xia60M4#0%=+=y?#!=oagGqutvP? z;!vhv=jblo>vB!d-5J29$)1ux_ygLiPg1I2Xh_4_rs`Yql{zUUrZeH4Xb%sq1U3wIbX8EDX5ce%`Ov$h)_d3cxm3N9n_FE{QWC3G zVj>hl`c4~q+_#J&x9=70>1-*~k(8?hqFn8j6QnP#tN?YaN|{KyNwuntFOZ_iHJJWg zh%9sDj4pX_fa|oJ31&ZnEBjXjr5Em&gcKH?v3ln{Wl>Sp?G$GB`y1Wj*`v-b>Z8dx zNns8b&g6O4SG@Yj0))`z!!=r<*Y8LcvQEZAJH0$LgVA?el3m<>{7wSt;U3w&1Y$Ob{&u4f8St~Hy}eBX(Ju(J;m&zKRX&8 z+aW;8LEv}Y6Le3fn}_(duue_A6n%EZ%g0@|;aW=rra&ml>-FAuAAb;CtaGpU9?7@t z*1CdLt?x1Yp;EeA50%tzu3cWex|fOl39o@dseTUSvT$DUz@zJgLLo_BnSKt(4F7Pf zMqeKb8q?sWCjR20C4klI>RfHL@s5t4#&e0Y#5A7%FB?KYp8+GVcm8~K3zO+w=+c^v z*Mr9z^OS6{qbq=)`Ypb1x$s*ro^W)c;N>H+T?GMvlo&4aS%-f$uf+>L-eN8c{`0FLs$+5v(w>2 zF|-H0z0YYS>z#aPd$8D!QQan|rjB=}OglsTmahn2n;_00ImciKizt3B5ck>s0qGen zzx#li+lBaEi?D7q(nbNIdGWJPNTEzmQ47fV$H_tf(LDNeex~@7+# zQ|EN9p}%%G*|`D6kvw0uo~{(mm)%4}Ft0`I?+eo_U!{L*f`vTZ(w`Zz4vkRQo-t7U zLi{tHnXa>BIW6>>awRD(ZAJ2)sm%4s3Qi4wMEYc|T#&JQgAvXP$O|@Riok=#Swa=e zy40B3PuaQK@4c59_4?^HpozgGP57zzxSC?fjy5`Dv3A%Ut%R^m1MD1LRY`u{*xj`< zortDxw4)z3%A7FQx1lQQioh2 zCiSJ=ooq^Y{St=Q>1mpwq>fy44zz1|0RaIaA-AxPl#d~~C4GG|z*SvuoY`>U=}V)% z%Exw!_tNh2^AmK#9?stI35Z?yXIHc{3gSMxJouclPaNlok#0N)*AcN`qL&pwNY?tP3$&f%k{riJwmeZ3pfk%o? z>nKPsn_-6;H`k~8V~RT16zlC*gNh&`udGsE$12E0sCFo}Gdj5b@Se=-sNgh@VtODY zw$2DODI)+v+)H6V0YHw~`f;=GO4{!FSk!8!nrP?V&1>@Ht}_hPV2zhAqp6!5Ry;8% zvRRuM>E=R%RO6p4Gjc@AW%au_IvyS!6&4nb>Enr6713D_fvp;roX+#oXlMY#!yLto z(<z{O;uJ z5AL^C=(oH}he^`S&wpCv{JGs3IKN$i5~4Tls(%HT*U@_0`nG z!~_);6`1J8|HDsCubyHc$7V=NKqy7X<>sYRv`r`mw zVeDA74O2D8Lsr)JvLs9|zyGvm1B!qE4Mw?rtBLItaM-B>8)N9r=}qcUgXa2%9TEgF z0_;4PN}z_i;Itc^}J$rkSykj@$B^`pJet1;gyYKENuYe zU9!msY;5!G%lV6ocjWVf4^(XT&@4;nIJIv~oZ}jC;Z`C${@niAF9*g-&#myYB`qZg>-8VQGtG_?a%PH+W zdbd2D(Bzg)jNEq#m{@Ks*T?=(g@qO6iRBFLa=linC@MvW)6 z{h^^PBDErvY!E`0;XI9Y-lUWQ5Cj^^>++AK=^Wnmuf7u^1RfB`9&wdElUE=oAn@KE zXMGHLSS-@^Orcqgoph}O?*@$1L2Yt>dIJ=K>7EUf*H^o56Ti)t#l`J1f2ta3Z|~-^ z2qrt&%2~~GrzW{MblTu}EvZrRuGhz!@arc|%x>P)F>cgCqxsxf$`E-1Xq8dqUb(D{ zjJ1so;E1P9BBnH2T!+d%%RW(*U_7y5uQw6ElD^AAerBlgiO|jcr>m3G@yRQ55ipp_ zCMZ0-sj$$?;jw!}@MB(JMw1W<6gKUzHg^l_@%$?ggvlMM+$z^Z6+s z#v`qUJw$1(H2&NHt@Jz^M7#$@d=|`K;VCIO1NC8@ur%-F)&5R6kZ%BAzX!=dLNB{g zM@_%=26ny|4}UP}cP$PxG0J7}7A=&Mk{XdwqdNg01oN z#d_I7I?xSJHY%$g1HM0j0~jFF+wA25JNSIrE(CdKdGKCbg?%4PFhX-~?+qqh?Ao0n zGDrpF8$|t1SPuJ>aK)@eINu}3W}e8&6XsAtJw{8LK`n_mBWb@4_+bBAw0FG@(k*D`Axx> z9>LREBD+&&R}w>xUOG@dVhK2)-ve&R#O#4HyOysh&-7nVbnxb)al z9JsBS52w3@#}jl^+sG2$cO8F#XRp68lt@Na_E(Vrc9f%~xnBA|jtxAE}fcJ^orx++ZO*(%S7Dhzg z!NC#V`Rxt}Mw_OJUWNu6BowUqGX;fNfHWNn&ZV;i^&y_$=Nc%s(FZUV0`IU0c*q+p zmbUq4uv224TVBKNH*3R8H`cDbGr67Cd1DCrx5j(pO7=nM5Ef?4d#9%6p``#ALgyN7 zfdEoV8f_|Vz$5t^)Of#$oez(V(R>c2i3RS$Hqd2sZ=bL{r}Zu%N%UiujIu_&($cP; zDL187!hKeI1~su;I9VTb4Dv{aQIlT^3ZuaM9U|@LWM!&X{HawUIu?u73aNxv0LU>? zN8aw#KsO1qYI}TN{ex1zaEYL#6Mv=w>iSx$rxOAu8W&C3OO508!PsptV*Muv^rJpW zgQ|LZHa0f$r_G{Uw(PXt9FMcl8MEUHxF7Ezy;=Wb7b^*jV`vrbZ~mlc~2K@Sdr98O9;a9zJUJg zuwrT}2ZGU5`N&fb^{(!rRNgNXq?I6GFZ5~(4N9mD__lAV&A;Iw8ihe+9I;0$w`%cJg^5Ro354!7K`qq3CXR{B0 zF)&!(BWM?iyl3d~g6R>G=-T>vIm&MC=aexRfi3sQry3ib(GYutTE>S=Gg)(on+sFx z?x`LPh8=Yh(bt=F5aAXL4MQfy>7irS zgZ-=1A8$zQjbSI>(AjA+g>`j1+XGc58t)RyS}6uQ*$O#q>U0`@ROO&c2m1 zYWQa5LBWqu_#GKPwrjci`Qpd?T!0gqmR4CUxiz`b&2??e?FE2}ja0k#2O%vTt>nNy z6>0NXog7FkcyZw9KVD>g_Z>Er#Q;nTu5GD~j2$eACNlYql+%nsK8F!2^C zR<@>EUi@Be?5zHwfq}~MawEuB+AYzbZp8ue&x)J$4muy^4!6&x^J{Y36rbGW@POrY z!sK!Pfh#L`CrOjMrtS$Y#*fOB9>T;r&-0#4kt_COT#EHKA}AfOa?`9#KX@>EdU2bO zeI6MVI6(;TPhCqf6(8;8EckbMx#;aj`bN58w|-sjA(WPz9p)is40Ej*Vd-KL@*(6h=l(5tbHQs1vx#X8_~{WSuy5IOWRrA zP|oWO2&pSoJ7sN!-2&B_5=@&U{nkB#{op=7i`wdK9iuCF>e}JyiDtkoX>_={RLcrD zB-#&GF-wqk_Ll~0JuNMnrl`?g+mp(MJCIs;a$7xMmNRh@d@$D1q6ZJNmUmeTAAKZz zm$YF~tisL+Ai@G=>%4~@<517n>B3Vj&o7-xQa5_l%31f!`?H8yv^%ROI2DU^Y7|H& zwxgh*^w}sN^8_{ghK4I6Jk)n@FNO*L;?@v?41>Zk+MZ&{a(LQ<)rymxbQt5uMIs40 z!6aWP`)?r((LziRAJEXE>d^(6tFw7L!+B;b&BprRVUj*oq^$xq!AAQnzb9#*Bz5+W zJP?CC)v0Rg9#E3+F!CIV0ev+9xeP`$zFQX#%A|%`Yn2N zJQpM|xg2u>b8aNVvh4AwYNB^eF3v?R8)X9{O|hVZ*MT;j{l_u3=xSyLhDH(2HhvE5 zH#-XJV2f1*JIL5=(z#8=5;z)jv;xm8D8TnJ_I81)f+VCz^J%E#)l@$xy%!NBexetzrmB2_hRqNUx|U-om|NQd_FYIDO0Ah96NzN=^=C03X6OY1eez{nObA zx0iQ7MZvbTbawMBM|;WQ17Q)?y7<-gbtJap$lKeW+?y4F4i#`2IctL5C3tS07t3oqF_qR@JwOP#51le7J`JhA3z8Ki1N&RXz} zU`mER)Fc@QPg`NtD>@U-c5e_%C)BH!V*oR|mR9}h23;g%m`3#$n!pkM6Dt}_F#y!d z02ajAGGjh}jOve4Pa)KiaXr`=2dG7Wg>43kN=_RJC>fbtevSaaFRcf}->fcgexb_& zL!ygg@=JX&22tKR-82vMZW+qmev2+zR#!HbH)c})6mACA*2~y)b3XjdAq0i-MvDnS zs*OIYhDk%g{AA$W-CKBF6JHymWSAt50HR-JjDIrS5-3L-zn{p%&Hc5#9j;)0gnpb0 z8dk&>stu!hPS*gMf#qy%CD15IL`X0I)X_W>VY%DaWwiI>{e5&Z5Z za>}=>M1I#x21bB{_Mu8HC?ck`)<2-2pwRQgv>IYCga1oWm$)|{aZ+>cfaKI9Xh2a( zO^t{V`Zg>oihKS**!4(}jv)SP3msj?b|?dOK6oc$5@?0)V4%~7$jDb|+$_P^4!|eK z^=+b^(rW5V4U^dbsmFnlP|IVclt&(K&O+q~IKx;Qs;jx_=uB37VwDAqG~cgV8|8L& zOC2d*JXe{{w7*e7z5F@z=0(#x^8*n8wkBIzGDZ(;Y%`ElEnnAz%0YFnm*ym|-j17* z3K`SsV}+x&E*P=U??`4Hl2ao%N%J z5er8ig9tN1SZC+g4kLq*kP!Ay!S0nH(Igl%G9LdzYaI7xyryjvB(Zd_D$C{b85NFg zXR6gi+nJ<*SPh=8DHu`MXF#C4>+6~tr-)4FLjvCe*B&b%{+Sfo2!N!J({@(LeB*_+ zov+8~qsQyhQ&X9M<+rv^kqV3;DxLEcs-He4iw}Y#$XTP$+BNenu5cP`Dw!w#*tEDj z8vellwCYhU8e}QFYZM*N7GT(#(HhPejV?v!@207T5$BD!3Bx7e09O)S#|e*yt^jxGgij;>jaGR>D+_R_~EauF*lb#h(HMy zf3?4_<>xdu35kb>hDY^}9~lDX0I#h0*clsV#FnLIbPfMNh2;g~I2r0Z2pN7)SVOd! zx-hHJqv+;#z|68rCn42-o(I0e&LlkZbWX;Yrh;o*VOZT;Z_JJ-*(;1$>8l(t2O2J} zs_JU>qr_Je|#iwn1~^?_FByO5>SgbkG8AE`WcXvS%Xg&TPw8J6%13=FMBHs~6k#R-8V zovBD&2ac?U8##lM$C%)GW_)@&Wjw~~jvE#52Vg*RQBe^L2J5`1bnknL^hH8-vnYU3E=YOUYf2gw&7gZC2+sr|=a+c=uB~a5-PBNcu44R`3Ynp3r&|2~#mfk7H^kdAfWYjrZy|NMI5~;^N-|1rowmT97{&d$(UB*;4#aVX8my-}P@VVvm^>uU{9Y?vY*LuDl<9wXw`6T6x6&v;RaC1}F)U?*uA3)&5 z#YIFIK6voJ!Xh>$MF~Kn-|1Mx)XV=F5}G*Gb|VcqffzzO>#DNk zQlZDOe`ka$G z(L-|cGQ!NF2=DCX9dqrWb6fd))mW=@#9sJqb>|a2RTb_4lnprc;w-i6UC!~iNH#K^L> z=%)}0mm?@^q-}W?KbM`~=h=dk7ybeDYV@W4&mR=#_i{k~LqPBxrdvqe+fytgd@v5< z=H?#u)g{7|H4p=*GJVX_1QKo$;=c|;$%qR$U;BQExByA4MN1`|IeO9GuP*!+cG%q{I|_0{(A_f_u)VD_+^$)e zvI|9^OI%{LSX$hQ)f@3-V-sOqhvBgm`2kUb;Ya$_Bg85u{5N|dtdA=!)mU5a(&FMX z1Oz0?f^0Gio$->Bb6)rI@in31Jc)g)tn6#?9iC@rGIlxo*{)YU^ya#bR(sbSOP2g~ zuksWWM!#d_-?IkHS^F|NFu&Am+txQg!t6&$(BT+^Z3Unu>GW z^I?5&>1Yfm!O_n5Cm|bz1?-)9pq0qC1i>iqkzhK8nl_;rAo0 z?G7D`@ute?kzG%IEYqCTa%4P-&|Sky>_}b2`&k;QnV(R`Jc9S_-6QMP^DKrfegpyc z?=Nb-PSRH^)$35kfBHq`4J_|etYgscf&KW)XvWr`1L4K>U%wtqee@JKgAHVQ!{xDx zl#~OZ4{-2tIJg4`cA;?5rY&CiAO#VfsKS1gO#0fIlf1lqUhU@~>jw{XE3D1z9G8Mn zt?E?pdSqsNP|$ez#Z(w84tfN_T^Z;EYXFu2{3BuV*|p;L*x5}VB_WRb&3uC_Qt`+m z-iAoU1PZ^E4;2qsl9JrVsfx%iT9SU^I*+;Q3^Aru}Br zMg2D{?hGp3wgIFc+5#wGe7cQ0cp(UW-ASF^>yvEMX&c-II z6I)&|JUslRP`At~Cn15VEa6%23zYMPYf@H$q*;zCq{dlic7vWZ{pf=GnF{jK_x1zn zKOAd<;>oDL*F0WVQ&TI~pq34#xK)Dd!YCbfs*;(7 z(W|F$3?y}=A$5F3dKsY_L6PyJR5m{|V_)@89HqT1Ec*&tV3$1mZ*PojZ9A8@I4cZv zqE{?j0pMzGf!mr3xikmML{RmAei2-kX#$0SlnMDDwigEn$LQ#2)|TW0;;!q3+GVG` zb0e&V^HC^g^4}NskF)q$Dr=kRiC56#TtOGpkq;<3!=7F^}9d-5Ep;ObofJi zb3OVOb~EeQNQN*UhOn0m(=7PJCZu}TWnZ#S_qtbL%4~?2*;T$n^*9a1B_&4l@7~?K z7EpfpL&oMHx?lf?#_=~ew2Nm3eoqZFIliwHlEB5udgNqPtMiZB@Dd*%KRqKOYfF62 zcmb8UC0^8PdGJQ`WV7WZRL~84;*8&c2Qwrj$!M10by!_Mbx0>PbAQ&YkCURu#w<1n z{WT27QvyZ}Ma9s092yp$o=ZhLhuvkr3MOex~5h$RR-_>%tdZt+-c^%KbAa^qYZVsYKvlAkxFu>b0^^TEQG zgkUFAuKZ9ofR-!1hZ17Kix)34pa0SzLW5R)1~6sQ07JiXv?;bU2!Si9b+aRQ#d`RH zJ=xeh^q{^loA<%J0d24D{D`0EnRQCUyb&W7bo**g**i=RgT5fOqD@LQRMhTD!?voijb-Oop_y@xUWGuE)d7gI!YHe*wTc=evB*Is8f>Am7CKbxDE9v%D z{-x{0shFGGv&S;uV#C|W15sB?aY*SlO)}lL^N_o6)_~O2N9R>Tv>12m@y;u4EW)UI zd>ovh2^L3L(G4%;A@iRTD7)jBc?g5Ytjt%pyI?jmnePyb?Wc&dGw0fwc*CcJE;9Fb zlS8(US$wT$_?-wx_Cn|>2*Hnh7nw=`lVt0U!FvvgCkqoxG&D2C5dowwZ0GIR zq0AO>b0AB(r(Mz5qS~#T8-wDXs!E@7u8H&}qs|DsL>b*wT2jJ;Dont7zJU%4S^OQ% zC@Cq8jEr=OD%nQx0y8qOyxrIv+`M4O^F0S~bZZoBWzc9vVVA2GXeO? zxCxyy=#9SB^75A_aks|aJ`}2x$KspJ#%`E%z2=$3{l2yB({qcuT1gF?8!R|Tc7Vud zhV;L?56XCB_&SdsJ=zB*`7pr&Uh%!VcNr_l-7f+Y0uy8Y%EiXW;W`A2skcA)l*Mw< zVkxh5FGF1|3`Gfy(0P!=v84X5H3D_Y~Nvp8L8*;ilxy~|~lIF5JHzn6K!$v~>ibr<2+edZGCc^-^}%EaBJBAE%nO-0x67hbH-bkI zwpva4!}#t~e;r2bNo&C6enj%f=1xr+ul$Zwn3q`3zxO;_LL4@N(u0Pak#~wkgcUZl zXJV3A7@%r(fjvBIVzKpX*gv0%jzL)-$`V1h%~$pDHhk1fhis}w6x}CXRT{>+-dBMr9vZ3C(<{S+Y?`FVmJRYF1DSTdPDJd1jC?HfO@-K zBqztk#g$*ek)4A`UVibKf7Zo+#nR)?U|tLUBZ=%FDE*;mgud7sDusJJJw17Od1@YM z_V5y4S<=+SGI`-IbD>4-LW|smwP?I1M;->u@^R*mJI)0pZS|51s2AnBwm2cGR1A_d zxRNv+lC8?j=UYAohCl!n508$I&)c-dAWpeFRL?)BciK|WqrFJR;+L+5FDt;R9m#7}ah>R#u@6(35}@ zU>NZBEj6hfOOtNVN)K9~Zab9|SI|Aqj!8~dmZwUHLLVORp53z!hmhq`NYi4<8=>-h zR$btH1nUzRs)K29DBsCL?Svx%4&naktK~B%q}P?3=|B7U`QdbaNel;ukvi45S%yJz zSs4c_Ys3#->-L6<0i492?!s7up!-`It9__F6n25}bScfXc9_KjRe*4gn_QJqVBjKk&dIMA(D-z!HSs=T-ic3!J#85owN%t3u_`rBD z$7L{0F#E{=EYvxg^cHhnGxSWuPPe~NB(g%a($)cMB$KYJjj*Lj&jkS4$A{$-uD$E% zXtFAj6H>)3*7Q+3JG)6qdOKI-8Uv~|wB`mrDNn^6Ui~!;2vSxS(c{2M8kGSG+0$3} zrynf7Kh1(G}uBAi_Heg;~y)pYM*E+ zbtxBUA&d$B9^pGGcrgL2;s)*F(~};{-`*zuJ_0pof>*DfgDe1InOn~?wE*YN<9CeJ z)6$BKib@|Z$_-k8T{+*__qkWR8&jg^;sOpm+pCVzYC0X=s@S$IZ&m+uk4~H3uXbr@ z%VQZ)y8RU8+keUi&70SG+Ya)Gv6F|M`6S z<5N_QiXXtK_qK8<*oIUlnsq!8o~R~ z3QI6-7DcH0>({T@>zm?J{BtauSSFAN9G8ail-|Ev?})Dw6uM_KQYmry+b0;d!pgqs zS~(qSdY#8t!C~dh7C+YSCO9Bim97s*1554?*{ZN!CD6sk{kA+nqpbC0@lNT3d^)aU zC%%8~A2I8*Url)Z?%g}6oC~$&!@nzblv5+_l81+MYR_&}^JV>xuy(arCgAcRu#%-P_cKK;{p@dn3JG1xny@HjpK z)L|&O(j@UapekZFd-Fk$J_;q8&El&dl3IEBDsJtys5lha)wquKbzx-z9^a1t=!wO1 zDKvQWR0hzyVo4L^xAA-I%)4j;l$)Fel~d#KOu8*cA8(4v69;6EaZ$TcfB5j>=3#Kc zo8tm`Q~5LpHFYA?^?9`snD`}IJ-}qx0b??MLPuZbarASIjg13z+^e52!v775LynxoQo@^M?yNV=5Y_52Hh&HkM~%{9!Zet#cv=!c+V&t}uqPifdcb1Kz0#kj&`--m6-%5 z1Z;aQ_638%8c05};Qk+{yDut8U?XQ|y$HRlr>6&*uscO0%cY6c%*aUW(=tD~)RX%> zdA0QM3FqiU@9XJt{#8~!Xkt7`)ttcKvI$IKONM+gIT@K$?i6NYt-Q+0FW;Jl^v*23 zAbWy;k%Gd~uHXYEzv+CBxu5z#zuYo%>wUU;4)jL4y1L@5Q7#%_{bykzJ)Ox3<$icW z1pdqTcq_YcF5q*&{33{K5P9w6}DA-yw=deHljxyIu~wQLZ;V=GAOdKv9Wxo^zt)B2BvR(X1e!xB2h%Q@w?kn4J5Dv zx1Bi}ZnhRC)K#;CifluXd|7k}(l|@rno`#nR-Y z*flU`g0kC&*E_}Lr?@QueWqIH3%#O{9n5?*4;T<>xN~1uBNB4^`}^nnav&5x#izaT zAxp*5{a}AP2j%!froSvQZlgu{;>A2cNhKv36rXeMx-Xu7XfFFP=NEnGfg{|}IhuN2 zR;}hi`#`}Jz>x3XX;2z_uLo|-gFsNr$jD*yjQF49%_rw)%Q%e1>dQ^ov1LvOXI|x;}l9C&e6)9!C%AD5Ikn!e!5>H*!1B8nQ6UC70&hHD#)~^lwGi8k+w<$ihebj_Ix=m4(E_`jc}gQtS6lS*?9#b%}`?MMe9-1=#+j zv8H>0P9%Zpo6x;~OfALfRw8qhXhXXNEtKdzHi5jKRPg%O$*maIG41fWnrP!~l|x(8!5lp#y} zuToIJfXh)_mo_&tN(b~)ldy>4?Caqwds@%gQ|robFR0xJw03|%>UmFd?A}gL5b|}p zURHLtj;?OsLk^|GiTZCh?Qr5JzZ4P&pLyA&jzDmVycb|{ZA2<$8Gu--FGh z>h{>l~5Y$On?Ko8Z{8{6^D|^4}c;aW?eeNpflh!*zLXK#bXB7{= zCMW}(LUbv~k3~~+X~hu+l(3;jsDu9d`~od`=#)>LK1Y3P5YMw&n9YT#qEJU5y7tq! zmx{)KJ`AnDm8;TFE#b?w&!%_O+_}++i!1)Ixfv?=&)pw3==pEF>&jPGQ!}=!;@Mok zyZ-2K;nUX^RIr!n#Z^IxY;43TM+Ak)iT`i3;mpsD)_a}$dy@es^dZn(3)qhl${0Nu zDFKG`(o!`qQm1zBf-Z>q3~J&GfLHuLYUDEMQ$)XJ@b)U zmn`^>`aoWERvZeSfJA#2=o)j=4^mdh-V?iSi{54!lP&QOM^f<^Pk@T*#!aO7*E<}1 z&X+f|%`chv+03C>#h<3UOi8&!LBU!ffZ&)48Ponb`sY za|?mx4(swH>(ze^7}JQ3#fK5vnw37aI{GQtJHlR~)S|_C+=ATBY9BJ^6A&2a>+Aa#bEhy`9?%7*Z!n1aG?HI#}8 ziasaSQ1;=5DRTPDoU%VU?O^IP-9&a>_Ca=&vcd+ba*nuxxhSGFKLYawmm^9rKvAgL zX$BDIxx3{^!2@x(zRX9{$A-Yv1%alcYop)i%6QZC5JD%?lr|&&H2**!e&u zf86#uw=2Ji&S*J*^J1cxc)0xXBLg5N zXu$d|x%2VzHeh;Dah9p?9zE-JRu^e$6_2nt^K)~rRk5jI3ZiUWWWyU#KsoeKA3HSk z^g3q;6gTHjijGb;1^_a?-!NBNQIWM&b%ngOZFpG6nwwBhRaF%n>;UIEZg53bNOXyG z!FqIoB+~BNo5|^E37?V+c{MdjhX(%iDO8>v zGt$%le8^dp2^jqUhRHOD2UqF8b+2IJ<&AqFL)i8=%M4Uc{6!V&9L5YKU7Tq?Z?h^MrOj*Fp$|0sssJ}kTLkGe`%yDs0?tTX|N=Pkrpx?i)C zJvk6sTEgwWzvx6LCjA(#v@P)U)!Nz3`Kq5d35^DD4YsKNYn^j+NhBe&c$2&PU+gS# zx?f`l4#0-kp$9Q&sa7|tyZPBKtpq$+$bySqvmgm@Xe~f3{7}=|@@BVdd!Wa-eoiF5e=uv4kp+Nfaq+LXHgT1t4)?;PK{KA5gI93;$5C&_4_A$J;2kgmwQl4smjtaB+l}Spue3_o6R*@2 zXk+<66ceJLJv#1D@O0dRwy1ul)4m zCx_OTH}JZ_T-|%mC+NH#Y0V4acTCw=Na{j@F1G^W0U4PJhDC22CRKnT<4sywNh|E^ z_GRon$M>9p0=g1E$a^3j-30wEu*W?Qd;Z^0K$>N}8bROfvvb7jBxS(8K(0zE z>FZ;J6oL{O$v3rwck_y`MZR1fSa_`TeiqMuk^=b1onK_u&c> zB_)yN(E`{n7WOD!*>aibepUyVbMEB+^7zuXU88^1Glmuay`EX0L*)R{#J9o5>bBvl z^y3aZ!_O)R)0me_hD9-;+B@t*b^8<9{3PfiNLF_s68gixx@0!RCwETDzgzi7r2^aS zNJl)aOBvM;)901eDH0|Uv$DV&m^0LPh9vP}y6OFIjCKm-~4J& z1^M{$5Ua0O^kuIMLY0N-s9}Oyxs1*4@8=0xeg(;JDBm}zA;Y7Q6D=>O`Y$C`~l1oj28W|d95sxhC$j77Z*TEk@hrj0cD6Sx)+sX&?dOUh)Wetp$nl**8mH&D_2!qB_QDoc z%*@U0?ZG$kzuQVPoz+lL0sbD8MpDc$X?S9A$6U}{@Zde9O*y&Xe*L&em<@W%0nB^( z@@1R%rqEexYik1wtY4MFUYNlOW)bWU?>x;03{7_YYXoH&rBa;%sQj?0o2VjzH~}mh z3|j5v1e)&M&6{wl#~+MzX8HSYmItEL{ZI*h8+Z|hQ5;=qzwX`p&2IelL=~3GHN~x! z_pU{~BO?R7rOE!nRtcuU40&2&Vpw&_43I)Guur8Lv#+S(ce(%Ki^aRAyd429pYl>e9I zuLA>;5)v?=l3xncmj9*-O1Suq4Gj=idhO2i*ciw=p5tp)##GoubO=LlpU_Z&=bpkY zixFiOeUZ?tZ>;=a6BBZltuWnh#JANH1Q5Cv-d_<{Lz!8g9t5`h}&} z+`{R&aB*`gOI})iW~F&&9<;GTVNyUv?$~k91Oe4CoVcdaUw2qRq|Wr(S7@d42JUPJo&;GE#)Mad8_<8CG$oHfvtyXH^in764OLKGt9Vty(5~z>UM*QE-N^9e>Y% z)rMvyg*c=)N7#EqkaWg|zdF<*3MvBld2k(v+6>vM>!A?=i)hsByOS-;oO^s?CV zJjI)K7|+xtJ`-$V9lju&Cly8`D=Zz!|H5SlZ}e{MWd^^*^fT+)<1OyZlzh$lHF4d) zB>en6nm{WEz|b9|ZvxP9YF3M}31~mI_BSs+5N*CQtRu!AB#aS)C@32YRM``i8#F86 z3rUAFr{OVr^)jIVp`M-jSp8PW-1OBUh#)@aYGXEm`5+JAui&m!%oO&w@mgPpXgQ_N z0l7nsiOVi-NMaN=jvI1sHu2A8aOixe!*RYyE_w zdrzY7S$_%7cm!Ks**SKBgAWWe4wtI7F;u(RI0VA7J4J(4m#`k*!+-asohUP|EiW1w`daT4-3&NU(4%( zs+hgn8*~#kM=_RWbvMMe0YRhwMGM#%W@s7H_>g#E6sU+lUS=!NE=?E;W8koh5l!}c z&#N^iv+H2&pk39v2z@?_QccjXROnhgWlu%Ph{WnM6=cs3D4zO@E)JN^%zyBq9=J~z z&3|%v`|jPlzj5A%#r{BQPGDrd7tyIY#2rzdhplp@Otv>4NmDP5R*ygdC$!6Wi{N?A z;W`Ri1LqCw#@Kmj%oy_kmc{*AF&beD)Y3&Q6P+uWiv4+dm%saIxim z>mcVy*r{_D@l!ouPXn>9E;Dkfph*GDEW{nzP&-?0b(n;n4d3+tql;Mk`a0Rcxg2Mz zzn^r<0kYLp9&^9>u{8RH(I>=50`XnR4B$p<)M=_mzsxZdZF?%!Z9Z{;1aUKLCz1E5 zugo$nGpK@*m}HLx$lC61(!KXL*Zcm5fc#|Z1UV;E^O}0eIVmWBr*3(=@p-(&QUrLp zj*65ysoV=*UJgwKjTQU~&U@Fi?;%)p&bM<@U98J2{(Wq7OaJlZKGSN9VSxKm;3*&& z^yRl_2f|3h3f=j2w}{(-&WrspQlkmbwFX}Akbwe=((>bC3$z(FuMdw7mA~XgUtyWb zX=sqpe6LkBr+xN0dBDm=d@tv_nw5<$7AL%RFae<}nKh-BocqiSH<%nmfsAv}`3Kab6ItB{`}(MYYyfKJqbSg)emZ52ucgopvW#j2d%uoqj%E z);F`7cadTOic!NRKB4q6FU8U6x^Yp8a4befY`qUF-F^F4GotQ}?H{YCpL7E4CJSF! zc@RP5zH2}3F6*c&YNjNlQOeiRU5#NW=xNfx!TS4?MJQf z)m4f6##Y~Edj*+l`piKua5`dgVL{Zq!%(GlzRxPjQ^57Mw?+6RJuryT(_4CbG?N2n zSiq<`A={U|3+mh{jp>!&)d~B3L|0n|@%}zhX}Jw7_217nz`wt z+d~S*TMCt7a0S=)9(ZjTP5R*T%GBbe+z*f*hi$l-GuycFuU7wKs6V15wD}0%eKAt2}tR^ZW)?Q*Wxbo|-+=ya!XIWn5 zw{LTm&_B@6XSZLxs8-9fh>#zO_*@l$OC~^eVsM09AHpy6)CZ4$lVRSH&y4w0#eXIwz*9O<{N6moGgc zz{aR!e>q1;c-t5arnN(Pccsg4pB?*OVZ@^Sckd^KbO6MAw5u!z!jOOW!YbiAcWH40 zTnYwXy;P`dc{LnqRZvs&t+DYAykX7xN0ThXvSP$YfyCFDnN07>`roBkE~5Lu_(y>* z_Mp^@EJQ;iZXKr=+=)V;=o%fuzA}z1%D-;8*en45QLv*eh-B@qb-o-@P9a2M3UV83 zOk~MkP~BI=hr`XHC-f}f>e9Ng?e#|N8C)4-W~Hs}2aIvkQ|-kNfP394Dz_+lsc&?# zAbBY#4};C~Dz232A4#aezM>16E>AOYRF87?1j10Tib#2c?7uW6#glAxo#`;wxHy9h z;&(E9_{?cL8_7PMgYkK3T(0xl#@qGmefyA7W^p9Ie|H5hnH@P?vwIn~6IhFA#^{)K z*uWfVWMs4MNTlOul3>q%8w;w&%Yb=02fT?g?Z;o=rn<7q{yj&pIz1BP1CcCL6>7md zL8j+;7dDlda8!#dup16Q52^@Ep#HG9Ft9n$vPLHIGH_T+88tj$@vG2?`ATmw-@#Cm zzp`HqUM{z@s>Z{TZ#@<~S7jHvw>5&z({Rf329>@|5fWjrZSb}`)VFW_}2Ug9^V8WJFktTjGl+Vhm{$v7aF3) z;vGI}WPmus^jv;kUfM28FC$R9+1PI0bO%l1@6X{Q9M=w(U2OC33sxA;`ns;TZpW1Q z*BsHVM(5%CJh8PcgoN<|DA?F1PXf?fle=d<2A~UK3bRQRxPg0;)~QP0BhKbQtLUm(JI3 zq0JSb{JRSv3t-}HvHhmd3@z20@lx6$SIFm~JC~M}EO}!GPZqejA3uJSu`oAxfBbl6 zdfH))HVM4WR$Y{kUro)-UcPwY%Rd%)bY@8*_4tTzr|<|4*nWvYM_FuYWHdQ97qBXI zP$;w-t-4N9?Pa(h!)iwE9mwvImz#V0U1sK~GtcUhl1%EkZ2CRs!OK9lTD5LXJhos%+JR8OB#yH0*6%dl9wt`LG(bk3y#s8nP@#-y^5LHm32N5 zk>p*xZY+&OtlE`_lhF)f+e%DJ?cP+^gEDWVp9rQzo&(%sV5pQN(m5}1FO?U zftdUOgEANqLnZ47yoAs|0*9sHAQ+|$bJjhabE;$snH{qmyjGNH>fy5!6n>l8oc#LO zckb79YAzpYlhj;*WU2a*D@5LR@tK^P%LfBUsyx-Hr>~W(xnS+(8k5iRCEieL=Q>~V zyp7<V&o~cDBhd6a`sdchQ1~V-+WqNL8;g8+G`1n zoYOB&W}f^~BVV%z3~2xg2>C@(?1y$fa39)PO##k4C`Vz3ge(~lB>VgCLCQR>!t0p6 z4FULW_Rj13LbSVVY#f8ty}g>xv?wB1?qf4N-X6`od?yKzqM12+DuMQs@enT5??N=+E zh`Wk97{=7{|AgA0TF&+pN6)g@7FKA#AjP||Dq0Zra$LKIfg4Z^!DD}^~ z*+%etpmK8jB!SY}-7||lL`U~BOG~2^5%f8!sotE0l21cI2(Ozo{RmJrQPCs}3@#i4jEa@zQl-AaDG(Ir2iTmmy;xIl|rog>LBfyZPK z3anCRhm}B3`qE>)2?}<z)7Z_OSwDVbELfJzjGFPW`JB zZZhBy)83`u=z&Q_;5-VYQ3<$KY9fdEkATrxw=>o1_}zahgw;SLA~0&X4pnLVQ607v z6}{!TT$^mjjT7rTHihxm!6A$TngZCJzOhT~Zic3p%$}KN! z*LgOk{PJPCM|G>o&CiiI@#}>(lH!v!4c#ZPo(wt};+!MlD#K}CA#`QXmb zWYJ{i=q0h;H-hM*?kgldSC)6;O8eqGmEmCHI+i=IRLhh?7P;xuO zeqV3@0$e$o{8BD#i*61&D6(5@99w~e$b-%4Oj*%uD^0+Tx_xDEx~1jz8*A55K|1^N_5Ka zM1Gtu^}{8ILHn{31b=-&L|%G63*YlQZOSkaOQR(iBB?R~ERO9z;wP4!d*}H5G{L;F zC?dE5m^E{lyx=?jpppSEs<0g;@3#2;d-zix2}?Cj+W5 z%n31t!2uZrWH33HDeB%|7sn8EWr)hgBF|2n}1yaX>u?8LG#k^g5&zz``zvq};q zVI6_V^Kjml2PE?)Fna#`nhLVBo52zjhV$&!gY1&Emx7qcR!QJ9Oqu|VI60O6b;AGU zva?sf%F{nLmwX^r$e9((OvPz;E!J-rc$6hgKxhXim|8a;#7*~v1`jWEi6B!`6=?WX z+y?UF0oOIFuzK$MTAvf7CCr%O1e6@W(8QEYn1}Fs7c=9nCp`{qP@OV?JC5EPhd^$J zW&NzOhehC?b+qlptIliQF)=;Oy0q3;ca+TMzCn+xFUod&l-@_ndF1RO$c4vecL zZGgmrG_6N4rj)4j|$f^GgCBs-Ku3oIfFuCeh zo6|3HWC!nBfrhMM&j{riRq3RLo-w$bL1S)aCJb!pl>pFm8~*wRD3@{w%0cSJjTU&q;P|Qp z6I;h;7J*Z-5#8$~?9;n=k4kYpiy{1-p8H5p2``xWm4B@~_0{PAMAY!n{4iOx{MTd= zLv{+x{5LlR6PqS|5mzoo*4BW5tr7d>&0nLTUdVu9Xd_Y*-bD={tY5T%O&9Dzb_^yb zq2uWj-%s^Oqls%0KnDoJKboph|mNJeB`P%<> z+h$4aHpXaU+!(k@`0XBA(GZVW@kQp> z6{~V`EUW{Ft6p0}`VPd!+_yY$t;KQ@NK)1~LnX6aM=%Li222mnV?uWSi9Bt@uf+Eb ziz$KSYfYOUAAp-`ev~2@x&MR0RBwn0+|0m_i5SMI4W_D;JB}uMJ2+s&a1V{m`F693I$gD)kLJ*s>3JJpTxQOXK1Y*n@D85L5p|q~o9{F@=euYCZsd!7s2~ zgou49=pT{sIKJk7WjyZ4{?T*&743tXFyTG(^gNzgdr|_YBOio+o5AKdU z-jr1y?8yFgf%`@#U!S_GTEKSjd2t!STSpRy4TmI`eb0-(`iwdQf3N8cdNFtz9tE8j zKNG}MafjRL$w-yVk_J8eid?i#-_zg;rV6d6=fwlt7B<~QQMn9^-1|>Onth{<;_uRTE@7w!atvP*ox@tTb40PuLR^3AK*X^qA zNYS1PV7I@Xh^z}|U$d@&Pvx?^-b~*03=0{ytI|kO$_bS^sbL|Id8cr|ntkrEexAA- z_1KdhI9(=M{kq*XckeDFk;>a2Sh+A|UB=37zXDlCk(rq)x(5?nfox+$ygPV!l=3{j`VK>RYioJT-^>I^u=)Tu#h%;F?X?WWP zVtw@5ILb5)A!KwE6oCpKqF(XvZozxy5i&%5#@)N%hT$k9czS;-O~rlVe)5aRdpM63 zpH$o*i`yq&emrQjM_-z7#Gb?&?CRVMK;ekowpjgE7{)q=YVz~0!8vHdxKDd2bcCFs zmg)$pAErLjbw;Hm?X*b!0Ciye1^SkbGaX~zD<_og>zA=Eu@sNh{XXoEv#dn7D__^S zN$nqq{=j-Y=Dm4v+1K+7`!kX))cZScDY2|WaOu6ArM&OEOMSMv?!$*2OVZSFW@X#N z{M47R+YVCR33HEsAMo#^oVe_ZX8ob8+LS~Wl5}BWdq&#gR7MZ$EZT6MQmj^=$lY61 ze&<)n34!L55r~_N_pXv + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/step-builder/pom.xml b/step-builder/pom.xml new file mode 100644 index 000000000..8466266a7 --- /dev/null +++ b/step-builder/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + java-design-patterns + com.iluwatar + 1.5.0 + + step-builder + + + junit + junit + test + + + \ No newline at end of file diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java new file mode 100644 index 000000000..439c5bd11 --- /dev/null +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java @@ -0,0 +1,69 @@ +package com.iluwatar.stepbuilder; + +/** + * Step Builder Pattern + * + *

Intent + *
+ * An extension of the Builder pattern that fully guides the user + * through the creation of the object with no chances of confusion. + *
+ * The user experience will be much more improved by the fact that + * he will only see the next step methods available, NO build method + * until is the right time to build the object. + * + *

Implementation + *
+ *

+ * + *

Applicability + *
+ * Use the Step Builder pattern when the algorithm for creating a + * complex object should be independent of the parts that make up + * the object and how they're assembled the construction process must + * allow different representations for the object that's constructed + * when in the process of constructing the order is important. + * + * http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html + */ +public class App { + public static void main(String[] args) { + + Character warrior = CharacterStepBuilder.newBuilder() + .name("Amberjill") + .fighterClass("Paladin") + .withWeapon("Sword") + .noAbilities() + .build(); + + System.out.println(warrior); + + Character mage = CharacterStepBuilder.newBuilder() + .name("Riobard") + .wizardClass("Sorcerer") + .withSpell("Fireball") + .withAbility("Fire Aura") + .withAbility("Teleport") + .noMoreAbilities() + .build(); + + System.out.println(mage); + + Character thief = CharacterStepBuilder.newBuilder() + .name("Desmond") + .fighterClass("Rogue") + .noWeapon() + .build(); + + System.out.println(thief); + } +} diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java new file mode 100644 index 000000000..4bd29227f --- /dev/null +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java @@ -0,0 +1,82 @@ +package com.iluwatar.stepbuilder; + +import java.util.List; + +/** + * The class with many parameters. + */ +public class Character { + + private String name; + private String fighterClass; + private String wizardClass; + private String weapon; + private String spell; + private List abilities; + + public Character(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getFighterClass() { + return fighterClass; + } + + public void setFighterClass(String fighterClass) { + this.fighterClass = fighterClass; + } + + public String getWizardClass() { + return wizardClass; + } + + public void setWizardClass(String wizardClass) { + this.wizardClass = wizardClass; + } + + public String getWeapon() { + return weapon; + } + + public void setWeapon(String weapon) { + this.weapon = weapon; + } + + public String getSpell() { + return spell; + } + + public void setSpell(String spell) { + this.spell = spell; + } + + public List getAbilities() { + return abilities; + } + + public void setAbilities(List abilities) { + this.abilities = abilities; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("This is a "); + sb.append(fighterClass != null ? fighterClass : wizardClass); + sb.append(" named a "); + sb.append(name); + sb.append(" armed "); + sb.append(weapon != null ? weapon : spell != null ? spell : "with nothing"); + sb.append(abilities != null ? (" and wielding " + abilities + " abilities") : ""); + sb.append("."); + return sb.toString(); + } +} diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java new file mode 100644 index 000000000..e042758d9 --- /dev/null +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java @@ -0,0 +1,168 @@ +package com.iluwatar.stepbuilder; + +import java.util.ArrayList; +import java.util.List; + +/** + * The Step Builder class. + */ + +public class CharacterStepBuilder { + + private CharacterStepBuilder() { + } + + public static NameStep newBuilder() { + return new CharacterSteps(); + } + + /** + * First Builder Step in charge of the Character name. + * Next Step available : ClassStep + */ + public interface NameStep { + ClassStep name(String name); + } + + /** + * This step is in charge of setting the Character class (fighter or wizard). + * Fighter choice : Next Step available : WeaponStep + * Wizard choice : Next Step available : SpellStep + */ + public interface ClassStep { + WeaponStep fighterClass(String fighterClass); + SpellStep wizardClass(String wizardClass); + } + + /** + * This step is in charge of the weapon. + * Weapon choice : Next Step available : AbilityStep + * No weapon choice : Next Step available : BuildStep + */ + public interface WeaponStep { + AbilityStep withWeapon(String weapon); + BuildStep noWeapon(); + } + + /** + * This step is in charge of the spell. + * Spell choice : Next Step available : AbilityStep + * No spell choice : Next Step available : BuildStep + */ + public interface SpellStep { + AbilityStep withSpell(String spell); + BuildStep noSpell(); + } + + /** + * This step is in charge of abilities. + * Next Step available : BuildStep + */ + public interface AbilityStep { + AbilityStep withAbility(String ability); + BuildStep noMoreAbilities(); + BuildStep noAbilities(); + } + + /** + * This is the final step in charge of building the Character Object. + * Validation should be here. + */ + public interface BuildStep { + Character build(); + } + + + /** + * Step Builder implementation. + */ + private static class CharacterSteps + implements NameStep, ClassStep, WeaponStep, SpellStep, AbilityStep, BuildStep { + + private String name; + private String fighterClass; + private String wizardClass; + private String weapon; + private String spell; + private List abilities = new ArrayList<>(); + + @Override + public ClassStep name(String name) { + this.name = name; + return this; + } + + @Override + public WeaponStep fighterClass(String fighterClass) { + this.fighterClass = fighterClass; + return this; + } + + @Override + public SpellStep wizardClass(String wizardClass) { + this.wizardClass = wizardClass; + return this; + } + + @Override + public AbilityStep withWeapon(String weapon) { + this.weapon = weapon; + return this; + } + + @Override + public BuildStep noWeapon() { + return this; + } + + @Override + public AbilityStep withSpell(String spell) { + this.spell = spell; + return this; + } + + @Override + public BuildStep noSpell() { + return this; + } + + @Override + public AbilityStep withAbility(String ability) { + this.abilities.add(ability); + return this; + } + + @Override + public BuildStep noMoreAbilities() { + return this; + } + + @Override + public BuildStep noAbilities() { + return this; + } + + @Override + public Character build() { + Character character = new Character(name); + + if (fighterClass != null) { + character.setFighterClass(fighterClass); + } else { + character.setWizardClass(wizardClass); + } + + if (weapon != null) { + character.setWeapon(weapon); + } else { + character.setSpell(spell); + } + + if (!abilities.isEmpty()) { + character.setAbilities(abilities); + } + + return character; + } + } +} diff --git a/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java b/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java new file mode 100644 index 000000000..61fe82aaf --- /dev/null +++ b/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java @@ -0,0 +1,12 @@ +package com.iluwatar.stepbuilder; + +import org.junit.Test; + +public class AppTest { + + @Test + public void test() { + String[] args = {}; + App.main(args); + } +}