}lxyj*M
zf)w5e|K|vO<+QZ9I|t5$7@tJXKU_kn?Pg%v%c%LxozG68e-vRkzXfuo{7K+a
zKX4{qOSEE^`Wsz)SMN{uo-L&+XMjZad&pt6U35gLGN%!PiO19rC@!ZoP!G~~1GmAgVrRA@I=I+^W!c|XcbzDn*QB~UI=0dy}efu*N8c0baP%iaD+3`7Aw
ztjw2RcfI=pDQs0J2yAxjiaY3k0>@tveD&|D1`U?c-1j$Xt;9
z7D|Ww0zaX9;7pyAlp;+IYTu!{>txg1$L{DMa|odG4_#1IgHtL
zV%MGTbG+z)!og3A=ZV4YxI4groZlN#5j!FB61t~{uskz-OKEdysX^hAYBS@{q4RNo
zUK&S*U`~M(Z&ZE?ypF&qHZ!j6d}!?D@il1v|NFB?KJ$dWmD%fxJM_CX)(&fCun+is
z`+#Y(iYVN|YA_u56|vgJ7&&S+w6yW9ZL1QpGRbfbmf57OeH;JW{0-pk%!d7jFG|J7
z^?krrMonqT2!~M6@~ts;W3RzDN-39VW}J4b^6eKQ0L{Y!yo$aC?K=ZZdYS_@P<-{O
z`}9*}u7FD8W);M5vxI@h9^SL(SUpe(l%2s2numekkEZ|#I0kM%^(NrH=6pOe%F=Z`
z5R42C45vbvnh2pkS@W6!Lu?M5VcQKL74Q9H(uB2q)pL0Do34!tIL&ay4a9r|9Re7!
zV<6CE=51V1zaK{(WA%6*4p!S_j{bOi5Z(JqW$uPrORbr>+aLB1gjbyqSEX1TS!VlL
zYF2zFa{@T5c-tGlw)x8oJp#CST3oUasD9k7i(q2
zaqc{avO&;w{umc*_5=Z_{loERfIm9CDIZF(+BYNUfi}cS|6!q06G}rf`9Te9KGbZV
z%=~?U^)=>UG%{q$!Pf5)ykOYXg$vAFVtvmOk%kzRq@-wzRbZ%)cL|CkgrSvN>dJA{
znXXqa*&utK2fd$@&w2TN>gJ&9JALfS2C7DAtl*wKr(=FTK0t3)3aDUPS|=^GY}xbR
z)E!KLfoE;ggc8Be`Re}7ezPj)*&FW+iYIZ5b!RI7AeaRG7~Rnz>cez2&|pfE5B)$b
z>G?hif*`Cmv1R+_se=h#U%BGr466ZJzu{%mJ6W-|{G`DLWakRMZ9A5W=A9A&2*QV(
z<_!?frC&!3OZy9XA1VLn74V+=iBc0xd>mOqnoOE>*czPM3&vjy+u-vQFBv%y0l2~>
z=~%K>L*&jA2VF-5)uQp4>vMf2C?Pj{epb0%R#l~=Z)||q!%jF4FjmA*ZIuEcn=yt!
z*+<3M?>=A+!?Y2@aB5Y=@-eZafYlA(>R}P+4H&LouWWAKotSD+pil|`{Ou=zQ$P?b
zX_N#Qj)5pAI;-K1Mbj$;nZeJ{x{F!X(B3|p{OW||dY=Y4uKWMU{TA~G2rbtT_nf1i
z7&XL{fgr<$_C!3INo?3Gs2Q4CNu+|{<>d0;!>+hQy|@TWL~jC#L=KvJECL9lAO>bt
z{cL}XHNGa^Xo|vog!={uSRq;JHUt1ts~t`Z)qwfY@>MbLuyTa{^Z-$^E)C+Qjle*8
z65t%AbL&+LmT^v7je0&jAMF9=`Tpxv*-@=~;6ab=2c>o%9EL3;?=>dFVUAoW_q9g>
zQ{{Ff1!_gQu+3rP<SZim9T1H>xR?LPsnLg-hTQCG>Yvi9%inq0G)^iH$cU-$e4*}>&%+=tg}OgAYhH#w_S9}A{ez>E=_i^9aC
z_6VYGZn*GZ=_S9#Cr@hJFk3z=sHG7#5Fx&g_*?h}DzYP9u&YY7@cKeEPbl+v-_}Cs
zx4w~t{R}GnDD?sJ;_Kkej+gYPUTf8|A4FyaH)}>;Fwd@R5V$Vv+YYDhhOb?@3Fz$i
zlyuSY4yG((EnrG*)3d5DFMqNy+s~{ff3=T|Zeh3&De|$Z9g7h6CoNSgzmYWK3W5hNZa2Qxtx_|5Z7O_Qu3kRJnulTS=v|+l8
z6(*>g9a~4xM!&J67x$EMPT}Lti9Z)Q=V}zG@FQC)%dCp0I&Xk@7p%C&q~F46LOeG|^Vq>)9X#mulZRQKzMKTlArIj!
zcE~i+2PpE$Fb#Xv8@JF0toi)u4&x2NwkfoBQmd>E$96vyBcQv;jE1>Fq`}wfeq!aI
zCi37}0D6(y$(Q%Q$S2%RdF|HMHKtF4s-~YYH?od<;=4J$EoIH!P}n0~b(JW~t6e%Z1?k
zr~jwwUpuM_09ApTwGs0++YAq}2LTS<$Zm{KKhN?vJBKZ>QMPyv+jdbAI`|FXT#!A1CXn)5Dc0==n}hVB-miiqVzAcBiq)Nde}Lcr
zLD|8uO{bG88wfN~)1NHf(Eja!$IJ@g87dFxosW4BB3Q=4De%Cz#+}NbG0r2N1N{DR
zZgBW*nhK4Tn-K?L$4_!EZ5MLe->&`n?e}AOi?Zj~#t8%F2WbZcovVXBL2kZ!_l^o!
zIk^af--iCQ;~$~XvPJCXMXA3kpm4!F6wIkX{Ec3s^G}`hTc1F{g}{Z&v6`R1{TSic
zBNPf$z3GOF{k&X!w0PT?LbMc){5~>QOf&cV;@^pXBX#}t7R#sD0QDD65h%qXUI}gM>}5p0w)kxB9Tec^e^mv4
zA3LM3bAlsjKH3~=YoH2c0&YdoA$iq;1UujOfMFGnl0sPbcMt@HASwP&jL`HG{dnbMqePAgFb7OU5Y0
zAmHTw{n1u}QBz7wb8R)Fl)+$&viZIn56Bm+t7TUvhVs5wS8t7F)Hu^D1t1%Z#R7^o
zi$khg1FJRdNS;t4cK*p5s=jE7siL2C$Ci%`W&TIdc~6GaPB$@ta$G51l%4bWcB3G)
zvGn2}OvVh&N}$TLYNdK6_z6QXl-Qp_m{GHz(cHpV1!x;s3J>4%XJ6wGtLWq(#Wir@
z4O|hE-KZGEMa!OfFz4*gRI~0{BaCde9!C!!UcxIs_H(=^;*8205}wK46irc2ex3vA?Fa_3)gJC(fj_n(RY6
zylA~_b?W4P*UbuF_m%p486g|I@*Uxt@q?210_kY83$4ewgC&DN`zw(D5CobrlB5pW
z$)8y(RqNpr6U!f~r5O_y4MSDd-43>Y(=*1dJ710~OT;THzwlUDp})WLX#H!0aoqG$
z2G=uxRJVQo@C~!4i`b=+DO8slj(LYg3+Q~t!Tr&yF;YKH5ER)fE5d$nBdaq$JhUV}
z(dU!4!n>ku%O)#LQ8t<>#)~_x#F5AVyKr_~v{|(63tD~vYFEGoLTY^I3sRprq0KV8
zuQzqTViU)^Nze(dVwAIitewF)iL6Ve-t`eR3Elgjz
zzcGyED2!ZOEqUOcVzC&MRsE}V(3m=POwuE@XHB_A(Q$FT%Ke+s7`07ZoTtP|`3fF?
z9oLs;ut$TW)90v0vqwj9rD!Y&Ab$q5nGP|1c1UO<@%+hJ4Fxqah#<75hmt18{Z`9N
zyAYaE8?!{3EV8EeP#`QE>
zQ1}u_S>0CYsMRHJg5J3(tHaAw{TsQ1q6Oy)Ngst_ybpx6qdpwBMp;-{HjjnGnbKzt
zohG9`LBHz!Ot;EjI$R)V8u@>4stwxr&|}ATIFTz??%#GS>lZ`1FGYqQCZM54t9VdS
zf9F}R(#SniQdB;nZkpR#a;VgRm^ADucj)t`bV-L~x1;Gr>Pd31x>=@Q+~3I5_+Beg
zo5dVaIH4g_(^{$2Dk`vi$Pc1KIxm=#{6)#1-0I=Ru@j)IwMW`dum?6>jD%ZQMO{j}{n`XVN|p
zub_qb?N8!&il?%U3UPMic^RlsHneh~?$LH?^OafKXAx`lQXpf3z7G1OTHeKy^pH_~
zoM3)Iw{P^tc%qN>;@_s@FHI-g_|SZXtegT!i|57#7GqFA)t$VVo02s{w=8bcYa7iN
z3>LQ@SlRq#r^tZM`n7CvxB-!8sgvo28<77=G{`V`WPE?n)hG2U-7+Dh_hjDJ53E!J
zk3_d26JtK7y60q>^0ynS1Lt2q$wzGXV3*MLh^qcqM`4_qh(4vv7W(=ev!(j&4e@eo
zKja2-b|(4n_!54+}LhaBUjSI;OB3s9iP
z`0nC%B}n1EVUh|!hvIap8tN=FaTOLvr3pu{SZApY8I@$79otnsouIOFzP#Ob&KGIe
z$@v^4oP}4hE}^a4Ns@?Std|AzOD(ltb!(|5VjO1^k_A~R^#}`}x$5pdGgudkl4mjW
ztLtlaao?~x`zw*YzT`XD!U!Xtr=?31oh{tqIR0n(WZ|DOwYqt>OCOFxYy{hWgzW0P
z^F(nT^U_TOtwGl6ZrJ&A9v6uQ((gq~rGn>znhe_+XwR_xwNlnQJ^!|ma(2ol8NWb7{_J9$0~H#>_WWe*(ku8&F({|8a;Es@(x6@^Z`FT=8Age!YVLQwdL#sNpHH-hATQ&miQ}4|X
z~y+FYkmohUw@N6i%$L-h`i7JU4;7U3c*0_F!l$h91oxQk-pc
zpagFO*7s6Yx;
zqkEcX7A}n0wf$}I@~PQN$BLMSE0cA>rmvs;jxkt^(H=pLNw%D+=}d+pUbupnBD^
zsAgt+rb2o_1-7j1dpzZ8F-zGDQ_x#NL5$e>XMIFHJ4DXMk#4PB=nTLNqZWm-a~WPm
z_YOas&>uM!Bt9LmJ;T~MoNz715hr!h3#SSu&{I%@2bEiRoou&W(%NA~!X^
zUC0gce)9LB<+73LE0DzFDdns24K_D*25BN?X0)SGfhCYYS7-Trq-AjjYXS3XLM#Nu
zubGjKbWsXFPgF(Oz17&dm>Ua$X%@(OznBuz!ke*&FURz@gc^Ag#gv0)-Ji5+
zqP~MQ4n~DWyY>89W@<(P^?p1bCrrMB()UN+U(jV{Q*=vc={O6+zhs%mgMQK>>A|{M
zF}Yz%>@pL#sgiL<^}A+v);IsDYVF_V$X$+vaDLE*iH3+6VBjaXUoKy!G!##oA~tiW
zCudP}LX~i@e>4h^DYKolH&QyFQ{t=2(pQ$&GPCa67}Zfk=nHx)`sZz|J7TMOz2n36
z4^SRwG+*5w$!^NDUKO3u6gOR@puDD%6*nwlt9L$UTz^ELMD#L<3z{BHl|7+tHV65C
zIti4Lk9;#M@KufuO_WtsQKAT;!;(b#lV?TN^c9=h
zV!Z#+!rH7^xD>})^YK2~LK^T%#9diSnX~zk77*Z2^Jz2#qIEWpXPa7sw7l-Kk6b@I
zG!wm?cBpO1Az&>yE>_7_n^=IckCKV8S=_Xb7Icwj$~*-boTxXh8YHLE4VTG?Y4MEb
z8#Z(Y%Mh;UsQy_dS{jiV?_?Pfu7p;5KWLyMb*a+S)z=W?JZn&QWNjdgcU&@W&StVR
zX^WrHUtx7rXl{9Y+71GOsk(`HmiO;}BZp!;uV%qmG9|+S>IIH0V!*SNKr0zOlQ??%
z<95ZTne0h;RSJSS9-1xJ{NT~wrec%smwa&V#ytWLHuChJ&oP*d`)fN6T8YSr^(MFz
zD&s_|lBstvx!;!c^XpgduL<0Do4uA`W2fNZaVF?o{&JIB8AX-`D=x|6B@`=wM55fE
zAR>uwOesiy4dpPJ+n+IG!sK7LKvd;g_3yR+G}%zY0pVsTn!HWwb9(WL>~lz&x2#`h
zL|UCadJj}#v^Q18e=3iA{ZfDaz0t=J5+jRBf|eTH3e-7MVaf&%h;hYo^Z_
z@@2fFaw^`t``}?&tdwd2AM28Cer~&bz*Xh_P;)02MIQc?*}e-oz|v1hq@G`3Bl{m(
zTA3YlIhkTvG}x{gMJdPdu&%Oh+PD~<4NdCO3bY~~-|=dquT_B8QzQG&bM7y=RH3xh
zf6m^%T6I&nc8JlmJ$xV<3{nQHrsxQX5(w7Yq~LZwg`wqTIrY>pwsr0Hlz24uX!YNg
zz04D*dgWwC?!J7h7T^J0Z%D)!-Ib!xm3p3B*z7;ao#Qj8^d%2MtG#X7n3^kXWI2`G
z)pK)=aHgIH(FdW-#2O<@s~C2O55}MZZjHMD`WGQ&&+%&$V=*!;fr-emh{(^oM;dQ3
zg5h1t5_C0IW5HbptQoqdjyHc_(pRZAuT{}J5(RU1k+r`cmztCql_YAN!C&$w_Sg$j
z#Y|OIgVDP$y(>ovWPx#GjN4%1^0`khf%J2`$eQ=rh<1LSn8#zCGD?{T&L)Xl
zD-ZVB3D2#~Oc47oOs!3Hx_W?eczr$c4fo=UDZR_HF`3Fx}-t$
z9%=aCqE*e&_*jU<=qS5KS8m8DV(o^@?Vf8-P!#Ej<+ImuULvuB4l(&H3`_eOqI$in@#4l}
zLbaY}XWNZ&ov&!XncQjmP=NgYCPiej8&vwx;{4swXNjCq1^#TH?o=DmrrKJzU~q??
z%P@L~$WIFJpLmhCVO5`;^yTv$nWF`-drfgVaI0@a^bfht@2M9Zp(>4nXJl{d2IP7pdMHXZ2dBfr8CC6Ap@bl{
z4a`}ju5`Qh`Hq<*p2WtTx=~H?4lZpK;}eh*cMp^MCp~h)bI|oqe{uc#$gK)+Me_p;
zkrhkL_L6TJ)F*6~uCI1E4mZk&LL~92ZaG-(HU3LiavGK*ak+E|rOo4RXW08}0muM(
zgtu7N{qArHNGT@Xi1rEw9Ty*)!9x{YQdmHBiuFl29K`{b1y0T;mTCwr{7o*fs_
z%%1eSuz|_AJ2L!%!*M!$yjV@R>+S+iJT(7pYhr%bv+!Zx*=5~PFQnK+L|#K=pKHePg(n|o=z-rWtP%M{Hx}b^Wp;eLWcO_8r6hhS-#NIC
z&Jm)?_%wsT!zg!mn5J9O8Z(B2)v-y261Eyfi?VYr+lxe8l^ob_p~joU
zFdft$C$lm$`8(iRtTRrwzcfkhkCv9lpyYN8+qJGV;(i*Jed_(7Zbls-p~>qBFMwzd
zL)6ydhL&GBVuSq3Fj%|loqf;hP2fxcU6L^cF=e);K~6S{*gIFMn_6vOsr_M_#m#if
z3=Rp|l6EC)4h9ifduWK|hC25+8
zY$pq;fv@O?=cEl&eS`NuME?J{gV$xAE(
zE;7UJT1{S3hkoR@zE>_vSw5Vo8u_bJqu(3lhge@Z!Yjuu<2$+Wr1#V+e62@oNO+jaBr?oJoY5QZs^OK+5
zyjY-=a{33DaTG|lcsAG3KVL;JUAD4Wp1gIb(M)A7AxxHXw&1Y|5$te-K{r*xDJai0
zrQekut%M9Ghw$E^y~ID#Ol5OtO9nqLiiDpBLlE1MS$9!G#pWLF%P`_E(S8Lm{*4re
zGV|Bjy_UDlDC`lASv&>Novhsn8xEv-j3F90J`OxAon`&dwZV?=A5cr5{lV8Ku+ySX
zHDEZuKTWNYJA74yCYV#UC;7=RRg}J+qaG-@RSPr99H+)a6^@q_-J9~S)_O@@Q~3ff
z(3rLnNhA6Y@{HK?Gaye%LaKF4kV71u8DTm%hu
zRTV{!l;o(;u<=Wbayd@31CwqrLdt*!dVQdB%gDw;LNlH!&Vy&&x^-Lp7g0K>xA_Jo
z3|lR}goRwa-;TX*Ycx1r0+Sktlf=
zwn$$iTsHHVwsZHfcxBaH;R$>5{4Ln`mG8XFG^^b}h?<#y+?~GEP9~t|(oYy-X54NNQj9do7Zz80
z+ZA_ZMdNS9r*q`~lf||4r2NBVr>yCKz7|VrG)6T>o4r8;p|1Q=e-|VV2n-g5DA*h<
zbVdVwdLXK{#>7}1L%4sS2_uSTil*}eWChPxsx%soSkO;~c%E$c^_3kT%6=YkGhr;^
zJkg#@zH^$#qFruRwm2n3#9sMzueL(8DX||J+U8jO;!5qScj%u1T;pJNh3~i%oAj0#
zZM3dK%ipzn!J(x;g6vd_mLka}(g^onCffCZf+W7OYw6Z}vIa6?sI-{SyO*-+B4<^v
zvZhiG&+^*#qzR(^2v1lEe=w|n;`M+De>cqXo^i0Tg)jP4YnaOWE;My}S6Rq3#bEd0>Bf?Mdyd--VPN}~?X4uS#3(WDMfoZ}n#wcQwJAEIJ(e;Htz9`4Z34gQ
zSiUpJT1Bk%zvBMT%)cKmrKT%GL@kf6e_PWXAO)~D4P+X(rnp-Dqpnt+m~dcq-c}Wj
z=?b{siwRmyCaX%54yqIKjDeML#6z@hzmm{xx|m?@o_fgzAHT{EpZ)0m!J~a%Hd1EV
zL%$RGQHQa%6LY8wYIW$##=ksZ*UsgM77tE(i`KPy%zRDxZXeK=n?4dWvgO9lt?#4q
zstwCrOL)^9O#H#CmR6|GsYEyNwUwZ(E(Wc?LQUmn7rY;oO!+C;6IbW)dAboG-~Ybu
zss1bcT4izk^YVp1Rqe-*sSs4iY5dxQpfOMoeT)w`&NgMU0LjxLy)>G0_9mMOC{?+OM^S)<&Mvm>QV)V34tbe
zF`mU89^hKXV{Em4{DZKLEVj)(5YZ8ImhvR&X+C?Yg@OnIQ^7~RSr+)@5lcOU^!*nJ
zccV~9q+d@WGFi;9kecEPot)oC$OvCyF+Pct+eX_>>f%rFaoCo{9s>4FJDKx!#TT<}
z+8ueHTVcYmwzgK))-EQed;f(d(a1KZpXDZPA30%k+QYX#wA&b?H?H&Cu{dy}{YNHB
zEdP`xtkM}pPAm>U`6~8ZG^q=BXd{#j=D@nCVem+ovUot8MX=K{yg4nK)xsqKqqB3D
zQ?n=h2JRN2l4XZQ8o=vc$zXZGKg1BAqC?sZ}6P$U7m@%s6f!Qu=IV7KS&aBKNT`b#q_S
zlULhqLlE6nH)VZ@B0B$Gvl)d*`aBQP^o0ILIi`bW0S7*4m$6}ZU@Qdm9Oi^kEIAQM&K
zQClhgdWZC4Z-3muTWMMZAf)}>zP{_L(y*Ro-MRI4JnBmqYL<8~1nRfaFYCiY2%+Xo
zt@b{gPwDB=k#A;939facyzcede8X>#lTG5N@A5B-_TOz-J>ywH1k;T<|(q0eGi@>;_WOUwq
z69y^GL*bsLO=-Y1@OZvpdZ0f(=8K9j>N;YclU=pNQCrCu#ZM?yopSU-U9Adq4~*x}
z@BCRRCfJ~&&F`f3wEI}(7-B{YqG1_cSdZ~sO1qtqn?~-KsF7az%VwNRT^toguDfEt
zMi3W)RZ@*G1_rdjVbZ}r2`PNr6%;q9XvFbDeQdob6B}$pE||c*G!sBwzJqxgy!~|z
zFj^<|nK}V{`p~N7D$MP%Ma+))nrLC?O=(zvDI3
zd6)D`8cgZW6MLDT?lOW^_e(RKgx0{+xR!Km*>_64o2diLWLP|fT2;Y_OHEI7tpzm0
zrG5wALweJnZuHnkY1Q=o#DBO9(RZHU5Pha|tdGi5oH|sY23T>msyXUkJ%v#NW7bC_
z)3B~(34D}QzYkciy&q(nzW0So5}hS_jYxm2hFxM*Of@AuT=q5-j{_w0U3cD!r)nE?
zo3Ht^%fkgq`9x8S$HSkxT{`)Nr_rqc`;v#+_6^Qzhi!*pQ|j3_5Nu>~TI}JCSI_eK
z$pekp&cg+bk*@6WG|luz?)lQex3KQpUfx}1AbPO5e3`M{QZRD?S;>wZEA&A4@Ya>%
zov>L(ME@Q5u(0X24OQ?(El{fb4yB{N^fa&+GHe0>JPfoIYa{O|O{R!iOZzJ9SDk*E
zYOwXf=0bR~K<^fJ@EAgAoaCilujdWyecNJS6(+VJ-X-N~R1vI{>wadBEh%Yz%n3T1Z5+
zZ3i%487KM7qQDJ(n*cCcj%IX;>vL=tF+YD3wl|%Xp1x2}4Yrf6;?^ftU(u6|z9yJn
z)PBU=)C2Xm^r+jqw6^yhi~)@pu)!oR#n0=fdu{K{gi8}8_O(RVIrUR{yT;@_P_Mqv
zMvUdIKUQb#-%daT9z)4!cBThXpRK4$5R;4#%z=IR$1`6A34|E!j8bGErx#ak*sRjy
z^1_R)S{X^c!>gy~;*TPaU8dr51NaVr^lCN4?aAodk9kX@L4K;+3o$h^J+Fvt!x9{Q
z-FsGD;N^wUmsH~=(`P4*ZnG+S!?z{9K1(9Hso&&2JS%Fmv0kVMhxAjQ8b3e*?yJI6!5OtyAQwl?G
z+Ib3IuyC;l+1WNZSwbzjV|}L%hHp%l|4x{(WPl+k-{9;a3c}axct$R9oocP;*>xLz
zp02NN29F!9lh~^FEE%qNEXp}@=5Ex(A|Q>qC~O1It^jiov}=4jJJSN|>L5t_OOTk$
zsvam)_^{)w=q&?QY@DFJ!{*NDy=;>j{A#1XO9@+ggo0qou}l^H^%9>j9HVZyHma0Y
zKGprPz_Tfp7B8&!b;vX?Ex&HE=t2erJ8U!fP``5~^Mj8?273vy;9(16j<7MZM@OiT
zD4$vDoURI%!K(@jE-B4v8wFiWUHx?%ykrtIJXx=jdB-=QuMFH!)J6-b$R|^f0ZaMh
zln4Fs-=0QsO1<{Pe}_v9A9+=um;Sn7WWRw+w7KID1)2%uidxvrA9Vi~o6*3o20_%V
ze@VqZ;85XN{gB>)YcMxFsne&Kwx?mOS0z1#M@NR$ta
zkK?tQUF&FbyD9rx&5_A{j>lc}OpN`<`(r{o8iH+9C*LFsk9Bn|1SV@T_9{-J;64(V
znY(Rm{XLi|$gPQrC`WL1-JSh@Hd(X|Ztv}ZJX!74u1h!0PiXVazUyVoY
zZ9$|)P|m#PsTO9-Au8&@kt5Ov!
zM-u+Ntkk&j%D2k>o{kECB~(ZCyVDzR)5%^7%u4KvNEn3=__>3@P?FLc2yw6gRecHK
zla{7Vgm-my$uzFJc6o#4uz2|JGicS?*-uLkMT}+u|TlS>i;kTRH8Gki9e&hbfM`iKHL07u@p%JwuApzf)!nIBQ
zQi!;%J$zGZ45)c3r_lWr`O3DM58}S=ShmZ5@yYLm+@aVViLC2VA8A8N*1YdDqOU!Z
z+(Z?MwSb~QqE|Dc-{FZL7%w^!@?y3r{{m26@QqH;1Fse@
zFFUM@kXG5P&=(h%G?@nP8?U2xjLLo4*UQyoQ$!0fEbJx_Ch=`C$fk@kHLl)z?+&*w
zdwybE6R@aJMMLEzuYKK;f9#RUdT|xBy@+o)2-XbY5qmwoRCgjJdCP7FC(^=5VMz~+
zJw0&>2-9XfYnpfv#qc_H(Aa*~{f_81MyD!1wrsUj-)^_PLP4O|D*&}dbt>R}5+|3I
zSU4XqCt9r-0JU^}rG5Tkg2UIcd5H&QW)ayhE-FRt#X+zsC%ZH>%)0ws;htPXrludo&|#cC&Xa5lb5
z1DAppuZ9huhftz?a}!(&)W7{HSGi?N88QJjjqa4XpW<*b=3=WF
zqW-gt=p}d2#-`6bM`9m5GOhex`HCJ0oaorf?kvYK>{{MMQJk~>90ehe2kq6hA_jWX
zwQN){A~cCNg}y!kU^o>p8lau8P-+qp#$PzC`U#$O7}!?jhfeEWQ*!Mmc&-NC<9}*;
zGp-nEe{`RGoU}NpuZ&RPc2NoWS4&ZB5_kud~2100N$=9ap-GIZ_JhBh`Jds6hDJU3(
zLGK!!Na8!f#hLf1$0?AYdP}>2ob8Z_CtFRWyUJk^kt)%qQ1NlWu~AmQIAVSlWO-dLYnJv)Mx03C)IW+u}%z5Q`5-siREEjtd`l)(jzo>pO_mg_e6S-R%Q
z!m6YK85pPafCSN|lJPfffnJ;Oiy7ke;{Dssr5vKi-}Gay7e
zXZ9vp`G%Y?i6(AO`R5x0;^(!@tAgx*u5x#tzZpJGw9%4{8@TtE?5?FbScn_qXvmgj74`c-F5Ih!TQfL4{e`-
zQNHT6U$jZ4m0W2(9%_bu0O{B;vV?1`fxWV31_%trto~R=u&8x?8>g$Du$i$Dusbu*
zvQmFmA+qg=}%ua&!qu735X!OWdazXyE;5v9o0gd_^0gjPrfXh4Q?Qv$}R4-ax
z*iW*6__*0qEr4Uq%J752nsol&0eG>D2(7k*y_HlSPmNOwS>R(n=GMBks9jC&m49e?
zxG-m6KSJ5qQXF)vQfY;FcCOQ3WM?v6NpVn^`MsTb!<3jP{z
zC@&V)XC{MJsV&4Th8_pnJtW?t8~KEzZ{
zJ1cI?t+;=g$CH|R<%DLe%Xn}hdbn`ksKAd4hhiACjEE1G^)eT4ss
z0`<7pRBUeFqodv~A5hLIs47alC%7+^=S#ASPI$e2XNyffbd9|7J|bJLFgi;HL=w$h
zbR}cZ)v@L67sNnwXGu@Ti*qEQ0eag#n?sAf85_Q;j*Ic8VcJ?|j|S$JU(9=_CLy#a
zM>iiK=Fe&*P_g~A{DOnnqhUDux
zg*4T|jd#dX^GfCKuT&hbhpYJF3rBh=3p^GY(NNM6T^vs8?wk)x!%R?fxb=?sB{}9W
zToJSsRf~%5US7411adO_wZwT`)43zy(BLLQ%j8(n>qB1QZHqZmE63+0t}BE$WcJ%+
zp4(1fidp}B9oCTXX1}QFXNkOPgcx2XOr}>h81$h^qrEB++689_DJL4t%~hSfnySh0
z_M-xritMPMJWb*Qp^Sn8!@R4}6$kUvxc>1Wfd2;!(|58f*C*j4)gXWlnc4!cSrnfV
z2ZoBEC!fIb9nueH%p27%h+*5jEoPqw)d?xeZ@nQqhiBFT
z(!&wJ1|SXxxLB+s&&2f(H_eQr>PAGmo`Q&JNGXS#YTdNZmA)#`PB55i68lu=0HM3nXfB8_ED&lAJ0Rgs=in%tb>Z2T4H&?lPk6JE0V=X2z+t
z0CCM_fyvE~9s?mY!64yC9WZnN7BY@Kei&FNFpZk}At}rw@P!Ue>eH;dafHBOv_Q8N
z#+ec?J%&xPF059kDs6h3TffznAX*366ph>{PWHCZVtIO;kngIVG3m#X{-5ry`=QCC
z>#`~;YnQH+ML?>s6h&eP$kKZ+N?AofMQZ2}uz*seNmELIgkA+iAV9FtTMR`yEJ8@A
zkq|%#<(nw%yMM#?Bjm|5ckbM|Gjr#h6PH3#VMtmjbZ8B?As3VCo-2$atoiJyA1z@|
z7w)K4(v>=9<44w*s4NJjK-D@n)W$pl`UMF6rX!xAM)kx#tlFCJ&7YjSAB
z+566z`wb*slNlkTVX8L|cOici<0JcsnD?o7k539i^t?>N5#l0qaB+%&+3k0i24T@$
zhR9YwYUn$1)ZX>V^RUYrLTA@(UeiIAtft63$TO{uuu>D!Cbx~FtmOsjce
zsz{tPdgZ}-O(7#4!b=(B_gS9cPSQu2e)}dB^as(?%ea{Z1VDqD$o;Aev(uXwt?!42!#AhxYEDgyIzPhN~$tD`oEW{S7((_3UXz$TD%+{mc@MGLU1Z(Xo1RaD}&)mqC+}e8BATIA`bm+BZ
z9j2*;d2Dp++5W#MH)1
zm)QIw0UKY1Zi|zwYPS?J?mmk9{bt=x>4O2gWc;LuXs_wfU5ZaUySnJ@H7>0CA4?4v
zFcw+GmYddUGWaTgQ?aQfyVT~NB+sDy#`e-O&(-RN=$o_}4>dm?ZL%2B4tcq~Jv8wr
z$0*vOJjRL3Ut!KyZzU)n*L@6`;zQHZ`#ITSKQ@?tN=d#SQ@}-XmwJ^CKyt|o;`h02
zt-6)!QFh}zc2z$aZxaYTi5Wy6L^3CVh^e(P@ielv&0WLvYuO?+t4A}Qn@umtyZL?Z
zu6<|zTb@k`^mK`5*WB-HiBkSHCfN_OV@i+u(%C$TnV5|yF5e12*_yklzqI3&I|GZ~
zl`)xik&VCcB451Em%m}R>Tj*!j0MDPv3}F7x$?rt{fPow0e=apQ89f12@^Egh0UUP
zxiPJ3OVo5pk(f;`VC3s>gv>$w5v1%lE;FTK(z1KD8T=O>WbYMCE0rlWD9%?(69P~?
zqolf!!EhiMW80iS+t&PKQ85f6Y1s)vn2r2(shw5j5N{m
zL*DIgAIX;;D1>l})vW^s2S0Ly^3BG&4&D+>-`+sS-#bg0d%Cn+%|&KC-li;hSgA1q
zlaAOG^wW;z&nBK$%#EabP5ig>ZcmL0cC5-81!LC)F+M#b7nK6i`_UkXbo@$9(?fh!
zbMBgpg;rT>byuJhC#-?a)dIk+qEM#H>#vJI=!4^j3rbnG)wDJaM0;II>UiFL`=W8z
zTD+*Mw2iD;+j3(9>0BVH@i(uE?&V2XCR9If0dH2Tn&If3{c^B@3v5^ok<1l0sV!AN
zif^hYbZxbYyG%~2H-;3W6D?_UYjMS#o*fd1bLieu*W|7MkmCk**V|g~g6rOm1X5eF
zxEY6#b$w59*hWkWs_5936`L_K56vu&VLw)D?&2g6Kdx@W|AjuGjgdthmjt9md9F$t
z2tD+a3kW!=r@V&^iVorly=(|@)3e3h{(<4qWk3iHKp`nZcIEV$0%~xoJV$%5N_}2N5MNI(nY^
zxmRyh&tMmgUc#2?g8Ntcah3PzrnzUlTwS9_UMjRFeYR!M86Sk-EeGTPNK4xfJUl-&
zd1Plu?wq{@VYB5SRxV`s+IyN^N&E>I+8Ou&I2)kko322z>=e;XNCOfO%NDyBTTKU28+FMvgloKuscjaH7D@su!q2>}_NJoY;ZrrBUXt
z(N8zVNT>SW=(Ji)l-Y$*9O(ksP8Mxe0G`xQBg~r_Tt=>}E7&PXKyE5;$xR2!)QQ5f
zYCN62ER04Fuf)^skN;jnfEMOVmSNB7i(;!TYhrOq77JlB4gF~;W+?{
zSX+mC4BASvS}#UjO#e|%%Vhyg_3ie~FZN1zFU(fTXT*be1`8d|iFTOYQoB?F(L%c@
zyM2bv&78{Vdg;Jv8&0U*wkL;vj7s#6r~_y`6ZgYb4e!q&ZtZfgC*FZr{vEuB1xNy!
z&&&*0)mFE75m|e3jN``%emtI^7x`^BSz4{t;hk4^+jpaTG9Dg<^D>FIBS1|SId$N`UPCaOC?9*G7M(d&D;Xt14ZOJEc8we1YIHl%bb
zO|lUS8^YF=zH;Fg#ZO*$D@Yc^sOdgv`a-|tvk~k=D3}-|o>h2Jl{m}4b))CT-b#jj
zhLRQm(7A?fm$Ensw{2GHmu7=DN
zc-8r3fRSTJRFOiZKhy0=5hr%V^UxiQoPJ!lsNLiD1CXJ?CxMxSvz4UJKQwZWa#uP??0%|3yIN&!M&$N5UjGy1Lqr5j3CJm=Qal6WrBEjl};{!(UloMiHgy_dhoyy_50@84XV
zXuhMF20*N~|xeXm6l-(Z-wNFkUB+sQyO#cfi0
z8hR!DPqUkW-$?^gnhkBF-J=%@Sgl`I<0oY>pLEDO=tf7+?KzA7Z_#$awmjQFe`QKD
zn7a}=ZRe)AKTleM^adYOxRiQiBX5PqmTrI1a$r@QOsl&(AleCT+@2M6`aI7`(_)OE
zxR8#tN7i9^mjhS>Mb~n7<|FwbcpR;4u#tB+uuiv2Ei^;#X@29E`2qZbfnB3R
zcxhVi5OfE+W7W`eH71?rl*tD1%X04#jq_qmu`%y^Dbpv+ze5u(+SK`cOBL*^0_n0;
ze11*)R@o~2=#qP;Zfn7TO)eNRp39|}sD`MO+!suZV2Zl>&t>0D4+Ie1t^!lX2
z7>m>|dHfY#xB}DPTUm5t%|RM>WI;*f;|h-cB?_Cp4MbgBqRq2g!^L|=gSj^7Ek{{)
zOI)SPACH3B9tTh{y|lCmG8LOQ7^??~*sZj2@*kg5Va{+J(l|%h{D{_G51=cXDMKP6
z*l3p4|52Bv|JMrL8Moxrp)vCwm4Uq9_COi)sm&bhK29iT!MN!Nz
zMtvktyRUVF(hObWf&ma$(%z{x*RC(oCCjuyM?|DVJF0pE0a^QedKVDB{nuJc?j>GU
zty@pzM_ONc@P#C>HRR1TI8$L8!($aY>TL-JZ_Es%q&2CC{aJM$zJ#4v`O0YKa9-J;
zJKb#{V0dKX+H4vPEaLRH8XW3?SKN_3-@5E-h;Op`TUjFmwNd=u$lR_l%yncP{vQwD
z>${)uWSod9mna5O$W%Um-rF}&_DeJlp+h_9xa;1w|8-1D2kE)LGk~v3!--6MmTE#j
z7Q>RxMXc5o`wSSh|8LmtE#?bU(}J#8=jxwRJ>Jd-$*RT&BrOv^B+9rSbOyLbCn2gs
z*pM%0VZ71H!vPZ1S
z{`WnJYYxY6ZxKyUV7WB;TF05M>W-B7&sY_p@W<&AZcz4xEES;;U&patE8!kc#`xD;
z(#9>EQx$B25U`=wF-ken?6>txA&x;y$xqLrCz}ytfC567-Pt*{25CN^JW01tiAfk2
zuAM9LCG>py*$T^Ck#5z!)6ITz|FNxx@O_2Q0+*3Uv=VIts!RzFwBbOd!`;{QXs_;n
zx>;%nAOjhi`NB7RJ;Qq=W3|wO*onikF3niQm)hp&QhIB1y~-s4-@iUQ>-{9U%67pR9HksdpzTf%+SoQ9P7>Bl;vDP4hGp2
zxLb7|KX@2a2?^q2XIG<;7t7>H&L-JXm?yDN6tjb&YT?9!SMSRi)^ve#oaw%AGob*s
zjPgjD;U-H-B$?IlKrv0>EXwDFJQ6pG}tC7g~Hs;HSoBLvoA{9_}i8-92s1>ROVu4P5Db1d7HiOg=
zO){P3_urw6bjv|BA7oTsIFN;mxPmi%@Ae>A5yi|cVwM$?zu5P?S@ap@%lb3otJg-@
zin>>IsT`%SU-1JRdK($3Wu%oHq*7#I%;v$*G8giQrvXNVX!^a19GKly7lJLVn#ueM
zMqzzCq1Np%K1gstoO%sBx*eNfXDJ?K@vX^mV(MrXpeWG&4Z7F~H$3;(7IUJ5bV{meNX#$Eus=*ux>q_<^;iXmO^pEetA(`9KFMoWn!
zgge!#*VkT)bkn#a==8o{Lhglu#?GiEu9wo8D<4`e?5~|3-Y2luT6%_
z;;-MjqTg}6d2{h#^b?3zOg!Q|(58+4(X{#z9~m^~{FZ_`yx+2bhdr@vq!scc%cz!I
z)INxwjAVXEP$i!d*u8l5&t-ksidaOifqim&?>1;(TJLZgR4a#s1O9hUp;ZTG)kS#uSa$Kt}jN
zdBuA!bH7I$hI1yl^G8s#74aVE_!sN7t{371bPZc!`473)8H!!&yG3>S%*$7Y
zl4m%QN8$&+8Xhx=-*`tZ8JT{av=hE>mROsV1aHtzku!VlhoLG>Q$N>K|9I6n@%i^<
za-+=q4Vx#x?RC@LZwe0(6kO(Y*xV~$k79ck|JrZB*3uge(f8eMk2|*Hbb^)8-~uqd
z*L*}sD+k6!L7}iJ#OIUJ636YYv2C|-*LC9#zC9UR`K9$Ddx$hYdswubUjx?_FNtqp
zv7vkT^!e){1yU`HSzV%J#H6vEPV`85n-A>ZW4-f`v@3zj<&p8jwMx{n_-QZf=I%!1
zU=;l9zU4ki-=~C=SEEiSPgQOxTF%@UtvTy?^5FY7D?YFG^(i{@OC5U&p3r9d(IaEo
z<)+ffabWmiaJvnK$vgh|0D5oL;rQv>MEUCK3&jk{bQjx;J=*&oP<#?1sxG*w$V8Ml
z9=b<7gtxm~x0~(+ySxJOM<&n8wn|0kmmCz0Zin+EmNpdhs7sAMB}V_?`+VmRw06C{
zb-!a0g!>|u<6*O22Z1AW8RaSy4szzHdI_Rys+YQK*}=&2K8{o!OtpGSdTLOk3zKQw
zUiYE7OZ(`sT~b+1Iq1R@fxii9%SZl((`x=;Sx&b7WbvWSl~PYI2hzZ!#6-x!b2kZ>
z8n+iGtrS5QV8c?*r5WO$SlY^&M(;NvzTo!;3}Sp?HH-JU2+7_dSOxj@T*UI@QTuZp
z^$NrG%lDHu59|#Ucvw3`_5k~79IKlmJEv{5_3XiCjP`Q=m!ePX?jnLtH;G$h*r8z=
z_DI{^8to?sBNnOMuQ~Q+<&`0O$S3a#;j0T9THX`HiSTv#J1z&~rs8m7u7~TnGvS8)
za~j(bcq!lh9MXR%Kaw+#KjHUi$?oXa1@$t#D&Vqpq|rUaw=puoiud^3hAkzMDjD~qAgykO>z~CT
zotKcm{?xwC-t>=!Wj*9GBZ`U8SxVv3Byg~;|FPeZ%9JB(iw62{wQ5FI+mg4(*Y^%D
zN=8})FjBYE0|#gB;z0iPiM7peV>x(tx8QyI4M&v!CG)$3DRl#@uJ41Huj{c@eoe7w
z_lu6|@X^?Hj!Tm{$R+Yt%0rzWc$n;&93lt3D`tmYuTLJ1PR6Y`tx_t}ao;Jmwx4RQ
z_k
Date: Thu, 13 Apr 2023 22:42:05 +0200
Subject: [PATCH 7/7] feat: dont delete code
---
src/executor_factory.py | 18 +++++++++---------
src/utils/io.py | 5 -----
2 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/src/executor_factory.py b/src/executor_factory.py
index f162d6d..c8923c6 100644
--- a/src/executor_factory.py
+++ b/src/executor_factory.py
@@ -7,7 +7,7 @@ from src.constants import FILE_AND_TAG_PAIRS
from src.jina_cloud import push_executor, process_error_message
from src.prompt_tasks import general_guidelines, executor_file_task, chain_of_thought_creation, test_executor_file_task, \
chain_of_thought_optimization, requirements_file_task, docker_file_task, not_allowed
-from src.utils.io import create_folder_if_not_exist, persist_file
+from src.utils.io import persist_file
from src.utils.string_tools import print_colored
@@ -70,7 +70,7 @@ class ExecutorFactory:
is_chain_of_thought=False,
):
EXECUTOR_FOLDER_v1 = self.get_executor_path(output_path, executor_name, package, num_approach, 1)
- create_folder_if_not_exist(EXECUTOR_FOLDER_v1)
+ os.makedirs(EXECUTOR_FOLDER_v1)
print_colored('', '############# Executor #############', 'red')
user_query = (
@@ -170,20 +170,20 @@ print(response[0].text) # can also be blob in case of image/audio..., this shoul
def get_executor_path(self, output_path, executor_name, package, num_approach, version):
package_path = '_'.join(package)
- return os.path.join(output_path, executor_name, f'{num_approach}_package_path', f'v{version}')
+ return os.path.join(output_path, executor_name, f'{num_approach}_{package_path}', f'v{version}')
- def debug_executor(self, output_path, executor_name, package, description, test):
+ def debug_executor(self, output_path, executor_name, num_approach, packages, description, test):
MAX_DEBUGGING_ITERATIONS = 10
error_before = ''
for i in range(1, MAX_DEBUGGING_ITERATIONS):
print('Debugging iteration', i)
print('Trying to build the microservice. Might take a while...')
- previous_executor_path = self.get_executor_path(output_path, executor_name, package, num_approach, i)
- next_executor_path = self.get_executor_path(output_path, executor_name, package, num_approach, i + 1)
+ previous_executor_path = self.get_executor_path(output_path, executor_name, packages, num_approach, i)
+ next_executor_path = self.get_executor_path(output_path, executor_name, packages, num_approach, i + 1)
log_hubble = push_executor(previous_executor_path)
error = process_error_message(log_hubble)
if error:
- create_folder_if_not_exist(next_executor_path)
+ os.makedirs(next_executor_path)
file_name_to_content = self.get_all_executor_files_with_content(previous_executor_path)
all_files_string = self.files_to_string(file_name_to_content)
user_query = (
@@ -224,7 +224,7 @@ print(response[0].text) # can also be blob in case of image/audio..., this shoul
break
if i == MAX_DEBUGGING_ITERATIONS - 1:
raise self.MaxDebugTimeReachedException('Could not debug the executor.')
- return self.get_executor_path(output_path, executor_name, package, num_approach, i)
+ return self.get_executor_path(output_path, executor_name, packages, num_approach, i)
class MaxDebugTimeReachedException(BaseException):
pass
@@ -289,7 +289,7 @@ package2,package3,...
for num_approach, packages in enumerate(packages_list):
try:
self.create_executor(description, test, output_path, executor_name, packages, num_approach)
- executor_path = self.debug_executor(output_path, executor_name, packages, description, test)
+ executor_path = self.debug_executor(output_path, executor_name, num_approach, packages, description, test)
host = jina_cloud.deploy_flow(executor_name, executor_path)
self.create_playground(executor_name, executor_path, host)
except self.MaxDebugTimeReachedException:
diff --git a/src/utils/io.py b/src/utils/io.py
index b4d0c01..a9104f5 100644
--- a/src/utils/io.py
+++ b/src/utils/io.py
@@ -6,11 +6,6 @@ from typing import Generator
import sys
from contextlib import contextmanager
-def create_folder_if_not_exist(folder_path):
- try:
- os.makedirs(folder_path)
- except FileExistsError:
- pass
def persist_file(file_content, file_path):
with open(file_path, 'w') as f: