From 6f2e0cbca0792d2d2281545f7514b1ce5be6bdc5 Mon Sep 17 00:00:00 2001 From: ARUNAVO RAY Date: Tue, 24 Mar 2026 07:33:46 +0530 Subject: [PATCH] Add GitHub starred-list filtering with searchable selector (#247) * feat: add starred list filtering and selector UI * docs: add starred lists UI screenshot * lib: improve starred list name matching --- .env.example | 1 + docs/ENVIRONMENT_VARIABLES.md | 1 + docs/images/starred-lists-ui.png | Bin 0 -> 147758 bytes src/components/config/ConfigTabs.tsx | 1 + .../config/GitHubMirrorSettings.tsx | 254 +++++++++++++- src/lib/api.ts | 4 + src/lib/db/schema.ts | 1 + src/lib/env-config-loader.ts | 6 + src/lib/github-star-lists.test.ts | 319 ++++++++++++++++++ src/lib/github.ts | 282 ++++++++++++++++ src/lib/utils/config-defaults.ts | 1 + src/lib/utils/config-mapper.ts | 13 + src/pages/api/github/starred-lists.ts | 53 +++ src/types/config.ts | 1 + 14 files changed, 934 insertions(+), 3 deletions(-) create mode 100644 docs/images/starred-lists-ui.png create mode 100644 src/lib/github-star-lists.test.ts create mode 100644 src/pages/api/github/starred-lists.ts diff --git a/.env.example b/.env.example index 5cfebc7..aa43c6e 100644 --- a/.env.example +++ b/.env.example @@ -63,6 +63,7 @@ DOCKER_TAG=latest # INCLUDE_ARCHIVED=false # SKIP_FORKS=false # MIRROR_STARRED=false +# MIRROR_STARRED_LISTS=homelab,dottools # Optional: comma-separated star list names; empty = all starred repos # STARRED_REPOS_ORG=starred # Organization name for starred repos # STARRED_REPOS_MODE=dedicated-org # dedicated-org | preserve-owner diff --git a/docs/ENVIRONMENT_VARIABLES.md b/docs/ENVIRONMENT_VARIABLES.md index 557a3c8..6a83963 100644 --- a/docs/ENVIRONMENT_VARIABLES.md +++ b/docs/ENVIRONMENT_VARIABLES.md @@ -61,6 +61,7 @@ Settings for connecting to and configuring GitHub repository sources. | `INCLUDE_ARCHIVED` | Include archived repositories | `false` | `true`, `false` | | `SKIP_FORKS` | Skip forked repositories | `false` | `true`, `false` | | `MIRROR_STARRED` | Mirror starred repositories | `false` | `true`, `false` | +| `MIRROR_STARRED_LISTS` | Optional comma-separated GitHub Star List names to mirror (only used when `MIRROR_STARRED=true`) | - | Comma-separated list names (empty = all starred repos) | | `STARRED_REPOS_ORG` | Organization name for starred repos | `starred` | Any string | | `STARRED_REPOS_MODE` | How starred repos are mirrored | `dedicated-org` | `dedicated-org`, `preserve-owner` | diff --git a/docs/images/starred-lists-ui.png b/docs/images/starred-lists-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..d301c4da0e17e372001a17c85d47b10e6c87597d GIT binary patch literal 147758 zcmdqJWmr~g7d1*tmnbO>(j|g~#6yaR4~>L0(v5U?hoFc`D$+`a(kUR)AYCFQjihiU z`+fI*_xJyN=f~NXmzP_X&$HHj-*e6}#~5=(B2^R!aH()nP*4c&Daxv$pkS_`prA8g zqru$~yEeXIBN%i~zPI@eVU zh7e)|_Fuo1irZrT>;DwlrvCm3Lx>I=nf-sRy1asm3|IJ{f5vbfH zv;+kOW#{C`O)M5A@EC|*xpGBJOw7i{#)FlWwWGbgy{%1FUS6Ip!ae$$0P{b0j!25E zu6EB=ewm$}9TXfqgwS(xbq%pjWRMAa!E1|@{kaW#E$Xt@85C$xBSm`e*X^Z-C1alK05M9{4Fad zC(Y^P=orw#*o(o~`%2is#Kc5a7UMiEdjf?L|2WX+8MmHL*Ilb(J=Op1hN6I@t7~r} zQ|Hk8hwWm_JUl%2pL1npWmzOf(TjU}de(a#aImxAW2R%Dh4r!MPX01FIvV4g#PhF1 zl7uhtq>tw6)vMR8vCJ^^+q{1LIx{IGG&FJ;b>vHPGiq6MWT7p7V2>(MLaDyK{^LeJ z?m;XY>33TkT!2>llHCx*vzN-o;G`*jW?fyl?*D5hvHbn5>tE}i zE(Gm`tEl~JwuWq$QC)TR`L(O8W0S zT8)yhOKZQ@ePdx^n~|U6j)VXg14oCDkbC6Dn+8kOaj|cO0WWZHa2V|<#GY;s%f!a?>WkEkYr=4>WWw;-4eDH%dtaiXp~cbO zt#kR=SE&7=0JY9-UC6SZ{*I9SRO(&tr#mHikL$f^oqxRbo^J^y-m5?}>v>+R{$6F! zcdjWAPHE$ZBGSLtdMgR{8poVNd(^dfI!V8UHk=(o*l{8P0$<^l2e!6cNx?b{y&=b; z)Ovc8Q^$C1r`LV0o=}reuO(3YVl-K_yV!epb7K%M(a8Llk)3vp7JLRT%m?3dP)HP3$ zn%E_UL-Q?lHt8@+G0L->5ADZ4X1S7c=@7TX+H2wbHwPxfG6=7qqaNVS3YI4>^?czQF&hf!|Pzpsz4}B z_r1)Vnk^6S@gP;6VqJQr&DiMfz*mmH6Z0;Asc|b-p3qS4gT0*{k}VobHe+LB#+PsJ zzu4UU(W70WpRZqArpOu@8L6m|igOE3_~Hipj}^-w%fGwjL)sL=+vP$-!ZGwe-8d4Y zXWlq?(<2;g*chi05&Iw_^y#x(@!GKW%EGJq*|L$hZAKMGSS2LM9xRqL`k_)gei#@1x%QMtvz_BJ0WO3L~7CmAo(^@N413p5L@Ph2;~ z2WDm-bB^nkr!grILPl3V+bKn6Ar|avYHG~BB+30#j;x3}RL4UcCWcgrrxQdqEe>&V}coq_Sb36 zQQTcUanUq9J17~}qeY$@EQ9oErf`%5RvcS|LlEvD^zuxYeDPFt)_&i znIC+*k2EDMe($c0eaOHM?xo)CG-P|wRZf)!bpnd&h379==n)plEn9cG zzXS8(^;&Lu0}~enYI?C=_4O@WF|kiegn_<3K4oTKoKN;wA)@xTW*cFD{Qn%hSbf1H za%-aW_RlElJRv);(La6`AABT)zAqYjvb395k$$&J+MQteQ62e>+eDzfu`JT>OmyKX z@~HSpmb+n_c+c@mg_0nN^hW|7=3nRLEFGAglOJ8Xp^`41fAA}oS~!d|hDt>3a3Y0M zn=!yurf(dc9|C)Rrrx_+!w&EQIk#>FoO3AuKD{q^>82b7ZO4%XLc}SKBZKemx3;#L zi`RP}UJt8v-%3Z4F>0ErYR`6kn2Ac(g&OR8`ui8Bb_vDq#ZD)k=E!p28!=)hjdcac z%U@GCUs$}(lOmg)oxK>yQBYM?4f;El?wM9>5cd$MJ6|LtwZ!u_1sQAC%|ptlvHZ2+ zxSF)%-cd8+7RHREYANEhFDlB!YipCAyd%MRF23ZVaK+e$yC}phD5bbKrT$~pH6a`= zq0-1moE8oe(tAk}@zLa?T7McG9L(*m9W9N-lold_5CsLA zyyRR!ZgDuG#AkqzBF${Z30!%w`*~v{iXdoScfOjemZ>@?y|<|4s7Z4C3#9Yvk>EjdJA< z#R#El|1SCUU~wW*2?^R@OZ+AND0eqE0s?|-Tj(yh!uRgoi>DQTNPJI=aX^%xft?>U zJGL_Rz@IZ|yD`NryV5N?MH8W>=3|0D_`G&Y($sL(a8z8`r_=r}HsQPTV5n?F;`GT7 ze|@4&H$g!x-OZctV<>M~hq}7BTxCTW!CDJ*{gxqVC^|f%o}Qkb(5b?a%xg%Ct9ZCM z?UbSMr|U?xa3z&Okprm)2P=#ka)yPa^7d@CLq??7`nFHrS`5hrjfk^iCqT@1i>pKL zh3%)!UA zlg-nkm?Il&q&3gVzj_{f)2Y;{ity>Zql5&b6w7A`31ru))-L9{xC$(1h`ph(&Lz@=Jkx-<%dZ z?(KbXXz%yjN;~iC>s$L>8cohya1Q^e)qHuuo3UI8Rfy~#MD)pgr9Z3g=Dja0Lb~#f zgJ=;ru!p&?Y7<+Z=AkOY(}uQ=jJO?b&wow3eaoOm+WD_a`Jn~}2N%zSCiT6ein-=J z6BD1Qy(hfEXu)L`JtuQB!7D2i!^xTp{%I;E;%%=&Qfq4dyn5Kt-r;Tb^x=z{owZsq z`33)jwUiexULgBMXzzMeActRH2KYdUfmp3IR@!K5I8i7L?4P{b!h8fd!{-z5iS4kHZ7U7qvT~X2J&*F>Fn6%G ztLapY)8Gvei z;CpJ_eb>Q!Z}}@iBtRcm7-}>5^75BwHwObd6-5Osdh;eWMVya5(*M2VGjsqwL(R$o z8r9awW76@zZP&J{o5C`Ri4Uxe41_hbeDcKoNB6a_^(tcSn{BfIUSCq+gitec^oG2Q zM}MfS=;M6R9{BaWbw$3BX^JJc?U0BV7G}NI&e^-lN=*oDS6A0Te`ZEASDobYoIi6; zZ%pe`DFgoI0!$YBXzG7|tIN6g&LPwbC5z$V+lLvnn?kUaMUVDcLh*>5qONh~Zc?1g zhtuspKHdFsaSwsCBc!?W5t3tu|2d`F%PFJEC*RT`f=^FRi6CnlH3uO|7vX;OH7Y7n zgO})6mU>^hGzFlxn9-x>=e}39U}ot3+8li4liNCL@?8(M(2NX2z-l8CN02E0p$>K* zTTR#9Hlwmi&?)(pxXzsW;MMcdf>`9!LI7Z?6dvz`p8s^kG!{_gxpPP7FUUwQ#If9z zdsU?*&V2pFN78#*qgs^WQ_})96H)@DrBQK_Dr6VGa&SG*y%zU>88^?z^$`X>Gz|TW z{~+QaAMLFro(M8%8lJa=goi6Y6~B#6bJxoig3aqgXj7KG6=w;`e6HW0lLWulZ{ECl z{aQYj>K*0d^o0t@`nA>E>bc779;vjFem+|>ck>C}h`IMAd`}xjd6)0HIyjj9Km_xk zu++2@ilf2b<&I&C8lH})F3=jCUEy=#v$uQ{;W5NFZrIhmd^Ma|q;*dq2hC`?SZ$$^ zD=K1)WRiSqQhX~zoA>ceR+c~ShsSkp>O_vWh19%l8y`O^yy?JATYhq~Dn{fWUhBE} z7}-=;8%)Km&KUa0<~UwSVv@$m6OIw*EYK zfIiQ};L}rsM!&mLO!6_~HBLEo5*z{oY7?WLoRK&e+OIM3t}BMuJ$V?*&A=cnTxcCu ziEG(q$fot2;l7-lT)qU`GH>Hqc6ZLRF*uiKX8*8*5y**K(*IW;2;6i&NZ>Twt+}|nAMWi9dGm=4Gv)~qaZiqZsIC^? z^*lRrT8a2y8Kve6YVbZR@t|A!`sxr89^=b9ckVzthJqHPXiD#D)|gAvBj}(>WfoSM*PDAIy-K%? z<0ri;Gq;+wl$4Z@&*$&oFcm`J>S)1$|KnO69i5IC%674v&`c}pz9sbc_g~?%(032c zBWB3HW`+JQf{rnkfOU%k>>8*5BefvVFYXKwtjZRhPf$@?XqI|jY(XD-8JNd{U9UyxC5iqiuV@6b@xN*hY zpDN++lN5Y>e3X@YVPog{K3JPR9&aJJ7Ze!xx9ya5(PS@r3JB> z|D~8EkY+cj3u0LgtAJtAx$}HB;_v;UC>msYpDc=hLRZ`#R2>?ocZi27xl48;5obca{c78|DmT; z6s3R}@t2$JjLm^@@wJon7pLqA}UGo9TmO`ig&T+sxf54!H=HGJtvBhnvQk zlh7VX_@12Y4?Sdb+W<-dPymSqBb2{FtzrnUBtBvGt|x%hO7v?<$;g;zIEiS*1G=B5 zrm~g0{_J~0J@(<|A>zITME)1tt<}{?ugfBH`!e9C0vo}!tCXv7thlPimZWCS0fi4qP)yc^Tc(DTY>XK(UivU*1dGxXAdPCgT zM~eZS@9gZnS9!ysSG93C>u*?Y@s&|7syFR6-VPb`w{p?f8_#y{18-nGoX79Ey9A6M z&~BJxUf$jp0`~d{A0KGWphIV5WPG|g<@tN#k-lb)qcOHTz#aenl|-N{v}QWu=^V_> zM@mf45lsfJ^ku+Lr{{CHLei zDJk^iwRV$2NAZ-muvj=W^7;W@LQ}!DC*pIo4IT5Z$!a20B;#AmZ@QJ%^LpOir@+uc z$S@VdhB7q0F!YPW%VPP_oq{)#!XSf%q0`{wDJ2zP(RceQLQBkbCE(3(*bhML-Ye`VmV_wTL{8X6j(GV}7PvNTb*g3o*$97@6$bvTq>7Q;3W zfXLU7SFNvk0x{S{o!v6z3_+pxPU+8fD^X2jmvVCuCJBY^Jk)b1o4H`u#3$nD9@wg- z9`sI~JL5%q)%HLqrLD_uv&}U68?KMmeEP&RdGxd;1V^vRw$^DeOjllp2!9hTU5z<} zqop;*hFZ{)URdX@?+ID{9A`ad=U%+t>c$2XiP)3cr@zvCx^@(Qb|s?c7a2Cr%+As= z!0FJdwAMUJgKj>Tn#i7Vlk9v!#csCY#<%yQL+?(Htp23w3Oba`Xbl%{68$dr?Dyf@ z?+74My$SWUCO(gNm^&R;#@(89+(Z}wYO zMEyPpK&{yZFuk@{blkzWqw=5BlYE)7bOb4qJKEZej*bI0!tI{seZ#(;6# zwtL39yiDtUo6%hgC&8ND$ z7T?uDmRcwDF_V4lW|M(zISL$8jFOaho_ovlyz*5Pf+qXp6;?y#Px|Pw@F%hGDFQxZ zVm7_u)~f;(sIQ8ZK)OoghLh9=5S^ck3l4NIUoxhmc!c`bn-wT-Hdr(e&`sO4!80=9 zgwpy_wZID&T42d2#W1K2LWhEhiOGP15p>xO{m{Rab#kySqm3Am7UwW*5D&}84rrE? z<%~HaL3f@6;y7#k=>RuVSbhx?EFiG41WJjL{(fu{N7rQx6{#u2WeTJ`LS&iqTHp0N zzj4PAg~|Vs8FR?}I6ASgkYT)oWkX?x`foTT?Zs`_H0}h9n46guirJ6MBAnRp%Br0f zj`=?oVm?XH|)GUM%-^Y0Nv)_hKs%6`%Gw#NA;7p+BIg>(M)1R%z3nA-a zMK(O^I66t5oAvzNK|DrEO9_GW`Pk-7uW#FEDSwnyW78}kV{AhbpxfdHLrUWN6DQ(X z+(SaTIQjEihKz|+6z}8D0c(OL6*DCA@()p*zFrM8vc&mu9ua$d-+f8PTKMT6k#N?!2H--nwoRv@E z+&G`a^7< z-Ayu1E&M~>26@30^5Se9bcYzw<#C5L$^Pn2?ok3dEtLfvjfRQZjVbRmNQfyvP0<>E zLrjan^htg5yT7>r8=Liog`kAp9Gdqp(abPc6D;DPLC^IIEv3nBN18RT}FAXykoJ~7~e;QrGiz<$}S3BnUo<8)(QsMk|>3>zB}xiidSfF6)$BL z?5~Zi1C^106XI-{yrY-%h#`!Y;#hV0ItPBb&&mVne(eX};&5z3nhhDv6z+qptC@$C zw&q#*n%~r)G^}Bkg;dLn9aR4_Vp-<*$Ls8R7~zemaO16+dfnfK_$jKs&dh6eBd5W> zHncNT!OE(ebuG^Vn)1}9=%+ssad))gwmG0S@~(!Vr|@#B7h1M7QJY?z|6yg7{R>a2 zVL=zgMWS48su(li26Qr?U=TVTKcxg@maj$>#h$>g2?yP~66WIUos4`cPjOFK>87pFsW3lrZ6V`2XKp>rlvgSVfaoeDuBKSQ`6{iyQYaFFR-!9-y(y0-aTEMpU=W&tfS~|)IxX>bTek8xf2`@8*GM5{608HDRj{Iqey!OG7B@A zOIHE|D^=#7g=pT)l`knwEg^b2Nkvz%l)9mGC5(UuT;(w92P|ow@%A{=0aTmU;+_KD zzc>Dz9NbEFb#(mbC6SzVg!>Hk5H{dni5-vlvU!! z6VO`JyU%)H7K{)YYuwU?Mk|aKz1{)ec;XG?Uu^(;m=K(MeZK3lF;Ph}>i|Unew52b zk^-M+H&H>!ZxVtm`l1E=JkjxcgSz8rM~Wz>S-Uj4S+-P zY+DB451fE#5(7XE4BrK9M!^Epr-)B6Wnxdai#xbBReLMUXDy9T#>n#L@^Tpe;|8DO z66(9|I4x1}K~v>ShkZr@vpqfcbqx}wHh}5QD=z-^OUxZi0truIY*mTzTSn~e)EQ~$ z*L%4+I5;f%fFhlTv6{hh|G9v9cT+h~g?V%Nq#Xj_4g&Rc77?{Hp z*-2^$63nkgyT>7{p-Rs>obUrZ%m!=72V*v70z+h^j6Cd(o^V8N`Q-J!!79U3L;g2d3kt#{QGmqol9}2Nl zq1HIq*vP}J*P?E?YC-Sc-&{T(D>1-(mjh528~sg7*K-051BiZAZvsl zP9MK~%4q1pa}r&(j0Ru-^W!I3MZhJST{DoHL6YZDoyJyiV89XR@AlJmm&h0MMc@M;BVr;m zJp6NzpY$GydIme%zz^LtTNiGpJ9fP=^w|kT;_I%*Dv55}f*yw0ZQ@-4*|3g5b-s&& zgZM?JY;$unVsW*FS7mGQ33k2Yc=hspF+a9BIfYp>(4PzMp{cM3w)=3C>7wpho-?#m zK6w0=3vH1QSHWgXhD?Lm<%#;M4gA|uYpfWzuVj;!-TW(YDi)LqG!O+P#HVu2%zQgP ztXUy@#%m}s?c}T*z(9k6Ry(5D{^bkKqG-$xEMS&OkLl=LpeQF=JUHtD6Nw)al8}(( z>hnC54Wcm;r@#tt4I>DC9=J{6l9npWy_Ek=ms7upZ1^_j>NT-Xxf>^?<>jp()hojX zs~rrnH9^dj#n(+Ks*WjJ=GPdd7BSJufe@#1h<J1Im!XRDmX;kQsdz_B=Yb!Y*Pb+`98R{uS<=9W@)mt!HjxF|#IgbQ$El zk0}NT@$-cc-&HVw$=fF(oSs{874g+~#AF_ht`t8WqNDgqjd6hM95B=IZT}|6<7P#a z`s&BNb;=j2d1GtxN2B7OZ)3@b4Ah^7r8^$zebvW#HsG6HNt$i;mzU2(9#E`LolgX( zeN4cry|%VC6VwYaFoXdm(l2;qZFNUX%(Tf$_Vgo0rs4R+_s~@uC3D;w%)x}Oz|v7(C>l2ZOv0BgB7y82a1R7)l!U0Y>dF>C)5TPVg=YgKAMflvvnFgDzj!vYD{0K z-=5V?St@cE#Hg0KdvqL({_>(tlbX1Y{;wm~^&aD2l;{5koVmQAh*8~va9nscCNDh4iP&5wAO!o zdl6Waw=8TSk%!?^3f_Ivn;K~U_6VaZg>wv=XjSxuH$#p77oe-*xg=aaw1MbCzd{(2 z0}V6KJ7uM%Bq7AR%}J~sk&rbhNJs_>wRuOLz(O#Jw6(YYnr$?!o1UJACP@!a6{sU& zVPO{E((6IPg3|+vD=I3g2T6EnD2}<)gB_wk$+yU(7 z_S0KY5m+OY3<+*B)9ARkH~=9liLfaYZ@$p^pQ*l$gED)KTUTS~CI?3W@LypqIg*hQ z^C37_(a_Q5(gN{^KN!-zF*bWRMEB;g>wCQGTzMyFyFI+{ou{ksGvENc)x7Tdap0;v zN=-NcHCFwl^bQs;;Us%taunidYE3%{6B&UK;#ULWZV_^N+r#*FM9`L zhKmNTfdzT`Yl2~^@#0Lq&eclL2&4}Q_e~m}>Z&q0aWl}TL%n(dMhyUzC6DWMJElHA zx}_*-`M~Ko02RIA;@rC};CYU5YuKf!Fxzpy1<;;!Ay96SqHgPqL~NIa7mzfuNPYqb zU`aN8O~A`T+-DnwE}D!zh`C>As=T=XU&08e ztw#z%S1aI7#6(2yT|==ZBnuqI6HfZUsTK0si)Fe)xWyf`e5DkQuE%M(!uiI)60Dpo zcfa{$9E=4=4)!fwz#KQ1qn+9mTRxyDSVW`OFp3OyTH$x;JI5T)#@@a}CWW&EYG|@SPyWtMBf8GyLq4^;p7YluK|P0*gk{PrQP9!XX95exS~m%Zrn0cmcMPjYgSuh0g(Ub zw3E&si?r}FPnl@Va3>FW)n?`%}$e;tg>tUJS{xygMK9!$9-!i76m+oifFSXvmfVYrayt>EsT1)1-g&Anwm=| zf_<$BY>Es|Ny!VI$3ib0_$wm@W$fq{Wxy;tbk8$qiiWZR8ocSuFRNr&>ldA>Sz zgYC9yM~t)r6{@KFW{g;blKK|8xavzNR(&sT-Q3)Qg9QzC7@ku(A71pmN6fML`YR8* zwt<-=rX>gRyiBS&s7gp^8>o+u`eYxzKyqeKr* z*=>bSXbRwrc3w#yc&}#nHy6P3hU!--7@W|R#Loc_PpYC8h-*-L-g87E!(u4swl8HKXnS$eh5I zdlVpn)(LjT0lHueM<5O$6|_D9!x&PkUv+quxGP2Yck|JcfSQUdf8WGp{ zs)TVHdhaaL&Nw-D_rax0vv?Q!Nq8!Ih&aRH?re>p0T0J9tWK7?luNS$(Zh!kRL};K zM#ZKpr>BD}6xehI=atRPxbcZ3;jA(Js-Lv154%il6gz6}D9}ugDX%r36G8}m~ ze|zY6_Tz;ighmL?{V77%iA$jc2+Jd;YBoI4U!Zrg89?27&TAOAo9)ddwg!ZH4KHHR zPdfA%Yz+L5qT__4BJ&^hb}c;ZN$X@T1P!_Y;ejo*i>1Pft*=bEMiszY z=f3d;OMHej3mI6So$ZX$$d4mPry$eGP#B!PwP0Sd)AP zApV`ejG}l8xV^ScfGIL~HGY5U@FgK=*a&NUK-@v9@c=2e($8=NfuZ@!%$fmRv412a z#0mU6d6FPvegEv~0vteA&siZ-S)`TBD|YJhMLW5n5gKV4iNzIYb)Y{x`OtV?2NHk) zhnY+t)6>;Kx#wtVgftNZR0K<}APc9Z$_!D8n<)a2)ksoG;atpFT@F-@MGU-M>Lk1& z+ScBgb4sv!<<{X0{fA)DTwkn?2IJoP!mW&ilIEv0XH}wAlS(3+fFSA_ghm)JzZ8CHXoR^|^PAq=? zZVE(axR+@f*^r%!ih500Sh!Y=`bA-SSD35RK|(=nRDqb(zH}qm)n~|j<=(8-3cDeB zH`8txFkrAgX478jYTy|rCL>UKrvEY62MY_+lj9oaqdM1oR}d61Dw)S9DYL;Ocl62j zyTGw3t}unY;(Q0_G6e)Q7iW7!A=DAF0=->{OsXPzX8CNZ#Wb$VRt*8fyYop<1Razs z*a~C^fz$zZK1w6_ImI3+2!X`XX0Js3XFeYt9W}k+4RsD6Te|l7aOeDi#`Ef?_W&zE zdlPq@3(zoD7U{zox{=_`w-xA#)y5RhAoZv_g)bf%bdJDWx%ByTpTq{rfnH-nQ|$N z!R)ajioghz%Bh@DNVAu|dDWVvEi~7Gg5RgcTC<5P=@qENbS7SEm1{v%c|{xH6X1EK z!m9P!U5XT^T!ZXQ&bp_(daK7xxXd!OSk@WwNH2s()QoFnR|@#rx9FmYNYOoO@dCyi z#_E*Y4m0|G(5wU^-%`qm9B-6=+osTO^sBcV$Xs}s*G)a~2u`1K7I;pGt+0xwkU~L5C+mWc}f1S|O=tL%Y zF387&Z|_0sZ7!l+{uM>e8%IkOLQ$L$PkXl|&ktb#%G?cc4?bpQ3{tF;OEc%Co^0$7 zX?V%$o!vxLY*dsr44RaemuEGsgP2sp!w_h}?{nk`B;`KefMk(Q=>o_qjv^H)U|=^& zCn^u_nupW#f?MzD!qE;)Qvmzq4&@zgPUbo6UD(@DtJHLvFA#B^vDD$`9BMwl&phkv z+*H-N1nU%1b5x+kOyJb!adp)k$p<&QGr=b$S5MdN2OQ3xDv_itOP!0Iahio%zhH*o z;{24?{)*^Q+SNSB(4e$4oos{S0g-M_bXHTAegl^*D#vOW>#ob&Q0wOX_n5ItQdTU2*pLz8eU>6<-sKl_JCZ)16dT2Mq?i0tX%6Hw0c%H zK4cGCsS~lzhtEMz<4)%>)LSsi~>wT#tetbM6Ph#pb*FG|*~}7CkcL@ZLL6 zgBx6PNWhb!@0KbEa73{)0ah3xGOKhh_ndgL$)SNHYQ%Uy0T5I?bLIqePlSj_`?E5- z!YF}3)Q2)6g3PmLU^EAFMsp~e)fkTf4AWiu6BTc!84ue)e;3v$ASr+jfI>Sue}YKu zI|O%0%6oTojZ-ifFjTs3%}lqpqEGu#W>M)(2sUM+P{oS-Tyn}#hMzh+Cn;1G9O9k( zp6myv4Q0#Wq_KJXupZ*B!+Epe-^)`4~P1if7$Msvs0Ns zl?ChKrJP-moMl-H>7F#911Gl2E#PyYP5%Qp0Y)H`B-qlj%B3^)Rttm%XZw|& zPIDW`2MAg$>5xV!JbwI`Q>!S`S_b>r5vE=v%$rlhE(MNKM=1JeBdjnvCEsE@^I1ed zV7K1g7EBh$(D#9pM4lK>30}2Q;zRPwnknL4|MM4r0R`;iqyLM;w8zNO z%E|{Xc;0|j8W#2vU?#~R5C~;uWivA~Z~}fb`tP`I0ud=p)INFgGcPYMAOPj;8eFRA z?C9(qbOIhBN}z79UuWgI_Fo&|Qfuq<^j&uLRp=s;ZQ()Q#;}EEX3`T85eagFKcj`Q z^!nv0!D&K5Ed$GtS|#j|$@R=>BLS4y=#PI7B_|N!=;`S_dGf@y>~afDSo@1Iousca zaS{FfO)`w&g#=Ff(i_H4=R8T4Mq%vvj|B`L_#)sMK{5X8=bX?MSeo?rW8(#PME*6A z*A*U8T+IDo^73DcS?Y7S6q5bF!YF#s-1$r2J-%Z#{?Ql;b^E7xiiwPn`jYHnw2d<2;3wLsnZ+gSnTS=33)}zqO@`XLxdky-iU@t{=jT$4}wlFScF40cV84QD}-p~8{09%ege!6KlNTG%-} zB!?}Fz{5}7|hv0LrPC$q4+D&l|clc**EE`Z)~&_{#?1vUQK z=7htj!ou~3l7E(7va7pl3`4K{?X}1)qb8KumeAtjB8$G)o&XDq9+g}BO;uQ36)kau zjzc>%G*mjYS%Fd$6dG`O&G~K5p`LidVFQ8&fU(5Wjd1{(a~Wdp_OfnZs;Mb1DxzOF zD}O>X1!fvx@ycQDkbhtRXd3B^t1og2r>Y%h$H&Kkr6Q!0plPNOwo-#a>dCe~#npj0>QTP4xolj)T2tKcFKxo`XzB2{HlTcgjrsKHwB(H#gK~x47-9VbHVN#-T$EZfP|uDcUaFX(6Do2?T-~vqt>Ol! zGyH&*2Ivl0%bE1yEFd* zXr^`Gu)Fy%9byH%tXQpnwQ*RMz8FX~7`}x@Hwea<2{^DU7{QN9N=)py)J1Y6BbFf0 z46p;D?)T<2C+|MDzRonYW|0m*`+}5>6ww}ViS0kOiSY1-(r$!o1`IRYm7)`IT_N`A zpPGefE6^q!Geq62&yIGGncJ7{0)&i=xpFnEr$c111>6PAy^~f;a&4;gb zN=-oRWXdEbAi$&Q*K^5!si(04gV%gEc*4%NL5SH9ah{{Acm<*hPz@;OFqRL|$-l&X zXPZQAAnmqIh=6jynjr9P@B)Zok&>@3Z~cVS0Nj|5>szgwW*e#kTv?}@osy}XBFx(h z4vZd+J-KN9S^Xd(Q`?O|xY^m+ftx4p9?=~DAp;>8SFV_@8BJ7JLD_HSq(%6FCIcJ3 zglE8ZU+~p!o8=S{7c*Im7A~;bv9se`j!AUxD}qN*`EBO4sWNjsaUg~>KwE~L%gG1l zY~VK->gz`{&Ti`I0gr%vDu&c#0G0=M1}%S@4O(_Fj2@ZwR5`cfV#rL!u;OyRo|$4) z*{7JxU@+}~ZnNSsFb=Zmm<$&^FuvY?fh&x(8!a*LKH4^}nYWy6sBgCxKANBF9K3Wa z|DGEQPiGYEFC(%JfmqMdi+tH@;Gj(OmcrEsNL7HI3a-MJRTys>5aS@ED}pRrcYz-q zdFX?ID(s?ukRC%PzkMU(?t?k&4+fvG-pFm@M@2;F)O%HWWw}4+S_^vvMaXo913fLP$LrF_Q)yjkKTS2eX0TvTVX3NL!lNpENI{Nk z?m&Jra!K#lR=`l!adG1KuKMRCAxu$HZkQ-R zO@8O=C-@BV%dIY@)xT$pTo z%Y3I_7iJHbxb;JY@b`o)MJ_1_RsuWhazXd4spcho9(dP<0;f4!br&rapEA|Pr@yLKl&uXyzbl2vZmIf(OfeBiAdEkj{<#=>r>hs` znt1n~B152ql>2@iqxher#rOwlLUIpDT|!`_ILxH~GqNuXO(ZzNE1^8K!&JSMLfU1G zWd2}{)ysuZ`h(7ygJxm-n6g1hs5X-@iz#S^iN;~YYQ*NiH8Tny20>sf_;Q##^jg7i zI1^^USAS}o^|5L-EL}{zYeC;a_kIrK8NJ4`S_ZsL9>sEtIXoX`q)`j0S|7=#+4&f)PruQ;9BN`oH9vmx0jGN~=ki*FlcV;`-Li z)eL4{n2C*uzw5Q%lu3qO3l;?IcLOax*cLc*JbG0{G0jN(L}FdnqaK1@z-;`3E2L?hG8R|k^cMaqp{V)aZ^XWrn}d0ireIj1U(R9b zEzU6AEF!f3Qm8CsFQvQ^`$0c7*pGKvV5E|-!zDXNAlq2(P$!MGsoL@}gByd&enp~j zz90k2`An^g0yIPKm8`X=6o-W+;GHyW0T1ftBR|OQO1q4I{_ZbDb5B_@Rm6q$@p>6% zX!2e#0!ZE+e*ZwU-6ZmF89gsf*T+5#)a2fOL6~UvE&T>#y{#%t9R2VBf8CU&>_Abr zT`He30t_r$v!4!E2AG(R6Y<1Ax#W=q-7VZ%` z#D1Cmv}m4C!o@Zp_(}${3Ge`PBJgYLMte|UZ&kFa@!c+0jUk9i&qp%bV?Dwyp6j_B(@cf*wu3tzY$Oi zb!}vwhW63;#jLb018T$#$6)z3TvS5AIL!y6UxD5m(}eqc#d zDu3|dwEHXrH#1nrq&_sC@We>yh zV}c-Ka`d3j|@U#d)d9VB4vir9|xk!ekfu<$2e{YoX~wnnDrFj>XDY>*&hsh8@q zySLYB*cOSSjs5uOx_V0m{XOjCWd3+ZCbC~xruSnGTdvJDbtVH>Kr(k}t=`c=Ac87m zV>L9FQm>#7&|}6V()Ww|G1au$aQUa)=dmLbe4(!7uWSz5)zTQwRWR%Y+~L;?5;}rC z5Kf{KIn63r(pXHS`!S=-jsN3%;K06#B2Mv@V8?x|8qFvQ#AX7*U#=ug!rC)k>uUHnKj!RX*ae9@ZJGg*}- zLe}K}hqm{Qr@H_D$Fq-_y^DinWM(Jhkd<<>Dk-92BqbG+Y%;RzM8iQ=p+QCz8A&QL zQIt_hB}7rG-~Dx6@Av2X`ThC*<9q$r?Ut+Kb)K)s^YOT^2V;X7v)L5YK9%EVp@N!? zoJfr~<2%kZ6t>;Yve7ERnXDn@{lB5(L4PP%*`L_E9Ogx`mqCa5WYDgo2!0T-?`k+0v!*6E_u+rIY!chmSy9N@vkZym0qNtZa*YQ8s2WeZ$a zeRwzRvNmmb)@5vJJ2xFW|KLlxvESLDnN?&}K;3I#H#5F4i+9f0vS^=SIs3d$e z!(n^|zIGRS8c>uZtuv~-3VoDsQ$vpBIe8Wf1h#i8@j;HBAxX(aNOD#P~OiA?Gm@#jG?in-ns2PA%l<9*i`;63pDp?1?FrkYw(W zmH9Y$=L1UY#Po06Z)TTUI%!D)9&CXLC^^NeoDqz%vFmG#XUZT2S8aqXMq`VT^c%bH z31@SrpMS^^l1lrLA)!LQ3;44EpzLH_6N6OXg(@4iiwCA(*9r;E?6N4AUX)>??(I6W z>5O^E-FQjapc+!;Mus%zttu(D}=;z$E%~mXtq)fg*wRa;5smNpt{*y`7 zF`%=XJds&h{xFm4Pls%?_Jz>AGd0lhc-yf(oduEGEw@*PvVJ8^rSTG*%Nnf#i}_%9aFY0}QW%0Bgt%m*)%Zc%nhO0>-`6pE z-VAx)DHfD>Jo-q~`9-jmsE080wpHpgui_HKx0cK~sx~lG9Q(W0r>)yw7y%FCBpt&YmkwBz0?n#BQl& zbq&9MfZOzSp8DWUgYNJbfhMu93I4NO`><`gEyDONz#{g0anLA$WHCnx^N}FH7`l4nF1w8%VkV zqm`BF*Vx~`%QYb%-^be8wBg{RXP1SP9aDGB(`7~j=r3ahJI17+`f`dWMn0hWzq8!1 zYgetI(T~691=Ca269gXsTyR^OCA;j51#{iz{stx~a6_lZeX zvlR_jT#V*sK3C`I>hw0f%Pvjc6L>6dzk+ycpQE3n7b%^WB6r}GQkI2@#|6u?o0}z5 zXS(P1Mi1UUeF}O`F7f`4r)$#~#&zxNp5y#?q>(MsNuK`xZwjmh0MqdufYOZ89o2P1 z7@1~fMqbKZ8#EX*XN&J}-#hswWR*C_PBwv$Kv+dL=FK*);4kG~MlW#V?wZ)7SD&7$ z%-uctb&Zy6nJq}GlvQ);rv$P<@8uu~yOl~(_lNnj~T8Jfh ztd{YL^<+}^hbyHQHtU9&>b!VC8P~s1WQAZd9^+etoAyye4UT@R`T4T;%D(&e4NJ|wJ{B=#i30N^`2FjfGqOu}QlLW2`TJ*= zUzz&ppieJUKE{4Pi(P$aB&l!;o=Jchm-Rhk7gJ4T6B(y`b^wp*VLVn|({%G7WRtWW zk&b=$1zqjKUz^cyo0-;uW^RjX&O^8UcQ#+L?a?DEq_PONkFT-h1=BFj?imW>yBNEoPB-Rv2p&s zRu7r9g`du$mtDYR(4YaEo5l+oM6%)HasEf=l^0@c#K#DHpDQ_-JTww2qFoU>2=FTdORg z<9}imWimo^2tz*ZX7+b|N0$3va~3`ZVjRaMCL=;oLy*L$SNOS3=w2Uv{}Rxk8@2_A z^ZD=X^tnt7*bmGV-y)fXO+QW(iVvZMIp89)-@sF@Qb$LLeUyUqEuXC6%o@8q)GxLz3;2*sG z4z)==7(!0Z==wa*A>KSYU_S$>TDataIYX7puXLzYr z&RT6Joo6k|Wx(|LapG|XZ{jts=#jfHL2$4PRziDPbN7>o+shrhHb*rn;RpU=m{H#q zp9e|vJtzSYAEmatPHUOW;6GH!F4ndt^`g4A(ukx|9M|}oT<`Z50N-Vbylu?i`Q75-%&E7-7^OM_5Ng69ASmWi#lDjYABs>V3%>zq8 zz_rJY?E=4tv$(I_vSaX|->b^U6CZKfB+FqD=8Yg6Dse1O3QVIxdYT?^sq|vtWB!BowfV;I-`#T$a?U<% zZoXEvN-^7uVO!PiS9eJW3A;u&i^J={D^7)-oRADU{`~P(N@l@G? zI=ykYDxqZy8WW?x^gY@<3;TaP=)ZN%<~0O5glkG&AmDl*j#5m3&vBo-Hezg=(bd&I zAWNCB1X2v0u}OT1L(#bl7q&-7zE}fXb|r}vpOP{#Us+Z46gjolPOqL z;M-uYkaZE!xwRU}sB|I3C|Py9S7ZAw_Op`77iOC`0{TzQB>cZzQh2q@ORWj_!m)oi zR+e@xUf+qfs{nBe(tKny_v@AVmqKdx67G6F>1@*`z?m&EEUYa(52ggZ#cO!Y&W8R};zr?`k&!|xxQ zggr0KlVfZ+Qoj=w;mP`kZ#IAc1ST7`?^~~(F_A)H9)%>Gl`B&orATq&k1e6NFSdRi z`}uz&48VIXHOFg1xG-muhh%|_F9=b&Pm%pln z-d_nxriO;E|0B#l!1$CyTtrLbfW{HeJ^#a!Cf&TL9(bc<7(Zpb5ms=_ImBHseRhp7 zW3|nHGA-DxbihmEGnbc_<5r53)znOXRfyR}PQ*%w#?<%*649CoRKIn#)m!k}KD@PT@!vq2rEofkZ1TkT|IW$%zsYvK@vj+-d{rG(ekXz& zt@z*$QEL6zpa*N0RM1ZJ+$GD+?ANNuZvW;Zy zZNLoC_2LD$<(fnwDvQP+fOIQBMntq}$qMhiNq!-VFZ_lUfBwuK^A--gvmNsQE~Cb7 z=;c9niq=uN&wIqKlsZ>L={@*wxJTe56%xB3VO3XAsn%clsTKYp#tL?o2~;hXRK)FL z$l}&s4<5n)!S550vZMY)#LEgYl*72DN#t(Wulr_N*jM@mgwFS=e$I0UH@L3rg*n3~ zV8-%1GkN07sPn&W@wriYFvlX>QJEl!Yti2jwC1d}re_;h+5wZy+4=csS+JSFuAF}( zbMZ9r8)$i|A!dU9`s?=FX@cJuo?cLUgMwx*KJa)~gayP5(hzwV|5+qb{CIcb7iDJH zj|K=W9-*DycN5L>?%IGg@Pf!m4NDbfMFvVgLy37cIG6=F2E;HJ#|%Kuh==p$vHyo1 zpGynhHc2RvB902Zxt>?}`U$X->AB+?NHK@4a&C@|$BXafA*RK_^ForCmz7xH24gLyY)dVJ0`UVd9 z)y>`T$(&c+Eq?2x#T8H`c;v#e6X>}BQ!GJ0H&um_46Tt;TQxi+4jU2SixG$o(gmpQ z1i#^PhCETt{H+JM6VitsKo5?eomDYB_O2twYn7y=^s&yX#>P52!dKc?TYPO_+j0(H z;u?ARyaQm-TyDCXhMs~z$Mp*0q7ftrp_;Ig<0LrP_WF^}A0yk5aEC89j+Ex~n#a+I zKawUSCRV~4Wh{6es@%6aA63rnL3br8DVek@DxsfCto#Tl#R6Eiz9tKIG3GvFy3tIGUfdM zBMIJy*HA_7Tx*fQs>mS}X%HuowT!~J<+6cLiC1fqLEo=SpI99{pFtXV@7{)%br%m> zCB!p0ku!yKwSD?hefQ4r=`tRV-w^YNRftF|>HCf;9m&n}M&yTDy!(mbVYOWwx2MJl)E;R?ujQ8>Lx_y)&dG5;vE*gzAO=tD?&ALH{sdR zLLH2enKcmyODZA>+9v%9x~*S$2h;@#H9{#x;nj&;vEQJ7i7bcMd1}mC_9gb&8+#hW zH5%{0F**|n!HW;marRb?%#FKy6dM_Cv0w1K!SjVlEH;%MYr25x;4j|C_%7sM6HS*>MmK;fB#4$k0`k3CO-}3ZIl8riRX>Hd^W) zpnuh8v$6W0ynq1-TbBOBI5!7xO4WD(-EivTrOT~3AB0z~%#_X)XUY8Oi2tCzj)_<+ zSF5LN!i}IyrX#J~$oU^SpjAC7m3x(ZTD>{SD8kut=5)m4^S~i|%YJ;HnK4;w@@!^u zF6^7Xp}+Uhy)H!_A*VgE`7R%y_j)7Fzsk)v%wueO0b?gyp2)dpZcq_fv3xCj&rX&S zd)DD4AZuGm1(7S*QKJhV4W}FXQ3( z4T!o+6}F!_5LHgjJaH4vY4!z#{|P?i-cw785|#{zdS7j20KE}Toam1irB0juCsr)A zY|j><+zD@#W5Qgy48_6uKc28)DKLE&Si9Baq>0AyC#p@HxNM#rA>5mO)u9zKT$)^Q ziHVybM2L}jCy9)VuRQ0Y}YopDY}Bu2;-mYghz5NX;sw zGV|K_YD3d*Y;0^r3Gu&1&fPdV1YbBg4sLq$3?v?@ED7~Vz5Wes7?%$vR6~%dkGF4M zP>^1r%*StlnO<*kjXXaK>m09M^!DsUO;tozq2rAk$Z!y#o zkB*p#`yi|#8bYyUpg^0{d_=`%8QqeDfl_qnZ78Q&#!Q%ACa-?%i+EmxnECCAH{SPBzbEBC<85SkXH|#nz}fA) zPwXw$t1}@9bevedb7dFZag^1@2C;ZYEpzt}@F6vf2tkfl% zblPE(b+N%~#@c6AYCYxOQxZHB(yDF03V4tV9Ru#Hj!#Uy7yM2BiUvs+07Be*9aT!a zFp(&ths!GAN(bhZZvRF}J_8w4%txKEH-ogc4DJ+H)VXsZo8m1lZF|qLlf|F~3JaY+ z6`fU9I>1S7PaB?J*5jj$Y!IE>|NP2t%=L4!(JK}2yL)X!C_b(yXw?u|LyB@rdO2zg zZ`$#2mCP7^bh}fQ!(WuVWD9QXqTgU{a&tYGc2m6r7rD*(b!Y2$Yt~WB{U>6%Zc|Qd zdp^Idg0dB{V9aY6ubFL}|1@CdKbWj#;^P>wl5dWy-+Dbce$`A|Zc0iIR|f{?z&Bq) z?p)AJ9fMsS8vEeCe@?gWC=@9QnjNcgE>|@@jg%0fsqoGz7;XCET1Z8L)C|H|sCx*_ zd`;F7PYwpg^Jy1T8XHX(q=Vz#YSc;>*MMqrBK_P3Dy92!j`5lMR)s2lipSpaWjP<> zYORO!f&T51L`OLDLJ~XwgwzFBhsOHN#Igm~mq^_X6w=!GE>_XZEEZcynINk!#WXM->`zkwdE-cUe6eOryN&i1*IJf093DqL5kV9HC{W z3J(WzOHM8H`QD)pv|q~3!1p##;_v~yTnv#xJsH0Y0okPS>A$~!AU96HraB*8Q9Q5T zGHyOV|7F>?1y~O)e0=)A+$Gff5#Jr%2T2kac%>@#yW6?=86ueu-Kx4}LirThh>5DY zHo@+*E$SL!!1u24ztGhq^QUzGYW~xLRa8)#MBK9y@5ar{!Z_e_5E6DO|kAEv+b-r`3eeN3Ht2j)lVZb2(zeL}rk+PC@oi$SKpkYd!a67g)Gi?Kp zbdB`tdFSqft=yaT@~z}ZjH9lnRVts|%ilwph%W#JFk=j&vrkx8x0+AZg0S<53VOeg z(~O#~u)BNcMFQQj*LQ?^IX8BjN{^&`-2ys*&F{pepr2*d^3bwh?Dw2m!ghes2D0v- zx7zX50v1Ig%gZz8O-@BvC_&S$b_ro!b+vUTzK*PV%CYBYkOX)f@xv`qx@Vo2gG9hB zvj60f-$u9qFBn>s`9BrfV;Q8zzQ6L29BrhXyM!XTRrVVx^w+ah-X|>-#3QKZ8{Re~ z@KwzBsoYC5lzs^J?Kn5r7IPnNuN?Ix%klWTHCF;!Qfx{7p7jykGG67X8dn-JXJX*AKCVPukW)q<{ABEW#VvRbTxFt-ywj5C|vb`uXkd9i-#(f%DAH1C{f%JvkK}wI; z*BQOXt+G~F4{)mM@Js=n!nHfmg4a(*d=_`WxHBbd5fbu#|IL{S5%;3rvsXobetbg8 zPFCDzUeflG32fqGe<1pi*yP(&aF$M6F#1q)vQCU@sy)Wvr(=*{#d4Iw-RGhum&xrB zFd%eTqpqYz&Fj-_zAseErNfH?a~Lo8ajoL-w3Jbq7Y0H((Y8@2@cM}_ug?~3x3QuG zPxYC-+qN{>;#{$3)oyBmGHJ8@nzN!RgRR!q3>)8b@FOfLi$ zLZ-x*dVTk8Wl_=ksVaIg-+`pjx_$6&^7VH8MwsGujq{$R!b**fy7m)Ajx|MorU?F?Zj54{X>QYH^ zS@Cm^!tL|HRtuEc-=}b`^Coow8q+rQr}&($!rT6AD`zmnq3)A6SYwlLekVxx|A{IVSdbp81~1YzVg1O zn)NYV5h%-UaS93}^3VD*oW6y8VqRq~7k5-VJytUIkgu~5c_N=}PPZ*OsAz9=itZGs z&TAKitk#NY9%y;H^h?82T{uREoT+OZ+c6`icSPDEHpp!+Z(@W&p+eiaRfz+ar~k=7 zK?a(nS}^IUSN*sK8jrA>HIYXZv$A zyV>@3Uh#esH;)RRIooTSP96I19xnMTzD{d*aW0iAt(d4<1w(Riut%WpbnFKt?o1ym*QLp0Ag8!Zqh-TyYFM|c>tx?f4WaoXUB3t|D{O^@zp0zr*%|ZS z7JsicB3nIF+-)$yu=mIv-aRL|1=GXlWiOm$Z;kG%_D^-rkXEu5FhpxZE6Yjbi##8r zW4oW!8gySenwE6wNUv)`9=kzgPq-Tv&b-^|+3>&4<`-X&Fs2MS(W~RHkfp1Y2V?SL zv8qq_U(mXZxjE0weBg>0E&rWLJT>If*ZiorD=_AJ9IwajL&3SPLbB%X* z|N3!cmv~(qG;@I(FSAXto6oduqAh6mx75iuvO-DR(YKW(YAFYwSy3k6c!^8*<=8dI z4Sc8Xp=u>@>`-)*bEigY-|aHq8o*PSJ+G zPiK8z$h}v2H(j)^zkbBPR7zD^+GOi}(|clAPa_>2YLokT5wp#^PQyJPr*hb)ZyEoI zk7Z|Y6!;hv;zkJHy-Hm}Rw3?@d$w^T}h zC_ZL*El9nuBce{@K&NQX*e(J>y3Vr&D+^NCSha5$sZeTjTr@rzeJEBQcF)eu*CgVx zB$fCpS1;U`a!NgHSR7!MLDgZ3oKINg5iELBqtoUq0?oAt#=XjH9Q@W+Z0|}i zZzv*;m1RxS^4gG|QZaS*1J2jBom4r~+jMFztTCdiMR(?US*UB3Lf<;Xuh1(aL{nZp z=PgrR?(SZ3@&)BGH8MTYEl%AXI_aYFG~)(~_garS7Z*%ROg+y4p}{06^6T>*Obf;9 zgJ_KDDwWeNZf19X27aqJJA`Jz%HF_nkR%k-*+?It$z+GRo@+83dwuU@1>H!?$3%PU z+1qb*Ii;35ddkkoIXauJua=kJr*JidyXl|fg-Y%yn^rnrcG6W~;clLY@*~#l;@!LY zaz0y*1@r#={>Ar2!B1yf=ck;fk4LH&`n>AN{LKmRIDa7Df_O{6CA5ZjEDiCLee`#-yD^1D%0}Vp}W;|z(J19ENwDm%IHH#lsA8gyPQdSL{JnN6n^+yYy(o9vDnM#t-JxJZVA=z-f$g!J72W`NyY-4c5$BFq}D z)LHzQ7r)p$0g1)jWFFMk`5zo1MTLc>ETdq4&Ux4AwzTw!^AQ_MhI3tSk3Oo|eQss} zFZ@Sv6LGb-5s*N?85@>F8|l;9dbUpUcFn4ft2dnB`gx(S=rF}a^Ssi&$)`o?+~W&p zN0REFPzJ~3R!v5Di(hdZ*9d#`M(lBEaD$JS$MVv(z$z&40R5}WuUeSMvrAzhK|H}MQXIJ(!hUp0lAGhO4qCz1)7TIknRBO z{xA?L!d2q`_YarY`mha$MDzH)+2@v;R~i?X_(fP?YQ2mk-U7|llxR(oF$jIfZ~!2C zEmN4LDt$!@*z@wF`n(g-xE{g;h@gk4&8mw_YZQtt-Xkp{m)kV_$gyL+Nz0h9 zyX@!-CYeYNc#@;5mS=A#q|Ml}%HRJhqSK_AprD)_yi;VwQyQ^RWcvVUuTi#`&yOn* zT$*U>k$VN>J35_2-8Mno3mp1p+J$<7lU=yIWch>nqhFXOYu!2M>w8_isD-l#?W96U zl7pI6F}?u>5e~?}P4;~)V=rMPalh*|Pa0Tj&fCYDxvEcSI&HrGGZQh4Ul-cOH$y)~pm!4aTUei5FCzN?gS* zAe}D&swmNRZSS4}w3DKb-Su?Q=|5e!m*Y1utrrqxISKF12Z&lZ0!`PBWVU=o^O$YU zh&sXgK^R}}B0JGrx|zB_{rx7NVGMO?4%6S0}e==86SW**$sp+D!ni`DVaVseSiJ1r-mggmaC z!F-x(s|#xc$D8{>vy7t)s-eBRACwMFnX%?RoKzL*aXEIKbM7_7`ClI;@g-c`*DhoK zC!BFj^^5VMKzI@8q7Ko5nn1Ca%CrjOZ|5#jBhorxEURiM#3_X(0Z}DHW4!r*|x7hfAu)KX;jpUs5ifW5HGy%)vLR^a^b~Vt!aWoraXMY z++Z6l6p(nMV`64HYpza9*=yq51MRi%Wx)5$XAk5E7^WisHbR*7<3Zes*<~yL^-xI( zI8W`AQ#5m_=8LVi8C6>b9H020kfaN@I|MW4E5q=3vj5abGIAfNHHIrHIIrVVSJ#K< zSIF-HUAvpdZ8eO&u*4~N^X~0PBB-V1(ur>ep61rN7w?4C!fGvH3|%)*{4R*aAS(!7 zV`Slw-jo!Hrl}VOaIORDH(K4{kpw0};B#h_Z1ug7BP49U$n7)Hq2$dxS~N{wD=od^ zP7`fK9Mg6oReL!_4ZcVoK}oYy1=4Pr3156UGiFOn2?v=`F6OHCD2J!YHYQCGcGWi< z@-{hFm2P@M%WH`*F;r%$Y7Y{~rr9+J|4EXQQ`@$_Q1`05N4?R)h`FP5PtWB)TkbvSI^Q)b^H_A;WkB*tW|k+GCWzH2EiAMzvem z(lxGQe@7a?*TXi$7uPaMa_9Zf;COi-7h2?bfgu>V zNU`K;JYVij3Uui&2^~P&$l6_?7#a?21*N`8e<-JIk>it$S z@bKy^M<3T!@mI-hpB(&GbFqtg2R?EzNw}H{z5yXO4B{KZ6sh_@zPz&h&l0B4%mN$1 zREvYiWK-S#g7nUjPf-hrV~K*~IDxGOpTY~oHXm<%|KY>hRrVjLDYX&b=^VP4f+Gui zp)^A*orR_U-t!vy|||z`fpBr z>dBOg+m96-%1V}ph=!_BurAMI|NfYZPF@B+1Fn~=&Oc%6>$U#;`E%d(`^c|9bWxKQ zbs9b*5JC0z^?emux+FQVm+PRTVJfDiZbit{&ljWxnSN#M>sErBGS~*iJDAcrd3XRw zoWOgM76Hb~-Dps7*G+hr->%I+HLbVQ!fsDcql5vqp7y~}F$?b%m$TJVc4~y08=wM= zvbz^PcF~#Uc^cwwTHVt}15mk@@P$bbMMr^z<@4D4Gj$qFsS|9lKlJuAQ^Ex*yiYL5r1nN z>RF8d{D;HC4Y1(UI6tK+nlOp$9m%DhdmkYumw9}nRVy`m=d$cly^|tsnW~@BXcFcu?&{u}j-uf2LYJO~?rk z562mZy&uN?nCU0UF$cy-Lc#8qnE(U{m?GyHayW0p4QW`0WkqLGo`IHMi2|h@WPd!95C^z?-O+dKp)V6Q~2;zNQ zAN-&=PuFW69I5iXFw%SBA0r~ZLEbsV)S>Z4`c0FwshY`wR(mN1TEFpID5syrmywc^ z^5DS(zUvt%$xN(VBrJo2@@MuIp%S@w0(9(W(0}_^AhiLcd*7vrycjyEObFqowv-p_ z*wt2urK@j0f41$_@lKABVj~>zJJuQUT*BeeILESz4S7Znd{xW0UC6MC`^nd2K8HP$ z#NL`&^{zmEegSY@Zdkg26~0!hXMn?}h)c`KnbU;K_~eyHOc!lmoL#HIL3oq@ebiTV zV6Q!_82_WA6R9_j#cw}-;_QD9VF;+qjG~hQ|NVQ>p!6R)+rfc-hdOcm3v& zdBze0S-12{WXb&-VFejPiU{@z-;%?}`1y0ex1lsyo)qp*T4!$_!y$x(LYeWFPlvj=Tn1*rnMRYGxs-!}f5M~|~&QZDL^BM>}zfjKDal2EaU z)(9sVueG3*5k3^&jrD8fB0pxUhAD%q{)M5uXiE<358&K08aR=Ku8Ml@4W_&(=$NWG9IgmUy|99gA1k&E9e-byQ3XMZDRJ7xriGC_F;sOH8^_{ji_* z-bt(_z8x*mz5|g;xo3Ug-Y zh)BkHJT$~wm`_YS6qX%C?gpff>t&kOwEN(27d%KwS!rbCXwq%CapNd_9WQ^g@iZR& z{qs1A4h|4`2nPPfB9wNRyDcZ$&nopl4#fDCusG@llDb*kdQ!y&?A6hGqi4l;RC=XV zY3sh^2fSMEjinkmGpt+eDotVj=l_}ovnh7JQHeLGq-}=?64geLoMhc zBOKayqoZkfhZx1*${KEYt+K{cL`qcYPu%@WHqOgP?i&qfy@jKX=VNLX@vP^;nKKLNK<@*m`aWVI3L=x&_Uwi| z7pbTRE+GRm{uu7-E+gEl$$BEHE}29Y-McGfGbC`4m71iw^Jw<#@meU`7mzfWboa&M zbDFA9tPJ&`C+>2FOREQ`8Z4SwDGlj@k*4lH(UaIdUWtX^{x5HiM*aG6p<>70{rjt6 z74TAp;wI9N`Aocg+nol)(P3~!gw7E>L)?$JSfcv8X1dqz(s4akK<(M~ zR?opp1wBb`J+eRM!kR)GVNr#5y#}lH@U@!mC+vXB9QIq0Q9j!fMKC(XzvnZoR`K4K z`qG^K_=1ETr;_^fo!^aUU=zPB&z1G*E zD!`+E3@rH+Z3{4UBG@37Y03h>InJZjzV_7U=x9I}4{&e(Nqv=4?fPFVKq+?vji2y+ zVTpCFxFjN2rSOMWsM|~ZgrLW$Szz+;3>D7gYD zuHLL|f(iz`3Ys0Spfe#^A7N%?mH8VKAbmzU%+MHp5MH_UuW4$yU2oX-wJf_!GbFQ~ z!{losX&O{pd=UR0z6%MUlJrAnYhc1PX1;+jwd7A%YuMl4CyR~kRvTNqAANwOJNn|= zE^a)f(?d}V`}IY4XWL?QH1aaQ1CNfQP7PHa{yjX|tvQ4Cbs}Acq~XIAk{By)@|&Q% z(-=A4VY4(eZj6&74I3tCH8px#x~YdCzj+Bod;Bmsv4^j2;0*+G3CR*^5Y15idP0bu z#*rEw%49aw_Gxy%``hgP>oGkfVkM?rvPR7qYm|a%d)(u=Kl3g-cV5(>F^AYd5pYLh zg&R5i<1HwKZ2DPIj?K#r9s}#JSg^0+>)1`;8;ZB~+G`mZ?J3o92e{XR#v;62CpyWD zBOuutD~e5&m(Nty#=ih{i<0>shbg9CPNOHm! zE@-C+guzP}|Gt#&VabstBnOmHdG@?UM@Bu7j`U*Fs5Z_m;t!i8R^DF3qA*13r3`pN zzO^qpXz&XDj8E8 zQUV_>-HHp9w4ctK&0a|h$}ipQ&~5)V!1mVLjVXq?5se!N;{=%lTN`X$Nr;9rnk@PO z2(I)g-?+3WW8x1}ibvkm*3j|0w{CSiSqE-QE-2=K)q2bNCwPT>$kj6@-J~FoEf z>`z{gO^V0!r7DJAYwUXv3}P7O0TbiZ+1(7S7PjbWk(c%yrD<=-cVIpt6`C83eJ)!q zSaPo%Wpd%_@Ktyf@Kv<3;P2O~G=)T_1wu$V`BXLoP~G}48FI0 zNrGkQn2^^Ie=gynqmH9WQW`p%djFXdF|U`GmyXptI@#6V2>9^qcmH-b_Wio$j@P03 zJ6Fq4?@2xbpXzEO07h{ZObsKj+?OW1HpdUh@0&$EzKj8ZHg%c4p}`YLzIju$Yhaygje1|i%a=Ps zTP_u$w|ku~OZ3nkGMON{IFnyRm#?qXu~q4CGK6p~mB?eTaD)~JF6@SRBAE?Bzmgm+ z)wEv^ZXbMpj>{EGF-7+S9h+3P%hqC#xMu3xc_!~*3XiUq$ov9EhC;DDQ{sgmELo0~ zDhxsOPL6q-9~Z~Q$~2WHH+;xUYza!4w`wAHrPY@;n7FDdD%33as26g_QT2%A%(}-V zJzVpv6dX!3V+~C***Q2gGwsYaHM_GqAi^x=(IP{}bJ4%Vz7kYgew6k-kcuaCy)5iQ zwOlBRFEsyF5Q!e(ZE`}j*vL0Z@S8Cw;P%JGR*Q4&JL-BLu312NW=9{y=m2N3qQKoDKGTECo-@$;r|B;mgcyqRuQV+ze@kw50oL@sbr78&sukR`)zRvVMYyU!gQGukz|NK)_HH1gEs?=8x(y z)Ye&7`@K4Wee=Al)Ke0?`}-4y8DvrDJ<6+~NkfQ}y-ZVO8JYwlh%y`Rg|UwnNh;M4 zm(JR1=ZiEcAumY<@dIwJs(j-#n4(iKL5n`tIpFKY%E|*hy}oJC;&_0ojIwa=9W=5P zkmlUGcdztMF`SB8P`HZbxnB{JWuDvs%}nFV6}2h|2D>z*9XXPRAaft6ozU7 zRFU>;PvK3Mwr}V1%+m&P=~Ih(#m2qq$~thGj*!`7KHlIrq~*O{4~_|()3!UqH%*z$ zm6HW5&CN|((i}RlQ>7U)7Q(5nz`3vBxAapAedx?pqgDO!*Qs^DOWap4rWpS*F`5;$ z*6-|USa08tsV{~nOFTpMIFxe>pbw{BSp` zX+<2<+{VBRjL2wwrP8@u#1-ThIU*C)xohPdhR4JO1Y}1(XE<3yKmSuE%kQr3s+WVW zjKk(hw`-P*4-4z;|D=KG&yG#m+urnopxt%cFFfN?rtPO%1vA2S);C;Ll-OZ!hs&pL z>y9aFdm^+Co_6UNuhXXhoZ~#Y+ds2uYSE)J6Z?g}@cBf9eL#p2(Sq#d>3Xy2kuEOl zuhoc?M=iyQ(univGMPf3i!Ew>`MN^;xIFp$k0+E4u7?q+>Zb8VmasPEB2I-d0|Q_%rq?8?&x zNQMB>aOC943!KIpX>X^d5(+I9ewhHEBwRPaRNVunXnBIrdt&+9EINip2WTWU}qV`Bs&lzynyuRE_5-)s$%F1&v528R5YZU}g1W3>r3N0afI zGk?PZw?WV)CMp^~Gr1nK=pRf!=sQah+5*AewfHj_uId{X4uk_YilcB0*_hFSTc3uq z=-mhCmO3H(js}gC_z?U41=hWqlV^!L778Ffn{k`%SmJdzrQjm@1u{(_oj(g5b z^7wD`7wRswuVR2|TwSoXkY~S5Sf%IkCe8IrqOi4D$?X*H4*^v`!^KH4+UL_T~ zfX=ANS|;rPVKI@8`3kSk9q@Z-oF8o#vPp2Z(o)6M2hd?v;6;#!vC+}cri%?wx|Se6 zTEDM-1)a#BCk+<*?W#XTZ_lmO+BdR?)ApLltSJ{1?f{dLC3MdvCOYK!cQTt~5_mBT zD8xnEncMgqZZByGAQs`}%q&tK!cPa$qG+63ijgQ8XpFE>$lB}=6Ox8@#6@n~lZlSl zD191CiPkGzij6buOntb$udf}y&jeg0+PN0n2O@cUQ%@BpS*=%mNv=Yjne9G`aRZV* zNb4O#siC=p^3l9cMz3Pux4L^HOoB?vr2P_#KV1UWa8i$7z$GLrYA#^)ifTJGP?1vZ zzMG}EA9u>&UB8@$hSR{7AWSfX#i50;lGxeVHGJ&QPMWf5Lx=I>WA6tH+7Q&@&?Q1mo&uZEDm~SK1HYJ$knJyayiYHfC zM{5a4NmVGxqP@qf=HknRmn-FLL%84qH+E+7)|S5uk{z^gFWaAvif$yo&g**SYl&;+ zGlbAJ(4+(o4!c`hrl)d%E6jg=BgOO;(t6;Sxog@CSp!p1KWJW~Ziv*x9FhKrKi~V& zy0}W+v=dMbA3~D_#`wZRZuw(lV`Ifb|3F$akux#Xti88;goK2y-CM8aYFa=t+vUN% z*X9a=Wu6tgYh#+Z^QL=5pxKSIyMxl1#n%tv<>Nln8#r3qJx-${L+O?hwi$>tT{v7Zv|tccr(3mnxhcSx*jw=!{LF z`e8T4xt)TfjaZ=CWln5?%o_EIq(0 z5AN;x#r14NUS6|hyFriZt&ci~bCcfsZzL4UO=2sb zd~@#Gyu$oE)@TT;?QvDexwh>)d~~u(lWM6EM9lP;FJ-|hhUCqr>glnQAn>&Shc22J zreCw*Qcw((l4B?<1#thrKy9Ux-A6r7^c2~tWo~Q>d5|Ta;iPX?evsJvx=hnQcA!{? zveRw+^XKKygX?A4hZ|09U$4}AGJv?1kDJ|&SfPajf@EVDXE3r^l*d@e3N~1WWyVRP zsyl?O+m;vIS5z>%Z+vMjUgUocPrIcZ0^hwa?NBW)ak~BjXa1LBV?+u?V|&ty0JSVd zlhBCw0g&Twd5%0&jHS`BvA{Oo=7$*6R8?s+UVrf(n`!$uL&cD^c4A^e&hxw!j6Ic% z?Z?ElSMisWSpf^yf*xby1y}%4T z6OJi0l2fuFdCshi^7J@_*bLO`B_MWaysw2&etW;V`vt+*@GFIw}XnwqflfMSF~%xt^R3C>XB%=Q~QB5qN=ye2V^aJ5QjHa{VFLtfsSUfnVa z%HH`0K}&b#6I z!@Y;{45OP_=v$P7LL9=!n(-sRi*Uos{}A1NXMB9T7q=t)w1#2JHRxBcdZp&*?~njB zm|uvKlbXWwO>}LnEz=`?mSC+QypGaiRt*-h8XKPh?8Ib7Y%{{mnP!CVUlclyK+okR zAd%3>Z&$c}K)tW?g4$Ipd3?8vudZ#r05Lj6^fn+$w4Ok8Z)3%g^sI+`4S zj-CBoyNzjsv%oWxD&W1D(RcCH)t59F<4$b-N#x>X-Trp?lWj z9mRRr>SLg<53I?j?M44% z{<^y+VlHyvT&R%rW;BNy+iJS&|7B!(=Vt%e`rhDXwZ8E&V=4E%cu6;0aDSJVzR4WN z#sp$JOExK5sH|dad^|rd57IGno2HosA|q{XZVFt5(G~2Nu3$`%W|EVWs}K8a0AF_- zi(t})hYugR?%sVoip&~hqhZClZ?&5@c*Xad4#%wDO1Pkj74s$=GavQrT1PdUJ&BPA z<%lm~9f^U@fal6GZhcBsi<$=-OB}lxnU5JNIaOKx&)h(P2oGdimAdCrrxca8?nVe3M7jdR`Wq5iw84M?(pbw_bhtDc!E<|JdU1+ zt%S7c^)ldt!mXFHGc)JERKKCvD(U;d%$n5_ zuG1er#C5Q!kQ4o()9KWp*#rxgpNoqvZEZj)0&zEJk{5L7Z4)s;*C&b9 z%)s{EOJh9r;!Hn&_FZ)rUV?bBe_h?#n^Kj1)g>c0?A&~aD`NEOi`utJqR9mo05cW3 z+u9D`Js?bS{4jH`Zc9b>lq1vIU9~YCdZI;-H#*dLWox{kWOtJ%c0;7Ztw6G`i5Lt2 z@D1f)PPv#VU=2?gCrIQGXcY}VbFEYgVBa``CJSq7fv z)u=YJ)U+_UMUFp!QDfv7$oZ(ZK+^6X8I3$3k7}E`b?{pd{3P+(_>kl1y%+TnupqL@ ztQ_N9oXp$(*dS1kxlraC0Kmvpj$vW4uHTU3gRs->HL2xV%GC8_W)r`+Um}*P!IS`a z=B4fX0`7{-iQCT0ULk)Za@<0C0&L*x;bC%|>CcF+s2)1M^wm*{pdT<-E5T_{cxt=v zuDf2X%O5izCF46HUmrOU6M|KeR1WiCh+g*1@R%#des8yWkccwX&G{Y|h=+`OMcL^mQz-6fbRkghXut)7L2&EK$AQvsf2msZLj z6l|`i?*K6ksMJ&zvy`wzcH?c0@d&VzpT)$YwHinw4~f($&HTd``nG@%f;Mr{`_lSf z73?8aiViP-B9{9~3DDY_6IGRzIKJ906jM>}Tg=t98dDj@Svofo3*|Pi*}@~UB<(0+ ztHnLZ$_#7jbLE#Kmzk6@T=hXTRMfwR?A3k%Xvz%aiTU7BNYYeN3(* zzoDA`GzC-T;xAk!rAEZC@-X>;U#3&4RKHE?sr+ae)=}aLSrC?Fn{xV7#4 zbL>a4p#X1yX;bjRl#_|(mtQ7-8b8_A(XAh~wTY*#$Za<%3omErcL&o;>0WmvYgq@h z-{LPI(zP56U(6FyT?)aoiP+;IZW*9^RY}*7@`eE@ndY0^2tK;lD z(>I+T;+~SyeMUXc_0CNhWDgH$_N5s#{-&>HN47kH7Gg=yBx-D8BD$?rb6|J}C#8LD zGl)0!yA`grb2$E+G*M!sPCy-UIT#hNHt`V}PjACzB#Iz` zrhtPR5d1%3?Ii3NpPZb;INv0o#5#YugTtPk!jo*7SU`ZH^hwj6uG{39_gTNrPSj;# zM0o3X^5?DND7h6uz=Uv3SD+OfynqV%`ZVqQQErWHO}ys7e5122j?LyZ^qWe-kvAR1P!Y z&wO{X?Oc6B{j=rkmUORRw?;wu4}7pn?@AIbJu=Ac}_&uT)>O+@$Qg?Rl+uJtY z$bC2q{b`o;M02#A|4>BJ1H}Yu+>FRi3i$SZ%N8t2ZSWfo(~+@t{;)w_UVeXRGIia; zIjFI9OPx%Sx7A+J2&z@7e0qn_rr-JNUgHHM3C9{!WOmMDgjh3&s_-&+Nk zj?YE-Wj&1dg#!k1P=4%Wcw3ug;RNs&59a?P?!EuH?)&%gviIJ5W`t}~vPbqTqlJ=) ztU{&CB6}2}vO^-FkOmc{L`FjzW=7dN>3cjo&-41c|AX)CcK&o-;`MqyACLPuj^lpZ z(J*&KCDc>V&}3n0=JDg@ckE!(wejxufqyDyrc{~u*xj(Xc?08f_cus3R7Bkwu=T~S zEwXfm_-Iab{B4-d{ZH-YJ|cV5Boz7zU`}jNXQ{q9K4-;Nwg2kxXb{<1fR>P2{?XAG zTvsxXA#{%b1_>2SzcBon|Niu_=u@!=JGdCL{SE)s;}ZX~g6O+{ThCODoSYoU;-|lT z%N=+8XVU_Wh(4-ANLYvkvSNa!JIDX=E=aZ`76Bkm$nI}gKtAqjZEeM3Qw4l|9B9tb z0tnl1k_ePl5at9R0%Vi+9LM6GvuD?F90z;7z|Ji2-;38EIK(1UHzXG3tv@zx(Z<- z^7ZUIeZRO#I*dx9j~1I%Mnncp^_^V*pb#vwQTb?18g^F6SFr*0D8_i%*a{s*O2kk? zML8YzI?Bl`@W^$f?Nx@{%Sz%5Vj03S$V~4|RXzq*!e|L|6WFS7V5My$#CG|*R(yJ; zqI2Nc*x_`X@>H;wMAoqKW|m-2o)6*qPVAKbzA#RD@KHa8VNtHtPQ}GD)vjSY^WpYY zY#S6l1ElRcUK9KT5U(J^LUTA*s>`eP=Nm6n8+x`K_6m(N$b3cD`4w3CYMdORS0;hpR3|bIQRCh%hLjKAZsJLN~5V3{i#`@|UF6k{#+Q7|J zYE0^oY`BVD|8!|jessT5(RDF>(?IOUsDES&p*{REmE43rko%ciqrekH zo7}!9*d9w8~#Gu64vnlH7(l8Oyz>4g5MA+OR%*zF<_` zN#Xm;wC`9X=v!_VhU#}CStLb@JMEaxSojbC>DS2$ZrI0?EGuMR^6Q=*Mzr^Vg2y4& zJi8*Vv4tY_lGUl>1KWBeZ$FVNJ#b#HR4+aJD9#~r%a6%PLY*{hRC!Z=6Wi9jF_kh# zoBLH8fMh6Ri9aU4czp~9~3ySsS#UFAXK+v z_5C@r(st)g^a~qoRo4hFJ z4`}#&txwZ*zK5>mRT3<*!d3?Jh++^ij_P^D3BUj~uG(*~Nmd>dTpbETspxDJhlPm| zP{2D&YFGfuMZqbjCW)5J?7DfP2*&2lLwG-CzF$M=L|(Qqo2fE7JD@STwPUAEXj>Z$ z;`T@mPyWKsP#MI$L~?GBQ#3O+ei0lE`{H=0T|cU(6W=Urrrj7K+bVZ3N`N2V+j~FD z9^z%vp1%J#nFUpKm zfn@IpRw;wP3H`Mg87xfys6=}(HX$LJiPVu&kWo-09SRi`gbmQSfkoj{J9ieRbwuPE zbb2ElHy+~>A8EVNYYwwDzDq13It-6j25Ec$fG(<|IU)tSC}e81WzmX{&i&@0F|8hL zCk{NI&==x(I&`%3z1bQfpi}xY*T~Ns%wFNeHmhqRAbx% zC-xGK;qxGDX87a}h2@U?Q?43MmxX))cM|$6W`^#Cu&3SxqFtxnr+O=!gX0!RBp-)HnSzla8faKbqQdl^8 z=n#QS79JS{psp9DO-s8-%om~zh2fR2g9Bl6jhtUPHTV`V8ren+eTH3yT`8;@JHwEP zF1;1W|y)V25*Uy<>LD0jtbx!D?lTiNt4IpTyF75%P1&MmE9d2^4r2ggrDBaq|C+kroQf`DOy$ps%M}juv@lIgO(8y=URx+-4y9>} z#=D(^CJ3du3(x5QT%c)zu~D=@?#w>KXi|i85j5tV23P`oGuB@^LfE(M^&HZ)SCM+CU>1 z_4ww^qgb&4q8K~C1ZNqrzia>8Akb{=-{rHtV~))Z#WGoiltP0!y@mq*d!(I&DWZVTnf6~M9YYP%GTyj zcw7>gJ;KW%e-}Da0G2V9r2WfxFXfrQ0u#pIVtXU5?g~8({XCp!A?y6_@38sMH0m^- zkXNX9V|r6&lQ2h&oi~&QFUdrg5b4To!wxH<&jgA4WEQI*R_Ltd1@s#4hH*dUH}3!v z?|BX~jv2(asJjBgIL@H$vHNQPt9R`I*`HaShQfRif&6{NLC!YoQmXh91Jx%d_h2Vo z@B~FSnF6YjS6{#W0WN%(0@GIq;AIDY*L~3}P2WNLwcMvdroM)6_JY>@=Ns0lpGo2g}3t*0kaeSLjD zV5^#((G_^0T!UgRQ&na-->zDPDB9~l4L0cOZB@|MmD zl`f(PZCcY4ih2k=%7nyZ-#T%pKE!mWH&mWW;*s^HhHUHJp_N192%yU2!yPO=*k_M%6JrA)NvMM8Ll#Y@=QvmkQn|-EtA^gm zI_IVizskUd2yev;NYBKEJahpVjDpL@BIgqn$fKJy9iPd4hd-tx>KN|9s8?&ri#yI$v8S0;FHt)5H!<19PYavq%TU;@^ z!ex^2w_;+N6R2VzCEZVOFK)q+j(#bg$X4R~nFp?rnu;De9B~MzGL>TB5fGUeMMIgK zV-#VYX}A}3hxGmB<1Qc5jo(y6K@ydI%%-3(jFkqn8#RwocQIM@$Qy?FAaZG7k{0Ns zBT3|AD>ASZMQS_G?dwWxV6#H$Exxx&n*m!L!SIVNFr1BQ>#Q~9>^+dgW0nTu^4m13 zZD2F_zMdW;SgQEK5RVC4!{$Dncs%e41T!N##Oqa6Rg&*fx(h$j&Xd26JG-X+)&u=< zA=b}Fksa~G&U;K^#l$6{kU)xwan6-XdpmgB`sE?f3ye@R{XRd!uk{FH#KF!Y?(3j^ zZkO+l+0|JM`XfT*Ltoz%A?}XYNosG-(8gv$$vufbJhwEE_)J1f+x&{VC?mf{4`g-I zhDqa{uB84-egASM%54=}U0DXM**_ z&UG^Yx)qk43k>PoE9IHiV7_z|Y<$Sv;rP;Tk+b%tT}9EZp?Zla@-pc=)a7N94wb!# z(3u8qpfE@9Ag_%@>k-!u)%8~F$N!(6I)LLIm*m7PpL+CJk{{dXlN29x;YC_D)9-G7 z0=3O>o=m&TpXEB!5N7hVJ=IF>yv3N*g~D`m-~Oh#zS5@uNjdo#g40EvM^^XD;nry| zJ%i^qX<|JaKU5%3??WKv^}f7`u;TP0?C$?q4Ej8ml8YXk;t{JOGY$K;IyKe!`NW@Ae-@I2oy*VJmtMa~{5kb{ z=i`(j_YZk#C=3DpijHDM&(vD2R|}^?e2){WtJQ=|L%fD|aM!{yMPjee!ra~|Bm#Zu z{62JSibZ`WtwoKJFnpAfmF)lSM;by`s^{4sk&S7yaQ^!Ex^Agb<^XQw20G4ZGZriNU)#V}J}4 z70qUey^ak#pN%Pq{**`*?6@M!t3m7Di-TrcWN}UC+}R(j?Ax5;6`j`C3Cpc3fDzW~ z8X8=UTt1PJk#PyYm^AVB2#+WQW$?LQOR}z3XospC)SdJ7V*wmt)VTSoveH<>Y9LIl z&04XRE)caAvJ8+Qs#7Kpw($1}%i}QcFR;T!#l8V1(AUR@FZ*8#!>QF+>y=}9C z>oa*vdApI)GM?hhdyn;SP;&;pzE#BJw-Wm{x_s#Dog*e0=Q#P! z!Xu!8hf0m>xTh4W+uR2U1eYg0c}*Ml_HG;Iy-=yOI-CaNK`}QJz-fRwT_b0=j&hU4 zXge-Jy8vnl%ay>b!20sWtKFysLyh^EalByN^Tb437F~o{?)bcZ@a~`cQ^j_(Y(P`x*nN2rDsJI! zI$l+??jU#TbH>yp+jV6lsM>y@VNjM3Qm|vTJ7VHHAa0(vr5ylG#lZ(HrshR?fl$TE zQx=Uc?gky#Tf?uS#q5%03qoG_m!~W3^{Nx~pP?f#ILQOTn0sM%Htz{xP2jcpd2$2O zwbEk=g{c%13Y6@e2AC81M)aFK%Wc9o(hpI{Z0D{NQjffUU#(JB<-+5~=X-4FMQD3i zJf7Lz>n9g;lBH=Xcuwk0_k%h@h)TEaNhWJTF~@B1*CHEFcbc*U^ZgXROs-0{42mAr zHr$P}DlS)On5*}bEiH}5_3;Q$h~_F?nc|_Rm-oam{0L8F;o{1KE3mnmqe|#9CFKS; zyVkjNb=3gmQ~5vgQ8_iodhJAI8E}9t}R8se|f4iUI;Z)Qxllp9x&?R5>aC9u%}|*N5mTdT={`Q zE;(A~zch)XMK@T~_W5?wkmb3-PtnNXa9<^e;$+f*anC^{_l{obFcjKZ0YYX%3&;EG zs?hWrYn8CmE*3ejC-CpM*LRcRTFlH-zI0b?g&eE*uw>ie_RUTOm+#^9G-0@(>b`Cp z=f6F}w-xO1U632Vrjj|OMeMtIggS-ViIy8s=K8Q>* zDykXQ>YxuvfrcF&V}uX#!!w=>pEk!Ea7tQjvfZ;tfpc5BJv@ujN9N+wwbPt@W?H-3 zs}(6)=x;QGK1WjP^DUX_axqXvv;dWuJx@V1Ut8uoabv&t+|&E zCCyrxXUgkz-#9f?xw+nVhIO?TlYGErzz8X8!65TswY$033HN08PSL*cZ{Dbk%Up?@ zh)j!Vy)mKs~*iNa(w9{ zYZu&d_Y`S~$cXnRzT~L;xxPpiZsR{HFe!)3%cy=V31kzz(yOOh<}t}k>4 z@u+etE;HZ0sHlI`vBrbh-Un#LZt2~4R}PRx^Brvjk@M^m!tZ5OmQ&`f?u`*l(j|Nz zrJ|!A_BGLOFrm(Pe~Wbc1DC^c*7^Di?{cnk%Mve$0Tb!DI!$+ItmRfJeXEXgKVpox zaN{U5u*p<#lH^wLw8OAG_q9C_R1e)o<4?9ZI^3h2&5VV#>OW!J8tjn9e0n%3Q#HNGMalrO)5;ZR$8pn%6u;rSel=f1$2&fFzo)$`7m zC@(L+TGjMv<~(3Y5!KuJEobv*CG5ZBaQ@`ca4#;i$Zr1uL$MxkK%RN}$7(q!!fxH# zdS9qUaPM8JOMT`0R_DgMi$t#>sMV_Gcu1FAy6w%_BdM%-=F?N$WJ&SdU6VsC90)5wFAK!x2K!?9|c_G zs!9e#UAC4LmHSBZhtTh5iQWZ?RV^kv|p8Z?C1)d3RAEvwI z9O709LYJjib$=N)Tb1mTv5EW*V?Bv&(Lww zNgOT%w^;}x2}9U)%%IL50^ysEh$N8eD~dk>lmG^R`~j;@_B1DiSZ_LtZYyMH)Vw;@ zHTc7wbDC~exT0?5hSX|kH*A{|B11)NCb_hjec;rBs;Pry?c&REfr0!}9)`!)0KY@# zYSNbC@AtLwA-W8-pxu^)I|7h+?r|Q~v+4zUNN(?<{$x=- zuroo0nyO1GJy|HC7$08R@!_G?pH&+vrTjkP@=rgdOg%2rWFs{c@J)~;>u5HwgF`tF z6?@C|RwO0!%Ni;yZ-4>Rbj~}q{?HXHLOJ|3iF;o6M%%4%(?iPm4nzgKGug3(NX0#) zda@LIzLv+v!yXPjhco!6$075@90J7Fa->P1DkkZYZ_)NZ8_9J+R*CrM|Na+q;f0*f z6*Dkev?t^yJn;Me_g`Lqo6k(86@jx>#QHi4<;h)5D4sO7eXhyUC{vlm5!zkXrpJbN+ zL|#~qB#@*|X}3p!CHzxI50^6!`r4b8*C~ii(s{y=;gfunY3%Z=om* zEP4DAnT~b0k%p0b5vh$wn|aC z<6K{c>jUNn;32<;hYR`&U$wky?HHj5McIq91DJ$f$qji1jXemCoYe=E$h}{%<0TRA z>fSl^v@PZ)FLE@Y^aTofc_=)R694iXz>oYDB(3(1(k9<$_pG(h$!rL#Hl8_8Gwx7_ z=0M^!jhaI>p)tm0DhQZfenk=6<$uhDeCQ4)ft-S$JiV&otV$^`q2`g?o=17~2_JCE zilwh9=-8p#m^+Pdo-rr!zU?7k0wC-oVY>2sPs5lK=Y1)^9%TNdJ(CI>Xk%LOu~b6; z$G959EQ%gom)*0Y+8~^_NT&z#$hoDZce~^kgj?ge_1bFXtx?Y)#d^A&?nwwrc8c(i zp<=ly)TkwbO#(Gx_mu4V^kM6CY(oD1wb^x;`o1mq{G(zhv90F!wEP0Y(`X!B^h}Pl z63uTX?rb@(X`yq+@MJDTelB%*r3J{eeCsn$8Ie46t~Kof?eQSh!t-7EM`RsfWy?6} zxF{2;aF|C^Ig8E(#B@8ZCv}s^6?kaP7%ohGK7-~B@?H<@)=l&qdZv>k0ICrT+8xT* zrWI7u^740}kjavhWhOADTB;V*5oo3lz4Pgr-OMk$*5qBZKO3rcnAH%YWQiemHFqLT zzZlAkri@Da{qW>frjI}yVPI18hw9QT=$abUp-te~89YN^jt@_tJiup>AgHx*|LeJ- zFx}uAA}Y;(0{OIGHScT$fW9-sVzE&(=_h!x+wnCq4SDzb$NVP=U3J(3I{gBI*&5&G zm()IG_s;*J_HzlwbDn{11+*h^VT<)bQJYuG(uMRnx$eKsR}P%(37A&@vD!p!t6N`sG#> zU+Ru zo?dEG-%tl#l{^4mDh=H1(;>U z`&Roo-=O9B`E2Nx4feOQI@~+%sJyE=2UHDOsd(G{4S{*8hH9V!d07sl5QLhyV}2dy z2Y8fsf8AR?hAOy>kh7=S!GABRHS_2+E~m*yv6P+P_q`IL;YR&d;b~$K-9G3&g8%LPMSUzOoPhQq%FK_PjLdfj)eRBx6o^~z$=Udr zfK$fk+uCS5FO89bcW$#zRIMXJx;*)-gQ+_7cTRlWrE)*wf;rsiz(DwpjgVkt0ZY*&jW5A0 zJr4Y%@g%Sz85*q0-(GgIWqAAU!Ray3%r ze(k&VvWa1Mj&$b#G0$X|-cwj@Y?P1^Qn2j4knGu8UV8eXYWH;R?|UDGi+_1t>jN#2 zYP8192P--^91+|sl_*}rt~yT0H+mQ9o9Jxb>Qu=I2DmsCUfRevsJQ*BoMWUzvuHU7 z{3%*rYngYdkq-rKhR=rz>Bw7kuq3HPKH<0tmhpt7RPc~rkq^4<+Sx8{8UqY#tv-M( za;VQz>vs>6kNW5~`|!2cBR=uEyeV^oGn=yAU^4$TgjRkOa#p<`?$yG&F7Jq2Na_)= zu3~!P;z{)LF z^1!tt949S>NCyXL~bt$KBnXYG+u|g~75|(WF@LxJUbfKrb20dl=TeD7N@e1(v?XlxsXX0-oPb|D4A($6F7N0>v zd(gaIg|oPRJw!pue%>oWx{QG;>d^ZWAGE8DIb8wX#Hg#rrT3)D_Xr+8!6V}&$0H-E z%?_e4&R^)GvO}Qp3pNdzpDN20cw_xWUk+w3zi`)i`}Lb#XVm_>;MwZF+TOt(h1_>7 zX{y$(gQ=rS@il7c*W^BO^jU5KCzbgQj;K}@<+XK5rHPS^{p7?dUw^yvLrd)vOTqk28tLrQSOP$j}_xU5k z$C1%v67xmLu9Nli5ASE%&^ug;1hdVKwH8z-u&&M!b4&{-9y~j1fPVGZ55L0s!v}IK zw|dEx6!+eI{ycgq(|rTI`oev#!Ea6@;g1-KIr&MPJhBe3*KPjHv(|Rz)U><4>B)UP zV|%QunD{x(Ph@k43~ftX_&H{>#W-2J`;$|C?(HJpD1j7+z0Id>7TSgvKe&6w zzWs0~(qHHopZp_zn(c?qzH|s{-~4-f_J~`Hh&@OBp3ps0TQUNE+1+g)sk~0Mb`;q5 zVHt~)o5wdPEIqdkzY|T_J7lNCcHGC;P3fkppgb<5XL*)+!IMh`H`+H>CiPun0s9)( zZaBUE=JSIV+rnaFj|PsXr7~OOcO-1;WusH6HR?97m%f$Uwbi&^qpRR5eU#ha7Eu%fKVXkkr`jytJz!>hP1N7sfY+U$Uyywto7Q z{h{NUW?X38chFEEr0SNwb8um5t3i++DChzCF=yqb6@6^Ih5f#MOrkbX2)ak~Ejt zJ~q3jboD9r>ChUxDu*gLojG<#juQJ(!t|=6D|7@dmo$YQ&Tampc~?%-Nlg*9%AQki zv0cTZzRv4Kg!0*arY$KfeCdrt`ZibPEh1lm(2cPUsa`enToc>pDNwepno74w-zd&! zQC>M|k0V=Z84eiwXz2J=)|)((VwjVo z`Xj73WXP1yUlvPpVUI_?hv>0-v;!vD38L-m-A}Yzg*%7zpSgr(O_3KULlW4tV3_hK zF)NLvCMIy72Y)+f*~X3HWp}&Q=qVC@P7Q~$p=L`Sw>5gQ9pJV>k9A+^e#gQor+j}w zp6Y7x=l=4n0{P{~Di1ANzESs)wJw~CF^<(KyLk9f=Yh4K28CBOo*}C-&F@{LE4THk z=DO@j8n}po;F8mBlEiX7C5=;~a|%f-jyKzKyyzI^1_Xo)I(NLxlu9#L-O9CYSIrVH zms=c!fpvbNg4WV;uO90KnMV7(O!>oE+q$*3ob7`=F`G9U1;a-ZIymv zX#c8GmyDKBQ#JOKwZy#8Kl;)z&rESR5?G=04SM<8$^+B6I+5|VH9_m%?<=m&=5bHT zCRFiSH-Kt7US~Bjcc{co`lwth2fg3syL}ArGR1YWdgbJ^c6r%!FU#6!aVyDBABfsq z%0PE3JCdNC;;3jH`GrQD4_`DSlMOSuzU8_@$tU~3#;`V0%9(G-gO2_&GY3ux89mcxdhIW$cUfxsp>2N=axi<$F z2TT0QIkz3OQSw^rc9m(>YbbN9-f~jrx$d!oMTaOotxHSSc5Nz9Utp5i(_mk*?`rd( zwaLo;fn&lyKHayxrudjS{+wevBc-SBE1vlPuX0Kl;i(pww~!v6mhzubEF*avD4a>+ zw`DqF=7vynf{^|WnJmdg9Z5HZ2pd)z4rT}KUq;;(6ww|(NKfV&MGw_gvbrA4dUKKI zr?A7$Gm{?o`kW-P?d8-K7%uy%ym0^gsw(3gC9`8t4F3WhpSIC3syNR*w3O?1ktaDu zQ1tU1{d(X=Z~h-|uAQn6!c@=XP~=UJQb$}xhpga4K&it9=4z&p?&ppN)FoT=(1lzu zWA;-1y~8$>?1eIV9lfta#Z#=6JoY^5iTt)o;XFq(N{_dV+XsZq{g<9JMPf{};G|-D zo-0Kt<$$62ZYB|Rld|GIL-(rX2 zM5sT0;^zFd9c>4SU0s?=%uOpCc@kfCrZ zoNbb)OhFd?}S-B7`r{E|SX{15lwpKFUW0s=35 zck&L$wc6BAzt3y4|MkH61mkPcu;gcv`t6NApEc&CrsDc`?WQgdJOq%)g-VSrI%{hN z!0`e>*L23secgG%KJ+KV?5Pv`CxH_%tM67hKhu;i$=4YFE-EufXT_3f0KsjCC$kQy zo1U3yPsN19avn;(*1SJ1CEIJxkG{F&&sbII)^eaV+CB5$9)q^AoX3gow{D-j>nLtN z>VBYGLf{jhW_8B7R%XY*m|lmwr@^wGIp&#n`3!-K6FoXyIgL& zz)hW!HSLH)7bd{pYQ*1%%9OIY-Qj1%Vhp|E=Vs%&5NbLahD1At(R%iPKqjWrrt>w<7MymHb?sJUAXGlxE$p7S5 zZc75^h}p0gm?J%UBXkJ{`c~AoO|E1jDZH$5>G|QC+Lc03U7+=yJB}g13tnh;liJ*( zO0O^u-8fZ^8foW!jue{^8`4{+(jv?&vsSEL;c*KK8)kB%UA&m zxXkuBY3I8M6+$ZYVgXsXtC^Za;xTwSy?=8(Y^a;Lv*S-DHC7o5M zy_y=IR;f&?9skCz7YzH)U6ownwmhB%j-+#meA<)R^Pbhl^(w}yg_}pjYcA=*4mH^e zu!`SsaM?i1e^|f^W+%&DZ=vk|ZZrVV!AW$%!5(@Lqz9uw1{N}O9@36N?6_)Ca(`pS zq_yk*Q`e4N-)U(=D$x6Sc9awHDx>U*|%2 zFYasf4PUzlm^kXVjFI?(s71_li5$if?dO@-i*wU8g2o30cBo$Jf`ZiZi;}YrxoOZC z6!&|zc9Ryk8VcHYZ-2Jw0JeoB94!X-zHq+IcBko*DrvFn&7C1W)a$P*_HSEVD?3MP zPD-y2+M4dhXpmKXXLaqeqEklw$uEAxn>Qdte*Hf^FXp(v9`L&AVx7=$>$7mE(h%mauw^arFe#r%CS4lf>e!qD$i* z0W35Pv3JFK14*+-3g(JFj@xGj{5*T3_eJzc&QABF?)VeqP9>wHZ?}37Edk$aw4R)o4;VG!D;et z#6|Nmt1l@%%$*Mc$LBtWZ4MqCSDY>}?_(0&Owqws?LjP54i+)je0Y+{ znR6xjohNKeJ`BGzXuvQp^sWkXIt6Z;(=Qb~&%0KLdrrkD-h3&vq$NrdHN7IhU0;xP z2c}=wnfC78+oz)9<^{PTzS4$;AamZ+NY%rS-mOLq-t)J#-`-9AvT&R8y;ZY5+VG>X z{2+mX^|o?~R8sk&4Cu+^&0pNYQOtx1#y8qg7EH^CJ& z{(w0cALYKYenv!T~jC zCwcr*riB%zdQ;3i;)$iJe1=D&2Tp<-9AGnh)Fto@7pxtUcDKvcGV_Ze*q8Z z<`?+H5~1K7uf3Jd#o1@}_@q9^5mU?bMyq|Ehg#h| zXT!wwbrf1AM@L(@QmQQT!Y5jNBY#{@`dHm=$6Y_Vac;g{O`5)}Lj$l`+?<*gb&P(Y zqxqB33mcf)=?_{^*NFD4NSN>|iWP zlrTD#x=o6RKW2NQ)E$(r8@*_5x1+4&SyXV+>%DJ(R%LG2ZLWLwC1B*N4s&9kr{-&6 z-4}+U~kb8t|bAx1{9h0qH zS$tsGb^8xkk z%xApHyQkGfviV&ndo=EC{xOj2c2voJbl;AzM^!3nr${t{rRf;oEQCjS=nk{{3XC*TJ8yEOAcH_;8WxRxb`yf9+Q=Ngdg z2j`~4w82POaJKTK44*aS@x;_<&zjESPh2lqY%}SZ!hRE5em9y z^$+>mNb)tF5$s+Q<}9o!VF#chJQ!ZQWrr6H!O_9s;2)j~6G~?1&!3;1uB866y`OEe z-JDQE>BO-8%b@Aj;Y<7kE*y7?)ejSi%d@kw%%T@$TnMHu%J>qMS_IQWV~omy5lOhg zmmz80-2OB4{)4uwN;l!hyah~4D_F9Qj%fhp;NOfMr5v&SBW!YacZ$e!(5ZD&{XFIb z`xj*#bKF9P>MhCIBsdO;r7zx^)bjs{nKLNImoYe0Xm<53U^zm~0^enLNlnAiVd{tD zPADPaLZJj9?4FG7UxFyqfi@mK@#NmQND61w6QJ(?evFGW7aIm4j32AtohlX!UEP*- z&PFKl@uBRdVfMzJ-r~oA-NI$nESTz%rb)( zw6sf$i>L?NU{DT@Oy26?(I>xS39z<+pA5!t(7U-Nfi<13 z^80rQ zs7lb!K6{D}`XG+CSt3OR{4oV_lHi3>-up)^tD4U~H&WV0e6V9M;MoVyPt(7@91n&}C-}r) zv@O)i2K#JNj;X)Nl6C&+RGa<_F6PW$J+pXMz(!XA>$q`d!yNVq3c+z>LJeP{>4W49 z;hxI>{cZYn%uyvB@XLY43l1ojXw8ld=&^C^-TNN6J4Ow;niEt?w>5pMrcY$+q?e0 zgTGg0xkdch+mkvmWx>Bz`m3C_vZ*S%zYboW+ArG-E2Pn%KYxQCf|BFYJlL#w%tLB0 zP@dd^?BaRfO$i4P!zm0TocMkD6gZ5_i;MKV;weS9*@&m%D@^BIqjxBmByb;%6=jVu3r*eEI@K>VK{U}gjL@h{c? z_qIvmw*8+U(6_>&_&+}ollyNR`uAs;bePfI{l6a&j`-gPV7h7yTKuotOz;A*H&14| z|Nd6g3w^R5HnjL1%@_6l|M-CVR?yY=f)|G7Ye;e2qN5wPC<@0&!G{Jp&c#^6{% z=E8Vw4&5E>{bbbDKd6sj)C(aHQxPz@I)<_o)lKLB`L}Vz%^%RN{rLDiu@e5arSKqM zFZ8zLUmmT`{hu2g(@^IbA*3&cPqT0^`w zLt=kch8U0T9HQ?SjkbFO0e&hJ6J9A-p{laTQr^v~yBiG#oOvpK2SJvB2Dlaozmr3X z^R|Cpto~Nwm&F*McS+*kF&b~#=y+oP4?2PiN1Uz+nm)i#V`T$V7`7V#8?mMcp%$vz z&Rujcm?{I<0sC$aaV{lyGuR2&Fj@i-9DaugZUj2aUIalRchDioY(qu3f|8e}_`!pOgXNKk=bBL|b+6XWhu02!>>X+G`&nslY>@fgM>b*xrn-dwmeP&uJ9yS>*i(-}qOM6;3b02+s|Ap#6P9PtIi`hS z#D&la*JHx(3%q#-S91)n3rM|(0}ao?Ron>WJ; zrohNru2TpMfd3`MXV*w+yov0>_|mI0H@uz9)`V>cG~po&?`?aK{1^k@pWWT|S~HPUl~CF9+`y8TskP+fS?;7E~f@dN6XE^4Ugqz#o` zuVr9PrjL)qHyo9RSccBh@$Bn4I7oBrk}idyOfaTCrLMY)y!*o-UEVq$iQysMGO{Vz zF0XeoEFB6h+hdR8UY?_p_sLP`%VlN~ouDY*D2!!Q*{@K#=XPK3*1e;zul+(zL%`5j z>jdMg_sFldg~o(wrr7S(XMNe*H|LaL$`6&xtl1UHv&+}~jrK@dA)FqX$c4mPQk<-41NiL%KEcRBUkM;ohrpM)f6te<~4*ZGIR}8 zQIWvoM2evwVG6R@fXhCh!qX^X(+vR&LAtYy%#a_5&7gFQs6fvB9&I0Zda=Dp#1nkZ z%%MhMQg*q0D{wLBCnrn9MJ)YP<=)OS^&FpddkbO92vM5O=p76BzCA#SfS24F&$cgk zQ^J@aY!AnK{=9@uh%KSN*G?8S=2kltwwfW&oL#KfVtb3JKLD-FY-~|f{-dwCeQuaM zLH5KxC|`6hiPjFDJtaDA*0aaI?CW7Q&#=bIm#|UYw))$KfrVt$<?#67ClfL_zg)x`?FaFWhA?G;#Eh*Gd>NUU3CZRuq61YV}R7u_6#GJ)X z8{Ys%$iCl~yceiy9~$FjDc@`gHl($>pef^2m;BgxljM%QW`|yGWdwv_Lx~!1q_U5J zyLVIMPN>x14S+R!zRvnkk01Vn79-Zb5f6ogg*H0`SC5W8zI6j#K>2vKA*%E1k+_^w zojNMtBoeVj=j{550<-WW=1&4(VuE5Q3D{;h3AtR3)(K`}TbElyect0-Ma(BsdpB!% zve7RHS>(k_etgy4-R&M>eK`G!&edlLyqp7iMczPO)j4DwI`uC4rlY4iUvNnF+mvK4 z#T<6X8`g1>MISJv!ogS4wJM|cr8xl!(cPc`X7jouk|sI2i30*)UoER6hjttp?umCI zU4(}D);@TH#QEoz=SUs?w`z)!Au1x~ID|@W=QHXQCxYMQ7`BhzabUE!YdyUsQN`2Q z_4p8kJ*DiL5Ny;exm#N3zL1|TT8C+Z`9VciF0Q&aWW|r>nEGyK$d;d8AUVlobkLTS zjqPv_&AH__$>-=!yhC5qCUUswdjCcS62sV;&->m6YKp@h1cSGy(KR3@_?F^sUSgAy z85YaLgc3AQs9xcq&;r{hzeD_si0kUnlw!iQlL;puZEV~2=L(DX%dco8d0&dUKrNL2 zp*`enV7Os*^hv+$NSnB38M(b`Da|!O0qDgXPiR3LA^8LC7SG3otz4y~;+J(JomI(?8> zR&v?uRfclt<7^B$T$ZwR2NJlx4)fj1JJzCCrT4!7V|y`0^%Cc{MB&@TCrd8x091)t z{i{{WKQA6a$w3UYG~mu3Tf1Lk&CMsn>A$HIvYQzsq%9i{(ijx4biF}?YOg~%uqm$< zc^kqsv1!`HdI@(cIjC2Xo;{sKMM2!B*i!BE6_ObKF_rb+gbFz3&ty@YqL7{CZq3EtAvretup+XQ+Hd#ZK$bg?n*~rnmIQ{? zn+F-Ps0^|+&z!2z{h>Xnb3phtZuHk3c|feV17!<}!K1B4xj7TQ^i z&*aq(Jc2+TahTYwvfhu~Ozo8>j##h;_p~7v5=ENT&v=@E_bV;x>+A84Vgomz?_8b# zzSs1_kI(&}i8s)=mFyqeVlr24CDz+k3H2)KI!U@9Pb8)lC_hDc=reMKrT?hXI{x>7 zU&Im*m?|nRj@ED#>l^L_qhMYm9I$tsdfjMD#t2-X6nK6a{g;}~AAtpAJjai_eMy)t z^4!PQ@xXeru;=D^Hm(U|&Xz!Te}`7R*p`1EI#}-Hp^qDY+xq zcHRgF=tMwK?;n?1xt2zKWA>NBqg#Z2%~D{Lsc6u6r@GiO#y9CnRrjl zueE1mh@F^>y4(VFu1%qF-lJk=BwGK_!DrNyoe&J~1f*7*q$rF$HUqh1*13bp0+ND- zf>RrnkAGk2$sgz4lp$r?a;j}ZZ3rE?k;XBs;)0A}x9oV%&Je|^^qn@Qn%6K~aiHE` z+@(2ckMM6xD=NXA=kR(7DcEZ4gv;5f-$-kInwq;MTFHu*P82gC_t@P;%(>SsdV0`y1O0N{A zpe?5;dafcOI6J?W}ONS4z~J?AvWzZCk9&*vQaso`TEqK zB2bMb;MaLUEyz`I7ZfVP<~5`oqFS0Of_QWI*=6tnj?@8v`W5a z>NIKuOeG@X*`7{%%+QW^U`Xl2RR5DF7!v)b&x}fnA(~7b=3|C29_sTSgMk$!?Z%_H zz5LS#dsG6^Is8rb`se=F!ixw35}N){RY1xJ-Kl_rYt-K!Glg%JukIgEfN52`7J)0k zbBAwRRk@oEW>}^7R{R(k$O~ly1&JYtL^w5gP8$VB7tGAfl_9>O$|jICVG-f~pa&+Y z5MUpm1);GhAJ?z|k)V!#@ilCa+N2~%kHPUDCJ)eHE8vbGpYai1%Hv&ql*PzZ2rt`g z3S&4-Ai7osM1q|E_^3Jup+1cl#H2u5x)h?PCbaU*2Iv%H6@VV*QFka_!&CkT;Q5=F zqh6TAb1BF?N?8L=1R1`1NC0l4Hy?)e|at9PnC3Lug)!s%K+8 zL^d5^gsN(bq@)KXRi;@J$q}_gbn51pWBnH$3(hCc)%?a>S$Y+FC+UPoew8bh9(S47oqsa1!owV&r$+0C#=wjZBs1 zfy`u7WakE&$+ff|Bdg%$_WJSAVM2mc%s5Q0`|sBAh#-?&DR{V=6!9A-aybZ$!w)cTIVLE;`Ma0nP%2 z>os2Q6L0j3nlt4KBCTzp1c+nb+Hx>aMcC>8!AXupI|d!U%Kl0nzi(kT;71cQ>I4`b zj}FN5G)5CI5Ei0V!R{g zH}+Xrh2T=-Jv=4cy5ww&7d{`J8J(Ki0G}56#~;-= zABtwLZQ6FymmT#v*0Y}uaJ3h~*9iPMs2X(=R+BwAUi^hk-*Bi=LW_tZIPHnc?)2)s z!(Rk6Vw_kD8zu> z&fLc>A!}{|=e`|d3PmQuZ9G~q#VDoL4UCYcdd})sjW!ptYH(X?-G^UU*O{UTj4tZD zF=8ElVeQNocud8=_tW01h>^oL2MO0ujRKCuHxj8$Pw`KWF;m<m=`FWqOr`<}opVt}KEoYTf^f~Q6EFd?GW6$wNv~RC;a=7El!7nxb;ZZ)1X(NPm z+@{>nV3CtWvneRFX-Q}(@u#oi8B?x5`w=wShXXyg3}FDrl<{_j&;5-LANF1>fIMy&;K1qy&8^ED|rl&}D~&`KApQ=k330A>fG88seXa)xlJvxjuQd6dmR z=R7EM4Y{cpVu~e_eaNNg-M4?iM&STWWzsBTwjzKWzSJhHidSyk^1|i5wwqL_8xVA& z@NdM0ycZzGo!SR=ymctL0)=)Hs_33d9udl`t^`wEIxWpLuiKq8f28+9I7tC@D+ zci7^MY434daJv-`<&^=0Z<+B{b0#v~WWs&PA_g=E%oxt0wm?-w;6I4JZYsZ{M~=q` z3yq(Pk>j(reL3UmRM&ko|8h^xh2rg)UFe~6@({A^5o0d%TJ!s>pV<|7fr61cKe3c= z+@1TOX4&2~=S)hv|Btu#4(GCe&Hi;$UqudDmMzrTN;<9Pmhp5wUxxmzEf>w1s#e62Ixti;@i>b%n0S1BLM zfv>3Ps1j?;o~n=xo|PW=0y&?~5NP znFE4ss~UW1Ln3KYmLm`AsQ_$mC+n8U$5t_hiMcW-b;*Z)XZbz|Y>~bcPUC9b8qJl; zne~aCY=e`MWikc_GO5lnscz3(RaR4R8j)lE~vBS0s0ZYL7`*3k`*Ux6@2+)AG8BfW>^$hpy^z|VudnLKK$^lJq+>pmHYI`tG`F3kPB(z45e}25 zI4e{iK1>Seypt?Iv%5UhrwHdwmT_42HUg6zxUO%`xqZ9LWq84kJ89ZBC!ZR|cgi?) zwaj08>IzP`?&ovee<(GnDy~Y5?)>@F{X16(&+w1LkW4ng;NFj;P1kS_Lzoomwn-a!G!QSo4;5q2$K-;rN@C{?){d;I|peACs zmAM(T$u(Q)%m$LT7a3_Hsv|AzUgid@6K6I|LMpp!5dS|MZYeax6c|5ksy5^GXQKY; zAA&C%K2>+6>-4i!qlYQ=j zJhu%Jj=+$Ebf+>A=wl#8_ZSALa%AioM%c9<0|_*vwpD8{O%&l;#8HWnz>+(71iEoU zX_U$4hY4KC=@76x1pO=~C{OH()*k+!XDDZP=Y4bd%pEBt5-A#ohP=SbG1qP%_r=Tm zyyv}Aj@&DB2Kb+T-SItfHIEW(hl)Ta|zuz_n2ZH2k z7iF!xC*$)WAWUp|0}Exc?;nG$qkoCJkdujgx^0*D=LKugqu1EVXV|p@RuK?6y5e*7^r@W)$%!M#jh0|bgQMbO6fhx?QODpYp`&+d8x*)LTyoo=5ZmFhrrDg`1a0L{8Px0wOwd zEzFsXqu@{_96ywQ9{;Gfy??y_knyt$_2*EtUcx=Sm5Moc9Y(~QxB!{3MD5`zef&Dj zpX9^2787NLS*ou^ou0gJShW9KjFTv+#WoD)Ah|IBVay{dg^SEgU~ zQE`bat-sCQ=CFsj%xUK8Bo?D8)=}e|VA{aZUgJKw)IM1;vn;cnx5r)oWKd~TkT3feT&sr$LQkM3(@ zL?*fxz0;97CkG66X(bokbGTL=6!x?u4RrOO^Cmc56lj*Ltq>37z7Uk-6rT>C=a_o~IkC zy4h~C-bgQvczBpDTUPqJXI*6G6RNP>$(IuL9-lgE?7O+YIKM~`Q4?yFcxLHe{1RZc zkwV9@LS>#C`dsH3Y2x$c6g+h=FFJTlh4()otGhfm^y}LbpR|e6+*@(7mbG5zKN|1G z9IPmDPCX*vw}`vQ%8_hZ+t#9oB5NYAPHL}DcGNf%*>b_S^{WW){&Mvxfuf>IrnII^ z10>Q@15)bhzfJBaZ#LFwyOxW@qUbVqB}7n00OK_p@`ngXIz4TI!MJSacP{9`kXdRd zvMU7T-RC_Qc_%dQU3*EPv=VV!IqNqYh5hXFNP^QaJl6NVv7u){MAp=M;rYNTZiIri z7RaHU4~VUC8&&nuHf^jnGb1IV|rv%ljzKT;he9HNP-m-sSZ-Qu7mO{D;-G=3^w0guO4~ zQ;{pn%``)MR{Akbt3nTom5Jkf{4Q?844yQ7npeZJCmA9Xk3Xg2{_`@6MBHdCE=9L*%(~)=ed&CNXzm%4rt;*+ zXXc|MT7S38JGQor9el7-qHrbra=OUjRdZ5}V!CLrA8*vIk?Iz2*|H_F$y6@o-0so- zgA?WDxAmRFZoN!P3B7hCH1upC=G&cD803P@|HNBa*V*oVU4`9Wz8H>8v9hV;XMJHC zlgimY*B4^$NFHtRbFb%=+C@G~?*y46TQjaMsBj-kVJ#6zefD&~7Wm!7_nhxWD-vO@ z<^ls^ipK~BO~I~E>595omsIO!S+nz8k&I-UMGr)^QF{+?()RJ)V=$vEo`6%*ETm!l z(-HPU9%=uJQbSijdp${X(&JCuc6E?j4ynUI9DII2YAW z6s3qBKg_kBh$E`O~9t9ukw|6^6k4qx5qH-hh zJEro)my7ccE~Gz|=T%rQ)F-zoU+v?`aO~gx`>ipfNR@Q-nWGmEIYfYmH8>WYA!_F3 z;H42sPQd)VTL#W;yIeGVpQEV#<_Af7$t^|IQ7Vqb8VV(>s+WKDKFwF5X?KvYe2yl@ z*jXS#IMZ~Mn%v}Kwtc^rv{tZ8$d2oy!A((mswUR43}@T=((a@d>T}3)3w&63J-}Nb zd6vlJG+kQHlZvWxq$Op`cwJs8xwkyq@v@tsmM5coo6j-Zt-lOk{BXQTp2jVh7tptW zLhSfnnLBcD85wKHI`TQNMtZ9iZdCd?)o(i+D5lqzektJ>iAg+j!mn#qk{gbK`E1GUjJm|G=80fMr^~^TjPEGYq-{w|+Fw_C(niv-U}^tmXuXOQ zPo~hOPp$5y`5dO^!=6l+>9dBctsE2=3l;)NbP->4FV9>N<-*Zpn<#$_ycSQGU(efy{e7k-|>Vh_J0>x77 zK%Dj$8HWXvY3E`+W9jSNkw0fQ5<{)FH?!O3Z&Tg$GirXQZ^j>4+wFl**dq;k!rw0~ z*_W8hkj)fH-K79*qj6*8dE-uN7Xfp!B>*))9o((a33P6|VOyOW#bk3^rb)B~= z*Gvm4{T9ef?_3>hWFu`*q2J!m0NiHBd;D4VI&p3f9l?OHr(nXukZ0AbM%#^C(oML+f{| z@kYzl?z6i5+=eSYg;Y;XvtM&>NO<%u`ty}G(ziU^lEb=1)pJJ(Yfs_Lf)Rc zSgZ10*<90#a3O@DVaz?=*|lvi&oIS)V3;I**4zHt(=5uTzi_NvBhe?YPK8Pm+^hhn z3`>Iq)&Bd*2lUb-YVurcMb9qM7)jyUD~OPF8&S@FX7`LgTlU_ud)&1_#owbGlQa{< zT^UW<$Vs0+xf#7$l(Y~Z2NqV8WxQc$@(CwNF_GLeg^gmQJ6FeEZ)%lw)Qn^8lwK!Y zfBa6<@z>;e*Pe~uo2(>UzZk~lNfYy!%wDIsK`1MDJ(O!r7$hQ_4~;h)}6-8R1@8I zq?5KwX5SJ~X>7RsUOP2z2W!^8Q^Hk&4eVq;0^`k}R>;nu{c!>Ng5>MLyD85K!hE~N zo%}?bGE{S$|_f(+2D#;>3nsdmhRXdAs-pIpPo%zF_4C}UTEJ>{U zDABk48sToc2P0M0s@$Ip=G{(IP`peY*dC^tzG?nqWM<_JR@rw&xKoexfBwcuwJ$T@ zxk~xVa|@3UTgj_4@dippWKK~9s-@o^G@QDYva!`urmKse^OW>gp-Ki(=6RDddui`PDCuoP|BwVC}rNwDnjJ+zp%KCu^MX3Oe% z%cgTw)-{G6zRKCk=j8GEyQP8zZGCR*n*;fJ5nVl*Mma~f6&vMeww~zp?QkyB6qu?l zyl1kb-zX#g&w<#s>=QPg^VFtS&CFO9+yXbgeQF*oe`I4?N@CU1G{qz|6mKt`?!;H~ zb9!WrT699wAn0X*q;a;-wT7D+PW45#^s&>nJv4X1E6nS5i2TKFwwi{p^5Gh585vkm zqI-B6qz2bji};rgfGE|f7 zwtlH32~_hszPVn_mls$(+Rd*`>PoNm=u3oY1qCcTtLBlZe^8cq`xZuIgmOaHsnHhe znc~HH|JK=#he%bm(^{=+ZSz-sx961|Irz)0Jif!lmRY~&hm1BC9}O2aJ^iZIG|H`A z7yUER-kMp7iA<5@gF`$; z+=cCQwo32)4?9A3e&jr`P0?T+CGm^I-ECDw)<=!m>90o*>~?n!-Odxe)f`Y>hPaI8 zr%fO9m}p!M1YS&@I7vbZ3iE!Z;lDK+9OL>9iMu5O{2{}4_~UheYo&wdsrKyn#{ zIagAuwp}bqqS{XpQ>am4LnC)u|nfg?jucI8~B43-_HcXv+FdwQkAh#d&@zdVqLRZx)>zlmlH2Rqe zA%d=cebJQHSKFSn(HyL;`=gV_-1D=qHS25P&g3il0EbK$^QK>jR-EnD*V<|kJfr$t za*BQJYw+ZzoYI1sJG;i`&Ub(EHtdl(bjVj%=HAJ=<41qoVK+M`>E9u^Sj=7{S?lW1 zGkIe_^Mxlf#_VD{hm_VnPR!a#c+*9T#1q#15gXDsoHaMv{~nd%hF%;Gg?7j#avkD2 zk!W79a2qlKwU101%6cCzbplA4x;S|6G|!3X-t!Sfn_2t7393yN=<0oQ@oPx5BgvuK zJ>-%h`SZq@GQazy^`~sNGdDd3Zwp3TFSDD7JsR-ptRZY&nKQbdnL~wIM~|)g z{m5yHu7lv`{q?EYqQ1_N{k1n*vQMU-Tv!yMI>Y>jdfc{Bsw3cc_ZF_sZ+R7) zCAPyYl-akXGp<8(m?e{T(D&7Kao~q^=l?hBCxaXUcvgmnjPWusu35i6bM5 zKmpioio+uI^vv1nc9gKFTIpL)FC43+`7=| z)5HF?`OO%Cm5GLa^=g^I)r?WL)<SZuxLK<@Elr|TRsCnDeZ&v9+iZKQjSSCUJHWs!75mD5vh&cQGbmoxDT zsVpQ1cmnggsmGFNxD}IavTDpos6evt|M)n4U`2qZkY=S6EpKQhJxA#7LGHm+{~U}*b6mV)L>SlZKx9;5&u#EBaV z%9}&wKSYnH?y>@dFRBn4C>E#XJ(iuZyXxNk{3Y19?i_L7u@s^lsTHCemcD+WgH`Tf zE1hSxAEaEbSHifUahU1J3aYaI;?kr`{Veh|GgnDO=T({F|k?o!V? z1q5ip#Yl}cQ#nlXRo_nCj3=rqKg0IGBm2mU?>FPiZ0FtYuPZ6iMD>2^UCawoe_^AY zT{+|_Wx72$V-rL1Bbi zz51TFha9`R&`4jXF}bLjr%i97!$KDg|G`3VxOemaKvO((*O<9*gW^~(mswEHz<#Ih z#rBYhMb&L8VLJ&;KShCoE~5SB%F@m9jW(5#cdE``KbBS#T-)-&Ph;lf%j15}TM%zQ zd`QXt(d%7<%3>EJ4YCFnO069;Bhy80221!3v;~PF(zBtUh3TB_VB~Q+4$*@dNr|~B zRlDT4BA67|wj_zRDl+d0>0Z9pVodeGv3#Qm&}-p#!4p4TIPd)>p&TDmA_29>VxD(I zg_B-X&Sc=38^L2aZ{YP{2T=8mb-H>@0;ws)(Z?@9-3#>|NdmP!tl)!#6o*Y zFKxbdY@qe_*7AWeTITnBJ}k?X=jg-~{?Ouz*qFb1E7G5{spsgh8bPPiZ5fEkGIkvh zqAhluIT^93NZEC@t$@V&PgQhCj>e83(!MNVq_UM z+dGv3HqAkoa1+^&TT_+9bowMwK$|$*s;*pY zU;cr1x6EIB?vuCOC-=vAKHf#RyhgXqbRv*d7D8@dw1TX)9$=&%$=x1Gu~*Rdp*3rJ z9(nOZ$^D_j5_jqmjyKj7_LW6b-6_?n9M%Jy* zSa@tc4{Rs>P2nr{h>jlt+A|dnFAZkso3@bzLD^O3zjo4KN+ieowtpsp;GUS5oqxXI zG_uF!7+DIBxsb8po*AYEhQaGJ?Ar#?*#D^1RC@^&c zDmZkpQcHisDS>>B?p1MQwIzgA_82}@34)r=v6p20F!?h9zJEP2vGf+ALgYpSy@TwS zYEaBLR>$l?&8+|ajf8+)4Z#QYFOs0TgbvT`34R|$h2xJlkaAUSLe!h#xvm1o1OlT% zDa007gi8j)KXM*Y6^Va%UdSUXG0q4K6S5lO!8OC+@f++~HLQHusx9H%-@k()O~pqb zstzRiAV@t3K^#{1WfHTUxDLEpFHehh=>>9$?%xtMND>X z`P872&#+7X9gu1e9~j#72U3iAmOaZQm#P!Ea{t2uTsbqLFdMyfdJD-GNV;|SZ|$*A zZN=Y6-)AOzjO7+c)wlx?nt&T4XpEENVo*P*e}jtUen_0n=*O^LPF|4$BA>Iy2^?E@ z<{__(7m0ZxB3EHK0XH@vM8P09_5Se^)RoXSBK~g_DmkZB>1^bE-aH`9ML7!?6ZxCD zrZqBn>N53-5poPfJfXv?O(Ev+(CI_35Oxrf1bIyFCW0E?o&3^dG-2T6@8=gv!?W?L zi{s)@wEz*=TVay71SKK_>M3;KL>_?*o&TMu4dY)G+>d&vYeEICx z$QD<5(ZI#xA&+8jtLQVN06`KI@GuUUpI>KDFwZg42RNhf3zG|ufrkO2&+&d-U^d^j z+bIqak|P9A3RI%2`1+yZGxT7vyrGxEnB|e5^6ujbFX<@+yg_43DNWJ4zOCGkd4urc zDJm+89xKkBW)D8j75XM7;u3?}F4EA50E`W|o`E|!lJ`(nTs;eX( z*MjdO0g$u^tB-I0sJ3lE%S;%9Sc{7shR!4D)H?;uFG?)QT~Qe%C)TVwJ$elmyJ8^T}C*Ft32mG<@4` z!3ONs?|pngDAVsJ#q{X@+;^Ocm-SL*#%q2O_CB4A{XgBKYSNkfZm@L{>VN+D*lNVe;1Zob%FyY8xE$V zJWCqe^p&UEfl_o_Fviz9O?9YYt83HH&=NplZB?fHy31Z)?vS-CF8Dzq2if1(6+ei( zu{vZd843F^c5>O5Pu-cBq}cg!ChvF`_MH=o&F!rRCyqH?`yp3nhAhSC3V_AD8{ z;KpKTFa7&@4R!^L7dY)aFr(ol5-Qr?f2M#HlV^Kk-AQV0Y3=@t!duS2D!CmJS%_iq zEKO0EzZSz8L&x{O{Sor_?4*M5s>!tV%9X{L9fu@)B~u4Qs#qy^5b7&hRlnGH#*~uU(8^88cCvMYt!?gySsQGqdZdU5W)1uq2 zijXbF`v$+X*?UUSWVrQFp$jEjIQq6?l8Zy|v%03KzBeSB)JD~NPu58G095elLFmsf zc;nlUd*B{$;^CK~{l2B?D7?z@w6wIZ7T!pA1o?a#h?01D+=P(sYeW>M+SI>`6g^RO z^ozIQ&DbmdnG@LmvKCBx>}~DB@zk#3=5g)}@g~%=`fZzfwfd__WcIecctNFGk3n;& z7t(R#;5hHK85m2UQ=u})P_kNOfCCUsDdNuPiniELX&jML%GGnUTDk81$V#VE*x-xE zAvgGHgx(Pf>aS&j)Z#|rL9yJ%*-2WCs}DpjUL$Y%NI*At>sKZ@?2Yd>LC9HB?i>B< z-X*nMonl=mLD|EfK7Fd8lc3bnjisN%jGU?(n86_(-FM#iQ!-}Krop8NDoI5}h4x{F zQBzb)kQP7MyLxyh5&s4IPAx1Lzr+h%yl3G^_8(hz|4%BL&HSJZwnGz%r;uCRNVw+I z4z#XV_?x}}F4**i8zc2bhy1&doe5L6K|$RLc&uegcf zTgFPBx6T|!^)c2GLpV=OB_>|hE!#__yS%AZX}#VD(c%hXTNm>2F~jQ})iPnu z31VJRvnF{u8qYZnG~G!tnryengdxJn_49^+QpHqZ*EL8+jqt7Yx%OXBUpscjJ&sk< zhW8C`(Vb;^x=9zM%V&=E+fR%XK5Qx{)6jW-_2=_lSU6+5-r$vYwGD0l8!~_aI%>R9 zh(cwzmaTz2G6P$r#1lrV${;)i=UQox*^x#D1)Y}r_xt8vVT~fV(Ic`bMkuD*5Em8* zjj?&$jZW`x)@kp+kq0H^5qLWGYgQPZDCbo0ByYpnceT@C3-k-5&nGbcHh{&H5EvO8f99oSL`4J2GeWv;2RDfR5a zW%VcKp;&{MGt_HUE>+yJw%O8T3!8}1qo0rgBe+104E_1o##sF0 zODG(H?2J{TK+cHAA{ecP5Q`WypkMJ%zKr`f$PK@CZRa;n-OgR3N$WgVyyFlw4r9E` z9n7v_7fkN{p*u%pEWNWW8Ty~OAR=PXiTvNTvBv)d)piM{t}llC^ze~l z+L{^*`IJ$HuV?137Y>r8x?V{c=57wmbG1G`uH8P|rs2OVa&oLnob7WKb>^X~=dwKL zd9y5XyZZa*aWrM6tk}>qT^PhAeZZ<=)4u2o8+s+B(qmB}V#a!zo@&=la%3B%ZqFFr z-S+xH+bJe!O*DP?JxtJyrk*dBQ=v;E0#NGf>$7SNoZT@Wv z{MCuzbFmY$V(icA3Xk2(IDS19wUMp&`LKU;E%eLQFLLLGV`*Ku7T$~GocVy;(R&m#!p#`G;>sl*GoHLqIWe8r(rLv_X*wKv{|_xf_V2H#D3{%~}A z9i~MmEl)xnizKKYX#6l#3|81LVWyXG&VPJl0Mf8PA; z4-9hB{`xcqE)c{cQo^>J`AF6l!M%cUcMk0Gm|rM}Hu-P!qP~-`ElrbgLQ zl}pZE&zXVe3I|aipL%eH!cLS7D|TpMP$+pW`BkA5FolK>nv#trEswc-F9rV%{0@5cJ6tE)rLm8Ggo^-O11Y9V#A!@V$x7qJ?KY>2s%Gd9ao-MT}m zb`UYmH^ty2pwEE5r-VvHL%nS2>jypcFj}Y7{iz`?Qv6$eXjWB^T9Q3a+|43Nv6P~U z*T*(-yz)Ue!Yj2Bz3E*yL)7-Bs_5@1qLRbOj|ox`nHYU z{iYtlB%)fzvd6r^L)D1ayHHhNPSFuAy9SaQaykrob_Div@$$BTS8I4}S&GPvh=EgU zSmFyg(^LOyuCSin6vy z`VR}}87r)$F6qGazf1dOLw?R`FpokLT6h>NU%G>5xvwEvgS43P*}2ewQffyMPyQno zv}jX9Hv3`P`yL_(+2dLc16TDgpcr7D_|kAu^N%%0@MLDbel~gMrasnjkpIgn^TqX+ zPpuM!Ef7O}5Mz9|G7C6~)1}uq$k8%#Rm(XIgpn4;P@MblgeWjONNS&Bm&+%^GmDNa zR@DW0jQqhr}JQ%5rJ1j3;n4_EQ0t!u-*b6RSXdeJ|qC;^9 zBA}|4jdNVV#nl-ZHKUMi^|JQCY7VkBp3>?|?e^Xh4_sL7j@Ep40;?GQSipxscM&ZJ>S!-=ECm*V$ z3O%g>8ueiKesC_+8f{WLcKA@xHky4+ZDUn*=cvC(qgCn(ya9_8I?ep--{4A7 zDN+gB@B7OI{*?>xPQ&sg&^cKT^y0pW^=#*TUs<+BgsU*gQ7^H?ox=r%( z#|0Fs7~L7hkxuzLkV&-snRnzT`YT7cQbTP07CP(#gjvj<==|V49LghefckLA^$xn? z0nK4e-jp&`(Hm{l0Ysh)fFP$R)(H!3t#q>kO9K1(?g>K*!Y!(hXc{qv{Y^t3{yE;N zw`st?{6<$GlC|v7nUPzRGJCqa_X12@w;y{Dc z5H&8svV%DEqvBUemV{6c8lWyayvazwtZ=UcLs;LrYIRrXAlJx?rQ$}qchj1OhFH43 zpjfPMYwPv97HwM*wv52WKI|od6ls^&_i^nILiFpl$zNot8tvk~?syOsc5@K=XEZ_9R87_u^nDs2C9CFs5aWAt@BLFMn! z*D;aG=sg>zCt16DuYN4udbDTDLX&u^Yyi4i4T9(Dcz>3LRKgTP4_k9vLM;A#ZY{pPgLGx5)QGia0>~| zp`?14Q8Kz|A;&;zh4i@qj0@((4mtWA@EA1bf(?k0q8HJ8+{HiEM0AhsH>o{^sAvLn zjg@rnm0OU@mRqz(3-}br;{ek63Di}X7MN^B&4GI)?ZaE8})FaP^c;eI4Of4qT}-29Tcg(@)$Vai1Y>X60PNCUN!OZ!m2>I(Z@ayEaGgjhESD7q=xu?7@G=Xkpux{7TTt1r<+q1R>kz(PHjX5|i=yOgqw&h!IAobrL}_LAce&$(96xiBD1 z%o1-P5J_(n?XhZl>cEoO3n$U<`NTkta9e2MRl8*UmE zdYGqE(ZE05=L?S(y+^mS=eY#^7AZs*+4fDr7!LEQH#L#PG`;1vC>^J}QHUShm1Bcx z&&C2qnF*sf7zr@G$Lz7A?)~bQtVY?5|3}?hcj?=4Zq+Y=!-#x?Vga~i^ElV{(->Fc z5FIgWb%ZXPkC?MpQa{B;q>UBsZ2KD|=y`3_f057WGp5)H{VK(<&eq%(xm4He`ct_{ zW%8HMlJP3r+B1d})R(#xb{Z`{7qsuQ3s~LP`!~fhx8J6UKAE~BY)nI~$7qCL%*^{r_UbSB=q-?Cc$)&ZhF-snMU|emSvTdt#g)()D+<64W zETSZ~IA<&K|7ad>O4cLo(nVibXG9e5e1J7bP#i2=k(wB4h(+fvt{9k z2;_Ga40S;yR&Wv0D*w_`gx#56=yg)-#sj{9`=EUn~!Qxld8zdl{u^tCm*;D zOE4XRd|Qk%dyWRL*xfF-;2jlq+5dW|Rr{K|i=|&Bmc&y5f>*29Q3;Lh!zG0sf$r; z7tX)FZw+*=vZo)^7LJbLuVdf7MU}-$+G_gVlIOVvu8QTfUo6quC!E2!K~Qcp@+hCd zL58vH&G>bNNQY4o1$YiStuV~OC}RGdn1^@Q9!a1RVHzNYfCYd0@dKcTDpEElF~aFw zzuoK|l{8VqJIaQJJ!n9x49Bu|B2^d>-#WXO9Ds*v}yhl^Fn*AWn%K zhe+AweeIx%kE*Vl+bp3wFuOZBJ-xCpZ9>45VSUw?Cq1L$ds_~MM7&*#-b{2)y#XU~ z0gZdl)%kwsSYJqB9woR>er8Nd4BG?u_EY!qZHEf<(o>N1gosA4f3p?XQR@VOf}Q%h z($U2925?B2=-si{)41f_2orffuYY@q$2Lx zCyg}ceNcMMzP@K5XPk$TnCN6fM5W>?%CfmL0%ZCtE-anK6~y>}&_mp3!KWLzZppT8 z1qob?z6e%fWR>;+Q-)+Fh|&YYu}+^p-B!+9!rR;&z9V8BOpZY8o)ZtLCG#M3D%>?$ z4el5!M=uPa#&{Ifze&IaEnF$aY40MpL&Ri}_HOlgXhC?AoD11{nzt^w5uKFTku z61(#A z7kKJ!ym_nT`|;p#k%sBt9KaT|U8UZ=T zl?X6iL6}#k1moF%qE}6ic{w<^gZ_FDdND{uk}^phqIJJ{GIDbI^$vMqRPZal=4h_9 z-kd*Qgsy`5Lm_e;&3oIF3?@KI{o=^LsuOvK(io5u{b{7k`GNmY2Y2!-S#38&eiX|X zZ`{tMQUxX(OA$kR(}oe~;`9-hE75UFeJI{bZWpk%i(ozR+FY20FYr?UFQLyPly0cMv6feWT6c1b!*lul-TplOt=qQoS0i?`@$2UI z*Qo}}3knL{kLoe$z~#P5Fqa$IYWO~#Zk0Q+yxXPQB{@$&z7+MeT@oCm-Ap=FNDGA8Rk}jz%1Yk$s}<=(lf{)o!CmaHQr?^24r$U7HD&1stXE zU`*IP@*Z=~`s(I{>k|}H1a4~-T4Lf_oO83YhHWZ)PqAjQ9&@}hJA(OO{5jK%gp6!{ zc2v#x#wZhaC!cU$E4w}A=0OBxXcN$PHZvkpC7*OSub$*Ea>XwMF9qiZZwnz|XGvid z8*{dDYWoih;3Fa+_Ykct`qS=1e>k`90y>D}Sy`dx;uq!ulpFClG66+!RA@8o)HcM0 zVIR1Nc-Q5dqVMshy z_*Hi~wgH?NQWkY6&iV3)*j?hkyiK|%&qOw^>!sjaOdOm}f1;na#3WjF~^PJNn&u=j}e!gk;2DuZ&GKS5wJzO%w$&*dxM9{Xt8Ntaz(!+A{cef$W42dsF9k>#T`JjC!0L`D zC%B^Vjs{kT(K8X#+i_dricY)W-tRp(7P4vqe=_Rbg_*$!x(`#yd)o>Y_i#Tj7+gS7 zikKiL)0S2GxPD0FOP&##xgQvt=jfhVIjCH&N;F-QJT%>OXDao}(-(5N#4?;Ej=x6( zT!9}+>wm3@oeWNus7(CzS585nbxh~StK%Rb^y~*3(ceAOs4}u1K52ZWIpmkM34Xma z0d$WsW{p4F+8yd-yG_fPrX{~v^;f!)tMppPHEmPuFf7$DCk(fxTO_EA?ST$>fPr-S zg?1V;lJqnL4%)P~519V)pL32bUAXuMhYMq#qlZJ4ZEv#jKlx9XIziPotp(~pa_ya! z<9`x@c8=k_IYdnE-~ZH=|A#B!o8hSVf6U_L7e{CUk*E!E$$wQ9ISmdsYHI3*rKRnZ zl>Y=5hgJT~txEvjj69I9xSG*&uP*yG6CW1K<>lqIZ4<~XA1q{4G$_gO>+1S{uMBN~ zIa6*QYdo|BiMS#@m%_SHqdy=A)GN>$?f84}BF5}4P(o4xbV>mC|Cwt%x@DLqXtT8V zKOuy%bhq7+oJWNS7c3deI-kGegoEA2uyWBn1I14GeNIVUTvFy1YYMZPhr5rT^m2NB z-C*F#(m!cwyZn z1KZmC+J71_5yVPw0l~BZ2}T+7mB>C2IexhZa0R+QT6SsTC=dHB_+@4$ zd?tYQA}|Y_cR$`#dxJc4}DRlFPm zb5h`(Wz-V$`8&IS*syeq?pTM2(CLd@y-{ccx~CC;#H40?^ZCn{#0R#EybG3@B{IeS z=nGx7Z3#EKZ>8cHPQ>j1&;;Y=jQQYTvrwjdOBAGFI09y34$%`2fVJdU-0=kGZ-d7x z4;YOY%>q3CsPipARyny*==k{0)4v4qO#AiYQ^)?DSJ>k%fG0ld1_3zy_}zbrNR>Eu zcE2a9BN7O;1y5#QaK{9Ji~C0rmYa)rqOA*Va8&ex-McDuHbv_fegI!nIR)vZ8z2U7 zj&X|bV#`o5py+&pGEqFH$aYV!>ZUPb*1>;IXxol`_pIwy7kll&hkew&PI849#b%;E z^g5Q6XcKf)cIAV>#Zr}|t^AXKg0%QtPg^80BmDRj#e4{HLga1=dRH=xDF8gFPXcK% zt4x$ADFOon(=6@JTunD!UkF*TA5G4Arnr$;)}!b9wBcLU@jn+PUU)ol8Wf#aUR`vq z3!XQOD~Qt(Wccju2z*1TMZNo*Nl zdVa2UaWu0Cl%WJb?kww{FeL|mr@+YT*R>$SGCb1b$$7er_mXrhU|M>1)#qrj2G8&? zWugM`XegEZq0^5_##Hv@@b1moVO$4f4;P=T+1JsF(#hzIae@AOoE=zdkP1J99Hcof zB$z(7j)9SMG>4FsWHO2DjO6(P>JiV`WdDVRZZK$Wl-rM+{>|xsm;8B~8j>n;L?kJC zUl`|Yrn`BUEv8S2IGuO<18f3MUYPC^Iunh| zXWb-mq(5XU_%6{(7=Lx;HcC}w z3{^ZbrJ4Q=CDSWTV{DZTfI(`%&zOc%8}B>rAi;mZ&?b=AkMpLU$3#b!)rOzigTv4n z6LMzB=(LW+16~QIrG$v9$7YJJ$fEv-iCH3G3Lx*t6Ry?UVp4-9HP1_TC=?J$N*_uE zO%6YkrvaEBtN!;>HIy&ub|2ki>zoQ;m$f)5FjKzR_DNB9@b$fO{VbH#PyQ_Y=sNGR zvh|y0S3L#Gx5?7_{d4+U>hZvz7bR#c3oEQTpVh7HMfCF0x3||{U|yLldJ-I|Qc3+e zTH7b4Y$k|d@vSqtSf1=gLta+;?*085}D#*@iPy|_GUt@rU_jJ`3NdHi<* zOLE(H@}%!9BwqO0(7-gpY%j5W%5*edvJM4h@SOBOHiQ8Wuvx&UfP=EW`3-1IiqhTN z8=0x8Zvk19_Dg`1YU865a744aS>TH2BlJNycZXa|`>IwtU6dV&Wlf|vz+3u#&(KrVx9c^)6a2RFwk>1`vM|_QZ zqDHUyzaZUkT{(%7DnPl^e z8|n4!na)GSEn1LB=SdNnmp&q)JXIc1GNP2L+t4%#{zgG|?7OE+SRsOX7tEL6l%9|? z*4VD)Kk?qs2~_uTs;s5Lq7<0YEK#)G!7+hAL(~6&YroA!3@e~Ie_7bFRyxDmzDhV8 zpl+}>bsxcW01tINn$9HwRJpaWM+;Jrff^6{PYlge?|><({n?2V7?Q73^)?y^$Ys56 zOw~SZD|9$6SV;%c`KimjSCIks1vf12DE;5BfoNgT^9SJsYBVYkyFNX1 zq52}bDs=$s^xn9K;GlCjW0N6s6g-klx0OuhGtw1X+@UzbRVKix&i3xP272B7dDB6* zIga)4e#?B+jvtXC)U!)|eXnZLtqH@o~;Nk3Gir)JG(B}1)zN653 z#1@M>vu(5Ewt!Hd56ND(g|c=cTIBQzKDH#frdJ{kv#mE9abbkRuy4)+`-bJmpApQG z5F2do!_4^;^&6|s!ylpW>#5|k@A;KAgvKXclXJVU3U+3`@15zh8WBhOZ>Tpl+^DH$uUQtA5C);h(_*Tc&-$gev>=YU_dT);8nX*3q*bzy&HMNFQbxV?S_?(^5c8S|}ge*~swA z?yi1}9_h%HR58v{lz%K|@kt$~9Mv;I*k{_?5&47!@3~v2uUG)A0_G`SPwLtrQVhfBw|>jrke9{(=td)C&#Q zHm_a0nFJ|t4RkHO^yrEGNE4K89Tu{OgQK8Z+IQh@tE~~+{a;b8=L}t!9lvGQ2u!Zb%spN{@XihW$&^M=x> znoZt~*OFO~K|vFQ&d6&&W;O>bd8|`G>59iK$)8Z|4XEG+8U?c6kP;46b zYKDx{nMOJd?)ZJE)&}KnejqI+rSW*Ce72e7wO>Hg`nu0y)k2YqN<{Nm%u`w0NC*k= zCkN)h?oQ?39sK&rdBkJtfC#Oe>!o-cH=%23k-*DFNid&Yy^4Y(d8yJ}S{jhP@;>w? z%|xGlU(8OiII29H%%5!SG}ZY%%tzRwhkb2-+ztCg?)dDhDn|z$RTS?n$imndBPM4q z`}&S=4r!VFla4Vej&vpiOEsHIn-#>lbt9_r_}$G=`8rIXI5r@0{h*Po%c_?B{OD51 zoalT=?h}j?qQ2iBE1|$0zNj#hlcafzgtaLv5$W~J&t%t6-XV-L!=4^j8~FKsg$VuK zHJ=mxUIGu3J#9C0Q+FHfAPUh3O`CcF3=FD|0TD8?W}6TG<_;JY_9=iQWdO3FtT=^- z1k^{`a%uEDF6F5Ni9MR1FG7zNsir_1MSB!HDN1SAO9-?qi;0O*&~&3vBTrHK7Q!9J z-l3+Soe56keCPim>%HTt{{Q#!WF4~i=2#)h-WkW9S(Qr4D3To|NyagU%wVy=d}M5SGf(Ej~j*lUIxa5k3y_kNE{gn!ulgh%t67$9b#}bwvxx((PdLS&_AXS z-00gN4A8#s2UB~1e+6SZ>O(Ire({lA+5r^(kZ823|Dy;OG?}%Tkol|=azNbZ*%G}x z$*&QTC>D$oSs>L0^9gY45=i7w-x+)k<#ld1VCO6wqMgA2iinjytuJ_L>57SjHRv86 zyAELs4Z@&j;iH}z`?Jc0Kl*f-Idg6Bc;lE3W1}koqn9>LG2NI7+Vo=$uY&2))$O+r ziV%U{f_BE-CGR^8fLpPBt?#x8@wbX0JI}=)ylA(xFz-jUOK&fK^Cy!Lv=)xS(+N(O zY_8~NFt?t?Jq}oz;5p6trbaHEAi?DK4OLB|j87+5BJN1mQMFmUp(E+vzwnb&774v_ zv9>UG-Huy|W%xwIN-XfnO0GAIj;?A_K~*rZ-Mbk0GtUP16__tOIYO;Ef^_#9v`%r` ziDr(tQudUh8^M>Mr1%FnRcHQzXgL>O7w>jyQOw-Dkb^{6EdiH6S5mGsi%Ijs8;U6E zkeVU3ym$B$YMg3fvTNH>lyYoN18`yZu~2exb)n1qr+M$SB?%mX%lKJGvKau7ijV2_ z=dG)ZtBxUXB<*0iV!(L+_NG$dKY<6Om^09^dfia8zo6Y)vrWz9ZsU4o*^!Y!my7aW zo-iJi(pZlUtrzRN#%9J3tUWK=zXt=k7;4!bk%{UYHK3n3*N@VY=lTIHn=O=LXhi#8a$+K2OZ@D-&Ryn-h z;!kdH?5s`H!;%x4_e!H(( zS3^Pv3{g*s=Zl3&wHh{}uKmVbAuu#KX*O~!_3!i)sDqm#YoDitgqn+`W zVKD8HEI0G{XhIq7Grqm5!~Cd%6|n3A=~cftiPZ4CV6+spnR>_bPk zrF-zqjWT!jL{Eo$<2)_6o$m zkJ6{Fu}hPsZfF#D+QGz!e+Hh%NW@xCP62_l%Gd})AYDzo?C>8Gup{k?+jXp*-j2?O zIGJ(8=QUNwWasPfzYHGTa@8G8T z{=DxRiG zi<0R5eUdf439GlCR?1tv=xM)+C#E4&YUWovwgaM$t^GqtW&TgME{ZYQtg|4yfh=vV z?krs{Oh6a`bI|8Lf&`4w*;x3q{sl^!U`iee@Q?OW5RVCHjc>rRSkmtiMTzq3>NrE`?7kr(M^LZruemK0TeT`1v zn-kMRRriibcqA%Ce(QQWFe&)*VCpf9L^OdIQ3@IUt1|CIDTO@z z84Qj#n}G5NJ{sZ+_E++;KLKa;_WrLw;x$5;us!y&W*<1@4z!;8e~g{M3Xbt*ybb2O z)<)$u=H9flLdLTCRGuYu*c$PuYZB_{lICaEcIrhMppP5^RgZeSKGV1o4eNoA_%&ck zHbQz99?64es3i6Q!62a=00|b1kWBdOS$zb=j1o5P!T@ALaLgq-gLL8VaFqi+cnunJ zgI=sn8{D0dWdi~zp7DTr+Ig-u$Dt4?RxtYCFz!A)RFDminiG3?kPQ(EC>Cl@51DjJ zM1^g3e+pzIOJF|kCmJHcYbc9oeDK`~6Ks4<1hGf2UCbPT4fNS&r_HBfKPi@r#k!O` z(AZI5oHxR6KZ!#sq7zC?D&*d;xr)-YIgxeUKl8|-!DhzC)%=%&ueTf*^;QFJY-${a z(hl2XI3Hzrp|R`WXSxrrke%sJ%j~9ho^}kM_MbGdij0hOYIh@q50cpYP@t2CUg5>G z!!T7Rf!J`Os zZlFk&p~eOem#_>|rOFJb5Vp|~^8|2^-|Z;1egt#k3}I?`VBe39#@@eyWV zfu=#qJ1hwubD^lj0XhE4A9(B~vp_r&wyy2!n(-P~cF_T}(Nf8p?wuB;6%Jc7pGaW6RBk|f(v zni&R_)%zG&NgqletA{LJVkmjb6g>zWS(=sz0A-%iLnx{w%?~I7^p-AzHK+CHcsyej zu@;M&V}K!_ewpEFY(cvOm%urh$8w_YI8X*9PEhSzwq>h(G||mF-HQyLpZxM=(|pb~ z^+TWC9_)VsfGf_WWW6+B(YsYorI%1;8Oao~bWFF}y=3~H&nYt>!XX%F< zS#tztUVAd+Qs%HKJuK8Y&42q^_ehK2h-6RRU}oiQyjjP@1sEQ5;*a0^Wn-7HOxe=)B13>TLU4kobn;zJx?5CgOmVw!e&uPKSeNC|-+#$UWxt|Ye_ z*h;woY2EV=j=M+i-ubQecwagjBZ>j2wzYQ3*TkT3^m&qFwcPS<>w&l)MUc0cd&9aP z$zFP}u=YGtTYQaBjlG`-GAg**7y=N;Ofb84h%4SG@u8`EyFuBlz}JzpBgSl*DHzMS zD*Gj~7`%+@EBR0=!yKYJ>JSC~`KDbOTatpCcQHSURWKF=EMZ}mM2gGh7T}mA$Zp;? z+UT6MksORVp%cNGb^`jonWg(>UdiXks$Og1`JH_i4XP{kJaQyeI6O@{M?1um&EZwu zWApxZ{t6CpmNB~TG|z>L=Slpaqo)sf5aF+QLB%+Eo?sRKNzPfqEKAS`L3;EP@dq2_ znq@FKn-G?hgalG#?fWB=yRvZB>pv`DT*3BecuabL2(_+WEG}7>L?Rg_26I$4>B_7; zTEUJuMitpW33ow|dJ2IM<7}UbVf1Q*$8^edHgr>H(HV1XftBcpO=}UG6jIRdqzJ<}3FR{qm zR!N0eqJU=~>(w|a64ag9o=2zk_)`umRM`C7B`R&|(h)!Izna~Nz%@BaKgf)~f1l*y zQf$u3wTTHz*1QGb-?X%}*qc$10iaD7(F=4&g{z2i_(vCM;$*v&F#o<7vzC$j{wzenH`H21}-vYWqMl`Bs7u@=|Sp6t#mTm-OIw23V9|vr{ z{jjGjdD!7?+LiN9W$*03>=iNxam4x{=JlD(c+%o!UP`1UR6g>~r2=OPzE7ecnvBHb zlWS11)?d&2rH#I-8%{$`N|JKPt=F8?sd%DADlBA5L-u7o1+7fMzJ+aqf~C8z0J3pa zLE-=zhr|~Ras3o5FLE01v$C-Gzr3X+*$$8v(4}&{&y(}#B%-54($lF}I)ZDfa`_C1 z8lfY?!n-E`Lw?2K7IC#m>G9g&nhQ5Pu{>Gz>0}eXJ)$U5j6SG~r zvK^7kfteNjj9MJ>fm3h1O0DT6&yeTGntk$7QEC#6ZfbpPbq_|Ayc zN7*8o$m@Ub(vfqGw6G^->8$vmp_3XZZg(RN^Ud?UrZ*xuEg&)I1CwpH>sg7WR^u$; zig4(MB0H5`oh_W4VuYu{(MtJ6`cW$ujx7!cp#bo_;9cl&z+;;J$_;xfBzi}|=-z|7j9q&8|65cr-K#zNv1FPfLd6Z2#rFRe2 zOgx6vAN{HMT0u#gB!2h`0uSiQ_XR1jUT-1@ulbPwI=0|`7Zt?zj3 zx!eOL4b|jT7e+_EO@7fJOZTtlPQ4Qs$k2KH<~!e(WKLfiP^=b0n#ab6(thZl8~+f^ z*Qk4vYt5{YL|C-qtDA3>L}o4}ee5mzQgVNv==Mu_!E($;mSwUQWexXspBH>hvoqei zAPhB90B|q9`h(%&m)Nv!4Ldp*Sn6mVIjYHxb=u}3+bZ`-v<4_p`KnEzW^0>z~;tuv`4wG*1ODo7(>EnF+7C;GPl{IdIledED9H z*`_`}J8{}H_dO%xIT33#1StB79+PPExeVZ&>u!FZxv!ZhHovV?vt5d5jH1%{UC8fjcO2_EGRXsOsIkHNtnUBbqtrqV#t z^MXTZLK>jPQjO~n;Zts{hj8U@i>ioa?Okv6z^dM80}djPU)q-`WC96Z<6Il;)Mt$_ zdyT0iH^^rtxdwMv?Msj#*<&F7z<71VKdG9MLul5MUF+)WJ1VzhK%Dw9&bnFfBIMhh z`FdK6=r>S5^%zKkS+ar(yY!14v6_zK7d(NgapmpbefqWB-b;wbpxx&q4*P0O5s~SS z9~E{?u8A9w_WNq%vsl*wh#%KU8>;|!qm-UGybd!R&;5tg*J1=)Oej;$0BYK;H$BbR zz<@d;K6p?c;A~I9Y>(?8V zm4h+Lj7CyxwII<5)~_JeBereAIzR)YTI!~;jadEFRSxgxAIPiVr;(zw2jTF*3&I(F zAXXdRMX-uk0yf@r3aCR5!aIhFVZrzOyqJ{8r=0H}2R;F*!-Me7{~wZB6@%`Wa&~Ko z$XXqOgJX1h!>;b3|8s&W@g`I;FRp79eVv`18meAvAYX)iWkFCRNKR&>8S94u*0X0P zxg_MO8UTs@MMmgGy$C@gQA&qaqs)Hh)9rH2ZJ8KIhB>VyTc;Tcpnyp53Oh)>)DUw*HkNgO8q34r#_M>IC9{rvD$I!<6~oLX25Q-va^?b>rQ7CMa_!#M2=wOCgg>ut)`qSm5mYqlM4!6oKPrxw;*J z)a&;f^!Uw`5-aodxvg(DI3kv-uBEwRNt0d z1c7?v#^C!sK#m|h0|YJ6*MXv{cZ+}GNoX1H46dt9@TQ}q8!1Yli_FZLht!RY$hEsp zE%lU&^fJyQ4xcc(z(_B@lPOIpB01x-6!MXXaG&N2zaQUkJ&CjDVWFjxBR}~Dd+=J{;{n|t!c=bwm|5!M z-Zm6nyWnCL5_*Ia@`#i%Pv4zCrvRya!%+dm76vK-CTQ5$>9)t5nKEdUH(2d+;_J)n z65l{BU|2@Fb_*+psUqo0S*htN0m?Yg#N=ll81M^orV%wKIlqLsl zm+|a?@%xDz%KfKXtm>T0Zzo4$U+A+3X<|hU;WIzJF^h@8CC%ub?Q@2DZ6>}@Gdp;i zk*NYMQutwG&=zFS1%t)87?pGzjgYp*Z~{AB)Buh+P@v9VpQbYa`A*-HaPS z*`y;JJ$60o0*7-(bUt>mT~?*;JW`0?nxc@9ZJb=#iZMO@V;V_r4Z$>KmB99}=&$*~ zsJ&zH@;{nalDHU=&Z-Ec7K)IUuPnz9M{o(cPAdtEi7>|1Cj=8P9{^kOci8VO!p&{U zIMF<&D#pNbV|!XHp^B=ei%pN;n5F4s=t7Z zM9xZydBS{{`g;tOTMVNo+59(GEgzTPOUFRjsUWG&Dl zi;L>_aFTKEfmR1FP)Md8E4BPt60^*29~}FGBqD}Wcl`~3MA4sRi)*aSw@`U+zgY~q^H2I-gTVxfl{Jf5b}8n z{qrU!sg2~)70lHWH{$!}{Cmp=)<<$-`?tX!I!LQ!gf~q0k4YR{U)U{Z7_I-NCsM8t z?NEjD#CIHw0qUQWL)ZT-e-g6crfW*vdGJ3hfDmp|G}c`{etdUbdmAU!H}!AD`g&IN zNkL)5gTkUT=AfXUwegf-E38T{&F!jg7>2g<5hCrcl@$@XI1Xjc77~l{_~XVY{cwdDogUqt`Uc10<%ag%2Q$W;5rb5>U1+30ay*!mPqt3?L3| z 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 { + const [starListsOpen, setStarListsOpen] = React.useState(false); + const [starListSearch, setStarListSearch] = React.useState(""); + const [customStarListName, setCustomStarListName] = React.useState(""); + const [availableStarLists, setAvailableStarLists] = React.useState([]); + const [loadingStarLists, setLoadingStarLists] = React.useState(false); + const [loadedStarLists, setLoadedStarLists] = React.useState(false); + const [attemptedStarListLoad, setAttemptedStarListLoad] = React.useState(false); + + const normalizeStarListNames = React.useCallback((lists: string[] | undefined): string[] => { + if (!Array.isArray(lists)) return []; + + const seen = new Set(); + const normalized: string[] = []; + for (const list of lists) { + const trimmed = list.trim(); + if (!trimmed) continue; + const key = trimmed.toLowerCase(); + if (seen.has(key)) continue; + seen.add(key); + normalized.push(trimmed); + } + + return normalized; + }, []); + + const selectedStarLists = React.useMemo( + () => normalizeStarListNames(githubConfig.starredLists), + [githubConfig.starredLists, normalizeStarListNames], + ); + + const allKnownStarLists = React.useMemo( + () => normalizeStarListNames([...availableStarLists, ...selectedStarLists]), + [availableStarLists, selectedStarLists, normalizeStarListNames], + ); + + const handleGitHubChange = (field: keyof GitHubConfig, value: boolean | string | string[]) => { onGitHubConfigChange({ ...githubConfig, [field]: value }); }; @@ -83,6 +130,59 @@ export function GitHubMirrorSettings({ onAdvancedOptionsChange({ ...advancedOptions, [field]: value }); }; + const setSelectedStarLists = React.useCallback((lists: string[]) => { + onGitHubConfigChange({ + ...githubConfig, + starredLists: normalizeStarListNames(lists), + }); + }, [githubConfig, normalizeStarListNames, onGitHubConfigChange]); + + const loadStarLists = React.useCallback(async () => { + if ( + loadingStarLists || + loadedStarLists || + attemptedStarListLoad || + !githubConfig.mirrorStarred + ) return; + + setAttemptedStarListLoad(true); + setLoadingStarLists(true); + try { + const response = await githubApi.getStarredLists(); + setAvailableStarLists(normalizeStarListNames(response.lists)); + setLoadedStarLists(true); + } catch { + // Keep UX usable with manual custom input even if list fetch fails. + // Allow retry on next popover open. + setLoadedStarLists(false); + } finally { + setLoadingStarLists(false); + } + }, [ + attemptedStarListLoad, + githubConfig.mirrorStarred, + loadedStarLists, + loadingStarLists, + normalizeStarListNames, + ]); + + React.useEffect(() => { + if (!starListsOpen || !githubConfig.mirrorStarred) return; + void loadStarLists(); + }, [starListsOpen, githubConfig.mirrorStarred, loadStarLists]); + + React.useEffect(() => { + if (!githubConfig.mirrorStarred) { + setStarListsOpen(false); + } + }, [githubConfig.mirrorStarred]); + + React.useEffect(() => { + if (!starListsOpen) { + setAttemptedStarListLoad(false); + } + }, [starListsOpen]); + // When metadata is disabled, all components should be disabled const isMetadataEnabled = mirrorOptions.mirrorMetadata; @@ -98,6 +198,17 @@ export function GitHubMirrorSettings({ const starredContentCount = Object.entries(starredRepoContent).filter(([key, value]) => key !== 'code' && value).length; const totalStarredOptions = 4; // releases, issues, PRs, wiki + const normalizedStarListSearch = starListSearch.trim(); + const canAddSearchAsStarList = normalizedStarListSearch.length > 0 + && !allKnownStarLists.some((list) => list.toLowerCase() === normalizedStarListSearch.toLowerCase()); + + const addCustomStarList = () => { + const trimmed = customStarListName.trim(); + if (!trimmed) return; + setSelectedStarLists([...selectedStarLists, trimmed]); + setCustomStarListName(""); + }; + return (
{/* Repository Selection Section */} @@ -312,6 +423,143 @@ export function GitHubMirrorSettings({
)} + {/* Star list selection */} + {githubConfig.mirrorStarred && ( +
+ + + + + + + + + + + {loadingStarLists ? "Loading star lists..." : "No matching lists"} + + + {allKnownStarLists.map((list) => { + const isSelected = selectedStarLists.some( + (selected) => selected.toLowerCase() === list.toLowerCase(), + ); + + return ( + { + if (isSelected) { + setSelectedStarLists( + selectedStarLists.filter( + (selected) => selected.toLowerCase() !== list.toLowerCase(), + ), + ); + } else { + setSelectedStarLists([...selectedStarLists, list]); + } + }} + > + + {list} + + ); + })} + + + + + {canAddSearchAsStarList && ( +
+ +
+ )} +
+
+ +

+ Leave empty to mirror all starred repositories. Select one or more lists to limit syncing. +

+ + {selectedStarLists.length > 0 && ( +
+ {selectedStarLists.map((list) => ( + + {list} + + + ))} +
+ )} + +
+ setCustomStarListName(event.target.value)} + placeholder="Add custom list name" + className="h-8 text-xs" + /> + +
+
+ )} + {/* Duplicate name handling for starred repos */} {githubConfig.mirrorStarred && (
diff --git a/src/lib/api.ts b/src/lib/api.ts index da66b12..0840bd6 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -78,6 +78,10 @@ export const githubApi = { method: "POST", body: JSON.stringify({ token }), }), + getStarredLists: () => + apiRequest<{ success: boolean; lists: string[] }>("/github/starred-lists", { + method: "GET", + }), }; // Gitea API diff --git a/src/lib/db/schema.ts b/src/lib/db/schema.ts index 231c206..589db66 100644 --- a/src/lib/db/schema.ts +++ b/src/lib/db/schema.ts @@ -26,6 +26,7 @@ export const githubConfigSchema = z.object({ includeOrganizations: z.array(z.string()).default([]), starredReposOrg: z.string().optional(), starredReposMode: z.enum(["dedicated-org", "preserve-owner"]).default("dedicated-org"), + starredLists: z.array(z.string()).default([]), mirrorStrategy: z.enum(["preserve", "single-org", "flat-user", "mixed"]).default("preserve"), defaultOrg: z.string().optional(), starredCodeOnly: z.boolean().default(false), diff --git a/src/lib/env-config-loader.ts b/src/lib/env-config-loader.ts index ef2a7e9..497545a 100644 --- a/src/lib/env-config-loader.ts +++ b/src/lib/env-config-loader.ts @@ -25,6 +25,7 @@ interface EnvConfig { autoMirrorStarred?: boolean; starredReposOrg?: string; starredReposMode?: 'dedicated-org' | 'preserve-owner'; + starredLists?: string[]; mirrorStrategy?: 'preserve' | 'single-org' | 'flat-user' | 'mixed'; }; gitea: { @@ -99,6 +100,9 @@ function parseEnvConfig(): EnvConfig { const protectedRepos = process.env.CLEANUP_PROTECTED_REPOS ? process.env.CLEANUP_PROTECTED_REPOS.split(',').map(r => r.trim()).filter(Boolean) : undefined; + const starredLists = process.env.MIRROR_STARRED_LISTS + ? process.env.MIRROR_STARRED_LISTS.split(',').map((list) => list.trim()).filter(Boolean) + : undefined; return { github: { @@ -117,6 +121,7 @@ function parseEnvConfig(): EnvConfig { autoMirrorStarred: process.env.AUTO_MIRROR_STARRED === 'true', starredReposOrg: process.env.STARRED_REPOS_ORG, starredReposMode: process.env.STARRED_REPOS_MODE as 'dedicated-org' | 'preserve-owner', + starredLists, mirrorStrategy: process.env.MIRROR_STRATEGY as 'preserve' | 'single-org' | 'flat-user' | 'mixed', }, gitea: { @@ -267,6 +272,7 @@ export async function initializeConfigFromEnv(): Promise { defaultOrg: envConfig.gitea.organization || existingConfig?.[0]?.githubConfig?.defaultOrg || 'github-mirrors', starredCodeOnly: envConfig.github.starredCodeOnly ?? existingConfig?.[0]?.githubConfig?.starredCodeOnly ?? false, autoMirrorStarred: envConfig.github.autoMirrorStarred ?? existingConfig?.[0]?.githubConfig?.autoMirrorStarred ?? false, + starredLists: envConfig.github.starredLists ?? existingConfig?.[0]?.githubConfig?.starredLists ?? [], }; // Build Gitea config diff --git a/src/lib/github-star-lists.test.ts b/src/lib/github-star-lists.test.ts new file mode 100644 index 0000000..f7811f1 --- /dev/null +++ b/src/lib/github-star-lists.test.ts @@ -0,0 +1,319 @@ +import { describe, expect, test, mock } from "bun:test"; +import { + getGithubStarredListNames, + getGithubStarredRepositories, +} from "@/lib/github"; + +function makeRestStarredRepo(overrides: Record = {}) { + return { + name: "demo", + full_name: "acme/demo", + html_url: "https://github.com/acme/demo", + clone_url: "https://github.com/acme/demo.git", + owner: { + login: "acme", + type: "Organization", + }, + private: false, + fork: false, + has_issues: true, + archived: false, + size: 123, + language: "TypeScript", + description: "Demo", + default_branch: "main", + visibility: "public", + disabled: false, + created_at: "2024-01-01T00:00:00Z", + updated_at: "2024-01-02T00:00:00Z", + ...overrides, + }; +} + +function makeGraphqlListRepo( + nameWithOwner: string, + overrides: Record = {}, +) { + const [owner, name] = nameWithOwner.split("/"); + return { + __typename: "Repository" as const, + name, + nameWithOwner, + url: `https://github.com/${nameWithOwner}`, + sshUrl: `git@github.com:${nameWithOwner}.git`, + isPrivate: false, + isFork: false, + isArchived: false, + isDisabled: false, + hasIssuesEnabled: true, + diskUsage: 456, + description: `${name} repo`, + defaultBranchRef: { name: "main" }, + visibility: "PUBLIC" as const, + updatedAt: "2024-01-02T00:00:00Z", + createdAt: "2024-01-01T00:00:00Z", + owner: { + __typename: "Organization" as const, + login: owner, + }, + primaryLanguage: { name: "TypeScript" }, + ...overrides, + }; +} + +describe("GitHub starred lists support", () => { + test("falls back to REST starred endpoint when no lists are configured", async () => { + const paginate = mock(async () => [makeRestStarredRepo()]); + const graphql = mock(async () => { + throw new Error("GraphQL should not be used in REST fallback path"); + }); + + const octokit = { + paginate, + graphql, + activity: { + listReposStarredByAuthenticatedUser: () => {}, + }, + } as any; + + const repos = await getGithubStarredRepositories({ + octokit, + config: { githubConfig: { starredLists: [] } } as any, + }); + + expect(repos).toHaveLength(1); + expect(repos[0].fullName).toBe("acme/demo"); + expect(repos[0].isStarred).toBe(true); + expect(paginate).toHaveBeenCalledTimes(1); + expect(graphql).toHaveBeenCalledTimes(0); + }); + + test("filters starred repositories by configured list names and de-duplicates", async () => { + const paginate = mock(async () => []); + const graphql = mock(async (_query: string, variables?: Record) => { + if (!variables || !("listId" in variables)) { + return { + viewer: { + lists: { + nodes: [ + null, + { id: "list-1", name: "HomeLab" }, + { id: "list-2", name: "DotTools" }, + { id: "list-3", name: "Ideas" }, + ], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + } + + if (variables.listId === "list-1") { + return { + node: { + items: { + nodes: [ + null, + makeGraphqlListRepo("acme/repo-a"), + makeGraphqlListRepo("acme/repo-b"), + ], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + } + + return { + node: { + items: { + nodes: [ + makeGraphqlListRepo("acme/repo-b"), + makeGraphqlListRepo("acme/repo-c"), + ], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + }); + + const octokit = { + paginate, + graphql, + activity: { + listReposStarredByAuthenticatedUser: () => {}, + }, + } as any; + + const repos = await getGithubStarredRepositories({ + octokit, + config: { + githubConfig: { + starredLists: ["homelab", "dottools"], + }, + } as any, + }); + + expect(repos).toHaveLength(3); + expect(repos.map((repo) => repo.fullName).sort()).toEqual([ + "acme/repo-a", + "acme/repo-b", + "acme/repo-c", + ]); + expect(paginate).toHaveBeenCalledTimes(0); + }); + + test("matches configured list names even when separators differ", async () => { + const paginate = mock(async () => []); + const graphql = mock(async (_query: string, variables?: Record) => { + if (!variables || !("listId" in variables)) { + return { + viewer: { + lists: { + nodes: [ + { id: "list-1", name: "UI Frontend" }, + { id: "list-2", name: "Email | Self - Hosted" }, + { id: "list-3", name: "PaaS | Hosting | Deploy" }, + ], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + } + + if (variables.listId === "list-1") { + return { + node: { + items: { + nodes: [makeGraphqlListRepo("acme/ui-app")], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + } + + if (variables.listId === "list-2") { + return { + node: { + items: { + nodes: [makeGraphqlListRepo("acme/email-app")], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + } + + return { + node: { + items: { + nodes: [makeGraphqlListRepo("acme/paas-app")], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + }); + + const octokit = { + paginate, + graphql, + activity: { + listReposStarredByAuthenticatedUser: () => {}, + }, + } as any; + + const repos = await getGithubStarredRepositories({ + octokit, + config: { + githubConfig: { + starredLists: ["ui-frontend", "email-self-hosted", "paas-hosting-deploy"], + }, + } as any, + }); + + expect(repos).toHaveLength(3); + expect(repos.map((repo) => repo.fullName).sort()).toEqual([ + "acme/email-app", + "acme/paas-app", + "acme/ui-app", + ]); + expect(paginate).toHaveBeenCalledTimes(0); + }); + + test("throws when configured star list names do not match any GitHub list", async () => { + const paginate = mock(async () => []); + const graphql = mock(async (_query: string, variables?: Record) => { + if (!variables || !("listId" in variables)) { + return { + viewer: { + lists: { + nodes: [{ id: "list-1", name: "HomeLab" }], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + } + + return { + node: { + items: { + nodes: [], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + }); + + const octokit = { + paginate, + graphql, + activity: { + listReposStarredByAuthenticatedUser: () => {}, + }, + } as any; + + await expect( + getGithubStarredRepositories({ + octokit, + config: { + githubConfig: { + starredLists: ["MissingList"], + }, + } as any, + }), + ).rejects.toThrow("Configured GitHub star lists not found"); + expect(paginate).toHaveBeenCalledTimes(0); + }); + + test("returns all available starred list names with pagination", async () => { + const graphql = mock(async (_query: string, variables?: Record) => { + if (!variables?.after) { + return { + viewer: { + lists: { + nodes: [ + null, + { id: "a", name: "HomeLab" }, + { id: "b", name: "DotTools" }, + ], + pageInfo: { hasNextPage: true, endCursor: "cursor-1" }, + }, + }, + }; + } + + return { + viewer: { + lists: { + nodes: [ + { id: "c", name: "Ideas" }, + ], + pageInfo: { hasNextPage: false, endCursor: null }, + }, + }, + }; + }); + + const octokit = { graphql } as any; + const lists = await getGithubStarredListNames({ octokit }); + expect(lists).toEqual(["HomeLab", "DotTools", "Ideas"]); + expect(graphql).toHaveBeenCalledTimes(2); + }); +}); diff --git a/src/lib/github.ts b/src/lib/github.ts index 8753fcb..dc3db64 100644 --- a/src/lib/github.ts +++ b/src/lib/github.ts @@ -300,6 +300,239 @@ export async function getGithubRepositories({ } } +function getStarredListMatchKey(rawValue: string): string { + const normalized = rawValue.normalize("NFKC").trim().toLowerCase(); + const tokens = normalized.match(/[\p{L}\p{N}]+/gu); + return tokens ? tokens.join("") : ""; +} + +function normalizeStarredListNames(rawLists: unknown): string[] { + if (!Array.isArray(rawLists)) return []; + + const deduped = new Map(); + for (const value of rawLists) { + if (typeof value !== "string") continue; + const trimmed = value.trim(); + if (!trimmed) continue; + const matchKey = getStarredListMatchKey(trimmed); + if (!matchKey || deduped.has(matchKey)) continue; + deduped.set(matchKey, trimmed); + } + + return [...deduped.values()]; +} + +function toHttpsCloneUrl(repoUrl: string): string { + return repoUrl.endsWith(".git") ? repoUrl : `${repoUrl}.git`; +} + +interface GitHubStarListNode { + id: string; + name: string; +} + +interface GitHubRepositoryListItem { + __typename: "Repository"; + name: string; + nameWithOwner: string; + url: string; + sshUrl: string; + isPrivate: boolean; + isFork: boolean; + isArchived: boolean; + isDisabled: boolean; + hasIssuesEnabled: boolean; + diskUsage: number; + description: string | null; + defaultBranchRef: { name: string } | null; + visibility: "PUBLIC" | "PRIVATE" | "INTERNAL"; + updatedAt: string; + createdAt: string; + owner: { + __typename: "Organization" | "User" | string; + login: string; + }; + primaryLanguage: { + name: string; + } | null; +} + +async function getGithubStarLists(octokit: Octokit): Promise { + const allLists: GitHubStarListNode[] = []; + let cursor: string | null = null; + + do { + const result = await octokit.graphql<{ + viewer: { + lists: { + nodes: Array | null; + pageInfo: { + hasNextPage: boolean; + endCursor: string | null; + }; + }; + }; + }>( + ` + query($after: String) { + viewer { + lists(first: 50, after: $after) { + nodes { + id + name + } + pageInfo { + hasNextPage + endCursor + } + } + } + } + `, + { after: cursor }, + ); + + const lists = (result.viewer.lists.nodes ?? []).filter( + (list): list is GitHubStarListNode => + !!list && + typeof list.id === "string" && + typeof list.name === "string", + ); + allLists.push(...lists); + + if (!result.viewer.lists.pageInfo.hasNextPage) break; + cursor = result.viewer.lists.pageInfo.endCursor; + } while (cursor); + + return allLists; +} + +async function getGithubRepositoriesForStarList( + octokit: Octokit, + listId: string, +): Promise { + const repositories: GitHubRepositoryListItem[] = []; + let cursor: string | null = null; + + do { + const result = await octokit.graphql<{ + node: { + items: { + nodes: Array | null; + pageInfo: { + hasNextPage: boolean; + endCursor: string | null; + }; + }; + } | null; + }>( + ` + query($listId: ID!, $after: String) { + node(id: $listId) { + ... on UserList { + items(first: 100, after: $after) { + nodes { + __typename + ... on Repository { + name + nameWithOwner + url + sshUrl + isPrivate + isFork + isArchived + isDisabled + hasIssuesEnabled + diskUsage + description + defaultBranchRef { + name + } + visibility + updatedAt + createdAt + owner { + __typename + login + } + primaryLanguage { + name + } + } + } + pageInfo { + hasNextPage + endCursor + } + } + } + } + } + `, + { listId, after: cursor }, + ); + + const listNode = result.node; + if (!listNode) break; + + const nodes = listNode.items.nodes ?? []; + for (const node of nodes) { + if (node?.__typename === "Repository") { + repositories.push(node); + } + } + + if (!listNode.items.pageInfo.hasNextPage) break; + cursor = listNode.items.pageInfo.endCursor; + } while (cursor); + + return repositories; +} + +function mapGraphqlRepoToGitRepo(repo: GitHubRepositoryListItem): GitRepo { + const visibility = (repo.visibility ?? "PUBLIC").toLowerCase() as GitRepo["visibility"]; + const createdAt = repo.createdAt ? new Date(repo.createdAt) : new Date(); + const updatedAt = repo.updatedAt ? new Date(repo.updatedAt) : new Date(); + + return { + name: repo.name, + fullName: repo.nameWithOwner, + url: repo.url, + cloneUrl: toHttpsCloneUrl(repo.url), + + owner: repo.owner.login, + organization: repo.owner.__typename === "Organization" ? repo.owner.login : undefined, + mirroredLocation: "", + destinationOrg: null, + + isPrivate: repo.isPrivate, + isForked: repo.isFork, + forkedFrom: undefined, + + hasIssues: repo.hasIssuesEnabled, + isStarred: true, + isArchived: repo.isArchived, + + size: repo.diskUsage ?? 0, + hasLFS: false, + hasSubmodules: false, + + language: repo.primaryLanguage?.name ?? null, + description: repo.description, + defaultBranch: repo.defaultBranchRef?.name || "main", + visibility, + + status: "imported", + isDisabled: repo.isDisabled, + lastMirrored: undefined, + errorMessage: undefined, + + importedAt: new Date(), + createdAt, + updatedAt, + }; +} + export async function getGithubStarredRepositories({ octokit, config, @@ -308,6 +541,46 @@ export async function getGithubStarredRepositories({ config: Partial; }): Promise { try { + const configuredLists = normalizeStarredListNames( + config.githubConfig?.starredLists, + ); + + if (configuredLists.length > 0) { + const allLists = await getGithubStarLists(octokit); + const configuredMatchKeySet = new Set( + configuredLists.map((list) => getStarredListMatchKey(list)), + ); + + const matchedLists = allLists.filter((list) => + configuredMatchKeySet.has(getStarredListMatchKey(list.name)), + ); + + if (matchedLists.length === 0) { + const availableListNames = normalizeStarredListNames( + allLists.map((list) => list.name), + ); + const preview = availableListNames.slice(0, 20).join(", "); + const availableSuffix = preview + ? `. Available lists: ${preview}${availableListNames.length > 20 ? ", ..." : ""}` + : ""; + throw new Error( + `Configured GitHub star lists not found: ${configuredLists.join(", ")}${availableSuffix}`, + ); + } + + const deduped = new Map(); + for (const list of matchedLists) { + const repos = await getGithubRepositoriesForStarList(octokit, list.id); + for (const repo of repos) { + const key = repo.nameWithOwner.toLowerCase(); + if (deduped.has(key)) continue; + deduped.set(key, mapGraphqlRepoToGitRepo(repo)); + } + } + + return [...deduped.values()]; + } + const starredRepos = await octokit.paginate( octokit.activity.listReposStarredByAuthenticatedUser, { @@ -362,6 +635,15 @@ export async function getGithubStarredRepositories({ } } +export async function getGithubStarredListNames({ + octokit, +}: { + octokit: Octokit; +}): Promise { + const lists = await getGithubStarLists(octokit); + return normalizeStarredListNames(lists.map((list) => list.name)); +} + /** * Get user github organizations */ diff --git a/src/lib/utils/config-defaults.ts b/src/lib/utils/config-defaults.ts index b6c6503..3af6be7 100644 --- a/src/lib/utils/config-defaults.ts +++ b/src/lib/utils/config-defaults.ts @@ -85,6 +85,7 @@ export async function createDefaultConfig({ userId, envOverrides = {} }: Default includeOrganizations: [], starredReposOrg: "starred", starredReposMode: "dedicated-org", + starredLists: [], mirrorStrategy: "preserve", defaultOrg: "github-mirrors", }, diff --git a/src/lib/utils/config-mapper.ts b/src/lib/utils/config-mapper.ts index 933c1b6..de4d178 100644 --- a/src/lib/utils/config-mapper.ts +++ b/src/lib/utils/config-mapper.ts @@ -20,6 +20,17 @@ type DbGiteaConfig = z.infer; type DbScheduleConfig = z.infer; type DbCleanupConfig = z.infer; +function normalizeStarredLists(lists: string[] | undefined): string[] { + if (!Array.isArray(lists)) return []; + const deduped = new Set(); + for (const list of lists) { + const trimmed = list.trim(); + if (!trimmed) continue; + deduped.add(trimmed); + } + return [...deduped]; +} + /** * Maps UI config structure to database schema structure */ @@ -50,6 +61,7 @@ export function mapUiToDbConfig( // Starred repos organization starredReposOrg: giteaConfig.starredReposOrg, starredReposMode: giteaConfig.starredReposMode || "dedicated-org", + starredLists: normalizeStarredLists(githubConfig.starredLists), // Mirror strategy mirrorStrategy: giteaConfig.mirrorStrategy || "preserve", @@ -131,6 +143,7 @@ export function mapDbToUiConfig(dbConfig: any): { token: dbConfig.githubConfig?.token || "", privateRepositories: dbConfig.githubConfig?.includePrivate || false, // Map includePrivate to privateRepositories mirrorStarred: dbConfig.githubConfig?.includeStarred || false, // Map includeStarred to mirrorStarred + starredLists: normalizeStarredLists(dbConfig.githubConfig?.starredLists), }; // Map from database Gitea config to UI fields diff --git a/src/pages/api/github/starred-lists.ts b/src/pages/api/github/starred-lists.ts new file mode 100644 index 0000000..40387c2 --- /dev/null +++ b/src/pages/api/github/starred-lists.ts @@ -0,0 +1,53 @@ +import type { APIRoute } from "astro"; +import { db, configs } from "@/lib/db"; +import { eq } from "drizzle-orm"; +import { + createGitHubClient, + getGithubStarredListNames, +} from "@/lib/github"; +import { getDecryptedGitHubToken } from "@/lib/utils/config-encryption"; +import { jsonResponse, createSecureErrorResponse } from "@/lib/utils"; +import { requireAuthenticatedUserId } from "@/lib/auth-guards"; + +export const GET: APIRoute = async ({ request, locals }) => { + try { + const authResult = await requireAuthenticatedUserId({ request, locals }); + if ("response" in authResult) return authResult.response; + const userId = authResult.userId; + + const [config] = await db + .select() + .from(configs) + .where(eq(configs.userId, userId)) + .limit(1); + + if (!config) { + return jsonResponse({ + data: { success: false, message: "No configuration found for this user" }, + status: 404, + }); + } + + if (!config.githubConfig?.token) { + return jsonResponse({ + data: { success: false, message: "GitHub token is missing in config" }, + status: 400, + }); + } + + const token = getDecryptedGitHubToken(config); + const githubUsername = config.githubConfig?.owner || undefined; + const octokit = createGitHubClient(token, userId, githubUsername); + const lists = await getGithubStarredListNames({ octokit }); + + return jsonResponse({ + data: { + success: true, + lists, + }, + status: 200, + }); + } catch (error) { + return createSecureErrorResponse(error, "starred lists fetch", 500); + } +}; diff --git a/src/types/config.ts b/src/types/config.ts index acefcbf..47bc71a 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -61,6 +61,7 @@ export interface GitHubConfig { token: string; privateRepositories: boolean; mirrorStarred: boolean; + starredLists?: string[]; starredDuplicateStrategy?: DuplicateNameStrategy; starredReposMode?: StarredReposMode; }