From 7293844a1ff30a3027a6e1a81ca1add89e5377aa Mon Sep 17 00:00:00 2001 From: rjianu Date: Tue, 18 Jul 2023 14:43:10 +0300 Subject: [PATCH] feat: Improve performance for min max using goroutines --- benchresultsMinMax_Improvement.txt | 7 +++++++ cpu01max.pprof | Bin 0 -> 12214 bytes main.go | 28 +++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 benchresultsMinMax_Improvement.txt create mode 100644 cpu01max.pprof diff --git a/benchresultsMinMax_Improvement.txt b/benchresultsMinMax_Improvement.txt new file mode 100644 index 0000000..6c53df8 --- /dev/null +++ b/benchresultsMinMax_Improvement.txt @@ -0,0 +1,7 @@ +goos: linux +goarch: amd64 +pkg: github.com/Serares/coolStats +cpu: 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz +BenchmarkRun-16 10 134744628 ns/op +PASS +ok github.com/Serares/coolStats 1.487s diff --git a/cpu01max.pprof b/cpu01max.pprof new file mode 100644 index 0000000000000000000000000000000000000000..9205e72ca94aab2ad9e9faaa5552706924bf6b40 GIT binary patch literal 12214 zcmV;nFG@s=eY%zb(E;Q7m&W@ku1k)0uZn9+IJyhDSsA5hBEN9P|G%kf{rqS#t*L(dZx_4KLZGbjbsKkqDESdu{5Bg%%rgs>UiZ$ z{I0QDITLd!SIaTpZLFirqKz*O=k6>#o~638Fpu)I9OFQijx&fP;Lhy8-4? zzLsMQ^yw%i?c4n{kCym@)h!VTHNWuzcQ>T3hpEvGaiG=R5Cas@a*P4oolSGL_udeKvRA(+Wqh?xj<7ORY9<7-$pXbfPH5Nbfum!cyS{h54pZWC3 zv#L8E_gmfhcs8A_wKR4?fDn*Hnw<~Amywy(KsL;7l#`p6ucJho{L^Zl7x7J@j)T~W zT4}9~SwctYr_Xk)Za=vG_AF<4)lB(ppEm?mIGL%wj987=p0Qq&eii}W7@J| z4Ij2Kc2b><@mxArBjcJtuCt>I^aog?P3ZV*^}LNHIM`aJ37$viX>E*wyiNhle6^mZ zD!{m!ssPWY^R+g{HF~~0i+-zBooC_2s`D(ofG*GsqfkFfHl<~=*6_qlaT@3ulCZTp zWm9ZRZ8gJ~28G#@u#gHh-DsufOQLnJsa@w_2|~c{>{K=>IIAf!)AD6A+W&P8Z>Je* zYQ<*Qj@oG#8ZGp*WOG{a@nY_5jt}aYvITBuzGlnjcoAKs6&Vi{Hj*u{n2NQFjjhb% z7BuxM#p9OvhjsRr*q+*Jt&QJVv@Pk^?^HM9LV*xKXGaa1HE+?Sa9_wm%OSX%SEO{GS)d)2&W;}Fm@Wh?A&?eJ_2 zQcyFD!Hf#6@DjR2GmQSc-E(M-vz3X~R&-jjO39}H|BVo6;%udnc20q=r#5pg4cO41 zCDj^#w-#xQ9jJqLsqrJvdmg>MR&{Im9Cv3+4KJh1v`ZD-w4srURPQ^(b(9yq z@?u)~%OIw`06(>8FTm^RdhG_|8-~gDw0^x3h=F@7ff#rr-Kbq^tmpFuY36d(-48R=w)J2$wfe-524lbgPzQ%xI#c{0r@y zsk)2sxYb>Rx6y4{j&X>)FQ*Y(RCh5>YpzBYfMTt|5Y&Do{8FUB`osP2pL zcDh~5F;=wDQC>-7_NngnxZCP(k9W`=T8{ArcV9&Z4l7Ly;zCOigLo(1soiC)Z=j>R zn%@3Od9F)vmF18x!OqlK^BZF`0!?k5%FZjkxP9=F4wqi`m&>oX@~W%#e0dG6UZgCr z17<6{>VS9C-C7$XThEsr>4;;Vw;}`zoN02d>Da23?t;a&H27y5EZ!Cffm{?=vu%CD z?2Ky}EKvTH4)#~tb1A-OiTqORLS3}3#sU`kb@ba@)qNR$XKns6yoc`5x*Gf0ab8bb zUs2tE!S$9t{RQu(d$q2{YpiZJ(AO`i?#uCItNU{NJN;ejYAnmt^W}|n%(1Vl5CZwm z-m?CB-Ss!z$ToHp&37z{amix`H#v5YFFVmY2Nkeif#)ekU4i$}ecC^a7J9zCnHF1} zSK|4q^Gdv*?$;hL+UWW67TU3WGNb-g_>k(n3Lm5gwTFxc^n7_MefYBKyc)Zz&a3fZ zdRY6XafjYi-bTN!n$FsK4UXV{I^toAd)Ht$>ZUzp)UoY##7F26Eo2;ER{o7@7pNiE z;s(oluEi26(Za@hp`Rshr;!`h@Kk?A<%k;NUzH~Q6-%j93mc1s$BA^h`IcL6``hh0 z$~$OuA2kedu}=xu4jVG=umpT3%^7bKyk-$N8gQpS(Ac9n?anD^rMt*}7fpO$LC|$r zZ*BKFG|AN382yEwFFVuQuPE&-!28o&)m@#PIr8P*w0*CVOf&3;pr0kXQ0=kR%y7%i zBJLCjfjnnRnRj=wHr8eIoOEvQ4J#=WX+CT@)K?pQ<&YgWv$CUo( z%X{fZ$LXJ|u+~0&gL_k0`*&LOt8F5Cc{i><{kyf9`)IABgp+tPE*RhEC?U#!&_v7W zTHe6pF#nO}Fz=_`4*J*eWQabj88|C1yTSdb9X&wbrg@fp`5^t^J*?}EA9%21D~I1G zAELdEy)Dl~2;?|S@jY~7W4)<-n7;f#$@F@BfmQ7WTw;m#dMu+dt&Qf{v_{{I z6;z>B8q2bElqIxhz3RRNms#DnV3eX-rSWOQK%T>m%x;f_WQm?H!*u*rr9%by1hS2m z(vSrzBEJtvZus8>dBzEj5} zx8b~I%B*k0Dyq_QjQVCe%5qxhxTjgo)keD0u3gG${0-Op)PTR?WAvEjH|F|0x~@`# zvhpjg?5?AXQ2*a-MgG)MWLw!YB9cG%@77RISS27Hp z<^0T58tn}9=#Ucvm+DPrlopOxq2C?2%cp0`b8%J!#iTnhK?yBs?DXmRGDhnck72O6 z6RQ+}--*>!t@Tu~XBEvIYs2C)-j6G^Xsn8NM3{*+Umk3FV*cgbQ#)I)`GAkn8xBe+ zR~2x$-|(>l%R)=_d>N-%^X-r_h@Ox#F4;a4wCfc1siRC%odd>`S#mA_B$AzVXL^*? z)YswiDn6BqW!091d(tciSUGL+9J{9jti9+nFV?t8NUx6WLXXprUWoFjj$)6!bCs|3x*^2D63Tg}W@v zy$gF$FYR$-CkLPZrf=R+fp2HrYB}o8*qeH5PZ*n+zyG1{-&Ck`H-6GkY0};JBt5A; zYOG~Y`Y$bArncbQtgYK8LK)-$RZw>T;zR(Y9p+7J<`sDzi$@>)a{{shDQ~m?{0rdmTFb43H1A&gNQ4~#Z z20Js?iU+_zaPq`b-7g0Ly>rCI9tBP=7!LxLv|kPe8s$x?J-RsP%bdI) zcQ7aOvFg6L@FNXrvZdT{KN%;WXFNXoW|GH{=0B5s!bL9g#0B8U+=MSm- ztaajgJVXk}-2LcUbicuN5Uk(SVouDWl!tIR6x$+?#1T=^#w)u3wtOJ@k zR#7~R+boKQaWK$erWnfWsrEu$?xW?MYKXC}q5YVnP7B$rUawO0K3)#-anGFyE ztsNnqH3WvjFn9`vgRFxQFcK6@=_p45edQQgLWR+`k!6hnwla@x-qTTcO?WiW(ic@J zup8clP?#gT;ZUHVph=^n?w4bLHXQ29ynY1hE%`r!!+?f?mTimyo#a@cp;pco!sCtf zOnD(b6Hv?x;Zs0QftF+Z(n$BqaX{ObE5}lVtDCBP#db|OFdD|dSQrPF_vo(s<#?du zX~5!^!N$Xb9raeN?C^r!zyzT6FU@0wZ?38~B{G|*;8`L>F* zZ2#^F@U*Re6M^QWA-Ee-PJ|SMlbi%J=CIPiFmC7i%Kdo2QpGUV0o5s0+{Wup23qF8 z%Et|no2CHO4pK@|s*t=eSC--kpb@Mj16hBk0v+kADDK0B=|(jPCc_k%nzGPmfVLe| zJ2CM?*0?-r;z*#8Y71*w@15ZAN0%VKy?lqRTaebRnwus4$T=7W&nNliwy~1vs7G2m|=@#CeTZc zyZVB8fsWoZm+vK+?%jbT_?oaN!j^A_lM&eiThFUr3Fw8@dZ3WD5~Uw{IS z<<15A;AG47tTZ=emh*s)k5cyVFwWk z1x^B*1lnXUK4W`b3^f0kBB{jBERsr`0yIUD9Atoa5$N#B=`8-J70cwxC{6{M3R=h* z${@1@=)2X5q9cxC%W^?<0W5??AQ!`numn^AVJXmVCrJ+}_hIW^)>7bX+#^G-5ZDpD zN5`5mm5%Zypczi!n5!_}Ho%+#@Dg-%91qE5KuX|5t!IA6qU70*75L@L zK(BqL{89{S8Siss44(mdhS{Fb&z8%9X6_x%BCA48&ybH{m7Xc%I5}5|tP1Oa>Xpb^ z7v{*va2n7w9vdsnm2sR7G@TvS@f_VRUjbVG^#ta10zc+-G*>2Y2G9)9Dvggga##U$ zWPu92lK7EDk;IumGnrx%M~5qcMom`~)i};FuWEc2=vk&1!SUg%Kr`P^6u01?*$AFE z>Sb6CuYg7ZvuV$t_o#Sb&m0DIR(xp za^8S9!7gp_k=_FO$tmQFVF>p-Czo%5UCHsww}BQvy@pppRB5lv!nYL*Np1w1@u6Dz zdbEo&OVd~02+7VV?DWe`K*yY@dnT{!?r{@4SldE%zuXM8%(@Hig;T7kwinIx zF`nzU?*M)DNq;t#$1$d?<8hn~G#j)zU~pCbU7)AlRRq1Uqax^y&jURV+6!P@t^4JB zK&zGw;uAiBKV~8n=E)~;F3?=i=7F)6vzPaQeqNwRp2SfW$&)xAXucvD$s`{Dt(>n& z{)Hngl7Ha>paqI#2$OsWw0Wm8#ed@=%j^9c7XmF*B;PYKegyRD95u^-a1Ea~PyPoN z0WDG_vp9_Z7-->KMe<)fYLWaG7XvL;BtK*XS~_BEycynsci}yFALIw{A$$ZX(b@u3 ze}XDIc)3NXvIj5!abe2md9>L=!<3j%ZUs7U>HvPL6~MceFbz2AO}TKt`~>KYZIhY( zHGo}|fNB6=1bPv)hm0Hbfcz9_&$`J%&ysxr->`Vw2XG0{643r>tj^SRxee&sH>NR7 zU%3+Eb=pCo%_A{GHOU%ZawOfm`8+W?-6ZjOi!FKozcGw}D8;59I z<+gyy6G_}xU|WqRsvYl!UViyG(B8CL*F48HWqz&<*)P8U8s*KGJt+Q#%7*PFbidpQ zRPTh2b9whJSnaeU6Tkct=)g1;ot=vtIAM2*zO?+Kj&c{!w@!ik994(6wXxwYa8sMz zK&#VW+U3V?PnsT(dw|x>94quJIS6nRr>Ob-wF+nzXs?0sr_=-TE1=m!6wzS7W$e-N z`D-=MYDHAnKo7{Tfxdr65e)&$b>{Qe8lW|b=zVscdx82-vkN1fL+Jsz4`}|o<9P=| z0XJnSZ5ax<7HBPK|1~yd=>fSP=;&reGYoK}MKcU=9ndvqA!IXgJ^yE*R(W*9M>s9Q)R0>wftS(4OhG7=C0ixGDJ_ z_zJ#;y|54DemDRJ;TsM{b-(-;=ywMs_}a`<%J^1+gzlH$0qtBekBy@Q)wO~v-tX+- z7v=XruY0elb8M}X--BfF{{XaXrCq_UNDCas!w=BPqjHCUYWgV`d?_wqui-9tD5Y{g z0sAla%=0hDI z-wWsQ#~VOzfc7RB=jwiW80fvUOwmmPe}==#{7@bNdS{Vc?&VseThKkCP*nHJqd+zL z)z$k5KvwQt{&)-MEzmABWFTO3H@o3ckMSG>I+nJ&dtG(RUi%lIrOtJ1r?ktcUmzue zfczEc!>t2Z-9`d_+(_y6NWiy&-sbdwaU?3HD^TO#3 z21qw<>cjJK)l|^yj;@}7p?!s_4S4YV0Vj+0=&$x*$CMK$*-y~)Q-xt}N%MhzB6YdN zid!pa@hYXbqW~XP!W;#-5ojZ5o50A|{j$HH+U4qLz~Z&X3= zSirw1?>!dqU7&YCBcp?d34_F7F~oa+$ThxHsEcx_pdpTuVp>W$RCLsJ7es~$dd{lJ z-H!(a@=l);R6Ai9pJp6jEeDMG{PiBtd!W4!##Sa8E~s|L1ST2}_!b{0pT9l;`aluA z$wYO6HjY&@O#pn;BANjBA<&14Xf_j#5VZEWi9FNOfc2bv6%!2|DIn;i&ui7LKt8hKZ-da3Sl&2r*KOVlxQ1=~g>O z!*#zLEohRJ%v^_KL>k{li_UKN7?5KG%}z0C2s6$v#|rvjy@Hzua2z90K#mhMct>A8 z+$6x!mNT6MxCLknXj{P;?$evf@q%Wb{Aw?7p0ocJW5jS#C&mg-4SSpzFDN&!RBtXP z2o@xR51hi|7t)eiWdp-sF6trz%9OKCUX+d@04rM1Y74UXt zi&Fu&18r9{x9NU4QP5oHanm=Ta>hx5K3|}UE$84fR?}obGaa=1g$wX5)=m&li-}^A zIDfK;aa~>a%PE3BabQZl#dBe5ijt38co}cyu#PtfG;w@QBQEi|nmkp|H%_Rg%BQY~ zrwSW5b(GHtn(kOeZkmLj5&QzkLRj4|>jh2y)mvqC^=Sxr^r@crt2dL=1P$dImMr-U z;HpeLQ{Io8E$ev(@H3##R6T1Zr)1Lwjozc?_A9*b9Cw|r znc)&UitWPglNT1~F5BF8#WvkJD9V|F<~cr?Uo5&FXQoJz`Q@{M<~l{e9Ttc>RoiDR z5Y_$iIY9@U6nh2}1so-A_*_Z|emP6frzb=P_FS2>6gvZQwxCa5S0-NvxXseBIf4#5 zUg2qxRt=dg=7_eugXaaUT&=1CO>ijhz&+0MBBd@QUl6p@sim#RN|kUu`2IplTjvUz z=R8WC&Fi|_I#+GiFXst*-tiNBzvh`|p5-Sz8@b1YYQLN>X#6+o1$Ix|ovx7}eDj4< zRtm@kf)2l_lFeGcd3-iks0+k)H*3@Va-pENjw%g9>*mIdy%ySAULHC+g?=K2^&beBAnQKh0 zS}YbX3aiQ#kV^#pxMeUS*fhX5IIGC#ug`%#S96VMs0ZXyK{GcfqUnHZtR!kW;1@t& zD54ddM7<@E>Yg?vdY6X&(@ zpw`QRwxvOg8#TNv+`AD?E*G@;+tqxKnSg6D^i26IV2Pe7QRz=%KDU1f^d)Gc!FVmB zFqa8-0qp{47+5@x)v>fC2Vm%;N37Y(ZqL~f&l0`Ec@GGFNm}bevdO*G==>2tdJkK1!@ua-d z9Kf%EzGj*)nsQxM&}Yxvb=e&SDwDGl`P`M_Rk2FECRPjUigb;j#g2DZL8YsOYeZ)o z_(`r6G}u9g^eVeOaf7usGBlIx1Pz>_^5EwI_xlu#9Fc0H&jaoS+6!9J*z5C%Yn?UN z!*hPPlj6AxSI-Hjw!%eTL9?7k2+wme;X=@Q!Oso?@^wM`YgOUk1;8Vm+~@PxKA?T7 zaIk|b<{Jc!|6?5c`+M-Xg{p4|TI5{v*Ed86v~e)Iv=T0cS2EClP(cpiU!3-m41 ztmUfeJA$^%v~$EU%=_jJ@BP4kys}Yj5^}S6NASCPzkFBF=Cl~s)q;0zpmy0`2f|6dFX)Fu%14ypI#vnmR@5`;`)bmF{6Ns^^~&b!K>fvmj`Bl6pE$+W zc-qr|55$MUj`Kbe^!*9dKl}b7^COBNY!>OGe;JYICx$SoGnc&+Z4<8@@Ayr`Uv~B{|SenTlg2txM?SPAJ9yHrw zp_%TNp9|XS1YX10o4QE$c`ESoEYF!$I8@XN0R z4R>m;Ti8vwr~Jy^xtkU}>B)S*7W8wP^xU%6c=+1uiS`Qm{WO$&MS+`exOXpHn_y#1 zS?xYS?{mVNAqllK2JEwvTEE;c=+J3Gt^LCLa^irXjmuSS=W<-hPq*C{AqT{bUVwQn zB^NGW3!0fiwC7ouTuvPnR%z5PzY%mW?W`^ieZydCoya5mCsQEiF?Z|yF0qY(+3n6r z@{`2{9e!=t4enRzQohJ z*7?2orxW}%lRt13MFljA0SAK$Xclw)oXZX01APzL<;H(J-1@=NE1l#aL0hdgQWvsn zDOVHP9pXx$$0~mmH1#x(h<;2d^-qG1Ily+prNB=Xthsjfq{q&F7BtiA99*iOg`j}=u;a;49uf4pFg2Z>^uzR*B+K;=*{I(K?|)I_C>(@i}Wmx zV8>ap?2CXu0R6yG#gvOYEIpbES&s=ioTh-TSsr6EaF6kepyT6Jt3;dEpvBJL z1iZm$;Ew)9m6U!Js`lMX9v8IjQx!!o0lZDml1l-|MQ0-bLMz0}tlV&S;!{g#N>m;6%MOy8|s>QiR#ia>{b$W&*QgE z{d_cHzMAMV{4L$H_x1Jjv1iu(!%?YV{|k z9vRm9`uhg>L>1G3IXAE(quz4CL>tIp94zZ~JC zr=4x9_k}JNj_^6fQNJANqqq1)C>JXDTG``-M*8?R$_0?A?Eh>od!nITRy5?&DL3T6 zlwXeW(FzC9RC&%d{&u5W1_tD4AI(j{@(K5@qkWcxMmfeu^)IUU-}+-Vw`@Gd$JJc7 zmf^0m)^lIvCPy5Tr-Y!R9P6XszEw&Y!z6;vg8WDF*(R3ofUw5 zU^58~|W0^FCWE?}Pa(I;CzPR&VJ{;m2X$w6HWC!`hBJKj-vBiCOTe0%8bLMnYlZO#Tn^0(q`;b;+dtU!XKSjd|BU}N{)FKF6Ks$O zRaRA)iC|_pRvk?Sec`I=V54X#8cUerShO?|%#Bw^laWfZsH{3^J|1jWT%Cv)SH!}h zisJHEaUvcrwh4+8y%XIkBGKx{yM-!CFY8d02sXC6iqzO%p&n*+Rj^I*X=jMp6BL!l zf&pi2G?p~&p%rwplYhdL!5pU{ZiaiFY0Kg6p(t+| zodF56!VD+NW5IJze@=^rhiT=JWcTWlqHwITxT_ft#mz)?; zu}ZVp>MAvRnia9CN;8@)E{}B!$0{pB(NdPQ*)181Rd@y$SB4^LXKl~8#Pw!0+`Tds z@6n|?8ocrUX02{XGojAp=Z{FVyvQiLzAc~O&fxhc^TH-7E^#)%>}YDYriQk+g?o+} z4aZ6&(emPOqGyp&*u@N$n(?+uBf6O3SiCf7oVXLfFK@J2 zNp)Eyc7g=ERz$+59?ZnW>c2d=^=Y(#_2l+Q)C^`THbfG4hVBfWrM_*Js1=HCHxr2< zIc9GZR))=JG9IdETT~v8^*R&sIF!7LvrjcaI27(~cC89U)92?_R{63>Ma7xmrBYGy z?9IKiTf?K~&t@p^6F%iBqsBBSu$NHlp#ux-(GrKQ2(>8CnjU~#f{m8rDge0%C5qc9wcCL)QX8BN||hN={Z zwk-;UAFGbU&wSv7!rSs#u%$a$qL*n_-5v|~FiYDOsUK$)YI#`E@FcC>NgP?XEvk+x z2`I68R{t8;U~7 zSlMMAg5>rI3^+ZVQ#~oZyQ-Gxod}02DvG*V|6Ufn`u{*b?LjKQ zI3WhJyNbGmdZnhk>i@%(_IPVrJ}}xX?hXr2p3bIm{&h#^**!(EDl-~N2HT&0>=QPr zHP{C2@>np(ZZEp4%8UjvmQZtbid2|)#wudvrxIE$QCt?OFuPSpBkBx|VhJ^x2L)T6 zyak({S8HIC22rU@xO*&?Fgr(j#*)ECswEaLHRD11N2OUB2}OgARgd-Ky3$8OjMHvN zn+S)Zv64s4a58w_$!pt2Q(Rdd<{*jp;KqvK8{?r!)HUYv@b%?)gyKE!i^Y4Gaoc~N z!i#w(Y z{VjBiR>_4w#_uoF)!ah!VyS>$dQ+B!$N2ys_9Zp*F-4HiR zBOaSmxnZKhG^qbh84H|6l} zdL{AHUb~y2s_P@kgo=WKO{$}jaIDlUu1=O+Uc__XZbnZfRxh1JTpn|k!ilIlg%U}3 z^J-z2h=1M}Np|lNiuMS$Jw4DcT|5-+(JfY{JX$IdGrNtd6S9x_V_bq>i7e2w3f| zMwZ3mH-*C8JG%i?d6)t99y4AUiH0~hP+RWc>cB|^u4PzVH^!o-yOVfzv}>r$>>P_k zlbxdOmMcT0JtGNE^pohFxHnpzFiY?1dMb^umA|;sth78Lv&c1cXYd)(->l?89;B-Z zm2>`?Mt=i2Q>#;N8~tZVPhI8L!(@H}@8XX?0( zypd?c0;-^Qk`t-8Xpt%ym6SW(!F(rDup=Kgbl{B3{iU+-Q&@;S-1#>ZKAfFO460%k z6-ANqXpH^SO}E~8PnTQoI#oQBHlVnyG&L2a^%NO}oo;Mv?I%B$;GdBSlOy#|>8Wha zj#Ii-#S&Iv;~k_<)x=6Z-SUOXhNxl3v1=!`{I$Ld3`7zkC<_Hmh|>6SGcoqZgr0e>dqwSh*L}YAL;vL9jx@- zlZspE{Visw^qx?pLb>O*MUiNjf1NRSW0#&VRUs-BsTqab+SN>Q_?PJJdJt~DtIW+$ z8PU{Qca^y=&nQ%Gux*i2&yx~xc9C|U&FfS|o<1^omNyV6`g^D%!kM%gY-)O|lRdfp zMzbPP>F%@I3T;wa7O##zRvr(PxLU?7iKH2-aGTUmP9{9#tSW&g`R4eKqg3yv%flSx zv@I%$B&$+cEgy#2)m8;ZOwcJ7SG;o3T$SkW>2BT^i&vDgzwT;QhFlye4|nAnzT#5Q zHFLW;nD6A&i7GQ3@t&mIOx|$=S2A1$thytV=wU(s8Im0xW_$_ zO1ALE&YD)nZ$2Ihdjd_nSivDc%6{y&P(_6c9$X?h>DVcE&esyXBW6XZ8<(UMqbzQ! zl8)j@dp9mQiNKYiDiiURQaD*suG-wutdcAtE4JjgGGz)*SEpF~y3*2ku&_8;Syfyf zyQri(Qc-$EhfDr)Nrw(sv@b5X_~Q1(?o~q4OeBL@5B4lg#2)^C0{{U3|F{EcG=E