From ddcfc9be38edb6f52b3bd706fe0bd5dce6a9283a Mon Sep 17 00:00:00 2001 From: ARNik Date: Wed, 9 Oct 2024 18:15:38 +0300 Subject: [PATCH] git-prompt and git-completion update --- home-config.zip | Bin 33137 -> 39184 bytes home-config/.git-completion.bash | 649 +++++++++++++++++++++++++------ home-config/.git-prompt.sh | 308 +++++++++------ 3 files changed, 737 insertions(+), 220 deletions(-) diff --git a/home-config.zip b/home-config.zip index 225dbdca11a844e6b189067ac619e901f09bd3d2..88e76dba278c43f1be6b7f0b6edcf1c1c5b7b7ae 100644 GIT binary patch delta 33689 zcmV(!K;^&jf&!4T0A5NMLHK!6K?x{R#6PhKNWmhYU?jSDZfrfO1^O08?k zCV}qLr_bfG{c{(8{aKw&y{lNA^wc};rM_1C*_=Q8Wd7|X>Es#Dk9|GQ7hV+I z(9$|kSZ@;MmDRVWc|PCk_wn>fk9wf&O*|sdTU_)z;6ptRvpfw)iyYGzaiCL`Pr>Bd z59+0kb?Qax-C`7lzIq+{I?i-gUFtL=+Pl3+vXS?HnBXUI?u9XkR8~)uMUH2gny1NS z80aNo$hdg2$5im=K}SW2k0rf0P^q3JxmKgpi~XsJy_wE7kIKEt(vTju+?ThR8i$cy zdXLwtoh?RSV+KN5yY@!UybudSA;g+7yLjqmIu2ZZRSeEkt<~Jir8WhPeAEtbll6E1lTTDY+K3q ztXFtJ4V#Qls|o}NQ>2ZMhRtADnl-1dbDe@c5X$^Coab2=${Lf+d!un@+t;5;jDIja#Q;eZhR< zBnOn@T!A2Hd)w@B@*D?61TDgUDLqiDYaDyQ!N>H)va+1y%J#%~PrkP-z%cKU&_Qg- zJF(W-TamuSh>YY_q2gtwCZc50W}gE+dMIWb73OP^yS|p1M8x0_v-$lA*czL;7sXtH zN!rz@SX~DtL*RlqxM*)$;)0gAC{B3jD*;W&8MEOJB<$rWFr93ZWjuv{FWa$37iS3wfaaM;=%lJVQ`cq2FpttTlwg^cT1fYlm}@UK)BMViX2{62{|bp%KOLgpr1khY1Omu)8kB<&*s7@%!Q7$(whtkKP}j zyd56CIy(Hz$%psDw?18U7PPO4FQO*uT86@l%VeCf>gk;Y1kH>EuIK^b5 zGZB-(jq6Xfe}QEUA(9F^1-9?kLR^j-x|M)VIpZX8fOlBhNf6_I0z>GDp`@=7b7r01 z`mLP3I{7#}c>S85y*YUMeB)Lu&y1oL!@Fi<#Kk;X%trLVzBF_M@(AarVGw}k=!W3j zTSU2ufE?e;T?&sJ3aK3iUvK~Y!Ozc}@3DO^ZcV^eW!5|@nKNYan|bJSh;Nt`4%@El zk$oW?o#!|05>U*4@wbW1 ztW4c=nmY6RW|I>pKcO6mU6dkt5(<4LZg9FM*c3(WxyNC=7vGQ+`3w!y!9LA+)+ToX zv9^1t>=SDNVN55tk0Tj)!7!dvK)~=RVAm4drL~4M8H6mZ^qTUHlvEB-+nwfZvw<_> zlX4-q*6k911^3QTpPv%(xY=lIsVkso1Q8)fy@+u*OL`yx-e{ycU!)i~4x4L;9uB>9 zlGQ0LEe8Q_leCuReER7#W}Rbv!@hvX_8ykfb6Uk?=T1hZ`qIUr1ck#TMmSlJ%G&X2 z_gO#Cmwk%TJ5IBqqZMv3s?KUoPU_M@R4%1{{BiAnCdv^@w8`t9AD?cbY+i4qYu}et z15RkaAyIlw!x5Qm6n9lr8zcmk-m#Tyq^v+e9qe%&v(BmzrIUFsTO$EL4%4v_60HJr z)(D%`BRa`<0B@589fz6P4tpAIP6<6(e}}^ZvaYOnMuA4p`c|_bSvBe3Naj21Om4{! zzJ4`-l{)1>t2rNw0?4` zmL$7>rK36G#3H~0tP!NBGCSt70o3cs2_VRSSHUtHV{4w5>c1~SLc-nBfVzg7DW()j z6CV_kkyX&KyAnTgaEnv{{{gR|j&YjI>ZJnb;F6(@r$!Tt9_oH$8Fgo zzeBvb&jwL92Jo=rGh7NlR6Qe!0BylHyhhD4y$BLIh$Uzuk?iboJT9;Jkfs_Al?JDO zhSOr!P-YpXrD}%9gVv7yHYG=Gu5}hX=JboiiAgyLkmM9{^`lE?1ZQQmI;UlH2;)n; z1~qM>vUYcduGyJI4N_W^B$WynLLZ#ljjck{5-8k*u>p6vgDcC2)Fv*N*AcM~-&xbw;fvWbg0w?`fM+eUx z7Ic9ij4n=#o;hkTP!81$Ii~8<4Z3JgDUKZlDPK8T6bL|Ij4oMj+}*zZLNR9 z7hsSa(7>_r8n$?n`fO}d&l1YrMxK9>MI<4e`Q987>5_;h(EQ&QTuLPe3zEfusC>d6 z<5A5hpaPtURzwjQ#ndKhu}-L3f##{fkmgiOn!bu!`Mq^K^L5FJvwXnb7r|+LGS(W^ zf#cwjR9wVaW0q5vJ5Rws?Wx_~b<;-v1zebw zxJWD&7@bjpI!}-nguiJ@r84d@5DIcfY&Fwj){6Yw%Q8I!oG{QZcxJ=V&5#RggS|FJ zQrVvN4=9w^pM3gv=DTSjp3b(}s z45)gFSd<$&t_v8^gME7RjMv;plJaa%(r5);-N<}@xJ5D{g;QOaH_SzR&!3t+hlR$y z3lkc%g_w2~^D!coQk9)EvwUSwMPf73zGvG+kkLX*ha|%m2{p*c62`o$j-&;N&HsEO zfE%v#<3OXZ>xo8=AZ@U2$;lZoAS;S|BMrcsC-VilBeapo6${aBJdt+A@-7%eVyI_4 z#%^SP|0j!lzR35)MTT7^*4(8={jk?;e%~>wLB7>{sJ=+SfO4;oTp(v1RIIhM668MS z6U7%h{r;!_Sgz)Nrg%d*8_2sudReU|84}g}OSl|tgK8;7u9Q$rQ>lr9$=4O6*x+9z z{%o2q;)|y=Bh{`IiU^OkWIJm}GYQnUx5EK{!h923!%oLU zy<6&Fjtn*s1C9|hQNzG8hRil&^9HZfOXmr7*;Wz66uK)nRgk_>stMf;Xfg-j6sLVs ztx&m>Ts=~srOMf`wb2U8t&mX84%n)3#UX@IL$IuGp|?Vem2Kt-ey&}wN%5qtc#!9R zBp0)>IS?UC7MXZ-SB5O&hz^3)_l!6d{HK}|i9^h&^#%LaYL~ZX3&Sj_T2kNG-u~jc z9S)1hcC0k%lQ|JuUp^0tOP{Kv!}80XaxNVn#sEz6Q>_t}p- zhT?|7>)?m5%K)0ev!<=!?68fwajiUT(5JPFFWEF4=W17Q;rr-UK^`C!)*URx1tcrU zav`lP>tV*%O{%zKGDXaniozltw1`;KCQxL@{E9x5OSH<^qZrDsI)ybd{F&i@7W!l$ z&+QbN8nmpaYDt?2q|hD}sJ7G#1li(Br25mNcdvg{6fob&2?!>~VFUm&IFJ=_Hih|K z5QK!Sd|DwGrKk;vMrEZ#I`jZrGawt6cX14+To#rKi41&kbYlUxXlJgVT$5{(&!z32jSG0?S6la5@I#Dy&j#NQ_BxN~#!F zBuTg7Zo0;fSd*eCQuaK7CodIaMDn0U*=ALT2)u2Rk?)Bk+w{D-fQW3087sehekszL1zAcTq?t{U9*9X0hGUY?MDorGn zW1kd-$`yOR-F5F;zEdz`LKvF&$M1aLut<^7m%F{kb~kaYgn$UKETjH0Lj7M6DNkZt zIE=KHnhe-pj`KaiT-&E>SMEpA9Vlc=9llL2HG_KcYck|sQ+A5LyLJ2TXRn5TJvu!* zK6&fjRd&0GDL-$2-EP0>;IE5LalMgy;CovocpFxR5AJH6ZV84BnQa<50fX+PTAkT3 z;ZD8mgwM4KiM^IJw9%qmmb6r|f!yV|zP>iMILeK?Q|`ETm;~ZTprIV8dD)CJMLyH< zl=Vs4+T4^rU=US1?&B2zrFoOGKPovlk>UH6QuN{LkbbXf1H=8x#7qYJ-=qwn>br1PYclnIXJJl3IP?ix^9>UBAtJZ;0pxE!b{b4!Z z{<5Q?VIRtWF<%Ggt=kr;2+^`=VP0305yNU>B118eX2WJMw;S#;x{^Nc)RNT|Is{{D zZIEs!lHc20@%}Sy#DVM*z+j>~7+Wolliqw5PU3JJ`ks^)sqn}1O!1Elg~Wyv@d6@9 zrRGNIs+FUIj1yXe<4SK`R50wTJHX#E#~mPEaet_PX;438)F(At;4f&mZq3I&<+Y&c zln5y5BpnXU3%#8?j%nF%^!-xDw)1sAD6tWM^L_B3Ut2h95hUT-UIj4z0Tvaos5-O3 zi47pa89Lt%qA0vsiJAGD#(LEoh5wa~NLIGJe$VU15tbB9RZ=nmdQ;&mi~g0960Q@3 zR2R>Gx@7`aOllTcP94LlO~4& zuo~qiJc56cs~*xXQpBVxku}a*8PDcilcpH zYsDGwsXUAV-6aBYPm{mXl}s&(9L16yOxC&qxPOyr3Pti>>>Psulu==M+TH!YPpRdcI6t}G}wM2&_k zQ>nU1x*Bt#xR^g@*fW`~zJrwcxi9}tD_1F9 zNta&)hvTu!|Br$4H(q?7dur}ni)H*zd*9yO#*y6nH}NTEL1;qxqG;V_sFtr z>%^A!NOJZjmW<#rBxeZ%SPVdaiYxMd_FKQI>gUV=pk!yWNt~=WnCWMAb#=X4d}M?! zqBjTupoO}2awIOZsj$w_bz-QPxL9I>^CkPz&27GnE5eF=VHdX8 zd9(&u%ve=qNsAT1c}Ucpy009iM6fhW00vK3K4M^#`-;n&3?D z*2{u18ITjkPvgyv)Bn z@7as5lMkxhI9vc7xlEg1vdaLGr((4{Ty&D-4l;`ThIZB4W>ZT5v*)rV&^%e^kq*09 z{f3JymN|IjGh%)Dw{HlzhiYX{{M#g)tkA8&js^=FsJbH`F4|^D3sz>UbFpnr8hQq2 zOg>eH9)fUyP`)aEvgw)QOqBJIdSKA2reVB7C0W2Ivm5u!)#Ho|w6bt6CBbFVcKWM` z0jJKpQtvDE1v4&?H%R?(E0|bh$}Mr|zMX|s9Fd4+2EpWW=D|y#V^>jE=+D{4c5M?K zEni&b3(heSua@-%377PqQOPQ%?1FVzIaA=Q?BIOqAkKt;|B+XdY%FNBpS(twa}xRh zG(X}5g8&vdG(3SIvWHv%v_iy1uHrZrO!TiDX^)5$Bxs42oeCj*KS! zR8v$CDy0^GMdK;UqLt>+d^>zQdb@gi{r2pw_Q3`B_S|yF(C-thGKA7Yo+s_JnYY`2 zyh!I4bZ{G?#ch_Z!!}|Zu)*kjgoTHQCIoTDNtRBeoNhl+;+WPrDA0281|f&a&ze%2 z83x{(pxeYn7p8YcBuka$t@10)rZ+z`pC3T~*^~Bv?QBMe@p#2L`{`QJO3b7M!c>AM z;Nkywl>GDWXjS>N-IG@_wLD6GpVSsPF);Vni?`Ol38}o_V8Z6u#_QSlgPLOK|Km}QP29>R1SKAS^^Wd)*eAwgAo#k!f7D~chBcFGv9K4l z_xd_LU)$7F15CgcDOW>dY8pFrTXlcmvwx^0{mOjDc8v`*IT%!Twox4`T%yS{7xJGc zKA&g13t7ETDe?!=vqS4<%jc>=6(cc{1VIB~R505VwDsc?ka56hfEv1r91m|6jdc}& zg?vzBq(~4!wvRN0wPVPUS=0(~i;sGb9^F48zWoez`joeM|D@e2uqv9Vp+3dPXF>K5 zP1w-%;#_%IkD5vOUGL~=D@M#?H8o3K%yuESnlS39}b`xbp%cCRR~JL$ej4W(mrx4;L>ABA|cJI zqX{SI6}2SEpAK-ik2ypi*`u;gBeee@dv9`+Uwz^R)Us#Ua-iis1ZgJwNmE$&W{6RO zPgc#bELh7-lbg;Z0O%rHFQEn=%My-m6Mq4D{qRB-kCo)hTdU<88e*z57d;<;O(C<< z4Zd9v)nVS_r7|7?;#1_MY6Sx%2)AvIC@|vf@wvA>(zKW_scclDsrgABwsk_Hb5ui& zj=VjT+@T_7lcZ~(HlapLn+{zru{KaplOx3ERqV3*xKpQ217B&9+|C8*UBBLTkcm#1 zy$AYR6Rc6BJ(ciA7Me6U3StF+XJ`5O8b(s-q@z+9ht>|0A76d1XXEpkHJb83OfHe4 zBZJyXUV12qJE$I)bDr3Dy9_hpS&iFZc}|y<>k8a?Jq$rJ@b*vZnNj7G4hf>`3`jg0N+U9 zzHweK&(sr`byObBO>UUH7`Uybr-*CcHL_pck?e!O*`3DOgp)-g`&=@V;wlVU#hn$u znH4g+m1uFLVHTTno99Y@UY3$wDVY4Pl@)92_+Eg~IM&N)!%I|?yIAOYntuA(vGGi7 z>}h}d$(r`qlI2?gz|wPHNmMc3`T6JjAcX@TZOG}FPxBRYsfvNELrvwyKSBSgy&*07 zll0#sgKQF%Y`clT-W1LjgXUcoBGXSswuRo~=g<*b@SgttSzM@p?N-nyc|DdeG5p#8 znFF_U8ZvEtXXf@{?Y(6`%aYsw9>#pfv|BQQn8R8R;HIGa83%)LYdAmk2`463QYyoR z*-_lKB~FuUA^Yapo2TCm`0?ed=ikcH56@nG`%E5RJ^PB*T%MnP_w3cHe;fSi`O|+f zAOH2)t2gre)$`YX&z|b@lONx_9B?Bx^NY?gw>eaFw0A85hsk^*Se?oC?xB3(eQ$ES z5$szzGbr+2{qF0MmPGI~5`Yg!k9oHcExluo9vuYYa#%ii8C9^NR#+u^ZCB6_+fyEx z_cc?#9l5%ey!td@2Weu?Bq?3PtP!GV8O6#evMN}0t47j)E!{MW$1CT@ZkKjLv>9aH z(;|(Dc;fZ~GmLvC-M3_eM8;d?efY=TExT0O?X!(gp7HHa4DMmWbQ-0FK>JIJ|66ar7V^v z#F){X;lcfe@mfDjMzHiBd)- zquQ6Uz$7h!H~2z?p)a?{Mf64L5S{CP0bxg{Zv4ZRl2+1pUhO8y*CN?k=W;Dwf&fcT zadqww!oU|I9(}o8Qo<-aMh;yXcfB&u*)2SOL34KdR-vlO}QIW(+Y!~E0K}C(I&EiaWrqULO)=CiFpgKadMW-adpEYo3goaex{p>Ti{~t zQVX(KXaq)Yhwkz0`o_+n0!EzW5_soI6w*ZDHBkgjFo39p07{GS4^xId8YAU#QkN#d zb4}&srrDA`8C-I^Rp11L4lEyoA0AiVwkH$Y;9~O|V}i%g#P&Dko7y^h#@sDUM*LTQ zRWtrR*gC)}rmm_{;phX{stM9&!~yXPcbVJ~1q}>r!5P#vR+<9}vEa#A6uAw0gLRP# zhg-SPaNx%4&e*828YfAGRhr0@GeWzv(4<%A?Y3L}ETaR23lqB3sEtlSy-~x9a|_Yr zxM`9MDJPJh5@X>fW(-etbjgPqj{)E<(%2#NCK~0YgRT^C6Vvc;VI$3-C9_0>mEfKDs=Ci3Rh`6XH7fUE zW3Lt;e6rz8_BQ>h&n})i@mYC7W7>Bu>YgdK?f}bUw;L6;%SzBj1#eD}VHQAt+3lkP z5#l!R(iZ2J0V{sovn;bTb>ED#XG9~bR!+vZ5V*X}TAS03Pm3fy-cZKORDPRO&yrpr z!2zIjtz#SLvDG#pPQ{#&4mq{0Gi#N0v&>KkB{7VOk3KxwcIaAMP-l7okho})774s-IaL(oDIBrs z3_78M-cL`4@2-dWlzr^IHit`+H+r4k&#m4EoZY>*-Bz#1Pu-(aefs&QWbfUP{@`aR zvoNknGU|B1eOj`E((n%Cj;qzhy5J<}!3|_mQky_XEg;dR#mlD!f(B@R6;|sReMIIJ zoONqU+y*Htv8P?L zPPYT~4(m7PYq=RFr$5Didc^lb>R;CX=HT5Ldl%HaB%$Sig5mUhz9c@K*lpE&FvU+L z`=WVAB8R*uro=BbT&39@yKDvp%oM3BXSf+4{t4y=OvY?tekJ}7=!-a*VRb>&_JX+T zezOrDG|TLoL9^W<4b%yTtS35D<(TPq|A;$z8lD9O%$j?7h9e1o6&^i0mE_yz++vmY z(J7x*RZedMKi_(V+ne=!t95*H3ikM`b$r{K7HsP{J7uoUwFYxlto_!eV&^#5h^wI7 zsu{jbnCIPPM6E`*8L{>-(L>&jDG3^Mr#i2p;Zt!OGPX8b)57SP?h??y1EOBtqdg{9 z#%DF5v#!@WXg7_2j@D;sbq#54yS`r`FCyOEbB=*{A#u%P)2?JFo{Ds)y@()I>Z_tF z^i+_-r@FygT224-dzmai&Qe?l#xqI7z3g zM3M^Hgon8s^;nDpk$#iJ?R>eMFWW(%i*<1!X-6vusgig)xl7YYhEKKCG1JFJ+$ZuZ zn_Ow!l_4{GsL|fk*BZ1lchsCV z1Gtn=9U|LUf8F|@Ir{TiiROG}ous9;7)R{-3y`SY2q^L1j|4v73>8sgW9)b^xwC5e z#dxENzmn}EYSeI)C5m6g@LD`t&`}_W zlomv_Oe6NJLId^ua3heZFu3&p?oicoy%i0FSdKG>2WLmtKiZ)K=G9r1fK9~uRa5=G zYS8wx-iW?aCvFziU75D3dX!m~MNc{jux1j29tkb}w;F-PFX9U;L9>Q!OH=RwDN&N5 zkLzlGJ1m|T9lp4`Gn-4SXwmjP7h$`A%qCL1mv^sN4VRoP=*IXF$t87#iff{CL;g)$ zK-F+S{%a?qNp@wlK5(rE0sGQoUkn3&Mxj`}WJVcAT2lwK^UkyPw5&h3w6(Xy@x@BX z5Ba|N+%4;3X!NVq?Lcoi4>n!p6q-^YP*zEQ<%wCEDt%R>x@5$U^;^fubXcrdVDD=- z^s5Qq;AdGO^?l$y_3oXgGchgz>`8RgOi(0=Qai$7Y`#$WJ1eClpntW$ehK&lj-<&G z=yK=ST0BneN&3c1ngQpVZtxk{N2^#<%_@|%w2R0W!V}B(-u{NVzP!Uf!V@tK#ZQ)h zkGy+=gfV*io1^yLX>>a{k5xIRl)r0Q1m&vwQb#VHz$MN4fx5v5OkU%IwUfiQZLkTa z5)Hc;lC;c8>ZMyR*p-Cp-0SHB_k%jTyHkerk)elbM;04&va*em23eBJmE- z5c^qNAQyn)8y)O~O@8!;`v`!6M~Pa0n-~+ZiVfdGt;uoTtcr68rF(45vc0ihJcVbk zy^&81td5p2zYe7iZKb*kD?wq{uFp}$s|#~sB;$}K1u5D3S%*5G4HUmZYk$&YGdGa* z%chv3agiR$FfJhp5f;4U{v^eN4xD?m2#hx^nFS}D3i6Y9{rkIH_Hy4)com<2n%p0r zN(NM9b~njnOBPf!^!A>q-@ko;LD3tN>|kWE+$L)UTi8_fv)$S~>}5xRR2I0C^ogncc6eC13+wezC?uolP<^59!4((8r_c4t=M$ zMADEsbDb5$8ek-nNLXIfZ3@)?yYGy65Ea`)QSQI$rZ`_Er44Mh2O*kXJ& zZ7lyntiNwa>}lMT>k3>$ye9B zFJR_qeST`M*s|%Pcp%tnt>2v*W<;$EzP+`9bfrVcP>7q6T*rN@kpL?vg$FXRW=i0v zoimxI#r!Jc6oq}LGR3n7HvVKbry`tHXEJ|n3c*ajZ+p-iU}olKIx&76&gLG>I1EUf z2Jk?wasxF3v%I61P_9vbQ#Rlp1?VWiVCDxZ<}7dw5e26La&Vc+%?pI*wtC;>G?qsC zoGNQi>h(Dt&7P}GFMfwzLfB8(tlO8bj)`_o=3P^QLM6o=b`6r^V$(=x(U!3T#An$% zvWwoagv5GjW`T9!Qp_*s?H-FDD8z3>4|Y;!QZ;HWeGvIqbUi^ z5K#mk9>iE6tJLic@@XJj26M6=apL>eudb8#K%-la7BDCWZWvYRD3pzMX_YmnvS%6% z8z~*K(BeO4FDTB70->sz913@Bs0=cA*G( zw5NF2?I+*P=aWAm*AWA-DArec`KE9e=2BNq!3xQrR!nQg>(=G>LWv&BO;su$va6ET z(rhqUHRdr#HOY%Ha--3EtpvS_mwT$iFZ$5HtC{Y4jIx-7tRlSEKoRIvg<{{x>Z$&UJQip5PN$ z0jUL+Vl4hl3kkY|6*^fCZ%m2d)gYho)tpvw`H9ZbTIQY|) z5O-zxNbM)(j!g4v{v0pEiE@|#Y|b)-jUF;C08PGsyAZzKGJ|VminO4&Rn`hyr*f9D z*`ln(bZb?oVGLI@(kyz_@BPkHiOGO6u@p7!d&?d*9@MUCzPu=Poy1rYD@e-?RrM!J zosO4v-B?_R+IJPJnhhJXiPs5fn${$}<04y4JeOvq5ybn?UirE?VMw*(wf8WUM?1c_ znoml91O1Fnp7+tfq~t@!G?~OBvh0X4Wia=crlOA)4|E~8Y3c%2S$bu@*}ZJ??si)7 zLyrP@0%S8?Q}y)%`Rkd1(tREe!1OCDR&2%b@+*NOb5)xT#>?>ql6uy`xo)rWT??kN z=;_-L;5TekwJSvnP-$ol+ti8=Sxp^d(+)^~hf9BmnHk~QT_P>4>BlEJ$}iz7k`7mT zdv;OkOisNB*w#}4Z%29IQjJT&h|6V5FSl893V@G!4rfJaE0@$;$abjv9k<`|aWA)$ zk1{Y5n$%g)6(0tp;Y1$Ji5)R#%URXgqJgGwp1u0vwRg6dR;=D!Cnw#eDgLJPy=}^W zqN9z4QJ}3t0jJPoS2+Vo_R<@#ixsj@pqkvrCpjsH)0^RK;mU&51{X7DHhN8yrjhh! z*-a0f^yYkXv?QPOMgwgv{Gm}sm=A6QjQ4q_IX{YwIWtx4USz^16a3fC-EW8#52I|g z;``x;GfC$?)hMHNfi>`AU!-9)u;ipZ(TUoJ4jrAb3PhhqolmpRs$7{c$TW>HkAVx&9E%x03Z*0qMB!rDP8jH9hwR=Ym z-Zd?{H}5cnJL=oKs=`MQUC{Drv|BVri^y8CbVS_519ZRVfh&n zG|LzaU`uVCNLy_1=TPA@4m)NB%!6{-S5dlTyeY$k{Y@Jcq{u~be-|0G>7bruW5gC% zi||se0m-1VM%rGzB7@`ch{EJ!O%-(x6~+x>o=pxjOK8Q?^~Sb;P5i};$z|=dM$0vP zHgeeHF)dDpyIAIMwZD}t`>+tuxXIsGdd4LiXtC}%3v76NSe3KC? zGdalZA{QRYbRpV**hCul`s02~H&MQZr{6t$`Y$hkd^33Qa`5es&tAXQP>_z_YTP3C z!mV;DVH;1JAiT3lutJ`uEl?*RjUbOPJ zHU+$2vzxrpgyc9LG+7!6o*Yuu5#s?Wx@r=e$3@kkeCwj-X_of-q+o#EMm3jX*Co*? z{w5#EB`!K-T`LuHv=`_EDXWa2hW}gx`2NN}Vnv;Qskxn{GHdORYCn0hl2c$Y&vD(( zO?H5bPBe=NCZ77Eris0Kb~>Cu59uluml!k5|L7q*5`Ra>bLj3n$0obfl)xLN4)n zn}zy+CFwQN3(OKi>Nc3;)?LvG5X4HR1w|>%+y?W1(dO~_bm1&-lysri)88lDWm-|cyQ%M# zrxaT}wvWpagleg$B=C%<*>F~?|E?P%D#gUnCgFf_UHN|y1NIr^&HCOP41e6HtM?2G zp5ed^cs`31_TH&Bz7tBCpI5*j^7$TM`wxh`iPuf#d}>I1eqJduZ|=Zc)fGzA+S~(w zbovZ|%F)_wx}GuB$R=_b1GYA8Pgs~|xPcJC!*(yOaGeM3vDN%Cn+1;YTmAD7e%8ux z&wty!%x+squP}zXY|@2x@FY!evG#TF*1U9UI>!YWn-=wHJxW(0Va2KeW!H=Hxoj@J z9p^s#NbEvEnA1kf7^cy=4{?dz3Jj_GGv9w72C5+10;JjPam)W7+t*L zy6T4X1Gk{WW!sjjRroy0R-zzunO-9;cMUy~4&`1!@18%yw63fdyB*o)=J=9-^``Nw z=c2R%<7GaoH$~RK!qkhQQMp+xeEC&B*yIC(>ZE86-BDK{KdXtVe`1 zYeF3{Di-Qy0+R-N^Lg0?rt{^11Bh6?46hJ-+4N!x@0$@x8<$1$w~RP-5>BtK2jP^uLvM3>F7zETDXc zKmw|&GipLj_EP=E)D@1?KoF~pyhxk@9lw$G@SJlY-gLkY7sT-{(S0gkyWMWv2RQJG z7(?G%hei#;yuQ*WhP!!QUtJC561i0UMs8@KZ6%MI^E2MBnZN+jQVq6$5BxH3Q}O=h z4<^S%Dq1@|*0>a}QWE^?C$2SlQ>u{O6y;L%QVO2YM%9}+({z;2hU{H19F1_Wqzp1p zsTENYt$^GYwFbU#eS2U1`Ruf`|*DIdC0MGlip0Q^{-%e4Z`3O0dW6$6} zfxSz9>40$6UV5>nz7^9^%qV@$JBwOEC(_iVJt0X#$cU6#4q-3@@|dC7XJI3>-w6mP zqo+Rg-D5hsO;x|WS9*zZtT)iUo20~%0^)LqKK zfQ{ceY=9C&%6Pxn9hqi+vjk(|ZBZ#{9>-{%wmqRc?F66)Y^z!x8VwpC?<`RG;do{C zyc<2|ej-s|$dKtjOVV3fI+;zFp@6*nDOS;zRrzRa&*w-PkR8x9q4D zEVB#I4ya)SBR(Kv&!RReeGcum+0;XcUx*zJZ7WrM_(w^9O)oKvB(#=;PPKYnwecHOd-Adp`9M6r-rLhE3s%x-Z5GSv$~#3?vJGgs{p91VB8nU8Kct~lt=tD%}G-0BmX8fc{iIszPRE5xbJZP18 z!pdk_46KFvgLae^=g$hOkltC8N1e*fOr!L_OP^?64%hU!d}ryDmWzCLV5-lFJ)KOcRYaAAHw< z*Wu*esySO^{`>?wQ{Lv_c%AkpoHJdvKs#i;JO1;jpPJHXA z=FA(rY+>oW&9UEzBj7jX)#o;k+I#%Bsp;nVhf7Jn_|?<}= z3;L)y@9cazf$;;671XId!-7y8_K?Dd=HFTO?YWOz&c@Z`nUgYTceev{&St+1AE zs$;V}`FX4)cNPCWU+0so4d1^@r&RZU8?Q@)WiwxOYFqPA1Q~m3K}LMbvO=n)Uwh&# z#ksWCSHt3x&|UtQB-TeDBfks;(RWHC>b*B|0ilofm;IP`>GtXBlD z6ybsCT$S=9P2^)WOfyg<)`=dF$VN1y*?YMEWC2Xr5P}Nk<3&zP&Wua1m~rqLC9Z;g zOO_Ih3`YejG&`mx zj?ab8cDPJ6-yDmwQB5-lALEB+P?NN$A|pJ;C^H(}>D z5%8dfwQ%u%smUz*J`wa`1+}Qs2$g5!Io#g*jnI%QwbZaVhmwtxy3LY+YLK9l(Ies& zuE2V;O(Gd5ysD{t0WWw_=`C$Hm=f_xNX2Mv#ncD;w@Egks{lqoxxZ|Zf3L3+U|NQva{N?RSlwo-`KKcF0iH^dg zx|eNpK}Y_KyIs#nkf5cXpPCUg11WDYUyd`jV;|<-teYr4rEo#uuwa+!1cxYfl)5f0S>Dn@?YN>Km(O zMaoQt>;+bIZB7JH-Z=JJ6@9I#P1`a5S*;Dj=GfGizjZ_o|AeykA$wSn*sa3lsdg4&4v7)2~c;3-cwLaP& z^%u9Ny~nSsq$iQoe>@}(S>@bQU-FT63 z+?ru~jD5?vuqZzvhk5);eyd&F9BJH@_GnDzLRS($&x4+`Qh@oug1F2ffmh$DtMS!v zc^SNb#a&*UFNcc@c{KYr@wTusAo^3v0gsfsbq+RonK(2nH(C}a`r%~wonig?TgzGz>rM3dTHYw%f8trS z^HD`bHy>6T8)6M%`fW36^V^E8|9XdpUdIi+E;ke^GQf84qO#NPrNkgLtcs-=KOv8q zGgwqyRPg- zqake^UX-S|J&?T-e`AAK8 zM2^@y$y&$)!qxEBWHq$0lx9fX@{X=j(To6@*V1Wn)rKkly zuFse`f3L#BJ*n)c1<_sWCwbvEnzpbPmVeYKhZxAaFvy^SfY$~Sn07Z!df<&utMHnT ze5A`I@Yokj)RM_$&UtrN60Ocxv3BTXoYcn*q6VT@cj-6nD$vyc*MnC;a-a_TB+~x( za&4(u8O)~iL^(8IbZi|5upC%= z+i#n7uVjHr_-Zd{vbeIT#@M^#Ey98#@_2E$h80=NLuhZi2}{?gyp+|LQ3LPl!?F?w z7xM_~cFQ5Rm{;P~?l@gH@{dAk#vAeGWxS~*StaE1+_d8Q585}yr}%3zl;N%9`|57v zeI zNU4>5w6=@_Vjd2#)qG;z45e^Du&Z;%R%Rp9oUzP5^t|D1%pbecZ2T24;oLi=f6aGx{2fK7FI%Waf(?Zq@%O-ts2s8-dC zeicV+P+7(S{xj0Qz=JYX-;N1hw-5BZ_8R@Q{H{5Q%Ww*Kfppg1M})Zsf{AH}dNuD{ zbUZ3lCr~U!2$mqpmUO4ZndHlrY~66#$_-Tk^glPQpZL%9RT-;+bQLs?e+wte`HjYN zi?7FQ&VMU6G`Ic`yy11L#D~USv|8>YthgFz-Gq8727xdLTVN<-=;C1f(UkZG)q}${ z8jN7ejO9r9Da&F{jM?8RMQ95UH`0g_oa;OZXYM3r$DQa!{4&12Zgc8&tI%VDwnOeA zGukNiP}qIT|LM)px>NO!f3VJBHldAvfV?`g`{mNP?z`SN}H&+CN?rG(iY| zO#8`?Gxl7C4>z1$6dOAHOA*K{cBql$+M1Y55~yJ{=&ZPbvYBtmyBJ=Bs;wj>#!G9? zo{@C=)$xf7B;%L))CP&82W_ z?4GsF2U>lywqUPi#g0^LoY2U;lx+`6r1oDrQ=6?;ld4UVQQ;UY=zrChHG>wi(8T{} z70Ie#E^XZXro`})s4x$iMN|20_ord{w|6d5 z@onoQxo=iMnySo^DEF5J^?-vC>cPEBzn=#0hxV`oz!lT$fc}LK@Xt#C=Vr8Y9U(BE zH}5)As$$pKfA%Yhg85oW9URkJ#MiUJ#TX~Yd~L24U5jH?V$YL`tBLK=PW;XB zt}>$SU2FMLZ`F~mJHgi9u?DI}+F*J=dhfhnnBJhnemkMap^G zzk2feyTQLcd-eMHi*H{3^!VLr`WU`%BtZPmW3#+r>0_q@(xDuc`)qc&zM*}zS|(4@ ze@}>P+M8Mx0JaRkAZ%y%s4Gm{o&60PqPz>`lntiXv09`9vC1~c;?Xvv$mS-*#t{i$ zUO=M;e~WlFkWC|#(ep%AuKu){YI{dr_KiSWg06bInOnnsEvc#^^HrW6Np=3_t}x;b ztFH~gFag6JGtNC3A^yJ+iCgt^J2MfBMS_cb@zmUHssP@{&lI)!Q{})QQ>BP(XJ;u* zGOJ#|2agVya+6N`)IA;~4iFp1566=3>Sm6Te|P+2K3>gfI3a%G91}M_H7n-q9pxdP z?~CXa+SE5&!Mn^i)?)JZ`bXU=HKyp(lF<~txzJagFLB4nZN`4uBM{On>Ug#qCga=T zOtQeD;s{wEC;3&fM(uot+Sbu~htbsU$&zMuQ)|$jbgj;~S{b}CgrTxkunb)(7d44! zf2e$RhDf?ma__`CY3G0V8Hf*E?XZUZ{d!KcyQ|#RH*rMIZhUk z#^xPRA!%WNc{8fHua*rr>u96xW2Qx2bOR5!?JCvhTNTPWLB`uHP*3Tm80ne z-3xbBV!U=>)_$=xB!~rZ*CSM=AgSScCC81q5)lr>Mt0E4io*ZAHE1VcMwl(xO)8h6 z*drOG^$pUF{9H*-J|<1E5ckJn8E)3k(~9hX#Ig|QjM-V?H?wvHv`G}7Zt+;>Q$1& zZI+g?CT~HumY8%H&_4iB8{ri3L^T(~MI-CV?QkJ*chJ%74%;0Xs{<|Zbpz{^vK`1D z2+F5vQnsZs+w?Jj4#9#8L&xeDe-jPU9$|i&hYZo|riYJlCuFFRN=nG^-yRh_QuXVD z+Nj9c6;ogN+4$Lilq3j-NW0gi@78-byjsGiu<(gI@YHVyA4J*KI=MgipSh^MSQD!f zuUX+;!EAcpeWuS5Yi_x=UBg9eYTJ|v+wYpjt9ZwQ{y}Q;OH67w$&h)Ie_RTpproc? zQak{nrDIc}%jzC3aqv(^)4Qp)Z6>JLcO|CTQAwT+h)m&%)kBHizQP6x(yx7%}{%a+B;MM z2H6^31loF5e9}|`v{Pq@x_C;|K}eQAiL_iV zCKA}+{G>R`I>fVj+8Ch>MpdAcOucGNsu4F>h$<|u^nfSm)jOf0)OQm^~wti6t z%v;xvODFy&*U+6W*=A6~1T}mo#f9L|%kNMTJe|`4q&9%*ag=q|rGETnw)+lIao)$O z98@W8aT{ggHt()+V(Sh=e@Ea(kuYH5K6;KsZ~jhc>i+vAfcxKji#|P@-GAlWb7^JL zwQV`wWXGEnf2h@Y*&dkoETk_t6{Kg^9A=v+i_K+i$;&|f_8&;cdB!$~X6OFx8O@D( zsgD9ybg+_-@}O;Cz6tH&HF24b8%S9GZMG5vXl}xzjHjV$+xWuTKS;<0podIIe5VH0 z5D9-j;dqJRDxr10%(6v6(y~$75ep0DG48izzIRF_f47??&yitQekDAd28WFdR|f^E zKsz|^Huiq{$pEtd|B~)eFM0QlprSMDx7a7{)w3U-ym|T^&*mFC@|@?Uo0B*F4({&Y z&=oVLgWf?hz8Jy*47v2t&Lm6WBtTy!P=v!uPmGC*h8o*lP{7l)R>{!-ywN$REcx` z=bMFFW|i8iZKM9BK@8$Cb&rELSl?dDAJl&Ge`4;I@@%~X?0jI+ly4Kn0%yxkf^5Ht z3(F7>1P}|&WQh9l;hZej z0&!}>+(2UjD2fsqAn{R=GgUBiAe=OheT`_@;78E3S^$MkVhx*y0Z~Gt>%z(L?V_8* zLgIfJNW>j=^l;mE>uZkBe{52Z%F0N(IiUsZL0CX;PLm&cUG}6yK+&WI9Zqm+>kzKk z*Uy#bZMdKbEtWa*G80OkdDbXI9z0L5Z+8!m=ocY)zRDre}X=Wgxnv^av!a{ zc=qh;*MENb>R(P9OzP;o{d30DbBGXP14qs}ImQZ7j{r}BrV$&vOtvvoPn1hTT;Nf94@1%pGFFS)B?g$R9b2Kma6{R=09bR8xd@vpiUd^u9(YjT(1 zFimO0J^J}k?-8C3ibt(S$)f}8%6+~bgxJB+{F-MuU!PydswyP`<2$v4$!C@2gx=d% z+Cc^NgkbWge@Cey>71iiT!kTca1Y?!9SE5L;?<`GS`U5yW=6}|N@WpxLzFjRt28I1 zRuV_UeGialU8Xay#Es-e=7NL=B29P(Ah>OLGirJg$)B~jY&NgZA5_o7M73c&y&%Yv z@H#sPxgo#xwv8y;PrjZr8yuu~2Q<=RbvtG8M1tC7f0~0PwXz zgnqBr#I34+hOwEB+JbounUQjoR=P-zyVd+4^OIQm!r$a*k;d$Cg@%jfYzw>q(cvEP zt<{Vtr_vY}e9cmah!3ux(e}c+nw-Lr#u=Z!GE)`-9Q!0(s$ZMgb?x7Bu8fxA;m(K2 zjp4@pf0`~y#x>{U*tZ`~y13vJL`C>Wi3K@7U^e_}l%KB=7dqs9LgNLMiH0Qn19nKk zd(1THgw9+9?~$DGkZXk zfFCZL@?yzktsD%|HWJd|u{6HuSm|2-^JxZwe_3!!g~3r4QxCr;5t0z*pLek_Cv&jp zOj!(HRw6*50OKf0zzs+$iG=Utu%Kcd-K)y|utXF{1kzB%$ocg=z7!p}iC8#6hNs7+ z3IZ=)hN>Fo1Rm(^;}LmM|aklM^s+1 zYcn6}(&kfbvfX4AqeLYB_P113@MnjrPYFy~o!Nt+KEtdA`fQCyRbQj&fu37yXh5sX zWK#wkwktfi#b(QW_hIm^G6L5VF&i%1e~mNZREfTg$Vkulz8V%6wOD?@dA;REY}i00 z>#lgEOh{Nt7W6;PzHE{Sef%8)NkM1IM%T*N!>u++sfWuBnX9lFlOJg2YVmD5?i9nQ zc+%vNc|}SEei=VGz}bw}7sptCbCWUeg;iM3^0QlE!L9IWI31dmF<>3GnLo59f2PBl zEzLmSHTDhB$W@gSK8QB4zTE5VWx@q)dH6AMJ0M?CsM5~Ru^`U z@e)+FWhGy^DQc+oU&rhw4lh1 z7Vd!Hl}(k_gNu}R>GiCh*`x{#cm_3{zjMC0hoLqZi+2Rvu&`@zTOJh$OxU<8pV?U> z;j{yCTx)hwXu1~X>{^K@e|yrK&-{$bo0l`3;cC=fJ>Hf zQ9$(>O&27D=*@V1FZgOm8)}$v*J*Kmg?qggh5bDP;>bIxL<^bTe-L!omE~{dUO+35 zD9tka4ZWpjQ@N@fEuy-nKG#%$tNcoRVTcZy`@SL9+C3}ysT*99C^N%|z9n;{ebMsZ zi3$!-K+phGBug%)db1(zdlKC6L`?0BFD=CN>Ix_0Ue6_0lj-nQW_m?!UJ(q`yZmDz zy3B5tIqoMUxl=A#e}jCyX)fcda4LL-7BzGQZx|2-+GpeWf|&1=CMLI3Ld%1jw)5$b zdb{mQi;caFC&M1^=rW5cgyT9dh$~{BC=>&kPFjkP?lfX@u&oJGEos?xaxM7hL$I$Z z$|}97DvqCfj*1(vS&aWWTaM;T<0nK!2?eyQo0lFGdJ-trf6{f|b2DL#boY+5%u3k_ za(OpgLkFwjL&!!fWw{X#xIVRHLa!9lJ{zw6&ZC?B8=P85Kl!x~$}Q{V20;6H1FZQt z61wA%#Q~c(FX1?H?-)2n&T@Kq0Qj?z66}>}o4rfNgRiXE4%pxZ<>Li!w+dWPEU8;n z?@+4-q`9*#e@Q*cZ1;j$Z+{1z&8u4?6m-QxE+b+ybjY@Ip>eJ<{n)Xl*C9^X>RR-u zu9B{}9>yD%BRunBVs8kp77mWY#5+7oNKj;z6d}Y*IW%20DeiI9z8;QmM$N|%#fUFT zK0L%JQtN_`Z0zLb9(dD(yYV@(JQ?>(d3w+KkHciXf5c#_ylGPS<}eXgO?n^vl=es~`IXoPH_L-NDw;UE@ z?gm6HqFB@;eu+$dmh^-BUmiYED+;^iD@oqoQtiC#)SX|`EGO(3;|p9ZHt{dBAi5eR za^>z}f3m@GQQ<4%*|gyE3g?+s;Dd%Juv;-0m}XRUc9}00Y>Z)V)}?qMum$fl$>FcM zQlAQASLFQRrjd@iUWpsdC}UIKgw4qkj5_JSo8%IIiG+3=9&CIiLO3Yeju5~2nu)sx z4oa&}IO(*KqW7~cuc`$LQ1iZ4T!FTLJHfETe=-?dHoBhSLxp_cJz|?RHUwt}`c^r5 zC+{o7h_FR$N%!Vaa&+H}`tUyQA0b=BX3@SJsu^hv7}4w1Sr*~EdRj|#=WMFvd<(%E z0>mbzLho7gJ{U-i^d&XdX<88WPu9h{%MM2?;p-hL z$8Xn2%a>M)0aCgHUQ5@(d=J)rtHm|QYtCf+Nl)lx7DVFE{DiQb7z1odsJ5x?Tj^cnhz%z(* zM^dz1<1%6)*OjsF;d!a`rJ7?I9)K#cJNS%*b1?x70KqO02iC-1!=la=inJh!0t`M7 ztEfw9s0J^jPf6nDb(+huJju`>f9Ik(6;J>5bYi!pasAp#E-bq4??x_wxwV&3=!^hI zPAs3;W7wTz$IXZEPVD&O8&je#uO@|D8OsJ&q9p?)IL($O13UXEFIVwr9a|{_dtGyq zi+yifr_ND~FNsJ|vTq8t-Nch^{UvJfrjo}=lVPLoOphBLkE-vED`A5@e>ywwTA`QeL1JG0DRT94(B>we*Rdnoq#;1#vtQLTD@5$mE=|&avefRm^iQ)Do*RaxIR5|F?R2&ha$3?q-0jv@iu*i%z zTq3%B2G?nVM6bMhpja3R`4~*Xa+LR`(s+nkQ_aU9g*{QqSmr-O+D(D>82^AF$E0}k&{NiVdi*#_b ztL4MotRuh7Mv-5mf1!ydMuu_)55kGFaVk4L_^Gv!-P`+2EA0J(%F+92*V5RI42+yD zNz=@v^U+_j@k)&w*iU$h)oOuP?}u-nzZtxF_WI597vB#4^zzlyXWu`0{$lX-w~TNi=U|E;{fGs5$E0fmGpq!BOd~H#JHRN&PUXsNOb|1S@ST`h-LX z+wr@;``oBJeLu{9_YvW@k9SgsMCzW<54GW+g9arf4Lu=U~J&3!B{U!?bd9vudP-mhQ&`06RP z8;Uqwr&7)xP_AEj_UhHkSEu3)R*aW9+{KGzJ}TzCe}xk2ACM?WKmti~1it&X;-Z-x zfBD;!hM54+RTqd@vBAx9xQNqSvcjTBge_UHuR#SP1O7&HlaY|YRR*J5*5%X0`=>Q6 zwUjjuU>A%4Lt+U)%HU_~!wE=NM#l}Uw-#VVI*I4fI!XS(31Ds8sW=N;7m<15J5e&#gx}GO`|@T7DCXI8Xt4 zdvfYRm7yQNu`a5e|DgK+(cwRr`gg#Vwf|^0HUO4+?`qcl#BMYeIa((HW9|tKgVqU? zh_JkUT~{scU?4s4SrXtli{7j$<6sX9fP>b_e}Tc|kdxnwafz0%#Z#@oGXP#*@n|bP zUnU+Q#3Hh?f;~c5oeB+WHiiukNiYzFfdzefdrqGv1c+ZsIm8k*G=61eq8~00ATb=- zBalPv6Yv%5mAkM2Eg^i8(`T)ww+-aaU^fjZf6%2G2YP1$a`xtO1JujcZ~pC1&u}=7 ze|b#qh^Uw>+VJ5);QaqkO9KQH000080IiWpS^6~Syu=*<09sQ301f~E04`@~bS-dl zZ*6dNE^}yqk5+ko%yl4EXQ#asP|EzlU(=IttUD0kgRXiVhRn(&C6c0Ks^TbNB)s^51e*oB zgFodDP|zaJ1fD*Rv14#cg(>vle;2deBHbn0`UECWhdyYY`N>qv8kfU;S}%Z5)Mx}$ zqeZ^2{JdTxNau4u3Hy0D&Worh3kcRB;Rn$8jL;mlf4eDP-OSX@PpwXk%2S=~yz6y; zziFv<4fgBs^qGS2ixe8Uyt?>sc|96_{9$;lo*QJ_$*b+T+77+~8OacMe?S;)!Oy1U zTqlKEM&N0zRhh$Xd?+Z*<~}SFwv$ z8$;+hG79{prob*kz=oUSiw_@OpT8kfA{i+>p{I*X2lKGgrSV_$S&d>D6*E;VQ)n*p z=NgOVJ@o?9Un+lO5_z^6_9+8!};J1DjrOb=Ne^Sr*lyDN_yPvTL zhL^n+>sD)iZb!vFMOg~k`s`@l+fKmAv+cjYiSq8Zb5A{diJ?Wb&_eqY1iJ`a+FjNk z@$m%l7seOJoXIF)svMAE&OQaJEOfmDX6FM(loXR1#fq~~gqT40MM=?#oUJU##L@}> z8fSh2n-qR*Y#bu4eQ#ht930!0RK={U}9u-+7stviQN zzKH!hNGDCeP&8o{$svL=%fJ#1CdvmQ%11S#0VCed!ObVA0U?`+2d+TR(wNc;`6qh^ zbeEWQYm#hc6LS1`>EBVJ2;wr-g3AzK1wxt^@H5a8h7oC{e`hI1>{IW~u1E0E(eU)* zr#EL;*S`#}Utgb)xP1sO(OB;e_7azx?4wMu_7seFcDif?_UE@<6>vTrX`Inbk=u-FHvbm*@LptfbhPFvf^$CF=)1BN{Kcug?i$b zagp<)SqV!?e*%Jif>Ep|DK!*1S(^Mfm&^=V)mo*@3L0UL5ql4822KGVfhY@!W9~Xw zVtD$bKnLn-D-bPpstoDP6&>pPukWO5&KD|+YoY@6qz4n2|vPeA$;Ame~w~?$jb^PvrJNlr9tH)lQQGL3H=mV8k2u&ppGaZ)Go1+J29esfxy?#HI*Bb z@nclkz=D|0R+U#(E>+XxG}k6GaAHf!`5231GL?rUR%Uot#Da*l+wWGAHfYGSsuV{) zVenc5WuGVHq(uvhyfM!7Edv`ov7Y+Doy8NTe@VNbM9X09em_Xz0&PU&;q2N0_(CRG=Qml=OKk-3 z!zNW`(0>}=f)z67I0_2n-SzBpd~yEv{n_z#Rg-vkI``P@fMb)+y?YDeeSzLN?eQEF zG4(bP4JSZP#4(YVT8iUD)DblhR0WDKb*i}etCZaBv=#? z#aKbEA7uBs>C3^itCf2GSM#^{1+HyFd8H;Bav8*Wv$k4F==a>M0Ba zM@}QtI&{A)EMnHK_j?{?LbCB^nlLHwe{5hjHNz^ur)O_YMrUtFmp{E3oxMB1xH@^Wndu9gySStk z-{zQFMZp+BI(DN7=dBrF&L)@3@XQcHK0HC;qKzDm|9*R`I%9p8B1_qhX}5BjpC}0b zrv&?oi1?!)L3?Ph*gQ!A?^Gq-|L9w%e#2xvUEY!cxTqs|kcdi$O{8+Z3Z|(np%mwx3vKVBqYLK*iPv)FYHNf`tUS_UK}G z%?XSRzQTbuB(`;uGVXGMOier>4>$7$>MbTl)IfqfdSX3mR@lDztrAO;SK) z#jeJ%L1hd{^+l#oUiyio;cimE>bf06HqV)_Fzkuab|mhWS8M_>zS zzx(0CkCkkt(P2VKnChJNewO|<@k)3ws^Yz|&aJ%}eIf-f*WG}~saTOT(=#&1zT8-f zXte_BF>CCLRMtu%C`jkX`ca?l)*K-S200;;xLGAs-t8CGu42?Qd?3{0etUK1!p9>w z$<0!6e_wsm`3RoU0SO?u%%jyLOmdgkN(>qNwrPO*!N@)s-5xc~-2Sb4Vv6ebReL*c zD^#)S5b%?9UN^+}s*#17=Q z$tcrv>X;vS9{((}c!U&5r&Bb21+%5DGS&=kGXsYR~&{x_S4H4RMvPgnyG^)o%ye=Jn{UmbAJ7lv*I zgPofJxVfi5e#6^;OMSQ1hQZXvbFYdF0ch_gY2#0#NH-1Si{xWo=dakjf_MIrleyJg2Tv)hSwh?H8PvLZIJW`okZY1NT$ZIpcfVO7&I-zXat-h;pHnm^RD zn0Dh3-O4leWn5gQYnzG~mT~f$E(Ke5A2YcY05kcP8*62@D$J&(a)llt7PKs5C7+ZWAo|rxf81^`NAWbT&tA+~gUWEOAWh#sRJAdpI%+v~#{~#? z%ew1WDECOKpsH~7+{6U4^(WRH)CL2uo6QwBu_G>~T_8^1kASFBX_4w-hNH7LWQicn z*dT2=`+%WnWx`b@2S#lt^rP^ZVx#%+>Rg?^9-flec?->q%ppmCsu@eif56bvsM7PC zdL(pWDil&X5&1gMVaa_Jz9E38B&RxFTQVpZlACZ4P7w|JT#EOpON)@*-&Z#rDi9)3 z8XkH7atXfaNGx!CdF%V{A8xvy8yErKWdTT(N|XrzhJuyYw1o{H9m0qz5k=^zI4|c^ zj|d6UdC=i%ol(UZ%a$R`fBf9q+G&~a^wl6c&(s51{MM>oz5urUYKNgJFk)Q%iX-G| z@RT^v*zufal|%8E$KJ%oL(Ic(X~(ot1~A5`Xyhoisb{XGFj|B?HOSe{ZTH2jq$?Mx*{+ zCZE3FNau z*`p>m05_c+E&<&og6k(+x7hO?We$w+H`Wu>FI>foyRI{YRLn;%j$2Z7LP3gS3Iax0 zqGY5#4zeA&zG<9ce^+ML;e^Lc!?h!)DzX@E#n;V`4P-myekGv|s||M@bCP+qCt^L? zqX}%-@|d!6O;LmMaFvPWfyu-W*b8`?McC?e z{DfL>ud&B7pm7Macr@>*o=B3}63$8CYZG6Zi94RbXsml}+6z0a+mP^Bog=SoQ|xSu zRb6bjF@OE=VD7;9pm<|7k^)k9}@Q*&Oeqi$NCpCFinc;%2AfxiIT z*y5Zeon1Ouq4TWg*y)<7MbQ?s;Q7RL~W^`e;uBVemuDv((&-hF4yDyT{My%gQ6B9FHb#CwWpgM|Fl5r*gH8dO7%c{d1R@x4k`X5Hc60%g3;? zLs{(-%c9DgER;VA85blh~i;&Qm6d*flu0 zf9AH&y`~Lr_Q;wd7!p%$xT^pyyK-Hutxc$iHmo>de5FF5sSac-Xc@5>xbgagaXrDs zx^%HFT>@ImHIy|_0UOBOh`{N)Y>*8 z3VI2E*f$l_PV`#)9;L;zx5J}W-5jpkjb7`(Q!i+iFl#P!`tAiDI@6GQJ(NPQw7nA4 zGj~5ZiSgYUDVgc!0o{19w?&+WjyWBjMz#UdR_4%r9))3S#8{orQNacZu#2FZe@a3G zH?b3Se0p+q^~>n;?D(G}+7IkrogmC#^LM#tLOECeLHmh3rQH?Z{xaH=ynBJL-y)EK%Q{vf4lhYM%^@izb8SQp$rk}eju^oW`Y~E6m})eL+W-@N;^fMb7Ev7@n!D-dd8kG8XpLpGPk*nG>+b zuVu(JUUdq!-P--}=^3ZmeYUy`m$!#9ddM zCLB;VL?h-Qo*=;36HXf@Xb4&5`>FttZOT!S+5wx|ogpA!1S39=K5E-nis($xeGEn5 zVapkoV@na-QJW7)+s&#=zhzwf;Qp}NFjU-eU%KJ0$Kk&kqeUn!fAGi(epE+?&-$&E zLD}KRW%EmU-Oi^AE0QMom6B9!d8zr%uFQ_+^uCVqe&kzu*QKsq>G~vHx1!^Ih8WZ3 z)ga~D+%!Vx#Jtn9T(m0cJsW2B?)SToS=ismg55P6lDrma(LSg;cka&enYr(2v$DO^ z1qrkvmDdt$aJqD6AW@;8{kN5?`)%BY;m^%q;ifKBMUTXiIwKM3P;h z?b?fytPfJAS)EtwI;;Pt8!IqWOxWspsxq2^$6~^9kV%c{f>Yn^3NF3~A}RjLU}YA> zl@yUAd+=*De?lM5Y83a;no8eI=F{ zJQYz7TSoO9jIc5q^#WW_!L&dwi=mS@yRcYmdtu2g$tBZk$`K)#_7L6AmU%{N&o9!x zm|NizeZd02gbCWcPs<8{zOz|1mDzfBurGF2Xg9?`e~t^--@Xga6t)FcIk_Vo%U0B3 zl}C!Ha=9GGeUPnBVoKM`^uAcbrK?Q&%#}u@35LVrYP~5-_-{NpKxeDUx^1i1?~eTo zSj3(^%aGJkZC|FmQq?wJH&q4Y_tnL$ctV$qppE3Ha1^dFuvJ7ZWk&er1WMV(yhm|e zdpI|Ye*qiwXc)LB`+kZFW?tb*t@9)Lw5RB>tZC8^+=9VE_7gdHSi{yQjH@(LIi!Oi5OK(fRYlTw(v;{ zyKKYgxPoV2-=Lc(CdDXP@i;EHj7+4fhfI4rTKcE3+mGgsA6mvQo*4<<^3^EFH&i%> zf8q=4$U!XUrf)L_{wz&Tn8Wo+plo8ALmj|`rKBRl!Ay7SfjVl(d&H^=ItmCk&2oWB6HFAi5+ zm@S-VnBw0OVcO|}DvmJy*E4gtDxwGiJJNT#TaSK#DPpm52T3;s*chxw8npFBe}8v+ z!}iyoq^*Rc_}xg6rHGKF{pt4Z!!5g(G(l{OMdGSa4yC3mEVQ}WA%64m*W35MrN4as zutS`Sggh-~<%-Qs0XYN4{B=$Df#~kAdxja0vug3DWIk3CROMKbyCc;VP$aPxDc}Uh z+l9jQT?#+AdviD)T=buk%^AM}{GIOj+<%x+B&FtR_cG}u;P5^a6n6Lm==CacXr2>h zD}KTMXH+D?#1oG;&=tAN;R`I{Mo7I;ItB~V;Q_Og615-!6x0~KD?|JWJP%=rN^jak zJ5-x8^1jQclMx}GKF1BAC6aGP?8@l-?0!4aB1tf{#k5;z_w9|KpwWdZY^!f7UVlWd z4nlQ+c9KwPTtd(+LjXl>=K*ZYju)pld-w*!Z~JjRuxbFSI{b)@3G0{%C`22$C%tD3 zI-pZWRC6Sy<`{BreS}50JY>o5m(KvTWsG`D@5OrBRMsdii81Gmww$Ol{?Zf5akH2+ zsKLriqoEv&A;;8=;aQ!Rl|D+<^M6J?Kd9%4dVUlkkX`LQ%%xBsP4Rfz3R>b(D{msO z*G6Nj&xFw$6}^pVR4NST=KAjTN^3?~N;peDf4n;twe2x+hipUJv$YTH$5DdObj&ui z-(+c6hMfTWq8(S2B{W_vVW;7}iGF?ERK*(aY%u2+-GfypoFlB-z}mQ^Hh;lx^t&-^ zBYbTFm=wZ1vm0@rP{Nm7tWcWQLs%Rb@psITLyErYqS8~8JTM;GcH~+Ry7?H%znc{M zEtEEs-Hk%+Tyi_GDkPr?I_?+KtVW@S^jMx3O#Cu0i@ILcxcNzeVuH@q=%Qz{bJ|1! z8~NP$3NFvL2Ss!6M(}@_`F|&%PkuT+J3d9A#q8b5!09M`&r0UoSQ9j#gGeH}?&ah7 zB|ke;&dsgY)Bg!v6?hY*07Jge_640{Tyv_z)+y&bf(Y>#D~dx%AR~zqkH+{puHsd^ zi66cC_O+pW66f(td370oi%SGr(==}5Iu3ANM8@&KqAtr#K{eE`A3Aa~!wiRVx&uxN z9QnjBSm<3FvFM`B=_+>7C)6?Da>yK&fsEL;@dcUO$<;TlasIwrBRJvZR;v`eEIKksYtDl0bTi>bgsDpTQ zl?3xerdkJoZMFC4(Vsf_@n?0q@Gc^C+*R+im-t#eOIQ5i2lKldC-dh#Kl1e|TYF)6 zMN8|c!g}){E3MvIWZ7!a>*48zo^(Okn|nl{yFTl+!H0Sgq*)S7))}U+qp40*wg8iF ze^x)~NGD#X-mNEL;H%exucK6V)VWSlqP^FBBpZ2uj|qMpWnK`0NNM#XUT1igs#Ox7 z2UEQv3>g>A2TTS3cH1h9eJtrkQnU*&_dL~FJ3vPG&cf@~2)s+s87 zfS&Y!vbaYJHl_vZZ7lL#5Dx$ zx?vp6-FTG=ZBj<8)~O~X;-^(WF5!Ng%?_^vBb6*xX}r`I3k}F&I%{-a02a|=aw z$*|d4@NciJ_NP;}l35&v@dfc3Vih8F6|WP2#lsW7*Zqxt4P+YqOYs&4y`8=cdrS;Q zX+VbPFT7|@)S2qL(>|@>g()~*#23tgm6=#cCtoUsR%i_v-g1?7aU@BHQwWN=x9^ z(}GP{6mym7FcdKr^s?A)c`0+P4iwHYjDqD$CMb4kWddqeD$WCl)Adyo>ouJ!Yn|fl z7UnRzEc%6au9cUIC|h`$0tZo?;a~uNC9oh!bQHje$6v(ja0-FQ=EC5tys@fk#$(JJ zo44AUfAy)FheUrI#&dpuoTy-?f~*N4C>-)A=d2ZUp#s{D0Kr-NE{bRT+Q9n~$2*un zUo1$narL;n*Zr42ixhq}{H8kFI88b_50W@ql4YNJN#KDn9Ur_pJowx3&+o@?kH<@32t8F$FI`9LqUe}-iZA(9-UCbsWad?Le4r{n>Y zGmB$KUC`1_45t`GJ$hm&=}S0&skGhQzLnEg#~;S~uV3G_1IsE*IaCHJJ7znywt0lr z1F(t1Xvkz&tH5XHx(KFIZP->#*Y!wIa0ILDs>#68EKI!#HtRl)jB*;pR{3O?f~$Ovyo_6`_rd&{H4^!z~QZ_1E;Q2&#%|nVf!)pVAeQ)c@WwseI_On zy^7O-y+-D-8}Xtm;+Zr7k1~8lGoCj|J0R9{50rgkf`PN3zJ=()*h}VVmEy*75O9m6wK3=851%k=gz+`|0wNnc zETrc&^2g4Nj7;>o3%G*9VHlG%4iQS(@oMjRZ>rCGih4vZlV~mL7R@qi=&gfD4W-J(zWjks#6ZAz9Lb2O~X@tx46rHqPjyuQ0Wa@xkkw3 zdx%O0B|xuQ6?`C>=cYBnO4AIc11kK6R)IMqR8G|+LhwEg`Fu_2nhLacIG`l!Z)1{J zSDHT~Kh(8ntDciAoAhra^ZquI+c*bbz8LbVk0IJ$#JQgHK^3VxjXp<9Wy)rnd65g< zJ}yb|WQ~0g>lfmG$|V}G2Ynu#1Jw|&SaEc~9Fhz_Gq}M3u?;!4;s(XIDSec|^y%%RZYo@z{gHBX(6X%5B8{Q+l2^ru96 z{N4hj`P0Zm5*m=shNM9iLNWdV=vJXRbR0Z_pQ5;(4>KKhn&mtN|Bx2u4I9@xm034< zzCotSY~z|peD~eQ(P-2hIiGfK90plthTjbut=28FZUd{e+c(5h&3HT+{b=llj_q;ekN1=g&A6FG)GaBhu7d3@pD)H_&W3c!YNH*FIn5*eoq$U5hGcl z^4>6Xm+?V8`B zdy>GH(df&l@n!T6GxeT|x2mrgQ1Nj0UerdTE%dB^F>N=ee4NqUcJ0+_6T~rRl?j&a zG>&v`0rHR^F?zkPqy%~57^Fq5$Bz+@6H?hApK^?GDbRMQ@-k06ATeQ7>5Zi)#SNRA zJT!EQ($s(bCs(Fi{P;^p9U)zL4M53Knz9_JS3+O=-%Xk{hu9y%W76q|PCrd62e7!nG-gHGz(gjpB5kfTO zC2?_TxIo4X${bugRT{1ti{w?c4uvQ!FO#Z&hd9?Z)1gQ{L`akm?%uKGX{n}X{L~^| zX_H}RTpmF7NP*RC9ZJ=NlI#yh?_VJ&RQqp#RUh_GPWIov|Me-y4#?`1rf7j^1yD!; z(%4GkMcI|)pGv(sJUMuUIr~2zy*_&XEA8Xu(fhYZF4fE96Sc42?Vr3qI{5kZ{)u{j z_w&iSvm1OLa7f zlCqL8pHf8t$!~`XO3zF&_2S~9JCD|6biGiBq`l{bGBj%maBX$UJb5f7;D0|HC$%m(gMm_RJb^)J^2 zjOgJrdi0#ve1;_J`9NZG1zlZ#$$T7(cuoojD9MJo(B%0Gh?&ZSEHugmY-r3DV(N9w z$AnZ$l^`k^>+IH^q+U&T5lGx@eH1cUYs%UYLt~4C8g$5F#=NqQ{3JkvhRy$YC4fsp z%qlf4(8%q2u93V^bw*D+1t+J#fHbchOf&#%6|dHG9HEU^?hQn{(OgP@YMZ-Y5Q(6k z*$lgp{U5Kh)jAu<5gB)sSaXM}&*N^r{_TTN4)U$u1NB*I#P!;a`oOg()j~_n7fQJv; zZ4>qGsQuMS!`j(^Bg9Npi?fVHDH!F--b{U7lYnbG8?r4Uh^d~Hu3wP8)oQGpAx-80 zoZ_^Psu3u6o~cLblax+sw%}4?xe*Y`*#SEht~i7+YM5^7Tj5_VK98DPgHgRZP&?frAH5+)&U*=k9M zhx=qhB{l=HD*9}HiYO$T7qBPZa&G^Iwu#s8zk_dXpv*rlVZ(n+e84!b#z49)p0=oU zsJ-Xk_YK8625*BO!Y%`72G0yqaQy)`=0=s8lR=-x9{xxd!7NjIf(ze9zY_8Qp|I|7 zBQ79WNtO#~?bs7$&bmnz`zBMwe5oj`lVO91)olVrcFeDT=tHqYqli87q5P_yTO-4t z8E&CZ2J+l?uBl2%k*x z%esq5Ur-R~8lb}}%nlJKIT7YIzY~%>GmdXdOc)MK361Scf{u!XAH6&sawVW%ujQg2 zwi^AmB-W?FG6=nd_P$9+?ixMzEqQbxsxw99|JT5Ob`6Y0Xx~=E!(0{X1Dyitr1$%7hYn`Ip$@U}M>-2CvQ zxVadAR8@Q@St7GHK=N&rDE5YpNpW_IsQF;YZ(Kidr6O3FE{yGNkRYBLzAcTq z?(Xo*Znv#W`H=d5h@^7tle|!Q%igc|+?$5)1CowJ@gxX6?25cKRd`~cUvWDY_KWUa)52(EW*;1QZq@-q0O@2*( zhTN^oP7!!FuK(@y)%fp+C#OfpZ{3^HZr2gz=Z)*un>K!&wF&i?nvxyD(ZNmu-iDR& z?oH+TOoCxUrbQ#?V9-5Rw`aCZxKk}V;d7-zVtX@+V{5L2FE206WpJ@occH_TPTJHn zBeE~i6(xipr) zsV~MDxl_&=1XdYR3KV-iw>K{4+y2CwhCwLD{5c#ot{b2tM2jkgd0oyv z46C_?jKxCgHJh?r-_aA~O1|8$WT&_25N>TXLF)9OgKm?<`_Hr?29yINFyS0*uM)V? z&AV1jx;}#l5-GA#ero0DAjO2%a8l)(T~sjcsT<(k zCdX|+T;7FHH!vSC%#)fe(&w}r*XCo75?Ro63dj?6k`9NXTyG=CF`YT(!)}!-==gWS zMBW`jm%@mm5NAP7c_{{`W62$0(r9X{yd`La=%xV`LeowWv6o}iDExYVe7YsTgUOgv zph^J+eSYGS5WW%pNnQGO;C*MD25OV5?I9!gt?@O+@(&6MJF4J_R<$)>!|(s0n9-zd z_KJ#)X{u))wQz`lOKU0WOr-`G97mE2U3yVru|s8VcHM!wtF#PMjqK~WL&*w@{NZ<0 z35sU%Ke9?7RPV@9O>^IW{c==paH2r~2iRigRyK3LjFcJLNJIGu$TB7)t*%v819i3k z&awcxP`a@2)Pk;X$fzQ|Fy{{WCEcSXGvjlo&6*55=I7K$bN4XCMNWzO(6D7hVfJbevHa#Ht&lj0i< zzY|#ON}~Kf8eyuobEnbls9%2h1@2Kxi#q#b4%``2Hn(QJ5W{z^K{(YNj_?BR-KM|k zOCesw*Tbgg9oRtE>RlSh(ezS#kvWe5tg1&OIs?*qillp#HQnwmcm3tr-;`$VH z>Mr+6y`yH{8ImPk5|p$-BlCyWUG^!in{WNq;ri{c^xoWBW3jxNY|KqF$k_uPVEL_FN+)gIv=Wbb z!y?)easpX@_HH5PagqM5yp(_ETp-m)b_}Q9-iD3j+o~9+I5IKcqJs&ul!erVe0hv* zAvccFSH}|RjL=g<=X5>EUk4@wiS#+-jA!d4WlJW>N$6m{qhs?Hp~20x27ARp6p=*k z$EA;^;-_z;ZbhJ#R@gYERyvp}6C6@$*QOM=tlMdS&~PV*G@deW{|Ybzes~vW%6*B{ z#XVQ6*(E2pg_0fB#G*B3{$r#62}h$}uieyZhi_k~Ym*yC~Jn`NorK3+Tjf)XEkYwk+$~K z91XsIn_PiW)4|wUwJl34u78<+#GINCI;8$Bc357?Kbi0zuXfX6{R%$AsH<8M=9 zJKu#&oFGWIOfY;#C3%T-axEGSeb8T}o0I5&nDOaZ03uoUmbUWi@)yWbnk{#(t(GtXQhXYTk~11PZMNt~#+=Cs4%rn}%-&3;i**)5>Q^{2uOG^P z39)v&<-M>jm-j{rIX{j!$&%Hu$5kn+WU$vo6n@*PQ^8oUU%5r?IAbvC3NmCFqd6!I1O zv-^2t>X4oqMG>5_pK;YMTyx!&dc$ZOEEV!3d6fU{sy{t}R@vLu8PY2Fya1HITwX)YIUVD!uCpWQW1djnZ5r9E3fGDo1?|$o7RsEbE zJS2NJ*>m?H4rcmUU0q#OU5~@;@hkI+S#ly_<-}=;9c4I!tsE%epyqnU=FAW}V@q1J z61;PaG(1L#bG}*K5;}-3_@yvKBEv=@yq$% z<$FNOEf`N5z83PX1cRD#H~9P03%(UoHX$hS=;HMK1@?)#WDLF@9-dx*uxixatZA{Z z7ri3#wL-qWqN^(0fGtw4hQ`!2S6e5lJ^F@C%EbA-@NHq$oyhots`h20LQl9v6K^5p zKd*c~&vqBGdZAeTJJHlaZ)3}ss)LhzB{+>khBZR`HWgp{_ylCPwEsdLQdg1v^30;K zv|Gyuz0ME`g4nzq{p2uzSjux;y|b|kSBjeE?|td?TIzqs3Tn)dXbr=+@hYwcH(Pe! z=PE2(9+N*Z7&3P~i$lf3W;nPGtGCu?kh}R?!v}+ifaARiAw&3oQWEpkz;Xvr@l0?& z^cq4yy-ev9wIl%qj&YKX*rgp22#SxRYX3`i#`vzBedPAgvXf%j*Ye(aceBH+D|~V{ zL=Zs_t5aCktQ4flO)D|bzb)2FXzfO_gv0yHU%*VGKj`AIPIGy0RcZr6>U8F!RHG>r z*814L#zA%5#_&>qnah81?D66Qf!h#-+lKNAj2PQL^{_q9>uO15qZ0BlqzR`jwBpp; z6WIeQVsu%)_DKh7#H8af0aF#aCqOB6MvhO1*hK8fS(`2jOqq$4R0$Hhem(RqZ|2pK zb)*w^@vt{wMho>!+=*D?0K`c~hi}e&Qr@g_M*6odh~BlY02G!{cNWJYd8|F|>d z2nN-dsI(i*mR@~d#{qI+rH#|Z8o8Qtc@h$w5)K}>kb(rC%3Tdv4deOBNXde04os{+scViGuM5$sg(Y^_FW@~&ArE$y&Q~TRE#-P5Q4>I11YXDlhtoo zDV2E=qk@Q*Q5t6Hvb13-*BP8D7*@Jsh7EQG5KM!Rqg zelU^~r0SnS%RoUF`u8WX>9ZK5Px5*sehc_>_!D~)2>z+IS>Cb5Ps8H$0Hb?gGA7RG z<{Z+qr7QR_VLt?J4M&MS;qc%}y5YDm+bG($#C(TuTE2Y#>e(Or{P^9AufLL~KRti( z)pL1&eDVB?&tK~Evp+t6@#5e6fByQ}zwiqiQ9vh9THkyfis)MurwhU93ls~CIZYfA zg4|Kb=c&9`GtM?2_y{J3|MX$w@tPJ&jd#p|qJu#83d;vCqY9SM535A4?W*`*Aj+~a zGV^xdkqJ4HR{^VyAOaJKgVHe|hp!c5K>+c8Hb&8E40yzN(6!)&@ICt)2pi$6Ok-N- zF(Jwvx-xsC3T0@*vV19LMQP9~#;VhwetvK4Z%&6xS(+ zEc@Xz;q0EiW+!>RS7&DGGx_^;GiQH)X1xCccD<7fwy`4*pXVSn*MV@a-8-h;2=gkp zH(7IO35V=w!gfF1!hzElsY5iX_Ziq~ow_kp17@y5E4A}1`-8|(v5Rj50?en!)ww^g zou3IK{&YJ}j!`&+L+;YpLTsfC%-2C%@Dk8{i zeVje^xycZIGjbg=0#k9Mn13OYczFriC}g5oOFP;@+ph7e6I zyC!^uasuTwF&2Kvt?*QTN0)q<@hGrYH|gO*EnE0)n=QT5<)G81eXBIwIN>B*i>VbI zJR{G|SSkt`cC`a#_zpJq(I__^bPdb;n1+W78|j!VnI#&m1nI!lEN_Z`KFN?o5^qWi^lv`@_N(5r?3-usX`=@KiHl}=oxuo_gMdJu!V#O# zp`JOu_~G-x>$ih)%BIj>n}a3E8y9C6KOJ5CjI;aV$Md6$3w}C3z1F9ne#j19pXv{O zmNE-tK_a7$2i&72J8le*I8`xJTGxo*<^p+P38kbq0l!OsK;ncJubkGf?WR>&t>^R+ zKJ_^3)@;dw909!YbGdoCle7s`A2}J$O>FiCL}3hGtc*w?X7mu+;oSqvaJBD7rVC?S z<%Vnw>IruXc6VSLEZ$LjCEHO_1F#(`im`PLVyd?$qSvyxF0yBO#9g+6ZvnSK$|Uxj zw5-#8UyXQwdfjR*fy7JtQ?G}d&O-mPBDDnX);YMP<|Vu!+kFqFH`S8(bYi#V#vx~l zpG#aV^NvIgc~4A=6rQa)b^IR z>Rz`KA2iG2ErVve-4Lh~4p~ohNJS4gKmR>KxOY5%4L+DP_i}6)kckkH|Jzhw9$q;Q|+@x0RhV~+YSfj5*SLi9# z(MR-ilCIeaHCi!y=61`5{gkMvpFglJ%N*6x@P(<+9@v)Zvn~;ve$ZBCW0>l`b~k}# zHX`cyIQWd9%a*H ztEOM9r_%=`V(mUe?ZKj(8R5oGe~Hn5)_Xy6d()f8wBP(1cOOxshNEmy{1n4$@n}Iu zfgn;|6V)<}*s}@^wDZHAK&Har^8dR-Rm=4z8VIo*XABR{j;wdOLkG;Ovnm0bi1n+c z`uo(N?PpEkwo@l=7U`}`Td5vpmQB%cMPTuZ_`*uitYO=K@*F%s zPL!nXA<5Pmi|6$j=NUVjSK`uFpZGR%xVwPNCQ`c>QK?=HmK+x3&e*X?PLo>2HPN{t zvYIWRYB(VOTPLDP+)T9Icdh&Ehql<0ivd4$NUUBmqYNElsRP=1H^nwRoJ`lk|<3Gy{$#+Tk;>hgPws8a^aD(k>!922U(I`0*cqsOvWm_(ymm zrlI)B@{yMTLKveT|KarH;93K38{qO-m2=AZyLzuHSJjg`5>gx~;`9S`gAbUzx^ZeJ zkAFM?n{X{oi;DqC%N%}Ky7hb#NvJNpo_^+jP=~jdtD@evwx$%nw#C_F-%LjbaeQh& z8y`lIcn1@>=+&Gn(D03a4t7UY(saNJEJ5_9iLnqX*zwK0y6lR}YB+~Xy1zy&*PEM* zXRsfIQ!I#(xm_-1D>kw3_!7x5AtL ztjky2K+vaMxrV;2?sAe}j8{2lrL##e#S32t&OKV>#hW9U1xJ;C3DUE9{rfvx_HoZp zcNLww+#jAAm#2u=YeEDzZcok7PYz7|-u)hziQbrG_aao;HaRQUzNV@l!_e+uj-~A+ zvcQtf8D0HshMq@7EK+42!dh2g^VNM)8@O~>=}?ei^o&E*#_M(#M8<-;;9F;x~rVmpWNryYaG(WxR9$M4d)MC zJeoeE@AQ_)8N#Eji<;O1j6}ji%8Ry5f%<>*oe>Wru{{*!{-z-D_8qG@pU zUwWgM+5CFD#O;mesD@RP6cc{rvvl*BF zI&=9#am8`;>9tLqVuKFxK(N)0etT^g5xrUP?^-*DCR;ANGnSlAu4lCoVB@54UnbVg z3H-Ek##LTdvx4K0^`OQSs~X(zXY-1RaNv`1_0kl=75$;@LF4+*O}-(y_;@_8JeaYw zi5LvvVO~jp11$rye4`gNs?$<7;2Z_$D8OLm2P)=n-xwkaP6cHDO(F5L3D0fyo(Wtj zjr0&Nq;nwkdK@w2z}2P~zr`*g>_?(18e#o{~-pFlB2ZXLo+#nhfRbXfmB=Zg-36cXJ7B?l5^l)f0_Bn#dCqfqtxs@e^+%t_kW`>9& zu3J6r)?6GjyrrJrzCXoq`JDW^@Mi9v4k+CUc!kvv2D&Fmt>_QRlXixF3 zJIubSs`2j-j)nnP*Xx<4R1@yPr0U~1i;((h#k6L;Zs+`7DA5ziKcb=`n<;564cJkn zF^@T_aaoTLzUl_acexTLF4vWA?dA6>YuRmMzIaIpI}*xfl64=AAv3%EP5YO)99-pp z3imOuh}oQH{7-@F3;7op48%;n>l)n!%r=bS{A^ggqr(yN;eYeG;BZv8HyJ*G6_8qB zDMn(;v=E0c+(2i`!JR2FnDxs!Cv2mQ=5Dr$%L4omenP_Zu`~)E?Nsy4MQQ6K#*$b$+H5G*pDcAg zTDEm#aUp8oRZKM-HfFc4#T`HNSL z`$kk{aOR#$Y>>e0w4}jnUw_@=mY2m_X)V#o? z5;XZ@stS~)c<*J^@V{uCIq{l2)>s&M%*Iw?` z!#T2FL^sO^*%8kv<4}G{q;B&N>6$6he@_~?-ay6XJvt-HdOnVS>=N5;n?AYZr8eMo zGD^zIDWdNh5Rk84WdcMi%LxKp$`}k_8*N=lTYMA8K714Q2W0B#LAhx}BwdPZ(SQjX zf^|ZvBLL4~_Q&Y9iNxnIi9zGSUDqrn5O-lR1#6IMc9bD1T8=bY$PMI+J2)enur#>| z93pDySGMh8vAQ#Vu|Sz6=0!AcflK1I#ZofmiMajA)!>#Ysg*+$F1O zv#SX2R(qHq8aEu@@9{*AqJ~zK%ZtkF-iFZiYo2E&n>&sNjiU3mn6t0LnP~P<(Nzzb6BX)n+T(v;_*Bl}c6YyQGN zVkz2x)ZETenYH#ug&fmz3M{G;=?d3c7?5MvIo&UvAo=hj z|3Z9j44z=2p!$YJ^;6btYE^=ColT3$%4lQlsu)OLbIHpSBqM>4kn=bhW3;1ud;$I# znX=Dhr%R_?@#@6+d17(Sq^8h9F7fFJP;an*9G3KM$>G1m(fP~`#@!h*I;%s=!67uw zI}qPtmVW`Yp&6zfVn~czIBDPA{lG?G+Dz>eq<%~5fKYDHca!C56YI^`T5L>B-0o$I zde_tIsuI`ebRio$S0F;6<$Zrqj^3miI@;cuqn)Oq9kjhk5jqaJv{B=`dEh>^nAmK8 zYYD?#pPV--Nc*0rzH^>ytfbsNE=wlTvQR?|8cmDAyj5k@Hbhj4Nv8Fg$9k1npBr#Bk92I_SvPtR`dZ#3U=W#T_CXZ-MD*mMJUO2h!e8Db z1?kNlm;@-HoUP66p@w4!Bu8ua?|ROEV5+PAnAnjvKM35W-_y;#d z@03+3#h64-_v%O1$d>OgESSOn_nP>x9knB;$xbcICDBZq=0CMG(bVFW_Q4H*UQMsK zE=sB44T&DT%@>0uYid;w!8E*BiAK#OfQrxgtk*+Y z(lxEDsK{%*G=*lFZBsly*=eRQkAiRWvc*R$C` zvc=?j`*=qHwv{}4eSXIKHSasjP^ysx#=p$lTx&1J0a(324T<@rED3EDqi= zW_Z6Cp3*#|Y5Kz92xxc`kibp=i*8fO(Skv)cgi#Exp7iLPKxhTG-M9h}RCC=!wzZ58BzzeS~0& zv9eLUIp|M)gOHR{uElChX$x@8;ul#vq6fh)zRGiXT=-7%sWN*tE|DBtM z8}sn)9se0D2k)R<`7JkxnnPqZ93zkWf|G{J2Oq;R#1F@E)NWg@1_ZJg z<(MNg>R)Z`jN9=DnGN0MsX4e_MqI_XU|TwvI(J-+RxVF}Tk>dc8_e2zZWur`8cYFD zkMX!K;?0KFbI79nG%bm{?IHRWHF;f?<6dmSAtDG@bh&?JM{YvZC=5TndIXs0RlY0VTA zaVD`W$2T5+)28l_1J5bc*1&eTMTT4`d&NAia?XvD!z6We^4jcnQ4^% zA86Cw^jXd8IsbCBFX&Jug099q)KGlHUu2I5d^I~lG~yG!nAUiFs2|p{ZQ1k;8lLaf zZNY7^2xtQ7HagrRS%g=2|7`YK+EAj*>pEfxa1ug)&U5-UNTWbMZHzqniFLpD>FDRn zi;EvQ1M2&W?B~p7to-rl66G_5vIoLnso(H3MTyoWFhKu48OvB}HKQ40#d@Ei^3z?H zAPd6|b{e5&jqut<Qoh&v4-0yyohyBqggqom< zLN%Iy2*l~t5}cB&IbJ7DKBWg#X6LgYl4 zWc=y#Z~xH$=IfWQa-6S;%a=`cY>Wp#iiJe3;NLgva$KCi!03%rMEZ@l1;Ma!FV0$9 z^H2o-`mG=%zGayZ@95WoSY&V{&Gl?hzag}!)(Z}=L8}h~D!2m;t1+v{V#!k4-GeKC z!7w)-{w9z2zRPd&sJCFW-2RA`#5z4q%Qvh#FoxX{a^Y@pkGO|7H^3RdK~xuLgL^pN za!F)V#omm9c%u7E$wVD(WzD!kI&ziQKL^Fzzjst?foB8(BVir76!&m~x~Z}|4lGeE zp=j2e2v9kz&D|S4Y3Nl$af`88#-AB~X=8UGheBozQAHYBg8Luv5vuAS)fUM!3e5)Z za&|H6nP0ec!O03|I6QC&3i(>j%~z^WPVq1-XeNdIEWNQh7HyfIGH}0yj>DDdbhm)Y z0toK7D+{+14_^2hLTg;iSz}h4ixd{3Sgi>SH>OGJRZi|5cN;DQhtLTP z{lIm@^C3^VOA(!h{?ZzU!8V@0`0`&xxfYC{)*G z1V)5qNbbS}==aD7!RAQA+OvIFt5w2tYaRuc+%)zZ??<3LNJsg2n4N}O34=g zepKQ_U{gc>)^;{mJHchSV+>mfy-U^0CU-U7ilhJ4Y80g4#RmG>~s#;We zr8jy&1p8wNp03t=Cb4LLH;08$N}D@FrNTn`<5%)quci$3_U)H{Q`+I?i?Jqpee;o| zc4taUMK{yhjSaEPo`2Pi+Wac9VP5Xg(95`?m(7NDQew*WjDNDaE=?oq6Y?(A*%grh7y@pz`g?B5EG{g0gpI+qQr)vd~u%q3f^ zs!Ro6Ya-0mB`A+EI4oh~E}=VEUp*V#o6sKCXTc2Vyt#!^l4_Q=YYbEs+hko|6CtvK z?;+!Ry&l8kTk{LS+c1OuTPC3}C!*k${kT}J=aM_;Ei>+acgG*){F?9~_1M+3R$LHq zN3cMc$c8NN=2CcgAeA+ip}%XrA@Zplht8Mh)3c`Gpu7uB2NM*t)kM&=yJ^yW zZ+u#X*M#_KT`qygpz?E}8u)6Xlv`ZcRAb~NIf$^JjxK#YOX3`2ZwT#eq2P6mnoF6+ zj23vea4RVsTvQR(?G{L3QMH&M?~2oHBmW?jX1o!9>q^F(B*|(ZmuIOE*WYX3)E{HA zz);48y>BZ`nDlx?56C2 zQ?T)WMeCLt!u0Gk&}|W)BD_c(bP3e`bwdLYvh5M#flKePxfN@=kyFx+E9)=qR$)SP z2d&&~mpOciumM+oVyC+w$+qqkv}M#_C|enLVVjg+=T9~9;(gY8_u1)ZIdhv>ufyih z7_nA58;zKatLmcLtY5De3qW@?@|s|ce#T*c$f+`}66sG}4e1xnn_u9b&CmeXT>Fu| zs^Curr>Y_U3p0=yYxQ0g&E?V@$v5lSA~)LCG+AwRty(sfnjYnD2O^_n)6*91r4^h4 zLYm%={WXD}=+bZYeYe3vQi0iOkr(sP@}AphDnILKwwg8+sZp)ejD8iXI?xlw0sb?8 z)W5)kCjHuu30}8*n%Q}c{#r(MY%y=nM7%)sGVde&Q34j+G(^3cch0*D71AMj8a@OK zNU~X}(^rhkgCsw*aFyLhwfXd{32u=^wbr#C|= z`JtI34hicVx~Ok73JF?tmKhp<$ltraKv)e8<@Nu=YW(jDt04&CkLfV`e$HlpN-)?% zq#MPCGybIrWEMNry>V>~bs-@+uo`q$+;KW+Bt^I#yaiQTiT!is^mA+m(=jnQ`~}@{ zpCyA*SddGeo{tY0l8-L(XWQa~1hGL@m13bx^t#g?5(I5?5D*s>q_cY*5Fcpm;Xi`C zR@6IEu~9}N^MZiv6`kXMZtM?#Tdg(097i$08CcW*(@D8N2-$*~|IsSqV`&m}?4A`P z3OU+rlO@!i*2{iB@WnTwpFCwF`#2Ps3$m=Hyot{ILk_#l!NDAkD(gksUMz@X1eo8pM zO$|EB_P;77-9Yb`yUl;nZ45_qqqPmmeBL}PQz|hu+kSF*=4*1C?(D7Oq#!W82M$+j zlh9%<)^{$MT_Pcl-9&Lr58(%!4i!`Y>lrvKNL*8~{7-kC-Q6N;t~6TK3CDqKvx@__ z4MgPmG3H7tg=ABs%B5F-*z98=Bii1zmT&Zy_O93owmz9LP&J&_$fY9g?Bnua+BrQr za7~I&g899>Ys2oI3mlN}i_c&FvH!2nU%dSK+b_TS;mPak{0Xc(h>!WLNASI2>Eqei zd#7D;pC4<4IekO>Xtm5f&;KJE8_AY0u zW0yAEeT?)9DB$jFgUqFE(?V`;LX?UT59k@ut7WaHblfyD89h%_+53;1skV1|ZjQ1XF) zR3y{Va64Ux|`{%NM2P4>;#PUj0cR+g=pyuJSEc}kliVtqE8!ukwi^UV^$ zbMFf_GaQ1D&Zy)0YLJcYNoL`j15_MVQ>c_?*&4OWIci%w#T`b|f4(Oh3Z6}^L4-TE zs;jh4YNL&5vQ@AQ=Ta_e5_aF^d;;_NVRpNkO*b_&t!~c8gH_A0T8x2{EkSR|YRhw0 zf`aoy@YHy4>lHLP<#aj977z-G=`6dMuXk)(_1x*vwrk9HYuu^5x3=HZknh$7ZKioG zo&gnvwy2~3Gb9S}f6w?wlYOw;EVEBIB>w5Qn|jgR(^UUOTw}AIW!qF6 zvOC+ztYDLCY-7KYqqzvW7w)RTc`47-;XoVjEHkn_#uX2%E$V;N z{keqx_t}ZQ+B+T{3Df4|_#{5U^uPUmNuPo6ce7H-xh>~cRI+8x}1 zEN}k2tYFZKe=Av~$85J+<3@nC!!v?;#ZNDadcR^gP zTr3YFQ$^hh>*h zK_c7&yzF{0tp;O$Tn%oB3UPI6at|Cgli6b`4Kmas6E?_DRLKybE=H{r-D4SOo*%yk zdPIIVVbFbTe(eZ6U*1Tm9mBp-O2=-Z3vRi!U30u|YTIcJ{r1mI<0+=@xObe_gjNvN z#w{#ff5=ry-fo*t7*`I*H!##2nF{Buhv5>(`*MI@FyLR57rgM)b(=WC{TRaiCe*@J z{h}PzhcZm3Nu#*5`cbtHo<5HE-lN{>`_L1rA6WVC&^|Mtf%;21ZbH)ti9Nh;x6Y!I z?ScP=3)=&X6Ka0LfAOwe$)!VU-0?JxwHnl*e;ssj)iyipmRnhAb5D4t;HGSCtMMS! zfp?6AjLnSeOCjl*_`zNj9vlF?IL~VH7nX6> zesYj$*1FlT)=f}L zypgum;ZmJ=^EL>N<)k{vjk}m4ba9*Ae@i@oAlw8JyLUs&kV$*?%+@*aK;rVd*e&C~ z?W6}$>zCjv2*ezN6W|+^a}Kg6CWbeoe~%|8a`zfhlw`=Ih#q((z)cCMGIt7yu?Ml| zRzC#32(r?i{~^-qy9QD{{rdJtb+ulOcJ&!NwB@&3Fex13O{6eFxR#GgxFT(QsDsFh z=l}Zr#jEXUR$50Ip<)cX-CQkNLB~_;HoO>i7|X6$I%_3iZG)P%U})6M<`7see-O|w zvs*ttfJTmV0K-DeIyDCX3_PLsXXx(;+{jWJJlF@%k;uj0D8S6$Pw1Av>uBbAGLp)+ zKrMpqCInVG*vh`KOuY4KZoR$sjtkChHc*%@c^fHkwzHU)HDlhnf7dk!O^dT3CRino zQNZCAYvz?|%`x+ltkDNLdF?J7e__ZCZdp?0%x$h;q*zUrsaNB29_SPrOfs>F^=&KI zj#<|#0enFv#Y0lq&hfHZWDEMgrX-eC{P1`WSv`1L?B+eE0DJscl4<8gStgdCCnp~K zT)>1B_F?jU^)eRW_42G9G~`?!nOCGy;Fl4E0cSJX!|dDV&;Ri9-@beCe=paZ7!k>l zt670nSkIAYNg`h(11ofIx|3mXZcdxWC#-$6Tl8_u7Gxms8h2X{=d7K0SR|w_+T}Xw zg^{Scy{!#VF1pfED2i|;K|om?iTR@FQT%t7%7(qgKDv|0dLLLB$<|@OG4FS9@Q}gf zA)iy1*>QbweSUgzu{dVwf7Dt>Gnh^vcqh?c>>~QJz`x;yH+Hq5r{)&7>1TFiauVbd z8ZMP6nTU=H{v-MbPs!yJTgsi$iKlU`=c9}cqG~y$-jPY?S0=vO)m)&EoUq94*k5U5 zr!-vXU16p{64Zt}eH3lf41^6(O*&jaIpC2<|fxAt_9f3-?hGX1h6uas_4 zOPR0;yzC~1tFRd+v%~@SO_PUnrMiboiN^9slRfFpXMQf;t%~J*Fs+Sy z3?iWqr=l;Pl{Xy2Z}tY8S~M})&8YLM>#^H+sgiBqw3K;y_$VTqJm17*))j!ptqe1q z-eu{#w*F+Kbq&sPK06z-Sp4K`n-FZt*UlP3k;53T2DG6De;Ie3*KcQt!M3RF?>P`h z-bp1|$o!6=!~FhVOhiP>;VR8C`whM2lc_{jMvJJf&im@mvMOgPFc2NmZ|rkz_pIQj zZg6n}hU$go2=RTgFOEETc2sN-KmkDmP^}6&O*N*Y#vIS!owS~FxJFJ9ASI3doJ+38 z)4{#Wl=Ha}e+*Q8{GkwC7I!4y793(z0^&)wnfAGiX5myg+!-}ABV5T^((fTI8X_~7 z(*gB%-;)+Q2OCd@1K!b17F7tx+p;FEhy_O!rX5`TrF-K;l z>;$>I8?K>)Y51^!lxV~Qu1_tQ&@08X&xUJ%@aQK02B#L%Pkt?ga?5(T0nmQl0BcPY z6(WlRHf>(QahPozI7S);Jv;#Xc}NKknzYTvJ@ViyE4BkRxIy`N!P_l?3yLLetLhzU zX+WCz4tiPcQD(ar%zFDfU{a-%KXDp=bS-*ReUdA#hw+Bx2+zEj*c*bYg@Yq8^A67j z5_lSjb|NN+rmH5!J&xMDCz5PPjvXqqQLo|gIq5wK-9m}WQ=!i|gO<1tNqK^nMl2XV zfJKDZ_mIDRFnNr_nKZ0OIhBDi9HKv&T&6k=mP{*`0F#s6Wi-=+$B##!eByb3b~Z1c zOfW^%BCg~b;ztbO>tI+L8i7rW@tBtx zUog3bN!~%*&R6QiQ-9Tea0xDJ9yX$R$;ep^36@<9%nuQ4f3+sOGa*N=C1`~otitX# z2@9b?D-cq|ZMnK4B98sWm^_%@b5Mx046Ytik%101P`V#FJrOni+)k=}PFR^>IjDPD z@7cQ6o(P0)aWce2KK6FY8Nbz;O9eB1P!t!3<#BO-b8c3KqfqdF`kiGyAPi_4P~n** z)SKZZLyj;1e4tiea8?+O5t1CgT_Y{uSSbcbBSyWJZiD&3HU2eP}KO`0thWO5!beQ%iGLsEr{m`ce7q; zn=Kp5cBXuQ9K->CYk+4E=d;rXA=dOD?KQ>s#QB6y+o{sI7 zB(mTZe-pW|=z6#txd7(21~supq#Uu|&#~yvvCHm0oD-FQk(%9fm$Pv#5q9~?lW0j_ zGR>Lz8E}`ZmaF))j;#?tqpdlKq;asVQ+qYxXTURsyck#6w*E4;siu;bS(jlWOmz07 z<8i3^?lK7*?9u*YJs;_0$Hi!hvo@d5@G>?De|j-4-d@ZRSp4egZ!TMw68ul=TDo_N zCER7N%gr2r{j6m#F7k^$SQ^@R|B%JwJBn&&zxj;?wky^5O2K^vQJsv|v+*hGQsvx3 z9^fo>zO8H9Wb=c!0vvK^GlKbu>+5D4yClGHzY8xx1XkD&bIMG3EC^oO&?8a^S~+?0 zEXt&~yncp^4|OJg`jSlUNmxXM%Ff3Nlq{J;!1ly{VGI!!%R~41y_1CPORiyM!>Dr5 ztEo67M30M}`vtH{T)-kT-f)R1h!JA4f<&{z>_Kj$*bz1!l@x#Gbt{nl!3XdspSI3WH9?Tf1kKT^qFn5R1&by!iz`7Y(cH5 zLk7Zs#2F^=3}+DW_x{-X($v%9vHp-waJ$z)l9UuhmcO>?9^TE%P2A@6?Bg6 zgz7}Y3g%rdU-6S9;K2=!cD;N+h8p-b$}h7~XDH9qvt(sm^6YbEkO6W6GL>kG0st?0CJ7e*O;=#Ok|m^Y;KC(O}skFTeZ# z#WP?ziV%MP`J3mjq||FWZ;4s;{Kbp!UR;YER6SajixmWhY6yq-6~Z@4DvFxq5>OIH zSI_@a-*&Uhr@y)CmfbGY2aAB~AYihdpw5IFSnw@-f`0&8p>8+C+jEuv z@E+nHCf>VlY3WEg(g1eB2rwjOyrm3&9{qd;ict`ir}fqX%)e&wT#l}?-?4wNZ9A_J z?&Q`QM^u^jIIo!QW%-wxZI{^dE02rD?bgFX=C`-C0dc71&PYxFX*%T8~QAvUiqbzE5;n% z<&I`9IJL$mZg6vYOsgGisn9<&V#)#<2#Pfj_l| z&HL`T004DG z000gE001s$X>=`ca&K*LbS`sfv^#54+sKxm?O)L&%-Cj-dF1ZhDuR=cge0yz2^1!G zb|&V!+EUxrMwWcl5*`A~Z{PFimRiPyY;7%70lOck&pCbGeX=DcQqT9k>A9FixmafD zVwnqFESG7PH@BKw;!V1Lyvd^3JQtleU2(X-|My+^^`Bxmm#aja^~AZ7S)jzRUebqG z=5H^}W-nm>+eqhGG%0cwiXsVBCi1xw?>~JO?^U8Q8H@8`5=VjfH40Rs)vmZ!nU2y# z9QO8mgu>-K(n1GW1gOb4PFGsoq=m>+p_LMuTBbV6)9gm*T;_#;7EyxpnW4tONQFw| zBvwcC6@Cu7L>r(3(5F$X2w=KUtGUXQ=&0VTC;r;&0bhIrNzc1I-h9{?Ey>KV`Pl^c9Oo)aWFB3s_+}S>mkB9!j3OD|h^f>tZLWIP z;ZY!y3Ilr#ZZ_1sIs5qWDiuqa$%TSL z^{zOE~`}4CWwz*-cLf6x|0RP$RqFc5aR2;%Kz;;Nu9c&U5Zg@IC2y zx7^m-1@@WO4rYvY7rf~Opf%XTLt;kWt(kXqL zWHJGnWO|H2-DEbcLWYrE#_|T}OA|mTni7&I(m|1BfD{fULINQ485N)&0p8Yt&sSh1 zm{mM~9$*D(p2leUQNu{Sf%}O$w^yQMy$_=!NYtM>LaX=;UGoJniZL1SF==^?=YY3%3Q%d^cX#a z`!>q*n<214ku;*)vX&)OQ(45hrbDv=?m7u@?<0i5dF=K==99%q#+tn+@T$61^nQRN zNK{1fujdNH8l)UpnX@Hw&w(R`A0B0BPYkA;Ap#iEG%4Dx_LB^CZ+Yq%(K!05Yzz>8 zk)&s;4NNYQJd?p!wD#cCwbANQ&s4rf#ph3#7bkE2ar*Y%;MddPqm(>^4{+QQfST%#xA|yytZt{CqyVyf{7i*!N_Ak*6Lo;zW4I9%y+O1t9Obv^5h2Vgu6Wz3>3e z!+AMZ5~q(}tnZ%7YeW*lNYq`#%Inu*f6$XuKgRY0=}Ww8 z5-;HCt6Ph;b?Ev!d3qap;o(1jKRNtzOd%U~c1wI$;H0czuPH7`6OPGAdX4PTWTf@Y zVv@#sqgbGM9G;$^T%25s z3k)=2fmooV?*j9|Mvxx^-l`1aG60g@_{%8xx{CqsB+@F#ciAnovn6|fWqd6B<+uXC z6O@?b*4VG|WB>($DxyW>xCO$jOK`e~H_K)?16-L3j94^W4#;Zz zWg9OZ3@L`(8}1F_gQA|wP!bVpBkk_Bcxj=-Tx6=anKAd^5Udjlds{*mo}9|;NurLc+wC{#J* zJTQXn+pW2px2MB57lYTQpnkvqdI~_`P~e=ADXkt@U^MbF0_#LSB>CV#a9g5Q3S)YZ zP1XiE6P@dW-rsxAdWU~K`;V@HV623A3hd>dlHDXQT(I+1Vw=W5w0qrXb$#2a=nsLq6`p) zg}HO9Hg*p&xMjn+yFozToc(%s@nP`k@{v#s4Je(UIZTk65|!o_A7aj~G9V8tBmUmI&X65L~y#4TN|v_Cj^NmlR-S4`2Lz z&?H|C2x$|-Qgn#6atdz4vA2n6ElCWRkDE+qv%I)5+P`tRxzlalHXCso$XI+;hLv^z zB9(Eb7Ab}c@Uh6^@lxhk+7c8{iNvn7@cJmZ9E>%F;rt!sAEG_lA0=)0lZbZLYc?QBi7_0Iq42YcPtQRGnvDiYz1M1kg2@LXlxqc z@8{3qcSU}02Wcl9D&Bu-bvmuvEob1>)xG#d9CW)^HLTWd9_H3YMx#4tc_|67>KDAA ztuCZJ@$}LM1AL!z?1e*WydIB_&-A z_iMkyS{UyqvcM%cR zvwh)%WEmB(=aUk+N>)S8oM6{(+Utvd!>juzHg3P#p(V_aWDG_gsCl4_q)sTkolep} zcrFrg+&8P?%P+rlyGClid)O9#wMw5{-P74d(rQM>-L__GDkXL^OGM7*LYm7yNh)Fq zK|_8-`y8ZD??CIvgSSV%xj4cE^?rSAjex!T(z2Kh~sj6sWYZ!Hvba=-)Uc-P~q;*rabRbME0{+Ho3hs)YDOs=`NKXiwMjf>W2v*A$GAxkmaM$d99F9Dx)Elb;5kvfU$$=(>ONl z1-M6;(pZ0=+1cN>vTdf(GFQldG>ljqlgAUr90Qw0_t*LsQ`$E2+!++ zUj$uo%pkdQ#@E|#?9&RkUSMJVU|qjjh`iWhuHx;kEqq}X?sx{Gk>j<0Wyf||w}Bko zs!EZyP}8oqP?@WSW&aOkisFX}6~!;DTRMAdzj6O#RExqld$t?<_x~#vILGZY?kg}m z_chj7(MT%B{QNV2MFUzlSXGE_4;xd2P^lvaJ!~v|pNpUn<4tQe&{aoVi6}sV5G+#2 zjQW&lTp<=X2xmdC4A~`rkZGps@nvf%My=aNFk=r@+HYR|#Oemh10)Vgg;eOi!J5i* z2&vVQo;KUstWwE!l%)whCOCGg>;BO z7XULiSt#}@*qbha_kMCn+P?(Kj`&U~pzu3Q+6zkKu>$KTj`)Sgx!EDaO!(j}QCp?RU5E z_rC3nL$st4nxRj%xp)FGGtJ?L+7xm9+`hGPn3z4b$OvVj9btHgllz zd^lz-1|9`ZcHV0msU6Qbf91l21q_welMRd9#gT&{%&f1~?ph2o99F^P`trhEUexd?%;L?vpMsH&7ru*iY`kla5-iY(m%urUCN_GK7gVFl)}Y;WMVQ{D}U#=LxAp^%uXwN3Yh zGcqb+&Bu*!{{`oUMyD9HkVg$ZQB<37Eu_+hJPA( zL**#=h8RF}nKkW0j^;|Q9U_b&4T3 zy#bhOGX>H-4O8N`Wu84b8=E4jTgAfFBuUIxbdIyVbv!_XjBJ4v-SMoCvx86X(NA$j zMeJji5U;^>t_&uCf3%V z<-$gbOf6Lsnic`7xG2!y5W^4}=TL(t_?4Gq2|7Y*?0@6(HsaXi4yLlpk-NCcR>23& zj;5IXu#JnG4$zboI!_l6#t;VejxI|1-S#v*f8gG(ecZ!)L3MNAWVDfz&95$fY#FJ4 zqA6nzFiTco^T3{ffw2!N)=c0~zxC37<@mUtq;|miWM>FKF9S3=Sq=e%X+RY1`ZQbv zOtze1uK6?D`fX}AZ8yt$-j-4D!@FnQhQZ=SQ55W+N5;P#!$Z(1&`1rw*SdXnr z9C>qNi)qf4*y6@cg4)+omgJS9cUxY69WAiC&*(llS?;ULt9N)kr-vc1;JgF-@IV}? za|B1Q>DFsGRJ2O$J!@q4?+&^TNjTU@g3ZqiN-ey?=2|JoO=*tIySjD7_VEemZv%_l zmK;4-ag3Y6_Hd|=qf|{s=`}2?6ocSv>RE1V;XWaD*aU?shWts4T@Mwb;Cx+wmY_BE zDpK2$-TBRKL|5o+uC*{%+wpPC>^wgk4*rYLFMAKsix5%+hdA?u$Bdz2d^{#oV+bS* z5oQvb!f|(nJvKSOxWGJq;QGk#N zIO4dDB;CML1zb)JGHfjl%VRZvq+{<=WWL1gfUq)C#K|^%(|cGQ(0i>8hEU_@!6NMI zB235GV(e$r@!s~GB`vID(dPv^yS3V&-A1%Pw!%z2xnx73cu1=z4%t_(?zsBRWhmQ+X0^L0}} zPwbhB)io9h==#xOl8Lr|5KbVeT_|Cj^9;V+Y;Cldbrj{gY!d<+a5Gb*IS69C57EFZ zBJ|R3hfIfbiX3G|mxhn=@r|usq!~W1KZx_`h1^HOv`e4B&{UF6v6h@t^S)$>lhyxP zu&^Z3XH5@o22S#6y)Ln!bbY1OW$$I*F>6H&$mzu09Thavx_P^QqKO(9^t%?y>yr&& zK#D;P{eQbwb^{QLBensIv3UnGlrfdk#^^!DXo)b!HPdeWn+t9}y;p=$2A?ABM_~Iy zRgPgfj>abtwYg15?&4LNef9H9DYKk1oow=RBw4TeW1H7VO-6ZZ(B@F-Be> zD;|aUBuHDF$3ZU)zU^MAK+tY{sq?wv2GyolC9jWvN)Aa#B{ucmgbn?MYk1e! zueBQf2#sKDRFAQEV;&m2#9rpJBdG>c+j3bWgKKR@YMjsDu$Ru)Jk4e75X*@=x2XEm zuBDvO1tNqR65j{C#=tdV?Mv{+)9Cku({TUEN3++wSn$}M z1J-$Ewy-~*Uc5i$YL5#L_u`bPo;Wq0_3Bi$=jZ|O*Ms5do6GU9XYU^X=P3i8gxM*N zPHM|txO0O00NpKY_>QCGt7-g>0*sPyW?~(louC(grHwDUmT{~u^pMLPNO1H|4=P-Y z1Fmwfp`N>$h9&AH2NYxtyO$QdTLiKNBS+%io`(j59&O3k*7?yWlXsIzGm-Skq}`=a zs<+*uO)}5S9ot_^uU>tcf_6T+V~D^|9@Jyn%#t97<^uzVw4~lsN#+^O`EpEE}O&~tc;3E6R-e78_K)S zcK+;83X^sVB~4PtcD~r33nI!EM3WT*;GJ5k0Kls(h%;aVi`wnefhupJA%)C2O9Oyk z$$bKno{;+xI0gpS*VJ?D{uSPQ&s=uRy*X=t?^t`m+B4Q(TRP&2bK9Z;k>E%=2K*s( z4`z6{pFT~vy?|g)-5#H(9cRqmTwC#ioLOQ9Su+=p(sOu0mg*&FA&cY%n=uIuVMERLcFRP4uSxJ(|Hv1)R}l1?aU)c&?9vP7;4#`&-K*c4R52Sd;u(b_Ow za52KVe1Fp@^vJok`+`hq@o=v7N*BAOwR|KZPsYQ(WFa?+0&J@%E_S1yX%$T?PW%t> zcLgSXcYb#q*^}mOqFo4PbjIA5^%t0bH;n^|8mS_`&W$CezPvi3fQ#6D9aGlaF}^{JYCrbtt=C7Fjb{^RyT6N#dj~ zC2h$qi0;5YikJ}VV5IM_U=J2*uWGfSJg~cz`Nd;KSe5EfO-AZRRYo1G`WU4{)jBx) zWbuiE4+}}T`Y6QC5lbe{tp=X%U%)6Le4Qg8@*Q(Ljs4LOD+I#-XW#c8@HoC6`iMxo zo9n{WIe819X0l(CpO@(lCY?f8J=R!~bx{BS6Ec&Qm^2_OokCZ%$B`)Y7ytluMF0Q} d000000000103ZMW0N-Yl>X;w~0Du4h0056@#kK$d diff --git a/home-config/.git-completion.bash b/home-config/.git-completion.bash index 377d6c5..60a22d6 100644 --- a/home-config/.git-completion.bash +++ b/home-config/.git-completion.bash @@ -28,16 +28,32 @@ # completion style. For example '!f() { : git commit ; ... }; f' will # tell the completion to use commit completion. This also works with aliases # of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '". +# Note that "git" is optional --- '!f() { : commit; ...}; f' would complete +# just like the 'git commit' command. # -# If you have a command that is not part of git, but you would still -# like completion, you can use __git_complete: +# To add completion for git subcommands that are implemented in external +# scripts, define a function of the form '_git_${subcommand}' while replacing +# all dashes with underscores, and the main git completion will make use of it. +# For example, to add completion for 'git do-stuff' (which could e.g. live +# in /usr/bin/git-do-stuff), name the completion function '_git_do_stuff'. +# See _git_show, _git_bisect etc. below for more examples. +# +# If you have a shell command that is not part of git (and is not called as a +# git subcommand), but you would still like git-style completion for it, use +# __git_complete. For example, to use the same completion as for 'git log' also +# for the 'gl' command: # # __git_complete gl git_log # -# Or if it's a main command (i.e. git or gitk): +# Or if the 'gk' command should be completed the same as 'gitk': # # __git_complete gk gitk # +# The second parameter of __git_complete gives the completion function; it is +# resolved as a function named "$2", or "__$2_main", or "_$2" in that order. +# In the examples above, the actual functions used for completion will be +# _git_log and __gitk_main. +# # Compatible with bash 3.2.57. # # You can set the following environment variables to influence the behavior of @@ -49,10 +65,21 @@ # and git-switch completion (e.g., completing "foo" when "origin/foo" # exists). # +# GIT_COMPLETION_SHOW_ALL_COMMANDS +# +# When set to "1" suggest all commands, including plumbing commands +# which are hidden by default (e.g. "cat-file" on "git ca"). +# # GIT_COMPLETION_SHOW_ALL # # When set to "1" suggest all options, including options which are # typically hidden (e.g. '--allow-empty' for 'git commit'). +# +# GIT_COMPLETION_IGNORE_CASE +# +# When set, uses for-each-ref '--ignore-case' to find refs that match +# case insensitively, even on systems with case sensitive file systems +# (e.g., completing tag name "FOO" on "git checkout f"). case "$COMP_WORDBREAKS" in *:*) : great ;; @@ -109,6 +136,40 @@ __git () ${__git_dir:+--git-dir="$__git_dir"} "$@" 2>/dev/null } +# Helper function to read the first line of a file into a variable. +# __git_eread requires 2 arguments, the file path and the name of the +# variable, in that order. +# +# This is taken from git-prompt.sh. +__git_eread () +{ + test -r "$1" && IFS=$'\r\n' read -r "$2" <"$1" +} + +# Runs git in $__git_repo_path to determine whether a pseudoref exists. +# 1: The pseudo-ref to search +__git_pseudoref_exists () +{ + local ref=$1 + local head + + __git_find_repo_path + + # If the reftable is in use, we have to shell out to 'git rev-parse' + # to determine whether the ref exists instead of looking directly in + # the filesystem to determine whether the ref exists. Otherwise, use + # Bash builtins since executing Git commands are expensive on some + # platforms. + if __git_eread "$__git_repo_path/HEAD" head; then + if [ "$head" == "ref: refs/heads/.invalid" ]; then + __git show-ref --exists "$ref" + return $? + fi + fi + + [ -f "$__git_repo_path/$ref" ] +} + # Removes backslash escaping, single quotes and double quotes from a word, # stores the result in the variable $dequoted_word. # 1: The word to dequote. @@ -407,16 +468,18 @@ fi # This function is equivalent to # -# __gitcomp "$(git xxx --git-completion-helper) ..." +# ___git_resolved_builtins=$(git xxx --git-completion-helper) # -# except that the output is cached. Accept 1-3 arguments: +# except that the result of the execution is cached. +# +# Accept 1-3 arguments: # 1: the git command to execute, this is also the cache key +# (use "_" when the command contains spaces, e.g. "remote add" +# becomes "remote_add") # 2: extra options to be added on top (e.g. negative forms) # 3: options to be excluded -__gitcomp_builtin () +__git_resolve_builtins () { - # spaces must be replaced with underscore for multi-word - # commands, e.g. "git remote add" becomes remote_add. local cmd="$1" local incl="${2-}" local excl="${3-}" @@ -442,7 +505,24 @@ __gitcomp_builtin () eval "$var=\"$options\"" fi - __gitcomp "$options" + ___git_resolved_builtins="$options" +} + +# This function is equivalent to +# +# __gitcomp "$(git xxx --git-completion-helper) ..." +# +# except that the output is cached. Accept 1-3 arguments: +# 1: the git command to execute, this is also the cache key +# (use "_" when the command contains spaces, e.g. "remote add" +# becomes "remote_add") +# 2: extra options to be added on top (e.g. negative forms) +# 3: options to be excluded +__gitcomp_builtin () +{ + __git_resolve_builtins "$1" "$2" "$3" + + __gitcomp "$___git_resolved_builtins" } # Variation of __gitcomp_nl () that appends to the existing list of @@ -509,6 +589,26 @@ __gitcomp_file () true } +# Find the current subcommand for commands that follow the syntax: +# +# git +# +# 1: List of possible subcommands. +# 2: Optional subcommand to return when none is found. +__git_find_subcommand () +{ + local subcommand subcommands="$1" default_subcommand="$2" + + for subcommand in $subcommands; do + if [ "$subcommand" = "${words[__git_cmd_idx+1]}" ]; then + echo $subcommand + return + fi + done + + echo $default_subcommand +} + # Execute 'git ls-files', unless the --committable option is specified, in # which case it runs 'git diff-index' to find out the files that can be # committed. It return paths relative to the directory specified in the first @@ -641,6 +741,7 @@ __git_heads () local pfx="${1-}" cur_="${2-}" sfx="${3-}" __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \ + ${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \ "refs/heads/$cur_*" "refs/heads/$cur_*/**" } @@ -654,6 +755,7 @@ __git_remote_heads () local pfx="${1-}" cur_="${2-}" sfx="${3-}" __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \ + ${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \ "refs/remotes/$cur_*" "refs/remotes/$cur_*/**" } @@ -664,6 +766,7 @@ __git_tags () local pfx="${1-}" cur_="${2-}" sfx="${3-}" __git for-each-ref --format="${pfx//\%/%%}%(refname:strip=2)$sfx" \ + ${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \ "refs/tags/$cur_*" "refs/tags/$cur_*/**" } @@ -683,6 +786,7 @@ __git_dwim_remote_heads () # but only output if the branch name is unique __git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \ --sort="refname:strip=3" \ + ${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \ "refs/remotes/*/$cur_*" "refs/remotes/*/$cur_*/**" | \ uniq -u } @@ -707,6 +811,7 @@ __git_refs () local format refs local pfx="${3-}" cur_="${4-$cur}" sfx="${5-}" local match="${4-}" + local umatch="${4-}" local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers __git_find_repo_path @@ -730,12 +835,19 @@ __git_refs () fi fi + if test "${GIT_COMPLETION_IGNORE_CASE:+1}" = "1" + then + # uppercase with tr instead of ${match,^^} for bash 3.2 compatibility + umatch=$(echo "$match" | tr a-z A-Z 2>/dev/null || echo "$match") + fi + if [ "$list_refs_from" = path ]; then if [[ "$cur_" == ^* ]]; then pfx="$pfx^" fer_pfx="$fer_pfx^" cur_=${cur_#^} match=${match#^} + umatch=${umatch#^} fi case "$cur_" in refs|refs/*) @@ -744,9 +856,9 @@ __git_refs () track="" ;; *) - for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD; do + for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD REVERT_HEAD BISECT_HEAD AUTO_MERGE; do case "$i" in - $match*) + $match*|$umatch*) if [ -e "$dir/$i" ]; then echo "$pfx$i$sfx" fi @@ -760,6 +872,7 @@ __git_refs () ;; esac __git_dir="$dir" __git for-each-ref --format="$fer_pfx%($format)$sfx" \ + ${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \ "${refs[@]}" if [ -n "$track" ]; then __git_dwim_remote_heads "$pfx" "$match" "$sfx" @@ -779,15 +892,16 @@ __git_refs () *) if [ "$list_refs_from" = remote ]; then case "HEAD" in - $match*) echo "${pfx}HEAD$sfx" ;; + $match*|$umatch*) echo "${pfx}HEAD$sfx" ;; esac __git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \ + ${GIT_COMPLETION_IGNORE_CASE+--ignore-case} \ "refs/remotes/$remote/$match*" \ "refs/remotes/$remote/$match*/**" else local query_symref case "HEAD" in - $match*) query_symref="HEAD" ;; + $match*|$umatch*) query_symref="HEAD" ;; esac __git ls-remote "$remote" $query_symref \ "refs/tags/$match*" "refs/heads/$match*" \ @@ -1157,7 +1271,7 @@ __git_aliased_command () :) : skip null command ;; \'*) : skip opening quote after sh -c ;; *) - cur="$word" + cur="${word%;}" break esac done @@ -1422,12 +1536,32 @@ _git_bisect () { __git_has_doubledash && return - local subcommands="start bad good skip reset visualize replay log run" - local subcommand="$(__git_find_on_cmdline "$subcommands")" + __git_find_repo_path + + # If a bisection is in progress get the terms being used. + local term_bad term_good + if [ -f "$__git_repo_path"/BISECT_TERMS ]; then + term_bad=$(__git bisect terms --term-bad) + term_good=$(__git bisect terms --term-good) + fi + + # We will complete any custom terms, but still always complete the + # more usual bad/new/good/old because git bisect gives a good error + # message if these are given when not in use, and that's better than + # silent refusal to complete if the user is confused. + # + # We want to recognize 'view' but not complete it, because it overlaps + # with 'visualize' too much and is just an alias for it. + # + local completable_subcommands="start bad new $term_bad good old $term_good terms skip reset visualize replay log run help" + local all_subcommands="$completable_subcommands view" + + local subcommand="$(__git_find_on_cmdline "$all_subcommands")" + if [ -z "$subcommand" ]; then __git_find_repo_path if [ -f "$__git_repo_path"/BISECT_START ]; then - __gitcomp "$subcommands" + __gitcomp "$completable_subcommands" else __gitcomp "replay start" fi @@ -1435,7 +1569,26 @@ _git_bisect () fi case "$subcommand" in - bad|good|reset|skip|start) + start) + case "$cur" in + --*) + __gitcomp "--first-parent --no-checkout --term-new --term-bad --term-old --term-good" + return + ;; + *) + __git_complete_refs + ;; + esac + ;; + terms) + __gitcomp "--term-good --term-old --term-bad --term-new" + return + ;; + visualize|view) + __git_complete_log_opts + return + ;; + bad|new|"$term_bad"|good|old|"$term_good"|reset|skip) __git_complete_refs ;; *) @@ -1582,7 +1735,7 @@ _git_checkout () if [ -n "$(__git_find_on_cmdline "-b -B -d --detach --orphan")" ]; then __git_complete_refs --mode="refs" - elif [ -n "$(__git_find_on_cmdline "--track")" ]; then + elif [ -n "$(__git_find_on_cmdline "-t --track")" ]; then __git_complete_refs --mode="remote-heads" else __git_complete_refs $dwim_opt --mode="refs" @@ -1597,8 +1750,7 @@ __git_cherry_pick_inprogress_options=$__git_sequencer_inprogress_options _git_cherry_pick () { - __git_find_repo_path - if [ -f "$__git_repo_path"/CHERRY_PICK_HEAD ]; then + if __git_pseudoref_exists CHERRY_PICK_HEAD; then __gitcomp "$__git_cherry_pick_inprogress_options" return fi @@ -1652,6 +1804,11 @@ _git_clone () __git_untracked_file_modes="all no normal" +__git_trailer_tokens () +{ + __git config --name-only --get-regexp '^trailer\..*\.key$' | cut -d. -f 2- | rev | cut -d. -f2- | rev +} + _git_commit () { case "$prev" in @@ -1676,6 +1833,10 @@ _git_commit () __gitcomp "$__git_untracked_file_modes" "" "${cur##--untracked-files=}" return ;; + --trailer=*) + __gitcomp_nl "$(__git_trailer_tokens)" "" "${cur##--trailer=}" ":" + return + ;; --*) __gitcomp_builtin commit return @@ -1708,32 +1869,44 @@ __git_color_moved_opts="no default plain blocks zebra dimmed-zebra" __git_color_moved_ws_opts="no ignore-space-at-eol ignore-space-change ignore-all-space allow-indentation-change" +__git_ws_error_highlight_opts="context old new all default" + +# Options for the diff machinery (diff, log, show, stash, range-diff, ...) __git_diff_common_options="--stat --numstat --shortstat --summary --patch-with-stat --name-only --name-status --color --no-color --color-words --no-renames --check --color-moved --color-moved= --no-color-moved --color-moved-ws= --no-color-moved-ws --full-index --binary --abbrev --diff-filter= + --find-copies --find-object --find-renames + --no-relative --relative --find-copies-harder --ignore-cr-at-eol --text --ignore-space-at-eol --ignore-space-change --ignore-all-space --ignore-blank-lines --exit-code - --quiet --ext-diff --no-ext-diff + --quiet --ext-diff --no-ext-diff --unified= --no-prefix --src-prefix= --dst-prefix= - --inter-hunk-context= + --inter-hunk-context= --function-context --patience --histogram --minimal --raw --word-diff --word-diff-regex= --dirstat --dirstat= --dirstat-by-file --dirstat-by-file= --cumulative - --diff-algorithm= + --diff-algorithm= --default-prefix --submodule --submodule= --ignore-submodules --indent-heuristic --no-indent-heuristic - --textconv --no-textconv - --patch --no-patch - --anchored= + --textconv --no-textconv --break-rewrites + --patch --no-patch --cc --combined-all-paths + --anchored= --compact-summary --ignore-matching-lines= + --irreversible-delete --line-prefix --no-stat + --output= --output-indicator-context= + --output-indicator-new= --output-indicator-old= + --ws-error-highlight= + --pickaxe-all --pickaxe-regex --patch-with-raw " -__git_diff_difftool_options="--cached --staged --pickaxe-all --pickaxe-regex - --base --ours --theirs --no-index --relative --merge-base +# Options for diff/difftool +__git_diff_difftool_options="--cached --staged + --base --ours --theirs --no-index --merge-base + --ita-invisible-in-index --ita-visible-in-index $__git_diff_common_options" _git_diff () @@ -1757,6 +1930,10 @@ _git_diff () __gitcomp "$__git_color_moved_ws_opts" "" "${cur##--color-moved-ws=}" return ;; + --ws-error-highlight=*) + __gitcomp "$__git_ws_error_highlight_opts" "" "${cur##--ws-error-highlight=}" + return + ;; --*) __gitcomp "$__git_diff_difftool_options" return @@ -1987,6 +2164,16 @@ __git_log_common_options=" --min-age= --until= --before= --min-parents= --max-parents= --no-min-parents --no-max-parents + --alternate-refs --ancestry-path + --author-date-order --basic-regexp + --bisect --boundary --exclude-first-parent-only + --exclude-hidden --extended-regexp + --fixed-strings --grep-reflog + --ignore-missing --left-only --perl-regexp + --reflog --regexp-ignore-case --remove-empty + --right-only --show-linear-break + --show-notes-by-default --show-pulls + --since-as-filter --single-worktree " # Options that go well for log and gitk (not shortlog) __git_log_gitk_options=" @@ -1999,17 +2186,26 @@ __git_log_shortlog_options=" --author= --committer= --grep= --all-match --invert-grep " +# Options accepted by log and show +__git_log_show_options=" + --diff-merges --diff-merges= --no-diff-merges --dd --remerge-diff + --encoding= +" + +__git_diff_merges_opts="off none on first-parent 1 separate m combined c dense-combined cc remerge r" __git_log_pretty_formats="oneline short medium full fuller reference email raw format: tformat: mboxrd" __git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default human raw unix auto: format:" -_git_log () +# Complete porcelain (i.e. not git-rev-list) options and at least some +# option arguments accepted by git-log. Note that this same set of options +# are also accepted by some other git commands besides git-log. +__git_complete_log_opts () { - __git_has_doubledash && return - __git_find_repo_path + COMPREPLY=() local merge="" - if [ -f "$__git_repo_path/MERGE_HEAD" ]; then + if __git_pseudoref_exists MERGE_HEAD; then merge="--merge" fi case "$prev,$cur" in @@ -2047,15 +2243,24 @@ _git_log () __gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}" return ;; + --ws-error-highlight=*) + __gitcomp "$__git_ws_error_highlight_opts" "" "${cur##--ws-error-highlight=}" + return + ;; --no-walk=*) __gitcomp "sorted unsorted" "" "${cur##--no-walk=}" return ;; + --diff-merges=*) + __gitcomp "$__git_diff_merges_opts" "" "${cur##--diff-merges=}" + return + ;; --*) __gitcomp " $__git_log_common_options $__git_log_shortlog_options $__git_log_gitk_options + $__git_log_show_options --root --topo-order --date-order --reverse --follow --full-diff --abbrev-commit --no-abbrev-commit --abbrev= @@ -2070,9 +2275,10 @@ _git_log () --no-walk --no-walk= --do-walk --parents --children --expand-tabs --expand-tabs= --no-expand-tabs + --clear-decorations --decorate-refs= + --decorate-refs-exclude= $merge $__git_diff_common_options - --pickaxe-all --pickaxe-regex " return ;; @@ -2092,6 +2298,16 @@ _git_log () return ;; esac +} + +_git_log () +{ + __git_has_doubledash && return + __git_find_repo_path + + __git_complete_log_opts + [ ${#COMPREPLY[@]} -eq 0 ] || return + __git_complete_revlist } @@ -2308,13 +2524,30 @@ _git_rebase () _git_reflog () { - local subcommands="show delete expire" - local subcommand="$(__git_find_on_cmdline "$subcommands")" + local subcommands subcommand - if [ -z "$subcommand" ]; then - __gitcomp "$subcommands" - else - __git_complete_refs + __git_resolve_builtins "reflog" + + subcommands="$___git_resolved_builtins" + subcommand="$(__git_find_subcommand "$subcommands" "show")" + + case "$subcommand,$cur" in + show,--*) + __gitcomp " + $__git_log_common_options + " + return + ;; + $subcommand,--*) + __gitcomp_builtin "reflog_$subcommand" + return + ;; + esac + + __git_complete_refs + + if [ $((cword - __git_cmd_idx)) -eq 1 ]; then + __gitcompappend "$subcommands" "" "$cur" " " fi } @@ -2459,7 +2692,7 @@ _git_switch () if [ -n "$(__git_find_on_cmdline "-c -C -d --detach")" ]; then __git_complete_refs --mode="refs" - elif [ -n "$(__git_find_on_cmdline "--track")" ]; then + elif [ -n "$(__git_find_on_cmdline "-t --track")" ]; then __git_complete_refs --mode="remote-heads" else __git_complete_refs $dwim_opt --mode="heads" @@ -2497,6 +2730,33 @@ __git_compute_config_vars () __git_config_vars="$(git help --config-for-completion)" } +__git_config_vars_all= +__git_compute_config_vars_all () +{ + test -n "$__git_config_vars_all" || + __git_config_vars_all="$(git --no-pager help --config)" +} + +__git_compute_first_level_config_vars_for_section () +{ + local section="$1" + __git_compute_config_vars + local this_section="__git_first_level_config_vars_for_section_${section}" + test -n "${!this_section}" || + printf -v "__git_first_level_config_vars_for_section_${section}" %s \ + "$(echo "$__git_config_vars" | awk -F. "/^${section}\.[a-z]/ { print \$2 }")" +} + +__git_compute_second_level_config_vars_for_section () +{ + local section="$1" + __git_compute_config_vars_all + local this_section="__git_second_level_config_vars_for_section_${section}" + test -n "${!this_section}" || + printf -v "__git_second_level_config_vars_for_section_${section}" %s \ + "$(echo "$__git_config_vars_all" | awk -F. "/^${section}\./dev/null 2>&1 +# like __git_SOH=$'\001' etc but works also in shells without $'...' +eval "$(printf ' + __git_SOH="\001" __git_STX="\002" __git_ESC="\033" + __git_LF="\n" __git_CRLF="\r\n" +')" + # stores the divergence from upstream in $p # used by GIT_PS1_SHOWUPSTREAM __git_ps1_show_upstream () { local key value - local svn_remote svn_url_pattern count n - local upstream=git legacy="" verbose="" name="" + local svn_remotes="" svn_url_pattern="" count n + local upstream_type=git legacy="" verbose="" name="" + local LF="$__git_LF" - svn_remote=() # get some config options from git-config local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" while read -r key value; do case "$key" in bash.showupstream) GIT_PS1_SHOWUPSTREAM="$value" - if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then + if [ -z "${GIT_PS1_SHOWUPSTREAM}" ]; then p="" return fi ;; svn-remote.*.url) - svn_remote[$((${#svn_remote[@]} + 1))]="$value" + svn_remotes=${svn_remotes}${value}${LF} # URI\nURI\n... svn_url_pattern="$svn_url_pattern\\|$value" - upstream=svn+git # default upstream is SVN if available, else git + upstream_type=svn+git # default upstream type is SVN if available, else git ;; esac - done <<< "$output" + done <<-OUTPUT + $output + OUTPUT # parse configuration values local option - for option in ${GIT_PS1_SHOWUPSTREAM}; do + for option in ${GIT_PS1_SHOWUPSTREAM-}; do case "$option" in - git|svn) upstream="$option" ;; + git|svn) upstream_type="$option" ;; verbose) verbose=1 ;; legacy) legacy=1 ;; name) name=1 ;; esac done - # Find our upstream - case "$upstream" in - git) upstream="@{upstream}" ;; + # Find our upstream type + case "$upstream_type" in + git) upstream_type="@{upstream}" ;; svn*) - # get the upstream from the "git-svn-id: ..." in a commit message - # (git-svn uses essentially the same procedure internally) - local -a svn_upstream - svn_upstream=($(git log --first-parent -1 \ - --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null)) - if [[ 0 -ne ${#svn_upstream[@]} ]]; then - svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]} - svn_upstream=${svn_upstream%@*} - local n_stop="${#svn_remote[@]}" - for ((n=1; n <= n_stop; n++)); do - svn_upstream=${svn_upstream#${svn_remote[$n]}} - done + # successful svn-upstream resolution: + # - get the list of configured svn-remotes ($svn_remotes set above) + # - get the last commit which seems from one of our svn-remotes + # - confirm that it is from one of the svn-remotes + # - use $GIT_SVN_ID if set, else "git-svn" - if [[ -z "$svn_upstream" ]]; then + # get upstream from "git-svn-id: UPSTRM@N HASH" in a commit message + # (git-svn uses essentially the same procedure internally) + local svn_upstream="$( + git log --first-parent -1 \ + --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null + )" + + if [ -n "$svn_upstream" ]; then + # extract the URI, assuming --grep matched the last line + svn_upstream=${svn_upstream##*$LF} # last line + svn_upstream=${svn_upstream#*: } # UPSTRM@N HASH + svn_upstream=${svn_upstream%@*} # UPSTRM + + case ${LF}${svn_remotes} in + *"${LF}${svn_upstream}${LF}"*) + # grep indeed matched the last line - it's our remote # default branch name for checkouts with no layout: - upstream=${GIT_SVN_ID:-git-svn} - else - upstream=${svn_upstream#/} - fi - elif [[ "svn+git" = "$upstream" ]]; then - upstream="@{upstream}" + upstream_type=${GIT_SVN_ID:-git-svn} + ;; + *) + # the commit message includes one of our remotes, but + # it's not at the last line. is $svn_upstream junk? + upstream_type=${svn_upstream#/} + ;; + esac + elif [ "svn+git" = "$upstream_type" ]; then + upstream_type="@{upstream}" fi ;; esac # Find how many commits we are ahead/behind our upstream - if [[ -z "$legacy" ]]; then + if [ -z "$legacy" ]; then count="$(git rev-list --count --left-right \ - "$upstream"...HEAD 2>/dev/null)" + "$upstream_type"...HEAD 2>/dev/null)" else # produce equivalent output to --count for older versions of git local commits - if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)" + if commits="$(git rev-list --left-right "$upstream_type"...HEAD 2>/dev/null)" then local commit behind=0 ahead=0 for commit in $commits do case "$commit" in - "<"*) ((behind++)) ;; - *) ((ahead++)) ;; + "<"*) behind=$((behind+1)) ;; + *) ahead=$((ahead+1)) ;; esac done count="$behind $ahead" @@ -201,7 +257,7 @@ __git_ps1_show_upstream () fi # calculate the result - if [[ -z "$verbose" ]]; then + if [ -z "$verbose" ]; then case "$count" in "") # no upstream p="" ;; @@ -214,26 +270,26 @@ __git_ps1_show_upstream () *) # diverged from upstream p="<>" ;; esac - else + else # verbose, set upstream instead of p case "$count" in "") # no upstream - p="" ;; + upstream="" ;; "0 0") # equal to upstream - p=" u=" ;; + upstream="|u=" ;; "0 "*) # ahead of upstream - p=" u+${count#0 }" ;; + upstream="|u+${count#0 }" ;; *" 0") # behind upstream - p=" u-${count% 0}" ;; + upstream="|u-${count% 0}" ;; *) # diverged from upstream - p=" u+${count#* }-${count% *}" ;; + upstream="|u+${count#* }-${count% *}" ;; esac - if [[ -n "$count" && -n "$name" ]]; then + if [ -n "$count" ] && [ -n "$name" ]; then __git_ps1_upstream_name=$(git rev-parse \ - --abbrev-ref "$upstream" 2>/dev/null) - if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then - p="$p \${__git_ps1_upstream_name}" + --abbrev-ref "$upstream_type" 2>/dev/null) + if [ "$pcmode" = yes ] && [ "$ps1_expanded" = yes ]; then + upstream="$upstream \${__git_ps1_upstream_name}" else - p="$p ${__git_ps1_upstream_name}" + upstream="$upstream ${__git_ps1_upstream_name}" # not needed anymore; keep user's # environment clean unset __git_ps1_upstream_name @@ -245,48 +301,54 @@ __git_ps1_show_upstream () # Helper function that is meant to be called from __git_ps1. It # injects color codes into the appropriate gitstring variables used -# to build a gitstring. +# to build a gitstring. Colored variables are responsible for clearing +# their own color. __git_ps1_colorize_gitstring () { - if [[ -n ${ZSH_VERSION-} ]]; then + if [ -n "${ZSH_VERSION-}" ]; then local c_red='%F{red}' local c_green='%F{green}' local c_lblue='%F{blue}' local c_clear='%f' else - # Using \[ and \] around colors is necessary to prevent - # issues with command line editing/browsing/completion! - local c_red='\[\e[31m\]' - local c_green='\[\e[32m\]' - local c_lblue='\[\e[1;34m\]' - local c_clear='\[\e[0m\]' + # \001 (SOH) and \002 (STX) are 0-width substring markers + # which bash/readline identify while calculating the prompt + # on-screen width - to exclude 0-screen-width esc sequences. + local c_pre="${GIT_PS1_COLOR_PRE-$__git_SOH}${__git_ESC}[" + local c_post="m${GIT_PS1_COLOR_POST-$__git_STX}" + + local c_red="${c_pre}31${c_post}" + local c_green="${c_pre}32${c_post}" + local c_lblue="${c_pre}1;34${c_post}" + local c_clear="${c_pre}0${c_post}" fi - local bad_color=$c_red - local ok_color=$c_green + local bad_color="$c_red" + local ok_color="$c_green" local flags_color="$c_lblue" local branch_color="" - if [ $detached = no ]; then + if [ "$detached" = no ]; then branch_color="$ok_color" else branch_color="$bad_color" fi - c="$branch_color$c" + if [ -n "$c" ]; then + c="$branch_color$c$c_clear" + fi + b="$branch_color$b$c_clear" - z="$c_clear$z" - if [ "$w" = "*" ]; then - w="$bad_color$w" + if [ -n "$w" ]; then + w="$bad_color$w$c_clear" fi if [ -n "$i" ]; then - i="$ok_color$i" + i="$ok_color$i$c_clear" fi if [ -n "$s" ]; then - s="$flags_color$s" + s="$flags_color$s$c_clear" fi if [ -n "$u" ]; then - u="$bad_color$u" + u="$bad_color$u$c_clear" fi - r="$c_clear$r" } # Helper function to read the first line of a file into a variable. @@ -294,7 +356,7 @@ __git_ps1_colorize_gitstring () # variable, in that order. __git_eread () { - test -r "$1" && IFS=$'\r\n' read "$2" <"$1" + test -r "$1" && IFS=$__git_CRLF read -r "$2" <"$1" } # see if a cherry-pick or revert is in progress, if the user has committed a @@ -342,7 +404,7 @@ __git_sequencer_status () __git_ps1 () { # preserve exit status - local exit=$? + local exit="$?" local pcmode=no local detached=no local ps1pc_start='\u@\h:\w ' @@ -361,7 +423,7 @@ __git_ps1 () ;; 0|1) printf_format="${1:-$printf_format}" ;; - *) return $exit + *) return "$exit" ;; esac @@ -399,37 +461,40 @@ __git_ps1 () # incorrect.) # local ps1_expanded=yes - [ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no + [ -z "${ZSH_VERSION-}" ] || eval '[[ -o PROMPT_SUBST ]]' || ps1_expanded=no [ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no local repo_info rev_parse_exit_code repo_info="$(git rev-parse --git-dir --is-inside-git-dir \ - --is-bare-repository --is-inside-work-tree \ + --is-bare-repository --is-inside-work-tree --show-ref-format \ --short HEAD 2>/dev/null)" rev_parse_exit_code="$?" if [ -z "$repo_info" ]; then - return $exit + return "$exit" fi + local LF="$__git_LF" local short_sha="" if [ "$rev_parse_exit_code" = "0" ]; then - short_sha="${repo_info##*$'\n'}" - repo_info="${repo_info%$'\n'*}" + short_sha="${repo_info##*$LF}" + repo_info="${repo_info%$LF*}" fi - local inside_worktree="${repo_info##*$'\n'}" - repo_info="${repo_info%$'\n'*}" - local bare_repo="${repo_info##*$'\n'}" - repo_info="${repo_info%$'\n'*}" - local inside_gitdir="${repo_info##*$'\n'}" - local g="${repo_info%$'\n'*}" + local ref_format="${repo_info##*$LF}" + repo_info="${repo_info%$LF*}" + local inside_worktree="${repo_info##*$LF}" + repo_info="${repo_info%$LF*}" + local bare_repo="${repo_info##*$LF}" + repo_info="${repo_info%$LF*}" + local inside_gitdir="${repo_info##*$LF}" + local g="${repo_info%$LF*}" if [ "true" = "$inside_worktree" ] && [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] && [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] && git check-ignore -q . then - return $exit + return "$exit" fi local sparse="" @@ -475,12 +540,27 @@ __git_ps1 () b="$(git symbolic-ref HEAD 2>/dev/null)" else local head="" - if ! __git_eread "$g/HEAD" head; then - return $exit - fi - # is it a symbolic ref? - b="${head#ref: }" - if [ "$head" = "$b" ]; then + + case "$ref_format" in + files) + if ! __git_eread "$g/HEAD" head; then + return "$exit" + fi + + case $head in + "ref: "*) + head="${head#ref: }" + ;; + *) + head="" + esac + ;; + *) + head="$(git symbolic-ref HEAD 2>/dev/null)" + ;; + esac + + if test -z "$head"; then detached=yes b="$( case "${GIT_PS1_DESCRIBE_STYLE-}" in @@ -498,6 +578,8 @@ __git_ps1 () b="$short_sha..." b="($b)" + else + b="$head" fi fi fi @@ -506,13 +588,20 @@ __git_ps1 () r="$r $step/$total" fi + local conflict="" # state indicator for unresolved conflicts + if [ "${GIT_PS1_SHOWCONFLICTSTATE-}" = "yes" ] && + [ "$(git ls-files --unmerged 2>/dev/null)" ]; then + conflict="|CONFLICT" + fi + local w="" local i="" local s="" local u="" local h="" local c="" - local p="" + local p="" # short version of upstream state indicator + local upstream="" # verbose version of upstream state indicator if [ "true" = "$inside_gitdir" ]; then if [ "true" = "$bare_repo" ]; then @@ -553,25 +642,22 @@ __git_ps1 () fi fi - local z="${GIT_PS1_STATESEPARATOR-" "}" - - # NO color option unless in PROMPT_COMMAND mode or it's Zsh - if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then - if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then - __git_ps1_colorize_gitstring - fi - fi + local z="${GIT_PS1_STATESEPARATOR- }" b=${b##refs/heads/} - if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then + if [ "$pcmode" = yes ] && [ "$ps1_expanded" = yes ]; then __git_ps1_branch_name=$b b="\${__git_ps1_branch_name}" fi - local f="$h$w$i$s$u" - local gitstring="$c$b${f:+$z$f}${sparse}$r$p" + if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then + __git_ps1_colorize_gitstring + fi - if [ $pcmode = yes ]; then + local f="$h$w$i$s$u$p" + local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}${conflict}" + + if [ "$pcmode" = yes ]; then if [ "${__git_printf_supports_v-}" != yes ]; then gitstring=$(printf -- "$printf_format" "$gitstring") else @@ -582,5 +668,5 @@ __git_ps1 () printf -- "$printf_format" "$gitstring" fi - return $exit + return "$exit" }