From f61084109fdb7f8161b3cbf81e70210ec2d0608d Mon Sep 17 00:00:00 2001 From: Haileyesus Date: Mon, 9 Mar 2026 19:55:30 +0300 Subject: [PATCH] docs: add documentation for lint and commit setup --- .../lint-and-commit-setup-flow-diagram.png | Bin 0 -> 57572 bytes .../lint-and-commit-setup.md | 43 ++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 docs/lint-and-commit-setup/lint-and-commit-setup-flow-diagram.png create mode 100644 docs/lint-and-commit-setup/lint-and-commit-setup.md diff --git a/docs/lint-and-commit-setup/lint-and-commit-setup-flow-diagram.png b/docs/lint-and-commit-setup/lint-and-commit-setup-flow-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..beaa43361b33bb6db74912a29e2f4c68b855657a GIT binary patch literal 57572 zcma%jcRZJE*#1|tw}dE?QYpJaGC~n0NeJ0QWM^b=QbsaMQc02`Wn?5PWkf?nvO*C; zMn&&&^}N5ofA8nh^Hlnd`@Zh;I?v-gj^n&ybagaX82K0}6bj2BO?5pAWz|Cpg=(6f z7C(tT7P$$(QF-WTs8SxZt^bO@tUkT}$bJf?D4yw$B@O=0;Hr7jgF<1gBmYsoaJg$k zq4fJ6Qs1xdV>a>0+w}N{zsl2wv@%ZYR|aa1X>8cG$=R**QpK74b3t4S_ezWlD&n4M z6!>+%7j@>^Q6?7ZC(UI$#X)bgyt3#%B~i}2pUR`|_ma;rRryp>LU?blVVmNDX^3%w zK^VI#y-+y20J}TSe}B4}zpaw<-_QDPOly&UQ}qd}-9dh*A7Ej8NPZUzm;L{}NKeQ4 z)6)o#(YF2Bx~|%I(}fuFAy<;<*aR#ld&|qbzVnr;(+k~BBcG%xe_1QXXK`BSiq@8Y zKjr=RQz|QK>mOqs!c8{P&R>hSY}q0tE1O!8#;&R{51#Rhw{LG= zujJ1w>)hM^^~KVb)igBOL4Q}q-sZAZ|6TFxEpxl2|01ukzW&OgZ6e_b7lLsuIXk7K zINshl5_a_}|H|@$x%0`>cpbI!^4yxv0+T2ACk z?cT>i+}+(>hnqNhpPpkH7#J`rci*C_rdHnSb95*7Et67b`|d|uD(-8<3&?qnu^Zes z3PCJ5{A{^%=g#2bkD;;d;;nYCub&!|WZt@U>qeJKH#c(+1l318bG-|X9z9~`LRjXtC!$S^sb_&J*&25I&tEfs3g?ub^i9d36 zPfyZ_t!d`)d_weik^V-L*~os*8HWMo{J9epjleLKU^ETx94vM%fb0&Qng;?*}j zzr00T(zRd3E8V!@ppg;p1M_FB9v&W^U*FK|*|W#Ebf^N~e>h#5hD~5!O;?e%luO?} zUS3|;s}9HV-_z66*F1c-a$$Pf_1(P_OeQ5xmVe_7ADBMJ3qvXejJ>_R+Z4xGBUD4W zx{TD-)%&p;clGl)jUU^Gyh`5TaTPni{3Z$VL)zMPb6?-OegC+7adFY2^Zv;R=RpZE z8JRUqJmU4AgZ{RPeHj`a4oBqH*40s;8}B^u{@w{o2M31iLaXn084v=~19d{lT19R{ z2YvkfJg#zW!<+LBA2zNm|E8iK5kQ#PNF zB_px&oe#~~G&D2{z8pBVjVnPbM>kJja@VdF*;s0%F8zj&d>nd_H*ekI;NYO5AjoaY zX$_OLA`BmzS$=qMsw{B%eD#leF)=Ydvm=)}rH^b-@T&j%HuuNk4{P!`@jU7hgw)#0 z+^mgEOj6IdCcm`7rmt_yROtSo%@Yw7RcsxSnVDH`yV2$T^zVf!xA9J~iJnrnp%?K{ zQBidKrdv1}`1Uw8Ri*3vnjWAYY0HeIqNcU@Tph3!x`Wd6WyXpvtf{rNAzkKld-3U` zyUx6$Ka#O)|MIV&Qh|Sb!XqNwuC7tlEIRfY(KC$YTKt-u)qdv)|9$gk0`v3py&_o$ z^7IGmW7d?N8|Q9}+YsA$iJ#h6(WJtAsu6$eF1M9+>I!~vs^U@UdnaoPi{R^ueyZZB zL)g=l;FHC6mdIjGzh5U`z8uQJzo(|Fix*dZ`t&Ky!-wl7p8W|$2vSpeKYhY8YE-Qg zQY$bR!t#><7B{bErrb3t75De|Z@;C%=5_wjo0|stMV586PF;l|r#f%!r|$arv9`W` zb$NNY&+@NxAyn~}wzd%wOgyzcJy!$#ZM$bPu3nApDRmjb4bU?%?AO=l>h0~daCT;u zkdW~I{k>Fj_wFx!%x9kPrAnALBJ3Yuk55isYh3Dl>DSNky7qSVCuiP=CMB)GUCeeA z^&+N>imVP~D=s@bI~!GaiJf_WuR)AMwMiq{%$reYt&y=YpWh7wRFGK31Kg>q+1os8 ze@{#}kw=ZqD(5x9Ya_kx-I?9UoUdsOhkw#eBAXT!6-}INu#&=hMk#ntZbVkvVQ|0Z z@5+Mmy8;s)iqh8~uWY27zPL|XZJe6RC7UU3gM#Z&Bg;k?5n4Mw$%DGO>~R8$#>15* z$motA9yIhn59{t{q)3=o*H`+^vh(uNQ+(#eIDS9%e{lc)PW6Ka&xrZWPpn%-P3^Wc zWBcd#)UycM540?N7V{I`Wj;SP(Xy^Lny_e{(?9R)n~g`aIQv>T*8kM5oI7`{zP`!f zm3QBa5PhLkl90f@nwEC(gLzN`)_vw@ldy!nz&@XZs!LckY}qi}kVQ|)*|dGW(v9(g z@wo88{D;-Q>|Ku_0*)##*VBH`$=o~8lqgK<foCk?Fa$6l(e*Hd5;l`<`l6B4;!xr?aiE;IePeYJ155yn>bCu zTYP@l)4X&Q-tBOTt7^sb4N|UzL zifN3{%F)|tUcLT!uFe4;A343_$BP1&e_6FI@ULAPu};RW@L@rI{*Hqec|&|>M=TLn zT~&Uv2;u2wiD&)2Wl1^v7y60?YR+b>eVrKYd z*CSgdgmkM?^P1|rgw$_z@???B2Fbd$*OdZ{C(6~+mk!77*s+7@*s)`P z4|xV`62e=zYV1e@;u=68s`TlG1g$L54K-e(ri4dE4kF__nH=1&_(b^N#Tpbu*U4V_ zeF49?fYgGK(>4hUcQ2j${4D5i_rPu?rRyy3baZq`t;7PyTEB=J02CuRvO3_mq~E*~ z^E&C(0s;be^>QwB`d86NNlRP(Rc<-idinC@LW}3CkSvep7wC&N%zy8RUC(n353(Va zXXxV-#{|vIX}cY{u@&QUv{S8+hRB~U2ovUTb6^e>=32#JXu8CP1rVFO8)UJpJ3 z{>**v;i>TYF6vgsjB9wAv^AviZ*qKmya9d6OB+p1P0Gwj+xu%W0HhaU$@+f%RN-Cb z{)LfJgBq2RlF}>EUn+Rxv-d8751$#7HRjf0o?qAy--;fYLGFiIDwi;kwhZ~WxKhOi}|pllR-UP%iI z|D2kd+LQCV?~!D#$=`Z^T*11L`Olx(*AtGLxfqWs&>uZ|R8B#G$8Q@YReh7C;4^*E1A2O#sI-lfRxZ6|QU(u9 zW4yk9r1H%jtn&Jv(HS7Q%TFGq2e z)9v=IMKT;gKG2db)4+EjF(oB3Y3tEPio@L8+|d^6hftZ1~eYF=h!03aSLQMTxTSxJiSUjZxp^Wqlo6PU7$xos6KBKfbtU zWjte}YJd6j3zIA%DimZE&v9#0Gx zmnosYBUuZH^wI0BN=nr=GNpi*q^g7zO>`|-gBbA=D){cy|}yA{GR)I zyddd>Q}-hpVA+GM8M}{Foj>>ZY!5duJ=M&0$Em)m-Ofkog&H(~<6o0}+23!maq33y z>-4%eO-=O4q9<0(sD{~XRO|CJ>J65+sG)d{cOG#R%^%chwQ+DbIUGZi*7q8{$RM_y z@osHx?Gm~l$hk|6w(f$t0E);Ly16?G-akQzSyo+_4Rc{ zw?B(N{DlkvSa7|7YNY326;!(TJdAGCL=cUa$kFQ;kx17r`Y;IHmP2nbvkqyZ>(rwx z?Tze(ijfb^pS5|{=%R{~ACHTfl(fj+VfU?YbbNO=gh#@ROCfxF@+*I;UBHp4;-^%x zC-_;{sb=er7r94ml~k<12%MjdCv2>7k7@O)5^t%UI}h*BP0z@9^!(TI?*$rKn_-#{ z%76c?$vv7yJL7dAbyy`Y6evx#?$fAMB;&@1qg<4yUf(ZZGdnB`9yxNPTWBqcxVpc8 zrGbkpnm~oluJ-oAnxb1swnkOwccaG|7#WFV-LRKJaqg=;IehII#p3MQOF+0ofOB0H z-V*#)b#--8r`y&Oz(XF#Z{@`1FHU7%=gvh`R46D|KQFR=QF#96nQKY`d<&DG>aNLq z%tRQg(r;(@x7(7n8U)sJty>oZty+OuwP z_3+r?`D)w9Qe;$=V}uOaKN9#&etpmW%rKR>e2!~x*CibcinN^1^hVO4J#qZ-sN$XC zzI}`vjCDr4q->hlz1mJ9H<_Z*Ut%^eFmTenGIGRwcwiu8e;Dlmu+?da zzP`S@1_gY8ixDD6GHxJB(iHvnDETkmI2V+msMp)Ky|sU~Rrd1@)HmaEk-(r83QGI- z?K9sdrisGqH>WTYH}|>RV=H(AT~zvAE`6r?RU?b0$B!T9UANBR{ci6aY$${%tsm~m zn3|fl7h2Z&TYduG1~XwtZF=U6XyEVfvYy}GF%bNZ$6SQsxbOU2bkz|DmUaE2-&(#I*6;?)C`O(19;hw|_Q%%4Fob4%*^Iw$Q+x+d#5zjC(QBaf|Lu=l%4l60kBgN1jRM@aB{I=O;)39DH2GdF)1&?KmF_Px0$E#s zpG5|$tgK`VI4gSMUj5{^px^UieboW^yIG&21WsJbYw?>zQJm1_0D#(g^3iH)TIOJ* zospTD8-7P@-L_5Bas4c|9XlT%BP!lSL1lrhI@h+jvV~@63wR};Pd&E_C;dj+ zqoU#lt0G<$_hugPL|NzeEiKF;At6moO*NntT<0fF0;NU;2q^l^*I!&G!^r$f1U1rc zK^#qMG=RSY3sYf9$w55O_IoFG>>1`(-^O(lOX>q?4xHP5|D;U8s4Wtjfa3WZ=xj(z z@8R#p%^uF!#elC3d-za-a>M0wwLQ>rwq+rKW$YU^Tmn=>#6ExVB5L`szqq5LBVwI? zQzCsVx0uyyR|9sy0XjOmeSv?lebzO-e7PTs)Ge`FHJcrMYWR~UyUA+J7Xs*$5Y9I! zPzCDi`fwbVXV;pcdFasd;?u85@q29Fu?p{sjEp257TC$e#Ke#th7U;BGyU^t#ItA0 zD@&t-1dYhK_EQLvQew{>*lUxq^0@K{Y^|tqE6Jj{j*wIORE-8!WB5%|E>F4^-YNuA0IpL z%Gh1(Tqfur4@Om2H^Ja{EwjKrUgU*l*#{Zys*Gv?FO1@7FUY3Hj%`QZKR5Y_AAb~o zblT965VW5I7B+nAEQrN5e&O#^(K=XQAS^1%`1j8&o48qJGzzlAd!W;dT@Im0TG?p9 zT;1J8C4)ytMruEQ76kv?BHL;lM$6Kktw#6Q@dGRRwXleY10f6hv0bvkc@Gr4%{^+3 z3m)q#5=Q=-etB9}nC9(7$8H&!-?wE_U)o4}-FI<2AHg6rZ0-5XF#=b9!yvy~-V5x_ zcCKV9YHDgQJar#G{z?knF=H2JF&Va^5uWfyWgwZoRvTTwgy+%Z9fobPr+C1tFN1nz zznKK4fY2a>toXaU5FH)eeos3`uhMUUwdv|a7C7$)^7flagF{0_r(X+%M@0!EK0qF{ z@Adcq^!?-4Pe;woobyiRVB6;e!C^-0aMG_fJ}$Ymv}F16@)ooc_25ScLstLdMO|y_ zCB;?{itNi8#VqWqo}E>G3zA^>@WCG1_fcG|n-YY28_0)o{RBtvX@IBZIx~Fe@HM$( z<6M;&LF#6sZ~E^gy#HQuT`Q*+{Z*k|D_;pu=gXH2&;G6`pm3JAG6;o_NfGs+PZO~L z;)tD{Js4f~jZ+m~o?arV^m!J9@+W#j-wmn%tIF_yk|O$mfTCk!_N%L}Cfb7f>yC9L z^g@-1$;lCfus|;GnHgq4Dgg((3d>JI5)h;JDwK{685Aa=$^=kLNHTxs-X6u}hwA06 zrqD;IrlqCTG&eIfr%FVjh%ekBOGVGZzcGBe7I_>+nRfH$&4tg`Qb4kUY6uMtb)D#v zD(E4ft4uz3?@^JY0gxRe0W$WS{NmJMtVKL@l<=|ppl7cs2UT~eQC&_-a$A@@wOK^uziU|iFOKv? zlfh}S_y+_qDQd=QW5-ELb0Rg2rr?2%5$MRC$psbz`$kwy?2?J7o~h~j2WC|l-o4Xz zj$v1g79d(uhrE0F`iEv!wO^W3V?T|*(iKgn$IT%Hmi@aMqROa`*4NkfqfjF?_39Oo zzYI3S?wU`=da(bymSdvH*c`ziJWBPQT6WT)0U98eF}?oZKU+3Fy_1{kp}mDuP%s|% znc7&*sTzHq?CXwoggnHvZo95%GFbG$R5Y0pRBoB)S56Wb;V(!8dN!h#O}`KfQV~z} z(B66a^l4_kUG%K1ti5_lAn&GUXVnZ0xc|LA_uuPP(Y_M01SsEKdncY2!Ci#oL6cJc z#UBI{S$r^WWFhE}9>aqByMZJo3dFw!Ww~#(^B@QlDYrp&xxIUD0%jvA_u4H1GYz02 zYyvg#?*_^JH}NE=q|ln1n>&53u4)=s1WO}rQ4NM+!1M%&W^ z2$N7O>~QSMmX><(b|fw#oVhmN2L*54UlU^AS1Au@K&feKV+Hu>y+d;WtvO0<>pm5{ znLL%@*rv9&NK`k2hi0dSw_6~;5-}uESmO-Kn!=)@{YfH69)IMHO!w^v-POy9*!#EQ z+r0_Rjxq9h?Z6`6JCT1A0Li$SX$?PrECiXg>#mS= zp@gtXaL+Nw|M6$Z1LOxI+Mok%qsD;5NA8+DgW=S zKj*)jOmr1d<3a3@F8kQsoelob{?pUl;kBX4_a-JL+8^0!r=_R6Y13SYi;Kh^bFNwQ zZ)5E{Hq9NvuKG$vRdp4B3yrd}@?CvV=X6_p`)DH94L2nMEA>hPF+6|&el2p?mlVd^ zdU@>J+>uCmS4}pBv)8U6Tl~u=(msN4289}XjgyH2$Qi@1Mx>^;Hq_+Ri;fNs#q)F9 zyrvw1{J{&cuUq#L95ej@6}bcHtw}Gz=SKe=|G*=^g?r{s10Og9K&38+q6=17Isys9 z=-5W^rw~E!0seG_{1BMUyGKdGl(moXb7x zu>j$;%)G(i8B^@9IqoM=`NM-t*=kYl+BACk?=``2k;d;Ird5W4`Oq%3P!n?4K7?7`ED zX65*QI2}S063heB@=#RLO?&pt-?BE1P!+;cCln`cG2LXv21`CNG6HR?9)-I6iz;~R z`o=~=h4?H?Za|DNpvQ2QL5(oyC0XNil2#7Mb16GdhN8iar#1X1w-BHS@q@=v>BD6N zw4{uTn!CF+T7m{K9xY^fATbHE${Kt}Vp2Y}e2+^j&=-}B#<{jND$qWnOQjsnB&|Hjh@R}T0rDJ`uEN{Vbiw72U) zM+2k{?%4_rU5A8<(n&P2I@jbv5Lo*~lGg4h>x94vph(p1dMl|?(|gh~G6Un|u^@PZ zIz5emgwdMd7e1Uc831)ige;^jK)*N+sDAwZ@g7|H_J6tI=;efjVC|<~hxD|!CwxCpQdHEz_qRFRN=8Oze!?NNGHf6% z*vZ*><-lkDaP~k_znAWYhp&cK#09jg;qE@8adhDoiqCTZd8xA>cVX?^n!o527^sOR zZvr$X-(+vUt(0L&JtMoMko|s)iHxLVFm@xq9R#VaZh^F{mIiz|ODzot{c6O&acM`T z*z8-Np?o`##B0{9nf%0|>d8#jG#h%2+dwT1A$ZX$LuVE1ytt}K;rlqKw}GLdTWg-5 zNK(zNfmrG~-M@dmf*142lP7ychMC&e|EgiB%xG4=bGK*hXfD>a$I;2!It(2(iWm(T zhPxm(cJAESm2lR{>Dodnz0en;gKZXsKj6lVjZQr!ENBDKw{G`x*+J3I)1v`d^8#Oc zPP|MSy9<_yX}Dx2ddrh^n6w|e`dv9+88cjUI;vHBT3+z`MK0 zsPVPE%4+mWt4S6!M&WZ?oVJ|ktKtW}3t-kO62TdxPD~hfZP#M zIXPYeCD4i!iX>0}RTYC!*6kZ+rq1!=Gogi=n?v*Rw)3Ca9VE?z9pkm`?QFihK-$+0 zof8~)vRT8Y$k!&o34sqFED6ycOvOj{Y`>zrO&z4Pl<$lUC~=m?#>NTSw0LY#KsWq? zB?)#H_BCt5U~_qzjAOK0mR^~Lwm${dR4GwCPRarXg#_tSs{ryO^ey5kDTKh)&94S zMGFC+O`m!)XvD35j*cQBDe3qG^&?8nn>U<R%Dr+WysWG&UgyIW?$~Y$Rj?wXdD6xyityy*$jud= z!$&>5y!IfV5;8L{L0)aLd1Q4o#DE-FkcFy(oC7&}MIm&)RCfzw z?J90^aS1Tio;5UW8L|xgYuZ~=w{yq+JKcBg{z|>Gq&yVpYx%7=RxeNezh(=?FM4s& z2i@F8DXGLN^1Hlzy0_v&?_Wd9)X+$E$ux;w;JUznhd^Fy6X=hr9NozoLy~u*X8npd zcdQV1?2`wv>YL_)o(B6)BqF@rJvO z8Tk46=f*#-Jp7af zXnO`D^CT|)mSbX!&eEP$)O+*#>!TY>%7ZHp2Q((7UC%?|3qq)6` zcsyd(Y;{GGiJlF;lVgCj!~>9f1ElDIPP4GF(LW>jCY=3ypULFU%i`9ER-4nOi|hEx zcqS#I=H@&L#t|P|_^6N4&zwI4iv%>Bj6G*B{9T?3g7nkB=eG?~RmX8OZP1>;wl%;O z1Zg3fGt)*TDKU}5xWp+2f=@PBpLac4^zp8BXDzc!3u8^iH4yv!PADvi85#H94_!@3 zX{7DL-XfU{oTha8#ow-)G{W5f;4o?TtQ#*{zL*YTMI9eY$EEdF2k?VfY5=%QOiy1r zR7cGV{-zPM^pEeQpKD*e`j!+wC=xzx==Q?hLjnX3cy0}32frFCe6^nCVs7U0OzYfbnYx4E3mz30!%}w$+YC7zs$b)u zrCCcCm)B?YHj#y(?(XjPfv*G2Y%CPA;;`S!KbzdJQDI+Vd!fP{Pr_8H(vue{+J$616fT+Brqar)EKu% zopg(7uzGj@W<0C;pMzmWEt;sokHeC5cr7 z5etGv@o9>0E3B9({)d5NVoC}M3M@~brZX|=;Z%erjVAr@o!xdj6cj3qwyv`9;sHa1 zPJ$a`2R#c5Sw6(plQzoF@_YJup+JH+gZ{1{w}cq&6rcSWjdmoE^o;?(_XL8@R`s(0 z>TS=_=7Fe9i)_?8qw!VUrxmn+fk`Q$wEnN-aMT;ie5hvbq5&{ zV3A91@`A$)i|Z!GlAMArjx2M}$tp$qUTf*j)ba>$b#<*N{TxXAZ#T4(Mc=)JQ~9<& zn6p6;CW~KE&AW=qP0_ZzfDY0B{d=oez&jq6hp==lj%Ee9jYR8RdaR= zlr9T-^!To}tATKU0Xkx4{yofnQ1JlEHbjF!xvdW%;=ede1)9GO%T;De3C5;{*i#6< z6z4*9VB&NJ3aiZNwtf)nAX@+2ckrhd65PreqYIs$d>-2TVCdNq2I$HD_0&+n)1dJa zF3*;ta*1!ZBxG9vpd_$o<&hsq>96$RfTTkRscnxr^%~I~6GEI>5H6Lyo;RqAz*$|n z3bYF3w+6U#Bqg}=tUjO(@fEF#f42Q_dH9FNk9RG?aSCq^aZUlrkdKN4+H8l;$Gl#S zUCj8g#nzEK?PLWjfggyeca6wl6_mbGnDS0l?15+%1^U86J3{pBbOvZsu*lZv?nw5D zFi^Bbm4oJj4PRSZy9#A+g6d?3GD7Cnu6=p4aqX{LTGamo6dO2@M&DNlyw1g={jOT7kts@E@VcW35 zU_8pzkH5Uag{}`~8#GK2=uEJ?W@)yUo3`m>ZBEt_N_yGVBL!@-Uj?_lk=V*=6}bl!lj66hq~1D69d~p)&0rx;lX*#PHrk)dRg!z* ziMVzKou7lipN5^yuU^%n2}!(uo%KZD*Tr4ATi@<8_da-#7I2UQNb%xD<~H+RkJLAD zz@*at#L*BSgbFN96c8$q$-Ww}A<=+EN6O^`5z($MO&;fjH>kB>VmH`FrB;bo_7-^fL*3(g7iC(A;lI+-81M1c8Sq zatf8Z%zsH5529AA2v2XX=U6ZvLS0i+v`MGlnM2baVfom^WDtP#fiL0(U*P$4U{hl8 zpUX{g-Qh9?)5Na2*Z|KBh};8+Z_xHYlHlZt$|&~bxTr(II#Jy>{b!tigh`OYtgc#7hi&D`00)||zkjr|l69rQ~JcjB;Vfi5ANbW%Y zdu^XDC)BNa(vJ=gueP?f=Bv}d17W{;+Ue}sj>itiC#}Tr#xk&=8f@+>_oW^JLV(b& z3#DOF`W1!yCFCS%lYy%))gkJeva>1SV`)erM6yGi0Mwk8zz1Xnw4d~~WWD!xU$oBb z!W-j8(+~F@R+g__TR*9`<8or+v1;mL>EkVVIMbCRz^YY6a&%&n56 zl?)Oko)EvF`keUnR?u33e%n3L7x7? z9c&0LQebZ%N`h|MBvyRE<5kyD)`w`Z_V3@n_~V5jQ|7N=%QI&#Knb;gD-KEAJw}IW zeha!t(j)!rD7~!pyCQn#txLli4@OtGz3GkSIvrMf%HZwaz>s9U4HXp%e-on>EYHw_h&EaH__2+ep&J1Nz#Ig_#l;;YSMV$- z9-%VNpQDunf1QQe=HiP>RX1!~rlb`W-|C%|Mw-;!_U>0_OUr7~l$^;p=O(2ysk@%^ zy@y1gP+Q4&&jK$Y#SX#G1vmGSeJ)!^5Uih|mq7liV55ilIl?qU z=wfoQm^$f|o`OSn05r5wiPO5$+c^hfxv@JnvOTH;^?Z&%b_AVU2)ETHZ)K2o0~J%% zb?8}Q-``4wijNN*eV?hB<&DCX@=q!>aQ?LvwO+8WlN?pv*UdFT@Z-w=J9|ssPd*09{ChC-N1A z1ZP3-6Ua)2c)(nCeId5=GFPFD-HvzOSKlPO?;e*vW`rzOp{O|@$PQbe9|mkyh(ypf zLy@Q*Kc(pJL-$A45E7k$l7BQ(#zr~0v`?M#d-qy3UR*~UKMQv%vkmgy@Mxg4aLIcT zKdXY*#J0ynx9bN^0M3KUCixwNLYZv}G9oNBk?=lq$zR_BjsufF4FF#RWP6pv<%@8o z1_KFaWnFjoy12MFDeu z7@B`YsT&S;@c!9A90wsJt4)b%H{S zp$JW^=7AUpK9CSgoVr7?Tgsk3wSs|t?0r5@>2?YDmaQ5ttOa{I3PiQEQsMbE6i8Q9 zx2f+JXVeGKR`*TIIWfT%F@HV%>eafQ9)9%QJ9m{;pa02-R<{;%2^9qdE%6TkBod>+ z{FMjcSJbVnHsQI4!yQOXfjc!E?JDTrxSq$Vhcq>7ygvs-fea(;E*jA15bCfM8_sHJ z=0OZKdU9qhI(!NRLvHKQcGR4`Ot?YT5273tcs=(Dn6ZZ+7*j_^ILGf_czRwv!fFh|NFcfU_EDMI`h!nrII}C2< z}9zhfa6*JjINH$V1!#N)ZQ;*6P_;=a+nw;Az7~+gdoj2_Do@_a5AcQP< z%luhj^rcG&u=*Fy&2y@1HG`s&^qw@OsKg5>f`ImNUQ?BD?b=0bOS1ha{gab%fc zu+@9-g!`v}gW7rODHmWcq4eG0cfw@VC1ji&*aRVblEDnWKZ$VsgM=s3Bf!C%*cx|u z`J50xWMjXM6VineTB?=_?GycUwZyGd@ed{Rq%= z9eM`B6JnPUvudx%c^9api}2HnPRwpK?*rzL@|rLL3uN&;l!iQxQig|8){C5+oD>Q? z618Xn%3JBTpP*x1UxTWSDWw=ZaiX#HsGmkB0or2-+k^C1h+AR^LQrry8r-vr`taeQ zxitoh$S@$D0`7@S`M_yWM8`^1gH@2UeZ{q!j*gmwZ665|uw7hRPaL9!B*dif@Nf&< z2bn7@jp_SXWKBn`+j#R@xnhdYmoGpvxHLNS02p4&m-VQF4TBqc9PLcxvt?9HuqLls zky^mo%OOvLd5rOXApxESjVIiyCw6j=jxX-iEUG19CBiET4)R;=1FOJX5;r=6^2Tm4 zJ=CD5-cxbI!#0%Q(o$IjjNzH%TRHUBgEXC5aQij))jd;bN_%PSYXN#(x8L(;Cq6%W)=rd0DCKEV){j*k(AkiDg)4-Kqa{mO zkYCpMcE8rEOt6r|u1F!N4bHvhvo{S<3#5FeEdcKK6FM^2 z_{g>yp4><@pB-Et>bcnYJb+e<%L|{I&x%hynuh<3Omu)egu^8q#!8pf) zst^vht84T5+@@(h0f9Kg1y8rOEie--{ls2pJY;$rl^E}(P{@R;C5CExFC<6|fy)br zfQ&wmXdKQbC5Y$F})Hm8}&rHv{r&uk`iU=(6fufIDX3uty03`}8T(L`3~G89>EO{O4x5{gzc= zAA*|-E%K(<6!oT5vT1yLeT7hUk&6dYejW@N*p0uy8!;r_sRwT(d1#vw?ZrNqx(F(? zSil@?yj#_ixLBwt1QnImI|5;=^Z~kc*a9qqt#2ScBC)T#?&QK%^KzF5YsaC(Q#*>I zR0P-Znqepf(uucJK1krjfha*;JZ@(O475=ZvnKK7^-2rv4Uw+_GiC6QwnS#&2^uDN zNA~8TEJAQ6b0MX-li<$Bv??pY3Uqcn?sO}0VWPUyGctFb8> zP`o{B&vo@wh6vSpuDHYfLlpo(n0v2*y94%2a+^`>Qd_U>HU01jL^7p4@Ay`jfimBq zB~!6>xmLYhveMYds0KKKj7S{arweS|lCk@rvkbwEOGP}V{4^u?sn>e@SY}X&a8c}X8J-U+ge;^8XgBUs{b4cz(uPF)>KiW zr9bNb^SxnkY1*slYDQA3a&zk{2wTN-tOu}qpNTvLRB^}Y^+V1Xj97>RBhjpY7 zZ7;=B3q_E^<>M}(>X~@y5=%nq*>>3+0kd?s@bGCWk9UPi;fCd=X8nJf!^fmYZ1$k1 z#$!9AqjN_hD%>zlBC^FyK0xo@z*@dTS-2kq=KwkT9XR@+?Tm&`)X4=X(YU3?x!8vngS|`DWIx7hPY~#*&)9od2;;v!T}0 zXY7}s;RiuMA=6z>H_{L@xFP;u+-7;Bxb5!+!nd6y2Tlm8Iprw{2goV!%afb?K4ype z^{;m_I=5VvKOP^?EBy1F%Uov9_Q6O1@DBTPmdU0q31D!MxOpIZnY=mV&+yRSthAcTIQJa2;E1kx zp5F3fWW`1G;;j)=q}Rj3bV4F2i`8U+`fUlT2l2imG2_d|>6|-CzQ66*yKE~tbuysW zQTN_JawN-@Oi1Nb3c~MF?;OP{oHx@BGZlXUB*?LTeT!J~g|RVv(n0+T`!>=Z08hdV zQ?@0uK6U!u9U09)4%;f7aT&Xcg9AT>$ASwUd0=dmc%>@R{ApVk&iFoa!L({T$Wn`? znJ?f622zwy`YOjif*!sa#|>bXufCzdt@!{sTU zx$F4&R`CfL7wej%ep4;_% z6o>-`koV0lN6p`)PWbMYmDK>l4T^-p#l^*QqKgA#Uoyb6%6Ui4w?Tp?250q6`vI4U-;9@^pA6~4 z6siRefu<%soFYE}y`H030miA3mz^6oaGoU=G!PG%qP-LlkDh^;SJ4Lp6cagy%tiz2 zW&;%GeDqt9M-P&akboi0o3j-I>-_gxjB5wljqQbL5AdnrZ1%|Bvo<#25R`ACl)}Im zSk(A6wR7*OV^WF_el1puy+6uC^1-LK2YmmoD8jV(q_O79@bE?$)&PW!&nl;i#}^L? zx0=0@c;c=AVgvqna#{txc;>z6K8$Gk9Tz)H>G$xlg$$sE zn)mkY8gMcPp>&iVfxrKMeI67QoGgIp+z6aG!j1MN64EoV_YpT4T1H;wzT}RtC>~ii+^YhLjY#tg%3yF@7 z4j8GBg{{5cf7>f!Gk(5nMK6oPJOdiCtE(h}Ee1~xI*N9_*X+mrpB&10Cq&uW8^RhKd7iwppmTAg0hqX$j`_qhL@Mu z(w-}(fH9>1Bh%U#$*aTE29846k8wjP3P{NYw7vv+!}SSNPe;^R3>eX4Vzt0b4H1M@ zxCJC>kGZyy*IDu4H7-4y4|;nNWGxdW&?Dg>gcUylc4S)WC&rh6?=8CuEr~B2ho8ie zVN)F?l$>e7`bN2kD}Hg!+Mwp?e;vQk1RN}N{Co91wHt{goE zKR>_ut6M0LUet2*FbS@gFNWJ0eD-&R7>z0>z&oVLx(MI^jgH%g)_~{Y!sWevnhA+! zGx3Nqaqm>YG%F&8_#(kl6?lQP$9)}&80U~+ZH>8lZu{IiUfvsk-ejC~^7FHJ&}3vF zGCDSvj4(qfWkCXiH(1C#;md54K9JL!w{N>y%)!#7h@W~jY1Z=c<#SLh(-;+W0{(y{rYZg@P1pZEgKY={<8%lE($Wr0O|ikuGV$?A?6Ok}lsDkkBHvlN!)cOK z9wROL(ax{@nLWCPx6*%!6OWH*zGTFeoV5VzoQ^WTaSsY0s4UPp)TDjSkadYe75HyT zELwI=(yVREj;s#_M+xZ(ahOP;K`TpJiCY#f;UPqnan(bBQ1hVW-B^Djwa2K}c9xBM zVuc8chW_;iSEqyCt`QlH)DoAR9DQXm(ZRGEV4g@nNx1b#U@@PA{)B)I6I4B#S~p1N zCD*TCk3)GPjH*iC!SmDo&&f0hG3Fxo45FRAYy3pik3SODLU5Vns2*~-6@r#nXkkw$ zr&plbmK0zLox~oRY)-)^r#QymIBVf-8t`XCA`lm6#i$yY;lMc#jMyq<(2X2C0!FO8 zI>3+kIIwh4AZ*Yqhoe*@0Zy-|y~1Fc;}Fk=4Xu-B$+!j!O9N&z;2xK}Z&b7jU6#c3 z*e^u4zxiz(sqq6-t^E+#8zF0O>+TK<8_U;nf>N4@@X61=>RNg&5=sflmZrAHMtuXeuNTfts$l zc_0?|zKJx%5Gg3rm`4RqW({pQP3AN!Y0N>m_Tx#yF|=)3>f0te#hv-rAL9pPc6wrR z?C6Ouzy0P1P`2=BFz(O@)`rYVk;wxnlTc}BppcQo59`k$h_tZ}4+V9u@5@{3bgX7? zCLSXQrT>CJB>tL#juPXCI-&`f*GVlyaNl7h^KYT_wPp6NM8Hk4!1r)+_D8d~^ z5pK+wOniq?nPc6$^r{KQK6W*~M@(r4rP#j9p6&IY$Qyoh6R4B6F#*>2$M& z?LGIc@H>)EG#=qCGVtc<`L1m1DxIV8m=}WI2z!_~&0y5oxN|2nkdp=qIkCWFriu6q ziKKv9?FLQIIbV{68h&>|a z-93@d4KH*E4hFahdJ4uZ6^KRTpbO&d#FKsjR_F&#;j#c-hl*_R_j8lNT_I6XEs0u3 zg!AuSlpSKW1S`LBD%J|MmN1?8AGbS=&Wqrj5@ zFlJhHel0vo^1r)}Fa53J^)t8EnN?L*k|Ek%pbSt($zvh|##jQPpr}PM zKL?XWcx-Z8NbDfjnF>9>>OtY)14CPnFj=usj5}!hZ~(2ae3rqH1MhyKBb+&MWWIeS1AI0 zVAeMTenHq~$ssM*Z`NXtikz54{CwE0MK&)vLGIN;+y~CG8a=lghH|)8dt!f0eo`Rt z8Vnq!K7x@fkQ!oe*%nZejGhH5c0M>23wTJt42T*elm;vvv8|IcJ;=@`=WD=w1S#s# z_&37zgLWqNXaW&oG_-VdY*w;^n>4Zy|7ZneTT)i`1(6q^q=TP}Kbzm2_OtN*c{A|H zk&vs%=6ntWP1t-ef0j@ce3oXml=@~bRyqeTX6r_S!LEa&6FIh#Kvigs1>bc*x}n9R zMm2{zFo;x0OiCqZd&oEsvb1Bt+m>Hz)~#c>@?-Cjxr*b*9{V6g^hRXiATVoe0~pQg zAi9>@R^bF1HymIFrF;lO7BzU7lIQ2_$w4jtt5w-U=*YlpI-z@wyUe_ z26p@6xBQ12+3AT*0LA1MCaiG0+TIii^Egdm|9v}|0Ok0%ZM9tw%$T^Qsn?&sq?2*Goisi?nt0QiJIh;Fl>G@v33)#I*6^)@YYr9uF}<$mq-D>m#_kg6cV?LR)=4u2(43$WO=jg7R} zh{Rn3xY4~(g`ovtR&wY;3Ec?*Q?Rm&Fx?T)J`C2@AZrT?3;X{x{FOil^uIzfIBqhx z3i~SP4Pl)7gkg7efM6lc7}Ded`jL5P^p*$E;dGR`n3H){+&+=5uqp8}viopTweX*! zO$x>GVGU?;svnwXK1dakd-g=azlsAip>kT-+0i0uKrpgk-@zNCdF03e_`v@xFBd^< z15-g(jGTK3g>dE9xCF6(A%}+Ex+RQqPDn{OcO6(9-W)*dBZsLt1f`)}@gBl~<6;|S zKl@YTA(8JUDjhN@J76arUDT>52M4Rja45wYCU3N{i;-Y!@X!7I{S*upfVCLF0YA^N z`-oGAoJs|CMX;~Zmm0>SdF@jOc_a=J|Dc4!Pvxfne1YZ!$Ux%lxeN+&GBLVEGOr7T z{fQ9&x~Xph8v(4yfo&+-WWKKSek!zZ(%2#1t#N{!adX(_8)`|(079&!#*$pEbFln;|*Kkg8;>Nx)R6P+Fp%{; zZiDx^a}A`3fAaoZq^O2x1tEt8u}coLx_N-9pl_SVA9wF_+y@b-z;xsk2XZFUu;LW) z4Fc#IXXPS49mFPV&o`6+VpA1K5&}Dd&49LHV*GZS!pZ$^@xN9shlYi9JTzDS^K1Me zVXDi%NY5hbhv4xf=f@_q7R~nodfU-=~JqRELlA{~j0OrZrcGra%`1m(LG{8J1wXby)v{wcSNuGSW?1MoY z_Y-3ZLLbgkAWXMGUU(rwwXDMxfr3u)A5Ih#(LQpY?`vz7d z0xdu|Fu_p)ggcaK9@w#TJypUMTGIqaFE$v#V5Nu3{Xo<48>eRrBSy(dxX?z!0AJl) zY5~wVz`#s@d%wduW(-cEU8LQ@fj5@9BX4fQe)Z|r7KR`Gq_~n{c(lHMHu-%g7670v zejIKH&W?sc{)q@>$ok#bxlh9M^6u*nB%_CdiR)b8UYVO`A(N1k{t!1*SQzK@4_acC zINp$`0I(aslnpp~pcv#13FUz&l3=_fckK#S*+_)$LhmUv7+@1K57xJ~vYCAS6>N4OGey5>loTDij)w3D4(f@8@~e^Q?Eh>s{-;*Z%K&|L>h&*YCQn z^E{8^I~^349t7%?E(=)&HHK^8JL$@ZDA_;#+=TrXwj8Wyv*)B7^yK%7#sMxocJ8iXK1Vb^WxgpTJPLo>+c)%M zrRJk}#`1Fa{}b1V6GNaXO4y}ihHero;KQ&{SgKU%;I~pKG-gMW{-47!?%r2Blx31R z$f@J3wzEq&AWCTC4m&p|vSWW!n4dTi*A?7DG(*%zRuOYnyB^xVUlN*L3^Lz5?qDC+ z4&7(OdI6=0aUC{1$X28mWDfhr#r37zywh#>vJfIju${9m?b&wcuBsDdCL28KubzTR zZtD{h$HL?AgbFYICQn8h!T9)J|FkoI&XxisGRZC5mB%9{9~OiVf&{#Aph-^5ixVv* zEX2t9v7UtAiL4F~1Qd(EqCJc4GVk4+8`blg#tQrNy3oiAfB%VSmZ!0@LepZ!Z5E|~ zrcx2}wifJlk9?eBP|+*B=@y@)1D@vC3vS{;Hd^?k>t&ah2dC?5Nm)nMsnRUHggoj! zHmthamsd9j;2TOio^yiYijO{r?qbyHb7rIf_ewjSVi{>Ivh6*J2le>YG* zK4EG>QOYAz`Z?*A2}8-~)}+xryZ2VrjcgWiC0(OmZS8UR?U6ldd|kN`ga{LT)y_TG zKPWmO$Na+7h8W}|Z-$Chv~s#*_j~cj+EXJSkta46SM)y;x?E^5)t zH^*>1CcgRKI}CdiqtgNgt(|fF=Zu~Sx}7@<*)I}+2h;AQwxkzBtLhrM*J6w$%6V&kgT1KDc+&edgBG?B~N& z<+hO z-G1M)epZXQt?YMKpP~P5p(vJrkBROe{t2Jkr>6A2Yo7GDa`ecj!DUrV?)vS9NUIG6471BWwb4!ZP^G;0NjH9M?UZ)c zH1~e!`S5Gwb`~a1+hNtzb|+c>9;UCH)VfJz4XvdLtHv*`&%LiG%-Sz>oo|kVgI#;u z+x2G|B}P@19c{5?Xbq8Ok*ciHMVn8}0ezbYdE~y~i*aGI-(lk)&Ba&dabsWYD=U7N zH%Uob)cA{Q{DjjBJ2tcXTJGDS>h_HrKJlAlct`~ubrYPAmXFiOx;pF!JmMe=z2*;9 z$GN3Fe%$=QZnfREk@LJ2Iv&Z}+_S$Xwy!E{Wv<_HU7ohx=}biP?+g8he$iO|V6WMt z{m2z8Cyj6$lap$&__<2H(Ld+1Zhm)x!4uvt^-IEs)H{TWetqp8xOEgib0m3tnHpcL zsjBaqpBZil&yhQ~ zZosw|?tj~{>ioJl`q}e4HQllRnsr!y%9(TRE?ADVhXb{`y8q(_tmv_$zqW$@v`wxb z_3qJr>^$k@3(@S-ROIR-F53n85u;IeK|$Xrckg%Q(?w0A)IPZ_G-~; z*ni4|!tO{@64(E2tC&p#+pXL#!sP-kXAqv$nPWHKA8lz_SAn?7bxcC4$6#MSKT>Dj zo#o`^8Gi7{G^lKa4Kz~-cRto1r;n>fi7(oInj?i5<*Udj_8dOk@c4vNm5F9)LONTb ztwA&5cHxh4LC~66^=ApT36xdT{YitlP3^F;67jLZ3g8yrBi7%Yxda8;MTw_Nda4cX zn2-)_$R!*G_k^Caa_iPeH$k^kCq@{&3*-0Uy;!PI*|eG6Un*p+wd33bI8i7l#au=e zBYO~8!FU=DC53O!>)C70^AwYivOGCd_Tj?^RoWw*Arx)PA^r~oz9|L+Bk*K+xj>b+ za@&jLY87-Y*So!!FUq;5%!eG6kTuSVnnGmDJ|xA!v~?6U64m-yU7Vv2+7v`n+$p@k z6_?8wV7slQpbA2tBcH?B>^rqR$dZ?mj_l6`4r`*0{MTOjdZkizWAzrshh|A?<=j zxz+Vzw9h*04+TL#Tf#=He>CU*(D{)w<6A1EdvV$F9c)=eK_4OQM$Fh-8ZkiK3NN}^ z8lt$lN4VncFcxokQB)c?F5X-J=WFBwG$hJ|DNtMZO@E?|Jc30b3Ms*xAdUEPvtH1F zmX|*5$u1>np2*t~jW)*lrBDbQ2YvtCC(y8nE?JyiirLin3C}7)x+K6D920&fNF;CZ zI9g!Wh4-|JoZflz2kx*mWD1$iK;W>b_D)esDHJj*!|w3Y;z`w?*Z-}p5M%**U9Lq8 zTyPR9Z@*q`q-o?u5P(`cv(`{JQr_eAzTT}_#juZvGI>2hhX?R_j6UF#15lj|4~-xh z82%04+yPnIX2^L;%S5|4IT*RWwH4xA=J~iDQn&gfdR+<|G)J>3`V&f9_2|_r9bhmR z#U3ekE(iF^C=M~Pv?YQ_()tnc?HT13eet3N9fFbq=!Yt~UaX}`m(?=ufFItFaN%6l znr8#jL8Wsaxs0Q^s$o}g&yl1cRgl69a^+&ZLFHMn=o5JkLJ!kSaM4{>QxokcJUTGO zW@3K*$8%RS{Q|ir?J+n9Ju541IF~AtUk%*f@18{)AjoCAlPsg;yu72&$9@*72}7<@ zMWYkd5F~PO%W36GH%#MsUPm$-XXz$jF%6*DfdL=Cd^0&b^gC){$-L%Dym_IJ^42|m zer%QQ%HanF##1WW-`Lzlp#U;KRo$U;XW!@B0(+daiZJ2@K>uLgwWT8zVT%s29X{V3 zCX$4}-rw`Nm&60#UOar{fuA6o#tR;_Z@=WQLC;5u{A_4BAj_f9jl}^Y4;t8KUo7mSRwytz55z)4Ghqqod2_V1{g1TPC zedotaBVbc>J=DbNgD_h}!QcQEF92AR7i~gJt0gN5?i3_aa!B!1chJ$3OAes?#jiAL#sf8qn!ebkgSp8kVp^ggHi4*;pa41obCM zbbIk{i>DDd3T)0898wab?%v(@d{5x`6OevHNb_5^A88N`KA(GKu{JwwOq|_*gus&j z1nfk)sVq59y>Nr3;a;PNmw`2btG~rG`)AzJL+>MdG>*E}|Ji{9ZG9!B7xPK-y?d4m z`|5-jfYPEoR%RRkMyv}oyjsiE+9O~S>N>vO4Wx3wfi+URIdg6-9yfA}5E~1hoK5Eb zDJkg4$UNT2_==c_yuQocsz~rQ=aV2!Jb#gNW1Eh(tp9Tkub<>cvbEkkYMzCD0jl=g zgf>kIo7(MMefm!4F?$v6C(qAW%KmA51Z`9%G>Q>9(CevVWmeSxV2JCK`KzBJGgR1{fdZy@_qIrHasu>`zA1|xsz2gzS&vP(bTt=JKb_bOWJ-xl)s z?dtnuyG))Cd46u8@uqU%AKA|Yv;db9P;Gh%pD1VuxT5pR;m1VEEuw(p_0j(l!vaeJ z?C!wt;UJ-suq%?#8#(Z)&`>=06WLcf=*1vBtTZR{HR*co7)cV1U%f;KPLN@epSnDx z`o{O8`|YsE?l*BGiF%S?hQ;G5W+ZvE;<|(oi@yuQ1RX2KpV*+BomKy}S5lt@Jx^As z`dXB9sBx&#S5{`LUeyb_<1lmnr%7mgIK+U?>i&VAer+~1Px2{nQ2ZiFW`Cj!-cr~S zlJp_FbEY6E)i-nxd=UFu07Hw@|8RuuCkoZzw2!zn< zmyYQQ4AbkD?X+pG89ox{3JWAA2@yU(VJikB=P@GJYt>PEs{ugRf=fxZ4|j-wilZz@ z4~nJ-=vHO^kfb&(U;gO1Yvi%l0$tL|FfH_I=q_0fh&ISf`eGQpsK4pA|DE1g!0H`rNeI!7CF_ zX-zULHQw_!V;xi`J1Y?;VJqvasm+aXnt?r1lDB{a(z{L8D{O1mil}?Z*auC!(ap&f zvmvw%Bx;HsaQ@cc%3Yk61Qdn$VSq_!+^-$eoJ`j{pSyK;Wl`$T%6>6w-#ueZi>?;M zTucEAKX0IY$$w%cvw?D3oDW`OzWBh)Al4!cdRh_|&5MH?{2B-{!Y};Skv0G;H#LMW zz5IfKQE2Av3DCs6x#h{S3MVl&qjD7_9)zAW7#QZ^9IC%Ob7mOs&u?IBvwvl$-o0ZU zeBBa%ZZ2}fc2>S~cyWkRHC^NtcP=i^ILCC~^5@N?53lWSpEsfIyn!R^GVT9$QfAue zKh%uRggD;9x|NbtwkENgZnx?5){!JLHC`JD+M0QF1qmfxNMEWu3525TTuQ|8{q=6HNnNfg> zPDlb265t^)5reU{Eoi(#Dap;Pa5T$S!fQ|oLEWJ2g~taSJ1*+8GInud6i z9HuS2@z-zP9u;b;lSU>ESEVyI1b#~KPeKx$n*s%1TKA4&o&LQcVPi3tXbX%2_)!jC zrMO;m)=-VSx~v=K_TNw41@zKV2u|F7NlVE_wT`ko@@QA!Yl-9H8})c}ZT))cQx5kF z8Ed}0JD%+qxa+@f+hY=$ej?dF@+ceIJyb$5Zk^o!`TM_q&Oi41<;$0C=o4*MT8x&A zO77(yYtA}xwkvqM-m-Z&`R^7lzdKe-prBmT>lWM!s&yZA7`ko zM%;{}Q75b-g82(0F`2w2b!XD(&~!ify5pr;hYqzQFF8iSHB@~|$KPwPdYXAo1KTOP zN;t8o%V8>HoiR1+4;`8+oSsa`+fHGL_}U>jFRu4b z$Ico3dw&Yw0_%!gWGNG|Xo7?@XLZr%{qB%DWB*evO%Y#0gBdS-JCZ!71=(NP@c!s~ zf%?AU&5^uYUcM*wLM)EI>h({HKo))L)~zMFj@L^m15?1*sQ zdS6!GE0JhF6O%dnv|F{hkfGMFVbZOo!gNUeg|qD@$8Qs~L{HENN;DJi;PjGSRgz$| z<^#Q|C^Tt!b076shPkUg|7SmFbAE!mw?tR=3^^%rK!{~%%!^90?d1)oG#P=uq~QJg z`q%(mnpydvEtcqX!f>-}?eI|u^M*=oC_{4E?;LsggOA5u_))PhiQk7%H6?{e>5yf< z?v>r2wUyNon=Y-kh?t_2g5tRqyrrz9Vbn#Emx-WjSjm-RA*b55o!8pV#pT?T&tuI8 z_O3fqwWP4iyAb!Kn?al!rwq1>@-H&iI#|!G`Q@|c#W-wdcuK8uQm3W_(hTm}@{-2R zk#%sjtV)<}o`Lx%)^P2CEjTOih>G`_ja-MsGdh^LB}m3JO`V(LI%`ZN8u@%zHLbdg zG~iXblp$Ueq&A`~v0YsMr}gdIw`CNB2*Y^W*h(B=i`V@2-7L4+0jyO1?b_>pxZNoE zlo9+v!7V$~%xaOutMM^qbh)+NbyksJDQZ>%z0Q z2R__|eUn7fS9CGL+ApO(tBHwxUzep@_JZwFqSZveq+s;QHpz41V-xJwSLzmiW?PV8 z2+GVx3UL(S{+9B><&o+~?mwumk>Waig0R$BPGae?njuD)XHx(-Ps0FJ?)Tj1JIf}; zQ6O1#2Dv4iUQ)z=y}YYO3r=LhHYGhyA*w*yDWB(OEk=(WJCv?ULdFoZh@1+v{;k*v zf75;oC{AC!3ANg?jD&w|Q7t%pvas0viC+5R6PMd^xbsJ5z15p)bpcH16?r9Olnvt` zmEcZCF8Eda%FOVl9Y6%%BZeH!izX-;jQjO2Jhok~{Pjuh=SWaOg<)DN{3% zXuqHA70x!D$+`^@vdd#WR=sM_nb>((V18odGn+fLMLRGj-Kn_?D@EChC z-)$!incSR%Ws_}Wdgh?NW0Qm4ZIe+LVg@FJoD)5EZXR?0R75B)iZg{MU%)FSFG(8J z%(Jq*+wpRv%HWlhz^d!9cou{*xTZy z)>h0$DO!`x0Gw0!>XjFprIMf&*SnR3lX_JR4kS4iD3`_gmx6RhG4R7Wx!dEx$ab_T zp-Y8z*ov&NS2Is{PD|$Tw*ZbW=v>mn9u5K+QaNgPW z_Q~=!Y5A2D;}*o{gPl>aBz!LHqS{PZrJ(jaGl!(iYh&dVq^CBy2JOOL zKe+K4ch%6$k%VU9U%_5PRdtF-KvFI$#d{?4at!{GJ`raBfOHtUB9N$3uoYDBvYu?6RZUN@%RaMQ z>28dsTa)1CRX?igMdh9E>Vx%LGQ8`7(sZA|3WP{wQk5&H`^C+VM&U)%EaS0m**WFU zxXdq|x0b0^dKUirHD%DCiG=QRt!wQ1A~;B%IdsKX0R7cF?T#O{N$Fix;VG-EF|D_1 z3%md3y6k=0d<@C*h&g2gju|?-$s>Nh-BA(mC9ZQBItU`5mDzQh|8Cv!eW}Wl%3d>- z_hd9F@UN*oaL_!lJ;&J@@!w-65yJ&Uc zuYRNCYd^?2ngd!n8;ED>`PoVc3*!oF(Yw&+4e8W$-NTQge%i0O|22BG)vS$*h(4!^ zgVe2DzL+LVVLU8)eJ{8bWOm9Rcxbpq8z*tgh%vGlkRl^w>7!C;zIUSIq6Qk-X_rTg zq12FAkcpyfBJcnxv!rLsPjd$fd;N3FJb#lK?z36xO`86`S=vSF*DlLdeM78^?!ft{ z2^xY3nK_j`^Sh7N9l%+tL4M5Kw*6?rk+O-lUaBS<7)e`(Ayp_)6yE@=e)akD4q^I% z9!nRKIam4esHmH}byGucr0@bl5U=`w9#a{|BjP?el{rWSl>9U^Ff;gbK~Vk3s;X+5 zHLQFi<0eK}AA4DOki>;qo_8XgcB7;q2TkN2YpS{*3XSS6>M@Xz?;*giePe+ zj4tJqMK;6z@i(3IPD0ATP>3ykMW?qQ=bR)9Zs7?~InRdt?E?xYrVwORv&GoX573{Q z{W8^kw*RT}7vmSk$*tK_+=kBbyDEERJqWZx3(wtU9;bkr+-=b>38e)u!#8crR^Z0C zAPIY*fR!i>B&jNm8V#p2FlO+fFfR%;zWyXQw@2S7^RiZz=1QhJZVe^ATRJKwF)5)) zMkbG-T9rRK1Q}U5v4!%-<&OxOtDFz7BCC)k!*5SRmnf_fD<64=>(SePeG8Bb(tH=j z53I0A`~PV6*r0Q8Pb1w|#(%Zfh5Ss)y18`Rm)%Kc{f{M?b^>M3Y|~4fM0g5s8NDcB z54>s>SPyM0z0}AjhI0)B^?#Xipp);5lk;$K3PwecUTLX?JSYw5g09d2wxhJAPL3 zaB(nhT9WirnFqM2KdqS|C92j-*bF(#> z>PfSoq`hvK{BZ8SPX{?c(efH+b3+7+a>a~`O{Tn(K_Fs#?sOt7Gma2R zG?NT9fkY|p5!p~F`VH-{VXUrWs$Rv$aB}?C&H~Ss2mp|HkU=_VZOz!2@s#cCi6Zss z70fnKqufqaXYq-jtI>Eu6NnK_o1b`p=pnQ33C@jL1l!jRHykjaH3Fs=X>WTPudOc~ z_MPUJ3jQ8$tc^ZK!Z_%`let$$MA``5BCevLL+cQME;BhOtwh=+7fm%%2Q*V+vO!9b z5Qkuxkw$?=$^l8U=;L{_sW8g3ZDtAI2&O>&pveqf{zu~#?nb;r>LprUY^!W(VRLGYHe`!N&tK{Vo^BFyiK<5y_=fCFw z+sUZb#6*QGW}%zdr_&+A$}z%-I&RSs53_kgB6jc+)JvG))@>czLn?@Iod50l`T_UV zXSSbE`8yC%$_zYY;sF9hbVSej;-Ve(2$yTC^qZ9;!ZBc7k@=W7J@jdFmHS?c;|prO z#hPC`ZgakX43_iK$!s8^%;Kkb=^l#$6NVu80pFB`n*br82yO}gS6s&*1V(&ov6VfP zrOYKFqyQA*#j-7gT8nl`w&fZowW5_IL$TFWcpeGkX4yv8gd;6`OBV#*I!b=~l*=vzz-JBlR6IMqQPhKzFwsx;Y z5Bgp2f$dV7TE1fRGfy(;RLC))7jxO-p{rHN0jhD=Z|CQBy}}%_S{I*opOcjIpyAo7 zJ||*~czZ`6tazdhz}%WG6vof)%*Wz~)!JbzYU*SEtq&?kf7vlF)*#?$4tuXypY81I zWXN31j8FQ`ZqfMVcuA6+N)Z@`MfVPi{cr3d2>g=Q)l{4wliuyj3^jao6OmPtZuO~5!?9rn3x=`dAm_aAn_H44C(uiKuwT5+zD!49j!pD4AgkAO zWow!}tPxjP+!;3P<;bR!hp_mr0;rBR5Q+ey_eO(UYzjspf9UTm=Yw$MIZZ7-{k1!?vZs7I{AO$ z-2x-!CavrLU$9pwQciNf&4F<^-y1L};+xno>3i??P6%Ng2x?B)C!0%U;&z#agk4ca zJkMss6p5Lz+F)6$?27+yTUU!U-!_F96$JgVtyH_#ZlF$!!PB<6uR}L3oGMOav@;7v z{VN)mtYVjlk)73|&{otqj1b9+n*`fLS$TOfulWU+m;ETu_O9J+IJ)v@P|?+h3~?V& zjEGl2Ko*=2=lLPoOpx;r&MR?Py!hU?5dG$=hx@N?M1ca$qpTp4q#+79iAoo39Xq8? zzkaqQOAZ`7C}RR(h|^Hs8#5a>(kT`c6cjG^xGHU&2+ie8AqmQQ|KCxgg3?=QuT=W? zi;Y^Fu$5cvifC5?;P4vQ#{W_2BCP=7L$Ut;*1T^3=Q0^G3x&AoH_^7FQ^<>6l0c-G zu{UE*GvAZE!OoovcqK$6K{dEp$P3=gKI{JskO3o9rZNQNI%v$(-Hz5bj@k%7NA_|w@~aG3rFT)&KUSv=zM`!R0eyPKpIVADdaV4XIgQR%uba-d++kEt>2=% zZT#rb77R*MQh<_f0_m9Uzj?E`q~M|iv}V=uh6TfKAB&E+Aszt#faq^zs&5b_S#Q;K;FnM9C%0J>{Wi%iqTUOG#wel3iXTzW< z@=*l!qYtV9V0h=D`9b346$5k{a(u#U3`yj_wtHT3?f-B%q(f*cDP%Y`$3CkBR;#{Z zYTUBUpi|Lpd;k0^ZbOP>Y(-2)Fmz#a@1)39}fyydz@ro zi-o;@&Vf?p_%ui1jXf}}+wL7Is;VjCGo$+Q(6*b`P)EVBM%c{MGj>n*FNM*Y6jFXd z^5#jP@BXI)hdU*gBO15=JjNd4Id=V&&yq*YB%FjJStJASe3IA1}Apen9|Moyr87h9MVyc`>fV17h812}!R??>ISalmxeR!9Qj=-;JQ z9z^VJK;>Zd^3bHF+?5;Rheve-X|ptAXzgZpAVoFvv<~$CG0}-_MGCkh@{ljqEWJ%8Fd9a9wSzBB0jEcgy%&&)Ciwob;qjzt^@*fL6jZ&4! zOcYWbIG!BVrqr6~$_YVkiPMo5nLxxobsXraUyy*Lz*UnaQ2SdV$!yJ}>7W6U zIbCu!Xx*F#{=;v9at>OxI zg~SG{bZFn9{YAqbU3)gXyUcUFN8jS!%X3@o*^pUswW!wpb(!{>vy0Y!s_grH9nqex z`>hbGWDPNcLs8m$j_2WsRRtIkz&~@YW9Zs`@mKSkIZdTZj9v3pABmStYVzz^U_VQH z!OmJ1BfU>&_8z|KwARe8rV;o%ZeCbkJTADpZUruG_`YQNlb!qaZDJ>V!;Yn=uV3qq zcL}%U0=mrvO5-1IcaNViV+I?-s@WW$+4t4fyh&H!4bG{-QAdjVBPNTroTVYWFrUS#|MkO~AmbIIlgh3WwaaZ|my zR=zq_drgO)f9=?z?W01oq^kb$%Db_I++lf!i?hd&EtXA~4QG#Skm_jfMvfi(_Js9T z&M@A1qm>`5g%LG9Ox-ROxwPT{HlJJ{e;K#}aM#6UtQp8Q>xZKvxOz1L!V5TMWq3H2 zjPsW+rLO&)xQTb-HPtES#e)SVD1>ANroagzB;>??v++Hpb~)bY*LZ@`kexzeZ%Ik9 z5D7IdwAV@3;^N$o7^XaG^R(day~!uo+T4%8cPrhyc^}ha+|w1)6(9zxlxvX-c(BsNhS4|^nIL( z;Nl|cX5Gjj2tg82>t!vFGzr$cbTz1xp&Nw%h8e;{c0XvUD6$3(n)P{Y_R#NfQO<9p z`-vh~Di_S?ht1Y$v809r9AJkQm~OJ3xqH@%+6KNk`{uL1V$EB8r180f1{9%z8X;yW zXNGo2UKo|=N4yM+%g#{Iw@;tzd3kN=fm1IODOK19eMoE66c9Hz^yRIMuZ|BU$RCp z4#B|e&ksjAy3lWAk1KFM$cX$)cvjgS=%bes9xAUHHJ9&L-5~(|(r6KsUzbtQH2Y~J zFmIqK(v+|;K=_3o+Y}FAdj&TK)k$O9l-v^DaBLdOmT$r!F`GJ46s%HmcaIH8FbO&F zc|%414yt|)_0W(Ifr%olRoSQo^g|ECairI+o9~e$ZG?3uEJnh^1`TS*nwy&B(N_iq zv0p>rcI0)*%gYl6{Cm+S#syKy@y_5Gea(6&`z@KOM23+vmE!fLcAnSScO-e-CGXMI z?bRj9SD$T5m~xYZ3C0ZRusf%Bdsl`SvNAq#!qq|Tg4EQ9Bq#0AtWw%nj^t)vW$&gI zT0369b`a08WIy#b{&9)floqtNjoO)QV*_zDJ%>z)OOmKnnpdApvtJF_kpQ@2mlo7g zZq#~nNJt05YFkpUOYR8cbYo|)!a*#KS!A>lCNX<x^8_q}K*$~|;O}!w_v}#HUU0q$VE21c1B`Hx4Q`?9_L1Yxf z$FNZIwXW5>Gr}C;uAE(Zd1d)HxPR@S`4CPjVSJzgEomqI7YyRer`xX!Xxd8xm ze_;A8)(eabnMEs)#>W{Sx0z<46<2l2eQy0awZyj0ZtXW#ckPJ=P9OYHCS3dbC*z)N z;IU(kgGSFiAF5<=JaFTgMlYNEsQU4I@uC&$bH1$o$8Te|c59yWoD)#@_su2`ZTyO`1W_XYav zqbxtS@D0>G(RX_SB(Nmg2<9M?R^$|NDo|PfSN_rf)?xD!42=I&&wQ-Sxe3rS|Df&I z$SI+`?{(|eZPCaKXhzsYW@uqj`4DZ|Vv*b8(;d%qRDSiGFl6KqXMQWSsIh`nVe?dj zR3oX+IDaKirFn}MlNV&tCje71%c;_0N)eE5i=-c~8%S0>IO}j>RkKF46O}L3&R|3b zl4l|gmyEzEosrlGiVXQk3b5zTLJeq%lXseA(oYUR!}9A{N=itI)mDyLDc&W=kqszu z(qDIX_a8W?jj8D5phYBPK4(r?-tUQKk7SmzE47;Lw0`Yd`ft$v;&=O>rdtl)9of>U zZEjC@zwICz%GYn)2un^OGdKP3pYMYbzCM{QGb4nf!;9joG3@r79Ac$$tgU^RSumT#AgY-e ze`%i@h_cVgDI(8vDjAQ-{XZvoQ=~{UMI-oj_;}*KjU3Y(O1}XJBA_k!uju6dxBw)} zvbqGgxzL*5m+Ga%MX7V(xz?cmk5?u_V#l5I1kDkEs@krK%HhudVr z)Ty_AjXM2L&}dkc4Qwn9Xp;m*miO*5Zb|?HI*T{MJHZW69?~pbH)<$hevCQ`Qu}{y zC0m?$xXjgc1GT2)g%}u|8C{#6#u!Bs4e-r2DkhyvwdYQ1^|7F*sp;a2otuO?i2}{t zUQ0irrG~~EEHtt=qW-gofJP@O5&cl5N~uOtaeRNd`rq6~iGHNLl~ae?A(~8*22WD^|Q6-ss-Fdt^9qJ0yF9o>zwz zC{FvWEew!cH==-2c*V!}zvA*z6>NW-cJD^Oun`lc1fOAHR9jjq{~CVVY=>n)M1)g7 z=pP>w-O|5d$3y@2vuMa6?HuU-6Wp4+-nvbjGXsBjY3Xlp`BLbyMeoFqBt0n;IXFyY zX-Q}qQ|pL_JgL#AH-lbi=LFy7WfEC0L!CCG3xFJ#sgz{&^6D-bItiz9_R-VU`tk`> z!UUXbZ-~@KCQ(#|(BOPJ4mak!&rUE2BTzPN^cU1Bcb9T4{<=?+&JMz5wMV zP~flSuCB>4QU-uF6{}l=3%~_4jum;SMOvCBY#kb++jmnpr>nVT&(ytj44cAfXdO6$$0&9S~LKL?8yXNn&aX+ebZ)_xw?hoL|OywDD?CCC6>lmvQX6Xh}I` zr6@0@37ozpk*p;Jatcd!tvknzDu+BfMEd=AqK=ag8d0H zhol`QdeHfD)dh$!sgpmIUwkf)LP%}|pNx|mM(+`87GytSk-?#vvzajumvw_KSf=(M zpRFzZihht=^$%m{l=@Vbi0Umm?3~TNlP!%$zLRY(l(++P-eAKvWWFjT!vyA z#&*Gp_i(!}=4?+Ro6V@VfEfe7)O-4(a>-I?X<m&o_jq`qM{G;IkL8r zv{gW9BG2e+()vl~7d`Dk6{W$44W|jY_ViU^<^BG6bkbmFepvdLj27HNe3HzS@je%G zvTXF`n!}WbLG^HRNe9E72w9kbcf|17#537_JgfT%Jcv720;r=^U-`{rTbDp=i8n$O zTy{t;PxxOB3_7v{`9nvBqWm6YkMKIyy;7HFb9+fI&6R7@z-^jSzO?vYdOPEv=Bg#F zXDG?6Szz!Kpq~p%3sQ7j%{V@(#F+uXOPrhXoJ;l~-UsXN z9BEx>J?2K4R2Urbsl365O4G(ZaQD8<>C)S@eyt5&DF()RrFZrH?9N!q`_57GVL(h5 zrvyHVy_Y`J3KN9=?MzgYN=9(DrE4Pxdy2_Kc^KPpdeU5_{ZOLC;Xw+q4w~k+OpLf_-x1 zn>A^o6gfro^`5(v5fpD$ntf6$r1vNXJ>K+23IPMIMckGc8by1C`^g^x3~3YWaoTLi z2)R*%m+ZRnK%!w32j5UbWHLBLN&}xHv zjgugF%O)9wNqU%AExSMK5MXO=u7sVS)&pr9hS{eg1M76zw%fG>fx|lk$4a7xKd)E$ zp+kGv<1Ef(zvf7kPYmExU;;o224GmS>UrLx3$IPFL}*ei7BOW^`Jwtw)<|F#3h6od zUI$Q-P&PA~>Hd-qVH45(H5;Ft;)>wjqaL0rEGl|Ub$}{JjPcjvZiCv$ zyfQ()&z%SiOn-|M?^Z^Jx3zv6;`kr;lu6mpQGQL4RrgNR>k|!zj&zJ>1uTfRWf7RX zce=R367`27HmjS3mcOVZIScg$jUiJo{j)`L>eseZ-oJtSH>IM2^}J_*($ ziKMD6092wB_FTUE8*U1c2VNz9&l`eQoI9=ILREt{SXsfntp{RK-CcPM$4hGdNEN5U zckbK~Fpgh@wno50;@qlTd=i#|?Ly8`g}mwA+W;PMD8whSA;I@nlsr+xe8=s191nkiN$cqJ z;V-CkghT<_`8iXqEo;NB7A+mfxIm!-r$Lmmxz&{sq}*IeVDAZfZ}S5l(R^TRkw!sW zOFYqXsX99BEQ@dYaJFiL2IZ8UGCWt%0c1SFJb!+27F+LZ)QS(Bqif}RU zLzP}L&{@fBDUoQ4o((Ddb2A=fb@8CT5vvq89v}gG+xZ8)fkbMf&Doq^Mt;SaM?K`8P;jI(gQP65%i{$9U-`}3Q5&2N?@nhubV<*I2 zW|$0=Wl-hf7u;8Fe#(7*bO0sAJv7QVW7 z>&`CH{_8mR`RRp@gXUjz`4rx9CA#1CyKf6Pg-#J<7w{Nxb7{LbZ{8qIP~&WQ|I&ui zhg!@HhVKEg#KbEn#1vy_j^kY1#?q*A3##YcC-JK$433L<<{vv1m!9YyUB#t&2=G?G zU%1{0qm&|Au&v9muuYppbJ#TH))3d>o^C@wKm$-FnB#I$s#a^6tcPxji zJ@b#i$mu6ORo*dsvLgNcT+U07<&}Q`yzk^sJ_2lT98Hzb@KCl{T^qM#cdXbY`Vh#I zG%7EguRre%{`q(+D=3vArwy3c3}xrJZ}dR7GKFkHf)6BqL~{5p|JopEbJRdIQ1sKW znG56B@11fcJKnhAq%%>bT9(ltC$Ec)53tu9dgb?CS&miUFdo3bgi|^JMJ8*pHN;tD5To*^2IB6u4EU5y8c`cMFS=A zMfK{{17bjp+LpUfy=jz+PCza8SFH_*S?q~S;rsbs+4^WLyY!8E?L54AjhVpelRp+) zwMhdL#~wNX*AWpwR6lSozKv40ha6=Ye{@J2)OSUL3p z7AF&dcUCeWx$D~&8rN2mpWnmx58H{z*$-Aol+Vz+Gt& zd^~&>d`PD0K#!nu)&70j1cQ6S5e&tUpd|{$AyIoQsoKDp6kcNAfA-9_*iLPSTv{Nv z2rte=5VOaRA3Kkjed*#wbtrn?RK$tqoth?I?$?R0Xn9l8X?b_`_ZjZJJx2uS6h)~^ zoF@p^9+n%fU=lj^#Hv_R)`T zt_;T+!r4r*D|rl%dBNGvKVN41;5zD$Rp9iR2%vM$e9D~4l+jbEluND4E; zf}b<{VEC7~iad`>OKw-iA#Ehc77cOg*Joc63=K6w^XAP5hh~+iGv$RcuLi`kNy-NNoCWNrwX!d#Hy55g&PydZjz8N z0AHVHj4J(+jMf0F#@}6)+a)^sKeLkO zK2>N>DNGZ9%q6qD_cfzhC$63`V|zNvR0esQzr35sp_t=ltTBtmyh-!sb?~o(mRx`M zaF??~eVwrS2KxFI=)<U6DHsp)hwT6}kk1B=lWK}Q)3>YLk8?Oa97@&>>a5zr zA+i+C9L@{V7gZP7l<+1b?(^32kY{%=kk(X)RKfSq&Q(-YOqeny{qvM=Kue;-Vy1yP3Lg5j25dX0{fQ{4JsC=t zy`2Xjzyycg*=)roHa&#EM#P6hjn*^<3C(5wZlwGcYF-Fc_Ef0($W`u7@0>TZm5-*0 zlu0zS9=sg-2JQLu>vqkWXlwfmFU%Lv>)Q40>N7mzl;mWkj>ETIM-3%eIG-!5WC_*> zdK8pFB5f%|c%cdL&-swjeI}JQD)9{zG%}$92@s(B#zT=_-M@732~6K$ugOi4(}`_c zrf96596I_Y(8)xc??3|=OhIB~YFfB@?R$9)4fg~E6;M42zC;}?^&lVXTwHNx zD+e`_Qa`rVngJf1CWvY2GwyfWIM{x#x`o|YsG#O8TT0FnO!RPod?rd^0QfP}fZyQD z1ait4NkmAfxMN^Aw|v7hknE8?Wv=I8vX+5Whk-Z91G2TXJ-MsaOvql@tKn3#2q%k; zk58p6AKj3xP!yh`fuIi)`KM@YK;t4@m!{jWQP zBNzoS<6*f~ed)sC!W;4Ju6av^m}Ve>dA=#kT;oGnC8$+f0fPen>pgg~!8Wq!obnUr z=rz~0(f@BA+F^}ZeW!Vve&z^Zcn<_Te+AbFl*5!NCoQaD@+yilAfO4DOc5?gMf^eowH@CjR?%p45bI$g?h8-+EOIG z@dx(rH#sv+4c469f-G-T1Q;l17EGBi;d=Jza*Ys<4Ul&}w=T~+#`&PNe)zC|RGc>Q zC*(LqeG7utp;Mx)iLgduLyBAYe4TopD%l$ZVj}4}tn&V3=n_1GNE-IY8C7 zqx$sl7$E&3^|UA;dmJb|P~vz7-$4NF<#8lXSPqI@Al@t-KfVj1 z!?PAp?sK@~!NL`uJa8{t5)0)uo$Sh^-Z9-VB|W&{IO4~TAHm#isncxy$C~dAOpijU zg$RJmbqOw#2yb?Nn||3rY@?{|sKBCs&@;u4Qq{pQ{u>C8`)sF4y_VJmH-O4orLB ze3Qsds0YcIfZg-%o#$4Y&sbpMU*Dv;+^&ARnKp|m51$$n;l=pua(Pm?m1*v&uI`?w zo1{$@A`@8*nxfMaXO^WIH3XEA{GY4^u@wzoT5UT`??ZDqIrjbD!!$82`B#6h%ov($ zwe!R1$tv!4F!fZPD659E%ozOopHLEnuPMbw(B8VzSh9nXM8(h=NvL75sm`BY+%Kqi zs~&QZ#k>F;sV+oO#Uhm=f%kyTNuCVb&Ei+>4L8B8i(!~2K7>s!ar(-7BPexKe7y)?HrPFTVZFIMT2Vj%_{f9}06Zq_1Z_Sau8;JWg@~vJ z_yLOZo^I>Fs_-di;;cG+13wT*S#)*KiLkHdDpCv-vg5GRQWCs+^Tr#-F7@WklM^#< zKAXVyZ1G|8vSmHkfj3d&GY6v%m_9!L7sISeCx0pR9eZ_FNmA?g+b!b=taoDW|iLRx)6(eGP zBd1J%zo_=2S?p|c-$l9%S9&?=cC8J;Pn3Ms@)ixwIpRL}yW`{?^$SlbuN?1m={YbR zAD}<*$d9vhR~x9c#N9-ut(vW&4bP4WOLi=p1tFR6%JE8V3a~0!PUuP_|D^j` z=-`HxqtV`80{bO?Q>KuS+GMFQeXj&;80+DOry3P{&?=%%su3*Di$%4`pEz@E?#Uw# z3tbI5291vE6278%xG5=xY@^?GiMVraV`o};N$q@3wRcDL=ge=g-W@=Gc7YKjTQvT^9VEiSH%Z`FzYP{?bR zDtRd~DG9+z-rW|ZUA3<2*mP=|jAX$ga`Ey*pJR<38v8ue?!W6!(i5I``;HxJvo*aS zQ$ia{NA}UGV!(wWyZLf_5Xd4rII0W5W_%kuyJ(E!L<+~fGyX;e~@j)jX&PB`i^oB0`S z^`7SDF0E`+Ibz|{o{G`~wZ4VA{FvMLVs3+nxmTXG^)N-@(PmZipvWvk6paWf;r#i% zGJJQ~)#_4EsyKC^q=pywVXrRW zhuHfBhn~}8T2RN#AXfle>>_1Fhn6sr=x5w;PtFB#uv1OF24l_~(Bs7m>W1#OILtrP zwR$T9Yywu-XAjjW_lj*KCV2|)2Y$)em9Oj%Sm)H(c+m& z8Z-ABGr~Oe9X=+F8E9Gx<(CbOy}(jy1giZHOqKzvAt;MKc#WSUO25Fi!@PZ5zV zW(GMHshsIvtxI-JrS{#{nucF@EHjyGj^xiqxJ&z7hFU_(a`?4ED)kj3x;#DP((PhV zt0{AOn$Skb0{{;deiBnnVp<>G9lHbDT+U~wZGU&M-O52rPCdwo(kb3#9XTZ<=)w8$ zz5oR%2ZnL9f8UvyeY5&;>8UHAKQ5dyFN#rm%P{uSt8x8ci;XJt*mYG_jE?0DC`;OJ z9{}7pa0t;?m-=MW7sw12h!nsI_sA3xY4JLVd<0=i@TpUq^TYEv8eBuS(Dn;&4J>VT zvB1BLlHPPikFu@c*6Uwsh9> zr%%lvdua^nHJ{3lt_!_RssORP+ajc+myd4i#DvgpkRscOu%l+po?7n^uNhKnX(ZX_ ztBdBRD=YW%x~PQMpguQBB0Tw3z+tl;9cAtky509jMn{cva+0z(*8flL0i)al#w!M0 z)Tnc@QuES=y?+mX*xu-a->jF4yDr7~`w}!|KtXcAr^DB%wn>w$OM4c(19ZIRpFe(t z*PnRint|0{Ietd=+{Fc+hX&az^*! zjZvR2yOxHuy?XM()Avt)^zK!5F*J3N+CRVgCWeTyBf6TM0KE%+& z_$7-e;Kb-oVF?WA^>6TA09a&dYHDq8nS1lX#)MnFzvp^arqo;4VQQVF+IP-ZS)xFK zZ0CnI2DG_1cZi|3-^w8uKHV}Lq+0f?M_~isvR{dMi^}E<(VN~hWUcM2sb)QE4?1;G zBbrs6OhhLPR!s@LVoiRTxYGmYfi1`_7ebBtlDBnXo3S#_7;33KBP+O?8LdRqBQ6MN zpPY!6dyeEkgmU9c`>>^Q8cuX{uN83$v{pMSh>~Gw)z#j;8eZy{TwT{f(=TG_F&4XO zXsTgT?ZNEu&Ah?GKz?amZ)O*NxPRlpj7F;tYD)v~a2s_)W6Xay;d4L-XO?t{mcy1v z_XOAmWY`<2PDL@td!o~^qj!Fy6{w0taWMkXi1rVv;b-_>1u$Ffn*Fqh)8Ccgkk&X; z;UuDuzIjLzJ+DwIt*||9g@{+Ag}pYtuGFG2F(WA2jY;nU;5E0(G+5Kb;$U~VHkeYF ziyDT4=7bXa$<=KldKV0fK=A;AI6N=4Wu2@b$QrmPjh&5OaPKo9UAD-obbKmtVo7ua zv(zkT03#Q+?%cHg>cX{?X#nNog-xpAYXKf5T1wsGiy%GtVFf`EXq>Xbc1OyTlk5Nf z`GHPAnhVcnIzErJX5Inc9lC>#EN|WSnO&z}X}Dp-2JVa7r=Z<*n0}4hZATwceh7eL zoUAsLh&?p-@<<83PtC|EiJMnTEQhQjPKfj+wE6ucQ%fgoG<%l_ThI|UoHZ+dexqZY zHh%2O>p}S*x01W8W6Fptb(yuy(P}ew+8OSouJ}rMcF8p#RkP2AO_5P>*cuYb)3w(a zEX=-vu>^l{<^X3P$g9rZ?+oE4)yTR&1Vy*GS-=(vo@5@g}s|t-0FEe z;vzr$_yF?N|BSQbogW7)X0sDp!Ql2@6ZCv&H*3|ZRRd$e<5ka8mp>`r>g|D`J$u@N zUdUW&SasMrsjtCln367+Cu<}>K;7c#zhBTt-NEQoQBA0-k7mP~N28*1W40_H30hV5 z1|E}tGS-wGn19+VGHtGq7g4$97Re{n+<5*sZ^l%}ANzm#sD~q|i6v%E=3LUR_HJhJ z@1G9X#Q1M`S+n0?B-LjJaDB};@-Z=^VCT0-2*}SjY-QBYo5~seEA&a_p<~mr69+X? zx2j*W&~ET=X<15{BLGNUU1WPE>bJ>cINux4xgu9`gtH@wZR3fQpyoS|6iX~7h)JuvM_bMM<#ZZ@3(9pRg`n?(wb2%my(#Nk zL_!>pe_f*Y9y|7T#`k~1B5IU}1(et_YHjS{K22B&B8|e{AXKg+Fb7phalY?>P{b15 zXAj&_^=$m4hmduDbP)*`Ah1j!S%16E5Wnj=IT{cgsUZFzS`RH;=I*_xqq@U8xq)`4 zaFW@7D}5@d(RfVmEZ%`99w^ZzKPf^|X$2~^92|X|EJta5S!e~PR&qhIJfX>t~xC7vE`Gw zgHSjN1Wph(1}4#gcj(=FU;e#UThbgPDuMg-=1N^6)(P>v$!xeSXyV_09Y1DFD!;qt z$)YVnn(=7i|0wOu|7ygtE_Xu^v=eB-xuU#Xb4Pp6ll>k{iEDLo3@ zedE)B4<-2sWgW2{a&?)Rg(l~M8$@PbbihDL9bkR*5?~2MN%;CLX#ViHr6!;F7@#Hg z6cL>9gPw#^aEN)s{lFHrZ0-eK2z6DKr=d9XY$(J%hT&~({bLh>jRv0sv9QF^S@(C$ z`SY^0RrVlAaJs(JwVUG%7~sTzD3+^~=3Z7&!xp)F7VM(3e4c42RYqZ`m&Eo2)-A9 zQA@HNi`;_%z)x~bT8^vgToV49SgX-u5ZvaE;RryZ{8{c@xot(FNNE7$&2DYAoq}wW zS1!VFG;M;(;F?lnd{g-GQMhoRLF}?+-C_R=CZmD-#j_5w3K1vrBC02nJR}&i*sb4RI^Ej(2AWn7>Zh*?lXUiTXHpR2Z2L|2g4c&^mCN_urIkW)t=@X^ zdi{g{{ulG-fK4@OgrC+|J(KbbkL~*N&+=>mB&#VTh5%?=(H>`tq+nKf%K(N~8AT;H zA7A~cjIDPlKN4j^+f}hLZZ9Piut&iH2O|i9*a@2uEers%XUdVfGLb{OJAeO%ocpq21NX$icw;zMB^%g}aeC=yOfY zE{GOV((D&D`#5#a95`x}29sSDLxxUe%SHZxL6u#Fcn2E<>hKqT5sfq0#$N@mez(L~TUrQsg zaPvD2sz6d$+^NY<4<0;N4b6l_^D7`bnRQSv^DcgqwxM+vg%>V5(k#v*u*|!^XM?cQ+$? zFvd9Ga%SdnCD&qz#6jepQMn(13ozvQcEvtflkPrgqiWuW|toKAh8Z>gB5 zFQ!_fma2JCajh2`a}5|sjIezzk?;5IoHK?@+OC=b&QLhChwopte!z(D@S zBwwE)H6_*JOiNQf_Ui|9xlFF(H9j2D4d;cUMjpxRalXdv@l)h2ImFt&tyUt*8@s;7 zPb_$OriO<5z6XVy1EN;_A3dO;pMj~9S~s`6`IBfM?@$1$Qg+b4yj1--e)|?XrWEJU z_gW(d0?<=R1xr!*0l#?8QH%=)6_5p*8wQV-73Dm-vSFOgO88xFO1kC_%EMKhBwznI z#azyEzjG|p9F1ZL5aC4&gCwvZ+monUa^}Q|>f6@pEs`mU@j9D^E&OQF?W2uwVUx;x35B`MMxsh^`=rCnu#=qQBGzyt)iNO3+YT`#?%P8 zf4VDyK$2>}F5?OCmQ3xBii3}v#hEKP5d&nQF82#XLhRY)-}$Efb%kkUE1(GFv7e#8eo!G*d&{` zPu#+uGe|mow-kQadsc8P;5^mkkhx*}rAyfWu(H-x5^8wkIYjDES3;CPX^C;p*m!?x z^qA@Fm_T!4Hj)Ddk?;m*yfY${Q1&G``IKnjdsL{tH1pZG(X(HK zS{ecuX^Dw7{e9-Uo82>uNIMXSP*KD~cmtC|-L&n1W!{!dV9nNQM@%-$7}X;iGE&Ep zHO8}!Xa3~6)?kGeO2z_$KXsQ+WO5cXi+BP>$({jZ+3qh4>b8WsV#bbj|0Y*<>Pn^t zCXH7sr}(UoD!;E5G+7ZBNBs_3Y!7}XTLRs+8jQBTDu7J&6j zA`Q1$iB&Mb9mF)MzS}|TCX~gG3+9tKId%n;hc<8ipL%iEw&5rjMkLpv=bgRTOWfST zf&Jt?ugx*IlF&nH4uP6U%kFct+d0RpE2OowJ3EG(RPx-o0aVe;$++2&o5Q@5WZYu} z?g;9$MADa(uL5#5!jex;`=@MriBx5U5d7B&L`$CeXP-&PsIBc6a2xyv{i(S%ENmd+ zUubUPj-vkPbawOj5^Zk#9{LL>GQ;_2h3G*d|9Z;vffh2-v#a5dDq-*?(n|SuhZJF!uD6DtJM2p zO9WKjY0`=G9Vjh{_ew zm}!t^rs2V=Io{8jdEch}l$8Ll(s-;6v8+tD%wka{=P&T)i*N#<2>i-l+wob5-6Ki6 zAY`Ya|30n+kHqLrOdDJD+ zme>e!{pKGDK*Mm7*I?;mzx5X_S&wA;B7^Ft+hZF96O+5j{A6v=fx9AYp zEvE7=lTHnW7CLRhd7#}TF|sd%F+a1vqWmJ264`x{x~7$`7$NST1f5lW7bqp3F{?9o zGkWlr*dBun40@6uAT~1T_v$Ni=zoLFZk4Q&!CHJ04cWII^}k;K_j0*1B)NN%O;?npqs1AduOFN7?V6fLDZ#sc_}ZpP2n*1r}^jh`L)(A=?-a2S$1Y(uqgf#L!-ST-$9 z)PJ_;IA&FwlCAK}+DwXn`u{;WnP=}ldx7r3sEnx|o1Ghuk>Ud6qF$o+09c^nlQHn8 zu&`<+gU?;{ibGE9(Eq~3L6N=6pA;$gt`8>Tz}%db*d^Kqe~A&CabH%474e#0Sgimn zqn`)>G?aao4sEoKRd24ahz=qLm9{x|D68YXl6{qCUgdp>@Z5@`>(Tnj{wAy1Yx*>V z*4*~%%Z_{d)tZ{tA8>Ph=f&M8!6R4-!2$d~zsb4wSap%`xq|^?Us*?epelKItz$p^ z5A@4Tj^7s)6p)QwI@3Gh@q^f_=}}DVmOh5X!Dh9*!f-&smOK1?00?ITUODxC9UkAR zZhHK^NkT%xy9~83Xa&1I_V(u%54cR%@7*qDPx@ctxh$(qd!e5 zn|l~Ni0QPWp`qs*8nCBkj=RLYFL7F2L#C3E1IZ`pU#RFc$8R$84%tW8A38~8R86C`!)O@x$%q(v(pZikB6pe}eKFF((O5nqT)LaU(|3@K;9OR9X#PF#Xnv z6RubOU7Ew=aPayM2_k%;olDHPnMcnne%X|xv!8|hA%$l7GB5Q(79(uGF*csFYRGqd z6PPOik-WUa%_l}hR`^oR8#E(ejXf9A%?HhIV6Pw6!Gkj+hQed-siT*wb9ZBrlw?Cy zZ6vH&Y6*ec?LfY7%lh`UA|Zb7hiet>A#=*)v4yCB>|Cg*Vw=;oE7Hb#oc9H3K>j(X zj3ljOc$kG+S5jLvt=Nu$fbvgNOcSsL&Kzr@GA|{7 zi!pB0Eot1jb7vX@b$7Hm7-*_2#j-5@NsNB&pwlDec`(?)QeOV_^WMF;fuXJ5I$`L3 z$?3Zv{btSQ>~BrGYO+_}IWu5hmoT8zeD^u??wA!pol~nlE3R$y@ex%EuNBWu?Ajqg zJ-(E`Cy6;|iLL3Ba~yl`Nv-_b_Jk@iP4!#2NuK33b7qV4L*uK!*s>?Vuy5Ob4+;t@ z=sOE3gye4Uwk~%VO)6A6`Z|e8lnsTyBwG$l!};pZkYT&QXtpahqNrB$b1~G9lUYw#N@!@N=tyrGe9G`UWAqXvcOZ)1!5sV&UQEte8 zSNZgC#TFt^Q;rr8?aFiV0@Onq(GMUf)24SrF(LK7wM~o`#>RbUZzYbq-yfF=(4l>r zXTK(#K@EJag_cVaVDx_NxW6>$P@s4&8R*FA%L4gXjWH#5d>ra|O*4;y5{Ze1&9=+L z^C&+Az7S~6`|BFfzNCC>VAjf@LzY4i>-$r*>UZ=kkj(SOpFwygIpL(Po?rX@GepLlno17K z{>YCgVamEMG7Y7#g4s!5MXp`#lmVOPzVJ87O%9`}SuDUe<0%8%**sFq#2rnoo!hj@ zvdoC4UW$Blo!ehIIhlyHW%Ks&b*qq!;a>>^1{SD|&JbKF=I}Sa;A%r+`5CbW?*EuA*QylH7=z_J&UI~opDcdQfnsPmC=w>D=9^f=w7uNn|t#l}o zcc2*{eRE zqp_~kkL^$%Th6{->=^Gd$zP*d7ln=lT1kqrQr-T3OFL0JbOh*OYHPg?ax+7UNXJf{ z#y{xT`Yti7-;D5k^3i3AtpxB=lKC{Ov?9mF*a}8jOh<|)X_LRg9m10r<^ngT`Vd5G zCwZK-RWUXrUn1F+^c+-Gs9POlI*eWB)Xq39yU5!lNdUmJi)pbnruDn|7Mvel=T^ME ziQkM?0Vw8Qy8zf`uyV%<&Am~%I_;#`%u_ZVUPoV>EI$1K!6~?Kno?PQWSgFHy84P0 zD|8(mPMJFIryA)>^$LOwpi zgu1`Gd>tUhQYbYqo=*1IeL^cCHYk~%Z&efdflyI#lJP3PgVv5-neB}I&U6=pzAo|m z3;Usy#Q!YMi{d1aEhe?oruO+Ep@$H8^JzH6n8@RC+B7mnALI{CB51+8UACWV-M7lA`c4&^*)j_y@|7Xq_hgTc}66wR)7GJ-wsnt%kcJj2HNhGXHXv6;tf%yO7B3mpR Y3VR(o+R*Y^!LJ`D&72r(wP@S_0Hn~y_5c6? literal 0 HcmV?d00001 diff --git a/docs/lint-and-commit-setup/lint-and-commit-setup.md b/docs/lint-and-commit-setup/lint-and-commit-setup.md new file mode 100644 index 00000000..10d82f97 --- /dev/null +++ b/docs/lint-and-commit-setup/lint-and-commit-setup.md @@ -0,0 +1,43 @@ +This markdown document provides explanations for how the lint and commit setup works in the project. + +![alt text](lint-and-commit-setup-flow-diagram.png) + +## Brief overview of git hooks +- Hooks are named for the event they intercept and use `pre-` or `post-` prefixes to indicate their timing. E.gs are: `pre-commit`, `commit-msg`(after the commit message, but before the commit is created), `pre-push`, and `post-receive` (after successful push). + +- Inside any git repo, the hooks are stored in `.git/hooks` directory. The sample hooks can be activated by renaming them and removing the `.sample` extension. + +## How does husky work? +- When we run `npm run prepare`, `husky install` command is executed, which creates a `.husky` directory in the root of the project and sets up the files for managing git hooks in `_` subdirectory. It also sets `git config core.hooksPath .husky` to tell git to look for hooks in the `.husky/_` directory instead of the default `.git/hooks` directory. We can override the default hooks by creating files with the same name as the hook we want to override in the `.husky` directory. For example, if we want to override the `pre-commit` hook, we can create a file named `pre-commit` in the `.husky` directory and add our custom script to it. + +One e.g. commit flow is this: +```txt +git commit + -> Git notices "pre-commit" should run + -> Git looks in core.hooksPath (.husky/_) + -> Git executes .husky/_/pre-commit (The command is: . "$(dirname "$0")/h") + -> that forwards calls to Husky's (.husky/_/h) helper script + -> Husky's helper runs our real .husky/pre-commit script +``` + +## How commiting works in our project? +- We use a library called `lint-staged` to run linters on the staged files before committing. The configuration for `lint-staged` is defined in the `package.json` file under the `lint-staged` key. It specifies that we want to run `eslint` on all staged JavaScript and TypeScript files. + +- Our current pre-commit hook is set up to run `lint-staged` command, which runs `eslint` on the staged files. + +- Then, the `commit-msg` hook is set up to run `commitlint` command, which checks the commit message against the defined rules in `commitlint.config.js` file. The rules specify that the commit message should follow the conventional commit format, which includes a type, an optional scope, and a description. If the commit message does not follow the format, the commit will be rejected and an error message will be displayed. + +```txt +git commit + ... (the above flow happens) + -> `npx lint-staged` is executed in the pre-commit hook + -> `lint-staged` looks at the configuration in `package.json` and finds that it needs to run `eslint` on all staged JavaScript and TypeScript files + -> `eslint` runs on the staged files and checks for any linting errors + -> If there are linting errors, the commit is rejected and an error message is displayed + -> If there are no linting errors, the commit proceeds to the next step, which is the `commit-msg` hook + -> `npx commitlint --edit $1` is executed in the `commit-msg` hook + -> `commitlint` checks the commit message against the rules defined in `commitlint.config.js` + -> If the commit message does not follow the conventional commit format, the commit is rejected and an error message is displayed + -> If the commit message follows the conventional commit format, the commit is created successfully. +``` +