From a60facbf5590121be0138a5e469621a1855548d6 Mon Sep 17 00:00:00 2001 From: AKU Date: Fri, 10 Dec 2021 16:31:42 +0000 Subject: [PATCH] 2021-10 Py: switch to using `collections.deque` By switching the lists I was using as stacks out with a deque, I appear to have achieved a teeeensy speed improvement. List `append()` and `pop()` methods have at most a O(n) time complexity, where deques have a O(1) time complexity. https://docs.python.org/3/library/collections.html#collections.deque Signed-off-by: AKU --- .../2021/10-syntaxScoring/benchmark.json | 12 ++++++------ .../2021/10-syntaxScoring/py/__init__.py | 5 +++-- challenges/2021/running-times.png | Bin 54773 -> 54727 bytes 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/challenges/2021/10-syntaxScoring/benchmark.json b/challenges/2021/10-syntaxScoring/benchmark.json index 2029846..146aec6 100644 --- a/challenges/2021/10-syntaxScoring/benchmark.json +++ b/challenges/2021/10-syntaxScoring/benchmark.json @@ -3,12 +3,12 @@ "dir": "challenges/2021/10-syntaxScoring", "implementations": { "Python": { - "part.1.avg": 0.0013953149318695068, - "part.1.max": 0.003077268600463867, - "part.1.min": 0.0008635520935058594, - "part.2.avg": 0.0033985512256622316, - "part.2.max": 0.0085296630859375, - "part.2.min": 0.0021257400512695312 + "part.1.avg": 0.001248321533203125, + "part.1.max": 0.004151821136474609, + "part.1.min": 0.0008554458618164062, + "part.2.avg": 0.0030763609409332274, + "part.2.max": 0.028047800064086914, + "part.2.min": 0.002079486846923828 } }, "numRuns": 1000 diff --git a/challenges/2021/10-syntaxScoring/py/__init__.py b/challenges/2021/10-syntaxScoring/py/__init__.py index b35edc7..5083c88 100644 --- a/challenges/2021/10-syntaxScoring/py/__init__.py +++ b/challenges/2021/10-syntaxScoring/py/__init__.py @@ -2,6 +2,7 @@ from typing import List, Optional, Tuple from aocpy import BaseChallenge from dataclasses import dataclass import math +from collections import deque CHECKER_POINTS = { @@ -24,7 +25,7 @@ class Chunk: text: str def is_corrupted(self) -> Tuple[bool, Optional[str]]: - stack = [] + stack = deque() for char in self.text: if char == "(": @@ -45,7 +46,7 @@ class Chunk: return False, None def complete(self) -> str: - stack = [] + stack = deque() output = "" n = 0 diff --git a/challenges/2021/running-times.png b/challenges/2021/running-times.png index 784194cd0b5c36a188dc175bbdb20625d1dfe3df..6276bd22ddb7ab5e6318962cf3d6849c698f069d 100644 GIT binary patch delta 19427 zcmbq)RZv`A)Fn;UgxR^wyy{_#t)jS0=NzZDz}e3%H|vo4_gpr`VE2+K7Gxkhokdd zfH8H2vZY7={H=VDwODK)N;V0JA|gIX@_J=*)PclaaHX>5`00s4yLLm^$TRf@vaN2j zFDu|=vYdUwN823@rBA6?Q`%OEQ9_NBiIFwUq$bGf)0o06T{Tf%TjRf&6ffg2r9Hg_B`iy3oI%~{y7n6}Lle+qs3w!OgWP&93IpWRfQ|8^qE2D#Yv?9tML z&saR!?(=+Heqryt&umCh1e6<^q|#EhKkeUl)fSX8P(c_awYw%Fz7%yvwnOzssPnCTw*Z1z}XCxrZ!!> zj>S8Z{?@nZIB+nUf`lMl+20{#sUpnad{-Q!zjC6=%KHiT<;{fEqV>Ux0vX9`89{O+=BLw5l5_A%l4^_-qz;jT2EoI zPENWP8-GSvi+METS46bZXDv6RhtK%c2RxfrQc%$ujJa8b#x=K!stbt~>r7*L4PMx* zX(XMsau1w*3CPeg~G1<4^2rdCQNgdAxdIzPF0MU5sha$d*8@Gu$04M!c@XsW`>iK#3iv{PNG zSArNd40U@zJNIJav$?k*&P3N`Dw&wro3aJJPVRf&W`N+^&P?=I-|Brhz%6euKgU6; zw!&_$r`F^Coyf9ZYz-m@eKGy#$=HT$>;dLds_wQY2!S-*9ma9CxkOCp4NXt%p1IA9 z?-kCF=wjf=@m4Qk;9oQY+VdN3r+I>tUn*F_DOCPqA!_q}&2CTnkS2E(P152*`kH_7 zD^0qlUv%iQv^0|F`o=iIA4k=-47MXXWHtqS4 zyKP;q%_3oQK7GBBN11^YG|4yL{4qpA*<*j8!z1(pQa>Xj&J23 z^uq>=G=Wo{BD?HDqJ4g96I@j;Z=Iy&foQj#)5#W36@Kp4(YopeKO_4u59<^ha}jO! zCmF}bR?-|}7r-EJeKzkV10@M@9dkFKkf_V1Lx#-?(AMqTd=S@6Wh{KxZ)5b_eJprn z&b8Oz7goe}6~(-Eh!yc zJJ=sb){Y<7gd?vglkwdLW5KcZ-OWKLC_THo?PYVZvMv=tFkGgO9_Mw~{sU+e5 z%+mi-ou{KKI(OsC3XXa8%i=IAL3Pn*q_&4yn!=+J>l8P(>=;;cWcCBs$MW1GEq6T3 z!#?2fClXY#jigNCf|oySWjK9}hH$B%irHpeFmk!IgSZWp_bwGXck%XePfJo0VmXyR ze$YT>9w71V9rL;bL9$kSRBH` z?N4513+e6qu~1=Z2P+pGp#K!vzVMhjK-^x;a8>Jhl^-qQZx&l?W)h(>bGpCBq$_vg z3x2L4c&PvOGj)K~*xZX{72>N&fZt#KPTjVB73E+Sm*R#1c-h|mrBz(=3`MbE2N=k| zSv?YEM9Q?_CWOWjJuy(@YhA+FM~%5=y``fBzi5T5&%5p8FA8O)N&PW7E*LS$ z@PN|wN#cgn&w%R1YfW~gewV{O_`TPg*D$ZJpfvexD`CV3U6Q|gJut&nXoL3ENGx&g zhhN8X(0pHe4R;zt@&USyGB=q}%$NdV7+(rbw16dn_AZ)%3^2bo4kUiA&2>H@hTJ;c zSlS2wD}ql{KnXpeojlB%rh1)^0=p;up`+D9G+J^yCu#*b7SeylkY(o7odcB0Z4I7X zK9kt{0?Yx2;GQM)m|t^XGPyrDSw&#!X~ zkql8zK$k{+2k4)SWR@3)g}mcTxLMn|e4-3U6re&-2#mJACzw4j|7SeIc*(hc>mo}s zBrUx$IoLVptNLRK>X1Wl(#g}R#|?~^;FUwjKCCo+$53c=9c5c-K0*F*gKmG#r!eVZ zA6Rs>h;EM3Yq2*U{$$M?=u^8%wad&?tcVL0sJQ+F$gm%##C4+^!9vaXaE0TGE{e-Y z*351km2xS>y&u=zGf_k;s!KDO{K@n>>rk(=PFlMu!2$-FLl|O_Y#5YRqmh+fQ>)to#TDS{(VAJLJOR637DOJmRPTb*}eh z!v<4Mn3F+2xyEh)ubEX1Ka z_P62nn}0B+)>m&Y|LXg*CL`pX%Qlln?d|+G=yFD3^t?h$e7p}D1{Z=l*0aweWWPV? zXnaur?ml57s^2qLLs;C;Ak9ulz(cs;*dGy!jAnL)UM0ww45WwEYTML=c8eqbY_XB0}5 zGR6FA_ob8wx;+`zoSwS724V62G!#Yn}JaJ#UEXGzdqsqn1=hi$)<0ib~4WlK^SDCxbe=V`7kYthD+^0Zjl+u@`*LJfP4{>ckwb{tfthoM#``Mx1e~2e- zb0-bp-%{ajF?Jfwhr5Tr|Ei(Z(-;_;Awi2CX4WHq;dzAb%&OKetf=M2{x-q4*Z9Qt z%#E%kU0L<+;$V4%?4mQT$y7kY<2A;u|EYai+%n4r{!7#3h&qtw%f|EzwOGpv=lx#! zbRj=7R1FO559Jm6w~+|Kyi-#=Hie=mIcpcBuJ8LhCx^<%*EdPXlS9z$(BgcqD;T}XVO=aX zHuein(DqP*yKbhKi}B4U`H;PRVteXOBrr#>kMmcCF}ykFWCx6#@TF$iGt3eIPOlL{ z9(+|yi}ADPZh~hX79vsc3;Up11%;1g%HVzds}DC=!fMUqK<~;cK$SfbR=h-Qp@Dup z?LzlF?LhQAtmvDoGDpvrj@}7lEPW^1cBboz7ap{=Ws>f9Z<&>?ZRf%&p^r&U)}OT> z_$dt8?mW?bwn?^)DLFo@YycQn{Zo^oJX!A!kj>f-<<6CIP;@7>IAb-?|8X6VF)1fc zn4#)sQv26sTP%$8|ODrW_T&4yhrQ#|cJ$dhkmF~38+ZyvHqPLLO+ zzfvreo{e!VWeCc(^>reM#(JrwU6drUX!mfDGDpmeZ;qFTQ+UUGlN9reSDHO-mK&$T ze3jLI+bfw261Iwxmm!6V0FHAYiYQ!;(AOT2AWo)tjT{g=7ON@&l52l|?G&~~xt z)&kN)ww=yxL+2l-#Zr>e)%eIlODH%37ahFq)#C>hoFK_bW$0UvAtV)5YX^BZdm639l+?>eJzWgs4(5lmWxt-|v-_Y_5N1X_w45fG66tAVcl_Z(|wxAe2? z44GKK;Ni|H_lN7~r|sXHu^!vuz9x8TBAVzJTLd;hk{=TAPW0j9fXv(AK}|RQ~Jh>w8yT=jTGJ zE*IzL050Y zo)v3W_4+0i7J~0T3Y7EQ7B)eH#=ybZI-{1b&$J|3jN;XQv7e520Zrzsv3O$Qf=h5r z_(*|eF>Cp$pBW+KEfXJiq)|#-5U^O)U=E0=sct4)0M}y*CTbG9vCs7nx*kX8WHktWShAX7^TXobI@tj}1%vrj5{zHgT-yaTQ zDfo0!!VX_paaOH}SJ=eC_rtc&`PM^@=tfU)X7gUA0KA%j{MEw16?b9bAL~9T;tB5S z43@Q@fNf`{y2tairaTcq^>_R}OD_&;#bYxP2M6c0PxSfc(vnVZ1Ys8#XSY`foURWw zU9K8&P0YT86FYz>5z1 zzihmX<=Kei3(}9J-UrIVG_YfOgj)Mn99G0?Q@$cWocf5i_BYGwIlPa;&Yq6p69KZA5{=LK~kJ zUND8Wra%5xpYLa`br2|v821m)hzPH};3o1ozD^n@zzd#U-ti~I0!F=S}w76B4pc-Rql?oi8Z~~ zitDzFmW{J4LYOe(a@7F-e-3TVSjJ5?2lvEqUodC##oMpL~VdM zXD|n{cI%%#T(1!#u%dn7OSOutS@>5OKJWJ)KP}5)a<~JZ89{Y&PT$H@_gl~qPu^n7E_gwy00P4 z_lC*2j`hR63ovgX$V@hL)n9Zbi*8RJd4QPTFQ z0aDAywhEK?k6tq?in;zldtI{3YG|f7j&#`};~&Q0AK?GuwHC~;m2dqUwSI`#Go(Cd zqa|$ELAfFAH+NNp?{WJLKm~SAD?Oti6)*N>TVQd4&~T+KmrRfIg+Tb?p8!?Sq=|2SVt>Bo_gAUxmLY!OGhcfW2W) zF1B8jtd4vv6!JvyQL*JqJPGMirge{WisG6>VT4SSfyc`!&vIEVV3}H6es(iS%`~4h za)ORuUnY0X`Soau4T8%Oez{q&zHZZ0E!uOTd^dLKf!D{Y$FudL{)3ug6!qvKzayqS zPq~v56K}U?-ctXDoKDI|k@@7Pu7XBZa^7*(04sN|)g*)&uE;+~PoE-DDd-vI7S}`E zw7l1tRu6~P8a}%<0E|!}E7JeXofYIop*8a{yvNFXdWNfA^|pa~RO_&~DCwWBy1}|l zi*6JBvs60Cu@d}wWyzVM6 zL!uXdGmFEnf=AiytBVvjZhw7xt~vgcK?Dt^@jifSWDzh7L2I;;f4|TFx4CAAjn%If zze#+%wxO$qG=9(Ib^4^ioOVrf|KiuWiLR zQ&9dPl;VSUT9B0-gf^SgFUPy~t0djWF6ZGzIg<+Z6d<+jJ5`&!zsf#x77ND=Bs6_?9^*D{Y_@Q7kNK(pV|pEAUahsx zLrc%HHO1Kouez@;61K|lK@KBC#A>RYZcscx12oMs2m2clN^O~uu@q>PUWAPT>p67HU|5Mo!Oer_O!yo%?q9b*fc{@BU zuii7a$YpdsfWs|s*Lk2^<9$HW*h0@}u4Qr)Lgp|3eP29XwyYF&BZ~L^Op{N-8mk(a zl;0f$zi5pNqnab#2}KU^W*EFt`TXn26_7&x$og!j%$ufSFpEHqyku0~n4msP|?janx}u#ENKYz{y6k>tjm zcEf?+=xRxc2oGn>&Wu=$2YNC@mVPL!YPWvdiwEg|tc1z}qLgqZA;;nn+}(rNY(FVs zZ$@;;*5FnxwEdJ=SUlS3^VFz))EU7cY;IqLE>6Ro4LE zUm5E^eAGEVm%W>ewbWrBRfXAUP!*iuN)+LW-`YD?>aH6;-m++j{9HLi9Pv1v2c4vf zw!){{8TNABo$a^>&!?rY7A;y2T$bIG2*wO# zsGrcZRhI&8pyh*wiV#>JxGZcA10XI}uG8r}d1*IS#(4`9o^IaHr+AdL@YgM zL&99=l(W=3!9lD!tw8G=*PZ|Iwu*-ucmG2BT z9eKz{K)f5EB(o0Y+;cf*kVn5<*jL(zKGcPvnVgR=5)szh=spCBdOPjQGI1%SX z6f!?+N^5izBX=94`G0b3GFWrQujv{6k0nv?kWDdTbvYQ4Je%TBIdvt2ufjS*-jNqm zPY)xzPp_wt8kzwTG3bqNvC`8lJuQg9ID|oFf?xoK|6(`VKqK+xrT|u{N6=2yoz(3% zKPCOn=3d2LNL5&2=~e$65&cd0?+hL}G)_yTX1cYxNh0jyL*#HC-+In=PU2-|zOcQDZASlg)e-Go2BQ=Q1$Ed{-rG56jtl^jn^S%F>=j^5L*+d3-NZh4g7!#Ib&dUK zF|irz?Smq2z4Vjd&=f^Qv%@Zv-_;oEFU?{;5{Apj#$DlbkZW?m2C>$H(G5YQ*SQ9! zeHybfIY`;+V40N?u3r>)&HiK21>N+xqPdMJn&{*gHT4GX4thMPgbJ>w;2bQLVixq`1xv%F+)cY~dIFn}z|=wJ?SzXy zhoM75R6FhcFZ_C-t&dn}9fjz5{Y5p$J|Sxr2ivv_)XHvsQ4K|z=~YZHCc&k^w^>Dd7NKlCAK#`uH?bMkZUhdlp+b_ zJY*tKTk_9*K@xT{xYuoQwkfrZ8u}2!6FT&o56nP}v~plFq-gnf?3niPTU~Eoc@D7K zlAf$ZqL+~o{mq@MFr4cJ7KA#4 zr!r+e70YIdovK};P=?}Yk~v@T_si43UmbR?Tx}PoeRYLpc2QBeFd^1^HKq#5%2w`9#Y?>vUNY+wPK>mS zhg0O7^0I>B5`LJH>rZ^VTuC3Hdl9mK1i}CciHq!o5L;&7^1VadJdo6|I+PzW-Hzwt zAsZDd;kONjzju22g@Y$Av)(_SW%eSPuIGhB@hnn2m)d(Dm~?Ey#x$M)Isl z>%n7Eg3j=4U2FToGzNh0YyaPMzu`B$yiM`NEg&gXHP`{5n_lb$r)Ud__Oii^vP7hoC#xm7jF9L{D4F`;##@->U@^?r`8JGAyYLe^2Zj}vIXuCa zs!@l2cvEXJh2^RoDQgi8iJ;pG;QmH5W`7Nhu14d|XqR5iR))5!yfpFQ_S;XURFM!l z>2BlvoAo~xnDhAn!-YS(#56|oVPACQBYqd14bs*ycX+_4)r`5ao)!7_~re5A2EA|JL# zxPn~vx#kn)F&yC+k2(9E<3R(aivsD=$Ctekk%*0IINg__B zzN?_}*nkG4fjw=$5MkgBZ|oQ7aQi_$w;rwjOZlnat6Ns`2P|}+F~2=-<2wu5{;J3Z zjl0P|$O1cD+|*eK7lN#lQJz7B3H>4Fqx84wPy`e-Hg>_z8bJBxpF^AC{vT}s(R%q_ zh>@1zaPFW4f<(tmyX8Ya(DOI3s4%5L`g5Fd0QFtdC%n&}w+*ByR!>F@T#Wd<6}O#R z%HoJ~X|gSe;ASr)AP>!mff;$!-WO#;1vyi;21AuX&C3+G$c|3Q4&S ziZ|g@7D;@XSb@Ob+W+{HJy(1^t!&qNDFhWd`R3vST%-H7IU~eyvhJ;F1aO_QWUlCvnW06v;piDWsbX992QFofoAv zs0;yF@C8!mgvrz|jhHt424UaU2s2$)w_Hc}o|#^3Sm8}oBZ$`Sg->M0c7GHU(1nTR zlzjs}>BCmN7m}75JYwi$w2JNYN^$zfsC$Luj;CH#HOD!?%Me3kV8v!N_cbYP=a-5~ z)tv?pF}gWBn2~}eziJEro=wYrY%HpRHwD!eqxgb~N@}LC?fJ9p_VNIpqMWITkw-$r zb#C|f)6*=O*CyC=6@&{kq@PM(dc#I6f!8>4`-=`-SJNGbG0WZf?qJ08*(R1v{4(FZ z0DAh^M^{R)3|5L(o)mJk(rcj}5?)YeT(L25`%dos{?Wn0ppgHuv(b5kzES|9l|EgR zoiH!owuq4(^#@uCt3=HwER0@6UBd1oz5e5w!21B5fi5d^>IX%9HeU;-I7FZaW6Rvi zvEn)KZSPI0t5#6a+Lo_@pt^e!JsCpln{{3f)>5-X6tB`0ju^ntJ+TVDG&!nCai?Yu zpKm#Y*8ihGHgL?);0S_-=M8VDv`9+0lQex0}pZxsFZP;VjJ$`^aP2B zh(`_{vVo0n;9wrtFo24>)^$r9liU- ztiqGzW$B1BiTi!)yoOGAm-|nBEne!pS$d(f&HZ80<+h&Pf6O?g0omc19SlRsFX4X} zn{2TX)s5C00b0?X0xJSkfkU+4(SF{jGD@}?YSywxy&2i2=`x0LCD-qlASk+!x3fOY zLCpai(Z;WQIy+NT66FSAJO)BP%i1*^Q_;rc(Y{aRRgR#i8cre)RXhk6k~sKswfzW& zm`hEjXIw;<(-j?qtc_DXmKlS+M!e7D-T67SkzWBdl||3Tr;^8w!il3~tz(q`ou#HY z(+aE4EZyL(-!l2=Ye>$+9}S44VfDRs>SuAvqZKW$M--;HMl}ven5(8E_NJ#Nnoe6G za+jR-vV~I+89}b`V2nVt;KIg~!WZ{h%jcV?lH*1A7mUU)pKOXwr{sCp*yFT7H7cEF^ReWw1?Z zkFRJlQ9Z@tc_>!Yl^wM{!NJ%U&ird9wXZEJ%vr|q*jPC_2UF#16g3q_+Z@~1*la>v z(yf)hsaOV`8dam^HBE{S914@boHs+p@03Xm^|D9VkT&$UH0WE6^z_|9@E-hwGZp-) z#q&TsSXesHW!pJxzJ|y=^o_6znM7?R_O$}sMa`BYsz1;o&F5A8_$_p<#$eR{57Fd5 zOmanbnet@$TuDqdvp*fVAiY$9Z8&+bcTjw~fGNUB8Q?R{9SfY!Tj#DsO=*_{Im5kR ze@RuLx_g|FZG5%Ad||=9dQwbxFl$kY`ho3|Wu;zqwPP+QnIZFfGH3RiJYyb|YzUFnN1{aHj-WXMtj$BI3Qu>xS&tsFV>&4v|)hfn24L!nr9@Lc9 zGl|C9H2tIebpwF1cf;v14Q<0J*SBetPEEZizw&H#Iq%LxP9X0>b~zzh7TJ8FT4g8V z_~bce7MoPiJsq6G(~+bs}$fqa{q_CXEKFsC~EC1&4YhYa!{wqk+-DkX<(WBIK zyQ0QfxSOmfS5&@ku~F6|oySJku3>*Lb7gPkUokOb3sy@EWxqzGb&yt{C*jEe)%!e@ zsP(@umXe*5FnNXNfwUrjGpqNP6Y)#*Qmo*$^%TU^A5`P!g7nbVXPcsm<`BL6czi`G zZp7E9_@1-l$(>KVF+82kC06&rcE--`%TU46SF+m<4ZHMd*MU`#$i92vMdVM?K5+Cj zlEC2n(f1m>B!Z@F#VU%3XaPo6Iu~8DO^u-6VY$z5{GZLlM+C$(ys{T)Zi35NK{XmX zxxLJ0(Xx4dWy8#6vI0UWNk(_4WdX{0r^RfKidDsVPn2@;QmmAk(sJYEKwy?8NTE*# z_wd}WeAP4EeC;vb+F*i{u6Lg?AMpw0q_Ted|JZ1MDd2RvD1KMWm~S*;r%!t7{{xvTs};4g)tUy#jC`s+fdZy#4c^fp35?UI)Z*Cy6ob@ebV+CE!{E& z!F6*lw*)Y6956js&~MGGZR@7|D`P{DfU{8Hxf)EgL{4qdpI>Z4roHeX_;| zp#oTp3=@#`MHo7cME&EEn&cW)1(_N0B0#;CrY*^}#4y(jf&#JquzzB1;Zog__v-n} zK>RB>a>yO`z4On12WIo_gEQDSd%41ng5iZ$HiGG0psse#i791a_&v=On4g4uaw*PeNji{Px_wq-3gz0MOEo|08pmb2MSG~ z7)TiYWaKrtZ6Dy|USF7kU6OswEjQyO^+%WhlCvg;j4T^S(WbRGBA{Cnp-JrlUkz!68phR?8D4p>Ku@JU^HVd3Wke_-JS|y1qwW}6(Tix7)!J5+2UQ!^xjEt)f0rU>U4Is_5qiY=81|n*Y@9nzih5 zOQIayt5@AxylXp(Ky4lMoA>40;O87!Y053U7>wftSCq182N??2HkmC!sacNqWb#0!@k*k^E5P!2X++<|D@xOU zy6}Dl3;1~LKv?ijon@$;_rRStRy$gQ25V-miqpxc4H_c3z2dHp691XuH>T9|fPwMr zI92rL%OWqZ91*EylM6Tm%9pS z;OUf(&Z3L7OAmR&aRGtQay8nG?l`;>GAYrfRoj3CkNMj{;nJ5w^tT~sSBUNFE>5kT z2eLa$+3tAmMhV(Bf2NFV&u+5mFvu)u7^b54Fo0KaI`SDMLwCYPEKGcf$i#+kGtU!J zuQZA67QRbaQ8%)G2~_Q@j{xuYKz0(8KL&4L(nN1*0#BgEaz-`bNB{khNt-#(H)(R& zqzBft0KJxQbl&uKlkr!|J6%s8TlYp;({}giB)a14Q@r%Lfy3|Rde2@1yJY?xPO)Q* z@a)nM&nKf<+CkgnEz}UMmdgL6;$wmWLf4lop z1_~rNV#3d0v_P%ZuKGz%W_4-1wM02^n&Wm`L4I8dzaDyv$c3$d#tAT-FD4L z@l9iUYGe}X!Rfw38p*~80{9oDI>)cIa=AbS|LL5w5xd3k3VDlXHn>hW1)#NZubch{ z!9kFKkHaAQRNgkgouzI?Q8p*$SI}d;tgrm&iy{%+h}8r>N>-q&1foXhIV? z$zyJ*8*wF;CK+We`XZh&MSR!PT^o%iTZOd$Ks;j}u2FFZw|XQPzPx|`f_lz*7AOO& z$;UixOnV8+?u2dzSfUj@4p9ws`Z^`ntmfaOR6DL91_LBZ`dP`v4 zzOJ|VlM)w^$XodO?XP20<=s0b;(vl%;Z;ePs?L|G&*oHS&7v}nMofq9ti&P&P>_Gk zP1Eoi5gfRFB$(-7d84Sh9oDC&WLBYf%5;z(IRIqR3iU_dVIyYF?)NhnY&l3#fXV_zR#`^7|_xjrLB!@Q3x$muY%FzCLc|B5n?bxf89B z`g!g~v!Q@tTIlKoYaRTH~w=1D! z9bkctlk5`kAIBbSpSlSYEupE~3P9%x>jbS?=$R*sv2fmpDkW07a?VXC7*uzO_-$#q zXI&iMXTv2c$dltO9%MDA6;yDr{p|32JZQX5_y&TdL#yCjgkQ=3xEsI_kHUShg!IQd z%`hgEO4K+Uf|5`o+A(O4mRUD5J?8@4Cu(@if7+qF+T1L$Bny?xobRuRLvZSv`o&Y0 zeFy;uaA)%%BeIe#W#_2N+`TVu{0cDeiUOsdYYGMy-PNXHWT3p2U~bog$(T?2KiMd7rfOagGUf0qMft1nfo< zMPyZ+`X3ZkO^;7jJB&ETRXW$royvCxv>UHn%174MVuMA+CX>DJN=2_lmqarnd!~yA z>dM=u4kmV(Kv8}J17hUP=j0!n-#VV95D*DIUGe@j;$a&f`;Zz?=~`@(3jCaO!z3uSoa$4*=J4d zyr^p_K{6@a!(o_qSaH}wK*pNo&m>~C$TtYevDo-p5}ezM*!b17AMn9y5S@lP4g<40 z7c7eV=`x=MT_j?X+{u~?RcpvudF+4TGt}}!sDG&4+~hH&=$Y?1yfiNK=Ob86AvSA#_8UVEal9G(4PjP zT|7vjTT=WPZ2n2z{%dEJ;O8?YswH zzn(RP!xY)LH)8#2R^NWw*lp*n#ZX1n(o0>g=+zWa+M1k3X6QVnQRo{avFSAlHHs!h zyg!!6M9C2Skt>8;=s4x;(B(^n6(@o5F9Z{!sreXy3aZnny2GB$ zPl!PDrjC0m38}nCIibQNpT62iMX`}A^9({71JR}mPIa=VLC+J`)E6#?16K$VM3N-#ObmHEuB{}^-Hvi>ZE(s)Tnyfn zCgcb4q_hM4t{sO%9A7QiG0B#q+3BAqc$FX}i&n+Bsh?q}SWhqqGDg-7cDfjsN~X1p z9ds;4N|!x;bO*bIE5L)++JT)>GlyK7y&c4*AU@5NTKJ>TiqGoVwXhJvq0qHImG8tS zQ&t|UXGhtx)LVc&yAv0IOpK-qJ94#>_2s4oeEtv)hQ#P}sS^jD`){~9C*HI2pEiOg z5jl$i4Q%PqsD3)SO^~SsrOr|{E!zsVWzRl5*viHNmx-}Z*Rgu-JSmaOP3{-{l+pF9 zllv~9)HAw7yN<^z1^j=$7KrYpkXxZisBBurh$AU|2T#NJZr#2_yr>GpC+A$D% z$7dp23B|0WK*ZrR4ZG>>g;aS;47{^}{$=O#`wx51htmi$_M^9_XFHc_)PSD|!o4&c z7N$w>tjU_Z9-;Yp6jZu#hJvqOS&K%IyUUZfu>DLoyMhi{X?ptzHLzv{xL-KG^vveC z(>f^LBpfKNq-yDY-A&rEw3YqEY62sWJr)K-mD4M8?v6<<1$VaQy2(!D0yI~Z?oXU) zHBDX!rb313#X{lX;cd7Ggod3L8{^^P_EZ@65w$4T+1X|H?e6UGcnP)tryD)%6C`sm zPNlAN*LBW&vLKKkf$t5bNe8{9rhP*|EUs?^mi#M84&sOJRQpEl{^KO>? zD!S~BcTh(nrT~kS=r}~Yh2h9-R81nz8i_WW zqx5fHN67dl3erG(KHoS*je5J_G35X;R>&vX!~OwL?SwOT(`+{)SEK4M&5bmb#+CpQWAXEQ`H-e!T)g zKlgQmWlfH&{^Q9tH-IT2I(n5*RW_xNahuE-#uU(ol7cZ0>f4m z`IR`jBTo&nA4Yte=w1xOd>)}u!)vgNO`)$V88}+YmFu>qo;bdLW5*glRVw;aA~10(QnO&()j>OR)udGNT?1`K zH*Z=|u-=ZB-A1&dX^_4Kp6g!d13)>aGFp!$8uWZq_ef3)he1A5K4WZb78znJChL+t zJ3R`;c%_#>R@HgsXK}beW54TY)Af)K*hu*izF75q8euIZ>RGGzyTao9OT#|-NBw}- zR$vUSbcaA!;oPkLv_5%A@PNFD;}-G&c7{rUeEsmgkSJnNwlI*Xtyk>>LZcwKNCqAr zd|oZ-&CNp5L!hQOB+BklflEN3QK1hO6z#5UIy;8tvn09Wll#1|4jwAdl6=fXes=G8 zN>o^`>;0vmDl^{{mCrPLQd=Q8?dhn*L?BG8)x<+*VFiJGV=4Yn?WfM;`CG5%tcjh| z)1r^nGI6*uec+_GIYXcEclBQ=p8K-fZgCWM$@t3vw;f=@EFd zP%8rF8g(nxZbNe(&y|DUN3E=#CX)}0H{vVKbV;=`xLBxT--#+$LHYxqUJf3tR`80v)O%H$jHsGmtV3U=nYG61ZRFhj& z*Tc!-so6kGtxoY7N?w4JSC=PtslHeA&vvh*FaM2=3Ggt#vn{jeyXB36bwuwDq6? zpB?s-UG5)E**m5`0Edk7f5(Z$>OUhHcTSG?i9!vGc?k+kh&LerCBGm*vH^SD?z0-C z?f>=v#-9cJSH@LH+a(jCH-5??da_rx7F3|ge|^(jMEH-wFS7u zilc23QPA<)|4T(peKw@|VFVA{c9AayWoGzZYnI^!l&YE*Z9H)Ue~Oz!GTYhg z(!JH|$nUHp6jbkq2Cx*>76|w3w@SZJECX9*?1iY6FEG=z9q#YCSEwn0tS*5f)vUU! zu?wA5U?HT`ne(=&; z{bQF?8!D@*nUp|@30_medOE%C!HJVg21+oqxtYZO`*$FH@>1vZzAW3@+i-}8-hwD) zF?#K!nS~7V^Yd^B2w8Npc`NRknuJJ5NG4`x*LxyC=R%G6o@C46Lea;P>C!h&>>0ti zmcJ4bu!)Jo6=!+Xy9VAEAnv&cY;10_9vH*H!(Z)*u4(zHZz%2wUUy~wzo+cb zto7yDyR_w6%gERml(J11se1#0IXv2+`C`*5Qn9hc^!I-%Z8{c+A{RYADqlFPnbk9% z%2zsmpQD_oxIM($cIl=;dVM+h8QcJTvkJ7;iCb2^JgvS+D&a(zQHcNW5G-~Z7#!RH z1@i2MhK7kFW>Qfk1Eso6&7^86pm}lMzJOB6rjypi#XmKnllxl}fHb*jyFWB|Bmx>q zf5!7=9@#u?ZF6(#!%164celi_8RulKg7NNX+6r2cCUe>iNZ>{TkCg1}?BF>&BPr5a zTFLGKN0Q*yI5P%DMnYjPuCmtqLU3etsKh)DH_Pr-wu?NiPuJRqZh{H=e*C|G|6V~W zQ2-am^L{@Mm~ZjsZE`y@8cpSA(kS-__egmQR=X`WIMV`85Pd>!t6#5|TJH*ui;LTQ zUZ}Q=s}r}X+SoA4{hSdsVX*~H%2xkR%E!AgfQE}}3Vg1C(KJEfXV%wSLgBIM9d7q8 z>?E0|uY;4h3A*0;-bA+0#W1JP!(mnPBXB+hj%MVz`9ksagcZ+SQZzE5{_O<)(Pqz! z{=va>Hwy);{pOp)sNkK!m+j^)gaAnmyI;dl~Um;8dlgQG7CTgld?6UX(NXwgG<_3H?> z1F_V4VfnsHc;UITkQ&z3+s@5%$IV{L*ZZ~Ls4nVwtSGChhDSxsqN6Etz5AGX_XVUDPuQG2T{hH!?J#Q|b$o8!#93PvIaA2;&_-=9adFQBH zpxdnK>;!m85j?Jkl~igbRZNjj;fdt7o^jadMuNINSslv-6jJIB3X7UaG#B|u&{7p? zTU%Sn5>iHX$oRjaIow}bf;*ywSLy-+17G*iY1i3Z8JP%YbSy%LtSG3e9=E;tfp#z& zf=T&$by6XZ7;vl2S6y9&4DsEUw6&t1 zMXiyk4m)To^XtkZYy7rS7sMaleEbqtcn9$ z;vT>mMUc9_XU{&n!g((Q$B3Y>zX#GI$iRxxk5t<-`?V>i*;njth{ls)VF%IV1<4!E zC2OzA;ltlT=9WY20Xo1*F|zQ^gh0?rgJPE7SH)tDk7lpH-rZn7hz&y4Uj2VJlsoR) zXYf;diu{nd`Pb903e7@V3LvwV?|)`-qL+Zfno4BZ~VJ^dKh*E*7Dh^ z`~*naM6g%eG5I)XfCLaPpIciu^(qkV(rdeMYOj9x^XHYLA9V;Z2MGM+Bdzh06?!zQ z01Dzi;+fe61sXm1h6B(RXahh%sIoX+7n#tNAL+C9GTu&e;>Q7;Ogr{%smQy=!tg z4u^B0QY}Lf#W7V)Gq||eDy$R3s;b(ib8I%-s)@qqMUFsiRw zCX~=6UXr9CRl#WAT)#xg8o{Thr|%gFU59(o)Ep6ve7(6o+98D0FtN0}EfQTufoqxJ z071~mak<3YWss0|VfdaD;!N6QxOq$8j=s>NM?t>{c8{%n{R`nt=H1gp5f;lo`Mv@` z?n9VF$CF!|3LS{GB-#9Qrq=n1JiGY?di0eQ7@@$Hool=H;T;^x_!~k3R>vv>!1MiB z<*^5Mmv{;pe*j0ccfNS>FgOPtl9~WGeXMVNo#ZT2=JBqZ*+ZInE9oYihqR!TffOlK zdRIbep97aq!Bqy;aR}}h^JTT0t7~-Z%=JX2Fk ztL8lnc}NUK3&d^FfYVm6o@GRaP#~z8fS&+rie(*JZR97UHi*X*mMFf0-S}ql4F?>Nd;>dk~BA6qTVEw(^;6&X$k9vH*T#{m%!;fB!ZV zHBKM9a_HNutV7zl?kpCoS;X#JopIXwxk}#tJ0sU1^hFx8zV+P2Q#2awc&rc`n!0Av z7&Rb-G8MVGu?7H6$@)A)E#w3cDc5qS@Gfz2N2ye5jvgV8ub7WdhJv5GHeJO1G!lg2 zE<97sIe^%xBM73duHFoOyMO;arUFEX6%_{q>VxN~9S_g_(8K4KFD@?Dr=9|X$*{}E zXq{^lE3|+idB7vm&NS~D!QGiPRb8C{kWOfxzgH47*_o~c8p!IW-+Xbd zehTcj$;`~eh~73_gV?@ZTzt~g6T7yy1{f%X3T}C6r0%BTD6D`X&} z2>?P}OUnZa0B4-0>gMJaXr_sQseU)yY@%Gu*|93?K(@RhBK~kB>h&^d0}Rwe4gBq2 zmuG#HvD%$53%=uoI99pmP73m!$RJbZ!eau=+soE6X*@5nCaHe{wM@+6&wC#Pvs#(x zO9Eyd!6HD`ut951m+*3HYf*AUepO(K)jfJcBoZle)};A}r@OoIcK_j#cOZQ3pLfsS z03QCXcS4K-TfX?}Q25aq|qrlBdH_5*JO9!i}qJjafCZ+o7B z%$YbUmVE(4P;ok%{Xo^iyKnrS3zf|*sHtv9zW$P!dbOV{fP|f$i~^tO8^fkSHC7o) z)(jFRcCZ^8EsH&Qdp%T)NM4|&P-EqqX{y@T*w`zUhc`q~PRuEy%8=lN#*bE`WPeub)r_l@`e zKFH`1=V@BEqgSo4R)56iOLPRm%{X2ldkqQ zRrU*LZhFfc!<*NW1gzbgLO7=89{U9=W5|991}Im|<-44md06mA1ZGziy~lX9De$+A>>d>FQc?R8oz)VPF2y~hURP>X>pv7$VjYIni)tFaDAoTGv_|++D*E?mMkpCPx?ttplq#oK5ZkW${8fq@?5js|Z6XLU;f{c$tu?i&jgRzj}G0pQ&{ zb8iJF4$jZ5A3}oM8)Xd%0iTK3c&g%@32Tdo%*8||ZY6*G9FsX!`Ql?zm2eA0&CNU> zJnU9mGyC_vCs<%r|2mxd=htj5C1*u|knyRyV=Chm>8~6*ba`c4*Q)FB{sXCbhZI

OSpRu+a(Y}x%iT?y9zSf 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