From 44f66543d0e05dc3bf56cde7526393e3b54cd854 Mon Sep 17 00:00:00 2001 From: Vinicius Carvalho Date: Mon, 27 Mar 2017 11:44:21 -0400 Subject: [PATCH] Adding improved section on schema evolution support Fix #898 --- .../src/main/asciidoc/images/registration.png | Bin 0 -> 22405 bytes .../main/asciidoc/images/schema_reading.png | Bin 0 -> 45621 bytes .../asciidoc/images/schema_resolution.png | Bin 0 -> 27718 bytes .../spring-cloud-stream-overview.adoc | 155 +++++++++++++----- 4 files changed, 115 insertions(+), 40 deletions(-) create mode 100644 spring-cloud-stream-core-docs/src/main/asciidoc/images/registration.png create mode 100644 spring-cloud-stream-core-docs/src/main/asciidoc/images/schema_reading.png create mode 100644 spring-cloud-stream-core-docs/src/main/asciidoc/images/schema_resolution.png diff --git a/spring-cloud-stream-core-docs/src/main/asciidoc/images/registration.png b/spring-cloud-stream-core-docs/src/main/asciidoc/images/registration.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c044c1e62a9536f94362c8dc7ad89f0231f9b4 GIT binary patch literal 22405 zcmeFYRa9L;(VpmXfjaZqj$RA3ZF~_L9}st=B$ZG0*kC=dhw>=JFW$4c^sA6 z@|(4GRoyoHesH}tcn99^zEM53>~k}5;=2%kD%Zy1K&iteZ~S9-URZU zpgA9&1r6G=%~wRf=Wh<p>L;)C6XH&6Z; zPf39oQ?Sa<&DKYi{efxY0Xoqj;>59x2F)2r!9mAIWWz$0EBF`WuK}84mv^M{1^#R>#!?&6&goIU=RgS83uf|@wc!~!W~293(_L#NQ1I!yL&tpi z{HVMWXi&%OEFrx*X3|1U4U^Lo#0Iw)nH@Wpn#tqj_3ZcERL`#!W{_+Z!LR)n<#SL; zoo*U(JmyMRw#T^EH-u{yY3ipz-I?DJ$Xc+2R|lsck6=e^l$aQ?tBK44d!qhM@x{hq zsS&%ad|pB+Rv0mN-L1r>J~db6ytF_ZJVN{;7Y2-erPMBJ-tJ>pd`ZaOt2u9RcdF7I z4tar)Gb^#m53)UxGhd|4EF~CDe$Y(r6*H==eWQ1F%Q5f39HMS%mP#RN*FxhMYDu(o zxKxF;)3nw@vRUIXN;fDr6$u+P#($GxMOt#q+{wXc5zTKeE1k-5;$ zER?G96qZ(8Bl5SPwwn$WOAt+#g)u&}WzHTHKYCb`Ag}{k_{*vgrPbrO4`RlJg~P8KCI*t1b>ackCMgUx0UIK+qOl~5O;}}#vOmC;1yyOQ zvRXcah`j|b&i(kyCh82N2O}quAl~@fsEaw_h+Hcl_(GR_XLg zl29dqk;RB`I>lWI>A`iy@scH7ZR+kX-*+pVr`Vq!Z^dgI5ywOuLt3cme=~?#P6Qa^ zhQz{jA(HGcqCp>U7Kod&CGk;HQW*s3$ZDEH%XA9!glOxo%>KIp<)PC4e#&RNoUb# zj%9~MOE^B)tOHIb^S_D~MV6XB)eXM3wtVh|;#Yyu<8+d<51yxiyyexFD91)~9YW`+ zqVrT?gQ3Wmo7hO1%78@l=l(O@v$1G5wZV>=)FQP}DB!_>SdP?rkEC}hb!}exISd=M z^1=(ot8N5=824f!!Wx#~T!Mqd4Jq#VYSaSa>2E@7%g1xPg-Kg%3GlDX{dFu)=#r5a zp1Hjv>OXeTkOcne7&J%kI3!!|UPD<+;vle0F38I0d} zcukEvtmC?jce-43PC4W}bG?uMn!4r#fm#o5GWWTL;NUPAas5(ZJXmKM1|Y&8S6K1& z)!bHUV0%Vb^`%>a6ATQRDiQ6cDc9*3=zDd^=w!?3u4b)E%%Q2v8u0RGeM-7#-w!pG zY@zSXmP)MWZ8|VbdG6e`8dLN?gQX4#9)uOEg7= z7Fe0rR8X?}Dk5VP^7u1PT&txu+(`w?GaAM?tolBN@4*hd{ryX1XuL4iy++h@C|FQT z31|I~HmT@$SlfSRg4XfvS^M^U6E&KY4G5&A27@9>`RN!)##QGM;PG>?C&wjvreLUQ zyy3>r_$YIctvl2A6{<~Pr&wB~!u!SLOXXu;68Ily-tWbDMI6a6sbg`1uEk3?$C9Op z9dW49g1$f9xLZFT@7-{EvBQ4DQL^Vfu8?AAD%6$;@^q%)5`C=}nSKc!{j@zSK+OzA z9&zBJp*tER&6ymRLe$&Z73VfHd*UY1MIMg*Lt!k*`9nO*e&y=k_)Oa2{LH9XMia5} z6Zs&AG4Y-~je)=Z*PcN_+H9n+JVul&?Uw8|s&`U_(=Fcfz6;ucq}0r7H1;1#@`QAk z=G^p@^aIvHSOv_WFqblMnZ$e%jVpSqlF$uT#Tucsxg(HaAd#%UP}P4ZK>VQ}bq_Jt z?GFLF0FLs9vhpIX53Wmz_k)oU^M$fv4teY)K&l|lWtN^r&+SQ{BxjY-#g~+wy&oyc z$UeUyLyJIfC&qSou!LVk@^wi+x|y>%%6oqa_5)3+L3f1|ow z(jIi{zpb>aABuW37pH!0+`J@Z>?dZ>&FI<`{yDYvJNJT)EwIPvFIngXVJPM)zC1%;p= zTdl+QWmaHRr@UWdlaB^ZwEi-j41j=@;o)OXgNAhXP}&}*NZ|5MiO`4*PylTjEMjUj zgm_Jn10o6r0FhO5Ku~!zaJY(n8MXTVw3xRyT8*s)Q3Gg|xNq#;74@XA3AM7y=a57r z)MLqpM)0SNouy{N$N-yQCDr_w3Rrs;ViAy4Zz0;M#v1y+QhDm*!7jj~r3D=$+QC@4 z;{+A?{o9@_adOSY<_Zl{VCg0VB@Ey^%+T>Og+rZwiX10HK=`2_&?A{=YAEB+hi9>} zQdfvnU{j!(T=Eu#{O$1~qw#T5=i#gEh83*>r7cbE;U!{)dN(xtQnFk`%+Gxrei?Bn zQ%V4p_K@#?yY$hPe*47iw%eXRo?Z$i()d81EOf&Ugr|%zXnDB22Zvm=!X|8FMqpR+ z1m~(TsJYGFLoYSF<`R%`kTCJPyGr!y@6*WwYFa$NneC6$*K97S<#`MhrEOs|C?J)y zzXe0VBDV&1`GAPcf2lcr@NlB$b~z=?jJ}GS$5bcwGiERPCrf9<_bEXZ>R8391>wSjYw*^?|@jtlco2~GZnfyWi zK}d&3YkWRuBE9}W3MVVfX*0u#4#vjH(Z>^?4dz|iYaBodxV`uCkuh?N1yK!QFrGrd zK}HTA?=OZKr>!YhqZbAJw3)6_;`o5ag}%ML-9n-FCUd992-5iw?IZSDtub~_z2Wmt zUXFe?(fD)VSgF|Vs7E(xsN~9)gqH+L8fSdKcd3e6HUOUJ`%BMsiRQU!gLe(lN8+^* zo|8@F=aZ>Rk(keCE3JeX>=pgeq!hVYQ=CZ$pze>P24{@4VDpdHI8>o|Mi_s~UOyoq zBj1$TddA_(+h4p$Fl3wL-YFX*krQpr4oiwc%8 z0BtlXd8xM8Da#GR0OeoiChIK3lIxHj~Txb399Vb+^KB z^)@cjk$(9x+4F_}jrSJ<&4P_edk}+8+i$T}Fy_@A7PZ0t;%XAYy?Y%Nzvexgu6He} z_hv1M4bi#3la(szU`@}a@i5NNv`^!~$S@YXy=e$jgH zfS5!7F@hf{X6iQdeYIK9=~ zeFkeYut_DwmC8JCES8kwxfT7+RD;qgv~+5GcD;>#d$c|tlG1+wtw)LDtw*;;bob?> z9_sgl*&Yr1KWaP3^3NilUElH4JX|6!^;uUI4~Q~cwdFB>MNG{EeAwPcB+;93>Y6r* za5OpBS3dLf;3z$xpk_Vd>NQrIgCU7bPQ0P_Cw!ygab^7M!H+(WUOVu+gO<&?qK-D6 z9Xncct(`>9ulMEP=f+YHwO=BeN}B1jjo}FEt$LuJ?|N!#XMc2x*?e&8!g&L;cwy=kS-Z`$eZ3%I z&yqHe&H0BXO!Bh3{69SXxxGfqQ+eGK#{uX+D8p5meq_C>_b~u@5 zGzO<$`xF0XM=4x1;VZJsViyr~NR)8BDj{R8JPvuCdnh5}2fpm6p#r)Kr%3%2hPNM4 z?xMeGHq}v@)#$2bTwGtisT|zX37FQ6RaC<$=y$&VWHhk@0w-Kb_xHY)B^VDHI$164 zQf>PN^B?_=PHzu?m@;L!^UkQ1Td1TGX|qNKBXAf>oMtaC5fbUtgw8RNzhuN^x)6+o zs?VH&CP!DwLtVQ(p9rfT$a44sLV4ZLu##}#@6QM0VI8JB)qL*4V+b6-7HD}TQu8F3 zOx(5A?W?R=jU}?|mjZ!jmdyfhj}q|S0)8e<8=pecjEO&*_n*wu#<;UFR6DunkSe8z z0edX7kxTbRCg^uZsdI3S1;jM9C4UNZSax%5QDFxlc4SEV%3OE=^K7!PDMe$dv$zE` zJthDj<~XJ`s{t-S*8n+P1c>kUSSS2%8oqnz0Zuv zhAse)dk~#DM&-K&L(_|QV8|G+=o!bKVAJse43vSX zK4=Lb1`96Hj`Bg7@|pMXo#N5}nk{7_Tsf4Z<@RU}Bw&}p!!CTEbX36lPaxI-LavDw zBO##AvG$HqK+)v0<~|O(DNQ;Wj@L|a8Vd^sBRcRhEK^8n1`xJ#9mCO2Hqv(ZZD^(H zlOa_& zY5DT|!`28eb#0^kX95BsOG%9d@C}r^%9GR%xce$&YGMgR(3`%(muEo$yRhP2+@rbL zU9oQRFEqo=qHk&Z0Tz=-$?pMUQnIix{ZlLJQ(4i!yyVG^hGW-Nkr~a@D)lptO|!F& zM*9x{8x#{zM#BZBdII;Lxan1i$p0Gz0Svw5{*$KsOPW$s0df9JUin#!ErNPB`YH91 z>l?GNaXSCNYcL~YFp@(?>&qS||7DlLS^8CoTwq;F!kO)e4dlqxzQ1U{;eNwWRH!qD z6cG(BpCa#qdD41g$kTtL!W_*}d!@gM$&u+IVQ>?;xn0H_dY8tYh$$HkmAT5i8AbjAm=}pznD`VNT51f1`%5_@mhEIl$^>*wAP%m5h$ZH`6S7z7L!k+@(977X|4x zZI{u@1ni~?Wh7LpEt%I>j@4}c*0s$lX7u8tU+K-4_wS5myfv8(gSe;sBgzBZF#)Ma zb~Zy9#}AyGx_(b|jQ>m3*<=1@{~-Ia+23$$1_Ouj1+pA%3ulEo+nCQk4FZ-uwNrdm z@(Vt2KG;z(7_))hb0z)@g>lIR9F3_sW?_uWe>-YqEF%bY@GtY}jxo=>`)36pqXkA7 z;2+_?#}#$QfKQb@#K04QY6S*O@ChFXLbU>DP0$GyQ9^$DmlFQ{#``C4Rl)8^J zFqP&^WrcF=Kku2=Z%&W+zcc)=kng}ta0-J1C8RL$AxiJ$cgZiGAdzVCVGz~-nTfxg zNs@mwp!AWpSb*f0|K5V&5Fayumz#lU0*Idl0mL92u_d82fEkv_BzpXTm9ZVE%Q62M zs?Z@bo(vQhAoIa^D3e6bCh+WyV*Ew22Lb>PI=5Z|V+)gM6#`K`2bdAeZ;CP@?@OwF z^BjsD?>htxCL%TZzp?#4cmsC>K+Fcg9YF>uhh7gX_rLe??+Xm4|G%C6is%aXty3muiZ75kfRrcJ*yBz(2PVq2oM$!d(WH%0F~nadHW$e{jUUIvnjxi zTYo0g|KRr>A{z1$N07|d5VuUnB!pQcQ&eF*1mfer%Q_Bb8a$$__!lN4Of52_ z+cHQAC`MGl3KtD#EW}vff2Vq42XO^G9OhP`B2xb@wr|>siXC=gIUHC)^_Kb+QwF98 z(iOuu^xOi%0pb>=2&WyCfFZ~{ zDJm=ie%sP**odexn&m>}MgcZsh0@juuTgw4rOkWlU`_Mwbsr^a!ZtiehRID!>@O|aB z_yWl=LL~V1xGH^uU3%Pm>p+ewzM70)SE{#d6I;r5_pxJ@|BUZN)xcztk- zTv>lRcETNp!GS!~2H<<# zr=q_JXZqflQgCtR3pKKzsAdYnhg;`{)$?N5#Q^Z~$t@3tOV{8?O3zw)q)*H}2A}fE z_CFqc-Rjt&7AM|tGD2>aH@g<6qpEw$J=x@aCR;k)gOsEABMN%3l^kEEf?`Jxl}=xn zGVo32pWi2Fh&-;YcyESuWl|^D>zfYn#!ogpE0lHPeiEG@Nr4P216WOFTAm z0(3T9;N+fA0pv_2rzrxa28(MiAHL!L@OHB6@R{iMtG=)4D8~YRuLgMcAwkO@jj{Ay zh)(YK#|W)veCf7V_Ps?x4tEV+l$D(f2}H)XA-L}}P$*7Yb1poGhojzn3~oIL^0P>% zKJ9hOty7(rI?SVs5aI&ajYM3v!=r2wUB4G^sD&P~95A)U$)4>5@spLdU)I?ChI!Gc zG+4WbT%%tcMt50TCG}^m*NgaY_;@(n0^KzaS%Pi?#Vs1gIBK{y_buW0|B3$941Wo9 zFg}dLL;$4)P^pPDI-dc~QcyWNRK_Xcy&Wke#+?DfJ$urP;EB@9H|f_lMl^Yr?E9-B zbu=Y;e^P7`rWR>Ga1T6Wt~V`7A=M6yfkB@y86MB{G?Wmds9GYD=Pq}3#bCD)D9INO zTn_&QbBfqHZl5*4re`d)=4ON}yr8vS3MslkC^a}Z4cnwUab2QT4;4*LPP*@Z>vX(n z|7!c>_I1ow=`&q8Y{E#8{$ zx1n&x?{?^^+#o9xJ3~+5s%DSlwzak3U6Z(0IkC72w(s4hu`2qnnx9!vIsIf;Q3c^R zn*KwdH(n>sG$~a2;`c$lN&~kjo~~Z1D)*>wb*(p@0!m8yuab+89p7pOpTB&;2HaqX z+upSqwy-db8%pu?L{=M<-vuFZPdZcriwWUErxvMOTx<@i_GH zDF!YI88x*}JTUA4iO<9)yGqGp=+V?Zt6r|&HibB@3GQ4O0PafdehdxmA&ZjQjd1fT zOOc#eBYe_)5d(1*W*slM!0PgCgNK!<)^n3HsghP~Ps2tAUoYvZ4YQ)4nkwd~RFsREWe1lzJt-7rKimCqa z#7*q;`AGPAy_xxe2>{G2b(Mgsrj^|M;ucfg;d#hxK|z0A7?*mdY!+~vi}Wv85m2WL zb%TdAAu_a@^(ZyV3-;klu0D_RP(ZfiI%_*nyUd0XRGv~Af@gBNpE(T0L{&G)6$fQS z@GO`(jt-FH8Mz;j&gQeWJomM8>7_V?>g`emGEAfjg*|9(dRTTAyK+LmqnHDcxI6gy zaW_T%*Qupp45}Kj8C3mc%%!oKZ&eo@yx|qk6&+!ces{r|m%laMXLYTgUPEhfs@_|U z@d1hsv9OBn6Yrk?xFV8uTYrUnSB*dhspx`_V<-9&KvR67r6mCP$Tt>R1c$fh>VD3o z#J~*8Io7DV6i`6c|3xj(xY}&}mjYh88M39)tl+fVycbye@l<4e!}FlWtjXGebq9(b zJPKpcuPVkQjb*ov>~+7u?SOb$^s_Gs}15l=RV(VJ0FsYsWbEk&e9Ja zsA*!92$EBeGC)dzo=f`79b#2Y6C$eT8G=z*bvG(_+?=tdLimqkdNA9qpV)nlI=yl| zeZD$QpD1y5psOCeHp^EC*tG-b&<-XK^uE46PgUieKhux;3;61dR~(pB>ca(|UKBMJ z78XY{RZQ$Q>LG`4F+#V{6PKVcBTn!GI`2|GT~#YZ4zo-)+++?<2tY`ecRTr2DmHRc zbY1bkN%Kd%z#<)R#wW#HGiY(_F0|d*zrApY9E6Fuionq8w85CCgV$%bs4HKl)=NK^ zX22X4kJOvV?amY`V^aN)SWfi3{~(w3f@3mjA|Ud9L8m{E4H)aaT5#-J5K~!wfII(K<$QR^U=o zUBtMWPHB> zwHXXHEY5)<)V!*%xm+#;?rxcW?g^?~urM*?s&)IR@rD6xYSnp0iCAvT?_$}{VdTgM zh68PtOSR`_A41Q=h2ihZO4By%8S*T~?qfN%yulyYEH{F2m4>MC1$1sceLPzYfMn7k zD0q6#X!sGGb32Mg_Ub`UKp~^n_vE|-BZJE!Q<%Z~3N6B68N44MAo5ZlQ?Q})PzsNY z$g-gq9vqd?zN?gC|6N62obHrMCV*W#SN+M9pc+3I2k~2-uHYC&STj_43`yapdz}sG z*+%219G~ZMyy4IzDFLcHw{meN<6Gl-%5aIv3>HEf0i9ep$QTz;KoQ;Qc24)ZNIy@R z{<4}t!Py-aqq~F;P+N%Z-+3BaAT82rr!l1v(7mFwoU7Qa<3&G$YgQFGyJ0ZeFV4|_ zs3JW2BmncO`$KPl=DYLjZFzt8kiQ$Ktn{>c(Yy5IYP;^P#7-FNY~=|#`+P<0Zp6K1 zC14QX`iG%M;p;d5q|Fvj*V#}uxHUwKIvo4AmieUo-SP`T6R=~=zZT0o?o3;BD9pJx zzPBH<6|eEW*%-^n?9d6o+HH4s{reSR5{n2tipgf_ag?odHi+@z$?+Na*a+qAys$V zs`4~qW4ru(Z%E8mqw#aoe>z}y4nw)Ri(zLMbwkA~{5FVg#qoOv#ogQ{^Dw8!J?p_l zb`^hnx3aD9SvuFIWT--&txIw&I+#6y6U`l?8as z_e89pEE2*gp>fruqprVP8*cuz>>;~P?5d(Il6S*$I^7J2mgfyPeC7=+b{D8FN;S!e z+++E&{FtuFvc5E&$}HOi$=|fY_T}h1g8BlLe>(-4OEGhxLZx<(1}-w^v5F~-w3FD zl>|3Dj)7{oPuZjbVZfy4#A;BS)@Q7+r`y5JWm(2LImg9f;|x)$zCZbPYYrkzK3{9g zlSfu92;4P>ZoI-5+%}ph_h&WFeS9vPO1#|g(j!%=p4hbgF&SHWsiy1wF^BH;Gcx}( zHY_rZP;m&TKk^|(|6WTesb7?r_;d#O4rCE}bNHr&`eC0&wJ$d=;ctnzib*%G-P!6* zyE{ajLWK;u^!i?&{!uDSBraaH*kh}PmU@>r{5=srq*iL>T|>(eIhS`rXK1b@%_PMV zREr1Qu4?ALOX@GzKfv|8c`fKzw`J&1(qG89dVvDcoIPX0CBjJ;EjrD*S$Ous>PC<* zktVCl+PN_oxx#?}z2hpZ9vv%5ElPx(cbZh}PT+d$eY^Oy_Ow}VZsptqS*;wU@VaO7 zJ`d~)N>JgvpV~ZOL08u>!Zb*9?0iP;Bemh-*|#rFndU|;LMC0V$p-9}nPDh8a!Qr zi)e|Ym5mS*DJd9o@Q|yY_xOHfbZr5`0_LJ@2I?uFcQtj(=CxDSWxEg7 z8f^OMqUF?QIAig7_BW7t#B6#$p)~%i-dB%Ec;D}&sBSLWPn|p?vBL1ng4}Y0Fsp;Q z3+frQ&P4D(6Gcal`@-V3?r}f#eqrqkl)1jtJ0J^WMpb(+RTjlb zG6UBcGY6}Bzt`f9FN!0%PUO|Ua1=Jn?fh5q!6$2P$VG219cB>1z`%OiRd z@eqL@UA^Bt&v89nqH}rgqJxzp&0WOQHTFoVK14d5Y0jP|tPige#^{Oai>m9z;eLilfpG2m^tIntP1j9y zwZ)zkn?d(1_50I)ir$a9^+zyb>4*}3mhNi$AA+C8CBe_isH zH4M$?RQ3+u;oBd~S-jjGZl<CI6`m%qpx|&66$@*ePF1x%&Ksrltrn}IKwZ!DKcILpdXymcMx=@KO+>LZKlS3x^#jQc`Pqb=L?&lb2g#C+i5^rysT zVeW<&c;;7HpX%3NT<$Jb8KqHUzkYuhth+x~4CbYkA$tB*^mq;NBVXC#!_h4H?AzD0 zm1Mt|4j~d~;#Wwr;*g*UJ>49j3?O6Tbqx|gEsZmMdx4#gXw}e5i7SRX&fH@`*GFV- z-1a>3?-=*|b{@ZiMlN*C=fx~3>olxf&yPieU%YpR_04wUjAP!4&V|iY(1t!Pa-`okal3<1duDi8nVo8XBw?slR0sRrB(6*Q37@$(Nym}7 zl7=V9q@l9+yOB$F|eq9 z7U);fH-qJG+GKhoYs&qV4Imj0_=F*{-23xJri%%C^_ykOjs(t6G#uVQI~YT^*cLTQ zT2m58u-n*-;pJcoyvjv>X)J!v5H&Y_*O?`GZd^K%Oezxkzn@lYT;dab-YWiHhDEy1)G7CAoG+-CT#dR^l2x_-ct z-SPN@SfR@h?8nk420rk7x;8s`Ht{954H_>0oqgZUkEQN{2fzDSSP*B4Sgq6Nsyzvm z4fSP6f=htetX*hCCxT5@iDaeOR__ITTK#xZUR`4{hCQFQY~7@Nn3F}=S=`j9;~{KM zUV&29c=cS#>GN_AuPNFr){3-Wvo#h&NV?$gp4HFxRMk7(9c_5BWTAdNjj_iNOB^uR z5tw|gMQxzPX^XBKE$&Wb1sZb6lLW@ew8OfftqW}14fDnVAR1_e(=GY=ZpYlS_6!*wPp!Zl{S2&fO5>NsZ56)C^JV?6-GSFE z?$rZ?*fDLJ$FclKJ5i<6{!Si~AvP88KZ^Hw`$7(r;z-Bq;OKXP7kX>#zy0-MK zUhL42qLMDJi-icGf+J{@CLXxq`C4);4o>Pdm2{Fu5m}a+&Um^}1#mRMl0)%_rwR}P zop!qa)1^16LSwK@Ii`}X*ZdZaK|oF|Z!8vaAhjRR8N#TBpn=c?bEFnHH+ z6t;uiI#biuDZ6N+-U<~gfQ9;08WY=jSIu)Q_vZ59)JN-gRXcRe-G0bs*{&S7&p;fy zb-VNVTtGJOrPKL}3Zm7`!31A~o4*$gU>Qq-2o;%PtWGcc^Tf-$B(~(P4lg;~ zp8Hdtce1kXxXeaW(ou~+JNt76`o7lGCY&MSHF%@^EDz+KpDCumtq>M;Vf{~casf-A zie3O8vS4&xeB;;ZMg1%nYv+?WM23z_C}UZ6Vf|NT(FzXP%qqfV^RH8j*Hv{jZK}$ zDh#Q#g)9ySqHrvR;L42V(zp{deASXgBS$~4^SfHt3OBQc<2gK?99aP-G1O>TIirwV zrNwCVTJs>h#z~!f{$M^1?I?Z|WAIKW&fi=GXg2an5N|f47jJr#WjcL6L)74+o>zdV z6?R$aaatJ5)&8|g>g~NqV&_IT>Vy_*)zC$O){Ga*YGxkl)UdXs5Bo*=UZ=yMob1XD zAa(_es;QcBnfiAKSkEu;4%3@`pBvPzkXf>qm%s%I{{?6FlxwG3eZIWc|j1HQK)=+L9Q zbUW&lU4Jt2VNPzln1{FEnuyc#OZ*gt(b?bH=x;j!>$`Ja3d)^{O8Q%(0Zwcb@Rxyo zZ?R>2lUYfiuS#FAF&}F-doG~0y-q~8jv?YR=3c5@XmP)@bi7#OiiM)-qgFz!YyGB# z(9l!2c~^wxmUD2e5C%!q+vX7vpe(zYPH%=XMkDYmApo6JU9Fk=vlCBrF};hhKHtQ3 z_@gPOISCpG4G)T0Hy8XTvC&q7ANlNteRiy#HF+3qMCUnu3|ihJf5dfrTRXjVZp}CQ zufUPN6WEp#9lp7C?0-^k`-xb#rVKk2O(g7i9{ic{%#DqkaLFteLxb-Y_b)!*u6x<~ z&=miMmQDDK@bRfsxy1oX@zj>zDqi0D?s=lk8^U{G=HTEu&6m@vx)J_y>;+4Sh+}41 z+jRZ-0E)VObaOwGZv3U9W6rb9*@s$BgQ6RhkIxTheRo(iq;%&P#x#u`1%>c#sLGQQ ziL<mQJxi7AK% zI~4}-iO@!rj_EtsYYPJo$8<~Ex|lA-#k1p(49ESjMpnD?Pc;UdQ!{-j+`23tpfTJ@ zJO7L|q2AYOp;b5wZ-?Mk3u_~reZ!t7y5efM^-mqFE<5Ij&tU4dhj6uKwMVcsfqaHU z38Hnb$byo9`qwUNQ?UIewF*|fwdrUy4N$Sdy>D-APa2;ERU1IjzzZF5a2~2Q7+qY+X~}wWiabp0k4(w4=}gWe#Pz z;YXCB@p&BebGWgkFK82KlF5eAqYVQ(Xge<>KywP(8n!C2vkKq`cNs$duZJ*GUJp)p z*LB(hYISo?Cm$vji@M6`887e7IkUOB_rFt{de$kBOGnxsr4V+4J!-0~Zw@_b)Qr$W z*)-(6(8sS#NE58h6?ZK2CuG#nm&%)*3RVh#+U6FAE`ts(RGHL#4U7fpng_@$PU)%P3l-AL)n%nxHPVGVW`LeA{BSj(mfnXXa;eTOi~8gWut zt$zjn2Af2;;Bmd=n$3yzO5<#>Xg3Ax7F0QLF0Gjg_BTx#9YQiQ3;v~!s5VTskL`=F z?58%&V7iasM#)KzY0qwhSFGmMBjDU9r~$vxDE}FThK}vG-tEFcWZ}qjK>vmm!Jk7?+ldb-<5R~zbx*JBsqZ3KTblOj;-4BIyq7ySIlLRoXSQ> z%I|h4Ey1l?m|MJ#Hz+MVr{iYKAONPD(XKVZYr_U$w~;Pya=}fkT5`i2V3}ddk~;REvJW-=F4Hb(ZTEum|&QO0Uy? zC7oe58Kc=wDb;-qM&Q$HT{q~%2Nh_Az|YHa_771QK7e=tO2I1iZ3Dwe!?)UY=xT1- zFO}qeu1IjGc-UP|`;Us8>5L0fagfEd>Du_7+eD;1dWt?ne0tFc?iM7M`S($S?smr2 z=bqPTk`JHMUyrEK=Z8xqoNoI1rn;5#zZDEu5fUkL0Ht14ruEfQXo^gb@T>E>WeUgi zAHLaRK%Khi|LH?tC#QN+>#D{3S*=L`)DxAeA)G8WMRdf@2yUNI>yf&>Z=$_(<; zPgH{{ns$1A9 z%?PBq@gEl*Wfb3InS_0|aciO^B4h5SmfeIT5=b(ZE##_q>@+zc&bgfHyt<1lu(;Ve zQOF~>^`;1X`!oVK5s#|H;9l4WyB8y2jY$Ok_9fVhtN%okX4KqF$zq&ix*#8ljB(@) z!90F&-Bh2@UITh-ol=xzhYEUh*ZuPNgPs6Hxe;uZmLw6v{ND?d}>}S_{Pth8eK&V{w9L4_I`$P?z&_3W_i*_YN9i|#+#jjg& zfMQ9@!eV7dP*>xyx{Yy@29YysPsFeB7j#~aJ4lBntisxSXM%I18CI{D6^O8Ui+)cg z@;$&k;?ubfTLyc%d*O_^b~kmJMkLTV=kl@9f0#RK=1&0GuSEjS9qV{jO!nnTbtFQQjKEyHDnNUsA5smc5s( z4s&tsc{PV?Zw{neY28X72=1>Cn%$eJ7<*3wz1996e=RKM7gdxXrt&h7d(H67ZUjwP z%FB6W?|pUFX-P%u6qt1)v3f6hD331!egg3Erp_of>vhtr+(Cfh)yDn(NF$bC2kd&t zujjpZzEb-@<$S^C?uJuqw#?F0409V2nu%9e{M1IgxgfyApDw=LiaKsGu8*b>ZbhF( z;JXK2#fPLCy(Gzm|3Okg@{)(aELIab*3@TU=hdN$cLLG!A`zzpr!mvcT_w*qA+!(w zTWDR_0-D;AU0L~kw&8j1-MUE$uVx@+vesg$8uFRtnm4Rw?8)O-L+(mL?9c8ULujCf z|E@k?TRN$7f_+sL!ZQ6!1YJ##K}7OZTK0xk21y?y&sX}DJI6oJb4lG59uwExx4m3ULxwS7)UNHRqp%1lZjv+$cZrgKb%oG0QKPLdo%hRpLkWXQYk<9WWm^?iTB`>u7bb=Ep--+Q?B-q&^Q zegA&H#&NT$UxUUuuixDnotXFN7TqK19^f`^rDX0-ZM-+z^nRx#zvVxh^>%LC*-V`~ zx*Bw*%g_z#A2+IC>X_a2}TyjM*Y~vu29~6dFFgei3|5L1F2-L zjSJ;mvS);NP!D1D%!n8fb2~=H&tItPU$NXM!oC_eAxRm)J9)q=Q1;K5oB$kFnG}k& zO!$qb$V5IJ5Bj%LY@MuV{Bhj&0|i=kHJ;CW9k_@mYf>FVDv0$ndgTIbxD-nH@uiQ_ zc^L?C(`*=L=Wy<#fRz+wXzarCl>DeFj$y}lt!00(6CY1T34oV0-(@`)qU2^?Ng=em z$c-%iiJD06v0fxq>YRD)k9fy$t`+ke=zar*EK@US_C9cn<>9{*<0M?kqeB89F0C4@ zk$@EirR8G`uJ#)^`==P)GV_>lM5-WcT>+ZaODADg3kerxA(Rm8ql*gg?WSW_}RT)$5n2@tg$VObGL$~4UG zY>0xn^>8$!Gaavy9iUpvr6aA+g-}p15+GfGUIEHmj08U51aJ98sP90eE`6)C%b@2n z@MMCzYD<3ppPHkzdd@;@fOk+;?uC#B;BWB!g8>HC(L};8LF}e`(^y9VWf*u`KqTa7 z%@%w{L7M>h0T5y2!za65P!K$E01PbsR7pn&s)o5-9PmmavO0+XBK3TB0;3Q4SQ@ za31SG4*Xe);A6KcEAj#6ezNNewBPV^fUL2gM#1z-B4Cn+G)GL|BySKe#souW4T^OY zyA5rWv_?}dD_GII>O26cJCTImq^lV~3pA_cEIhL+W64IdZk=w*7auI_8-HChGrN1! zEHGz3+g?SD)4=e+Qsv<;!=~@=il!@>K<8lhjewnw@#wN!W&Mo(}U62djs@Jh;fBt?~xz4$8V{Ieh*4u!3 z$+l_UO^;Kh3vz2+b{R^!-kbf2{(J`52fv*8G;>PNEoN$``7uPVm9FTs!~;Ox1(TAE{9kj@Yny*QJ{iWmmefhL0>hhrGld8vg|ej zwZ#H|YS#HGldrm31)%^|&L}USVRBje+g#8nA2zVzAh!s_FF^C@a&!=fQ>Ev~tUgJ> z)yGS8#&?Yk8;l&BOl9Cs8Yuef1-N$5{1gwPvB z3=3E8%&SUI{RSZ2kD9I1XK7JNQTkRNchA-9wX!^j(;?d!;`ULgtxr`r>`^*@3rT=E z{duNa0t}-V;`8<5W;b7xiK^#7AGBzj1^ROn(IuD7i^RXl6xkVxIGDIX1R#}o2l9T< zfdcMdRE82j{X;$$4SIejik#dyrdNvrK^3LJ?+#fp6+)+A3fo*CiZJTK$)N%O*NB23YF#8Zjps$Z^f<8G*aO%=L}hG; z!vxE<4!JaN$7iDuLBAHuge_{{=q%(OZv~%e4*YDk_`)M1>|(sCx;COm+$`c-%|{?n z0`;nlCrXOr>yvcd+l3kxGqHNL`CE&T(vqN?Gvsc*VWDX*zRLG>xl8x<8&iNu}60 zx}*f~t`8g>2q}%o!C4%-o64m5SBs-8|Kz@W{F+zY=vh7^t6;UHpX4YX1>e71p3yjh ze0rHv4#T`!*QiCexm}voI66@30?AvnP7}?lTk~eQfsTO!_TbX|%+^q7TkT<}?2qQv zP>J4OeH0>qAxF^QII|Up^qMQi^};IdJ|I=RB#7^HI+HW8bMVy;K17@bkiht#UiNb84iL7L^P=g;6MH6@Uq5aMD(?mq zM!Wxwn=`1lopru8KUCsdEzMft=%>LNmnNs;f;LkRQcIdNriKFkf3v^ z3|D@B{wtljmYsD1uV5G-UPA41M#&U0?dh0Ui`B4^!W^lNdN*LDGL7!@L3fk|y1O7c zC+H&EBMm*HOD30o(&U6x{qbEvrfFHB`V}$vZn-N_TY3$W=^%2=j^>}i>8qnQ<&Eq$ zA&<4hw332%{To@8e$!>JLL`Pw1Z7!s5dLHY^ATGnGd|7Tc*}ZwvPQw6!qZr~ofXwk zYENJ z3BHiY$?27WU6;AB8zfgj;9mCg)Nw#kMg_pQbAQ8`CW{m>4c>|%z5#6qXfY9}P>>K< zwbbG?v)cN21-fREub@-QyQ0XrKvZ2Xb;)m1ousW$^OpO0@$E-(s(nGfEA8rR}|zykIj{`#!PH?{kkY&#BUpexHSzo)oW{FT-JJk8MX9T8>e*^%A7%pz zxiaiJICyeyh}Jt&`Q6QeM61B5?YF`M&_hzTWdp?oM(LqUPfj_*Vj7Ko;2tRGhPC2g z0jI9?et9WyB*TA$clvN+svM}_`vjiK!N+VW)E?*b+qjen0_s7vj|7cD6GpRTC zy3Hb8t3dKHvzsk_o|0KSm7=UzvY#?UG#fU5AK#e`)dw+{t9%AQW(BlApp@z{ZL?s1 zY#!P{%P^5?W?<FU8&6wYa;xyGwC*r?|UQpt!qBDGtTmTdcUd?en^y`~BYi&Fmk~ zkIr= zPf2HEM=N;;Gjm%oFnRUinqw~1*DQny`XQx{vU~Wp(i+R`DJ}|Wy*=eUwL#$24O*FI z3p2=LxA}!&OTNZqzRUhfZ!p3!m%1MMFCh^RkPv^~v7K~~*V;4$sS)nR>h=h< z!0{&1AWOh}nQyRSUcSCzB}}lpwdYgmbZ;0aT?L`GlF7Rxy~6wk+gLay&>5R^?~-r( zg7f^cNJ%&iS%7jPoEUgMAl^0qegF+VL1wtX~I?kY$?EHf2FlEsD2+PQ^lFek;T-LS&qNY@>OJ$hIiYe%3=zQD2|{Ys8@`Mp0l| zDr)mxWIlIM1G-`T+^|wwnGGX#^(RZUe9}cHdmH!F$Jy%Hul>?%2MOKl`gB+qR55k3YO)i%{e#!UI})b8gyG9Bo1-H-~~m>X6x8rZ#~nuc>5!v!x4s6KD4t&>tMuoxYZ&f;~Eu^RJTMR|X7tQ!)|^ zsV%tJ8QfOGW+59|CUXf+ovnH+rO~q=jy~&;r7r$nxjwX2t8_t4|CCqa51qdVH5)AY zjoKFFhtI(0p%=Yer7m2@@29mr!k0hW)Kr*cqj#>^62CK12R8`R8Wr-2+duz(o;i4| z>12nN9CeBco>Q2E8ATN^tt)e3)||+yh<+>B%GuZKcxYM7cwO~>`r+O>kEnYS{UOY< zBJfm9{x@?!`lWX;l`$I|VsmQsqtVBoiMH~MmqrE{?hW7a-JbQTk$8D%~n*>J(R;e+|?{MV!pSjglh~g^Oz#-P`Zowg-1Gv1wZKUJPTf<3lt!i|D;5F zWoCR=|E`8!@#Uk!RPqMHDyF6O$mQwp>5%aOq)ndW&!#w58fj*%Yv@1AzkifWpcR-D zb2jS}pK7VJc<>?3mp^+vD@Tj!P@jITod2Rx7>B>Ebys4D5Gw+&O`N_rg%{%cXrGgO zX~e?Kbzzb;&9D60aH?T%a@AdRl}xWp^ar+scQ3P8srsjdopKpNTf@TaD2BaPWAC48 zVQP0Kg<%u;FzgSX>~DEZ*V?(dEk>qjL$UUCFgf^6pd?iMVj{3>LSn+!KILnDxK5r1 z!&$Kr|FnE*2Rr7Hp)(P!DTAXb<+)6U)mI(SQpBwcmN~Hf6REQIcI6>hid%{UEY3t$ zD5aW9YeIDo9W#<-^EI`Qm}2o94z*HFWayam-ch}MF2_kO+uFTXHzV(hPC>+>eJ;d# z4VVZ9+cOmUA0^p97^uKsKLyY|NLH?gMt#7TvEId}1Gdpm-e0tpemfYhkg0)z5ravK z39ES;oaDlIVhk<~ZOOw5fB6er#$G-PB~G6}9ieu(AgKQRg9z9U5g2i$h)*cC=rpw5 zkt&dw0}utUW8v(=;!3dcsKn3wmi=Mb3C_vuJ|6d*9{Iz=3B0^6`yLjY=lm`f5|B)& z#Ngt@^rWL+Ih_4?Nv*r$JP!Zm zr3nqi_{XrrW1X6Bmw$ed*XUa0Qq#hDC^YY$sU=qdQ*B={OGgA4N1G7ilxqNK5qa{{Sw;K*@&=zT<7g`imzpp%cTtcM*@CG zr37v^U#&1GslK03)FXU|Ilr{i14%}X)Vi_UDkw8=8){~nCafVy%?{|-X!e-I!oqhw zo+L2I!2yjUfBHsz4Q9q+j0}Npc6XtwQI%8wKVrajRB+9b!>ih7F3OX&5=eG-eSrHRsR>A;WLTwyOsKqH zI`Lr8nYX@wzC=@x=*g$tCIUu@0zOqrH4v_$eIst{MwmMVgVyed&23a;P zk^wUE=eMnr!n10knS)r@kOHh}ld6XA0AX#<`(1g7pA$y?%~oETW`~?)4>t!OfM1bs zg99W811Bg?gaMlp`j17W#w3`3B|N79M|GqEhiCPeHQ#6iNYamXE``}!ivj0TR^ zWY9;$Iglz6qtj8edc24f-U%QdtVt4$e<&L)^1FuvtoA_)Jrl}0=K&qm)Os*0&2~AY z@qkJ6e(p;T8YaG-IG!~cTteVED&S`NTa5>!fOWm@6SfJ>Hct%!aZf<^=Zx_CD; zYv&$keJ<5`16d56%Jnk)E*k?ilMErL-@HBEWGHH8JN73d`;JY+igmtE7TvN0tWZ8Y zKAN{F=CuU{PoSl&e1J<3vH*;1o`!#Z%>!|UYUX0m6VyuC9gN$2WVG6ep#J@&d!&51 z=^ATyGMQ66Za9E9#z!Vq-1kKuLm3U6DqXDU@o&jQrZS<5o;H8} zkEIHPqK6F_j(b-W>upZ@sp(t8dR+18;WtBr(OAqo-HHiR4g%|`Y?@jAsXV)zOA^R~ znrj>;qgkgTnQT~Z&*!vPSk$3ik1AVW?@J-i$~C?e50>K=W6K4^Y|y-TAT=ccYD)g5 zHSr7=+Jmv6zjV`HvwrvIf=RGQ+tF>^#So`zxs8s6^loc`PUhug?HbYmj}5)E_Z`!Y z_qH#B#bNuU_kH_NlCD5x@5{sOwg9xh&_m^4ek1I>3RS}QoM+xhHUZstq$mugp!EK{ zVa_$q%EJMJ*RaB^?Zo9ecbxubewavu(#0Rb*mrMJBW6y)4VyjCvhTBeW zMgEX{cfXLsMl6yxVYJ)M1z9W;PpkWZsh^SxVtW;zXPe2$ps7b#MWW4tOTs4)cu5FPmCs2b~_z1Led6{vx7thUdIZs1U$Hkf*R7P zepUXE=(Kw1hLU#uPXs3IZM#LSY!SuH1lG&_Atf?&YoYXU{(yckt ze|l^!dovR0*?9X)G_#*6snlWX<=f+zj~W-h)TSA!oQaBIOq&k-%O&8wSm51v*dL$g zQ*6QOd-%aK^3TJqcsi8F-ML@PHkC1lXJ>#hOC- z)IKI}W`(%xdmE3Z+sxGJ(tWOe^mG)hGH8*C{FaK>JKSn$r`&(oo(IYNMFom77G6^| zBWxMv2eoRMp})^3kBwB-N3*k&Lr=ex3$b@8eVdk-6!OchPiCY~gk^c39+PCB$ltp^ zADb>r-i#Jq{z$rQyYFG8J;LJgMHC5->o0)xxwH+@`C|Oj#x$&4%INsxMxEdI2a0*p zeR_#x%e79|mG4o4uJ;Au+H2&3j54&h-){L$s~{j(bb3Rn{!XgGw08rX@XC#7xF2zjp{t^@0W>QLn@ej?t~}?@~k&GM%7A4Ad;Er z6W*HrJ3jggI;m~EZ~u%pnTe`?c->_&ZzLg&f4!r_<<}5@^*PIFb=tiUrl6)!(d-r8 zkz;U|nlfI;=HM53$pJ#V9B^)nS`+xy_%_vb6yVTwMv{9(Orq+v;jrZ9mR^zm@!dh?CL#>mHh~fL)oUwPY_=g_VMwCQ4Ob#W-X6>vt zzo$$`t-iEB$(4La52#0be{;c{;(G&23%JZ3Lwj}~#&mVqf=%jT;x-tC&RnM(y>2j> zZTn7;`SE3MTObC91x#6xKwX*2G;98$HKMN?Z^>Ni1v?sp97aw%DYLIo>wq|nibM&=b9nd3JOrdA3@UVH<997kdPf8q zM9DHcjhxwWwdEQtxI^&y)7AdidRTS2o7_M;AyNLH7F5=5s{U%vNS{OoVj=a*;lpHV zou)QawuWB=4&ed9c*#h2zp6S#y^2d9bUY-^IR7h!Z4K44R{%DZ*+`asyUQ9C5Z`~1n`4P8v3{wKY%E!Iv@Tf8qT{`vJhC$ zTU8+va9hB8-yuwSi)NM?4=YNdydGPFttJ4NC_+x{hc1A!r26atq_Q5ChOrh41Tq^w zO5Uq2%@Vz&L$&h9ivmb$ovu(_4J97a$A2LeirEh7&yZmr7i5sjBm|a%U`rJHT0I|l zB|<|sr$a@#5cePIM~X+&Apw&bFor@}2c=JEjQ;U-6^&v9=w@k-kg))0lllq zZk^P~O_*}cFeboynt+bf9CDG0s7KIAH>Qebep#^EuJo)#p2?yanPwy4NDfiMb_K?2 z^=^dZ$B#3s5Vs^ig8v&jXkeL*az=c{H?l>{_Fa0J;2HU3))1d*%XiFx1)bUIne<8w zeohWx-dun4T2|q{nqc~7(-_t$Vn#*{yIgR6$x_T8UreCo?qWEO>#r=Q z41Xjcbryinu>BPM;$3CTAqIlQ3P6G20)ZO+@Bwu4l*!yKubmHz)h|${hVX+2ym#d} zwg1VP9(zroYTi#w^o?SB6Dp!{DN22s6 zvtD*??5==iS*!KJ+*LD#eT2f{2bux+r{HuE*e6&vf2Pi zSawHT7_j>FRF}i(*W$+Cm3laT{x;-lURTxLV$N{%VMq&C3}{Eu%((*iPD zzcN@A#7D^cDQ8%BwjD;LlUx$wY{6ojp+1;1l2L1ikABUgyZ{Y0avg31Gj3-1I{ZpA_i8ydL#NrSqkFU zCrvue_rSbUyq%HXA+%8x*^P@1(^{v`=Hzd+TRn;d*=FmFzmFj^c>KwGo+)XaEML)v z?N6YY7gWq2;B`r_G|f11bZYhI^^D|5 z3UolN8`hoY^!sVxlMzS&l_@7Wnbiv6@9!V!N?!h6Tz62RO z!Qz>6BKw+y^ng*cbpLkV)%-Yaqt0y8mZC{OtAUW^;9Y$#2UXo>`8&n_uSlt!hM4H+ zp8(h{*J}#;T|{hR_t0nmB|0`W-><4fJb7)$xYfLj8@>VYw}~;R$OTm&#I_vfb`Zeb zF=le@caZc~M_~;Jco)k^qT*=tkhFc-CwAVQi2M!NK_hIgSMYQA+tzmar^iL8RLFf# zY5z>Iw$1Fv4<(9(xx0;{4gqDPCJyr6&@Kn-0@hMjqeJpuFs71-ax;WJ&)!MYDRc!Go`N?jF z7FPyBKoUrV2YQnqOC^l9Z_23udcQ6zs*8>mdJrm#Ip2Y*%mAVW81n6EK=Q7I#uLpj zQ2BzLd1?<--?`&f%y18gKt#`X`pla}2*l+Z*p+t|c-H6V1b$+02cTE5U!7;(%PJQb zO#gGl)&mkc^HfhFM7qxs2&RuQl`Athu%QakS*4=qi~khV`|iQM-uIU-&p^m&jIXt# zfqTFO=o?;hJ!jMY+l9&CQ9l>Yt+-E2!2%goq_jbne47F!;6UPu#3D$*+=5gaK>zSS zDT-vZx(P(l&sDZ`c4XkF7yQ7T?KyC{Z-XKLR>%ybV#HwCj8w-%JeL064E~gfwlL1G4Ca%_dWfHFPVl6T-v7A>>=Ew}R*%GHiEebW#S6%4Q2xmT@{i;PI561g2>1?^+I%eRA;#Cz_Z~->?C5k;r^~U= zx6geiD@t4ejJGa%dfW+|njddnHrIn91+n1AipR|NliV5gBjvl)OV(#QP{*j2_fIIY zi%aIilf9#e&Jpy8y3Kv#El`xu zmmvCX@TjkoPWHaL2LahoFkQ_NJ2fx_6&91g%`5N^ws8T@%Qu|G0CbbI#MH|1E}vKw zv#3cam^%ZKDCf}h^O~l7)(VNQ4YnFA$&CyFBi`K-FnF*8O}7?y9OKI1EPU~gSPUXJ zZm{jUjHuh*QIUw`B2QVeFHCW&{V+fMx$Gk0NqY&cUmmB6U7oi9vVy_wFhZs@3gJT3 zRU+%r?C5%p=i@uE*ajLhw*oauRq>DIQ32Qv1O9pi`L$?WIrdkM{M{;cVkyNkMQo@; zoj+5>uKK-xN@XQ>n&$Qk#fMxq&pU070aWx{zk15bC{d5({kdE6Um9)wGb|sN$*Q!{ zpa2hBmj*m6*HxPn?z^y&keC`0%Evfy(x1V=5o;`H>0}=X9Y3otN`mq)4tXDz(}$pX zE;vt61Bl6mx>FQ_+(;30_8YuvN^ngSAVFhDF9KhMAhd~vgwvosyHcUL0s*hU;!4y9 zyr51H_@Dn=%b+U2yT;-9H)TP;W&}0HNE52UploFTflA_vR)DXYAb{NYGP;={Bmufl zDcIx5APj^DT-$bV+DdY8Jb-0mVxtu;@bw;a4gaynHYgZaQrG{de+oEWW;S@EH)Z(|ljwGS3&801PogEhu92xMe>As}WUa0O8&1V#c1mkXUL z`3J=OE8u@Ya~trPn4KUf-)w-T!*hN&72xo&AfMw3wnzw+22q8WvH(#9SjB-HE(8dQ z!$5om+xbf4kWr3=gmZ0HY8D=n}+1gUnF}1}-r|zYUco1VITHkqt#4oAUn>@V}rLNCqMX zgL=ULaSr(x(TFy%9t=^KQV8?SV zI)~H|g2A6J63=@k~5eGXWNyr?} zuTBoMhQht|{F{fji-TlsS-#S`UmXu{e zF#WDAY)6*Ut{ERl5$-ZUY^p$RN9P&Dkq`(2C#SVmO2O`zS3{ORLoc2QL(o?OVoD4R z3P70T+oDjERX)abHDn?kzJ>)dW&RHQw(sWLCN+7G;+e=uQ0}RKgwBA5=?_qG#URc| znEmzh+ox~OR61enoyBd+!fLi+im6?Yofl<58dd-l@pVh2qxi7vN0iKqT4c?=e%9+WrU;H~P%ocp$v-oJ~Sqim&N) zAg(+F{!gK{4+K=Ucz#_<@K)3|ilIVsFG0gekut-2B#0NtIossIiE2jUJ&=tPXaS%3 z_!0F&1R~BvF6rJT-TtpD6U|tT#9%P!-?v$TgENYbMoIPILN$;M#Ski`X#Y%a3I>kp z0m5!^wJWMb#M|&J63Y9KkYDwI+P)4SpgGb2FBbqi?taOhh{v7 z$@8CSnOO=ju#t$Y=Y!Kq2;?2WCNsx$WtS%fkeLp^(%@LfeL@qqO*KY2<#CMKL=bS7 z2_U9fw7@J2z?lUFQVn2>Yh&UM=>FqJ(hxcTNSKz_C!*hT`)ABI)Xml}+ES`M_04+i zX#9ZlGt?va5k4jXb@3tfp4oHUVDOEu+jpmPXru^@e4B`*_d&>+Hy*}^M{6q5{^0m< zak12>_@#5z7Ashd_a$Xf$nXC3bTciwZu)^GM_mbBj6XjXO?n~~vwusO8Q#6+Ud`3= zm^B>BQyRk@HawQ9n;SiD3tJPAxy;kG#TUF@YI^J+9_7%Q_yC3PvF)KgspY+4p`h&@ z`oIl}J!Wx%9F98kT0%t0o2OxYZ4_Bauu(T>dj}fC-(sT?kqK>}WvxPNU}FsL`(^%G z9iEib)>x-n8g@jH9Rn>{;vjMsJkf+y>Llc#l|~Ydv#=+=yC1t&dIa+F{@4@djuw(6~vx$95o^UhTrGy^dw`!dz`WX+LFfdi0;GcEohVOrd%j zgc(Qg@Q3A23bA2-SHHX2!a@~H6Uckh#a2$>{<*|xK2&>*_CY_Nk@uXlY!;3i^4fde zRbq@UDmxYg3&4T~V6_2MU#Ot|c`m)APf9lQ0gP$Q?Q(jCZTV)y*lK!z3K99tzVqYs zHZQE4-V!I5LHrga(LBQv`Y1B|JvwU?t74)BFW|jBLVec4`v}Zk_3@}Ay7lHnfG?1R zLs^n*{=#!w?op(5px51IS+S{7x#TI+D~v1mE2L(_2uK>DC|#OTT*E`b^yL+^C%CqP z1MoKwaH+d|BY@sddI(k3X`^JgL6K4(>QS8|ogTXR*>!OJUm4835fh4VXf@$!G%S_k z8}V@`@D!b$_PqVVuwmk8`XVBT*H*Pq$S&}eW zCE0x-0MB}UX&%L2KzvOI6K}Xi1u+eCFp&p?MEDnRl&En`TzQ{Rk*o8sj7~b=cBrqi zjR9%stWKuAd?mkmDhD|$A6LI>bv=O%s1hkL)U&{V&Ky_D(wPbU+}(Mc#i1GFSs_CO zwMTDT!OzUEQ~y7^05qQ!l=r>Ux!_q*^Z*$HWzeOyPV#08iA|l7eC_FVqGCHE8xPPh zMY#=VHu7ix6wR-)9|s_bCTQ&sLE3d~Mc9@49VBK` zER_c6<~6r5BqOuBu6wH*`i9vgpY$mz^c)JfKTm4Cq<-OI}ru*y_w&y)jlN>*VcgB>=9%qttcj}t)*9OAkJE-Jn4wiPNo3i z&VHmc77>J8OpF3iBE9n;tYymeq2`E1BsHJ_jT>h%pX5lNL|Mwa+Zc__#-*InZZUuu z69F&L)gxa*x5i$!pCzLmO#yqcVGGBpH3n< z+$Wf05B!v(WDVe&*&ilKtVor>az(Mw*}Y_yPm*^=CN@kcryz+t3>**d;%^Gr9b43( zZkkI2K|9Sgx?DmzAv0?0HTHZp0HX6QfA{yFGs)ayOv~(@?y=R-0L2%|MHf-rT zoOW}&@VWfPTBcu8uoTG>f+DUxB#8j6J(Rif`y)InujgnZ$CrY+meZLa++1A22w%r(1!6_eIXX@@yo%?l$&uKBS3zOlTO(`+k2DCJyR7T;102a?Y1VUtlI-~NiO)2$U zp`!Bs`to;Tm$+mCS>=S48Jn}l%-{(>TLxt|=uC?BZ!wN~;xus2&9a(1nJL-C+!F&?Rb=ajab=8EGX=@yo%wT%5rgc^KlZu|=m&QXMGg*YrTF|1F zAOd!dHvF6^%q{+^rce}12&ZK#o5lM8+Y-O26txeXgzpx=YcgBz<9XaTtmB=3Q*9ME zyn8;$6jW~eyK$I?;8TEhcm4`@+UFrsnnY^w)kmw2tb(pj15L52+h26aqb?^(qDu(h^+xPk&7B@qCcy@kq@F%sMY_ic*=KC(v(Bu;LybJYDT^V!nNY z@B}s~N}-CzW5-0k9=qcY%&5K#%{3FUg@2eD7g6t8K!Bwd)+m$`XtGXd>2p#y6sNX( z^2Ojdf5KR4gyGSz?jrwxEJ*x$z4E&2>l@&Sb?5MHHheXx2@E{3ZfU))tp2-rW=*ft zjD*bZd?4JjR6AU(8!tCVxZDZM6$OKBmfl3~0#Cm1Xq0>@IA+Yxl1Chgwkns`!+>w4 ztlhiMJ>Z=oEZlwgoGPw@+3US7{nPq4xIEtn{}-3DbMh2HV9}yNqxLK3P<&t4{ia4f zlF#jD*8pSYO>9nx**LL30)~xhew2GQ^A#@PrS_X`K@l{j^|qIi(yIwl>m^8)pI+xY z%Jgo9Co);IzYZ?hKEeUx!k~Myt${Vwp|UOc{BEh0_Pz1uzf08^xE$8yp_V^H#HU+S zkw44R3D&OP@JDT&wnxAbc~0?XG%RI+lCVydT36g^P`>6O+(QF3LUaVJ8<~M%8kHuo zH{Y}4qH&3;sO`z;Cc77E&`^c0XZ>r#9^H?rDJEsa(bIreFL zKd>*-4xc)Y^)!Y&Kd>juqSfqL@Z?ix^k`8!r=xcY)|0OP}ks2-KG*qjud>&icwnH)>TsM}q8hsO={E959og4$2P!sacm*dI8kxizr3C^%F zu2d3ez%2XUYVcKjxAmpjZaeTf{r3z^Yb?(y3vG?W)R_O=+U4a8CNRY(9Ups+`aJxk z$S-nTc?OnFI$$SIB1#x|jm91lD>5Qlmu;3D{~lO%vDqbM5hQeNfB8%#QqFo$Res!C zsi{W58a-VZz?J9q0uEXu^6hYk@piQhMx{6xkLJilSuAbrI0sfj>WqJ>bbWdvJ>tWS zNkg)!yd%fGdu?5-f0=tcith3qt<~V@f*Fm6CS_MV57koj<3){mRE7%=t#_^+*q{3YEF*j)UA9LDFvabonci zX{URH#uHfFk>b)OWc4Zw>tU4^pNhe+m3H_g+{xHYJX$1wtf@%aMBc?y3T4IhY1!R2IY7EOu>2iM74gw_l&k{*aDBKfmreHRHZb z5S21}tw+=DneHyr$WTWL`S7)oXfWx1ADADD-6C`7A(pzSR4?M8*6cwo>F#76JQVUe zfw{4Qj2zm~t*Cl3p}R%G75HE(f!O!m`kbbo;(X>Fvqt!}6u0t<^{e-xNerqk=?Gz& z0o^45Ln8{XvZK_k84H{5Td>(<9+Gt%k_3a zj|6wk*=-h3Jg|DHP#P1bt;I6q2p`4a3Q|f)3D)37^7Q#5P|xx>e3UCpfGK$#0{Hhl zU}UK#GC2(+(HX|f=X3&#yI38ON#tKr=z2w}-Rno>yf^lBd(}LZ_;|gVNdoaGNVS(} zczB${lDoElrT!q4IJsEb0YWMuva&IjM|%^@q+k(h`~`T)XD0y1AKhU4(d2p5qpyT2kFyeo^y z^n8|{{MpLeB9!!^s!N!gMV#zz@k=+6dY7E_UMjV7Vcr_ZGxZjaCK#AoPp|L7cg)FH zVZI@qy(Sp95LQdYRNgmmAyv$&<#RDrFB3;f(xM5GpL~#n9KblixzgdX)kE;l1f6#y z3~KbaeV-0Xt+oVyBL|)kXqGAvh>43A2n9hL*4BFz@Z(gE$+5IJ+za^D@5}1-c*3o5 zNEnYE$SPfJqT(F&2WY;Fjwfi8T`&K{zF%yUqv9MM8YzX=|NS=KdkkI@T(v1&U^(AUn>L?u=ym&lSGTD1U>E`T@R+~v>mPo9pY0Q|Di#uIh zRa_Z5R3>b_G?)PxaR98@q}JOfaro5p?@f%O^4Q7RbO{9Hxqyj{8B=K znR3a}o2brR7dA0%Ik^~vMhkhld;tOmour4>WL9c$;HF13KFV?y`WC~a5GQ+V zzGBc)J)&l>A0E8(hx4RHm#;If)QE`X?jDTMix!nsFQn^b_Q<`}$XOp3Y4#iTEyfB*5Q$AS5 z;~ITMw|Oeu4h>*J{ZGwUz67i8aE->l?xS8NqRGa{HXnbPoUuEF3tHZEz{iG!yKg>S1yqG z%D&%5r`>h^52=fAa2v5R@*dhJAYA0008-Oo5P=?Xum(`OugNMC2c$p-c_R08l~dWj^m zExN8%z9a`v(B?63eT+w7z3x2G#l#M_T{tONQXts$!wJOK-M%~=O(`Q1@Wu9fz8h>X zA6Ke35vSLx14F`P7up+3jfKsm$iNoOa$!#{X{{YmB&zT|L+#j6KZa(b$lnxly!Ig69{)*iVQIDd&P(sABhPg5MMEreE(7PV|;_dBIYx7$OokUDZ%%cYTZ^+9v<9< z3U!xZEc!@;cgmG## zXK>Y-=OgfL4U12aEM{#j;=?HqHLsTK`(%bS^}gczBXly>L42e}n?hu<#ZLEDQvR*Y z?R=9Usc5drT2=NSAr>@5nG*Ct4?J=vPdXW5`ZKYyG~|ZIvis>zCa^aCxgWc$bC3rPe{i_D?7hZm*E54U^ji9{pKB%kRc@z)q>?vuf!dj zkCssp1hqmVkV|(i6NYDgXU2W;2^nI*+o`^ED7O%+(vRFG@X)Mto%Rn9b|w zUf>D0L51qA!F;)QerLy!w>&T{1%}ZKi%tJd34X$Cn&depa?|9bQmUp(e9RP^*nI#W z)n=gxmxEe4+vrpeE$}$s{6Z^*S{(4Whh=k+kV!lyhF<+-`*|^-@uS!EhCuN4FMRH4T*{+1X=nB9h8Rpgc6S zDh+>`0Ua71qtEn5yvb>U8?~3AH2qo|I$Noj$@M{Yy~Xesj7;9UH79nTs?3TanOj;$ z-1b9FvYGld6GWdKhau>AJMMFlCl8C7&>h-wg4yD9BL2^3Q#$vFz6B%LGo zF8jXbrJX=eW|!f9^^3MJCEObhx6WvH#))p{Wu4{q+?6EoQ0uKesrT;??Kqx=oGBrX ztJL{)0p#7uN)c417@^sb3S%V#YyHezVnZa8{6JQ*O}*=mWn1lpUz^tsWslx7#hoOP z(oD4mNi|xLWodw5Y$?%~P{rN{sCrNKYVWTC^Ez{e(g^@(EPgL=_Vmlr37yBpWv|0O+vZN-Y zLt-i5XIQ2(Zrmr?R6Fj=b;h253&QnCM$EibG}Le^=>hBMZ_^y!;z z{uBoB55&K)0&_HJ4vM%b4=s!J8_(VT7y~HgTDdh{-fP54`sjS2GCeDg9h2L3vkOPR z!?pe^@pTh*^c#teJci7Ch5E3DOiV71lZ<#bW|cwUq&zPfb-*WsEM`HySzT3& zZj#|TldG~(S|`Io7t%!?cdN(`@_GHi+z5O;=GI}@vWz3-B9wEfjHqVkTdU#p$`LE_ z38NLG=RJ}A`K1aK&`J${;yTi=Lk4jTUR5WYhvVsJ=T?S8JF0$5eBD(%{2fE}xDECB zJD=}jrJCEnSTJehGFa-AwC;u0^GjUC+OVzFtlVoq8sCS-8Us0m{IciW<#nMhsjGGx zrNHXG*PT|S+59Ia;!z^|i~&@t97UXu6JO8jmHHpY9DHsZw`2a`r-fja!_!C^J?VjJ z-QzPEd|7t8TT2_}FC%3GKHqDQ)BPi!>C#lafWz;5;@q~mOz=jr$j`NGb)l@y=FX+W z`8n+j)s>SriiXO?5go0tSevP}^h+HRWX)nqoZ)k7RIe?E%gr^Rv4ul*GQ7`Jyq4-q z!)Ylb;NT&Qu}C_9|7t5mosBVux{m?8lz?0yoJc`7Uqe`lEA#{&FxEHtKJEX)J92d4 zzWNJ1m7+If#X1*P80=5gRr+q_8l`wXI1!{)Yx@Mz0JD9P+4v>3SPxY`IzC?VM?Z9GM)L7$vlhjEjO>^!jyBjg zf%kJ<6GlBTAt8=krVPPROsLt#0L@yGG9iJ#mmNA_+b3x_nU`ZLvZZy`?~BJv4ntp@ z@3zYJUDkUMszVCU%{;t+Ei1}FEsxZzDwoT+VHV-+qvcS}u34gJ+g&k)`x?eXD&x(_5TKRxRBrB6rZWy)Oha`u zWc!83=akKA?B>XM4GZ3kphc{{aKA0t5Pu|Et>p;%{3bBMf5k~^a)m7g^h1Uv<)ehg z-QQh?@5r^ig{VgwLZ^=H737X;l?$Mb08ro!6AQbtF(@liLZg_=_i;to@MC(wr2n$mqnG90)#b2GEfRct zJ4SXh8;)R6t+Si+rdZVQZvg}Pzdu!Db+-QuA|z})?Iks?iT!o+6Hq(VU~u#8F(rz^ zqzeLG(5bU4P8uXbx>P%B>m?L>u_u*STN4V{V+_T)E2Xq=(g_l-#h@Las$fr`nzlk| zSL`h4n=Z`Zd05W-koxX=a_x*)JN4r0k`IsBt=GvAxXoAiY0lSNV;kVC!VuAG$NQYq z0eL}>bPRYXR`ro~>*1I1$<}i+kI>8G+t2wA%}MWchFN=l8#SY*M>#UXvV|`9>zcT| z`CKLL$G|gO@6Tu!?_oWBD6GZayB8$!gxUx6lE9*y^rHm#cs0?v6L+kkH$GJX!eYY_@Sm z)H}G00$K0rhW=&A3*Y&n4VKsIUUp5R1K3L6MY^`Dk0s8=Gi4LYhHGx?oPIIA{a$U0hlaDf70aCp46Ec|L%->{O6jpB-u zj@z78H7OGboD!uKreaCuJx$b};%d*6x_zGMj~uC^bEJ@7;~o_{qj&40fmZ1nN3Yujr8n&NHfjuA`fKAqPn4hxaCtFgv8Ke= z6gJMecv)G>1AsQ%;U=<;CcX0cErpGT(fo7|Ej;D9T4q?)*0*||=cR`R`>q|T9v&#? zvNqU;9m)9Zl@HBzj(Zwa4`w}ChYwe4A#KMsIcb0Yf& z*ZGqf?#=56=cU-l9PES>){}=rEHL9Z(#?XcnTOJr2`|X!a)&}Xraa01e3L5u7cHyK zAvqNYSJz#_%4ytp(pQ6gT}iAin4Ra0bO@}XYNMSGzdSI@JT50|TmHOyl+Y3YI_eROSo1OLQN>P&PnjNt` z>!+{!*(-y~zZH7ftpA9in&}s|u}vkXhvR(3qb0z0emE*b9`rVGop8YQN!ihQ>J|LU z*MF`HkBZ(gb*BXuGHE1~jjb8$_4eakCow!4EVMz7OtvSCy| zio$n+=mY}w&hnJ4wj0d7B%u#S{Ek+N^mZ8IGt54#mAhA;*ONY&jaKn~N8ip9Nwy0> zBl@cQ@Mq-53>E{aQI}P4P-E4Vnn>v>{KP|y5~;P6O~o3yfhdoGx9#45>PQX!op)!_&}+!o%)g&4c6$p9WItp9oSd`tMXvTkjvL ze~9$nVJ_{(cpm*CRVKBmA_1pWNZtOui6(BQTLZ}-?V3<-=7^8(+uPqo;f1J3<7AsI zkyzXz-~6E)VSfLTLT`YacjFNAs;H_nB(Y|`5Xw_L|H)m|}8aD!PYBLBkPYNLAd-A#Ve$_+WwOL(+AsT`o`US?e9oL1PMn zTB2`w-KyVf%5~XH74VFYH<)eckGd z*RrnE@9gJDfNekNIgT1ttr?lJ%BGUuwd;m^bmec!qc8g@vxiqPJL24W+1%LF_S)!> z!m9kXMJj3rxy7_(gIap%%b>)^*TzUSMwX$p{Pc?amW_*lr@%?H$p8?I5bkX?4hv8_ zQjcw zKbEd?&&IPH=p=5`wN$Xn?P&}JF1YhC(wwR&CK!q4=2;U>Sjkm5wHTEd>tiV90@`&q zU@7_?4)Gb4FDvf?O?X!2iO!{_}Xb1?rwG&{hF zIOXkS4az4mip=DtA{`SPn6$GMW%v(>4fcfbj-ldqb;m(_sFa54?zr3e zEwd``Q=%A^JJd5sejQO)eWh*54VZs!nq_qxsaGrKON_pm*qC_O?~FNN&7(+{k+WsK zB_T33u$YyKv1V3>9Li@x!E4-x?Q8q{4-76klpX+ugAMbBSqRKC<`e3viQ=X!8K&AN z6Dt{|DC4libSZ8tk4koXi7%+!Gjduw@&a&p?1YZIYW?F9f+l!s9L7QHAxt5R`P!KV zBxO|tJlx##y0%j82d1t)%2@2r?LvjIrLeRB4kLQ#w{p|-O9%3<(zGcmA4iG4Y=5uJ3qTF8BOXF8p zQ{~_~{8IpcQ&jQdNg+WKm7ydUVja6_s!g$n78loc%LJ;MHp zw9(Hi)&bZdB1%u5H@y?QiTrhg!tg=n#*%q3LGWoDjeGttN!`GaUy6y-ANaXvDFA78 zZbxeIil@O|;C{mu-sDPtm3yuFtN73|01du2a<>14Zw*j5@3lXE`e*xD^;l@qy5cM7 zjsC{W*eQnp058{WQ(DT!WXI&T+wJl_^7by$>Gm%D!=f4pDpB78RGeRIl>sTdhU&J) zp62at;lt^aXBaT2)aiJa z?{L@zz5a(j!WG3LgN;6OM=cQ#Z?T>7cc{^udq3CQBl><(3)PY<+evmJc3tU$b5cL9 zjXaHo0LPJ7v(~G>?mrxs9H@J3-=PB)swZOerP@@NYsu*sxql??KV;UfcP-esByQjj zySkQcc*T*!0u0!E8%2e-@3%7SM8{fkhP(tcMiL3F|XDzK^Qj$!&Z#3IL zokN#PEyn-}piDU>`IV)rSYmLcUn@o*b{Gw>OQyvrxbH~O3}&>2P5(-zF8uUJ|0K5) z^G!w4JFdTgyVj_ugi9DxG5q7@Z8+J(pp-!&S?Al}x`^KN2&C#4=s6E?a#NTG(PY{; zI;!;VD_MTfZBiM<=f@w``-6e29t}FC)&hXczV!XDYB28T7!BKk{O^;l9(p8Ckz%U!S#>z zY6wWhE`R)EuYbEC+a$`Y<3+xmxo4nnAYxXgJgUToW){KgOsehj#nA+as{lFU#8Jv9 zlFDdrCnR#C9|9uk6=(gC>7~`k`&(yk= z7u>`yDH-2|nRH78gu_R;RHbgq9Ct5@*cYagS7_UCcDqjhv~%fiPAKwyG=( z!3Sv%M}?@9ok~<_myoLJL^=I#`j4-XLm1~!kec2CH?1}_a!3PE<~hXuqfo2=CP|mk z6rERgH82csFH$R0URXbZ-Mvwck}laY9q8CY(tdYZzzGTS9~gy=>oQLB{U|y!F&#R6 ze}<{uhKC$d8FuIIVgxjOH1aA=D4IYGa)_(%aPuBMy!sMAg@r*e7KceP#$tU}VB&zO zs&YmO4Ivu=T-~INA}AkFEC^CqJ{ALrdf&TFT;G-x_BH?Ry0paecO4~fd+sFvt7yXq zu!W!wlnAZmj$F*y`>KOUDS1C}&*GyE3cZ!0H2Mfwx|9LX7kEzA$>|75I407*M~)|a zZ=O00@?+(&4EcY7S!Sa#6j>T z!>{3}$U?*a6`Uvd!(TgYcgaf;{5tY&EmkIY78jjB4A?SCgZzJ%B+?!f0ndd?zD33;WkODWQ$`CYn|mIahn(pvhwG4h%SP-HjPVB6K2O6XYQTcJW*B;K&2B7i0kKi@RjVOPIM0Jfd9fdJhmrARd$%`dTO+yBIN;EYq_S;q zvQ&61PnLPs$8mQYNjMNq^kBA@*|VI$7Ob2(Q)bnPz*n3x1y*qnLOxU>&RpzGU5FET zy;dn!?M$_84Q_TjGq}4vaNRA;KL%%d*#Ln!7#^mT%jLN3o2cuK#A-3#GwkI|EA#Ao zZ0I3$MbSYcwKPb_8~f8xQ%fDqR8xYpKi?*Rtf_RVHu?8Q7@ha$f68>4hOlliZC$^_bq=o>7^>|@GJ>iG*i6^K*lKw zn)WzqNz6tHL?ie!CeI(v>v2hJI+%uthStS>)cp0=FOC|U1f{-M7^fEgURcXbKKR3$z=UQdlkXzG>}@=8j|u!g}5v z)Jxs7+AhA+*VpgUC2GDVJQmE?`qd9s1!pu_2O{X!poQ+qxD*^Z?Sg!=9-GDH!fef$ z`8Jm$-83$zmx1U+s{UJ`!U}(+vQ+>WpwH%pN3Ye>_3>s)<(m|#rCOP`U}wmiO4}tq zatpGTjZal9=pgsF29Oa=7;S zSQ6%bZOzzbsm45(PT7`J!szYjFEX4G$yf@Dm-5*LOrmN40zqDvC!bkHs*BEZ?3>~r zCyo6=;+tf)>UZKM=YteX7SfpS=tL2#ouS1+iHI$GQ{|wMB7I7jM)u{Ne9rsotf(LU z9Jf6^DmPd+IBcn|ep%}ZcU=o-|Fmu~n8xXP+DoYdC*2pqOZtLRCMhf1g6Y5d7N)m^{U3XK4LX|q-0Y{cE-64^; zNp|~wEQYC;O4-fl{vpP@gi^Up)l+A)P-KPaM}hnjXSdg{!LuTkQKBqkywMr40^;vSoY*rrcq8wN_tE-gJp>D8~^;)rDf|@QIzzW(- z0COk)JgkNSbuCdlVl%5kBB9!(Wg9M(1#KQzHqEDfA1!7T=`bW> zlqbOGbXe1q^^tFo`$&^YF}8osBW78!aHlnYAhJ8`M6ca{I+W$)gC73GK$h#1H zdM#z&CZo|8mru4J{YiE<{*GL4AZR_FMnh@l)$7-BW~n4Sx~?nm@zeB@kE85gI{_qL zh2_in_DB+kUG^=2F&wC@@0T?lt}?F}55YAVBEv*OaV=neK1GpwEDNgYgu*Hge2HqdRU(~^(nZhfyme1WrnVriULxi^PSl*AB{FWHr@yV~(@vR@qkU76a22cO+^_{`pv1c8Q8Fg90>OglKGnLe5uBPatTt9e9I4x-u#;7nkm9$ZDzbl@0>+KKH+q4gkaALEQmY(WZ} z8{nQ*GEyk%0b63!M2jryn=b}=6Pm!FyP;zkYzIU&=q9dd=9zk3!2%r|(|b5BjZ08n zlWCUrf9UiO>S_;%--<(%Ngel^+9%QwZUNq5r zCR>6f=syfT!eycY0RGoR?$f{pXL<&A^!*?DXf{8ltm%R`A8z!|LZ0`9QzBu|mpwXc z%=;G~2?(Y^cP~|>Xe1T8^w%swT1nl+>C$Fz-7uVJwf*Jqvga9&l2!(4H z7@BT{YLfr3dP)9E=UrmcnfgjbO)*kAP6w)p_dFCIGfW^vQHgdK5V!-DQ?>73GyiVT z^KK}t_<&jp;l&ek8Xk|4IuZaON1AUhRJgcNzeO|UD^_O7f+%oi+>Rv`QssS-&wpn5 z3>~)(J57@FN&wBbhYbg>fvOLp{&(;{Q4mPietr)F$Uk~@`wromtbixcJ+4#q|qqf#8+SDk852O z@W$!J82;WE3}$6fIef?Lp9WG>$vQlu+|Qi>D5st3xvNeJ4I%{fnzD+Us?8-mTKmB0&6U;@ZxLsfDWNaO9qI0H<9|RzC!x3InFl+SNcd>N}d?7BjAkd zR?r}(k=4ibTr~tlqfPML=O6$1&H{W_M$vZ*ekjq7fY^g}|2P8^*~@2GRVxZ;&KgBi zuZ1g8Bfd)CxaMVyueTw~+Tx#p=cNZ-h&9X$69D$=wH z_+sWu#Z5sk*v9O-IzL-T8u@1z2bUt{op!g$a2UM-GAVvZWiiub(x@TwPceO(_S0nk$0VzL85(& z?2>2pzLi+}R3~mey*1nCmT_$$IO0UpBnojRgRgL#T3t|mbhHZhsEjwh{z=~n{n*E# zwD~fmf3mtI1oM@u%Z58HdjR=GJ!%uMcj5dIBZwjOP(#Zp z=gCH8(-glCyE6U1iQ%9GS7^VJz1x9+G8a=L8Yfd=g}(*r6>)&n>^e=#GlRa27(%gU z*uHh-MC+Y%UUq>e>gJ;AgUAHuLiXT>&vxh;)c&p3OLKQvO)7CO!7^m^rr-VN6^a}_g7>?xKcWDp}B$^Ki&#nL; z>x;}PJ>jPpPDi$zm5V**}U_wSeNvK_2 z@q^?&YLTPRU^}-%!@T+Qf5C7i(^c=@6n#>VU1+w$Y9qXTbMUsVJB_^h#I z0kddwcVP4syM*B81)T|kWIH?Jb|Yb?sywSKGi90qrgwZh(Gj~^pzh!O16lwb$#Tu> zWG=Y*BCFlt3C~P1)Sj>B>CcIAL~`40Rx;lx6kNrII!i%u*LK;rr+&Ud%3?M7ilE6! zAiaA}U~J&&OjOZ%YgulO^SsuSAt$o+<~>&qb~O*AlYa^bOgZrq2yQYTH3je8zUZIC z?uwR(Ot9QMF_#k8!}Z@^n?OGPoQ{CS&-HL;&hwz~o<{qQu?vMD^ksa%VPBK-xT8sv z*g%IAuygGv^G@DN=yfs%n5Z*L#^v|Z*QBLe~C{T{deb~KB#(DkZ4?L4AyWe~9 zh;6VT`kSBW9ddavS3IcO931eP2X_ZZ}p~|g+!0jkHz%klq)nCD4WWQYFp9#aYq%r(44^F^r6^n;YN=P z;Q8MEj`P(l?`vpiX!W~^x9ffB{R1}Sb+U@ibExGlmnp3dTXH4Z4VaIQNFMzJ9ABWo zzCNDFc&sTW;Y$j9_;D~!9DKtVWOc*A;`sl=cxS#c5<6|pqE)MTQM9Br)EURDw$Qk- z2f?*kJ(?@W{L@DjWV=}SQ1Gc1v$1YJfvjFeGqvgdJ<0(yP4AIj<_(u-jb#R>;k+Y` zs0Pe*QW9>9$-k5&J}>ZpGe58!C+6V5CE#`*7Zw)wqP8Z^5f1mK$>~tf04q)moJf?@ z!R(t_%c(9fr7FxuNIN<^Z@v*b$Sk5CqmLIaX~{R0E0FhJ?*K^D^~3cMP!MoCO!QPO zkRZA6n5lgl?;Y!jrDQ+F>4}V`^cDxirb7N*pY%uRhqliv{vQsnZ370C;-Hy~Z!V_v za%5B4IGp!!*{r606ZO0`vW?sUZt+9UC~g68?5-i^ut0V|4Dn~uN9XHf{quu4oc;t_ zVaP`G^KTdyvtcN}S70MG!ZZJ?YAnn(B_xrr*=JI%sxQrIIgK(X*&}62Gw~2&kQ4!5Oh` z5G>XF7i4>y$PWWjB!TNyEY`E*dk#G|qCMGApV0d>)PtF-&$^ga)XINtXq35U{0|Gz zlWexn+wlGe{oAf^o6AM@^6jM9^y{a~LD=Taz3{aq{Pz-~<0UN?lV-)DrDh|um8O<; zszMzZg68q0h`G516SKv+V(_9LENTj7OWTSpI?!V7d=|0V_9!qLJiLd_&I{KwPBMl# zw-S%MhHhHKxyOkJ2uhnLT0E}A)YX&X*tQhf%wm77Pc{Ub{4!>H$yEQ2?X4_~uIzHM z|NimH-`&*fyQ8-9I+=BWlS1Wuo<|fs(d4tKj^AfE|8_hnTqrTi}F&u~3&z&B#L`A(;m7}G2m zCCQ)up|4E0p~$}pn_g%BN44l5eSnW6;&j+@G;8V#?`7K zWqQf~e$TGm7uxlpb_&Q9C8Yx)CIJI%Fmn<~qp|}b=z0qer6wiQxjJjJrPh`yL?+Xa zDnJ3f-B=dd^)ndATrk~cl)1KCNU^37JX4LwAd>Ik?pz3gR$O|`N5hA6c z*PYaBn1)HC+A&?GTx_>?$Xdxvu_#W&(fAujeBhude_ei;B=$h+CDWJ~SW#Hy2Efw4 z%mo+o#s~%F&d4`yPqMum}NY|34J0U-|t9X^$tX%)gWL` z7I@UirlF&g3y3HV#1RX0T|0llRCzYlr%sL3*5vQ_ns$59NRN!76b&^*52z}9zje7G@_jTsLEu72IyvlC_6(~~6d8;sQP3Q3iLQvhI1c;c7sj8R4_Uu1%nZEc z^~$dB0qYwftooJsd4P5xXdSN81a%4>(;r@8$nA?)f2y{Kj*1KR9aI;JuLe z=c7R{DPpI?86=|f2PlL~!uBlPubEXpdO}5yy)wlp^W$wnydSXunNK#FxXJ5beN-CcPGI~@OcUkv8LFXjj1-Ay3|2D#Py%O zSW;4B>|IFyH_P^S9?xN-&3H~_x54L#FJVycd#@p7v2)W4mrew)rS5;?YIeu>Y!82b zsgHQ?trGHXi!dfIAOkbiPU|(w2^_F@rjZ0z@(xT2rmdva+fs|{{d(T5J|AZNRHk1# ziO$o_-pq^WJKrsARfThQ!%v)Z>J@*flMG~Vi3i8nURiZy(_J`0Rki#nqBI@keeF4mQ=rlG!XE+QqoDI`hdKFb zN*&Ul)duNTjJDK86Gh)Ak7^_*(AF-C+EfUd>W{jDA_H@b0~5@a3Shl?Pm8Nm4$Jh| zo-AcFmq}(N|LRuL$LgHiH zuf$_ypw=ame7xCjOD$*|LZIW}BAAm9{_6Gg>-Q943W>?=r4uqb_K$}MN7Rw?%Zy)- zb+4`}*6s*!7i~G*|5=5E4c)jKhcPner?Y~UtmH>`6=ajKObpow`(6%hPMwVW{nhZW zSqFpzvkJQ;O0>&dbcU{ZNlron%t8v zttG3Dkk#)eQq{{h{c9IR@eIGNK7YlL=?gK7{i(y$dXq03O!s2x_JD1@Cz;@lZt>^s znSV*CW(u`GFux6%_J@RS(HDBq)*=^^=bZfTZuq9XKWa6Y#Q3#J@vMuyR`}aWW4dK@ zFMTX#3Te-*qgA-R*Y}mvOh6z+qh%m-E$CA&5n=Q^QGsj4ZG-bNsTZPXJJ-cC9Pl?c zHOF|#B;8vHoEH=lM-pL&PNhm?spQ?`dU37a_h z6io74xZ=w{7!-5@Ki?8)+}o8`@3_9;D)XiJXFPaNm&aQG4cSJq(|9XdpS4Y!y zei(L@;s_>na5bNwF1idZr=Z)=I$z*SYUtcJ@bD#R_530By6HAnYqz0>lailvETr1b%VQ1)QpDf&1tnt6O;I}1a z6Oi_ZXk&lWka4@J;p##q2s~o9Qna;pHan-Ab+ie`Dc< z-VtrVtz7peJQlH3_O4a=@i3eBnuxT>qMxFWIjYq5kuu>DftV zO@pMlEz~PGflZQFFR&=h1b(yx*Iy7rr-EdAHA?=kpD&@Vt5eWr5kcCRIyH7|_sUEOIP z@ApU#7b19b&qTZN7F4y}Q8sP+zx(FOKypu{R3^_`Q&ULOpuJ4tB5VC-&!U0MwgH!AIrl4w&U`P(9xq*3Y-0KkSTRvq|cy008kS)d1L{(VOgo42Y2rm*t zn}Wm0Y7(cAstyM9jHNs}B(*E0uA5J|1T1&{sCL!VV~~ZuE4TrYA!#oJp3*8TGn)o_ zJGof=%lRlB(zQGDAZ2S_{gSl#nz@Ob6ObqxHqd=GE{KpNx9^p+qVvg8EQhOiF=_GG z9-ip{n!`XC^@pAT-_DX}$3p`gk2C2}Y4-k!=*q5*)VAY;7;74qK4nMABn$X1&(47E zxj={x9{1`Mo1!!OB}Lss9m=T*`B7fYS_f0P1whBTGO|BUZb)J+z0xC;iW$xJ$C&;? z&-YB}b~TDEkV|!V#2to#lqC@lU<^e;B}2% z@{}U;Az&*6S>pawpmCE%ApI=Q_!o2vCkpGbIe>Hx_{Dag<^hzMX?M(Xa~MFC(S*~7 zqbP%`MEvx;&i%qzHjG#&n5O`%-Af&;*@&2Pbm8nNK8+0O98b2F(xGXqz>N0Yci z!MiDC-}a~E5?6=eOF!qjgu%FSzIIvdnpcc7HwaTB<+NK(nqq-Zc56=hPtpq_CHi4{ zVMv(*;ri;~gtlzqRvPap=d6%5du5-Ba?SAU89kDY;Q(41TO+L18Pl8ezAJ@zkL>J&qW#Pk>k*}ePUs_{e5p5~!I}Yz7=V^7P(Lruk>O^?f-i`7FGt(i~ z?K8b1#a0*ShZwZRy!ZJ3H1;SY%<{}Z*UGGQXg?3lC-82$PFvlzI&9;vtuCl8JZ4*# zc?tj|m_vDk3cTU533$SW?Y8bUdGc%=rt$47XoSX2Q4y6Gt0_%Ewy~GJMZ@+;yTn7g;8B`VelmRwwS}MFe?3>ZdeS1@!@X6wXmLR3d z6Cto}NU!00>w&UO6k3%FCB#!!PdHB^EuxX#|L5X%uo)A?w?S&6u@B?VTsWX zQlYS6w%0^Frfc57$zTA)oGO&_Qnqf>AW+(J86CC9JZ6KLt=|fS8Xe`{eEgdkLlrxW zElz)+n!!lm$nM0Y6N`arD&F7|IRlG@=z72f#KQEQ8IZvg>VFkwJ7f(d@kycnA|gOc z1iqttufO|d+rZ@e3qm`*MmYwuLaJh=5@@oT05~7`S6D|m=`l_WZSB3iDlncWX5Cd92R`cqUJttMy2eOR>&dU5U8y9g$>lapKj7liV+ zKW<~SnGPe*h4cSn-1umw+x%$h9!YDR;VQ4BVlGNG*k?r1z=;Hv%Nu}QyD+Q4#+uas zbL(pHNM0W?e#_*ZfLm_a^4R-!in3%(WN*~fo2=+=Cm8GaSF>zh9GZNFS1`5by_Ljy zQ}-U@#P{$FoevumusELQ3>qw5dkPW=ucb7JfVa;1jY78E2hWoet6LSf`06a_hqfh1?nM3TC1b(vHBN zKiS^$e+l11WgGjS2=A-F6(aOa^85XscCXtS+{AH9mO_+$rkLzCu0b&TW z6~!)7WypWO$ETik_Pe5*TPkV=8pP!8^|yfSGI~qcNVs3dV!@Ag5M@%i2^63{!tHi!foTix81~Cx}L$w&nn*`SlO26q1PzrD; zME^x7t0P*LY5Q~%I_+~0uEp6ye?v>=7l)Mev8QLW1<^H!*r6Q5KCG5RIU9TX$B}xz zy~bc^qJn_)HOq(4GEWe?zysXtr|xU7#G z?{j%ZnD)#&T$`~XkwKtY`^jM5&8%5k904CozL9aWPTM~*7YPu3TgM|7km`Kr1W%ym zq`4D)=ut9VALImea632SM&h9mKnHID(Cp{8;P4oW*NFT*8eeA>ZvUj*&y=|b2|^wi zvjd)0eXBlUG&sEgnJ+@VR6HUc<3L^Ny|J>!f4fGaWe|LvQDA}9tgCEC%z z@Asi50*cbw4t*QdIZGqUzKEDD!{ac8=RNO)VD-6we0a%3DPS5)_Sq6r8pW>WMd_@w zj1CtHkxpsPa68phRm3C*Br3|0;LaxinS(E;#blqA!NY8wJNEIQbLOKsI*CD@KD(&r zKq8=j-zD0;A+PS9d}EPE>=2;%r4<##5Ja#ZnqbkFZ!AfLdj}aa!L0Og6mVHxdy{%K zSVY-~+1LX82f73_2#`1+AUNg%?lM`>rb_3H1aMh{n`23Rxc`9r_Yyz2G`V&q!OPb63 zRPIhd(zBi%MW^H5p8ihwnio zyVo26?$rAsJ;V^ZFGZ((?(?*o&#US5;%rcd z;|gK7Rq-j!Cb4 zrTc_Z-s`{o88&uJ*m#!tLg!I4NF}K%mbQX4==WBwYY&< zq0LTOCb^}f2qE4IZ?VY*XLxU<&W?BhkbI0uBJo`c>MkhR1PaCXcw+Sep~`i{yvupD(ZXi72Bv9kAC2(kT`3 zcI0o*TMHBF)xbP_whG}qv4!Ei3ypoJhF>kMJ@XA-$R{T!zwB@1SxQu(!9`~te6g#m zt6%O^QJ9Pdz9HoxP;1G&F;co5$q78Z`1g4V$>Fkm@7j3^iHv6g+>ih_ALGmFZ}o8b zmr5h=-MVMD$3M%pft}dt<}G%kfh5V`8ct?DMVYs7wOv7W%JCeS&^1PnG&1kFMZ7Kr zkBQH>xkcPc>b&c*TbgPlIu!4^ysq1IQBZci@zZB0&;4u>3e47BOGrA|QGdsIjwO}o z1@Dk2@4MuXTR=3F(a+mqBwuek6r!Mm`Im@GIc&J!q5C~Cbo z?rRB4Wduq+g=>E$Gf8A;Yt-uvDyxK*!s{0Wr=#qsbgNKOT6K_obhsj?sMW;B>yD0X zraq_fxxKr)I_wx`%mgf41r@QuED;&R?p<4KYAx}INCAa@m)JLze=K&p-%k*c9n853 zOj>OdGD*xBNCE0hK+M(_QpVdi@GY$-)%ATOdS&BnpOd7?SOuN;6EjZ~U444E5-wOc z?y-!JT=_b;{CI>n2a=1-ETa&a7hSXk8aRPl`kS z75ZxmSqh42d^aE6oh|Y*U^PcuT^}7Td~n~+qIx*nC|fpI4n1zqxCCjQRedGSc-V=> zltUWOsFCx+s8Jh@pa7YKP=-BnXoOc4Vo|-qdE24n6R;mVzu2zRtHa^vM0}n53)_%x{e;epp<2q_961?Yw00f+b$d9M{ruLICiy9u3x_m2M>c17S6{tcQW{)= zrOZ41Q+varR-xQoW888aCLlDvy`*q0{ukB>4x@ftkuYJtoY<4Z z=RZ~0MbWCrcJvX2{oFAbK=ouP;s>b`(`$*rwhIDWIl)ce+7(Gz4&|s|Tua6B5Y3#b z){RgFprOY|Vn8^{QWm{`ww(C&?%3`c>KqLp=(>ik#xj1L(3F#nBEOQkb>33EFs5&) z{g_dftlU*d?>u2SA=)W5!Qk|V3I!=MC`;60m3tI*B9X@4N4@ABrxL!rpK$^ zP#Y+%!)&CKUuZI3M7svBLsOuymQNk|TP?Br&@5q@z zd9muu)Tet+rN02-coVhw*lk_pQ>liQS5AWM3~9(MI#D@XzYEX^>~!&n;*^G(Wh)Bi z44tI5!@b(Z7)<94*J5PbUrd#mI< zcDN?Ra^XskxMVdQuK3ks?Fy@VxWq|(f4)`n!4HVGA`N3n!Enwsnqw8mVQQ88FL3gFK>03Lw=8-M-d;>* zvXSRw%-w0WwFbqNOkZkSlxAjc=|Yj8(|AAPhMpS%bDMT>v5%hE=g#cih8(1i|MpBg z%UE49?!h%`g_xETFna~`)~5sN)f-Tkhl^!!Gh3lkIh$G+!%YqjHM@XlTe~-B?F?oa zD(y!K=x&UPc;Z<0Op&ztHXr$xTq?=B^G3&`z^USK1zo~}<%4?e$dyja+#g6)viy%B zl7@i=fi)CSbQ%0#xm2Wz5Kdbc_zP?&NcY_@@bebE$A$ER3L5NhFh$03Gm&FUJKx&2 zhV$IKeEXU3(Jk}z4=MpK(#M2B`Abx}zmxsn@XVG9^M7v|<2&mcJrVXHQ=se5d@s>x z%D7!4Mz?TVw)7F`3g6Bb$wsU~-Wtr3JW#82{fDmpa3Qq6P)o3M#QUSpNg2yX$#%I| z6w~d-sA)2dy_u@#U44Rf1Gxt>6KAGIlRXl-#qKydQ&!X(%4x22Ym(WS_rUP0{o54} zFi#>#yqZXN&OZOE%N)s7;oZO^x)@DII_IQaTK)3_r(hm$Y!zQ7!M~-#nElxa zU9sW8u#hdSR)r8^ZlBAV)1qLPW`&Vei}cW`hmDYU#X<|>7w6tX%kY*Ht;JleKW4a0 zBoON!&YRp#I7xxXzdzF)F*G+8#JRDH&&0%56ISPYmC&Tu?{lNP-1#Ze@v|qOM=y&Z zfj&79e`E@S%a!JB+eL`|8oT8fMnCp|s*rTuOT+9ZWpw@%zFt_b-)V?{6E?mgppRb$ zAT}>oM8B$JWB8ThZdRtzx?NbG!Jm@k={g3iES{c{#|rz_sWvbW7jwH zv$&{K2KT62*b{@^#9@Yt=9P=vv3zf3ejla>Y4QRie3d$0%L(fsUhaB>-)ZKMOQlrX6B!Wk2!YMjWYBOseqNkD;n4ffwt^J8mNVXQ zPD&NWp&ah6ZJG#=kI)6$tgo=TP?QL*XY6s%lU;v()pS-sxQOLLZ&h!^&|)i79r_;S zw?d^4zdCxl`we??*1GVWw%?`&AxkG#;9^52f~JSrQCqeQoYCBiQduNUG=?k~fmwOTgSIula5x)AgAfz;W4y{8my3qNxyh1Dm1b~csG zu7(TNByC;hSjTqve^`L;uD|#)PlCDH^wUHbg2iPB3(mGgaQR}+j0`CTKWX`z4&7(; zSdyWOV+2X=jl!i^dG+ZpM9}WNwTc@O!R=aX%73gd^J;Rwcv+M%R6ZCtj&2d)*TP+d z(3G%_E;f~+Z?;g;_*=Nn?%$M@cAo|tr{R^wiB(avm6k-R{r5qRnU9}*YZ$$DY$iS# zsncd$IgMxA|90M|>ml^WjCIy2jU;?{HQSQzJ|h}qbx=CnEKjg2zvISW*9G(KV%Jw^ zj-9f|{x5nP8GamVt!a#vBt^aR2G33eE&c?uK$j$PbE>6m(KB3{n||5ggwC!MxD9*3CwY9rChcfog*gp{0D@f5O} z>;Ke-zbNRUE#bFCe;{Q4P%Mgw^W#G{y)p&A@GlfMUcEZw4U}}(~mVu=(U%}l}X*rRAZX> z&yTV&%70+-n+87;hp+GDzXrkZQK}UBR9Hi{@Xq=ECXlNVezZ-gFa258Cz}E5>9;3Y3-=3EM*KI;nRuT{Q4ssdVk6#3fxbVq; zqnnJrUh)ZV#-v}8<|J6(!cS$}o+-59gmX6S`ayC>0Wi0PZ=}{m!_`7vKcmwg#dOHV z3b&NEDUR8gHq+D(*2F;4^rz?A8N@y7+KJ5<_hRAo@0{8Cbv6U)2Ekm@5esvU5nzJz zf1eG5QN9$-Zi>xPp8iU_JB=*Rjl0%eD^A<>S=2ZX`<}H>5!1HVJKTO3wN$jY?xWx&9hE}M0@+DR ziJPG$>7k3cGQDE#Z1KT|mWKG*2hT%>QjpxxkK4D+p+sb&y|$E^qMXUh-m3%S)@Uf) zFVSuU)ABx>dVBSv?fTAGAfKWze z+h=XDI)Q&Jw^X%tN_T1gG^|34Ck;R`1&QE<_>vE7-r}fazTYpp@>=-I__wvHSD_dj zElE#~WjKoHnDfqB)&WLdC=Fy2fQ6V*B}^}SX|A@AoxmEIG_S*HF#qWdu_|)L?L=Sc z?#np&ZdBzf#lF8R%QssSS=b(M+2TuMH0?XEv6LFYP=zM1x|AIhY`39ow&hWKE&j2#>|9 zDJI1BQgdUM8aM9?r`PE(15!0Qr$fS`J_(fCAfy%Q_Mg+#TCIY#ORQEWnk=}IFG0Kg zv+t%>Li}YS;82k71QujJO13hXj~v8mMFyfDD!YjE$r9QhmHr&b6v@`_k5d;kB2tmT5k%Rc+e*)eXf|0(EBW~$O;^5SGKo8d;(q8-!fmJC)@EeW#2^#P8?d9I(5OucF+_guvF4BLm#n?Wv-p&WfQvRVFbvXy?IbETZj zeZ0=$C0FCEO1lx}wx++VQ0~0D(#&yUc$1)QV`K!ka)yCFwLTH$l*H3-TBU+x>uLwM zi+g~9hP9k8rQKlCE3dMSPr(3(no4_wIA)dBU7b4upJ(j&HYu!X@r{l3c5~5>(zE{G zXPJp#83N4?YOj@9v{QESBsAWK+s?LS#RU)8B>NY!5T)=0w>N1ReeOj(FSE%>u8MpK zj)7{OmJ12&@f?t;?QeziTuRkGb6F3suU^VlX4B*6#%}!X2jOjK>1E8mm(D2*UK7XN z)6DR_BANO7F*j~|ygK*2CU33O7gtVO?B^+lFW#d1@m+lITHdx-aF___(oKi-v~$Oh!=tx{u9d#=rte z{=3Sct8l-MOBkP4pOE{v53%PlF4x$Ln~VL;>&_=P8qAxqU}QT zdHS@hn-HzggowE%5|4vUDEGXdREpLqlToa(U#F~Z8Y8fL>eU~wE5?w3gPP5RE(ie< zeGhL-G0@OVzn+<7z;@>rY`$%q=!UK!aL6iU`I7F>yqaEWL?J1MVqC;hJW9U^I$7?B z?c?xh4R`oZaKDKhQDQ;b?}=i?VQ*Q1MZ zk;9S$iUdMPoxNe@Dx_$ShRW?mfnigPJ#KANx!C_Bd{QQNyxpjtEAi{mkxIa0r!U6_ zFBm>|2=lw&vyLLf4*D)~S7xMEYShNxm!z8zvaWI&;1B{Nzp|KDAj- zoXzU2q|xyPulj3j@p4J0KoX*X;Pr74L!k|0<3>tVwA|Z+V#bk>4EKH0Pi;Aq1xchF z+RrHFB;d?3!A3$wBpSf2pL`s!_t($Hr`xHKLTT*Jhwgln$|nQ2FNJMq-G5>lXyO>9 zkNr?c;$v(Jl)CJE)^Kk!B-K01;HmC(e6cK-Y9%}JAv*1ax*cq`&|iTm``g*2 zH`wjw%GU(ybWw5=5;&H1r_bHoY;~s{`xS&gaGKSg@8>D55?#1$vb(C*m@md1MwF6G zJbC2p&ehRDo-~AK``=Xc!E#z(=Bw8LP7x$7^eIRGrIB$gJ@A4sQk64|t*@e9d$%_@ zJT`7hI)$5(3#6%Zr>&-10(SoLK!U|@?{<+~eMAM< zoYOqRiydB1Zsf#KY1@}inZC-pvLrj%P~TK|BTzpfzitTpaVp(I7+7f3u;WNG+a@G9 zIMD*l_C!qxlBjzzbNNkACC4mfo8Z@AygyO)Wxo&b-#lYJWoU0&r+58*alrosk0rU3 z^Y}U(gOnWPO&!2K?6^|+t><%cn8#0^$#v^~OJpx$tlfP!nt(g&vL=@(`PposwVKQ7 zCx|u)vbNDoaFRj4)D^T>(~2~twfI_?lg4pLX!I#XSY`{|coB6lxY@1m_1ix`ltYK( zdKy-Q#yeiEs3tNG;veIwc)DzUvl!QhZ4lUBDk#S#BqDe-7xjuond((Jx4jL^3T`s@ z#%2m(tI>c>sc_LL{clEH?SuxGJjwTXycOCuQw3ASAr)8{3q_F@s--ecDqFq z;Mo42Yn}oe+Z`vv8?)N?a3|H{Jp0&6=47jmAXidYQ3m=daC&wO{j8LZ@BaV;BU~Zm zP6T4>_Gi+^>*GGE@}7A4;%R#g{d{(vc0LQ=;5x!-mie4|X#+TF7JOiGOz!Sh@oVod zXkgmd<4pn!gqllsXX}w>R{BV=-3;M~-LraHyQ{{G{hGfWHAN3Fw2 zH{cHN_Ni!$2^!W5Vp4`5HVap((L`?INf1a?!eTnT>=GruVX|s%5B_AB zX2a+b=$Js^tTzlMeRV=Tq>nV>SB!)yEXN$s*>uIBn$d<+( z9;J(oUn8dCdpH4M<9P-TiU>aVLk%{I6P!nVK>OLNQsuJbSg^vSLf$W-&wvI6s$A4% zTP;B4!SiRldWyhXho1f@f7^;G1*NOAUT`no=21P;W;$bZtatlHr z=nTrqnEP-FBg*jxs*Kshy1)I*mw{nF!tCdwH#y#VxdXq_`RcA{tVPZ~QQdg2D&;SJ zGnrab`^o=zWB7Qui(0$+DO=V3M%HzU>t|I8lkQ>ufx|l zGzaU^+8IQrI6s?j7ksG;^|Hq_jeLzfwv&8|fYTHDb|LfYXIF)5Hbp(I6{xkXM4pSx zLC3Xsskr@C;KNQKI(^~vPNiRwW{2%@_@{=#9ehGO0uw!>jbkpjbn<%5Zi$A7cUbH$ zd$kwMn!hT(Is?%q*PF^>JMssD{LU|9SK=2)!g-g1shZeS@WWqvkvu8VNWrF8_9unu z?CNkL%u>QHkjBn9c_$}!qA|8}_+`ChdfG?JIH6Mi3BhFb_-c?a8jIzrL>L0?d{g7_ zMCuZIwMXerOca4opJZc6gvfWJ9C#M1Kq`(dE8iM&O0F>;7G)cOfn#(!Od>4YLys&v zw_v(j2}JlU*V4GP>2IU0Prc$-^yHp*S1=0dYBvSBEL}fduI~P2g-Ti-nz%jrh_`St zY?Q3Jm3oIo)#;Rpt%)xQ$cv6!_((ZAHqYw`hkm@d5CDo|C^0d5zN$vgmXl!FW90=R z1X@98VG(~JpFmIYxW_C%-U1@c_3n41pfE3OEdWM%Y*f^407!=SkL(i3>WmvOCd zGIO9_Idm|WL<}>30F2ndd>;Xok8Ob{vxT~LNdPz#4*A>T0?l~;RqxFtdf=H5pvCA_ zoFyf)4#e+2@nCw0B8-6|oaukshQnt<&T+nlSy0d%#Lq$X&zTH{72xcp!FPLMQ3#+W zv#ITA_RxH@3y%r=@UPJH=Pv-P1f4bjeHvLGos#YO4eq_G zn0oq9RvHZgN?|C=K|~Z3bNM+~d>jJXM8OKs-wMhpLyJ%S*OX2`WgcRJCP+Erb`e0V z88Bg}KZG7f>;4aUgfb{?u2qg>`(0^c7AEGKkBhzGi z_Q2)VUvWQP0lLZovXMj=j0k()zN8$Nv;8Pfd-0!c#M$Cv3f$ zR7?K=)%{}v>PfI2(ZS^hEC7n)#REUo zJF;^kw~&DE{wr$V;WRO8;Q+l$#e(l$fTwI>hCV^UPoxA#3lV9^IGhgy#s&0=FGWP3 z4%Qn`6ZO0%Q=nG2C>#%nT{eI8t|AEDAQe0z3I@930~HJCKEh2nWDg$D8lW%EVt|mu zLH|7mMC*vD*a6j^=Z)dN-c)dp=hLlLA+;?ljcJ=EYP zv?j0r;c+bB=9|YBJJhcnz~wXA;j8~deFL5rCSEfx00rVgmOtfLLBlZ@bY#_l9Cj2M zbhE2NzkxVBpwvVdgfecy@M@sb{U603S=d8+B^p8mZ9)Jp=tf1r*L3w{{>yzZGM4s2H|tEcO$K5yAM#UI7C=wX0MPx`*@ptP0wR`oLy zf-;N$rXYCv9?|5W5ayGgUw5XdNt{VAlTO^dmco<}gI`1-#uWZo4O??bWMf03A%XJ= zcrqv@1c!5%a_CQ2M9eQ}ULgOfWSs71@vF2u7bTa9lU(|h!mR4}h5He|#u%s-<&O_@ zyDFSM)BTmFv?=N6Y4~fL^1Zk|faxvVGQ9UTl z)z~C3p1%C-k1qRXyht*p!tb5$1=79LVy$cjW%5b-yN0^{e|ua2(8E`!vSu`F#>JW) zrF34EXmENd19$%cq0Lz$7$woj9$Dn&|41iGg1YXienD;@l$^%*a59c;ise;HN#aGu@nE zhbyja(@Wp8ic!KVQ@Q)7uZp&O=hGl{x;yUJA2+Epl()r*Kc251M@c;&FtC%b#DHcL zwRq3Y<1{LZP+Ifs$>Mt#WKs%uCCV8I4L*(tQT@(ag2%JtW6uYk@nOy4L7&%=0b}5$ zBh!W+c)M!PFhH%`^sk)|I0jcdjnVAL=yZ&Y3D(8zL-eTsj_V+v0F_pB3Z73Dy(DIKpLigyqS;^ohSyO zkl6_UmI7nt`s7!}5|ZaR)JhqQqkb9=D$U-Kbjt|KcSeO1DIZ{rx75 zlKBaT3oZ8FhY9%s3Ct~=u21T2TkH3}bDHkh_B=MMVDdgS>xU;Gm@;CFJ_R3~iG-H& zfjXmbK%YIxY%9Uk6ubc*utJ!d=BgPgC~)1}KFS?$y*odN+#FrHYV~-62Fn@?b(uC=dk5i0(A7o@)KdZkU$EuCj9(BJi z!kRl})2Gt(Qu2h1#|SwKm5^husM12y>uRlh!*^BD9^~c;YE3AIhY(9xLrMUbiq1Ctl}09MhT?L&UzTI zW?nyXU8GMcoznfQo#)m`%VYm%cGAw^FZX9Jx1M8%^W4wnNovD4%Mfy5-wNunPTy-b zVE|l!MX2|gb#-GjNE|Bzd<=8n`i>vgKNuiFp0En!y1U-~<(pZNnyZY^vd}o#0?Y;f zLfQFLCnu*C-)q|3X)5`izqI-nfFMiaHEcV1=Y4|YZzLEVBx&Shp3xt~1OOAvYjBz? z>F_$=|0Q|#_D?*mot~z#fzPv_CFk6;q|aGTU%cK)h6Yb+zz!K6n`&z#l&$Hv->9hk`FZ3JFoh3f~|KdSFHZ*y;61l(NPST9BUUmzIwn!use;X(A}5 z;iud>+9CTte4IfY3g|BI>k(3^#G%0VQ=#lr9F z0IX20)w$DYdw2CsC@}BJkq?eieU&CJU2i84;TT?`X!qrmvTL@#SjN9FA2>`bQI1My zci{VNKZd%a#iVs6Q+6~ZfJDrJ-Y1v%*_(Mg_e7p`^{kSh!mw7ybF)jY@%#RK6Es4B zi2YJ)`N0r^hGjjwy<%MDou7yi!+lwqA^K&rod!;`!>=#y?J>)%hp-p+w@*&CI0=SQ zd_GEOU3?u^ExO9^D4CPrzL`C&RoBQ)8SKvYtJ3ad+UB+n{M;w^YHH$WAX%tn&O9oW z?TP$`f3bwtU!JVP$pu2|jN=IhX?D96%cRZ!pet`8J@);g=H7FbD3^^ED?c;EG)rMM zlu*ffk2(JrpCM?{nDxsq0rwg}o89=Wq%w5BIgkYg9+fQaohcibwP8>tmGQ{@S6Hf` z4VK@dXT)E*3DgAhJJoWh}r;i)PoMJ zNyM?&MJN`k58i$*Fmp4zm8on*?C{0k=xwEMFx?hfijegH?O;N5LMLYetYN-Y?z>?A%*ZO|T8j@*j;xj8Atb6g-p7 zS@j~5PqAMr3}_jH%BF{2NklRkELm4swib6aZ>VT}Uubxa2&diApx>QPX))cZAvXil zX`abAj|YXaUy|{c$)ur_#1;-67$wv2SH=pivcn)cq--O%w zp?sF6aKM2uw*Ivr?6S6y#)yC!UH;ax$sFJm<#7!^K%>l>_x)*_o>p zp;Aoe3L9MyxDOgFG2Q7>-*zX_pVB1dU!~rhQp$Q!)nP$75_5aZ$lf&s3?u#mneW1XFNcxAA=~Hi z@=nGl6{T(8izV2fMe-I%;S>(a!d@4LAD61t?t^Ep0UJ50V$>um+0Yr+9B^DG>wz+x zoXFpYAp7&qCGB?dUODFq4PdaM$pIDbI{nFb9r|-+eyqr8$YF~;U*~*tEKb|KIdK3S zkZPUG>8F>wZsZxxN&i+#bVFy`D6r%819ij}HF1(JyywOh(Q!wK=|s3K#R3WwiNR%= zWf+ZXU8@c zk5L~~25_#fO`b);KGcHCrXCPZX(@rRFXBpl&@SqQ_p*iGI*h=_xu`YU|MuA+iQkym ztnysHnaO+Pty1@v&vkz|llo`^^0iGbmVSKcq?4h5X_f}7fN&VtXxFOi2~>vJfFA~+ zZwJ&%vO&A(FrMF4LS_%wLeiMw)6VdUB=Qz(R#PM#c+&Yp*BrY-`nP5(G0LXP%HMyZ z@QR?Kt?gf+v1-OHbPM!!zP$vzo25$qGb7JiG$y0QUzp+Fe|Cw8$03i!!gR1wEW-$T z4t@IBzfcacy?ICDS3+S-YS44_3*HqlHX9F-{o;d>B0%A^d7K6>JefaXqk6!c#+x2T zh%Kxd8V;o$XwMaehZl?;#jA1}c(af^lhvT$JS~x?SM4z^g@N2(7wVGxYud_scI}vk zYCz&$wEr#^PA%!RPDN}}F$ph|yx2xqu+#_WuooLZhs;6PdA}BwYG8@9L<@sufnZ`@ zN&Z2An8vZ}%K-=P;m43XkCUxDim1?cgvbIECiJiEB}{d?&z%4Yr~sVWX28-+Z_rm? zTx5Iu27u_)SQbjZEgC(6*_wv3+Tacc%|_E>JDpyAZ!-T*`u@DSZFM|dg>cR=8Bl)r z9wTvH*ummWw2~p;jLK{^hb}+a{%-yKAb=5Wq9A^^s`Bv zx5}t^P(FeF)) zFT<|7f#SBgf0e#}SHutNI@b8}r^-muyM{kQ1Tci1j^4+*>T~5>@3md0G7$;?>Da+Y z)SDFQ7K4D-Fp})>lm4BlJJ#XGSO5J-2cI)+i-G!6@B8ew@gqRZ{b8N7gSIs^vT2UOzAc|Y-f66x zb^C!7MlIEIok2d%RtbYDDeQwxgO6PQs9Q}#QKRC8A_HNJU4~qTSbI+EBizvCF|amFAY^7f`gW8aoLmT32aLeU zu7xhJ&;pG1Z-gAPZ4!M3!&AveYD3h z1Y54MFOeI%*wBDtwyIz`9MR6jTx%;bbvC(dh-LTP=T-I`;L7;0VK-G=P$$1ziKm0O zqs5~7+WC9(qnVa78&{GK8@1T&5|~P9o$!^!TG9Y*hGHYi?wuVrr3c_^z7;pf{SBj= z2_26s$a6d2T=uOtGbLe;CxA8VU15Ho9K91|zE%Gk2D@p(R!_$e-)mXoxEQeJ(t?7gHu7CMy1`_P)tXUDMPvfkD zm|QlPwr28U+ByWxdgv$0<}m>s-xtI;p2%Bf8rcT)2?N{z%HMzjq;1) zwKCWx-$j!V7H=oEv#u*>UxX0SYqkkWp>72--e2QDeEd}6kxuQ2{D9<&bIE!O)@|aZ z{p5zP_53)t_h=ShQImJ2@3`80oq|*xAxgb+CmVX&b+s*u7dX$ta^XE>HI&AznG&bv zdEaaakcwWdf({ZLfC0HS$$!>-S9%E`k70n2I`CSCot7t;?G2TRZ(?U1@Ygut1N{PL zrOGwlV~e0tav6PLkVmTK*kbMD)DFU<+)u(WR5ntMg= z4L+?*ij=z8quF$3+Wt-&+9>B0Xrx}TU4G9z@Sz%pzp0`;q{u0O(@0V8t*B+J+f1Xc zOaAEEdI*zleY%~4vjTG#3M~?ce7QLvFJvqDpSwqJ05kk-#H#d!i4UJcE{glR`VIQ8ZRZAZM<=9$YJ*e~U;5f&lR^m^|XSD%~{vUfqyV3Vm1+SK0M<7TD zs!%p?KzfDvCOgeX^bl6dRWt;T!^Cj~gv@+Ca4@ z6(u)w)}ZTD66w~6Hz-waZRr!zYjbSkKe1OV^ot}`F3Ppdiy@i92eNj)e0NXzbVrl5 zd}N^V!X5*hBy4fHghh|sor8Iza;qdUx%K~cjc7VSnI=Cb`pZxDc{F`ntTNknem_bBy?_m!*FzPPl>iwYk z-)88U55Phq^oPG26kpkl4P?{>;+HEB(+7Vi)AKL%5Ane)>;i@Uv9NDEBtJleEWVhQ zbljkb1N9-x9Mj{pNOaWi4@NTZ>1>eq5qK&#&VXyu;Pvo>^%)(qoso|zS%(D;%Ptu< z0BZ(52|@aUJq&~}PHpEo{LGcIdip&jT2v59iyDqrn)D0g4!|aleDEoB0ulT-V~aO; zuU8i2gZw|6gKmxpxjTKn?~(i`a0@)o{}D513B}CuvvEa2D_T&=?hA}u6#(IVT4a3` z=s^HfWngS!YzG-1XhiWI9@-o00cLYO2QZtFVvP|UIJ~=1`rzB91Gg(;DD8vo9WwSW z2)5w)BHjT{ykgFjNwgYBdC;iO1vo^!UJ0rP6L$2jyZ_K3eC6;v?Dp+PW;?1~2NyXSbPia7{;r1QmZ z3j8* z6zJqJe}gI$m8#BD@B3nCM8Rj6iNaw zwQ1F#PhrGv_DE220*%`3w=f^sxvsh=j0NvzN**tS^v1}XIHpv`S>*yk#$;6q+dpe6 z-3NziM0uy-FO6Vxqv8o>EPmI0)xc5s2IGBFdW{R3 z+h$e`ug1m@)<@AI?J`VQeR^<+tAf=>cI|SO=SQu&A$(F|I0Z`7@qcFP)~dbAOnzdJ zHvxm7U{j9vwZe9CPZVfxDWW)#H9-ptu5HV^x+Y*$Ci>;VqEUpS#4JVHa@kPDDuGl_ zQ&#v|9C+IO^BGfBa==TLN*?wXD`-CLm+NpG<4_0d(Lx*kzu3FRQXY{y0lTDETp$nbxdc-ERC zipg0UU&2y7p;0Z_OBv@Ljq@uiJ4w>CW?u0B&?~J-p7V%qCA_?)R@82t{K#ZZ)NWo$ zN;R^hgkW^TdT>O}jh5?oc9ZHf&EE2G8;CnLiYGE%*2$ls2IGR%0zKZ^EgSe zm;)?lo_gIDCsQ>{mHdaD-{0aVYIN?ud-XM}4i(2*OPL2|ESD)s~${Pm6LM+gtRS3aFf2;{8vQFcNEOR-qd4pf{vY7V~~5}F_Q zBoQ0U4fl*k*d!CB{a9FZB>?Dhl=dLLp{_nORLQ1Z9yDEx!c?tgp4M(w{ER`9NI zdLu-nuCw)u=ovt;EH`add(-!$%wK1hO`Md;yy{?Av!I9Dpx5ZF`>pufa#P;YAm0%_ z^}MG<|9!y?BdrSo10w>H6cJPb>78UiJFE6$1ii;W{ha!#goY%9jFiW#Sc;?)CI#CX zhL#Wot|$lv0YgG0B0zYcjPyxG3yBI&Lf})Sk_d8a6kH*aB?Q@i8Sfx0`{uXC`@K4+ zF@CGYuY>6+yz6U?*Jk7C*zmMu0uW>dC=g5zu*gX+ua`*p%RM_WNH(52GBZW#BS~gT z%C}lnI3z-TOI%1rhavIrq^IpCLsaka7%*9 z?5r^!O+l2mzWBA@iG-jnAww9KCj0`@ttb7JKc_kKL2n!8FfSfGc**Dp8Cw?Xtr_I{ zyYZ7J_Vp09@D{ogOQSc zpRWS5C9-QAaCQeOM@~&@$sY~j@<0mxS@3+VU7~viU zOQ=LI(y>rI*Q*Xbyo1A=4ckOI4>s9=hGauz;BlERS6^NLlhC@6o9;kEcR zrq36N7!U(TIf(_bd;k3-0f(cb@klTt0S^aWS5;^<9W0t{V)MS_;*6%{ddt%<3-OIi zAlpQ!pz#NDU?T26jagPG${Lw%Y8)wukAYJx;ITU2Q!Xwzx@M2e?Qh_yz>Ao(r&kzL zgofcYN-c39(6sU$(Ba9!KW1?Ks$j0U-0q5xADF1iJMIwY2MeoUo-$!!n=F&P`4vbN-(bLiCiiE`n$lDK=BOy4;quJ=2FZ?qkNFQ+*=6!493e4EQiH$(6D@Q^ zg(dxffl_=(G_AS23SDvWY!mfyrxh{-Az=P*&Z)THl+7E#!&PO40lTx7=VSwr0d9=~ zX0v*pFVD@Ls4Cg#v_)Yg_V-st-EuyVpD$5FxV4OD--I!Dl!Nl&zd}^AeZrooiDZEm z7mdY$)$j*qMsFElit&?$`I?-H^yMIzs;2btqKq5S@OVrZtcHmtSfp3WDIPCj6>!Jm z=r$e$Y;rR2RA|Qj&qFjVdI3Z9X=K1$8N=p`unS4RNUgX0|33Er8X+Arr+jOIKCBmQ zdRu}T(hGcs=14YP6bTSL0z}{_jPU;84zP+6v+VIynrJoz#n|z#@6Y3~WV#&D6BCT_ zO_eg4)-p0Yp*HK@kMd8#Q8$M|h{uz;tZHyY#42({q?U;C5{dY56)=)Ng zN>ID`py23;qV>HA)rQ+ee7sHgY9+HC7r+RcVjbpJAU1w>eyQVailVcHz-usI;UUZFla6uN~ufgr0Y@xhjtfws~^VH9aNwY=nkT(Pm zcwH5Z-;~9y`lHtkyAI4Qy4lkv>y#0B_@B_xA{*pF3m=`Eq7DqV&{j5n=*?NY5BDt z(RWg!M$gr632he<&f8zP>TK6w;OMS<`RLdf0O(#nMJ2}hox%X2l6p1u1?03xwxU&y zFeI)fR)Vl<@7w*2!|5Bc?0GAC?VA&Yp062G)T;}cq6e8B%s;s2yq_F`CYJuWlCPzFhYwe`6U$4p>kJ{5r($AfI`ci4Is*Sn$nuHT zqu=1QfaYS0rBzkU=IJjJb#ATYG(y7a())9Tx#M}6-tzVCDcBAHogJ!)XQu!VFjy@D zxDtL)IwT(k9l7w=s5XS1vt29;h*Z2gU5(7YUk$pf7!zxzZ?(U<04FbxsE3Vg)e(Dj z51-#Ef5z!r$gMRVoqsS`OM5WvHhXZs9&gx7wIcSmd3sU4A!LT=&O8fDz;)Z$E1qQu zm^)(d?b-ocjm5&YO}NsI8F^M7WKq4hJ$ZmY&vb8=N7|24>HLZyFwHiGhljp9-nNJd z`w#{sp^AYjT@)hl3RK4MiQm>rlR3T2eZF@i7Byal^dw=r!N}YBo6mM_Jv$EFOdBb& zST`r;IvlV2f_ZStz<{BD76DWdrr}O$7yOY9~BO#ZT?McQpJEwgI zuDX+@KWu8P7n-)WH8|W7wbbJC272P&i|dKB-9UJe1fhK^iw=UV&Jx+XxBA#@SWq7b z?to?eK=Ahuq7$2>eETX2haqsE=+f3+lfYA3wC+<|vpvO%5Opd$w ze&2^itC9KV&R&vkhj}jOi+5(2^JUz z9t-5+Pr2O~iH;$tQp%bgk|UM^RK+$S6Po6+yh=s$#(>ZS84;kOij3tH0TtB`JrLv7 zBM>YQBe&D?qaN=mMg>FB$^myYA;`6Xu&XicHm9;(bghSD70nl?PVrb_lRxU7yLVFB zuGcXmyU`m+`*q4nWKn_f zqhfq!nD`8QeiBff8UqGv5_ zG`#dydwf7yb8_S!l?Ejv0lX_f&Z*lNj*i`+ve*K!cuJotYdqA)z!DRq*&{oL6Fv41 zVy(c2Cg2o%j8K_h?f(CgOat_6@?fVSl$2_v{J-Ag z(9g!x;|p#(gyzIrCD=@gmk}V8e-MCwX+W_?MBr&ii~))1aQc4@!0W~FGx^cT!_Xa{ zRzl;pBR)VdA7wjAG;J*vTgd={_0xrGm!K6Vo9OV6sFpr z&=fGCM^nPMk7+6LLefK2zy1@@TKythys=n zqh@1hd7y=b`T`DDW^f603dG((f*)~>V;R;CI;$*qA>CB5x zX`0QnO1#~$;z$^aBcdO+8Ro#FOs79SkIOAvv_0rxUDLR#G&U{ zyK@+i6!=l|Bd5$d)ucg90ar|Dz``VmK)~gv3OjRb*oKd`IrkFfEYT`$w@p^ z3m~V4J!uzFV1Z;0N&_%aA6mtWa>4T9Ge|SHj}O`S4EzItff^Qy^uz5pa5g010Dol# zzApj_g^?2&j^mEm1LUqoD)5H9)#1*?59xs4GQtFioa6-HT9a42S&}H@!)QQ(`#(ne z|1?@?hc*}&Wb#*ouYPD?#E1HbpDy_P)=Y7bY{b_zW`OKR%1=_zJcP7IMG^Z$R%?@M~H{ zOB8~vBLc$+h&2ElqQJwt5J-L2iH+&vR+1e=A4C83wx4k=7lcNKwb}(&Xkx5@9DoQc zLb45Uh|0@VQX%2)EICO@A38RVGb(=9(Q+AyKa$bhwoP8Jp4a-QN*1@;+R@4OFswkq zlm`O#j#vQfjRXmIor0NFML%D-qD*i(@%QhQ7{g)xo6&jsCd%~=5L4ERn!*YyP-Z z|Hn2^thip9YH*>!6Sg-IaWSp(u#}`ku$FBA6K4#>l*?kl0{a*6pCM(8Uo=d_^TXg- zQ~qe|9=>SeBz|vVbVpi^rg$v*)={=L_vVs4=O%F(qn^x>Myib`fVVnCaEOaf;Nr2W zjVd-X)avUN?CCt-g6ruvQQDKw;)@UTBqctzb0H0C2>#qWsI{T;ks6#-HnREt;BnSAyOnAy2s9j4cH9HeA0s1FMUOA` zxv7hHgB%jjj$;K3fTZ{-h}*Lk349yA+bet1mF3(-}89K?E|FU3g))82c;dV6}^R+2{n5rYH%{%T8v0Y?VYp@1LT6eRIUS)6RDea?Sr;ugkyi3(l; za^A&ynl*hY`%QU$TIlwdEPn_;ksb0Ed~4>g8>1VWn+mG| z7#UOrqJD2{U?a-k5b1K_uO{{ZdqU+D>At@aB+9y>iXgsfbI0l)Sc#=8>=5g%4}9 z=uQ&%0a-F_lbbpISLj)2^6&HRX1p!ZUz;!K9A%JXy{7CDpR=Y-4uQifRbJC?~H)pbcxm)y=nSDW{3xg1y24(QxVbW7j zG~c%HQ-?=NhK8=4N(o2jhi~nB)GHp>v)PKCPjWdw;w!pgh7G_ab`7#<@Hq4$^s|5U zcG(Fo$Te*-mbdMg3D6L@Kjum1*Z<&}$vCZke*TxN0B~gNZ7_7( zLj2zFFlApvB8{S3UQ}hQX502@x5R2S+4E95Ppc^N`KhsYx5C&ETwNE);S5>Wd{wCu z&9-P`=_NkRuKU^yL#c6g{B)lrEDVh{M*DlTFa2p2Um9ChW^Bc{ZiNo4}5|WJqZp*V~G!w#dw`%2(Xgz-E_y;#-NJ ziLjP-z8!uHD`bh}i{Cg3)4iAAtI=lPiZvNtTA%mCA)ETYvAd@8IFar=XFVTT;_GXS zff`ebiEEDjBjTpsB+Q8YTTqhQHogEG>q4yE*JxU2?o@1T^2X+cZ8B@LUw4)b&ooDQ zwa>1uOufZp(F^MpSMd>h)l3b6JH?QWn}rOFNH8E1;OUx{KJ3C4A$!<+YnL^+~;S4D9bHg1zLr zNsOMWh>|j?xc_EaXJYg}n$+@8!S%^5Ci1Yhna|XSY!2_K?tYy`kIj6+*}*Hno}-M@ za9oVs4ueD_JZ?B!T3khBH7pY1%`}^WbaUqr_WO7yQ!`_dB8%RX7r%j)5QKB9;4!q- zUX%DhwfUy9E7`?hepcoA06!pI-S`64&Iralynb1Gu{!}zd!B0w8e_*}F#r|fJ+jga z5s*Ov)*)tM!&`3!6GMxgQFa(ZlkkoKztG_*k{+RomLNAq~e z`)cG%^GRl{*4?y2x@#0B9G(74-9K4QOT)t_d|;)BpE$*7UTMpiWHI|oez9x%Ina2B zA5SE~hC|z(?%Z>KdEJHNmd{)>wKj=0xi=AkqqBRj`^Wnstm8QTOf)S`MoIIlY0;0+ z|D~$CdK;!^Lj7I*N=c__(ij6c1duapzTyi%ogf?&G49PZdAKNRn7J1&M@UQLlXWnz z#u)0+?~QlG`fRt-g=p$SHpY3$fqh;oPE=m;?1V*4BYt;FY-f?Q(-Bg;fb`XG@^*~X zxdT<(%p`${>^|BHK`cPcWeWiUk4BCFU>;ZpPpm8%4`-)Hc?*sih1Fe}X^u>K9uU`;>EN1Wc_g$hEgB$6rn^37)Wp)W=H+3Jhyl~Yk zp^`o8pN2GU?TW^_Ka7Jxn}ZjP?{fcw%m7Bivu#>j0E)u+b7vA5cs}pKyOlU~tI#UL ztNb{D*|+rL>LwmnbZ&O1lz^e-cw%}TgD(je&^#+Jnj8DBm|9V8ljsaOpW%yZEB(}4 zS)fYfGcy%(28J?I6Sf0|hU0+yx8Z<#tWKHI5|t5{m{2ZxsfwlLe&w8$Ld$S05y^hm z-159f>*7Uy)E%3VFAM#Z5*f zH_(pCeAuN>_HNmM0r!X0TO|5+LRr&S2C_^==n3)MJrm-LpNVrkJK+r2{UQtkHBdyS z9bwbRWtMYwV3Hh9ag18V%zwS&Y{Ob7f-s14XrIV+V}?a}X%pTFnM)N8p}MxL(Q^`CqC^uM5==icGhI9lgPe(yMkwpZSfm5`O~P3d82D1UHiTq2FT zqWf+uXl_nP|4qN=`@CLmW+Uj5R*zt`; zU*BH${}!idN0^}SB+(c7?hPl6GcXx`uN2KrIPOQK0ZI7T;d{W0$wX_u8iN4&(a#PL zO%@3;nu=Z|tyK><;bnT8i+Mud&DqKdL)90{n!^9DzWvJ^S^da|KbQl~a1HGvj_ORQ8yi*!2Lb^kK^gjaCJT+h@UF zF4|e`RlPzJKbIm>X^XLH zip!z%sP47OozI?HXZ}-BSnS8(&%B2E&DICYZgr_-X$%=dnr1V-tgE1*WYr2qd^=fR z>E7FLc`Xku|AM2<>#DeBa)n;jQ=qs0OE)Zi;!ed)qYQZfF3=wic(@v?25sJ-X5J_6Z#c=w4I_j4k9lvqpb5H zuYv--1YcrZ-h^v3Sb~!Y*IGS~KWq;W#_R&;6X_x&Ay_x&tB|s(?1F(qvB}?U>QGd+ zhEwA7`d{kzY1(g()=`J~BKqSXvpT#HSAzHM>+PQ+dZLWSMGR_>up;l@+4bqD-kXlq z+j~P)0dpm)^D!?-V0`3!*wA)Y>;5x&HG%1WErU6rTFDh$(fQk%^rcBwx*ptDWNI>xaoCQwnt?vuJ#p|2?c&BGBaME-O-F=+!-`esMFEB zz3qvuFjy^i(P(2LsAzq`;nTfLNlnLWZO2mXmsQmd-?$dNOjww5(VgQ}e!&)QL(^nN z&}4h@8vR^zK1aZ!mlA7XPEv@&ZdJ-0PtwMqBcYU1ocZcO34S+JC@Ezwo5K4EFrgZ@ zVrVOW^jl!PSzE>_OG#2iUzh3^#lPl1oNeB)^s?Ad&&Pb`E10(AD-)*o<@ETRC~Lef z4?EfF&v-(BbM_RsXf-KI>NgG_9TRNeFGRsudgu4e%@A5;oL%Xp{NQQWbS@Cm@?JZ| z`_cy|TB2Va5nbcWg7{Od+VB|I4cFLK6uB(@5Wgm+5Zb#LOTo(Lmff^J9`f}Ujc z{=z)r+!wpPcSakpbgi7m%9BX*`G!`l&%a5Y>(_L-FvSt@6?3T0PA$xD%t^iO2F<8Z z@A^C|XtGUe+;1)vYjuFl^BuF_8RoP9zT1|&vgD6sM(h&O^_Oht8!qlktIkP%n|}xZ zwXhK*K;Pl342O*+7Oixo7^wnWGRh%=zQz&d*hBBzSSjRH?SLbimK}o+ZYTw+;%S{F zK>J9cqkE>iv-)Cx1_6OsHE!p6t&Y1x4;S5tlWpFfx8_PpC`Yp;!2tnKI&P~j z7TmSo3V0Nw!M3LXR^6?>CtYu?&$CtOC;dm?|0FHVwE5h6kXL;bB)22#)i?`yY0858#q-s|dCa>;Q%&c-wpB9eH#6Xgx0TmRD8+6|OC}{HciEkQn zbeUCoyyf8vCP6UnB;@1~8JYYQ!N)KJ#dw%cBQdt@VLhT=wa(~drm|3@5dvdeKZi{L z(bpn*o?l`WNt?bm0j6x-_nr59FxFH>^BGsg$mb~B^<#CbvfW$J&=aAj_KG)57K-+$ z{eHgaB^Rq7tHrlN{J%$0Vrg@Z6DH&A-+$fbp2zTU)VwnW!DHpWG`-|T&no>hW{ivb zJ(+DGPF`d6Qtyf$E^J=~Q@>U)8;d+2Lo=zRy<-7@TUN`GCTTd00?>W#VTn=PthKM7eT! z@JzM{S)FGKH_$bGCuk`lXsR{$KMu#}jWz23=lSk)b2^c!Ne4YoAp??pEjio*A@egM zM?qhpfjw?W%Dr!dx=^Ivoh;_67b$%rmrm@tJ6(3@hG(bDRxMGZ^Lo9V=R?(c8<2s4 zcE2u}Ce2{3QvHmpiJ)^a=v8|zHM9vCJb6vz z{qGV#>9fn{TM!qjWlG4p<_lX+u9k^$v$4}n&^XFJ%WG=9C10e|G-riz-|JcSF)=(CT9Cz(?9sIcP1xF0^oQn(}snCh1)B1HKrx4-_7&_lj zS_i+AVUHHo`v^>;9nU_ce=V|uuMLOplP!{-uK^25A+Pi9Hy)$MqYmmd*%&kn3xnRlnW5@Wz&K%=(IMjc85d4 z!i4&x@R{s4I#%8qaKCK8f?d@`y!@cTF2@wL|CBZ%B_}7e9DFXAH>AqsGUrtRTgKG= z*>F_7xrMq$4(}QDey$0YK{h4uPWO|Y)+6%|IuBPbj%l;i+g@qI)5KLum4!#be(1Z` zpuYQ+pOXyo;zp3*xYj%VBZ)`Nko)oE<6pAc(qxzK$18zfC_$0Ohmvl` z&|jpXv&nJAMGQh4eoG|nw#R`@sr1#2@3Ot} zByN}5WCnh>QtIV!Tq@!`cVL%T>Co6SGpcb`(dRvd;(`G< z<04NkUFT6BuNi17IPrL`ge0e$D7>X;pgSjb!KGIhM_MkSg{lSxRi1>W1&r_2nCe>} z-?3^o`Eac7s{>YsHk(Mlt^DRC1$2)6W)6q<6WWn#J2**cP_JAcUHx2FHe@>~87mq* zE^jIm=J2(LC3QJnvTJe$aZO)47w&1(O;^fvD5VbBsT)}V$zmaD|C`Y4(RX{G;ba&3 z5wF$xkmPDtnj43r;Og0~ePi?4YQw*8^x`R<{0I?~wE0dV+!b`&e(qVrD;(t-W2lu~ zdp>}yVuu`A3Hg-kIh^?LJVTYv=ZW#DqV==tP?GpGpSNPOr7Bq_Z}=w~_02Jy?~MC- zl?}BfG%X9yRJ5AS2<<1!!I+s|5V=oxoo@W6UDe73hQoEIpca!aG7+KvFf~$${983X zwoza5vwUBlWXQ-fyDk{mDBeIPAdM$|CwFFt@l4)>=>kLy2E7Q&+2S8-E$*O$>|ljf z4;Rwhgo3+jzLkI1r{)WXuD3RgO5){nu+FiAD$IzEc)w1{1`pH!3M?OuzKv64^&R0m zsm5umzj;~gmNKA%59rglaWWov_t<2JWY&i==IwI>P_W3t>VN=_6tT+qYHxx6vsKNxSLjuBzSHa z46_LRW@#|YE-*IZl*Nvp%k+PoX;&0ktE5G(PHt9G%wFZ)5D!P`+vpTLozLE5-*|gq zJ-OON0{uG7kJpWgsK}a|rZ>lvpKZ8rJH8m{tCH-dTCw=@&}v;Eh<%N1e+EZpQ96Hl zbfV66u^Q##$Vd+9hQ2Ri>yv$B5bEyw=!&~M={P%jRxOzqX;0n+HHdP{xF3FM;dDYF zuw7G&te+&E1kjC!(Z;Rqka~G1E@f@nFZFWOwLwv7;0|##*DSwCR{70nt-zTHu$92~>G1V$}kz?uhF&)4dj4&e!mnIr*Lra{CDA zDo!ex`dF-e_Cu_~(Uyp~r0*6ag1T_`P268X5shh)`S|xZ2i&z?DGSE3I_5pqw{)t= zAY&f-{e1~CzT1ad=f~)aC2do)v8f%eG&)HkFp*)?MMrNS_JJyey*O~U?}XF--6uOd zC*3U-?o~s34t0T!FLnmwsMFTkeSN=TGmCuR-x@}J=NL3^U9{Qx`CT+@wSk#INILP! zxJWWU!nk*6p>|tbCX)&C_AFfJmCM5J6aRIWv{cW@>h%{stylD>dK-wrzS5-{$UIxh zUt^PsQZfVW(D#SM0g1-SdLB%lulHXtWm9X_3}piPie z@ylkA>*(DvZsGAL9AY$~sKH=J&+QS5TynV-*xr*u%j9>%7@qSE&pahmlU|G#bNgtK zoY6@1X+j^AlzcFmXKUeeX<1rk-AkBPtRBOsv>*L01$w)_zmzE_;BZEJ>TU5GSL@$C zq~Oj`eYORwbXvo?LB`W<_z1NqE>ineS-$hL_L}XM8bVHV8d}#{7ixSWt7<`mN^+X8i0(e4VdUzSvEDYnG7tV_wwI|b5k8e; zY@0)yFNxX6HXoc#FcqBOyX83M_LbKmUwHhEJ-T{fOo(mTu3J{9u_s1LsIiIdYM>{9 zaC18=UK4mZn5BB~nI8x3X1FohZh+0$tRs_p@&_WfW_3k;`eIK^g*}MLVEFX%_+Yr! zT&R`}@f3j{9J%ftj94Jkmx0f%ull}7u*&;-Jb1oB7DtXvmx7i?AC(l}NQ*s0K(`3R z;5(`-vtF`sM?jZC=KHV-eT%sqC(l=;^!U4Lz16c`{?5E;_s_%&Y$sWru|=g$?^WG^ z>8rz)n^(PWh7T3FW}&^(V=&gx^i=i&TEyknJ)$3&D`iS4 zU3*ziD2s*Nu4U7jk#Ttalu|YUMt?m5x64t$ex@fvm6>#HmZy}J%+r2mrMNU(?=V5x zwEJotkWTTqe(j#2KJ+LjdXwmeBR73!S_s?gu+IK z;#d?u_JoQMlPvF#PE`BHDe@XiCB%f1l^nK8Tw94oFYITZ^+jKYy7dGZS)K&^v`;XzG^!)U0#m)=Qs(eSQ=HRpbVmB~?1Z!e zqtvQ1EWZg(xX;K-SF1j8C(-rReuCRL46WFx9!;w>KPr(*=A65Km$;rYLg?on=%KX3 zA377|93R*PgC z!VuXk-{K`VG}J2=WFM)Rzvq#^>pu||=_}J&thwk5e?84=Lz$`OUvfJPw5-=_L}Whp zVSc>75qy9nDP4)8(W$_&$5WOE zsGZ;0Oj5iafI9>c*R*-~64+Mw>^=k^USn=FsuvVTsD~Q%s)$()Y_CpKtJZi_Gg*1x z^EpCjF9$+On;3e1e`VlJicA>2X!W>N8V=|y**%^s6HcPn^`fq6;dKw2$mF!h=gQL# zYXN^4I<6>$B>9yW0z<2KG(5##y7l5t%_+H6oq@pkU2zuBw7s>m$b!Z1D3PBhJQzft!5Mdy@_HM}@5TFobK?0Ko$GwJF6 zFSe8Y)w=J@mDwwFnqfywY}j%&B!T*3J~`otDmH_A?q$y<|K!e^w(94~JKv-1-e2{( zI>w?rH}=xCtVbh=cI`~6u(jw}?|xh4(_?jUhA_PHYdj+@&gM$lE;kDfwTiq}jg4NM zUbkT^%-Pk%42yW5(6QcOT6dRS==fUFdt67lG%=Z{s2m0*Y2Xm1bbQ0*dh{axx1yeXj0e#dp)G<76h2bQGy9-)8mJ zPgFwEnTL~Rj7_!f5~t@+=PM>h4X|cD4Q(P+wV1<~8nEK+AV;zw@_@t`jLKT0ae{PC zUp;@s@htgP2at4c*bxuipqwsY>|Ik${4f=jt2BIl`rK|3-*UvKMK9f#2sh1r{sbm2{GK12=Fm_PNlX_dbNf7Gbz4>c z$E%ly%FfI-PW`x|^-c?oUQ0vwiMHafx!OA3nOM?>e$+yHaFNBV((0N1#(G&=w~QpN z?k3KW^HVS)fg0Q1&5Qp!V&V3uodrLZP&1Xfu~`xltLd}67;>V;_5HFu!dze9FLZW2 z(yk{F9KVxDxb9C%&v@{7S=D-#y}Fpus8XN(n@|w9C^+rsW=W)#9B;%My3JDXDoJbx z_ZN)lngq{|THZUK9=vWnT#%bW$}bsY6x>XQ1dHnDnr3Iu9Lp#!w?sNDQj0GE6VFMJ^tM2%c2++XO4W>RE%d-Xk;(eP(6xA6{=^Z9i{m84v1 zg;J|jA9(72kNx(Wpy|Q~hMEpnwJ%9=k6v9rMgOQNxcoi+2R?fjq#K7PMP1N=TS$b%%B$eu)-9)28_q_DMntKR?PcrVgYxN+O3RA6DRg3s;cfo_Sb|^{bu^C(%YR-C~4MJ{qT$v68a%Z@eB4h%O0H>0k`^ zh^{_0;V6v1$t~ydQ@9$nzp183Wbl$=%DZ{|tzPO^ZZ&lQ(l)X_xwRUm=>6#wBEQYE zq>1oO`B|V7Uxz2*c=w@l!R7RwZcK^pPJnx3oha050ikagcARPP@Za4dj1<APl?#Qb=d`EYgWleyD?Ki zva`$ejS7Xqicjws1vFnaJ@xriO9_gltTtQc&w9*_w9$1_okOx)a@42I7DQDs=_(uP zIR>%H2z zJ?6CY@sZN*L&-2|?z{S1{|vWxx07Dh+WwXk6}`}YuRhaU?=KCV$%Ts=sK)5IG+bxW z=+i%31}*P&CYRaQhLeJqM62OAtI7?TMfm3|9F+-ul^7>&&Q1wCm#Vs8!#^K>c6Z{c zS~X3*xaI{oM(Y6D2aHCpjjFxH=;0FM+6u-~%D-*1>wBWMe&+MHrEBiw2)F7kz-2s2 znZ*7%&;VK*NGyyjWQb6&3zdjF_A;(+**58M6!K2e%eXvf9VJr#EV*ap)MXlh$4o7r zy~_}b{#9|?wq?h-nz#na;hxBy0#HU25&%Py4j9glicv4XC$YU(S(#n6OB zn8p#m-sS6>+Jp-Ymu5OmpV44S8F>P2Z2tUGtFq6lWoQ3aVP_pxRoC`wQb6gH?k?#N zkVZg45ReXu4blxFoq~jPNJ@!xDUEcqr5ow)F3;TfJl{LMGtL?BKMuxrt{HdCxz^hE z@7jYamZwpIN8Jbw`d1>YK zeNF0Qa~4ITNUIfmH_S6-hFbi+Hos8mF5~?XaVN$*X5B0^#u&2}H%5b50v%i)$8)pY zr&dL5@oZQhF1AF!3sBgch6+1M*b+wf<*W|0?7c7DAr@%b?=PjPG9VG7c-v&~*Mhg&+uz(Mlo+QcB3%orq}DdcDDBCuk;^{iHRw- z9mNdH_g`}GYLQ~7Ha0vghD#o>4Tx(2rIcm%r&uO)@Iu7%aqAFd=9x@x))1a5|6XM~ zlI5)xX6?)Z9gMM0vx_)ff^KJeosL6JTP1% zHL_B0+_fImI9@BQRhh{iK4Lb|<@a7KX*-GiZCCITZ!D#@j2^uRa~eFwdToB4yfW=! zbZ_#RcEOb;7O)}9e)^>`h*sOz_%@^vt&a(~Ccgp;*g-abk9=$*81l~bL^WR2{_I6< zeqEucaVL-LJME!E?k3Kkww<$^f?kVdxGy3lw~IIJjOSDLjZYIa1YNjsK2vPQm0KDF z&K@KNOL3FH>NBt=yfWLr>>zt)-^Oa$_|{Z*A0P|bJU2Y7$*S@>(iVRZ>ZAkmN&#Cu>OjKun zGm2v>1OqkcPR)|^f@w&qs%Y3z&ieLxNdCs*g6SwEWV!Q~K*2Ie1>saGJzlc4G`~SJ zkpsP=L}#sf>;!3w*K1!;8D9~ZsG1jDb+%r5u=ao~xjBr|SZVc``6 zEgto?J1BYT7qsVQW+rC5Q>a&e5$W{ggY_1t_SY}Mu99c^J2RD7tE@8SRZe3#n9M}9 z1L^SxCyAXJ4(a;Wju6Y=G(k>!pJIg*ISeFUH$8EA5%RKK!13Gj*N}o~0W&hZrT)^2 z356S$zW%|;vuH7nG!@Bq7nv~w&Sg}b%ck}uk;Dm;-1piK!W+`jGqm!&=2MUozRman zI)?GIVs7y!;eKTApkyC;`Ktcbnx)b_er$gr=U@*vRuF5#nuc|j@unhc`;9wx?b{rz!=-hDQp+NJBIFkeAkGlwU9>wk}R)Y4L7SOu1uB zSl>mNH8l^DTvu>&>i|6_{Cnp{l2z4G*})KkRQ5beyG2y%D{so0TTlGy{N3zj7jkyH zw=MXxZ@WOk;ukv`$7{NA3h=%sH#Nntb4Y~3bL`XZs6o=h$i6YsRhZBVkd>|QA7 zyIaUi4K0UOHn?&aWvq^_XGRA4PlWCWGi?nBR95HoclhL^{8Q(G~#wG2>C+d!)rMAJW#n6&zMYC@JT zgB-8F>A1b-KO_!3Ge!NWXY2C1UcpG{2s5sf9eI>zFG2Af9aB|_`{Z8iI(Spj>UKTB zLX}c-elU&<)x0IIc-PR~7__i&7~<5E-_a39Qng2$Iuu!(-Hh^L&K_4>8i=6*a-^yr zSsP~L2r0#6XfJCIl~1}PYh}QWu!owd$62`5g!|=cRPn{-h9+XlYQn=xS;V2?qn+~r zmDLw5FCm3bH}^=n@r{uSR*DG)@pZJ`joQXC%4p7e7wzJ6R=oPYS{om2t*Ntx_ePfQ z9S^@9Qo!}*zb`coZj3kP&h{4h6ULJxebaI~A`&)d*V0?@bp}1A%#NJ#wauHu2OGQ3 zZEfn?!$GYxwa)XC@B#B43WGi(^D4IeC0~qaNmiqc+X=29&9iUCVjkuOcjapg=6`M( zet0kYKC?M8H^j6fWXQ`49Ig4K8}!2=d${)_w$C0K{2ufuFa<3m3sfIlY7*#T$_d&p z*Aw~J6_dcGZF&CdWK6O+UPGYKg6JW>j=>GRu{tplci?!wP0q6O;%4{tw$$C5azelV ztJJe{e4~MfgjFd$vUIr*2NRB>cIM0G=Yld7hF2!$r)NL5m{5u+7NT`us6tj{L!X@o z`o57>I~Amp1vNc^&`Ux(xlqFF1LHgK4F~dan$c6 z`miQHcw>&aLhrnhk#B&Ev(tSQ6=kX~f3LpkFn39$Y&3QOPArzxk5#fr-`Q;=NxeaV zV0OIbz3tH9Is;HouBNy33wnI${`5_H`d5@*lp_}lOlEd2J2;(={p3x<<7MaBM1t%f z-l{&*;K3UJX^}rUPM$@*0Z5y1??yTDeX7DG44l>89M_31$9Iv>1c?8A;_mhk6iwmy zknxuL7}2C8nPJE|Cf86wew-JwpZA5XOV#vJz`7rw^Fi`)Pky=W#7|xa+knan$8gko zwBmnAKg6$l<5sGresqK~K67i>Rz)jD0B^>n22w!LTCT15Yrg}s8BrJ2-RqY!{JMt9 z%4&v;pA`c2%y$%eJZnu}yTjwN#9vAdrCBq-s)!qr(i}Ob`|YU4JxFoQI#ANi>dO2s z_ScR}Zm3eHammj@acEU08@9vh+Z^)C53NwBm|Ttaj6+oi!3_BgS01Q2 zQKS^vc!;I7on(CE+;1AzO)}->>ZaAzx2N ziR{<(ruE#etShc+pUQM{+6X87M1G{_q7+lBZC3qqhw!?xqT813Ucwx~Qr#&;uj0~YREL**P8np36(ym`qU8>6jH!z}65=bg6fDR; zMuKI!jOl{*dwteN*@U~D^i?l|f(I`!Xxx!!Iz@N(?EsV{h?a8X6 zBX45z$VPiRy|kXP%!|AsM?F!>Rr({|?uM`Hb+YSB{=9R>=@{}EtZFg4saYhWA{2$R zHuJGEc!6KulRqE}4G(kln2)s>J(ae!F-Xo=$1d!fUB3|JtnBU89&w!I{jWUjA+MAktih}Pp7d9!QiMQxnudxrvcmk%YJ6WO)Tzf&noyt#<;}_i^@hh@ zD=c}tA^c`LtIOO@i?niKPrro0t4OOZ%85VHgGmKgn8z#m{EU)BD$`;+Y99p%(gaW& zkjadL!{DorBc~xY3Wic88z`jjt4lyU=Jyj=21c_(2J+(kzbk<#`nzI_VQjvXCJk4- z8&TbMUS{Ebse6wjfx1a3A+F6j-a-Ha93-?DR+2w`OXg*Odf|CA`_4MGfti6cNhLq< z3;*I=kjJ6sV#cXUgJ6?((wVH)b7$)lwpxRAED?GgafETONtuaeI7)ldEf)2tGYmus zbbLQqmW#ToVKwXsM|H$mvnq_%;<_9Uv;K@U3!qf13{Nx}{k|cAF9(DT&iZco#=`~d zIv<_C(dHBrq}c|*rHXVFp=>zpgYlJ3cX{5-M*gptJ1_DzP>diuzfh1Ga5%Nk-#B1p zV3Bn&$hSNK_bLr=F-oAmy?cAbL+p}w96agus2v!|Z+E>iSn4<=VVK7@x_$i{bpYsz z`)2QQP9=i=18q!gm+_9 zp?GdJB*-PZYunJRpZE!C!q7MG&<0Hn0qSrMFBwH8>6S5=52ck)vkFT(74w|N)Hr01 z4s&$bmHq?otqKMV1Pz)@@a8>`Tvk{vR=w>qC{D ziUW@4eRDxqxpAf#Dg5rQDyJOI=-OV!`U-)yB#+otO`9T-F{+@9)WW{PT@oXW6&k@> z6AmY8GTuNr*zrg50vMb=6xAs@G(p;Ev!gHFCP^#LsopjmbYne0M@xzYs};JHEmBet zXBhfOxhpc2`TnCxziIMlm^ZI(SaI16S79P&CzrtuYPx=mFA*5k1BW4%2A&9QV{6Y4 z?l=Z8u#MLxVCUTNhsj3E&HCt~VSjZ#fB^s|1HtT+$Oeob5P)to9Z^0~!@6An7ao!8 z*1SOIhj2ZBfdyLDK*(5Az>#^2qdv*`ixL2z-@wG#fBL6r!L0vj$N+1&1i|DffXQ;> zpF+@K16=@BYyxnM+5hNc!PV9<`T|4b+LHi)=+RXD5zu)*|NnsA%&Q(F!hi%uPOw^X zEI7<(R7gqChp4WuFjO1D9V5sLpS7JBFyucC@n8)dcteO^fzSMV$$5ieLUk{gpvcX7 z3aGgMBYo$GsiW}ZoRTDDK!6m?O1!yWs2jM@t1E#$7LG?J0%i={GMIEf6$LJY5*ye9 z8R_X$0Dhx_{{t+3^vvn(IT-SvhG?*cf+=n2EZ{SVRZJ4VUlB)Wg58rmt+7r9EJvun1$Wp*zde2=+mgfw3vrv`Oc{2K7;Ouddq$R78=d_c78MvA{B_>vYLjua;H6a4HzcEs3?-9$kb^jaH{g@3qI82W z#l^!r6?WM&ny#{hK(moSJyS$M0h9C2Bn~19=E^>`)V<=LO~IG)fY604gg_7J|5<3~ z-)prxl#$UK(z?o_bH6+T*i=iiOr-#72L4Udc&0=^+1m*Yue;0j$r>9{P%DOP8*H(1 z?^+iSC)yLWWZKv`PXfn#Vi{k862_DL1xl%4^p}Kc5agH~$isUwMKXw&M866lTzlD; z!{RpO&%(cdtfvR;Ol1$7G~D-94eM*BnM^+#+a6zsT-do~I7`Z*i`)%_U6>E#KED6M zezK>E=F6e)3&z($$GLZ^81U8hbrLN)0s{DM3N=j}59WR6EYZ60Bmo7a02t79~Ib_2?CX~1t5>^QzaUVjP<+161N+G z012f6U=jS^QpIlvbiu`cAHn}E1C3K(zha@V}&rxGPx6V^Y}FM*l4XA0y2p3=_AQ!j;3JXVDuzd$jl-t}!eew#er# zo}iy^>*|qA7pVB~_6RM_a7T#WIc~SZ;Xc4K!7sizNLC7mHS|R~QUFO?igYQ0_FdM< z+*6Yk!S`lfUUQqy7a8tB-8j-)7G4Aj)qX8>6A;*5k}=plo?RGgRL z#7kX7)5@luQLP21TFCdG-B3nhd!x0*;EGqhlCXfN0T4tpRyULdBb2`g(^d=ZMRr_h zwgsUz1*sV-6;8_Y>!D?}JX2_dMJ%U&=K|x@nlBKKfTM){GG~h#o@6JmL@& z)MCJn$}+%+|K?CgXV?&dhlzKS>?AMvo`ZS9A{?L17u@-;=nQEGHLIitp+4$zywc-V z&KQ`rbHBTXqpCM@(`#fisXJ6%c9%<^@({NrI~{Q^jpf?6+K1k%rJYhQ2u#P6Mp3A| z9ntQ|*#GbmkdY+a?^MTXT4i?<#b();@D4x5@#44=KHGnqz@LX*{JTG?AcE~ny-g*+ z>VW6~sFMWZMsw;^6lJBPA}OB+sJ@21VuudYKG#|uM-ZJfh}WB>u=s|ylt_Gd@$JdE3DlifN-5u|B< z888lvbCCgz^C!7d4mS8WX2}1hl|f-3tb2};7VOUB6%xRQX^J0SHyr=N3Uw43PD+-_ zHhDi!{q*mC36hP#6tg^42y}OL!Fe5NygTuZF6VR)z|ZE2MRi~+^#$j<2|5xnjPF__ zG4b}Wb;rVz)XMem|y@# ziy$Aha>!j(eWJqkFdhG{4EP^|z@9uXzzf(Z8fRM>2}R6fXh*n$fOFtt)PWAn>V#De z@NE`_ffFXQ%k!{M(f_w5l=7s70a1SO9|TZR~Ui%D!?UNVCXde4y`q_bEZNXz^%Z_=k=tQ>_i~>H<3` z*i((GK>B~WqEV`cQH6%sYEZE6dS+Q6x7-04E$WNZlO?>D4$|Wf!)!0jQINHoa;_z8( z2Ho_{&%JF9X8drZiVC)@i2u5;4CH`=A34fh=T&kESr3ajk9*~SH%X1DQokk+T;A9 z{DT81oceX4?dps#8>9;(7-f<$H>L=;$Gsxlh>AO+oAjgOoZ*Z3cVVR1-s+HQ!~Ir} z3lbyM6g=r+DXH6t-+-mW5eR7)=h2PITb%^`7#DkUfBhpps_&h|5}ObFGwY#J5@3)2 zY`0#_&#HD@`e&WS;}hu+5wv2v8f!^V2C=w&`mBII_uHjunAHTVN`|mn zvs$ZmDu?JskOGh4d$i;A2ES@u*BsT~G|8REKzfkG>%^hy)9`o*)1B;Szp!$RmX40D zD?Rb=>vF%pyC@Q8QV#>jrsplNJM9;%9NWa(ABKg?_62yG)(K%Un5fg8s9egXaH5bi zztAKCv}f56sELq&GM5<}VgF|U^{llpZAF(@v69{X8FW0Xt`3CLl3zJ{KJ{?x)Yg1_ z^437aw)vQ%T90WLGs**D=wn*w`MkHj+3zo*lU9=(P_o_r5+xt^TjwR9a1cbX8%&Eh zPb`+}QOm_4Bn&GWq&CLPDHQ16+%|WQN?vRsC z^4nWUHefcc=A0Jgs7-Buj-15SSvLIq(N*8GP}s@5>o<(`3GFQ%O)pvvpYN(ftS`zK z^C@EvMt_GU5XTV!6A_($=pf!DS+edU%CP8#+#U>=pWXnXtZKEV(n&aRWQcB+`Vjkl zF~5hxd-mis>b9;dspG4Q_5J1K9Rl6EtK-nE<72z?Y;nK0Wv&_`4^9-`TC8@GfB#|S zqQPjp1fhRy#_YUuA;{}d#Ya(B^mT;a%qycr@5AIeNb&YMsylE+Hjdy#| zvs?zMCs?u$?T>2;RDZC{C-EDMC9(~!DQzE~#F9h5z84rRcH@*48PP?@ljBQ|wkj%jkMW%%o%&;=84K*C#HobTq-uTYD zwO47Te7C+>c_!_=IXU{<>@5aqj&0-h6PqO_bW&0IU5!2+(`UNdou{Ko8Gs)=m@Zme z;gMsQ9!Vn;F0{&P*{Rnd)mgWbf*HbZ~PX)F;Ms1U*Gjbjg)SZC`w zG(&h;?0e@~?gV=@08d>6NXliEXnUyaa>}0^k}uC_MjN-q_%{1w&&SCrx;jsb;>AN# z8{wj=tV=0~1!x}lP>6n!_ABR_bJ(;81@iaY-TInhb3NcL4r@S4Ma#%%X zay_a&Gf|zoA858n=3f#=CfB$WCB9jye9wbc+?U9ar4j3?kTg3{hSrHm8H(J87YD(e zxdUW<6d4UUhnsIl*j$0q>Me3x*a~9ys?^oY<%`~>6UfEM_I4qvT%{NgX6XAGJ`ZU zDqlslb6hF!>!(+IS8U7Co6J9g)g11un>Nmu<~gK(s?|B%3OMvx`)G=>UqebD4-6|U z^9zED<+Y`q@Df62eAm?4KQ2)YWyr`i3yJHxdda`PM)~z|dm`{f`Qpx?h=hRRpUieF z3)Q0(c3z`JZ0M+=Yh{Va+WJC~{ENNX6nq?od9k5ip9n|`4rZ|=)6kC-)n;@hysl+kPYkR=7V|=d&RW{_2GY3=uXGf%*v;hhUQoM(3dk9(iG%sMxX+I9L@+3)d&r(L)*o!68n$&Yap4j%rNP^xi^p5*(s z!skXTQH6i!YwV5<2j77vUWKpX=cLjSouV!;Jztp@7+bG>zYB)yLdP0YB^!|2su8!m94F5h=tpHcdUS*&BA=p z4Wg&O^yjTp-qTi8)!i=X<#?Bt)TKpcNvO;?;t*X{WwWOS(G-jIMM z76O$x67;7=CKJ4rRb&h!Hj%o|TLmbZ(8c02qR%;s9qY_Y?x^~gxvytyB0|%iTh?=% z2@q9Roz%Or03k(AyL!a0!2>p{`ZMwz=+$9G6_rj!s67J6lTKhx-gKjCPONOR8T7-w zz0`>@A2*);){aI?jAqTQX`CNcowZC-l5HJlc%nB51uD%gnn8Y$>W6sB2=Lg$PvAon zf@8N)6$8Ml7)3pYubvm;NNY1;=uEXphQ%u9W=C;M!;s5>rV+@Lx=uS#@SLpTDldK6(FOb({9gQ|s`b^K7V;KGU-XLBu=eq)<*`&H}g6J+3eY{(-7 z?Bbft2(A=*s<4Dv^$_umB&6Y-)g+I$Z(z@|mV?VSdzuh>f{&zA88xmR*rEGM5-vOU zle7^D80Q0yFN8Um0+9zyxuz5m{Bs;W<_Cw`jpqyL;rU7IN(Tq6pw%M?42Bd^p(Vkr zlMSZ!VX14eyzmFHEVnW#&o@pCj3X56kDx0{wyf8fpv@R)qe}r@=`p&P=qg ziC&ucS)wf;G|SEuc5aEoA*E3J`gnim#Rm=5@SEpQLLgJ*To1s-szP81y?9?vH;MVz zwl>STx|($@K14qLcDgD&cSWV6oao5*7)iV(0#5o-V&LCJ)Lt)Qv)9vhf?u9NU||G3 zdiYm~i2@_=0Ef7GmkR>}djKDK$O^Vaf+e{I7WohVUx$On6Z#kMNML5uad6T_N)B(H zIDso{4DlxA6lX3wU~^spPFx}Wjs6rjbS~-X)Wzh5#)2;gKA(9extt_~9#y<5E;Et~ zIBQfIcqY$U@V8!BV?a$T=Kp^Z*z5#!@GzUHf>9M;-aKxo&UR_uGW1l{VE4WBeD|q7 z_0ggboL|FFT$Uys1?jp~OSCI|lqBvvR0ObCn4K$_m60kFeCc%Hhg=xkw1~cXzhaeq zHE|6}s%ukSM-N}r(? zrOJqI`r(eaK{`1gSEQu!9S#hciS^6x6~w;U9;fM8NxKj;HuEfofA*uCGcj%?{*z;9 z0vXc{Ig+?|C9rCWQt=zM7r5*{rna2xNM&gbbK8Zpvt)D13t#piw=NLS`F=?7Kj7j8 fapjM6hk_?Ts2GQ%BLsdQ3{GA~S-M2h$p8NU?5r8X literal 0 HcmV?d00001 diff --git a/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc b/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc index 7b3619be1..267f65c6f 100644 --- a/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc +++ b/spring-cloud-stream-core-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc @@ -1393,19 +1393,60 @@ public class MyCustomMessageConverter extends AbstractMessageConverter { } ---- -=== Schema-based message converters + + +Spring Cloud Stream provides support for Avro-based converters and schema evolution. See <> + +=== `@StreamListener` and Message Conversion + +The `@StreamListener` annotation provides a convenient way for converting incoming messages without the need to specify the content type of an input channel. +During the dispatching process to methods annotated with `@StreamListener`, a conversion will be applied automatically if the argument requires it. + +For example, let's consider a message with the String content `{"greeting":"Hello, world"}` and a `content-type` header of `application/json` is received on the input channel. +Let us consider the following application that receives it: + +[source,java] +---- +public class GreetingMessage { + + String greeting; + + public String getGreeting() { + return greeting; + } + + public void setGreeting(String greeting) { + this.greeting = greeting; + } +} + +@EnableBinding(Sink.class) +@EnableAutoConfiguration +public static class GreetingSink { + + @StreamListener(Sink.INPUT) + public void receive(Greeting greeting) { + // handle Greeting + } + } +---- + +The argument of the method will be populated automatically with the POJO containing the unmarshalled form of the JSON String. + +[[schema-evolution]] +== Schema evolution support Spring Cloud Stream provides support for schema-based message converters through its `spring-cloud-stream-schema` module. Currently, the only serialization format supported out of the box for schema-based message converters is Apache Avro, with more formats to be added in future versions. -==== Apache Avro Message Converters +=== Apache Avro Message Converters The `spring-cloud-stream-schema` module contains two types of message converters that can be used for Apache Avro serialization: * converters using the class information of the serialized/deserialized objects, or a schema with a location known at startup; * converters using a schema registry - they locate the schemas at runtime, as well as dynamically registering new schemas as domain objects evolve. -===== Converters with schema support +=== Converters with schema support The `AvroSchemaMessageConverter` supports serializing and deserializing messages either using a predefined schema or by using the schema information available in the class (either reflectively, or contained in the `SpecificRecord`). If the target type of the conversion is a `GenericRecord`, then a schema must be set. @@ -1463,7 +1504,7 @@ A schema is referenceable as a tuple consisting of: * the schema _version_; * the schema _format_ which describes the binary format of the data. -==== Schema Registry Server +=== Schema Registry Server Spring Cloud Stream provides a schema registry server implementation. In order to use it, you can simply add the `spring-cloud-stream-schema-server` artifact to your project and use the `@EnableSchemaRegistryServer` annotation, adding the schema registry server REST controller to your application. @@ -1488,11 +1529,11 @@ public class SchemaRegistryServerApplication { } ---- -===== Schema Registry Server API +==== Schema Registry Server API The Schema Registry Server API consists of the following operations: -====== `POST /` +===== `POST /` Register a new schema. @@ -1510,7 +1551,7 @@ Response is a schema object in JSON format, with the following fields: * `version` the schema version; * `definition` the schema definition. -====== `GET /{subject}/{format}/{version}` +===== `GET /{subject}/{format}/{version}` Retrieve an existing schema by its subject, format and version. @@ -1522,7 +1563,7 @@ Response is a schema object in JSON format, with the following fields: * `version` the schema version; * `definition` the schema definition. -====== `GET /{subject}/{format}` +===== `GET /{subject}/{format}` Retrieve a list of existing schema by its subject and format. @@ -1534,7 +1575,7 @@ Response is a list of schemas with each schema object in JSON format, with the f * `version` the schema version; * `definition` the schema definition. -====== `GET /schemas/{id}` +===== `GET /schemas/{id}` Retrieve an existing schema by its id. @@ -1546,15 +1587,15 @@ Response is a schema object in JSON format, with the following fields: * `version` the schema version; * `definition` the schema definition. -====== `DELETE /{subject}/{format}/{version}` +===== `DELETE /{subject}/{format}/{version}` Delete an existing schema by its subject, format and version. -====== `DELETE /schemas/{id}` +===== `DELETE /schemas/{id}` Delete an existing schema by its id. -====== `DELETE /{subject}` +===== `DELETE /{subject}` Delete existing schemas by their subject. @@ -1566,7 +1607,7 @@ To avoid any conflicts in the future, starting with 1.1.1.RELEASE we have opted Any Spring Cloud Stream 1.1.0.RELEASE users that are upgrading are advised to migrate their existing schemas to the new table before upgrading. ==== -==== Schema Registry Client +=== Schema Registry Client The client-side abstraction for interacting with schema registry servers is the `SchemaRegistryClient` interface, with the following structure: @@ -1604,7 +1645,15 @@ Because of this, it uses a `DefaultSchemaRegistryClient` that does not caches re To do that, just add the property `spring.cloud.stream.schemaRegistryClient.cached=true` to your application properties. ==== -==== Avro Schema Registry Client Message Converters +==== Schema Registry Client properties + +endpoint:: The location of the schema-server. Use a full URL when setting this, including protocol (http | https) , port and context path ++ +Default:: `http://localhost:8990/` + + + +=== Avro Schema Registry Client Message Converters For Spring Boot applications that have a `SchemaRegistryClient` bean registered with the application context, Spring Cloud Stream will auto-configure an Apache Avro message converter that uses the schema registry client for schema management. This eases schema evolution, as applications that receive messages can get easy access to a writer schema that can be reconciled with their own reader schema. @@ -1625,41 +1674,67 @@ For example, a message of the type `User` may be sent as a binary payload with a When receiving messages, the converter will infer the schema reference from the header of the incoming message and will try to retrieve it. The schema will be used as the writer schema in the deserialization process. -=== `@StreamListener` and Message Conversion -The `@StreamListener` annotation provides a convenient way for converting incoming messages without the need to specify the content type of an input channel. -During the dispatching process to methods annotated with `@StreamListener`, a conversion will be applied automatically if the argument requires it. +==== Avro Schema Registry Message Converter properties -For example, let's consider a message with the String content `{"greeting":"Hello, world"}` and a `content-type` header of `application/json` is received on the input channel. -Let us consider the following application that receives it: +If you have enabled Avro based schema registry client by setting `spring.cloud.stream.bindings.output.contentType=application/*+avro` you can customize the behavior of the registration with the following properties. -[source,java] ----- -public class GreetingMessage { +dynamicSchemaGenerationEnabled:: Enable if you want the converter to use reflection to infer a Schema from a POJO. ++ +Default:: `false` ++ +readerSchema:: Avro compares schema versions by looking at a writer schema (origin payload) and a reader schema (your application payload), check https://avro.apache.org/docs/1.7.6/spec.html[Avro] documentation for more information. If set, this overrides any lookups at the schema server and uses the local schema as the reader schema. +Default:: `null` ++ +schemaLocations:: Register any `.avsc` files listed in this property with the Schema Server. ++ +Default:: `empty` ++ +prefix:: The prefix to be used on the Content-Type header ++ +Default:: `vnd` ++ - String greeting; +=== How Schema Registration works in Spring Cloud Stream - public String getGreeting() { - return greeting; - } +To better understand how does Spring Cloud Stream registers new schemas, and uses Avro schema comparison we split the process into two steps described below, one for the registration part, and one for the resolution of schemas. - public void setGreeting(String greeting) { - this.greeting = greeting; - } -} -@EnableBinding(Sink.class) -@EnableAutoConfiguration -public static class GreetingSink { +==== Schema Registration Process (Serialization) - @StreamListener(Sink.INPUT) - public void receive(Greeting greeting) { - // handle Greeting - } - } ----- +The first part of the registration process is extracting a schema from the payload that is being sent over a channel. +If you are using Avro types such as SpecificRecord or GenericRecord, those types already contain the schema so we just access that, in case of POJOs we only infer a schema if the property `spring.cloud.stream.schema.avro/dynamicSchemaGenerationEnabled` is set to `true`. + + +.Schema Writer Resolution Process +image::schema_resolution.png[width=300,scaledwidth="75%",align="center"] + + +Once a schema is obtained, the converter will then load it's metadata (version) from the remote server. +First it queries a local cache, and if not found it then submits the data to the server that will reply with versioning information. +We always cache the results to avoid the overhead of querying the Schema Server for every new message that needs to be serialized. + +.Schema Registration Process +image::registration.png[width=300,scaledwidth="75%",align="center"] + +With the schema version information, the converter sets the content type of the message to carry the version information such as `application/vnd.user.v1+avro` + +==== Schema Resolution Process (Deserialization) + +When reading messages that contains version information, the converter will query the Schema server to fetch the *writer* schema of the message. +Once it has found the correct schema of the incoming message, it then resolves the reader schema and using Avro evolution support reads it into the reader definition (setting defaults and missing properties) + +.Schema Reading Resolution Process +image::schema_reading.png[width=300,scaledwidth="75%",align="center"] + +[NOTE] +==== +It's important to understand the difference between a writer schema (the application that wrote the message) and a reader schema (the receiving application). +Please take a moment to read https://avro.apache.org/docs/1.7.6/spec.html[Avro] terminology and understand the process. +Spring Cloud Stream will always fetch the writer schema to determine how to read a message. If you want to get Avro's schema evolution support working you need to make +sure that a readerSchema was properly set for your application. +==== -The argument of the method will be populated automatically with the POJO containing the unmarshalled form of the JSON String. == Inter-Application Communication