From 6a07dc43d42cfbaab628f4dba4c326a5441bd513 Mon Sep 17 00:00:00 2001 From: Dmitry Murzin Date: Tue, 9 Jul 2024 19:06:37 +0300 Subject: [PATCH 1/2] fix: Keep voting block if possible Signed-off-by: Dmitry Murzin --- configs/swarm/executor.wasm | Bin 486735 -> 486679 bytes core/src/block.rs | 141 ++++++++++++++++++++--------- core/src/sumeragi/main_loop.rs | 161 ++++++++++++++++----------------- 3 files changed, 179 insertions(+), 123 deletions(-) diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index e23238a47bb0f62aa36ff6521b5e27f9200976bd..22eeb3f283fe5bb60e8435ff5cb5401a771f430b 100644 GIT binary patch delta 70842 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 delta 70552 zcmeFa2YggVvM)T{eI`g6i32E0h>;K=kuk{zY&3HAI$`fR2XI*1vb_%L4c=W_0s{t< z1Ot?amdThT5Fmm8kuwNP#s+}_lQS3--@p3INCSv_{k`4$?r*<)*|pB;KHb&T)z#Hi z)zv+;v&M#H`04LKue45QfcG#b(%im*gWg>^7UU3q#ta&1MsJB=OJg#=FgK z^L145zQ3vZH6*?o_`?r?KxO?0B@LU)SE6e9_N#|{4UGla1~;Vt8BW6%U)^+aQJbLw z8-_y|4x25+X*fAkI1FjCqkUnM(vAiUX*l?QXk7pW{6l*V#++09pOQ)$3e`~EX&}pn zzXtF|1Ngu1U3+t1zCG&hNW1kf(eC!Y1s>tyC@k?$V`&pnLRQnS+?o(}{PF!_ubpCj zwuLH2n!nj(4VmP0I1PvXgJNwQ?Hp1tC|@T>f^VqfEuV6JCcg7^a@G}_@i!s-laD+8 z;g20(|Kyzy{$ShX+vrSA+$~~Wedps3-tPG7n}2=t^*?>`!N;$@|IS+m{=j3{|S*=sOjjxQA#xl8C z&XEIEzI~K^w0(^IYx{Wn1p6`jA$eBr2stQMJJ&c5$nWJS=QsANuAk&_c~Tyc3*;8( zVrPkSvFs!J%3eq>l*{B2xkApDTV$EsE4Qg7$h~O));`j?JY-0={TpYQ^9ScL=SJry z=XcJ{&Xvv;&gIUb_9FW#=Thf7=X&Q_=Wb`dlkBC=4bEN8oz6YZCC=}iJDl5{+nigS zedT)BHrF247S~eO2G@Sq3fGUW-L8GEb*?hk4%c4S_pY6;<*qfZC9WS_TV0!6Yh9~d zyIh-HrLL8(?XK|eTnAhmUF$-QxkCF7D(oDxO~_nHCoZa#!q39;U809CDbf=%*J&;n z9=kcu_h962Meo94kyV8_>YEbvXECs_c61fdszi9CH(zF@2#;Yd;zTJDb|e-fk*;#3 zN2bXl9Nb8Z98dRC?uuMutb2leon>^!XpPR?JshRqwBWflmJ;4g0T^)Nd9ojtYYp?)Pca}8r; zW~JJ~s@kjqHZEnD%YApmJu8ao_(hcv;uc{Zd^YF%ro=sO{^arqZUQ+B@47E0zO8+l z2n#z%Pi(QrQO;)jJ-(^&cCp4cGrlJNZi!F9-;42W#hStv2`|~}^m3t9*;0;I9_bM+ z@Bj*q(W0)3A4bZg6^MdGGSS`7xFpdbf^i7LuH)0^I+a|mF?yL2P=uY|D zWh>wETJd6P;oe##Z0t% zERl&vPfktqovxpOM86zS3y*K!6>(yS@52TS#Mks{bCFzSowz?-c~m$C*%M-}puWw; z!(thE7Kty!IC{B-c(&Skd$Mpl!o0R*12i$R%&GLm`@$nG(}(YidqfFMeP6@_3vWx2 z8@|}(R$(Z1%9dr8(C(I^CYrt0Qp8b4OA$_!{~$VZ8H}I5jPG>gC&CZAQVcML^m@2f zl{-bYImD4{SjCJijC4MYxKp(C#WuY|%q#p&(-;{!$%Qe(c=5bkA#|zGK+f0M(MH_iLi5SVaq86Kx&E^N@d(#OtCLYV>)XY3FOYiAnd$V@x_q zenWtEzT}o5olkrR%2ECsf=Rdc({j?;K|19LHCI#Bzlj!NKAoN;-Vx(z+TX;(L8Jqs z7U^DoLL`XGzP_7Z0Lec1y~q-asoj&J4uFfdL=F1G??I;eZ;6+XfBZ?&Rvh+aZ2dEn zL)}1*g7)H$!nUnn{Pdx&PIp9@o&jbzr#syL`lZwD_P=&_y2Gs36qznj1(h)+*eNDS2OC>?#-CXY>#n2%MlEu*~iJ9)USP=VP28t4)@iZ8CS2W zKeM0H9eC~UbesNMpEH24nd?iOnHoR9>8|GgHn5_`Ak<*|We=zC!`q`v%WU zia|!8+Te%Cj`L;A zjfy{JxMRyp7(peD`#zr)Tl<9JjxPV~2>N`|a7X!jV&SoIR*QJx5m#P17>`RnPf@H< zX1HUx(Hf_Mp$0d48c=Y#@A$atQ%ka>}2-RaI$8%6z6>3%#Ic3eRF50iVMCyDE6~a&bzs~Slpb(;vyHT z@r%J6?r$`hyq8c%llQX0-0m+C+|!G`$#Y_`IPwtgn$x%$NCGCT1ph0+5Q5vd>brYx zZ0&0X&y`9V0KgFc0FiDbcW(MU*L7wkt>oCBhFvzSFjIaH? zn5R(59{A3zXru^ph!eBM9K*|Kh~^`(XJ@w8+lY36)3mKfL0%A13cT!h4JO_w8Pm zQERQ%!`#W}w-!U_IkI$0|1r#UKJW6;kt19lM_{GI60TRu%IGp$FO=nU$#i@_nU~0a zN8;3{XL^blU)I_VVzqD0+BcrmT-hChn>Agiy~;ZqiI8%xya**IP39QLfZB`K0)Abp zUza*OPR?5CNHO@i)?qI5Wv|nUFp{$kOA)rSA{+unowp8xpzw+HPm8E-4xV?V4k)yc zftVLipJw@rHlzTpog40>j|-upW7Y~#lDQ~cZDzWud$dg=2c&}?Vo2uV}-V$Jcjq; z_(e8vb+aPl+yrDq2W9O478!9t8Q)JtMto4l_DRS{3ChTyhK$IdjNIwSh$+v=HoRR5 zZvt`*^TeB2Uc~U`Ohrb`pp0Gx$OvvG2LtI%3M$ckCNexh8F{mi5!{(xMaYQH4k~hJ zHs=Io?4N@SGbp1wmk7>SIu{wi?XHCyd_#X{7b7E>W(D(+QQkXfYu*_PkP{5`5N8Av zZS+E91S3D71Q}7mm@Ps^Y*0qdVq{bc%GiH%#>yoq(V}7~3~%vLeX@oa;p=d^j*)g_TN_Vu zsj8=RsYa(7`d&R<*U=;^MVZCEerFzbcSQ#q+E}E)LjK`Y3&uZz@ek?3U2l?w>{h4K ze6OFW>&SSw@@jie>uT{8)iT~iwKiwceD9pC>nydEH&-pVIhWV*KzO|G^x4MTXdKrL z)s3P8s(a6-iIKj7OLZN({sKl9G~RobJCuA*cj%sTjeQ@Vuj_;f3Dg2b4xH1&5EB@N z%=1lrf4NZCnInQr9XYQ{MF&bfc%g|H)Bh?);(}cSK%Kmx$Khvd9DZ&h#xjweV3wfv z&i$+*MFt?Xzxb3Gr^^+foYP$B+j#Neimp4&65aJk->X-2*Q-}_9Tm(HU#DNv#dr;% z^oE8~F6oA<1sck})I>}Gi5isSTlcaqQ8iGa%jKuUw;Ix^3REfv9jN%8ztRE(?RzD` zB0kC?bH88LHW0VL-3;Jfr2_X{$u)ntnl2_;orf-0F({v3)0jmBFxz$Qse#Xk zy3P{T_$(6Lh*!aN%~jzQ4WOu5GB6D4&lJrU6*X@qZa5<-=28_Q{2eRf+SFX2`c%ph zFwSq&H+P_KVchidnk91-D!bS^mEK%v1Hvq*R5G|&!w(dhcAFwl>mf*#FXMDnXg;fV z#}sHliapcgI!>r?Y9)J z;j#*=K;gf+;8&Wh`Q?_vRYRbn&!zSuBH=-eRGCIf^7vSzJg4#@Q_-j}m=|)Pppu{M@$^9#M+oh8i$0OS2%06U=BDM#ii9ug+hyVr zm>e7XY3EQPtfG+bwN~hWH!QioNC_S0ND<*sQO(2j(Q@%9?1%-+MJg@mFRIY$2ysI6 zr#V&NZdzEhrHW`Q#D20@1gRIY_{g*b=$EG~(?jULuJs1l;z6FeoTYc-6iScVZ>xngBrkO2( zjssqNnZf+PUiJsTjPSD4?l|$GSW)yuym(*y2e@xZxDofLN^z(5iK3}*Xh~%@awFj% zZ#IuJ9c!U9|EtFP|E-OTaZVQfBfklnUYPr7lBd_6p77I78&pess6Dmd7??CpbNUmt z#6w~s?d>I6J5E8>hm$zDHyqgQaxu4F=`Eaa@}4Rcv9Q#$dy6M9MK|p}w`*S3rF>mHUq^*SphPL<=?v51i9`Hi=eswa;C9 z3fSlFhR+>S{r+%U7;_}p{D zy|laz_WL0(?B-&M*sOgFLvux)3h#RwmL6K4E7}Hm-_aC%-#6A3Ioaz)l`uG4azwz} zvYk~lSZ!E5ZE%P#Vq{r;hAb1DDa?i1qBgK~z~$1i0;Qm>vIrH(;xcw~2?~B>o|Yb4 zL)()cfj{O&sWT)RgjDukPZJ+`Z4bhZW-}30VJmI`MnTC^kqk;G+S^{ll9?`E@gbzOw*?;No*R^!AezyjCZb#9)N=O!#9Cec3ihvLf2nw^ z=KrAmCC6wOcA&=plnth7k+Xm0qG)kX(4sgVmgm1pNd7l0inRV!k!dl`_It#O)H#tI zQ+#;yx&$pWjYb%`!-hb~|a0h+% zwn&Sd_^b4bhW2t2_`_G)qxb()G>f+Mm#!j){`MiJM9&v0of7rzK^v2nr9B%S?|;?O z`rj}suuExe#L@GA7OzB3_>~bmlgb(8#$}_*U;o{g4LxDnR2JRU^u`r~YG&)c{*Rg- zAJOIyE1enXj$;-}1nJwGu{-qtgQ@YS$m!+M(@gmfoD)}Wc22Z|^!#7H1pE?r(4%mX zMq*d*SNTvU{aPRDN7Ss{ZP>9mNK*TaAZ$JVtJv}XwGlKt4?g09G$&7V4GKo3sYAru zR4`b4AbujxkXyd(7X6C)3>8fsVKXf!42L$*>TeJdT1X)yMQb@z(4|#ypuRp*)TL_o zYt`sh`)ZO!%V7H|=YQ?1aL}DxVSF9Mdjluu%hFf2;njT*vp5hoY>0RmIqZP_J zT5%Bx-qTr(FNl29Vd^EEVI8eF#jl7l!;ZuZC!aV#FqsqHb3BWk<}y09Le%r0wz%jB zI&I;=X^SQ+#TYT0wyqR&#VqQ#O4N!d5`0vmE&s_dXVcAgR ze_Aajb}SS+SeHMvu^j0rC%lPS<}{(Bs@b<5i5wI_4u|h@Xnxb6vIru<7Y;n~ zbaFdd?N9ML#EYS5lq2{NgiM_lsCcH9`=~Q&w7WfHS90TWJl8(}!vPE>TN#E!w+FNKx&oR%AderiqE~SLyus;y$A% z;-~5BAx4zAN>BfQvmux0??0f68)^Oz;_=8IfsUpjAF9}I4|@{90QAveV0QJmsG2sp zTs@j{(;G)@+c;_zJ7Z=9&0J!yFDDDyx5QpgOrr3m_Bsl|k>uSiqN+yz!OX?5l(#d1 zGIoo&h(5u2`{}LSq6Z>jPVW{4czjf7+(|q4VB7Nf`No%+aeL<*1$ZF85tS@3s?oJQ zIJz@~;>yIGkPT0jVasv`jVdu3VX`hN6D>snT`a>6={$`v521 zvtPv4M;QJ+fy{Ip^Vv<+%g6E(b=ogt5_weXupc#hBT3gsWg6Dp%t zhedAV&LMh>8*>M0fsw4Ek{|_Ar1=Z$8)@$)ONCGo#6)wH$RfIMShTEmNraiYB&!z~ zR`W-?=Lk+39HN(xh(CxuwDt&u@gBN(L?p_b5Q;vEn2|kn=TXs0tfvo;iWIShd`Crl z@iQGbDn^Oz)Z>`w6Z5lPn-Mq*TqYUj>l}`t%q!IBxcD>7#4*Q3ZE=Ct9EXb4>V){L z+AOC=9!DyH4J#G1i{Stxt$O2q}Man!0W->e>QzxwJW)+ME#$>jxkMK2Fa1t1(=BKzM~e z169pD@|_XMu6`0o2(up*pAqp-^k>9$AAorY8nK%?i(j3(dyFj37&uHH7eyQJ1aT*I zK1hyy9m(PJxXb}m`>bf}LP`NB9<%MEV{njPR9iuST9fV!Nm4XHgFysAoreoX#0^5r@n7Q1nId z44C=-i{cXi+jmhsE%s5%U&JQyBZXWN!w`=)_7bM`fua+agk7S>xhtX>ut>WqGEw8* ztKiKo)cYzj_tB!OIKufOoxO^X&%M;{8ouqNj@N_-^*UdJ9#Tq^ub~q^()ZWI(D)si zRZT>_fMX-|xtlV5pmZQ~?n49I`1IJMNH)Mj3*`s6&WM6ziy-Q{IP$K5)v0vJA(7rHpcZ z$dNVXI-2W5oqcr7DH~t_;#{%@DztJT^GABeg=WiWo(ssYqg^if`=q^r)~jOH;iTw( zBPFzzDup!zXl3+jh_3%xh-3kBECij{ONpVtqKxheMH5@-_o3)~84U=Pzel^5IkSw? z!mtAVNDqhU28V_Pw-g@S5)Oi~2q>ePZkdE8?r{U!CVI~;?+5J35%Lu@ST!6CZlOlu zvKhX;Tm|3u()e(hiwbu|{C}wMDJ7aR4wYM)vKHK5FPQQPh_G)>`I$WApp8{!dbQ}V zR?5cmU(a9Qwuj!Riqh+;dsX?MSXWe9Rqhte_FGa8;%z!BtNIj6VfouROY6he8RdC1 zX>WDeNK7X)QvMbO(wmX;Cm}}AW6|>ET3Z#wAK2BEqV#k{yYmH~i-m;Yd^ZBW)G*>2V`3Qg~#mi=~TfuT%CJl1bnXZ~7N9(cL zOz*_YM%h~&*4J3;t0y@YfV5t}M|hkKZDzPlW^j>)wyG(P2q|n>H=I}x(9RCS3y`dI z!B7|o|slPUeBUi*~(hz#`_l?OOvSzYi!j9;Od{LQ3LsxM!-yZXO{pFuOS*i z1`8Zgv&P?CVV@8_8&-Iy92Wva6ym8p#anV;ud^NLH;V;b<(A>vq+# zhNVk^0=k92E;C1g8A8x&yrA5ZV_cgRN~c5vjT%(dnESb9#e=4KTT3M(`5tONnFZ>gO~Z%iveHA+jq*2uHiiF3I@@} zJLT_ce2*Hq*W>~IJM01TkWRkMsrL{KdGB5FPH~?8ahLp4Bd`m2wjED6u*@K&(tsGq zoF+ZcC)G`yQnR&u4%6kYt!2HMQ0v&ED9l3T%|DNx%+Rc1Scx&T2!)zkd0M>-@Wz-M zcw;+w1CW?Ev}95cIW^mWH>y~?QH3(v$cM{$W91n%R7TVWyfK4$5>2852SA&ntzXc)`g*CZW%?1?PP4W9y;9zxc7Ki`P)P--&TU@;VtAr z_H#l6zD?zkcR>TzT*kvUmi1vPizou@<( zs*)+&KMBHxctUY90CEHC0;o2U+h=fiKn7cBMi0gU^RD-zWjhFO_e-D|<}h>Rc%C6V zaSJl#?~*WatT|*iF`X>AJ=A(}m_w=7z4EP!In@7N`Ma9d9NG>%(&YCo{Bx+l&dC{e z%p%8qvQE-4My)#^%fU!^vP_+}#GZnq_L2KAU5?VI`{bkMSc9n#ei z@QEzQSx%w>{EcNpaw2VfK)x=<6}5O!J|MC!ETCzz8I9`*nwzJjIZ2}iW69!z$pC>X z2^{#uuy~O&C+i~2DZ=}GDZJ2AxW{E{^c&QHFqHw7hpVOD1d%&yK^$+Gp&I0P=ogd8 zcv$|i!&F8WX{#Y~s=-cIjRxnSsxAN=tYTb1F9N6nM!ppj8?H%U0Nv5VSOe!swmmFs zR>S#rz;rT@Lt4`+AlD=E(a>p}Kf3|@@LzdEj(T}Ir}YxWcK3kw=pCvGkJ~$g-}PrL z$V2gYv;VVZ%9Jq8wS`FpA+Me2=RoO3%J=3D-Tl?UFIatI)I$Ih%!sciv)eVh>vc} zQhdy2GW(BJIbohwe+VF=&`~fhwWi?YKoucZ79HXtjai2n*B+Ox21ier%aVG5&#Ggm_~tNIYA) z>;A?aUYs7{7I-4q@5To|ttz?=F~oq%yXWt=UakDau>s10$k$$Od9Lsy*)fL$RnutyZza1Q z>itfe*f0K0#)ZMC#ZHt9Mr}5A`kib|9d^P0HUD?=ZWO$X3_Mys1Kp^MUV8@1-Cmma z3>-lFX!kP!@*`DwR(g?Y|145v)cIMN;)dr3IC%JwR}5`@LB`RlXK^p%KKh;u?WOSN zWSvAfXt+>#HII#V=~7c%+C9TW-A7M62Yus5`tUgod-`*-IZ{782cxKrT0Ae`2dq)g z%XFmHJ&%%m>BRFvAR_`GLt3da;em*QO4;NE*$Updw_kuQwS|_yAX_4J)k?kiB2s&) z|BFFDT$KUY{33vCA@@tV{Jk%M5PRwO{Mb^|<0UyN1cxw0QU{)TJ_-FlqIVE3~P zgxEmvIbL?ar^A~FW7g?K5 zye*xLU|-oXhkQRZXXnhkflp(s;P}n_sbJm6`~#g!nzvHhk@m6!8M>1>fu_ABpKV?V z%nEFvbWaOHX$UN-05-KK<8ax|1@HEyeAvpRSDqR;x+tMiuEfvvSr`81)ZWZr(dHk z6HCAB0Uhq20v-DD*^;3op z$d9&0w}B`P;9|zx>sADgO*k$3MaRtOVw5Q5tnCo$`MevSai9yaH$Dh>fdz zc3v=G0{MsW|BgxMs(kBfdv6*Y4dr>*~JsKOgi9jsH8O zw*Cb(vNE8zMQY5gl=^A(p$TW^ev|h_cINey*O%-$SXdnK&y3z9pMp}A0lh6!2t2)6 zhz(yzL$0kFx7D3FbN|*&yT|W2eJCJaTTS8nyzG_`o3`u7peaX-hYo_w(kuA&;}iDx zn0=C_-$sZP{|zLo4Ehb&6$bG;LPBqvgfZWpA6GiC>#+WtY?*8Gt`rZ=TRJN5pW?2j z|A6eO6zUCV1y95Aw-RmO*y)|O&)PY0hb?pT*PS-c_-@G3kN%mF9PpV;r_%SO(Yi9o zx5W&nlWrndbf1G0yHJk_L;jxG>A<>6V}D$HpgYsc^O>yQP%lRR`8a00iv}l9-`+Bc zdVMBc;#->5Mc&b(GSD}m7Ce^U-b%ES+Yc}L>iGE8!?QEL9C&H&#=Ldi-vw%4eJ<-; z0`)&f4L5R?;}-H{D_a-1w%{9M^jcR2{7fKMP*=bi`JA|NEUr`;E$)4Y%MO` zZOi<&|Do%fW)J)7X`ppimtT(-Vrt6K3e6RME}Lp`S!M8Viyv;WxQWYZuGuna{nuL$ z%=yKZIVP{ympgy>W#yNcpxPvpW`Q=wnpRqB|6p ze}%FeL|;1br3|4rd&uU^D*;@A6HLBfbr%QFZt8bb*|bT$=UwkI;Hk`ReGc^zfSL*(ruBkzXC2Tm7+woQPu zF<@!^r-NKpfprqa^_9(Ol+-oAF_oPJ-l z#%Q~9fAwhNPDQk5@nC4K^vlHAdbFEY0{yng;j)?_UJUOipQt%#>Z(C~zaKakhU$Se z118Szx4hq4%n`pxoWmlkHs$w|&gPYtw3>o%HfSQ^ayp)f_@sSQHR)16ctj6UMt}J{ z?z9`yU-lCSENw7AK7*4mUks2hxDN}s@$A?P%`%VB;Q{gxcKkLClpjSMgReGCj+b8i z7D&!tAHe>a%{)%e4T4+l1a%oC2a98rL|zaECXCcl?eM z+`6YJHV+=oGxS&p8C@uk2o1OF0|J^AkT^ z5@B8to~n5KT-5$+T+)UJ%9N3^1dks_$`yD_90lyQQ`so_DIPD3hKq4KeLWhnLfh$* zm1;KzK{(qfdkos#PAkXgBH?3o=3`@Zs{dFxG`ANW8jC)PQ$^Lr%Lnba&F_WD@;*DF zHNT!Nmm4RY?kH+nBvYw(p>%@KFZ27HLOCPmh%-e8e43tWeEtZ&OhkT~Q>e=f=}FKZ zIn+vcFRCmPS0yHoONIw}oLkbV*)l_P9W+yBJC4H$88h|Xo zSXV5&0n6Xcm#GZ-@fzZ!P4j zSTy$bV=QKS^Z^WSW7pvGjGZtm7IGD1*jv-P}U?8ZcP2P^Rn7=-9Zx zfH6Xk0+)wMZp8%$vu?sA#!tu#C9*C+CM}ZpMgVF4kq|!v&Xl=K%>w-c@PjKh#o?7 zcW3t9)otsTIrI8V$jL14{8qc}IO~3ONzMZPS~NybaKTk;=8WgwI$7 zh9GX0tQ7^M0T;oTRx$j30{TJiSII;s#0RS&ow^NLEfX8lDskv74{stK?#C7_6sr+-59E3R`6qN76x0#*fpp7#6rOrAp(#rcnatBZ* z5>3YHADihSdCqbwg{$E$QRjCJuGdYvIaC?N?&ee2)(ogp?J7hcJUT$%tca@tum#-eC%kY$ygjgz$4MTj)jW}Xwz{&8Skdr zY+=#ZkOBqq3rwGHMa*Ua4csd0;5gtx& zvW?GcVZ+I~5z-t(XLn+|a%@rRE;NK-zmDI_%#e||b&^jf^r1;eMvvFWVB2!D&CQ>A z8xK7iS7iJkOJw!F`lCA;;uzC0*$4y7ZF^*q7)yQ2z=?fndYNn+Io=Ug9kf6fanB@Z zlK39Zk>FR`a-cDMu~$BfqeAQU%E!^k#C&x83ge$Q)99m^@rikX`rre;Z`_YP$?o*b0X%xpt^+c$>PB2@ z>9J;yZtW{_9h7e)`2C}Uh_CNKBMxH0`;yikL?nOjqGJc4HsO%L%lHj5JU%}pd*jfh z`>^~3;jEnwOJCYD%tNdDUIYdO`cSM-4B5Oeki2=m5*uO;J33WOaLX@8ApHj6Y!JdX ziMk(^^%_Gbvw0kW=sN_*EB?i{B%FI>ir~17fft;$!RX+ea31YFD(i<2k}|{FeNKrk zL2<_r<3E({JSLN4hXGYYmU74#YH2kMBZSj8A03m?;T(61#yB4=Jm8pY_Q23U1v`3T zRj?rl0B|5!bfB&|f@=x9Ly+>RApAOvEo=;at?+ZSF&kKzc}3yJ<-3L$T=eN_{t3h( z)awlNvmr%4ospkNWWRJ?POXBc+pcf~12?)k)TNe#c!L$4;-?-&Zb|3xGc1<*KzAIM zl{R_Ldl96}LQj~MRrC26f$p9@)0AqX@lI76f#&O-Dkfo|w9c9!5CdT#fs(i-)$|Q= zshBJTKJre#4`f6)?dAZU;TjP7IRN6Bhn2T}nY-aY3qSx-&CwjTmV=-?j)w8$pofja zlFWhScqubqB7U|L+H-wv9b)oPzDp%P2MGL8qnLx(8Rl<4AYjW;nP?n$zcPvlUd13= zpCQf=Jj|%u&5=5vkwI;KxX@Nyi2A$m(ZCQ@3wJ%w2~mysG?No;#q%O!Ls;O25cP6x zjJcn(p#D&)Wg!~oF)!z|Vbn2HML*n6A_|t7*w4vQ|6&NUHsT|3rW9TA6H1d08}~Zv zCi;LbR1&IcU<&LGRdGP>B2tMcicliPp0BNCvhc0pDWT}*NNO6UqO$Xua4xIUP6i#q zq~KUz{*67*f>%G}fS)nuPLL*)NrM*##{yA*^90L4*7^{c3ruK0KsTA1=$p7GQVuy;J2 ziBS!!=(7QN5S`-(XxNQn)x+s1Cpp*%@l$~_f*ho;4-H!Kj5z{_4=F!Z#b6H1j>QSk z$wg1bsab{?PtGLuvI}g_12BxM(Q${uDb_7a4ed!)IG94YGE8aijvzQDo<=EdObsp7Gf>AGBG}z=z~lZLyu%aAnW(1A~!+s!H7U#Z0M$V z7a@D=XiKJQf<_(psx%yKYkaS2fZ{LRs}hm<>AmVYPVRqtpZZ*UM;Gr?=MemJ{C<4f zMxhU=dtr+|{(#Cu;Mh+Os5g=M*n=t?k97~KegO9BLtx#Vl=BeQ#_dJ<52;l`Y%I!p zM7<)bY=PWCb_@V$OT zoG)YN^g!t7OydN&D}-mkE`bePI?W0QYFxcC)9jIe7*D} z@cWTIdlLBlP=qftMbq!3{(+@t0%u#mOGs)4?mZrOcE=x%X0xT(67UNK5X=eYa{A&a z)h2A8(LyLA zDflo|)-&oAy7z+dnhG^n()bHTQphS6a;$*SN0S|`#Q~Z$*)bP`^41hbt+0(i4~Nf!^#QA}6nkBrU+16+M z6SJ5t{-aT_2pJZBOG#IT8zBYOVxZYF{nhCWwZ0;tn_CLhEkKg%-eG;+jwBZ2K;0bl z6h*!JZPw@1@yKAFbNr7J5fykF1s^=uSxc5U9<3Sg}d1!@0S^a#$jbbcNI7b!5exw>p@aaQ; zRPWW%Z3M2%X96Iq+A7SLdS^_XKpd&lXNj!9=x?JD_ z1_zr^TprLc>n$9hzyd5Q%?uDJktXz4wceblQXtWEC+#L$vqMM5%|u#923tbF2&R{x3QFV6 z<+y7&myEB$*l6?u3LsBTWB@&C>QlACfR12v@P}UYshZh%XPJ!-2U-fC0?xolX@!v& zA{1nmiLv0ec_F~DCDa9Qv;YT+)pv%*En0M`=(c`?nud?8SYT~o6Pd08D{xEl02Ljl z!D?oKd<_r;;D*za_}rRt=aiHgK*i2xKVGykhIh*zWmbZuM5ez!TcblMe}GDCI5E&O zJy`mW#X^v#f!0{*W)pZgwvkj#2RZ_7p@@Mh`c5=2wduvD8^LirW0)FH0kkWC{imP@ zvMqX`U5m~y4OI8lgbRZOxiyG38ZxoSL+Yd({sK(85I(#gKL*D96v`N*T1MmECXmc+Mudg2?D2aXsMi>Ef0BRB zs=%Q`*s~L{Oj^@+IGr4$;=*-*m~0rfJc=3%4K|N5`B6e2j8$H0U)`tyA@)IaBZ{t# zRnD-f%I|c6cMu2uYWa^PbC5hQkGPxj-f^l~coAAMXY>42I5GFdIEcCe8Z%C{OVljK z3J5r;e6aLME_3*x@hUQPjy^1jBYV7WSHU^?TJHe2!cAR3ca8@U=F%(U)!i-i2%Q2% zw%065vw~#}91fjTObWyD88DL$ppE14oI_{ELwlb~2@}AO!>Qc_#SYJBCcq>qp!^By ztw=4aAhoy_zoSRPiW0t6qeK|!X@8PcXE4sHi7FvnpU3tJFZ@zC({XwtwA85-H%YzR zV4gy6!2jAQK2I^*@&yja0`D@1>Ax5ViGdh7N!3mT_3-nGxdQ5~u8MNr?Xyd4W|3Cg zk;LtLM<=P|>>-j5IO4wtQII_&#VjH$h+J%_U(;vkjDhvNyj}ioO-_8WS}iGW6;Og( zMG{5)?sJ?8KzOu`dQMhVMPAYH$*Q^t$L%8--nEYao6CA4CyYLs1qls6}Y z2ZiUd7LnW_O0gpdKye%hW$?y3#8|_%W3CP_&2Tue(L~Nd9E>it?C2dwt#R8tBY*Zf#*OAQGW%UtSCI13JO#U%&CI~su3Ph z)AZxMX(|Q2pSSR+3tx!k$*}A3(!Jy5gS{45zW@-23{3#C>U?KCUY@Sv*r&y!TNgn| zN}7)KW(>8QuIk{yMdB-p1d$ltBlt#gQ92rRA=d-6$2lN#2K!CsPgjkr%wYb}`0$E5 zhAvN6wcEiFrTc3+R5U@gYb8Jrc11D4{q)eu3VMv8R|_Enm+{$QiQ6a(3gHA>POA%{ z$oS}bp=uO~8s*)$Tw>-7^3G7HRc`u1pUhBq)I=s)WL~gVj^+FkVuEMbrBy=9W~e(G zVs9D(JkXmEE)5GJ1bm`h{uoBc5C1ANoa)U~Eh0cT_6OXqp4~Kg25nl4ebY{rn4ZD7SZ2l zsahWJH!pD9LofT%c-{2R0+xJBXu&KDq%I}7-@I7k0jnFoTD5kDiX~N~;;P-Z4(zQ?l&_gG|c-}K~Js1xLvtscQ`W9?_Fm^gfr zym*2FaH|1XOj#CCqp8zunA&6L>)9&mUHC4gm%Y8L(fBFBHj1vz{o|Re>+AEHEX1v$ z0L^eh8U$yoSYdKl)WfudAJEUk_>QmaJmo>DIS1DK7;1xu2b2cgwEF9J^s%SRVa*;) zBKq?jm7a}@6tpV@BhMEt=ywnV@A?YLuwBAZs0*b2y)u~rWUb2=^rFa;itQ>(-$ZC9 z7Cya@u*Rep!#i;?i8)v60O{(^CymcDZ9MU@&~e8pX|6J{GBrjCJf57ZBB3I@ITu6@ zqk_2*sA05WE@a3Cx;7UyolJ@I)C1Uzd3~O0aYrdw1Xu3x)jL}BgH@1z$lPcN%An8w z51VN9JT)ZrJO52Hhiv5i%n|GEz^APFR|D~@aMZt8c_TJx$Q>Bm8|Idxy~PS*a|6XL zP_;w1GIX{gdeegoU~cuNVGDqhkA7UB?h>P^#zOTLU)kAhAy)B$G-;uVMW2=}R9{9? zh+fO|QU=f-496DgP@-By4nz==-eA`ar^3#{N;#oK)u}Qlggsr%-8{#Lc9&ogA4um* zu(A(C2m)5&!Sui))uDxk0h`!k*~CLatc4FtAq)!1cL_m*=XUb-a_rG*+OcQ01;s}Bodf3t;;q5{x{Y6{ms{6-9lPKmzZ; z<(sNO#0a#&UBjPL^zP&mm~n%t)=~`V4*J7VbqAENZT-1_hP&ko(50v3-~5cDk5*u}Vg7F0B=>@*kuPn0oH7r(d#hGi$ zLE{y&2*DBf02{N(yD0(-uYjzY#dCO$H5njdJKIGFmnfq-t5jJ1eL8YXnERj@0Rz3b z;^sXq7%=a6%J8~^dszC@$yEWt!dSEDD;J))!H#OKRyFPhnmoNM0itzHy?6&o@)C(} z>|4?MTr8pWJ{MOSK%cHwsdw=*=*`z&s&e6=HxsZ?z$!hh-^WT|=*;a5+Ws{0TkmRG8# z3dGVqv=|Gh9(FUAR%}wA!lUZ_PHjj#qh*TnHn0|xGrZzz zZvfwM<#D#My$vi4^9ho>0%|EJI zr|K;h2F)J2$vjF9exSaCZwhdt?hr~ihRHUCesfF>h7dk*OuZC3QhBlBVr0kCZ;q?U z$)l`$V2prCcFK_jt1cN_$5xp_ux8u|mGsU8Jqx_KSef8}v=)vMBpldZ(bmW*Byi0@ zxmoEqcJi^hatxwn1BHMuv<*~>Y}|z4&xW^xv$d0g@=vJfc%=I?n_ zdP3DofISOV4P_t!XN~p?;Eo-NIH{stAP*B}I5ohfD$k=hTezrm3a&HUQBjVMwto5I z9YzqwD3&*;wFF`u06l~aX`X@r!K)1(;ht)`G}i7BH0GpgTL%_3s`+8st&Qs8*$5Xvis%f020uLY0*FynK%fP67a!U0S;|85pFM!WpJPk)y0rfbIRkV=C zorY8{q+O@gW3{y$>JADxKsWq8Htdy(YnO1{4=2XZV`o%)y}-(!7p8Z{t*e)Ky7Ov* zOyGb!8*t;(Ov*o_+PG(x; zF&y{z2rLb0EGbXXnP1d%`0|@eFe~#FsZ#Oq0oA(@|8di zj%oTU_!IATgxY|)uF~F1m@dUU;c-uZu00yHaU%+@sl^q8RQ0l|Emumq^RjCF9xC!$ zrU1c<4R9pv-jT4TC4b56Gd1q4AsToE8mTsnhCWJ-ip!+&d>hFe|( zE(E?neD`HA?J~M@8M?>jb>ozK1)} zPD&#wEX~Sk63C!lSCwgp>niLheREYkM9(PWe)zi^UQ-XyK4rvGk86Vnf9jiH#a?S=6vCixm+)CYtAEQ}UNHIznED9W!&BOR$8 z5{vRM`c@jvjmav^Mqgi5y{*PxqD#t%mbkL6nt_^A=^+FCo=RDUaTj6`M;peS@LBv| z7^!$5vli918!aB}#xvNB*}VY+s7#%V&GP1KLej93sYq_ANU|Rqlaoi(&5uY>@dABg zH)5g8%>_)fcFJzt70c!Y?q}v1jym|Ox6^Rtgx6s-fcpFghfxY#+BuDP(S?alSlowbWaLZUI@CNT+A+>WEu@B*c0~ZxxE=zVJBM}aXhKc5ailwbk z)=R-5JpdY!g5Y55&5e6_tT$FxdeGM{ZB*jTUv&sX(byVd9Wh69TQQLAl9OBB1rHvcbspW!TqmkvPlZ=eL^r`-~*do{$)gZ zaml5=oemYSX-I9tj5@J=@1cJ*0Nwh6b!aYq8V1%HPNTw%#bB4;yN!2nBV?)Dcq_FR z!IOE5~9RDNXmIw}quF;YC8bbSv< zXuU;Z1gtl9CF5$m-Qh-;6urEShn9=5SU-&5Rku2zb%`+A0OOJfBc88j{64~H$v5jo zR>9;5v&Ny^iu8{|Q57RK-CFqAwd&>j|A2@dZ~x8GhqPwR`b}RlOrvh2zTEwl(5d)t zKx7vxnE^ztH4)2LfK6E0f)@I`X*9?NKuc|7vkP@$!|PTLVZG+7lyqVxoAXdkbo&^h z2&|*t?%arrF~S8^XhyeQYBC?N7XO};~>LtC9N~;=;!U3CU)Q@e4eiT;CXu=Bm-PMe{EwzI?#QVNl?Fiht2tTjgx_}Wb zlxlF%&!G9$jM!u}z}kYPZCDWlf+@&&oT`GmW$8jS<4J^ZK3LtT3pWV-`mGW5@@;hp zP#7-Njpy)a9BCv}^|4AC&$|m)ys>snrWYfP^m^J*1HzU$rp#%IUCzAihK&GgFNSZ` zQIJ_vB8{{-J$eN<+i3_dq?2fcuNP;N-AC1;j6Yy5b&4{)cWD*(B1RlL{J4MA&(hp4 zi_D>g{MgM(rB17c5|ZkL5l#r6{H1TCGkKCUZKs~96S zSr^?76BA8X5H$O-1_hu_NSc4d7&U7{F=y`c?~7>9h!IQ~OO-E)!E#bSJ7V6YaKoP?nXh0L-NX76t zBMz>bx^YHZw!4@ub@5z1nf$#dzcv=Up{&F(%8i4tpGs5X3=iLQU*2Uu6}46is&O-V zJf*h`T5=v;iZdQSOtClKsDaHV4zXlaW-@MsHX0;NureT5AP~Te{F$XJQxxPYj5q33 z)6fF@ip(d&>1aHbn&DJ4!QgBCTP7Gi-LO0`MX>0yfM1tj{2VjM+EtMcLZ7wPcr-ndWYlm0OIG;$(+5dVdq&eY$wpi#QAO&C;EAqg+}|qei$kd2p{=yeAUl`&3OZEW#wv z5Fm`G3AtpY65t0xxND$UI3T%M7c9O&KU@$T)jhz|M|XOR`blWn47AMmq*e*kWwk_i zIW8Qi@C*cOTysdBl8qY54KOP_Mq_SJQxAW0BeeO(0SG)nd{i}Ax5H#>tjQ)lQ5Cx+ zeuavE?V)@WwX=-j(LEj`hKf8!xT*$7{+`YQ!0I4HOu*F>@39DSCK-C}A*z>R3=Sy8 zp|y-h;edR$mN8yzACzi%#o(gMRHK7v{FAk2sfM;gAzt|a&kpl2LOPNiI6q*wVq){F z@l=L9!zsy)wV`c(P0l*TUvLY3b{#AoM`(B*<3ltRQP+4$94>mduF+7`wOkc&RQS2y zZTg)Tp=bu)WSGF!vdsCkFwJ-tF`O~!#^ZSWJ{@9Y1dU9Gf^>-1rb8Uhqf_Zdd$EEt z>ltad6aL+LSm_o}uX;x7un|y4c**4(?>E*nA|qDw^vOxpZas4~ovmlw*#WzO5Qc$q zO}0X^N?7(_V~@A~F!R?~D|Su-&o#Zv3-N)38*&p&BfTYwJSDY9ktI+0AmO(#sAqkn zj$6;foFu+(Q;`Rw{JM4#0u1tkCOJUW%t|rAj1_xfVIGqiN_z7>To!jzqMD@;^Ua`| z*Q)S?9T(+IhoI>e4UDw^)7p1{MR`2`^S-ycN7Yln2Eu_26$Bd=G;+jlim6{yj3v!j zVl<}5fHl~$4t6y5j_s^blNfu8K}C&-y+zTO#Mtut%)ZBgiNEsvpT9m2``-4Qot>ST zotomk%o8wy=6DOjdfjSwlnn0L$;_c%xaS)5qfF~n! zx;nq${M?2PboIPEp-ki4KpWuWBbDiL+&YSbsJXV%#9D%k%@h|8Id42Y8;^}~E`1a) zVrm!77>*Gbrq+oO6vKruWmsblm`&rEr0fJyrb1CM?ik`VUxX~P>0!LKoCr_A8kkGT z38GHJqTG;=;aFE|fptSDhls+aum=Ko`e2Q>!#Om)wx}3URGQO~-D=O$%g?6s2^h_I z3aG6aySlYSo#3JpR(q^7{uEU)+oi7o=!%_1*$`P&G3&lz>WrZruPwsLVsJi%=*#+M z0k6m9T8t5&!PoTlDl9lL3QhjS$K3Tr>-~^w9aGb zz`$J#2le7&ZA9@wPK-I&4`c>mnqQQ}cBdR`^oqvT$+7@&nUT#0TF7JdMQ>2G)`_B~ zGfRL)##0i|cwzNJEw5<}gkF%}wqcGPG(J%b1!=9&Kx_hCJla51@`bl@7Nm&Gh9Wu~ zj^FXCP%CLNw~gZwR(v^Tx|17%A;&{|lN*UFgAdG-l0f^nQ~xCKB`E6MBvAnxz0f9N zBy{q#n~1qKsOVcKi@|odr^drcBPi=h@kAL+6zY6NE7M$Ad$##FcCcU6YA(?hy7|5? zu@{QYW+~ztZhFQ(DL#aJfO4G!hq5vm(~0RC>JDr!zVr1R&OTR#W4QasQ=+sl@?U;Y zj19iY!;bvepi+ zTb`}q&Dn>!2+Xrp?OON2PSDDrLH{n|Bjam#S{D(mz!!e=uIL=J4KoLjZsk%2jr~}K zQO$0UbH>n@-9$eaZ{O@D+89YU`Q*l?EpItHd^Ce@0K+r<^c;AcnS1VWflI(pdGo(x z;vnOr?jWXP+;h8&D>g{`8Sjgg2%hXMYG8Wb?=8+kU-kS4A{oENe;@`6fW)Boy|Fe% zxf}HnS53cBEZ{;7bJHEyPsEzIJNW9yqO}}tiew+EHBN-lcOQdN@1ctyi#xb>fBF*< z<)6#@9Oy6%BLY4ZO(V`TrNd1^D95??21uoj(v*8Dz4NK)TYfT=RX(Z34O~~LM3eFN zXa1y{pMnQ3MUKzFa^+IWXJSmkCW9{wm|7ErOOD;y)2+$3tx-4JbMvn_pXJQ{n=S~D zd&&4*yb!imfW6?u4cPs@i23dTz=G8QLD);ZKNl~*zE5m*nf+V^+u>80PimosWJoVG z08=b7ALu&}2&hw#!bcy+4L-xgVh0&aaO?y^>9>JY19Jr{PEJFB0_lat6lAriFGO^- zb?pUm9CKs(Fb185&}HKv95;pD{zACI3af&@6Z07N5>;6hjiYT}i0WN6JDLG5oe2>n z04}fdfxvLRCTxNDKXAeD>fsI3C&0zN22h5}@}lr|f*}aanpF{W_w>}4g5p>5B1zN! z)K`Fb>z_*@pBj#APGOMa1VDEVh`=c_%b9yJN-W|4CMH^DML6yvTKO*f&S!8SdJ6WH*dm0|iB z7jy-c*`0h~piA4iMUZzZnQdk6@nt|htbo-ym%?vemijk0FeiI!BRwoO?L{JQ*@(kl z#Wgaw2-TXVN$LF4?iguvjNqkhLnPH3AlkuebJ_qAT8_zizP=0MQ|t0!lm$bjnPok5~cg##jp3Ccc!*7XQoMqeg1xFd9Pkceu4nhy$o z+*G*MvBDlx$ahwBEN^8f*z_a^Iy=88C-{bW0XxI<2p|8my>#e)_L zODRJ^d2iE~L&dD~OE@c5{ z1;EHa(0#YL((x0r64od{Cmu8`5C zJdnq^ z-eaMQn?$q6in?+VYZb{kOI4uTV?`KL1bC@ulG<)!*Yw2yI8Kx-vquEPTh<4TBBPTW zx;joQ#Fng&mQIYvAxa+kPQa4Sr57haR6R}^6GUs{1m#Y^ffC*{n+QJPB&@Q<;b{G! z7L>2bu?y>>y3G;g&q28;&vxn9r927GKr@#SaFu7z}9V96pO}z z6T|sW`h13XrrKXtimtQJrGpivUkvv2^d8-qA=*XVFP52We^4wZ|9(iX%@m)f4z!-0 z*01<_Di~x%>1TR@5`l~t4z7V8`D26sBB%_uvIgm>e`e)Y?s6Ia@H|tEcY3@ay@eii z)g)8LX%`j0aW6e%yJPjZc#*%YC@<7eahlbI;y@W71N?k6w&nvZ$KNa$3WX(~nhHKY zHZ8XppU{e2S&sh55{^{F`nXhg=BSv0qdOb{UvUmD;NvRYo#iwG6iWBhi~Fb(3!m}- zYe??a*(z2-MKsQQvb8`Ee8-i9cvciU^*|giMJv;}R1r{{i-3=2Ko!R0<#3dX^Qos> zEv!bbV=T-hKG^oudXvlW>*w4F?G6hbJh&7?ey9Z?JuLo>vJ(u$<}s1uwTjzex~pi7 zkBM!#RT?^5bc1i7uV#yi!Mw^XdT@r1i;$-^x#o&8!7=7jD0oR<=>_|Z@6&X2ws;#i z+?sv^weDH!{Ee94#M9zRKM*oUR4#Xc8Q0sIVaErq{S~IRpCckd z9~k;sc58C@aaR;POM~W!tia3MJ|7yRD-=Ih)T)D*fjNfB+$H@|G45MiGp8qIq@F8J zs_vPfsCgoaR?HPL@TOH=jIM4Qs;g08#W=0%v?n8r3|Q00lj~`W%Fh$E>OI;#3PWV%?wA_}}>f=(+F%IiKA+?H+Gqu2*<@uFKP6;ZzJ^IA~~MqF##&T_PIQ`kE;b4z}>m_Ow1MgOqOeMb($A-dn5GTKJc!_YzUJf+vNk zR{(ClGATl}M!;Wq2l%W}kpiQYAFY@tC0$%1%2m7h$OfSawP)ukPPG;swqNRz40Dp89XW{X!NV7S!F;Y!5_#R5#tK?*2+t2bV*upemX{D_7xgb0ht=3Yxf3+MOq>p=i(5;B)6u`f5=* z5KgW1EWz5P3?=8uicnQ0!Y7*PDodw0!vT+>zRpl$4Op{s6t@QBJwUIo5s{VtcgI`v zX~r6y_>`w_Pss={MxF8`m#(l@N21LLbd4k9+2kJrBy@@FR*DVefRn&D$2=MEmKP*8 zY-cvWb}#*~R=2(&L0Ku{0sRW6VG@nr#FtFwoICE zOwVX=u6UY82;D=EV~a8J-Ahjhn*m)z_DNWnoTi;8#S#EG{FJCbV}1c1 zYP@P^MMZ&0f8vyg3T8e8s17YW)<8M98pK*D2$N-~-zn@pYfp)lw#%{wb*U($Xk?z~ zip}#zo|w+$R!HcMA5EHlMRbSf$)KyEEP^Um#p@N1+qeR}*vF;geEg!&2>>h_Qv;t^ zGp<6HdmIi4p=3GXZhlP|#uHF(m1dy|`rJhGG&V-3Of>Hxbo~s;w=~ZmY{wHZT{hQX z*o!CP(wL3sFBTCMY0$5lY1#CvXod44ab3KFpvQG6v^LS|>tZN=CEWmQex`0WL?8S* zenU(|@Iiq{1+!C7Aa)xOwDBgeAeYYG6ity9bqiz$%6)h3+X7Chj?ul}MQb|v2jK80UHSuS|2RGKr5FOQ1w&n9Wlq9cLyK?g8JVDXLXETyel%D z1C-u7FvsU)K%@^8S%zLZ2A@RnX7S!V(Cuq?MG#H62h+k0WV;V;>7hRDVkHZ*)V&X@ znjw^SU$l)Hsse+U-9$odc2=yvzE4FosVu(d!7ar^c%tp{4n{2PCE8{z6ft`t-q_Z}e>_3uiwxAmwZczMoQJz`~Srtc} zy@c!p%DPX;Zly=70PX6FN5deSA!!Sgm*N^b0PG>9hahxF#eQn->=-Fna>rQjw2fom zWdEGD@knO9z2(7JvuAo%eRZ^^hymJ{Y8q?|76Zsw+9?swBM);90P;WDE9sc%ZE%tb zs6o#zhY`$ia@-S@an&t=US5ygHJvt}F&czxl@X4r9ckQ)Yxv0E52!&L11U<$aZgQA zQG)d-HkW^6p9BOrOkoV3%JJAxY_5QR$MZOGm|}EK1h?$tS}83#KZQ%8=WFc>P$~detEM#$+1YgkqENba1rx@Xs?<+fk zrZ)4F^+1yQ`N@`{do{+vH<=zX>cj4_mk#(ry4gp6`pGIdH>>C`Tl4Xmzhqyi+x%r& z6MkBA1LX;bs%wJe=+?Qmz+jeD;j|8)aMW(P;`yr-fBEtkJfTCE#a~*e_2(~mBsX0_ z{Dt*wLc^2m9#KO6WT4hJ9C9auYNcdK>Afln^xSdPk2A50I44akE!$yb;XThtbkhiy zt*L)0MCH@2QZgD;@LDOkxWefmJUDM-hAhMKMvU@W&vT643`XwRv^*Ffy-ufs0iN0P zSqRGBplKoUBlzem9V(kLQ{{lkNFh_zF%;|TCJhcnv759iR8~juOQ>v)Ai9iv3Y4#R z8QC8vAHSB7nx*n*ojt7CfD#^-iqE@mQl+x8HVEWPW#!K(TcezujNpfI@<9DL`fMGl zJ@ghU-Fj`n^l(-j^kc3l9Cv;3-~cmPfX$z@v%E}%IrZP=CEwxvtb$yGpmLa8iEaOA znEasKDA0j_6W`IiY{Cl{@grPKh_#0QUFHUT6)wx7-bvx|19=^5`5cAkiEye`Q6`|( z4i)7{|C>_Z4Tql-x|t`+kchzQT|t8*fKl1BC;}5Vg?2~Co(LL5%8KawOOetUhJ}Jh zUo8sHbST8L8UwHiWJJohk?)U4Am<*6aLNT`vCM63@GD$F76QXj9wYECPPqg%508>P zkoAu!SrZ5x9W4j*ZNX?+2YommE#E_y=9Od{M2@Z`TPCA6Hf?YjQNCbb*iXwn9~f0) zBA{}Dml*J)aXx{VPy|7iuy3=PWIS&5PSuuuV0hQQ zj%&bqhxmf%zypRnF@D#Xh1nr@6oKa5>t7uJwoe`98hVVI!;QJod z#5AujJ6qtd=nrNUwSbwKLYN1}1WZ9=q_#~25^QI{ce7v~N-G*dYuK!Tv_AsS?esze zJ)K`QkX8JrSo{n4NGhl)E6|PxvV>aa1#j3RgEATda~@EohO*Z`F-N!NL_ZESEJV|A z3TdRjfveoZj~k(fJLys*`8;|EG<__fchY-}(Y<}{3615O?DOJI61Xr}HaC&Iz+B`u z!OnJqqMIVfr5;V?TBJokA@_igUw=Z@2ZgTOOnwi!^ine{z&r{_MjsASon+Y?)_k** zWlb~B7$3DOg!*-sA@pam42C=%-~tjt=y%DcsA05AwnSu(OGbz8*OG04;qtzAgO|4` zFa?B7=dVH2Qe+b}l$!!{K1L5y(6fou>PhU_N9oHaMzqt0z)IOLN4ZDcv5O=^R#9HTvL z^lp~bRt`gCjdpTX^fDFTSPa?*G{e^Q6icd!W^4QcTL}Dye$f4QJ6XZNozMzT%i7+T z0dCNXPs^I+7iks1G`-PHfRM=cWz0}6b!R>;N0`9{8lE9hklR>OAki2lwwLqZT*{Ji&ax|TMNtQvu-(EtA ze2RWq#=+Nc`jZtH@!~4-u=|16E@>K8rn&(f$uv3d-LdGCx9uJ zf;ywcJnGU}Ho~B$b_NyLPe(e-!Re@?pUO`T+UHO_PS4L5;&Gbwk;MjG_>?7-XlCz4E*V8Y3AQ|LQ^}eVipPuO}<2|_+ z6wfuLFQA@F+xi0B(8utvJPQ2~b8v%FKGbOY&WG4|ZqV2dfm_$<;D^Y9cgp(7mw*Z# z`pKzPk7(L<5L+}aNLZZVRDnetHb=z^MW!nYA4}ckKawt9aj$(WpMkKm=wrPM9)7Hw zO!!1bMI6!O(KiUr8rbwnrtqUeD6bDqA(4C{Ylm1$yGOJdDX96vCm8Ex z7%j^r+%RhODQLkJ`kaHqwDeOs9P5*H;xy(n83J6L^O+_OCq9#vOI`+N*PeL{KBGsC zB|ew$ls#ye@Q==NSDNK#i>W@Y4bA*qCYEG1vz{|8i5;eMpUV;G!v|jgsq=`w!0N^Y zqc4EzIV8Wt&Z9>jN!`8#RP$-%m)Kg5(4jAZ3AuFpOZmK+Z;U_GIfP#CkFDq!ebgU| z{|asHFIOSx^Oc;%n_Ory&A2mFZ*r|tv1eVTFH=EIFVnnK5W>rpmkP>xgxaQoSX`nN zX?l~}m!>zl3u$_j3mX6t^)g)_AiqG+eIP`vOH^?XYB}$2HAtQ`;H;>CrI5@ACE>pwKNGBddV#OHG%d>za=8X@TRvNS|T`!x zTy{4?=-F-zmu~>mpBaIT;s$*(LUu5|p@SnZlRuOHNbFBPQymWW(W@h|duGz*ktml* zB}QR;n?_YeffD9ZyHNo4PthJkJDAV$H{#lGegFMoSde-@jCLa@$yGdm8}!7HJzjf6aGQ+q1yp` zZ&8zpsObpxoCsLt(8P&g*s>{UlB{U1H)zz0rjtIO1S)Zc=1-CdVW;)Vt;e&@hd&LY zWdmDlUDG~7FJh%cQfTOV-WSpk`r1FwzE!E8~P8iv&ppn9BQ|0kDzP(+OFvWs~ywr z+FVSVB7rbLmFXCuFW(!`*gZW<)@yIo1}JccbZy$$2cv){%#k5=t<~B72a+-88m4PE z9m93ig$0@N={o4pELk=li7fe`oMVI?l6`mVDPY%ddcmrH-QnU{sO)SRQ)Q%8qhk~o zX66pvWt!y}ZPkW8!HvROvt_fm49{qx8XoHzEk4Itqve5*_Y^^F1|6I&8zrLOP!gJs z37-B>^t3j~+tp%2)Lpit6SQrg;iOLA$dXaysU1~j7S%r48lHM2Z|(mvZ{d_pDVnl0 zy77(NVGJhs9MFkzl4{MBW$`|xtYZ$h^N%=lm=4Q2YypftJV`(i2b7?L=fYB>u*jCV zV3?+nISMi(`9TM;5d%gwC6mh*)9z6NVobQ z;y8lsknfH`KLNyVZD7h#SDDBE#!spi{af{u2Ud6m_Cpu@ZdO2PQBe678s9nhXsn zELRQ{Ii^Dwmq9VpWke}&JlE$$eN<|?EYmat7UPA3)5qq#=!e_6Z7340yv6f8soU25 z#Q+vfmo=*tPj2`a_;B~fQD?k$7SU8ETWDcA^n_Y4tPbmwNAmDu_6$4Uic( z=c!SWv86CF##1o7>c8M#2twq@225)X)8nd+md6zvwwKmf!`976>O2)K%$o6UqGn%EyZy_-B0JU5wqkR9s6650oTDlN;^ap*t zP)1bqM1pfbn=G&k{gRt&*;+6M(ovX9y-_B#u!drpC!18#CR)*(i^0EXi~eNV{ik%$ zpNqi^U!(U|%8F&ua^|mF_0#f28&Xrot=&2B;_w@L<6%mhwNh3wNzsm#GP>Nbkt>dE zymw(yh&GN-8Gh@BY2O?@d|DB^i$bQw^!g_ifjsQGI76x5evSIb=pURwiZZ>D?J8tG@^=VG_a!a4C%>*Vug zy)Y;m0Q$X{)~u7wUr*Df7s*)O11vw{>`KXp_pf@6fjTV~Y1Uhu%rSCGg2Q@E+}yc}76quwjz=+K+K zfVxUFvvA7`F!0B^0Dn|ETh1)^n=h{e>4N(v`~_#q=g9)T-*#n#d%8h?Wy^ll@Q$r* zDh7o4W9#AprezQYyAqBH=kXw9OUpr?B&f~V!fo(Bb7C}}oES}^U%JOW{0cvI^9@r$ zcmY1(x&<}d03PrePQkO3`EYDc&d2fy&jl$>@fzgZ!AS zU=%Wn5WRt|8-5mHZUb9qY*s9==^ME0Ub6jG8BMbmf$PephudV#yN_!Hs&?QxuJ8cQ z9gDDU8m=sUCMn>yAD*g&1h&HJEDy)q-Rzy`=ZsuC^jJn}%8oVPo!D@FRpuUk5ge#* zxExe_8(8nijj~j#?(>wB%hQgp$(;B?16!JbPG4NHZ+6!Cfm`b}uziaBxXy-=>5IDX zPRNc8MvlUOalelTd}`T)u|K3e82clxx9HOAk51V?D*x8zD~R|Mv#!e+u1b6j3mE8= z=z~sxU$gl(@S)`!feyKpw^7Ev@z_qIIEIfWM0ohwp0%!LTSSYLqPB|lqj0tJ?e@Do zWc@+!Zi0YvkH&1072Z9{Wb*98t=>`SzJix%>;p|C_gUw-_U|0#qd9)(9Jm(Aknq%D zE6PER%@C1tsqJQ2HR5q@5{pJhV>Zh&VRs61%?ZF`nv)yAM{MFDQ2-jHT>Q?s5+17$0I{xLh%T(OrQk%nHp_SwU+Z+7W4tO%s;)m+Z8J@0;u{ybbo~IG zg6-2W0m@yL2Q$5;9#X08GT4tTj^Lo#_-g!s#^tERc5pN^yiKk0e%-e0cTvM?Z(NJQ z4is5A5AjxCRA8t#ZjCPLC^C<3;k7c>2U3>#F4f#EX9nsE4iLSu!JdVmY&k9!vYEgG z_E_4Gz$V!7qnsADwV);f%UVB>9O#kHkpoYU>g?d=MPTUTaV zubX6h66Am!Uc6?uE%BDq<|XLWOl}5HDQc6AOpxu-vfADR*(Y&!n2_o06Zr>>$ck$9 zf23?VRyiOG+o3$tNBU~740~61l@FM_onoclznW&z|B=!RR0yv{#hByr)&V~0(d?7< z$xYBoZQdu#Rk$w#tFV#|_IaKwPdpGz*j>7Tbg*Z>`(>TFH$@=d+PAXli!PpQ1tKug zo1iaPdCT|OkNQuGz>3~K~9*xPD-VCtFCdYz5Ts0Q3sOX*IIdMK>{_o@`-OHqZSNo?K5t zc(L-QDexfF+jptiK@0<60Dbdhi+UtmAEYDOa4Yv_{&kv;9Fz?sw;6!*ci=^NiD0qw zRj}{z6K1ja`hnsOA@6o-c}OPtEkQgsRL6Q6en^fglWzw*hFOg%It8{l&QRP>TBCXF zCpoajdT>Kr;*92s!dZ;ar;Kqvb||8l1%c)mI!C<2Iry;bRN^cKU|J4oO2Tn&a$VJ> z(C!{+?y91Wfl5QP_mU0h;{VeO1JFe9wA+Y8zdKqtUX8n}bIR z(tegtM(wdIRQOg4YvJY)wjTJ3!J>4n!#8fvockFv^q%o|Dl||(fD1%S^BkP^?V+VP zoInS2NljyG#IDEN4txrO?eUfIKL>~{)4<}`1rFHS%t3(Zdk;Co! z?oDzJdg2$^iX5k4tMkJc*plN&;{ZK#N+zkx5U;>!m&%i2wCEH}2L5@WCom70%kw3o z!V5hpIyz6jsh{$&uISt~4P5Fv19|^Oe?wBlX=u6e?CxotuVA9=v?2$metT#tA`pCQ z1^HGW@^xf2D`;y4z4GOA#vb>Ud>jLz#Jw}}D}dwkvp9m>L-}WQZN@nrL|K8$3c6Uq z04tbf1>3A3|C}6;;vb#Y4Q8I##n+vOUSJR1w<04i$Y;?|?+bvmR%6t{VfQZ=WR|hk z{nbUb4Y&xqars2ppIBqA0@mC?eAIdrz0KlUke#k>mo38nhn-t*u5bQWw7Eis>)BlK z<=HFo<=I^EWo@qb@NBO5@@%g7Dk|XFToGq&uDr*evzP|NS(UKG!Y?3xDG|>FmA8TU zIPc{uim?t96sO8j(hljDYMH`j7@#DRz&FI0c)^E*4;+>;H8>}n8F9>~R>GGabKQPO z7^h1NHmsC%$j3S&jcXh1Wd$A@0a>Pr$Frc}hf6DM?aX(vE`a-??{~<$e(RZP!3b>w z{k;P^ne%o^-)|&Etdv?M3+9M#i|ETnNvy8d=FuA{f4@-+hc1o-1{+H4-ih;55BULL zHd~z2F$&lvV-wtZOjsY7x8?6Us>*MSfs#sPW7dIS3B6e!7D7dXZdLajtWfdR>Jc?iww>Dl4d8+2Zm#9k>d-zDEJqWCwY} z9x%Z{-LA>1soKl8z{xj`1mMI8X3okr((E1uUt#gaI2)`c0((Z;U8(%!BNDY$l`q^i zVwVm;N2B1rnG3@GJL{D3D3mL(M-;r|fGS1>n8{FTmVgiUKzKd&a|X5xb3F8ei);Ms z;S36k_H+6Aw1T@6pVnb?=b8+!?a$W+wAv&blC6@F?k!EX@ge-hfTgJp>- z=d`1z7`{Kl5F=*jv5qIOr}iy`rVxcLAquxf{DU#;d5G# zC>WFV$cO-9RFGOAtCUBVs@v9?3{nQTGt>ieU)o#%Qvg4@1ZyP(emCWFsrE3Z$){k6 z=3sURmEekT7Dc6*xFe;<1-{MSaTKm`V$7ZFjz{pNLnvHIxGHOanjRJc2l~iz-vHiZuDQFC%G?4wV5erc6}TZpl$4eO(hU+e!}ygQwBI$(vw4({9VKa<4&W z4gnZf;%v~Fv3d1LFTiy8DM5Q%qg_D%NquGO9AQxg(Q# z6`NSaWA5Pe^eSz-BRg@FKvdLUvPSF}8?2j|AmR^rU=Fz%s90G&kE<3w0nx0zUkCL% zUH=Qa=GebvrIP84N4OdQUszzKM$-4F3q41MR|_u`zI#`;@#X_5L9HWc%UwAS`QEuF zle}qG9qF{<9&7;$==eRD`xISDY~{^o)sar~?#r`f^sP`FawQ;$&c#*yjFpe zH&m+qvgUJ>>06=dP^_s^(3jq(`nd8)?n}%geJP2da9=X4zARL9P^v~~trS&IDg?di zW>az0QK^dN7CZIcZZyUK7i~A%VnaGK)?mBm@E;AQ-=;ZWQ70=HD@TnpqW#(QJcw;% zFH@f%ji<0zeEXwOnQqus1$_JaD!!yO)>r*#1=HzWUl`Tho&_#A9Qcfs!Ss#4da^Ki zaDb|AeGjJJ165gS6Np<>7pZm$<)q=ozV{US4g_T_%=2`y@6pA+4;1@$pfW3evK2(p z_!26zu!_UpWG7w_D9q}lmx_H)D)xP}*mpTcQT|toeNQR&eWKWRc&VcN9gBU>DE6IK z?Auvd=XaG>o~}D-wiTrzbk_SFMOA`}hV*uDQ8V+3eP1m09TQTN=RNCtc!-JsVWbC* z!E|pAQB5rB5=*J&R1Z2(Rz*`_d6mFKg&i#23{}iWfc}hPW0tb&xxy5)tZG)6GUt($ zYUK*cShd3B76qepz2R29IO_(?6s}?;__n!cojbPr1_a>#I5?LO*WS&*!%DO*T!qq4VX8dkR#c^fis#-; z&BIg`bDo=?3j?EBB}|p3iebu^npT9zE_WFIYz)VrKKwH%qA+zjC-`yPfA~)T|9p@C z+~CZS{3nP1{Kly_E8x#u{+h*clK*_oe+F@hqnvt`zbbK-UYxK6-85QL=i87BK#d~Q z`*rUDG)~q#Z8nNOE3^+9_zwe~_UyAT3q6eZ=qW6FMMgiCBLTfY6T%x{2v9ERhG&S)RXW2 zp`7OE6Fiq0!(nBp8$tr#cEj&%t3W+{xzSqy_YnE|V|jLpR#c=&+PO=!VpVyZ9dC?P zRpMBFz%FYw0uG2}9veiSd)`s~L*$7pl6HXDF!J_DJdEZ=@(zCVEEIV-rAXkxk59ca z4<{9uc<^(uSL%T*0|N!{BGAHe7;A+Q#niRh%Y-FHdiG*B?TS+_+z<+=r7A%Muyuz_ z{HJJi&sU2^$aJWd3dg;hM}?q9@v2^lwH9n41lyj`O2LBylt>XQ-7|Od}&U9uA%q@m4GHYC#W&-RZ)TqnU|{?X@o_s%MNl)Ubi75sniAL%*SO89Gq|y+CHCA81l8zdy zilJ=WR^65`pO5SC?rKy#h{I*t)mTLYz&NgUdp@~D#I43E$rwPjlCWbBpf*V=47B_0 zBsCrOg0?2;|3T{7M7@e9oHjR6EzogWQ_Sfxs@4?0CQ`4asy14j*%WhlfHpN%RoM{X zTvOEwk2A(Tq3WSvmnT4}kI~R4)bl8j`vgcrE|qDf4ufI2(o9V;(-eK4q9SNcvI<7V zb;+tdGWxkxQ;eyVOD#ag0+&iRGjvA21h^yxFr7$$rKpe4r`}J3Xywt=Cqcr_(YH^k zByFZ0V|EKF&7=Pyiv0!S@+*dXm4chASad77xf+MuhnuUHAof;of&S#tgBI9F@+h_? zx|~bTwZshP(#V#Wt2{cMQ{qi)3?Om$+41#;q`x(s0J^GG=KPmKCfb>u5`YigFPub66MssNYvq;OMsPk!>AZ<`d%5Sg2=*RZJ*+1x5dw}InD)F4Iv&(bf0Q2b5a~Ny^r&XfF z=K=kEdh>Zq+3$o5waD>;DoJ~vSD}bF^E^;EkKT9z&0nN1UQn*ki=LKTian{|6(u-o zUQ35wP;Z7?CfZw#Ah5h~KHGHYTBi+zZd3agF(-Mnim()Hqf9+*# z=aDZfJH}Y;W%TF*z4)>sD}`@RIR1mk{qCm!Q3XTBt_zpWpPypGn3jCh# zpvA9)llzXYy^iI#mh2sYz#FJWNA)(GduMc1)qLSu(;v^PoT4oq0mEPDN=GcsHI)7a zxV4S6@C|IHYZSmyvJ-Y;H>Gq^T@lRfgt=VjzSRk+0~?e2UDSM({iTcQ0tW}px~k_8 zjP0ss8>`**-c)$kbR*4wOPzqCXwci3>2@cx0oW|QxRCIPrRqb!|gmBeh-~Ur!Tsz5m-g` z9vJv-YTZMbmiK1tlvvM$;4+FG zj`AMmiJ>_?RZNg}CaJYRY%iOO3Ncp?d#c7EKN(ZKMN#xQrc-s+wilFo16jAoA)ELh=>;TY!rq_3K1z>X)PpDI_LJ=h`% z78(2~qgL@Cz*8CYY(G`O@^Q>Ajaf;gJEEc5w`qioYit;@Nx%FKcjZ(EUaS;e92j!cYspBo<&5 z@Q0}vVv1$WglY#$8$6z;a~g#?@s`X#a&FaDp?DvW^`TsVr>UV+&@L054aKl#eHE`)bxxGp?_rfsXW=XI;M>Cuc?m@;_rc5J1QAFH;; zLif>+)iDt=9421iv)JwnE{ZTZU>$w`h1!i(gzL%4*c=ahsglf@esukgEt+ce2ZNAB z@An6jGMDD|$FBX&q_41G=TP=n>IoeE6?~=MgX^_dQ&lQ<`QxdeV)JovLuKM6$+Kyy zsmkIPG3HR!0V)cmS`SeDN-We*fwLM44AFGjJwSB>M_zZJ+RQ%R27+K6rjS9Zj-2QR zmW%R7+k)whL8@EBS^OI-6d+}Lq1nZLLKt(*@(TcMVm%l9MOk_-oWq)qL-cSEfH0og z3|6gu@uE4S@?x4i7z3V1#|J~IT|##UgS5<{@^UWds&Y76sy0;ZgrR=HP;f@` zY3kSNcgJ*op8=QBp`(Bv*KwG#(pCM)Lr~8Fn2Ye1jnfyJXiP3vA3zPC{!F-Tr>g;h zS!{I;aRj42Oaq3gT0w__mwdwmlZGyPy0}@RFuRQ1<@$grLQL0ud(iCeA zfu2w#a<`Dz?BUSy;A0rCfR4*JTLFHeBCJ;Z6OuAk60h0ioC<|6sEjXgPXDxs3;U8^ z!Ko~3NtDz-7GN3kTm?E(vpI1cegiHjs()@pO@X{V94k5XAQKk!t^^l`_8Q$mHcnop z+eKkZ*|eIIOQ4aWWGs91010?z7uE2ySGrcK^)-F~Nt_QJM&g$aY;YEmNiUC9H6qq> zO@Zjo8ZMaz{i)sIW+(=MX04$aqp<<6^V9xqfOc#kiTQOIAL9k3B|uE|G7zZY7*$0r z(eD<~n`6MvET9o%RMcAw@caq1e2L}?ehn;$kps%vC4e)$f8*>Cv(EElmE;FCuwXfz z2?OVd_Hl3(Okg3+>2C{y26_zIfU-E@$pBNao|7@j^B_5mliyE0S{Ab&K^6CL9r@j#DuuzGd(OI{*=+ zQKN~f64ai&PID-4oT}}=#aoan!08QKBP5LnkL0F)2-;bzMX?hos~%o2))#g(_JV~J zw22SwUifPvrU$>QiPxx$N0|Q{uYQH9g+W=uG;J7|)iYfP?hYSLu(|_$L;rPO+l6`i z?-?7;rFbLCfrgh1oFl?Px++tA^o6VW;zTUp94a$Oz2dtDM^Ji+e=H>Jqs4B7eN!VfF_Zu7ci447uZB5S~&#N&7s&# zu*~bIL#Ar&zm<`NA-qpM zhv-OMfrq}EfL61~s;0Tlk7i9!!IU}~k|EK?$tt==QFDHLmL?sW`57Th6`Ekv@1okQ zCSs*x(O_9$2yD(?m)mup+_)QYJf8by-icsDXM;j4Su+l&Kr&9Y~YNCdyZWe zJ69e`gI|Ao{JTkVc8pr>c7X-&?tPnla95Hb&=ysVc6lP5`gOcnl1I z?hoDxkyvk8gqUVs01o2EV_UuG*S8HU?lBN}H?#{C#+_aV?wa)^zn=jlzl2xM~9z3yW_qTQsIZ z2-A=mD)t|PstyqRw?pFnrut0Py?h~*Vbxm<%DjA+%!FW0bbF?1#Q4o9q@iNXDK*Pd zHF@!R;;p%yn5C+h#gg%6E(9UBmy@NMs0qBb=1|#L>f3;68pI%D;1y2K!oHkEf6Y>n zp_&+J&e_^nfjNLz+-zt#Cc0mnt$d9}b3Myg<1jx;j*Wp&POud4Sa&%8aROGpj*WF3wUJ97QoPm4o955|a7U+($MG({G1&q(U zXW+fHe$o6ms8jTSNz#M4s(QczzW@lH%(`Y#?RhF$p;8$A(kJsED{ZF*^Hi(Q?Y#G~ zv}YAZMO<9Whc#@x$rh0;Ph1 z&z6H*&g5ZvE-z4-;;A*r&g%&MT>ENi|U53?li2eg#5LI{j@hL5IfKIhEC3VP` zTo`M>iq`ngzueOosT`9gEmQsRGE~TNFpCh4`>%kYyn{lsRntZCeA07x(JdLL44RAFNf!jgjtlZgs&lLg@5*Rm1)I z26e%39Kqb_ixKP_%EvLv{ro1CVZaB<+0AOO9s2BU+tKh8_mu4_4bc>~0~$cQTfPGv z_g?pa9qMBPKkw{RyYTb7T`ErC0$;&CNV;R)U+!1gjcKBv9nMw#?A_cQ{p~aSCWYD+ ztqHbQqwhlP(D;PfV<|S&9!9, ) -> WithEvents> { - let expected_block_height = state_block + if let Err(error) = + Self::validate_header(&block, topology, genesis_account, state_block) + { + return WithEvents::new(Err((block, error.into()))); + } + + if let Err(error) = + Self::validate_transactions(&block, expected_chain_id, genesis_account, state_block) + { + return WithEvents::new(Err((block, error.into()))); + } + + WithEvents::new(Ok(ValidBlock(block))) + } + + /// Same as `validate` but: + /// * Block header will be validated with read-only state + /// * If block header is valid, `voting_block` will be released, + /// and transactions will be validated with write state + pub fn validate_keep_voting_block<'state>( + block: SignedBlock, + topology: &Topology, + expected_chain_id: &ChainId, + genesis_account: &AccountId, + state: &'state State, + voting_block: &mut Option, + ) -> WithEvents), (SignedBlock, BlockValidationError)>> + { + if let Err(error) = + Self::validate_header(&block, topology, genesis_account, &state.view()) + { + return WithEvents::new(Err((block, error))); + } + + // Release block writer before creating new one + let _ = voting_block.take(); + let mut state_block = state.block(); + + if let Err(error) = Self::validate_transactions( + &block, + expected_chain_id, + genesis_account, + &mut state_block, + ) { + return WithEvents::new(Err((block, error.into()))); + } + + WithEvents::new(Ok((ValidBlock(block), state_block))) + } + + fn validate_header( + block: &SignedBlock, + topology: &Topology, + genesis_account: &AccountId, + state: &impl StateReadOnly, + ) -> Result<(), BlockValidationError> { + let expected_block_height = state .height() .checked_add(1) .expect("INTERNAL BUG: Block height exceeds usize::MAX"); @@ -432,38 +493,32 @@ mod valid { .expect("INTERNAL BUG: Block height exceeds usize::MAX"); if expected_block_height != actual_height { - return WithEvents::new(Err(( - block, - BlockValidationError::PrevBlockHeightMismatch { - expected: expected_block_height, - actual: actual_height, - }, - ))); + return Err(BlockValidationError::PrevBlockHeightMismatch { + expected: expected_block_height, + actual: actual_height, + }); } - let expected_prev_block_hash = state_block.latest_block_hash(); + let expected_prev_block_hash = state.latest_block_hash(); let actual_prev_block_hash = block.header().prev_block_hash; if expected_prev_block_hash != actual_prev_block_hash { - return WithEvents::new(Err(( - block, - BlockValidationError::PrevBlockHashMismatch { - expected: expected_prev_block_hash, - actual: actual_prev_block_hash, - }, - ))); + return Err(BlockValidationError::PrevBlockHashMismatch { + expected: expected_prev_block_hash, + actual: actual_prev_block_hash, + }); } if block.header().is_genesis() { - if let Err(e) = check_genesis_block(&block, genesis_account) { - return WithEvents::new(Err((block, e.into()))); + if let Err(e) = check_genesis_block(block, genesis_account) { + return Err(e.into()); } } else { - if let Err(err) = Self::verify_leader_signature(&block, topology) - .and_then(|()| Self::verify_validator_signatures(&block, topology)) - .and_then(|()| Self::verify_no_undefined_signatures(&block, topology)) + if let Err(err) = Self::verify_leader_signature(block, topology) + .and_then(|()| Self::verify_validator_signatures(block, topology)) + .and_then(|()| Self::verify_no_undefined_signatures(block, topology)) { - return WithEvents::new(Err((block, err.into()))); + return Err(err.into()); } let actual_commit_topology = block.commit_topology().cloned().collect(); @@ -472,33 +527,21 @@ mod valid { // NOTE: checked AFTER height and hash because // both of them can lead to a topology mismatch if actual_commit_topology != expected_commit_topology { - return WithEvents::new(Err(( - block, - BlockValidationError::TopologyMismatch { - expected: expected_commit_topology.to_owned(), - actual: actual_commit_topology, - }, - ))); + return Err(BlockValidationError::TopologyMismatch { + expected: expected_commit_topology.to_owned(), + actual: actual_commit_topology, + }); } } if block .transactions() - .any(|tx| state_block.has_transaction(tx.as_ref().hash())) + .any(|tx| state.has_transaction(tx.as_ref().hash())) { - return WithEvents::new(Err(( - block, - BlockValidationError::HasCommittedTransactions, - ))); + return Err(BlockValidationError::HasCommittedTransactions); } - if let Err(error) = - Self::validate_transactions(&block, expected_chain_id, genesis_account, state_block) - { - return WithEvents::new(Err((block, error.into()))); - } - - WithEvents::new(Ok(ValidBlock(block))) + Ok(()) } fn validate_transactions( @@ -851,6 +894,7 @@ mod commit { mod event { use super::*; + use crate::state::StateBlock; pub trait EventProducer { fn produce_events(&self) -> impl Iterator; @@ -874,6 +918,19 @@ mod event { } } } + impl<'state, B: EventProducer, U> + WithEvents), (U, BlockValidationError)>> + { + pub fn unpack( + self, + f: F, + ) -> Result<(B, StateBlock<'state>), (U, BlockValidationError)> { + match self.0 { + Ok((ok, state)) => Ok((WithEvents(ok).unpack(f), state)), + Err(err) => Err(WithEvents(err).unpack(f)), + } + } + } impl WithEvents, SignatureVerificationError>> { pub fn unpack( self, diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index af21b124381..5cf36ce794f 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -381,10 +381,9 @@ impl Sumeragi { topology: &Topology, genesis_account: &AccountId, BlockCreated { block }: BlockCreated, + existing_voting_block: &mut Option, ) -> Option> { - let mut state_block = state.block(); - - if state_block.height() == 1 && block.header().height.get() == 1 { + if state.view().height() == 1 && block.header().height.get() == 1 { // Consider our peer has genesis, // and some other peer has genesis and broadcast it to our peer, // then we can ignore such genesis block because we already has genesis. @@ -393,15 +392,16 @@ impl Sumeragi { return None; } - ValidBlock::validate( + ValidBlock::validate_keep_voting_block( block, topology, &self.chain_id, genesis_account, - &mut state_block, + state, + existing_voting_block, ) .unpack(|e| self.send_event(e)) - .map(|block| VotingBlock::new(block, state_block)) + .map(|(block, state_block)| VotingBlock::new(block, state_block)) .map_err(|(block, error)| { warn!( peer_id=%self.peer_id, @@ -445,11 +445,10 @@ impl Sumeragi { "Block sync update received" ); - // Release block writer before creating new one - // FIX: Restore `voting_block` if `handle_block_sync` returns Err - // Currently it's not possible because block writer needs to be released - // Look at https://github.com/hyperledger/iroha/issues/4643 - let _ = voting_block.take(); + if categorize_block_sync(&block, &state.view()).is_ok() { + // Release block writer before creating new one + let _ = voting_block.take(); + } match handle_block_sync(&self.chain_id, block, state, genesis_account, &|e| { self.send_event(e) @@ -534,22 +533,19 @@ impl Sumeragi { .is_consensus_required() .expect("INTERNAL BUG: Consensus required for validating peer"); - // Release block writer before creating new one - let _ = voting_block.take(); - - if let Some(mut v_block) = - self.validate_block(state, topology, genesis_account, block_created) - { + if let Some(mut v_block) = self.validate_block( + state, + topology, + genesis_account, + block_created, + voting_block, + ) { v_block.block.sign(&self.key_pair, topology); let msg = BlockSigned::from(&v_block.block); self.broadcast_packet_to(msg, [topology.proxy_tail()]); *voting_block = Some(v_block); - } else { - // FIX: Restore `voting_block` - // Currently it's not possible because block writer needs to be released - // Look at https://github.com/hyperledger/iroha/issues/4643 } } (BlockMessage::BlockCreated(block_created), Role::ObservingPeer) => { @@ -558,12 +554,13 @@ impl Sumeragi { .is_consensus_required() .expect("INTERNAL BUG: Consensus required for observing peer"); - // Release block writer before creating new one - let _ = voting_block.take(); - - if let Some(mut v_block) = - self.validate_block(state, topology, genesis_account, block_created) - { + if let Some(mut v_block) = self.validate_block( + state, + topology, + genesis_account, + block_created, + voting_block, + ) { if view_change_index >= 1 { v_block.block.sign(&self.key_pair, topology); @@ -579,10 +576,6 @@ impl Sumeragi { } *voting_block = Some(v_block); - } else { - // FIX: Restore `voting_block` - // Currently it's not possible because block writer needs to be released - // Look at https://github.com/hyperledger/iroha/issues/4643 } } (BlockMessage::BlockCreated(block_created), Role::ProxyTail) => { @@ -593,12 +586,13 @@ impl Sumeragi { "Block received" ); - // Release block writer before creating new one - let _ = voting_block.take(); - - if let Some(mut valid_block) = - self.validate_block(state, &self.topology, genesis_account, block_created) - { + if let Some(mut valid_block) = self.validate_block( + state, + &self.topology, + genesis_account, + block_created, + voting_block, + ) { // NOTE: Up until this point it was unknown which block is expected to be received, // therefore all the signatures (of any hash) were collected and will now be pruned @@ -611,10 +605,6 @@ impl Sumeragi { } *voting_block = self.try_commit_block(valid_block, is_genesis_peer); - } else { - // FIX: Restore `voting_block` - // Currently it's not possible because block writer needs to be released - // Look at https://github.com/hyperledger/iroha/issues/4643 } } (BlockMessage::BlockSigned(BlockSigned { hash, signature }), Role::ProxyTail) => { @@ -1248,46 +1238,10 @@ fn handle_block_sync<'state, F: Fn(PipelineEventBox)>( genesis_account: &AccountId, handle_events: &F, ) -> Result, (SignedBlock, BlockSyncError)> { - let block_height: NonZeroUsize = block - .header() - .height - .try_into() - .expect("INTERNAL BUG: Block height exceeds usize::MAX"); - - let state_height = state.view().height(); - let (mut state_block, soft_fork) = if state_height + 1 == block_height.get() { - // NOTE: Normal branch for adding new block on top of current - - (state.block(), false) - } else if state_height == block_height.get() && block_height.get() > 1 { - // NOTE: Soft fork branch for replacing current block with valid one - - let latest_block = state - .view() - .latest_block() - .expect("INTERNAL BUG: No latest block"); - let peer_view_change_index = latest_block.header().view_change_index as usize; - let block_view_change_index = block.header().view_change_index as usize; - if peer_view_change_index >= block_view_change_index { - return Err(( - block, - BlockSyncError::SoftForkBlockSmallViewChangeIndex { - peer_view_change_index, - block_view_change_index, - }, - )); - } - - (state.block_and_revert(), true) - } else { - // Error branch other peer send irrelevant block - return Err(( - block, - BlockSyncError::BlockNotProperHeight { - peer_height: state_height, - block_height, - }, - )); + let (mut state_block, soft_fork) = match categorize_block_sync(&block, &state.view()) { + Ok(BlockSyncType::CommitBlock) => (state.block(), false), + Ok(BlockSyncType::ReplaceTopBlock) => (state.block_and_revert(), true), + Err(e) => return Err((block, e)), }; let latest_block = state_block .latest_block() @@ -1329,6 +1283,51 @@ fn handle_block_sync<'state, F: Fn(PipelineEventBox)>( }) } +enum BlockSyncType { + CommitBlock, + ReplaceTopBlock, +} + +fn categorize_block_sync( + block: &SignedBlock, + state_view: &StateView, +) -> Result { + let block_height: NonZeroUsize = block + .header() + .height + .try_into() + .expect("INTERNAL BUG: Block height exceeds usize::MAX"); + + let state_height = state_view.height(); + if state_height + 1 == block_height.get() { + // NOTE: Normal branch for adding new block on top of current + + Ok(BlockSyncType::CommitBlock) + } else if state_height == block_height.get() && block_height.get() > 1 { + // NOTE: Soft fork branch for replacing current block with valid one + + let latest_block = state_view + .latest_block() + .expect("INTERNAL BUG: No latest block"); + let peer_view_change_index = latest_block.header().view_change_index as usize; + let block_view_change_index = block.header().view_change_index as usize; + if peer_view_change_index >= block_view_change_index { + return Err(BlockSyncError::SoftForkBlockSmallViewChangeIndex { + peer_view_change_index, + block_view_change_index, + }); + } + + Ok(BlockSyncType::ReplaceTopBlock) + } else { + // Error branch other peer send irrelevant block + Err(BlockSyncError::BlockNotProperHeight { + peer_height: state_height, + block_height, + }) + } +} + #[cfg(test)] mod tests { use iroha_genesis::GENESIS_DOMAIN_ID; From 5e735c649b48d38414e6dc907937f3a23468b15b Mon Sep 17 00:00:00 2001 From: Dmitry Murzin Date: Thu, 11 Jul 2024 12:50:29 +0300 Subject: [PATCH 2/2] Review fixes Signed-off-by: Dmitry Murzin --- core/src/sumeragi/main_loop.rs | 36 +++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/core/src/sumeragi/main_loop.rs b/core/src/sumeragi/main_loop.rs index 5cf36ce794f..45e41276a5c 100644 --- a/core/src/sumeragi/main_loop.rs +++ b/core/src/sumeragi/main_loop.rs @@ -445,14 +445,20 @@ impl Sumeragi { "Block sync update received" ); - if categorize_block_sync(&block, &state.view()).is_ok() { + let block_sync_type = categorize_block_sync(&block, &state.view()); + if block_sync_type.is_ok() { // Release block writer before creating new one let _ = voting_block.take(); } - match handle_block_sync(&self.chain_id, block, state, genesis_account, &|e| { - self.send_event(e) - }) { + match handle_categorized_block_sync( + &self.chain_id, + block, + state, + genesis_account, + &|e| self.send_event(e), + block_sync_type, + ) { Ok(BlockSyncOk::CommitBlock(block, state_block, topology)) => { self.topology = topology; self.commit_block(block, state_block); @@ -1231,6 +1237,7 @@ enum BlockSyncError { }, } +#[cfg(test)] fn handle_block_sync<'state, F: Fn(PipelineEventBox)>( chain_id: &ChainId, block: SignedBlock, @@ -1238,7 +1245,26 @@ fn handle_block_sync<'state, F: Fn(PipelineEventBox)>( genesis_account: &AccountId, handle_events: &F, ) -> Result, (SignedBlock, BlockSyncError)> { - let (mut state_block, soft_fork) = match categorize_block_sync(&block, &state.view()) { + let block_sync_type = categorize_block_sync(&block, &state.view()); + handle_categorized_block_sync( + chain_id, + block, + state, + genesis_account, + handle_events, + block_sync_type, + ) +} + +fn handle_categorized_block_sync<'state, F: Fn(PipelineEventBox)>( + chain_id: &ChainId, + block: SignedBlock, + state: &'state State, + genesis_account: &AccountId, + handle_events: &F, + block_sync_type: Result, +) -> Result, (SignedBlock, BlockSyncError)> { + let (mut state_block, soft_fork) = match block_sync_type { Ok(BlockSyncType::CommitBlock) => (state.block(), false), Ok(BlockSyncType::ReplaceTopBlock) => (state.block_and_revert(), true), Err(e) => return Err((block, e)),