From 9ef52ecf10e237554a6fc933df095204cbedabf1 Mon Sep 17 00:00:00 2001
From: Luc Dion
+ iPhone 6S - iOS 10.3.2 X axis in the number cells in a UICollectionView, and Y axis is the time in miliseconds to layout all cells.
+
PinLayout Benchmark
+
+## Methodology
+
+##### LayoutKit Benchmark
+PinLayout's performance has been tested using a fork of [LayoutKit](https://github.com/mirego/LayoutKit). LayoutKit's example app include a really nice benchmark.
+
+The benchmark has been modified to also include PinLayout. [See PinLayout implementation source code](https://github.com/mirego/LayoutKit/blob/master/LayoutKitSampleApp/Benchmarks/FeedItemPinLayoutView.swift). Remark that PinLayout's layout code is concise, clean and doesn't contain any computation in `layoutSubviews()`, compared to [Manual Layouting source code](https://github.com/mirego/LayoutKit/blob/master/LayoutKitSampleApp/Benchmarks/FeedItemManualView.swift)
+
+The benchmark include tests for the following layout systems:
+
+* Auto layout
+* Auto layout using UIStackViews
+* LayoutKit
+* Manual layout (i.e. set UIView's frame directly)
+* PinLayout
+
+Anyone who would like to integrate any other layout frameworks to this GitHub repository is welcome.
+
+##### Benchmark details
+The LayoutKit benchmark layout UICollectionView and UITableView cells in multiple pass, each pass contains more cells than the previous one. The **X axis** in following charts indicates the number of cell contained for each pass. The **Y axis** indicates the number of miliseconds to render all cells from one pass.
+
+Here are the rendering results to compare visual results:
+
+* [Auto layout rendering result](Benchmark/Benchmark-Autolayout.png)
+* [LayoutKit rendering result](Benchmark/Benchmark-PinLayout.png)
+* [PinLayout rendering result](Benchmark/Benchmark-LayoutKit.png)
+
+## Results
+
+As you can see in the following chart, PinLayout's performance is as fast as manual layouting, and up to **12x faster than auto layout**, and **16x faster than UIStackViews**. LayoutKit is also realy fast, slightly slower than PinLayout and manual layouting.
+
+These results also means that PinLayout is by far faster than any layout frameworks that is built over auto layout ([SnapKit](https://github.com/SnapKit/SnapKit), [Stevia](https://github.com/freshOS/Stevia), [PureLayout](https://github.com/PureLayout/PureLayout), ...).
+
+It takes almost half a second (0.468 ms) to render 100 UICollectionView's cells using UIStackViews, and 1/3 of second (0.344) using auto layout. And all these results are on a iPhone 6S device.
+
+
+
(TAO-ie<_g z>j;yr5|w;Rzi$A?MzMaDWzXZ%F_m!%2WpCKVW4B3kaVeL;h9A;XlX)VlKm wJdCDp zZEoKG*gkymomABO(keKc4~c!lCZp8Ye79*-BDBqRzH)3Rt4uY^x-+rxeH6Ep?AohT zO;eIy6p-&4T|dKFv1%U)*CKi@Z+->AB4h*6O0W-H#Q#eI0x?lN`!fpw$9mVR9E}Y^ z!Q}}O$hFjOwNlHS=xhFuH6-A^t*1I+S4iW*MJ%6)UZ}48dReDP{a-MkoQ^v2JTazZ zU!ZcX=y0}y;MH^blYStTI{JT+Lm=L}k93oN b zDjy@-vi@-&1PB2 )@;?*Vo^+*UvWBIQ;{C@&z z{)2i{SFSMs36j2jM0@>X6H$@LND}<(CFxJRQU1l2a*z>Fhcz(0fI8w|FNp{v(!av+ z|Kl)5r~*Ndcn8SEJKMdJe}(BQY63n$p#Sk8R+D#&u7M}Mh=*6pf5CuP_P=22e;Tw4 z55Uk*!FYcf(8zUl!0g6rxj92*F(GZ>mjCZ)j^P8|^gm8@+os4&rzL}bcn{c|T9nR$ z1Jb9K^kLS?0s;BR|ICpb2Yl^H5|)7Vd)t&!PF-#DRht93iXI1yo$?dS03)0E-4RD^ z%zky!f8S;Rb*6dK|J+A-q&{_S%Avt6;i|C6aFP6YmErh!X@s5Fk+XK-*?!-@TM!f3 zMjkkb1<8YXr;*mBG1XPF*2wxi(u@toWXmtlK}Wjm{TWac8G`?>n %6vk9HrvQ ^ zjHaiLWeT=gBj^}A)*G%8cl9dJQ!7GKmc!d!H4eraL2!dC?JBzfY7=H1&!d{bk&33Z zwB|Jb$GcR c7V|8brCZp-VJ-2R z(@1ZgskJ68+sV?{9aJ}tQvQAa6eBF-Cw1Qs*U1>rWLM=4blTDh1SGGXj)SVBI zX?c^QIkcY-6cEd0i};No O_k)>Ii@z0Dd7TqN<4rwTZKJb~)cX(o`YSpzwP>?! zA FPeRM1bO6f*&X2?P2-hYGPGk?i}B!4fqk$RhVg zbw!dG%ZnmNI?YbGh k${^b?9;f2sLSG=RuF=(#c{*D;!;uK)cY>M?GSuLHiXt}5ZVL3-OVO! zv=-mTFX8F;+t~Dm1U1cbKq0)fBFE-L?&0I~r_H~$3p=7UmN3?*J3WC&bqiUdnM}Is zVEHFoeoilM7wDGb@ra)2IA{3f8_PMnrla7rlbhCd$F+7ZnFzrKxO`|b_Mnf6FhN$N zljuFeaJCSFFMr9CRZ6KcqCJH_?21-ioc+akNA1ut|73{9TQ-v(WGF&`r*XELD^KM= z@59GGoP5b(moF79YiEe4)*=k8i>vhaGWy2Ck37w=bh2Ol kKubvqs$y}|Kb;y(arUe#gh@%aKg3o78APA6T6~ylgM$X@=|^iwicepnsGSy zWx7tI7`uxie(;M}`Rv)56{rrc%Nmbp%1$~9x~gqW3ff4vC^*Aqj2{9W7acE4K>$bh zN=9<326^+upLl{VI4wrl;P+rS9@kR6b-X4}bo1;zrnS|Dg!SLES$vHt#ElE47`xuw z2y`#Oj!6B-C_;~^u-eTC#xw+F5v?gzZ~4HI^9 hs3-WSc9@0m zn$TOkaoi_&IR7Cs_G50=PhPMu=e{Yh?O{;#$%JRcNgRrRW;Dmsvd3?go%;Qr@;D0p zx?h;q HN$_qjvIKKp5`gaHIjQAP3 zaah81EYS3mbmjU#uOo(_%AESGu+X4Tv1UY-ybz%$jCfHJ=$xJ-KX2NZKqctOd%94L zc>0%Cl~Y|3hJ23XFcIX3I5to%P$_Z#h>X|asQjb~!BMHfN+P#?er$`$ifr1Lq#PgU z{~*NI(<~)Wje5(?1+gim{RZlIcW0XNN-u|%4su!KGn8PNcv_lF>?YDqm$)Ulw;fv^ zgjGIS4TgvY6+kJZAhyb@XT|4X; U|w-%_n`?p>0&(ZB|33 z^VoHdAN~NvQZe{I{R1tqL=Te%Ew%mzlS*VoK9z%JpFr@W*=(v+GY)M+D-^vc`TBUd z4cpWIF_N{DZMsMi`U|0WRM38u0|F3+0ZmZo>(9&vEGhkd*Fkp{>w ~mRDgb_Esz~G3ieN#wONEG_F={H=B{82-b|( z2}OWYPO5+lVBrZi1`!imzI3d6=i&{$2g2)7-g$Qr_L*Dz%2uq|-?u;Dc855aJM6;s zaBh?d^l+g=9NzwLH7S#FsEde=0auoK?i-UJ<>wI*;6e8rF1uzsi7(V}`SectjUGCY zc#d6foWG_BtJdqOA~&+>S`E1-Stv&Y?#cp)!CJzf-*s7OufJxLh5!cjFw z!h3b5W^gG<*kGaF69TScjprq=x-XBq9r@ku7q8Nu%%?kcSYz|8Kg%xY$pG6dkn**| z2=SJ&ZfL{(95t;#LDp0COzNcpMRk5_TVwHub>zufZVu_9j-8~p(9h!aIOU*rGEGA- zb69826~~FeZ%%@{g(jQXp&ZvD{0nRYQQbx>YXqK*zxYvh#x!Rc5*eBvK=}yWeK#?* z3#(zi%evZ6*}cd@jg4j5 WH z*9-YQ?{3$1?8ZNP{#373(~xhuJ` *+X1SzqpoHfQ z*f5(k#^Dk&9VYu#hk0!dS6W=uLu6zHt ;z z`90{-6t+$3Ntv(^9wF_4 SB>U#!-zdF8ZlsO^N6LcsN35U-|F$ z@-ue?SrkN?a7~aTy%8da3}%muaW~&_{d5L3p>9PFm;R}mlJJhm4 &^alMBpR-38Sg=1%Rw_f8UBauYha|D24bw~cT!!Yd#u%MO5r_jT)~h_= zto~D!{=uAzST_b)qWe3#<{4k0B_Q1{&Ns%%h;~@0$;8r7H=yL1X*32SHW&vkQmXMb zzTK8VAvbGB%m{}WD19wD6}l~7Sg(e{AY_>V3~Skn5sZr yh|%a4cuLxYlss25HOB8Xz;+~byB$ACJ@e %kRYAjwMerL#*+^#z4 j&I=d@V3nwT*Nel909ZK)#A)A8f07v7;*T5(gB{P zhi@ww{;CohwFAvLS|qy-q+_+pyDu+DKis$37o>~snp^fuT7!BSjzt&Ql7FMmP5E17 z8 hl9D09 zY=|3GG;aQgpl?n?79_LCjI5Ouhn01e-8&x=EVH}@UW+g(R%fg_^ #EX(#ynT&77ElI@UquJ=) z>1XQn_YNU`?iYXP=vtV7itx1!k1k=f(3E@ErE4)7ZoBB7g`Wrfn<;zG1k)WmTXMJD z0fj@H?O|dpyIaDzNvzqotFF@uVM%R6A+Fjxhpk_VpBLqFn;VL|6gHr;GQ=i#5`<=g zE2q7NiF5_CuQxT8_T}$Sw8=CEben!^GDGyVlF=OaAE2`ZL>6Uk(Vvv-mB0tmbvAtz z7TJ{XBlzz%xu|0F7j;In$vY$XJtB>I>{c$e+}k`N1IN+QpKLU3vW|2)ms^)tp3I3k z{hb*Px8^5SgzM}0s~r2=8NN91dKP9bTz(F3tQ#fekyV`DDT4%`axmtJa#4lF4W07H z$B%MoY6{ea1u4;v?sfRU+}}N~vEg*4m~(fmkp2ULRtg%lo-Oz?nFU7a)+$>d3d8ac z5TLUuVYmAgm3;kcV-3q6RK8^$>v9wtd*|%CcL*oidt$Qmq302BVc1IiZ;WA~MDp^} zn@7CaSD$dDN?~ICwB)2b!~y+cYe-Dezfamu9sZ*E-FZdZ7w9}l{-G5Fu3rZXKD47S zI5u0{9@4SK6ehk`6!C-y7mSwbN5$dwmv0}E8o#Av@G@k7vffsz#KXU9na<<3Tc}1a z%xPd`;4B*dT Lc}n}_20TBtWPO6ASHVKYd9!aPd4o QPYs;I90)fJT1jIUXoLvY}BA}N0&A}SiW8k ziytQR1I6BYsHLSF(IvQ5cGEqrFiWRF*fVwMd;g?A*q|&$Os;rEmkTP$iA$Dt93!VI zwk!FR)Mr~KUeh+nTZeyIFp0S;V?f)+9YVqp`9a|R%L@uQc}c4Ins1kVklajD+vH{M zUX7vWVh#X?@DDo<4L>0Ke{SM>_aoI-VfkaV6mVO8chAW<%1^1qczAaSYd+u(8HGvL z#`e?Bd--r|iWT;UjWiW)6)Tmej&|6Ik0NkzNXk |F5h `vEj&anM@b_S8e^N#Dd{Ui_P5Vnt&~Mf!CG> zeAX`b@{!B`W+S{E4(X}Y+VNt&tRqk21P{9&oGdpvQtRD8b3(# ?P;Yd7HME<__ukJXvP`%$ 6(@tIHe6|Oop`FM~yZPqWr)AniN{IN0iP%Rm!tL7n{C9(va1(k?fM>^PjeZW#Z z19o91#-oX^;O=g8Ra5rB0(P$U#N)agnJz4)V=jZ_SAG1T#jg>r@QVAk^f{f*5t^`L zm0TqUL0d`b>N2H KG9`+b} zMCF49AOW1_O6YkmG!4A5O<^%;4fzx2Tl*N(EsjE0V`O>krjLvb5>59K$qrQDmD8-u zuVl$J&x~oct!i-3D^U@Jl?3=`5PAq;g->$qCA>i=jIC%~VnCRlC6)^^x!YBLTeeIj zOVNGu{rO0svGjQReSn}*cG8sBYpV7vblI*$K^3r85_AInuDjeaZqix6XrA>XfWbe$ z>l5S*;RIFZ^LarX&=TDny}Fxwnu;ss5(zylV;g0ums;z-=$X%c*I3BBa7aqoF%$4e zDlWTTbe>xx=M8;%dohm<(bXeuxeTVX=*ft9H`!C4$jpmfz6`bci5jxUZs>k=QEVj7 z54PJ$g_K+cxTwXtyQmcf3o>K$4l=7PjW4vjGaS>u+XfCIsBm1*($6dK({)pVW!C}j zs;I+JbHcvMA}&@#_={*G9|jYWo3Ts*I`^$%Vc@1j)7UHSrFT|U!Z6u_XqI}b$sQqu z-#4t}ojjL|)T2WFpt@Vf1ne0GQPgJ0T#$yA4!5-y350D0*S;qJ-T~`fb>M%aU@@5K zUjBnN9_!W@h0kc_)guBZDKHF7uqM07)7UTMa;qQk1Jv&}n$D%j=ynp1WoHy<%bMej zT*=T808%2y!n8^NG|Q%SVd)d6SP5&wM@^v+fpZ z`9ePl yrjU>Q0E?p>U)bAyNPIcR8&Kw!Ov+!8>NOwck-^cCn%-Qg z*7)$p)uG`i6rUM)FeZJrPrf!&dRKS&j+_i=v6hG8;58NHY5o _>%q6?XoJS$}uoEjzG7#CFZzkS!9HIYsXgvDT4rmp4>N-MZME{ z_U rfWJYH?~ZipjT&Z~R1NC#@+&wa=b+F=vJ8D|o?Rq4Kv8~%PO zG`6l;9i#a %O%tPM?@mZl5GFIcftht5Nh z*&Iy2NOxp}ZUp7YE3%yF+yF#hexDNNK~sa2i9CsAi+nzSU2<5xeUhUSWi zxaAPEiNd6^-sCMYtMxk5vE2FWM-PvoHg-|? 4 z(~h)TcRL>~Qm+Mu9;C*HmXWLC_RC0nwO*gCrBsiA{q-Jh)15IX+9m(zl}J^>-zK7N z@dT=4a5&Pf#bp#52}5F-;pmNXostAQV)Q2}{Yfzz>O@mA>bMfOIi;deK3OL>L)VhS zA+yv`k@}10N76v)#cnFT1a%e;le7cF7(>U-(@*BGcn=-g9+zf>CzWOugXu^_@n(=J zAY=QYW&?#RZD%>TA<8^1Acc0QfMNXWIB_x&SS3pH<)#=^Xr1*$uyRvR5hGIV_po4n zT+&$*01g0(FyBfMG6z)3?*iOSB++& 4KjB(OLtyc)$~UhBC5^w$ z!1`d}a*QldazsXYT}Y2yrTUw* 0+qENBGLhPvHe!#3*KtUVPk-(vSQU@P zcV9GYpY=vu@v5O24UumNvY30fD@jZDDCcEr^!hEbNE>}f r$LjkU>s?D#mo-5p%(4c#eRy8Bm=Z)ZZytZwkT6|SQoa@j}f36|~m#bUx zYiL|U&z}y|-S-F%1PM)7rGT-m3licAcP{1vvDmE=bkarg+X$7P6S4fT7z0JikNvby zQ}s^Ts*H{xebnz6(&3_*{|tJqe>T;@>J{b$ym L9_L}?g%5Lm+q0MtSel)< }+ zc4xm2adp5FT*>*e<=rEc#!K~{fm{VX$`)|yu->$x+l#?sgvX38vV^lx9ozDGrh-oQ zTK{4M#y)w-9Om=m;0@649Yc_oHtP35KzuWm2@tlKNCe6{7Wz*I5rxrq@B$Mpjc}#W zq=7gFCOu={0Oy7+Vn8s0lf F_FME8k65`rrq%G<}Sbss3^T=)oljM zR%SFxpX#xT4o_ly5Fp&52$2<>uY*6`x82JhVxkM0py3i6SHJv_Ms YTWB9XU(5y zq1mxlLB`61RI$^cvK7kLyo{N8WUZ|F$KTqI>_ttc##&po<_w-YQ>K};m?X&;2Fwl5 zq^kgMKf|A2I$8-OQ;K&WJG&dcT+@m670ECa&0THqjqm3{Y|havTX}cjQY_dtp+PD^ zXK`?8E|^ZLJRw$1{dc|(>_lc+%+_ow<~O>iayf6V1QZ=ssJCX7A01bI1yBenA5#CO zq*(4Enp@(D!OuzzlJ{@#WBirzdQd1~=;6AjK9$KszrswFV=Va>&5M3vyZ!Y}iFCGj zMNK5eeoq`#6DyFIPu)fs8Ld0C-IwhKsrVu9v-hHFyaN9D^<$$Q1Tn=wc$Mmhm=J;B zCq7y-SDLN_94P4*c&)jww=!+7tY!X#(@J~Z94AER$;46$Pbo%Ky_V&QJ!_J09g>1S znu$60m9d@bC&}&W#28Y&6YHImPuTx!Msg$Rb3^Z6Wjt<=^-NZ$B`3ZnrIskbk(L#G z$%-f`{HA<{99faa)BL3#8g|UGPGJ%v(Dzb4>I}b1ESHvuMw@sl25l2H+Iy0siPGg7 z#l4KwE6eo~DY8>JMptz ~20Z`?->fSoKa`n` oYk++H#;U?bX9M(pw1It{lVF)mxg|EqG0;v+V>^M$9&^$ z&4l@u7@@Ew`&zISY44TQHirI}y!WM$HwpvUblHfxCElwfit{you$|XS%=wfF?p%bc zrO5C8`ozh!B)>g8QTJ36ACkS#k@(drMRmo{N=KHL-AN8m?>v&m&sal$r$@ 2hIlId{RbwbArIzjHK0qf$?A2g@69OV$I3JOGKO*s-=XMLD zyRIl3H^BZjW%pkA=lFweqm7Qq3=pMRjz)cN$}e4<kB^SOWM84++hnvDaz3kKy!+ ztyyrV#?F}bI)4V?Gn~_hTN7(WDx$ zGf%#o$$wY!jVz Z3`1h_FLCXihM1>nU*xip*K1Yx95b2qzwH!yDv;+=3Lp9p zrFKOnOl9Nv+zf^2Ik+R8DDRu*?Q`FqTl`2+E>o>JyCv8XJ~NLTySJZamFe!6&WQ0f zROV@1a%KdjL4^>F$SP4{=K}7*b?o&M@hjN_`$9*@4k(+(9fw_?MtQ-_yCcPpOZBA) z4j*fzz)vUQX~n){Hg1(|m{)0{?zxraMxD0ex~1?`T@OXTP{e%Ii?K@?f~PsvbF97W zhydJ9YD+uHK)QD)93~{6?-WCrKTVEYjMkB4{oLc$G#3V+e)ok8deA3$fc@r;A0pAc z`~SlGZ{CEfM#*!~gDuLJ^D_f%pq0CJqqFO!%6Pham4#vXQ%#u$_@MT%;Lts3dbEXf zGzNtdn53iK3tnulz$dJkX``z{{I ( zX~0GoW)_i &AYxApZEaV?=#Q<3E^FQ0{>UAh%e_gI zLo+^f>Q@_ZVW;&jbX+7nQj6*dlYZ n|Bk|L(&?Y_7}**hZ*WTVtPYtM^{l z^xRY5n<)yN_n`+fo||+ $xR7yLJ=0oy2m{1Q{^DhT?cEOcEAiGm>W#mX73{S-$@}Oeaz`VuD3H&y15pESY@A zN{%#XB=STZMY5k~(}A>BD10%{PH+vy;O-zS^EFYZiLO3LigTh>v3iQiMydQ#qpdAs zJN-^MT!i_Aqw_+3Cc7lVbxOuT-5B1s!QX$8Tso|cV9V@6!yaqEV(VD}FXI{jG06Yn ze6YOGf0)qe%bS(|?{@)k`+5}A zHr_w{C(HgZNMH+ZE6)#h!_wDDH`5h Wj2SeT;LxSZ>Au7uK6o3$&_8vs4 z-MA}pdia}J*0`^oXp%N~x2bIp%G=pi-q&aGPrGL^)gz#lncXXe&8qQw;DY6-y{TU) zy-sSqod}qG)wbQpP1X%DwU*beF41@M1}yZJ&-o|qH*8|o ehla%b zvOj7BR|I9tV(ahnLQh5YT3r;g=2rBty3;I<6N^(F>>;}Da!1dUqepkml0Dwh{mBp9 z@!AeEQ!^)S%hU|o;(22$_=^Xasj<6o*#0;?29Xy8sC5eb!t)_E7m9j}nthoZ=juSy z*#)=-vdV!(r*Cn?sZ6S8CT9*piJuQysBc`}_wo~B5geD~gk&My4-OaTBtwEjRs!9- z(BJQ4 yXxG%iRZI+&{VWo;2 zx9my|SDbI|lVF^`NgmW_+)VJgKxaM|IhEfXlcg+uTXbmrW;9uoX2rezjQnmQ=`z2& zhwQFXO=V{>D&p4{miY+;7yRt1HRb(3Ib`B{SrGYM=UnBdvGgmIwHiY 8=V!aqSoscTQtQ&0nX6Wtfw&b d#e+6^{c2J3qCV5oHpmU)+C$V#Etp3w~ z=#QBZkc6|5+*-4C?%Y+(_e!nluDjkr#iAkG@m1g(8)*kWZ*5}e0`cmI;QzziTSrB? zy C!UNXMaJC_zAKsG& )UgFCp_z0 z-=E*R-nGtR9Y=g-@BKW_-uHdo*LB^L$}%*Y!N)E$VhwRa9Zd@99bDC6!(oLbbURa5 z5Vu9+;;$n`U+}A4KH2@ig77LwKa=UCNkof(4JFvddsbppV@ghbMf}l@qwF&vE6Bg- zEcd$bg)do_!pm|<`9@6|zy&TNY+rZVx4x?mTQ^v-iOiNecKS)Xc|1OCb4KPj9FWNp z_^b;F<76d>tO;VS9=-I~45Je329%@H&yIR`v+NZ?^Z@fsS0Hp?e9G9vH$3kq0X7Yt zbncjkMEjMlG8>EBz5-16iJpdbba;1A^EX4sSele*8O#QCE}IFVxxH2`i5)#ARJDME zB0c{yO5=p*C33kgGQqH?xguEX_6vPMOFO{f8CohwTG}x>T#mLcK~RPI;Xx6yvan?1 z7laMWUzg*J{@|mWJy3Gs`SZMS-0u^w8J_HIVRWfGPdEt?owQG0U2AkHqd|GS2yBmn z1hX*a-Xz_ebYHXZSE@hBUovpe&mA3cn vuu~?_*Y^!Vi za+lLwAGYG=D&IiSxim@5jq6lN;ak6K>KRv(+h6}7#3C_Z=FoPQQ!s97^5tWOb9sI& zdWd25uX0WE^4;PvwU^HRCLre&yf74HGjO})&FO#bj<(Q1gRdN}e#@audz8(MyUp{m z+`c@C-|iRP()2i4yp?E`TR(f7PyMbokq@~m*f6zjVsyyxzEX2P{^qYmbdzDEueM0j zQKzoPY^`Q#+>DN9aCNuaL1((&y(=Y*Z;ei-KIJWYfu&YWELu8SMbJXKDZo$BAWrVl ze9|Ni$vtJ)s h;!qY;Ny_CM7FgnR7GpoUR#N3 z!sp8MP6rJ%%+nsWMU!{<@LO$;wo}M?IaB@doKKBLWdRe@NQpp>;pW_s{XuD?&atJe znW&}d`AYU8lr10g@G@4(qBOeXEI2#;zS1VU)W(7I*MVQs#YLkk7CSMzPqVXe5U|#6 zbJGXofp|r;$o?NAwzM3vybjqxThQAtUlKhc;?_nXc;R%JRJ;bFJS$H=GIJ{%=Q^q; z(Bdv)xz{z#v#KRPjPi9=T^plM_~;cc+1e`TOwL&r0ENj~xg| `e21pJ8-->vmSM>3Gdo3kj5 f&j1p0aiX2^H1NE3QT!x0UQLzSAjyWEjSLDTE8AIBT3?Y`2EK>OrX)I8F8 zjDq^*rfBPc)bW3`*r!|=`#n6nzbGSw-}LX0IZ_2+ef-XfF| (CU!RT 8Rt75{_$vorU Ivk(H<64gPc zJ+x|n|1=9tlc#f(T>PCTpE&@&Y-AN#5cIDu0>}f1(ei*rXx7)?$LkOWzKqxX%wgyE zPt$~j0$sBvXrmPWyAt5bGOQYyw158;h9=-gLDFo0C*Tj7fG=C$-yCTP`uom-`xl7= z=9^}l0fYXwlJ9wCz?UKFFaEQ>?-ibb`NB|Kxsy6-o)BBWQqRp0H z0_lIBC>Q!Eia*j)Vf_75J@ivFil=Dv`}4B)^8Mo4lA)335CY=J$?tl|4tU3i6Ttm0 z?hz6v`t)6e(<)tXW3U~nwON{nh#QyqN9F>!>fS JxxpX~kwbNW%sSQCyqANr#rU z+-#&9U4aTHO?2CpXfKW0T1PG}keY(Y`NwO) zU%Wd%-m&BbK1YPBrE-dx0)^C5%~1DE`ws}Fih(is_%xJeD`wo}8{);kYbJM!ncXrs zl`M*DHz30mn-a=P7oa+jzVo1u%yFU*&A)y(q@*H~n#f_MtjB}&1r@_~v?&!CCtwi- z-?f^kETV4${BPJZ{>AFc({&kucXguuR~|5`!=A}_a7mYpP0A%0Izj~b8pcT2D} KEGa3_b$vLmYvzY{*IG`2Wi*4DUVh~q&R!!fbLwmRlf{^Lz_}WlNoECh7Ive$ z{%O+jU3UvA=hMA&qzwCW)!2+As3+%Ig1Qo1Q6{L`J?I`F*vA2`%-9p_@7DtutYb}j zlU@NM8Q+(Mg9$Tk5ND|~OZbTc1Yw+Uuvwacuq+zzhVLFNQq`RQ_x@F5;$&B*^s 7-bNQwy|gig(PAU#CQ)18P{ zpS7%5Isl3_xxh#jr@08 K3Co8OU6dOFo4C?_h{fMl*<$=bFe*S|&Mc`F6yP6SGmFu(G#NJXSO|?n_k)g}i zGt`QcyM7hJ&s(4PTCH3h`AGiVJ$08$YpLIFRN9-jRl*M*Pj8Fh^Rv$@YC11QNtoEg zW@S5ZJ=$#>oSOnZM$IPT!4E&H-X%d37n)65L&*p`PBfC5*5ek(81EL7na8N$4_B0R z9Nk) rZ~>8poLUat}jm#%bv)<0e$=i%Jmlf&GPU{JfMso15${ z& u9~0!okLtxPkr zqbJ`H&`*!%O;xy4*KFji76o*0p-4BLJoxWj3=(?9h~fzO08J;gsx6`yOCN^cFQ|O} zV3jpiz`a^WI?f-6xFrIzOFv8>-dyClr|@~(|BVWSY%aR}(r4JQ!8uiHbR5do!PWb` zFa|MPL@2LaUpl}BZw!~MS1nE~jEE6~&k8^+OsFGI%{EHI5W}U4Gz)erCw`W252X`Z zrFQKE(T$Cxx9j6SY^z%mesl|dFl7AqtP?UJ$Q%lUe4`=dWU$-$HQ0ba`g0&YD-b-N zXL$>QjiP+tBX*hD{l2OsY#Kw30wFlX)7teljpkmHb5V!h8@qUL(?=2qp70Afh%T*X z8`OKVGzw9hw4h^7y({c2*ax*5#dds%IYL;jdtF? tpKFyv{z!XtK6$7KD? zqUGfFvXw66-@}Or|2liFI{lQ4A8x0Z4F#8_=7#`^O4_1tZqFvj)5FqpE**%rV>)DO zz9IAp!ss?PQ2H71sx%}-`
&qcT3Ye1I4(JY1sqwSNn~bRx?X2oc?u6v(?# z%JSy7cx)eQP`#xNnA*JqyNsRV3(_n2-Q)AU9zsXkMEC8@d>YrSI!C>fu+@Z7xfERO z6H7g*SK@u`&Ge|$6cIC+^`q)?H%b&2^%youtTVh3Z&e$@QLO0jtN)4Y+@ve_lLikE zvi}{lM3TQ(U!R| +Ta{^)gdK_>{9z39#IYwQ9KFv~k=) zPz&%0Z=8T7;43P4M`C^BTMBLeFqCE}O2WA1l1g;0X#;*f6RVBauW1l7f;Ws?S1D=z zf%b>3VUX^46rEJ=#Xp< (R5`c?<9e_i$F8c^DR2;*@@ued7 z1&&QtTmpQH0FnO6{@A>0$}kch>4+H<%{Hm9 |{jOS0( zC){r)=dx#A`Qdmtxvf!_{*#~xVFrE{%7aaivKxQ0HhjeARH# lcykFNsK z1L>>F3&i5&^mp`*jh29*bw2Of?(_0J2(mA``3;F-sOOxC*ri$?4{n53Qf{0Y!mIgo zsDC|8l-s$a_1=H+=us+e7(VBJjs`EGGJ4eQC)PqgRsHZO609ZKj-SRC0vE<^L4 eZsmMS&-JA2KzwvJeRiKYh zUN9ZuX@wE;4-Qm4gKFV-H{iRr^v$1~RmA^po^DzlE3W6!uGCYP_D_`^ZMH~Q{H4xf zYp%ia$QZV#qt%$;Po|zS#g__dWAq)~X6q^mAMNUu>%W@b@+N6_94^_r%(`z{^Y24V z#Q$DBuW}x>JEWpRd?Axr>-CM|q**fDzkT&4r-fnr?hq$lI~SqyX=d+r2jLT7gCG_> zISRc}skewk*d@TiWyTa22`mLURjVeMm~n LF>kT8X`Gxa{!KHgA2pU2Bs{tHhP30d-B?-@{X-BT4*t?>%>l *7Q5bTeEP7j(+lkMRwr?bt-+OL-_T-Bucn zwKb4 >aUksA9REb#1h zxsPgHN^!~Lwz++Z*3~FfeB7iK(T^SFCBET91&MUuz(FW{&e E)$1Ekm8?VEZ(U_;&eIX&H<6{kS=^qy@H)fg1^S6U43aCkDk5UC zGd^SYmoS|23>y%w=4}uOU=G&JrG`x&2O#d2C=Mz>PanW}`=I;RKhkZ!{@T=YV9kOAsUM};K_ q zlJdIn@1IJ>q5*+=SGwQc;g3QHbb{PHVXBq+@0 |JGZ&MJc+?;tHOv zp#J)6QU6KVpJE!=Fk>kj{^NuErwIRq3K$ RROl5N3;6%%!VD^(G^4W6LnFHW9yl1sqJ^kvl`` zO;Iivb4{kkc0R2|y|P+0pL5w=o`e~xwO48~(8)2PIUnu1zoL73w54ODw$f-vZH-P? zL78BZL9O_O#Y+wIB41}<%q+dP)HRSk@Hf;!gZ7vRT7*W%q%hH=&^9Y}hSyr4kWB;N zv3u~m20{ldA_UZ2l1?y8V66f?0i{a7K;! VSnB90LzW|(Z?-Jb)|3IIw zic2KS+U9>A M>0x^!)FSa^O?FRuH@ z5(E*=YqS|(!#Qm`fg;UFy~1*{Uq6a^E% eR#YI;T>vU!3 d+Vah$<-THGa?%(Hk3j;fZ74CJ;T)Ilod3(`VOrLw?LM2Ab1^EwQArF zl6a^aH*Vi$N2kAHk#fTzI)o3D7|CX^=T$Amy$j(Ow(c+ocK~_6zC}Q!d#k_<1Qti} zU1wVjiKE?@P56R*Ma-HrUx62NmYstT!Mq!Ner2+LF))saL;FKZYwPlauBU_vm|Ewk zf?7w{EmHHh0Epmcb3NR^X-yx$7qgs^=&^Qws8MRHJJVn1>NrAc8zIB_2M~5EXXoBW z+N?VP5e*(09kyZRxM@z6txXqjw`93GZWYu_qp}e)c$P11RezE`dk%C%Yyj@4pO>ls zh9S*qx72CFM1zK2AzRh!`DT@&Ac&ac1KPIFY)YDWYy8^jjEVoM_QkMG6oJ- ;Qkalu`78vKf$ZD~W$5o5=p4(DlCwB}7Gv$}Q-@s=_8@yIlHSVIFvjHYf VA0f H8SHF}}i4Dg9%$%2SpKduRD zZ=P8nLb?S)M#B6TuueDXu9fSr-#s&!J3ra$0)tOD >P-U)z3?7 Kj^@r91O@_s8Y} zz;^yX15s#?dmG{)V8hLG6YB^+)o!^P+6PR-$q;3i-uMF6eSANIAI(2^ExbUxUsU zayzwA#Z=DA$pNy8SViy$3iYv~RR0gmd+G6(rtdnx%yQa6ll|Y4iN6wy^_&Z!z7uV_ z+x%QZZU3Ir1;`E@PWslo$`H}Pf>-AQ3>BJ|f>As3tu@`BA|qUHO#?|b#PL!44MI%c z_`ruptVDF22_(p(LPhK(hYw~iJ)dX2?W1NSzNW6pElc+;{H7gh4~SUi^CQe&f4*3V zke$%=QCt{nyx(Q#7lqg@vH&@zU*NTT_%!xiR~(hrO{N<(3R8`) zz#{Vtuoe)c#Z!h6abQwy1CbFt|Gw_?NVq18oG}4IDb1{W6#!8Y7{A~QF_9eEE6ER& zu~Lkmt8z(@N^;IVmH$xZyAKX1J4 r@v3Gd2n z#7VWdt{Mna-R5_FCji6Aayt!Xask)ua`TOLeJx1vcP0!r^pi@Gy-5jqPB3Nh!n@*8 z@Vh@MNJYCkz)2J@H#a7>k5^DSFL()_dS$tB3I8p2kKU>AkRV(f4_INdD-W>Rpr_f~ zXiDxW0@-nGyfMcwrESk6NeD3l?0SO3AvZhr0n+=K8_zID8dbf{q=Mb1WD?dvk+=gW zn!M-DJ7=xbq$dFM{Aw1cL3`y*Ot#KNIPxT;G-4k>gz#v$XrNGPXGpWQI8GnfdP-ET zA0Q6IYf^U^AAIZY7MO^4TgO_TI_+jv_~i dYbs3itrowm z?Q^bXiS8?%br~%d_Qd-48G64MSY=J8!FPSD`hJ7sm@==E%MK1b>YDxF>%wTUi^j>& zUlh40G6>v$_^l?+$HM+>rJUE w6YF-manzx6v+cHL~1=A_J%jUZdF-o{@U|; zCK@VCHL5bIke1 9%XPV>DhhZ>;!FN z ~IEV=zGLBbu zfy>Rwu>n4p{Zkg{8WomI9$d;uYfr-yUlYZuwWJBcK0j >Ah|J*<|LWoqaa5I+6gndNA+K+=^!*L!$X5~IJ`#RBv0Ds$L`0pKy8LTtjp z|3aW~e!k!I?+k_L#{0m#*)4K(QO_9POHcCGGIPf|w;)(NXuPn7$6%C3)tHN(a=VZ0 zZ~vfx5PCZBUi>jf_s4f^T8T^%ib>yd0OPIfb{yg>!_PMfhzeMeWy+n2U0rSs>b;i3 zL^Y>n2wwkenhfOjwaD8Y9JF90jdv?x+N{p`O}*){_RsSr(s?WXih2KRQzLL2L=i wfU=L5*X0Q)WjlHgwFa$x%m&%L^xS0R0G{?IUq(rCg< z?(#{R0RC-#y?vOlc=~;H?uVP@s;Sjm1k3s}v_5@aIv~y~rE!8g s)xNjyc@DVD^YwrqLygB9_3Jh6-x-tv$Zko-@Y+hbW%+h| zctHH57iD?tmEH_F^J{Hvhz+V@+9SV-@+{z9Q}4cwBt^6ok%twTk=OI*tv(-cZwqX2 zP1;8&e(C|lPix11R?12R0-^I6IbDp#os;gA #yk>xk|w+Z z{EQw|`Y__pRt4Gc1W$-iyf?nBq_Z@l?b=oK;^aW@%Sbc-DcbVK`bG-AD0k?qUq13$ z&hKhxx~cwNPKBpQ-C1eYG0zQC37-qh-{FycLBi{u3}f4+Y^Rmis@>w!MHNbl`+jD` z?)#{8Kk;p-_ Z0BOk@wl}KMRBrwnT8jluNCvf}h5?c5Ue*iG{$fEo9kJ~lt z-$%|se(7NTh4R=((FQATG@vukUN *&>13QX_cMk<(3nl>p;(KoARgTQ{$H~t$ zsgYA4AV{u?TdNo6t5DIj@#O(2@{=3F#`niQVu_*SXm2ZmgO8(EQwKpdx14_d4dw&q zTL4WoY6V6T#1Il0L=tG~eVOy={syu=O>?7u(3hm9JJkP)?Z=Yp6!VlXt=I@P&}2n7 z<74Zl;CwKfX4))B+8k?&z5_ee8v;dEAnXc7T7WQnA<_e$tl7sCVFJ8A*uKp{({6Oo zw)2u1p))qNx8J=+`D}hTgS;dnG)zX-hjh04WB%)dSI%Mj>%{P5l88BN!lREi7{;Qz z`35jkFeal<)8d+j>}ZGf|G^MKGK8OUq-CbxKk1SE1vEphJ!&K=DR#-mXoJ{p9GPlZ z@oIW}_1zHFPWek=Gxm-rK?STR8r7Er*f$vK&QLYbA9we5T3J@^Gtv7LH!CDaW(FsH zVzUBGnVzd@CIAY*10(*$*^%Re<=1n&H|ek|3I8xAup~;OseC^B+z#zBk}ebfQVT;F zp4(CBd;I2=1a{!tw3jFXf}qTew8w9Q1E2Ic8zZvY-@X;~QW5=M`>ITR%r!MLi`W4h zvYKtZI?dc1n_ckWJaii%h~(yt@@u3?ZZ3G4s|5m_My*H8`h8S~yq0u6BO*IpqAPC# zh`(Yl#^VUB=qJh~RPuhJXl?Zsy0aGts$)3@Gpz6X#mrIT1~M&-AEOEA1n)R4HtG4@ z33RXG-6FW4%^bXEahr=(>^Lo4Y8}s8S>o>_ZxD^-6hoqO=CloBzRmr0{`|Sh3$b3B zhP!uQWB7Cxg#fTgJR-w}L6kAO&R@pmEx7{LoLf-sh- zsQ->25JY&wpOxzW+Ohsbz@C2+N5fkG_gr{E`0e)0k3TB`08Q#xv?fy&!L*+?#j1t= zIZ1~vU>3Y?dk(7{vNNF&6bst0jc4v7WhbZ>si$FtJp7|^Fh`|F24vnwQM+^tKY-mc z8z_M%Rsq^*C(zRyXoCYIJg0Q9 d*10Y z8-t13Zg@0J62rrL*dLx^1zIQ5(Dkf-W^ 7%tC^{Q)ca1zX_L#&Bg@ z_1)(@-3JA=o*DyI2m77&N74;jXL-x96-K-;70+s;DNhv@l^Wj%>NI3r(Nmhhe$EmA zS~eA+4EM21-TKGPNnldAUcaBlT*U*1-@Kn5@=*3H&*U)j_I1qNo9K>K6##mvMnftV z>1swHBLj!Lo*L TE#oKOb^87``N|Z?pN#*w+6nWl1niY|E%$>V6lh*#51<_#`}*`? zhH)!>-9(O-INPTzahQG=lY#&{82@kx2pCfqMJ*4iR5)A_p6r`JMe4(9mcX-oSaq_p zuTpCrU~9$
ANssVf6g@?d;Zb`o< z1I1~t|AZ)s)?l NL)u(fA)lMj%W70(06X&c%0Dq%u5J1 z1M*Be^n;sN-cFZO8RoH{(syERP_T!zz2i@R&uX82g0%>adG8@5hUuX#Fo`_Lb4DVk zmOMaPxr|q?l>ybUhs}ht(&7lW-L_TNsi$7oFtCVl`2bTB8bu-5!C0X=i&59D^W_=a zo!4I9-JffHy+r`ys$MChJbuatw>tT-11s z-GQ@((@2MX+zuKX02Y8H4Y3N&VMDMojg|c_D-X5{G-g@lycA1)@zuQqtb2yVxe|SW zC*3^%YGUCN08~CW0yLh%pYn@GW!cmBEON(jL0r(g3dwY(CI<&Bm&G{y5y*89H(|?; z-x7tDOtKC-#2PwGlcOCQB)Ap_W%jGvG|w^uVQH>W4M-&q=4@-acFKtixKhagYhCv= zEps{^G|A?DP5pO-N78!wqr=m^@-1LtXeY&7SL%rXn}i4F1r`N-RM!$ C*6*x`G?ima~vRrCtv5Ba?-EZZp1w+*(X+3{c&5)G~2qFK)e!dx>=xV zF@HdL1lsl>0jO*$Afy3MQUucot?EFfmHWDe3FMuI+ 9M#xE@cH+9**iRTB}q_oGHMk}%CoYdU&* P7Xi+NRSZykb+M>ShaGc(XQ&7A0(~=f^%n;mKPCN4krK%qL zl6;pjHS?mD^HUI1T3k(Po1{fesMPO9l`40&5A+l!Zkd_$kE2){o)vA)FngXzRRAtp zjpzflW)ox?eze-VM o OuI- z(3LW9CFg*fHMoB6@$8aa(u)%nGER2l>kQ!VfyZwyO8T2z?AcOWX0alc&On#O6`eRZ zz$?!@O=tNIJpe*_>3=Nic^VNS>5uco;|w`{8e>T`*!BT>XE)r`Z{uCl2H)upI!TxW zrH##fk+j1O-Z8oU0EOIlO4PWs#~BGObn$ru_%Y+#7eHA-{)YvCA}_mL90JPFdST$! z)!hZ!1yU|`RHI)(3mHx^hF;y*g2?-p%bl@o0~2R$^jeiOGQ^fQbG9QK_R=rrm9OP8 zQ3Umi3+xg&{(NL~JchQEO&&w0=X6y~4rUWJ)E**mCN@V;+hjfF1{tW~d(qHgqQRBK z-N7uyft>5=Cg6UT_1ODLa_zlqK(_0gq3jaRz77aFbBL_{EX7;B65Ky??^;r7v3hd| zIgV*KZ^>GP9lkdhH{y-`?CqxxJ(6DF$x@-)Yyh =0`1nuvN$2}_EGvE>b3{LtG_3cw@1$A zS(-bsl;LCvQgz7@!l2VI9puq)h7Qb4qxh$qY{y(r;`2OWA~&+XcIh{5b4kwIho}90 zTaymIYZ( pEA}o&^`=!^Jr-`K7BTYJS`zO+8au zhsjc9-|QEp;rR+c`Acz0=j`%dAF5drx9e){N$SJ%d1>wqM%^JJEt&!?;124iE!vh8 z9kg{X9V&fK{I@o1GHejg(?-Kwl_w#%G5E`Et_Aw2?I!%A2*^#8u9YZny+iJLWzWl@ zY^0$0O##uYz>9+ESNy?J)0+T)-GuUQ1IOiQ3yX+Qd8(nL>>k&%`s2@9m$ZBCcq;OX zRv#C0zDqRRKE>;A(%&Z=Jd(xtm-qDvuO=SaO3459OM;`G;`saR^GbA6(Zs>bWFd*N zLL6>~Jv&ak-I`BYj)!(+(dw;$Lby<&b#=8bDAHPWd1Qh-aLt@Hpi;{GC3huNEK!E! zeN`M`t<_h0MSQB0I&G`)3BaI$?YibN!?vyMTb4X zLA^xn<*hQlPQh!}9d4^Fuj6|ji%1oqxuXr?Z?n@>;0ScNL&JrtjPf#yO9x(++#?a= z#8?+D-hQT{a0A&-U!%F(Q=2vdLc%4THhg)hf( %$+dub1&U3iN5EMbGk(?&*9bhLZVrPV`wc6YFH-0#gMf3VS6#JdGbbD9qk6Q)+lN zw)NIFxnB}vtbDWY=ns 3POX;<>UIjD1_3r>rEnWn-s5l}CvS_?&TV zxvE8_DJLEb9?|fulFApqkh93*dl!p&0M^KnjwcqnED;9-OEXEZM@21}x3Iv6=-HKq zx`}sc_`1SLbB-tT*IfHL90jo}6-!d3CJ2 D3HFcgGD^f5mgEC($1b8mNMFO$-32UIv+vdoe;rT@K~b`hWwOgp^~26*Wa<^ z3MxKdwPmDtVR+%D{-8PQ6oDwL#HX v*$YjD$mg7Kf^&X^<0WRC%n+Ns0KD^RmUX zW~iC! 1=q8X_R_baX zrK0j^5TI#WeLC~7eX{Xbx@^G!WBI0TNY&6`^Ac|Bs#CeXdfBY WbzDm7 z +C)?FEwU=;oEK$9X7k8u` zk^fa~?dVMX!0Ka^_%x(UW`zF_-F~Mby0tZLDlNl7;@dU6X7fWYm}>9qmThrrHNEmA zX>>4}9x*go?{mKn?;PdE8=BHOB3r#Aq~fsXxMW&C!D$QdPt4Exbn2OOH9wXL-#WdL zv-hoLI->Ka$T`+F&^itlBEu-VjdCE0<3lt&D~a%Ca$aMt3I71E`KFZUATbbrX@kVC z2*LHoX>8c`Wll|LG_)`{)~7JDvfQIR?(52N$zrr?pfwN5lB%tij*ST)N3gFbXn2%0 zbxPr23LF-NEy|D|%&*&ac&}1ht7t!1Snqesh?mx1SF(E~g>%2SEv{{40S-D3??*(? zyF+8zno>y{HdU2NyhhuMxjmJ(i0#+>_Mo)pH3jc(*QL|d7tC%65jQ+5$E&V_Qco16 zZdJt{sr841J5RfFq!r;j=4fc+oPN0P_@n&^>9Apz1C>fb|2$v0B?q=rgb0=Ubok@Z z^09FG#Z{vVieCvY(g-8CaK;@{tTSN#u1X+mbz|nWfDGKrlmzG1q-i%X-&z{Hvxq6x zT;RfcP)hKgOV&@uT!)g!ZVqP|G2`rOX`~Q6F2~W`)17jP?TxTXmV=bEn7om8MPmD? zla)l3+&pJES>j2jQNR4G;BnzCNiJ(*stfN@iVbTu4d|vEW0oWK(9B3IEIvDR%Cxa& zWpCKz>I=KpWYS`qrSx7j86JA|kcSJ;^`=ro=bLiKvXxL&4mcABXK#Ph=Buu**5aJ+ zlYVA*H_-?gS42kDTaH&$Flx?u9~}14;@(V)w%-yf$O_ytJBG-$SbencM#-;6Ha?y- z&vS$GXer6}Z&hzf#T)fb-_)=&SB*& gEuBrlT=re zTOJhy8y@PaduCT3^>Eejw9LniDO55v5<=p1)dD#*icH3IxeE>iA`#SEB}*d%szX=x z91ca!2Wn-eyx2;N)uFnG +sN7 zKgKJvC`(}8u!BELxT9_;3@1O!O;;>p58e{aeezf(BW-tU$w`4tOlo!~RXb|X4JI+2 z166rv;jG0ta22^h%pg u-)0frB0e==FZuS9gCi?XmrH^_PqkPo31|G^ zMm7<&;$+t^Ze&+(oAj{p+qF0Ry>6!iiBMM$xd@^ @>ur7_lFa;>` oGM`ScOA!ytpUS9vD?_EF{; zJ7g-Cu_jJ$G$6xtinvmP@Nq{6hU0;4O2qIhsxz$|J9oo|g4rV2kkuOmGQJDKa8>9j z(pWsG8#@w7V|M?{ocKlDu+*4+anhDHr!SJ%{K$N4ziQ*?c{KI>y-X4C64iwYhaK_N zT>K&Mod@G@FMzwtC2uGFSnp(z#QN>|Igi@9Wcpj8`a+ala_h+54BRi*7Nj;m9`LSZ zrkvxY!1a?Dr#E|{gX|3-cpYShrPk7iGh@!hI=}>RWkWZ8s(#Vm*=|}4ipI^zG3fxj z*{!p)VLZF)o>y%cjyKn%_q8qBiD8*-A42sxT1(;uZjVX-Y-j(d8w=iw3w%$Kz;?23 z(k1y)&7lGR9j#wTzuss2ZSm7T{n2CFr}Kl`=G1N&RL8sNmu;%&OQ4*Q@=LCtW2ol| zGS%O{eP1*5Vo__Vbmx%LK!h~0Vs CV7XqlJHG!CkJ!LIqVX_r z*!&&3>81ONoJk|@I+_M+?V7;PT4Gny_5+F9w#s=yanzZ&9}fMZr)3!k$->E;I>>i4 zETK7n60Nhfi36SeFz@E4Tj~4WaWu4IARlY11uJH&R2m* EuC}#;cmiOitw+juxH`(<9reIG!Y(>{buE ;IYD_|RQ6p =!Pkrhta%bB<*8&{=INm1TD^g$GnS2KpNme+HK!y#%NTJBV4C7j z5I )^ZU0bwb22>^}f5}KxLgpDH?PZlCozYZj@|GwF zxVJo rGa9JusRi?bRvkeLP#*xde?UW z|E9t_Ya-Pvt@4W_`U?l3Y~b=m$zrQ!GTIVHPD#7T8fjKg*DnL}92zEKBzsib7m!|N zGlG{s+xCt{L&b{GdZg$ZN+PdD9Jjwodax-tu75SqE6#qkS+#8!YkBj~UFj?rdEfxi zQ9?iRbZ4af7GpVIng80x*t>QcF4r6SUB5wP$%E6*B6q`~)tf(@ocDatTUlYSk~?#x z5%aWr&HemEd&6o)g&qq{UDOM9kMtpOU@%cmj`=OdCGevIxDD&s?!8hLGyCl?b95_K zO%K1Rl)u!vo~+H=G$J)gxMsNCwq&+gZ2NAnqgxQz+aVkiARy^ZepNyKqy*?FGDKlL z^s`EL`JLXSgmCT-INU0*+}4X(g-K<5O`EnJB;g)BA$-Y!=nFfLphhg*IEUiT^b%@1 zJWn#f_s7}8sd=J^Jg7ZfH>I??sK`On`!rDa<7i~qUf5 LiT$_E_U*^>b0(8?G4K~ z9rglqR~WvI0v%zcN?A{%t@2JiNH3xqo++8D6gc0Rulc0%^QFd`XF45Uf_1F+n+vUYW%38(oGl)vD)u4?Xn-G@^& z|L~$Seut5zFkZ2h%dSkL0YIRqobxWZ6)v`Yi=H=!T-sAVzz^2+jFxzx$#;oyu42R2 zlI1y)Og(cKiNEK>i%)({q4+GtRMpJI)?aKIl#vnXXR*s5dsFQ;g -{*;JFx z%ZLkjCV#pmOJvBw-Q;&Fyf%f8uh>)KruK^&MMX1N3trW%s`3Ka-y~Db#vIpPFkAQb z)&5XU@5^}eIf{>I2_FY38sf5ORx1NIOm+xek5klLwRDR}^&M(g(uY(PWNPEuM{7-y zq@21R83#->qt0>%Tux(^hmOkHr$2d=r);o#UozR#Sw%30@hm-@?(@2=SP@eq6LgV* zR=W>gJ*wf&o;KE+?7yPsU#Dc|Xya$lSDFq2i+y@k+aqw6+V$q(8a)T?pjDD(+{l#z z{~c6v5R+}S(HpKF|D)@^i^~_s1P@hb^1Z9#2RGd&7t)+vx(Y^4Y8b_%_OjXnFbr-A znBGrOVW7ntCJ`8B5Var~@;m^&W^AS{p@R2tI`t(~*wMz{6Ql<)sjP@wW=;8zk87pU zUAX UI5!*-_L wt5iOj)G^&GK|?r_D%>zjtVv?lA=f zpKB{hyY}y|JO^GJ6`KG3@^gsyZ+$z+OnWH~F9?g0z49K~S2_v5msyu}r}+RYlh(@= zODQ5NE{tVW3e v_=WHKv9O^Nf1 zgktL`$<_rMAf2a3_ISDW?xUZM&kEdR$_J0$sI&~W6vWxBOc4*|<~Sn(se9d1A97L9 zW@#5O(NwH-P`9#JQvl`J_mrj<8@nyBb~Ocj)Ml;n@vRK-Iy%pGs9B^GG|qa&TIa2h zq*X1TT%=v9iAH&?L^1 n*z)#m{adA5D_?wLA>R-=$3Qrh0 |&4Uo1gHh`wCXEXJDr1}N-p*9m0pVNmfG%JwY%N=F-^JARcDEs!3oJqf;saYZz< zH0Vc$U5aZCT*SHmoT&B;fV6gd)a1f+@db{PC^8acmDNqCJlV3z=SF0hS*@RY30+}e zqArj_#V_8wGUgft{yA~*BiQA-C6w%-<`W)zdH 8?fuSEp&0@4LssO+zkll~ z%i2w>3GoXigB$<*M)Y_8^agcTr_l~`%D=7!ZcHZ0Q)`O 7#xr zW{&EwM0fw1f*(E0nYBvKIKjhdjA>A@ngBZYRRWLWCJNv_UI%ycE<6w+sRSI533PvX za_0qtikT0%)x;{AeHQg6OO^@FOOIT}Xwc(jnF2#?JtO#jh_5u0A$Va@eW`PGI)Va> za|dv<<# 6w#qmg0Ad3f}kSd+?IT8=bsiXQMf>Lp~QAPA;(MLmR-_h~LUA}Fh zqosH&u^7P7znl%_U88Y47*eSLef;`?`qQoN xKYTBe}Plqwa`zk-znRkHcsAQY~E{+D**~ZuZhrPFqimDCUKm|nwMN~vU zB$Sp$2|-FkMN%4ul#T&J7^K5MK|pCix)~Z~h@lik1PN(o7(zM*kZ#ViQD6PmIcI(6 z{5xwM*J8at_B-x)_OtK2uIpB?TzBP*>Nnri=XQjU-#|Y?k{mm MW2)*&(lbZ-C1|F&$l%4DC!7Z-6-vR9I5ui`>Ad@Z!jQmQKp^jd? z1bxbezJ}%vyO$1uXM3ehB;-*6y74;`wFJ1sBdNU~p`A$**EWZbNlihLfX-b&aP3{q zBssK^>V}UTA2?=dfQ!|zT?2y`D `~7Q~$#OInox(iixzhN5i%ctx#>WEL2yVfkn&)4p6*J8-N zQ%x~?%oW)Kwh;m})eFI`jSrA< m-pVY8 z51<=c^+^KEW@C Il!XCxoBy3DZ17fB9p+(-pCDLZ3_s|Miy_) z^=Y1RrcxU|elPMw2cS{nGYU{WdiJ2h=*pE>8YT{eMDFBr38&;1EM07Pn9N2G`n@$C zy_muAP$_urT58A}Fc4D=e=aw?s_L56df!&ghW8{qv0?VeE}%`VmwW|tO_bri;^}~U z!xew$^A_mb?<$vEB|k8}M~SfIy}o*PqM!z`UVXZ+BE{^tmRB?5mlR_cLVb2peXL{s zsY&dMu6b=aufJ6B{IEN%;&VYjS126xfE;!eL{g^BWY~|o$qTI_uEG!u-H!o5B;Fo; zZwRApY_I3GPP`pQ_IVMlN15Tz9CtvEC9 +o0`m;{o;+?bQKbghq@2 z7`_&SXQKlU&-p=3?kt#BG0?+e{E?Xc_DTuQ2%`1f^+&hn` ll-9#`n8u%cy5 hjGC-qPX&`2y80G3MPLA-DZ*^tRa>YOt}U_@o==VxdFkVRP>Izitn z#sCev#Em(NTCLAPtCmR@zI Z!1V3d&CJF>J+O*8z|OyS z*De;`4c8{b_!oZ(XU9O;_v+O=2NyCes*hKgI;G53n{#7zh2AtGh9GCSZ7oKsszxYg zC{97-1M7k8l+}p{jg8*{2!Tf+1zwf$% !h15SU })}Y= 3kWLm~mvJWNGUFs^UerXNJC~fnWqm^X*RL8j-)jFO8TyuzVpI%d8=UrP&0qwO< zBK7yLCi7?0Hr4LpYB$&RFBA||!;|=* MbDY;B5(#&1*v}A3i1_!_IxC^{j z?_@PFwiOT<13vpD%3(ZG8v$|I974>l=A7RRGTKS$^gb1y@8}7@3~&$Qka-c+yzKsQ z7mV(+1^$o|Lctx89O;1Ov~kFw?MNe=#NE3sUn0f|!n^p%u@d@5R6`4nu%*FS5t){; zh?*b44jTb{<1L^$ VY^{#{5}LSCmme{Hl^|53|}B!lH_o oYr;dc`U5)v-SE50&88y+x!Eb# z%BD2*bfpoK;)R0P$0Vy!&Lp?BFBGd(Xgs=v$w_wWe##k_vqZo0Fqxnli~+kc-IV2g zscj8N!UuT3SW@@dz*x_dO?YayP4%^H_~tqC`U{V|dNJ}_)kQ-W 0qP)C0}Hk; zQZRE=t9xrLP9w-p9v+d`W=%(Zs+&Q7R#OeO2W%1ZyMZ;s_w%1YGYS1rX)B3~S&a52 zD{Yo;1S=l%dQ$MZ^*vJ=WUL &wz4-ps%dA4* z$QClK;siGNIo2Jk&1;5CB;yCyDa*N}PAqj_RH?>;KpSlMqwFAP6rFAANjt<-Ag@$@ zR%pG@%u8tYkxp|?+_|7Ie`#a|c{FPLL%^}=4vfv>tfEa~!L_y<%Nt2KRt7dF9OPB} zzbfEkCV0eO{IIDV;>^}&Qs~!nqjQi&;kDHkBMJE>SB7L5snKx!sqXp^R@CP Z6GdKGRk!__~M56s-sTmQH7e0GiiM6}Z0{3j2 z^sQ8mixC79a$u>vk `b zd03_FS2QWm$L`@q%n-NRB%8WjGkJ$DQztttApWf>&Pb%ZK`pZ8$qn8IxRi%8@p5e< z?E D((^>-1N?p+``B|ainOzKe0_ep}u0+GRB<^#F^AVPv%rNq4;aSK`5vU@~C%1 zs!>{@?0A;d6cc%aZB9 a~z*TmKzTRNv#RrMY8WMkA^^mJ6-BZDJ1`G7K|=l z6miROaKlgKV7F7GIevCFh$<>2=UDqm75SQ9Wx63(=*J$OnP;XSnkiOQ@^(I{7acHi zL&@7{VjJI#=+~s?p*%VoztsNnwM3^hdu8RDsGt5r6!IUs+USfbbaOw|(`DU4d)XE` zhbuy>7MVzs>y;V3Z`|(**9W|J7m!EWXZp z8Fm_R%(i-IrC51F4)ReP;F~pUb>L9gAEEGZ>{-5(N&GalgkpQ+)HWK;{tVGH2^HME z6l@c!uxrZAwpd8d8#7h18EAiUu8X(7DT#sS0mai|muu#I*05N$hQf 6_Xe&FpD(z)_D zO0IYYJk;+iVtt;1HI*n;sBXR{5DCzB#YzB~tSyE~_|`tXjSM_wJ6Z$eY|s*mTrE#U z4&Ew?>~wi=6U=Dh?^3jX+OcmsYM>CU^bVNb)LK84&TiRP3=WJZ9%!7%JSar_UOp&9 z%d66@g)57FIko|~7 XARws_ZqBj+n1%!tZKb6qN=GE<^7Nl;;bUKc2u*Z0!+X5q~zTm z_z1dmu6(!>FupfkY0`N}eq%0xpHV_dd+4eHAgPp9n;+!&{L+5?+LcR2QVoao`H)SN zIt$OMIHw=uH8Mfr*tr@Mj$4w*a#qjDl4Q ?Ah)@3@(S21>WC`7+GNBfjS`n8_@vb~p#0Qu)lbtN3z;{Y X}vh0Y;hR}A5-{hA}< zuRujNJHZ!e`1)Mc=McFQeJ)kP0*(dWflZf5vgDd-iW92sd>IT%zYBTZ>JQi#i#BP0 z`kK5$O6EDM7j^7s& c8O pT$mPz5EKqlV(8EB>~-{!Gp1h z>Sp=qu4NOKEW-%Wob}@CGvo5?jcyd?onH#vr@m2D3sR`grYn98I!JNUjH4_=bQcnX zL+&V>em#AJ%~R6Q!}~o6wJ1tSTTL}3?p}Rb=8GIY3zu)g55IqORO?;Pl+CW`?N*dC z_{6zLV4rS~?)INeABM@??Q5uszTwhuxM{s V^h`_uQrl+Uj+am?N>C5`GAJo$Y)-oSFMWM1am%V76``<>zvyINF-E5D~7 z(|&UhE (o|xJL$W8mT4iZItZujPdb|`X!i!@7rKN~|MY_zeBjJ8O8=ESe^z*o z4{$*ho`Y*2{3i#v%Ywm(i)a3n5wr9Gf;cj~Cp_7{7)oQkCTuVYHxKz0F@wx(ZcYJx z1j=jFL1Aa6i@>~4WoW+D7%2DWlnt-JUTSD>HB kNvbHMh7;=P)q4r(wz zE0~u+WFk;{wg24jUx7R30>LO^od*U=%)d^^|NMxBHLLYWI7OWQe+NM&`CL+im*TvZ zFxj7r 3Bq1LGwE!sD)DNx=hW z4GMKW;Kufw{aueUy=Ha<^t?*1wf@g|K*C_2P(4%&L}x1byrvcGLqK;+ApXp+2UiWQ zD|bKC3Dh}8Ljcu*PvjRhMl1C$@9~qmNv)>aY2nIF0L_}@0XQ$>_T!krRbE$+`&DjE z#1)KsD&9I+`$K+vM;bJTy+MIwOJO_3eQ0}d()&k{(Mo26+VN|ON%^MRVG6tt0qMx= zLMh;?EFi?^3ZLM>!{LD?A=Ju3B6uEPgiKXqfaJ<0S3m?1QVjV1bB+0hk62x~D!j%F z^OGJY{*QE01AJG-f3y<=Kz9k*UJQ_$gA63&*IJ-EG7pIe)NZyo4BV!JYq+^Jo<4Yw zem{7n3j{}Zj~j2FX*{D^5{;R!Y*z95n_1F$Olm{M6~G}gQk5k)$5td9e!a6KF~59b z*X}9_(2AUgMEDD8_uR8lQh@9|56Z+`kpbtu!Qy+W{s0B311d@S@+{loUsMv266)6F zl};55B+fdtm|2CqyFTPoivd-VcQ#VZX*p}*O-XCLKqe??;bmGUB8Pkxq>OWbemDV9 zx&%KlZipdo2$vGbV!F?zXBoJ0rujdE9x&t493bD)dxZ1@B}4qp6Fg&++JDNCOuo{e zh~?`>Iw8VE4^((Gg4!I65H+Rrps*07^MF(?a!+V|;8EG&j}X_=nw@dJvasRJ{peOk zs|3@K>lskumk9xWuO+6j2WoW~qFsP=QJEotD(sx}=alz_;NvyjdVm!I`!c?Dtw7f@ zz8j4H+0v75r{w;&WL`>$6@B=i@+(NmBkc<^AdU*Wx&K%m7`zd>Vs2pUN76A4;JIBu zx+YH#a>y+g=o|DwZ*{H*_@4L)R-6yu{d^k_y3NL}mbbr|xNi*y1ORxA`~t%uO9gEi z*HG~`Cpum}7;X#Hdf_ QX^(WLDe?We zlD4DjqYhH5*(&Mdl7OA}{i?wEUuI(Kyd!!HV!o^-&V#bQ1mhtGbic*4=n0k&BOrX} zxM!2d6Lh9Nt)~zLyr=V5*-g$DN|kTviabTX18jj+UTMd@XKvOBX=pwJjrW>56IJW- z;&^9TkMOR?=pG}V-4Ekn+wAv%Ho=1+6nRPhF?wg!Yqj10m8C7O!tib913}}^4oLp8 z^YljouB@pe#2o F}ele0tj?w^Pe-t* dcQ`U339DN$JfjgpoU~bu_ gz(;M6NUR-$BJ40pbLNyzw}+Cn{;LT9iwHv77UN3K3cRw4f$Fysk$C-iRP_J*Xqf z=XsrV6)gi@hpl6%tUNol@W~Y>>hV+yb|1hy(N{xGLHv_S(2Z$pW88BCgxmo@G#iaO zWd#a~d<*CSCxz%P b+db3 zXNNJ+yV r*0s0YWmAVH&BO*lP? epp`$Iiggyu;q4XLZGUxbuHg~J kxG>0%KlY;K_>HB gbC>EICxXjCBk5RRR9-rEPXGkO8r zK7`hLCqp&55s9_F`r0t;;+YZ`x&e+uWrtWQh}+e~m#QM1eWF{D7Bc-2 fu@>rjPT*6w2`R9#yEy3@wVEW2s 4}V3!j;{XFePpOre>ofPHn-hHD1y74Cl5#7&-UtwQ~WkJy#jVl zFJGopgK}Xft=sRYMB>EQ+LiDD&)AQooAS}KtNiC#h3MspJDexdp7VO`SG0Mxis0|w zF&oT!dDrQ%otUtG&+VM)5LTh}Mg<4(b>abM2EM=5ctLsvC@v#UXp&&4#h%uaN$Df1zO5EJFxG9+Y#4?f=E8c1lb4BR#2>h(Gl z-vPYsJ7q)Auj^PZ5~(~UE$?UC@s3S6h*2cVCDtqQ^K 6MVix!_ngt;+YEVI;XTlLjI-SF+L9tUC!qu3M>k>p*v+ zr ^YHpk0?4M;mU>=GEdub28(^+K=1gDzR1@tl{&d zc!)*(LH`3*9)B%1I(JRf!ChojbJnh=a-?jCkZ&rbyE)#&`AjA`zHq#yfKDG&D|IXl zKHsK^n1mzOQ0X#9KFU*yz~UhqNyoaJ!w0wUZK*&DOR- =XP=|$rZ@HcOPy!C|hcu{Z+Pf%o+EX6d#%f 0LFtmIbt#y< zeu;}|2u#s4Eg26fp^O=zy{FtR|7;V1Nqm4jSyqy>dk)s7bAdWm)6LG=CQyi53e%Ci z8u0#c<`N5h!N5u7S)v?!_DuK7gR~u_9^It34zJrEe(5NAf(@Q^`FUqh;6dfGnU%s| z2`@JzFz3GFzI2E#lRflG_R)0^+*SL~yL8>37a!UTS*ZLLMKGs9r)mwqx#5`;{Ye}> zxxksqYjMgp9}`mzk7^e!b%^6!y7W%uE3@Ei44qJHNO19n31|&CxrBc>B&A;yXZ{v2 z*$;xuK#~+cjLmtBya^0uD;$1f?(_Okp758Em6V+iZp*PV99Et{{&B&GOwR$(i-!U{ zI#yE)-t>x{yD`NSe{U&P8MlUU?0=IjP%b`3z z*~@OwQD4+y(3@ !Z#oKQf8EGGEfJB~JSitHQ^Qc1+6BkJg+k>M%4fnP>kO7eAFub;?g v-;eJ+>0f7*C?!{9H>`JUQ{W4Oi9QCqCHn=NQMao)rJ3Fyh$mMMYBb{dD zGm-6?87+~a(X^oE(&P96$GFz7biZPase4Qp%70cRJ#J^}L-V(sojOEZx4fGoIHx^4 z)U3oVFHJzzNfqhtG;iC7y+GvgAegU!CO%GY_tBB8yM1X&iaWHb(UZX{L|44>gmI^C zaN-msi?{z&4b-Ow3hMh*DxO_rrHu8qdr{O`gy$(iFIO*k6(ky{NYwzP1u@>7g}|E6 z_r$V$C?CoHwkvtSuJlTIdqlVo&H%#yQCGmX-Tv}LR$G55qT9J=F%ezqFxPeBd2Cgd zL1nt5Zm@dZ(%$yMf)NB0>7=^~-*e2mQv!2!E*jMO5H}7q`OffS*Ce^0Y>DuZJ=NG7 zyL5j~$ZKl_T{W{&2mufK836J`*-tYw&0c&Th_%(%e(*YDZ`r@wWxZ=^t!LGfW}1pK z#YB4*0d{kG39@ZpdHvcH%OJKKY@aCJ8*fyujvQbsK%yFP_QlcpCIPpltlubF|56A= z%cXTtymXKG3KFTYOk@DfD)SzQfHRhHbR_S{Hu4bq6dY=80w!vmv?vp)>9lZ9U!TTH z0Z+qmgFfS2Mn6PyY| z?fhbXnka}k6{`3-1lV630D+DE+^t*ea##@v`j@EPLj8g5q~?5PyBl|{!%WdPLJ_{X zrXLhTJ1iV3Em=J6Wn aO g>R S0Ps4i@r4%;R*KN)>i;D1_358 z2N{h)Kv{|F)1o-Q#@wlI=xPp6a9IQr78`CW`XpYN|M|lw(rR3@>Q1I_86u~QfIg=c zSA`5Jav<$(NQw0bf5r8#HcL0N0C`p1J)0!)iR7KII9(VRQjYk6ZiBK96Uinnw_$ZI z>*ztW-Nq%i8JlZ~K;uH}T}!QsvYu!E2Y3h|QF4}sA&HrzdSB$)I%i1UVXK}g4V#ep zMj&mz4)7&qyp>Za11OE6MECwy5I-^VJUY8E9;HATmN}8J%*L(=Up{3TujO0(`8J<< zuUI(JD7!vA+R)~c72TSXT^Wzg;t0U*sPxh^X!oxJxs2Of)>y6Abm70MSV=~H0~vxd z^U6Y%Iq(ug#W0^P$?V>k|5?ejxR4{DO&L}wtOo&0Pa>}e+RTWtN?37{D(as#E*t+{ z$>cqo_clc7L_iK_SGpH@xUX>hxu}-gkiy4aQ$5gWx!@HOkwAt7)y&fou~a9;vipPb zeX~whnh1HIfGu{P$raLW;xdZd=5(Mpg?mzl27{2)a4o>ys&eCdQ0frTc 1hr4X^T(%)ADa@5Xr`%ZuxQ~Eq@59gxNCG zzDngHl37=ln3g}?<&_5Tpf1Fx5AdK8ALTc#-Gp4HBf3^olm)w LsIB_C43Pm9uZC2>vQ*LGCz-lbFk( z0!ENaZm32)(E52d2iKK$14X~3=VN~#B7iz2in4_Gm!E>ll1(R0mq&}R9Q*5#4OCo> zkD>ZgKx9${c+BdmOV|HCgaNBS_?Y{%ymk;8_$`6+kCT5P`V}aEXu%H)YKpe(79@W? z< f!~fEH1$Hr<^ODR0YoOChPR~Aq03N>`Psuzh2NdIDa!;*x|npp}-^c zDt{&WRS|=3kb@7LfAICizYb*?fJgebWIxyK-;({=#!3Hn*`Lq+--r3nmH~M8KlA^` zbNus|zvCKEg!~s|{E1Kg1sQ(@VgHwL*_KTX&u=Y&e=*wcko#Z2@xNsPb#vn-Oi+qa zSD}R*rv>~HDyer~Yd(8beU7 S|Ax6M-t#4mRj zHzyO GLy y5%ku6)PoZZQGgEeSOCPEVGLQ50>Y(>af_f^wV7;S^2NRvQVP7o zgX&WAw%V2wH!4dEAnbu-n<>~eDFDIUD=`4H<8>fI+8AmCXg53U`E?r