From d77d46640da15f0583b95953539c806861957b11 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Tue, 27 Jun 2023 23:13:38 +0300 Subject: [PATCH] NAS-122451 / 23.10 / Add `deluge` to `community` apps (#1263) * add `deluge` to `community` apps * update UI and add a test * fix default values --- library/ix-dev/community/deluge/Chart.lock | 6 + library/ix-dev/community/deluge/Chart.yaml | 26 ++ library/ix-dev/community/deluge/README.md | 3 + library/ix-dev/community/deluge/app-readme.md | 3 + .../community/deluge/charts/common-1.0.8.tgz | Bin 0 -> 55445 bytes .../community/deluge/ci/basic-values.yaml | 7 + .../community/deluge/ci/hostnet-values.yaml | 10 + library/ix-dev/community/deluge/item.yaml | 7 + library/ix-dev/community/deluge/metadata.yaml | 18 ++ .../ix-dev/community/deluge/questions.yaml | 280 ++++++++++++++++++ .../community/deluge/templates/NOTES.txt | 1 + .../community/deluge/templates/_deluge.tpl | 118 ++++++++ .../community/deluge/templates/_portal.tpl | 12 + .../community/deluge/templates/common.yaml | 9 + .../ix-dev/community/deluge/upgrade_info.json | 1 + .../ix-dev/community/deluge/upgrade_strategy | 31 ++ library/ix-dev/community/deluge/values.yaml | 36 +++ 17 files changed, 568 insertions(+) create mode 100644 library/ix-dev/community/deluge/Chart.lock create mode 100644 library/ix-dev/community/deluge/Chart.yaml create mode 100644 library/ix-dev/community/deluge/README.md create mode 100644 library/ix-dev/community/deluge/app-readme.md create mode 100644 library/ix-dev/community/deluge/charts/common-1.0.8.tgz create mode 100644 library/ix-dev/community/deluge/ci/basic-values.yaml create mode 100644 library/ix-dev/community/deluge/ci/hostnet-values.yaml create mode 100644 library/ix-dev/community/deluge/item.yaml create mode 100644 library/ix-dev/community/deluge/metadata.yaml create mode 100644 library/ix-dev/community/deluge/questions.yaml create mode 100644 library/ix-dev/community/deluge/templates/NOTES.txt create mode 100644 library/ix-dev/community/deluge/templates/_deluge.tpl create mode 100644 library/ix-dev/community/deluge/templates/_portal.tpl create mode 100644 library/ix-dev/community/deluge/templates/common.yaml create mode 100644 library/ix-dev/community/deluge/upgrade_info.json create mode 100755 library/ix-dev/community/deluge/upgrade_strategy create mode 100644 library/ix-dev/community/deluge/values.yaml diff --git a/library/ix-dev/community/deluge/Chart.lock b/library/ix-dev/community/deluge/Chart.lock new file mode 100644 index 0000000000..2b3785e803 --- /dev/null +++ b/library/ix-dev/community/deluge/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.8 +digest: sha256:254efaa1285f634b7a80b7baadeadbd20a680f7fee49d1d9d3c4618aa0d657ad +generated: "2023-06-13T16:21:59.289590931+03:00" diff --git a/library/ix-dev/community/deluge/Chart.yaml b/library/ix-dev/community/deluge/Chart.yaml new file mode 100644 index 0000000000..0c56c8a085 --- /dev/null +++ b/library/ix-dev/community/deluge/Chart.yaml @@ -0,0 +1,26 @@ +name: deluge +description: Deluge is a lightweight, Free Software, cross-platform BitTorrent client. +annotations: + title: Deluge +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '9.5.3' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.0.8 +home: https://deluge-torrent.org +icon: https://deluge-torrent.org/images/deluge_logo.png +sources: + - https://hub.docker.com/r/linuxserver/deluge + - https://github.com/truenas/charts/tree/master/community/deluge + - https://deluge-torrent.org/ +keywords: + - torrent + - download diff --git a/library/ix-dev/community/deluge/README.md b/library/ix-dev/community/deluge/README.md new file mode 100644 index 0000000000..5774997b15 --- /dev/null +++ b/library/ix-dev/community/deluge/README.md @@ -0,0 +1,3 @@ +# Deluge + +[Deluge](https://deluge-torrent.org/) is a lightweight, Free Software, cross-platform BitTorrent client. diff --git a/library/ix-dev/community/deluge/app-readme.md b/library/ix-dev/community/deluge/app-readme.md new file mode 100644 index 0000000000..5774997b15 --- /dev/null +++ b/library/ix-dev/community/deluge/app-readme.md @@ -0,0 +1,3 @@ +# Deluge + +[Deluge](https://deluge-torrent.org/) is a lightweight, Free Software, cross-platform BitTorrent client. diff --git a/library/ix-dev/community/deluge/charts/common-1.0.8.tgz b/library/ix-dev/community/deluge/charts/common-1.0.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..63acf6504fc01a193759a77ae6c5336dad5baeb8 GIT binary patch literal 55445 zcmV)&K#ad1iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMYaciT9!I68m(Q{Zu&-&nb}B=6I{oy>DP>2z*q@rj-8cPEoy z4opH4#uUMjkQ`6q@BR)p5*rsSRyt|%obFg8P^ccRzlbpirFa3qv zvWfdf9+)JALW)U}pKJg?F^$m)IOC%Nyueo(%x(c69UCykzo9J0Bsl@oy$zVA<>4!SyeC~8NmM^cs&^45W^UpK?-9s+!#ZgP>2(h?2)BL2@yScgP%1^9#Z$p$8V|#<% zrszZ=v@umU?{@p$zi)hP{(tR9&i^TlCn&$C1)yR6AMfoR*z^B*Z$1B4^86L-?0~I^ zgn94H)6*v}pLWMlXJZ(XD;To{A%<5d&QHMSyA1&J#X`Ip=PBvF0>cKh;ciZVyBox=)j_A0SC>euk6VwB-A93qBahEkGaO0wG% z5Cm*vgG2dOI*H?R665gp1Uw(SBJ?~%IZEip#udy*&wUWshXTey_n^DCUk@oIIUQyw z_d-)23y8ai-MxBverj_RPBKhy&qzYiC(7ChiQG>`C!N22{^SH49{rvFdi(P9;@1-p z^!vOy0J2GPn!h5+8$zhqT+7#QbCi`;`KxCcnWWk~1f$nUe9LP8jAJA=Yz+>KV{&tz z;VF*M5IxO97(*c+3}Bp#GO79;>2GrshGd+cXJmk5qz0VW$lpv7Hi+ax!as#Dg;zMn z6r*CYz$iKa@7~K_QAUb!3&0LIeer@ZoJ8W~z@|;UI2*xah*Y1v=8SrY^D(61NFX{% z(-@6WLSf8nc!gO*14*LE6nExE3F&{a9e}?&3 z`Zz(kQFPZTc-Vi*O1}E-`IG0TAI?tCFGS%T)+bfiq$GNs7Lp)J;8lz+#LD{uC)at| zK_imWSBTz_?7DoJA-+B+W}U`2@Rp77D9P13xpe=Gvz&@AXCxWmp+Jt5jSF0b6qiJV z=0(?WLFEJld;~K*PGbynq}WbLj54)D@i&h_GDd(BaG6ce ztJ4c`ad!IRDgS&qg2^?wB@-bpCpm?2%r>phpFvk>Xs6{4+~u-5xVr@*=LvXwd1iDU8_qF- zkv=EXJ1*|%g{4ShF30?pQ&baDjOkXsmcrCuK|X>R;%m}hftrG9VJt+Nr~Eazx&@I~ z1OFk*Q$qxjFZm!phjerTdIG#E4YMJl7br#{J&ogH-To_>!Yn4k{NB)*!mP&{XhejL z(|bdLj?>2WBQ(uN<9kCPLepM88rPyB2GaB7-zcOg0)vc<#fkyOIErF)12eSoSHSjR zK0h-wKp7iTfDQQ#{ORc@in0X8&l8HW0Su8`b0?YHi{HJ!?>5-7n=hrIGn7$0z#*hd z0{9z=Cki=z&T>KWd=keOD9jMeOX;$F=~N0i(PNnM(#0>&+QF(T5spLhuP$;^(pMMx z%BhiE!BEH)S1@$pg)l}=FA2EbPY!Lon8yCHuJ+R3?z8i^W$9<p0Rn^irSrXL2AB;+zi??cKYpgb1>M>?NzsKNeobbMslfA;!Ehr4V0 z&nlkJpL-9%8$>5rl5;UD!L-yO0UbdK2KW=ofi@Dr!`|K92CsSs<5&o7Y6zWdeEtk@ z62_AVfdGH%PItRvlyza6b~P{o*otsSLGbqZlYpsSAb3{%#dgmC1Pq^`1McoNxE&X4 z2`vG}ofCm;DJg?3xdET3H=PZx|Gs_xgbCasSLO^lDA{<%N<6D8A&K2#`#Vk=Y1+AC zvK%YF$uT~81iJi>FG@gQRB`-_!UfaWcFAj*Z?x)F?Ttw!YVtp{3Xm&fW^*^aTV} zPLv!#9D}Vi!wDUL;9TpTvtp#~fOo9sd%(ak&4g(HWB}eh$lnKG>)!+?AlL?hYCy*X zC6P`99)PWDoJ7xa)>Bg$<0ufF=|QU+9aiBz(~}sLS4c>Lfv4HJR*f+*Q}ag6h4Fay z{K-tMKYRXU;WppS*yh_7ZL(he{MnvucXy@9BPtXCA;7cJeExDcTm}?EI?04(kQ@1g z0i?9%nD(5)OrtD1nyF@YkK1ZI#yrCk*LUo2eUA;VG@(^l=gJaQRx`~^cJ|Bb-(MBK zWlzbaL-va(`19-EUp;+el$6{C{1^@Q!ffH%Mt`N0yejD3MtqLLGWM#9t;CXN5?HcCXrblYK1q9&OsmLIw}`jaCZmzM*VyM_ox$F+%?A_JBG^G6`J`Yw!rdKs5B|^pF^dkJqR(W}iXJNY$gm?B z>z^*Tke$=*cJ=-l;7=b2tMDk`V_9RD8rhYwaZ*748GovU&DMaxI|l4&Ao$C5OgsSM zEjLrL7KeC>5|gtoZ=u7m0=COCMVLO^V1^p`Ca7bgL+)_S;aycDO$;;|Fu^Hq!^r(XmjdBn={-*BbO3mnPRI5*m+Y?P1JB&{uw7YAE8K)VxZs_)|R&c zMVTW1L@()I!|rq52v+m1t7WyrY*VZ^r&$%3fy7JlxhU_jx0=Dau--JoD%q?v8aiCA znp)yTL=v>2%Urtt*Qo!?!^*jp|3>|PcdviEYwQ2J`~9{4zlz7y|BJI}kdg@8U^=o5 z0!%&|@ReU5*c*_a;iMVbnWV!EMhN_yT(Mbp1;gt}%H}4BAca>jM+;dGBz}eIAc12P zfS`OI2$Sk7^Zibkp@@AI_?$yJ3P8|PpFfD#0SF2qJ^=FMtXsSiW(d}zVTRxu1Q~D| zb^i5Au9cPvRX~}3dF8DPeVpJ7MHVzsL~)<-+-QT*gc6EjoNttL8MyHmlz^O)4Ds5c z;5NYYZ#jQaVEMNkq`ZECtj!V;(3o2r5QaXq=L%A~r>fo604R5I3#@q3438mG@r}2Z0m1MTDhhdx0pih20zdrl zgZ)982COfQrT|gOFkgtrG-Ak^mrjILq^Qvq#kyfS0fxXZQ5wixRaknkLlxA*MFcq!~KLplLgYGVd1j_@{#juCv;u~lZ4_J zq{9z5XPt8kcHV-`&*!f%E}y-5dhy}y#nU%;U}pqk62f>ya{AvOA|Q_uO2OWLbBQjn zIv9U{WLf@(-#SrDk~*^%6s{A^epd3s4?oDWk{^Efp##2v1Sd=s07pRXQJaEKKk+sC zf5;VENrm6Sjx2!(Uoom{_m#)^Tj>1iQ}3bj z3}OPnHM&(+yHt2W0-OL7hi&Qi29q4zAif!p3C(eYq$9xAc}A|_ReTH1o_9p)7*U{$ zso8|-jZ)WaqCiux)Y>gJLSuhnYmyCwgBOGJf5?^PPR$VuMkpS4^HFa^$aQd{%hT@n zog0LQBO085U^no5j!=v!+DWUOYTd{q#%2zv%L3Sp()BLwm_Hcx|#Wn?SeCJ z8D{n7wb(9SzsN1JMek{+4dPLo@!m6hPdlz>v9%UjYmqH2|Ke%8+G_89d3|wt=PtTF zQ&5H=WondEEyzHJ^W>+yLPs@iFX`|@G#RI0XD7O19C)N-^ybAK*xBK3ii|IsaD8{z zGr@n@+=?JY;J+UH@6Lnq&V%T~gI{(Yyxe(k(dp(NWANpRvLZnoqll|R3}vMY`Rqqx zeE|b$ce>xL#ypk>!I-c;!qyJF8&Yw`T48b6xq*(MfxTkg#r`fdN=m>L0%CA1!IJPh zWR&==2^^;elfn!}0h>hED!@xD+cdzL)J|~~%$P-al`NV?gWX}Rv{qx=DsgN?y63a@ z#$v2?-gT~eg=;?FJ#>$E_YRNv@$O8ApkikK-Z1*rYTz!J?(*ngMk8zaGtO7#V%o-t zynepf$Fcv1G0gMchtijI0mHw18vOtE4t9^N`=3V#M~7?s|0*7_d8*C^{F=GbY?eR7E-DM2fXfjA><8c9m`W;lJ${?KyHVCV zDXxaIDv7p1mIGM3#mWkazrDqb`>m|3_QG3%iHo8n`^!_LVefS~rn}NfZt(3_{jKe@ zB@=iF?dRRy#?H=;d0&5b;~KN=M|AZ|m~M;_g^|HRw&|5%x=FF~@%AL&*q%O~D7;LFqY#QexzFcVZDsX$Cup)uW5%(k-kGat(=hr=$>;$6-K#-st z5VP4>9O?XNrJBn9KO@P%$<-2e|Hl3Q@ZfOI-v4)x*605#dBiTCk>r2K)lznUF>Y3} z_w%CSx7dG$a>TEFQUb(E#_LJ~+wRAThNbMrngzXb^;OqQRnz7ogekPdmQoU}sHI$*?o@M4eS9hG(J6@n^-9=j^&ZJbB$MVu&tx$>cx8)?dh|s{ zM?{}DyL+}@g}Dxy@7u0OYM|DvOf7r1egC#u#g^VEvadIvlgPkgu9f8e@J%iB>X!QQ z`AUnvdYr{y$E)37)?Vku$#hwy#s0w8fw_8C)sv3D5E@KHTN7Bd8&}Us;c2#=pYINAu=&yfh z-F4-9tF5!z)B5kg!p>Gzzm}T1auxMkQcv$kHT{ZesaGX!HCE*-T?<{c2I_cD-i!QS zrT;DK?C&ov^uN7hTmL)UJ6`L5D|xt*x1_VbKi;`t`!m04@YCtpGPZd( zXuj@#&WCO7wyjFE*_~C{P~@%q9Y;uuRVWManAM^HxWN$uBm)VdU7mX`MiM&z(}tT* zI7zaI`el}CwYdw%-`6hA5rGprA{qV<=TMhz?D~HG`7_`;dv*%~ndR>diBSLo@sF|Q zmfU2m&A8pmtPwQ;1(-bLX^eQ>IYEE-4dN-~y06q{XSY}z#McJ#6$vI{ZD_QJ^SQ^% zF2{H?d6iF<{wH%(E=2=u(Ekqlhr9OukA8oDt^cj!;i{gD#I^(t zPz;-|s{_iRTdM_@W!mV0WoZ#>juqo6!JO~@fI#YdD_u^paLLX{GMwF|Oi38LPT|K1 z3aq?$=%cY&a3X`S%DT%hhfMk4m;0DI$ z=i4ABYU1VKh9nfw?3Q1{!AT@~nQ1dA$!M+su_jEK@c^)40F$W9{(VJA92nf_Sij8j zLSC|KY%xhrr%7Z9H9T>R3HYcmuRcFFwNFb-Gc(0!Fc~7oTj7$vE&jBpvtYxHNjWds zm9gwCwD5rEuG>=ic{tEuB=V z&tXQYj*h8&*RbEC?0sOIWn_#QT(PKDlcw|z23(zJvD(Wy_i1U4d_^L}SK4`yPKwG)$JrRXO@l-s#dn_t zkdXs~gK0Z7>=-Kb?7N2xV}-O+8!zQxZRKdt|K)k_VrGEG`yU6k|L5^xe;xmOC6A&1 z%idn19iZA@V5J9w##nAR7_`f_J0LV`&0KIWktoQ!pEuB}Z4S#hH4v;|CFGwP2rADLZ1)w$GX9?Zt3!(>DPmpE_Nt+2 zTT^sMep`lbRZ-WG2N1_#E6s312Oua?(1IN{x^PAkehB@WJdyzK9^~%$NZ%Tu_788kZfF+xA=AG^*GCA>szx zH!vA4cnsXI{_h{{JNn$zu@7B{VmQeV4mY)B4#H)vP*8Y zJjS>+s-6X^T5r@pzb-}a|9*zRg2SH43 z0?-$VwsDY^h(j!Orhf9sIeS*0EEh^~)@q*=t7GUvaY~PKmA<*#?K-D{s$t_;tT?q2 zkSKRwVrzeSl3c)XAyJqWhruM%0ZNdkNyJAkKlPMkXz&d4b_G!Hk%*O^!{n25Cg`z9JrcLMNXRGG0bkg)ELK;vfPpot~gn=`dPv?PbJM!$cAv~W3Xx1 zvmH#-iK-l?o&i)4#fn`LA@j1yq1O{V%MU6w{|l`E`_oRnBHMS4r1gfpd3y8$kH8j9 zWAmMwd`z##3H3BNF zhU%FSW(!saYz z{;?zf9Urd!|5oxC_WvF3wWNBTyDu$4pj(nNmYCLcf|_ZJZ!P;Z80(u!S(fM~3kjby zUO@h7E*n0_JI%&x9A~@IkGA=gzIEeCPM;u@o{{ucS^+G%PsQ^C-Hx-J%T?QUgY#Jg z9^_!B9AHdP5hj3~1Cc^ZQ1GDJX_O_*#w#4EWYPrtvL@cu{!Pfeb}6OQLdz_mpT;?1@Dn67w2*J(1CoL9B&IlxRb`CC z<%ey68UG985lN78QY?n~w1~=WvZC<#iwcLo$fqY2fE>?0R>Lz)&F?ibdF8z2sMrQ1denVVyb^*kS4B=PE0t%rePOQoJLpRiO|C|IwsHgN)&yu>F#njuDuxR9y&IO{kT z0@k11+rxbv`7g#-J?+jFmjlIKGPeNOtKq5?&*a zPcnlTfIi`z=9bsBavnD~CPt{%)p=n1rE_`8+RV%Wt(9^p7}t4BkEX_?~SqoV9Gjaq)K=ZM-h9 z8OhNCd?L1=CeL+)K@5j{$cU@C8Jd!7Ca?zRQ;IVb1s%Ing-Fj^=e6fz6zj_ec@4h; ziQ4Rpk%Y-3O7E59@+PlK9v>+hiN$H<92APtstzV=28Vx4@N>r*=r=~jS1<%M@BgJF zJg*4Q~5Yx6~gy|M;@=5A~z-xxan1d#8SG2BL|&y_0iKKRn>L zcEQU@P61n3gfkW62G<^70$`kuU@{q_42OcFAvAs@ zMh@SCDHxNSvJNO}Ma<+n6X+-`Lk4pzG&eAOHH#;}nfyx(w@I3;W-}o^Aiz zJ6!w!ujEnspXl#pS^pHgMQney*R;zPTHeq$D)^%`Yem|a6umSq!JrtGM~H?=k+=5} zrWFQ7R;|ILSZ^|nicYAo6Z#Mk%@(#n*29=2FuT(0DI zO9A>sGkD7WHdka3#KF3y>pk!G+(+s1;2=DuOd5l(9xpH%D zk`9=0p9HfJ{?+^^%=ptgD{y{$;jiDfa={ab4XTP^sQW)+_fn@HDOeD48yN z0?@GjA06&H@&Atx*7pCEJjVL}G?^}E*+?4(WM|tK? zwRAhK%EDjpnu1*dh;LW4He|^%4ZzPC8K3Cf%g`X#eWR5z?pJjC1`T+$?l42N_&LBR zj@X|b#gMxXBCr*s1Z-_i!546iZu3qD>~^GIp~?nTeg$8^0B1Sv2vj;Q&uT(H71lzO zOdm^62#}!xo1`N+MS$PH8*onw$FuO?1ScTa27zo@e`Da6lZ>9m=?He5IRBnF6`SZ& z3KMZ%?Zg`+zi==K0=u%`U%kFhT#jj%G^PSrF-FwS6Z;Atx%xM2lA8czCHIb?W>xMc zZY+}4{iT_gnH=yyxGy~p9E(E*pMCha7%za%HM(uUrg*8R2D_y-hb{p0$ z7T-m2(LhBA4qow*aaE)AS#pZ2QDYp4%sgmtB9|Q|1{AlcBk&-XQRleGP~1G<3gH;V z+$Bp=VmW~|bc3XHKqiSN9Fktfkpm*<^vB@``p7on%6Vip?+M!D;@+Aj)g1!%())wa zqi)?)^i4tck~&FF^DWCKttLpW-y5_H)8j?MS&B-5N;+1~Xcjeh^KuI*H+=<5y*RP= z9p01EuKF(iIEQrP!M!+tY+R9DaE}9L*E3jA6qFK^52FhHu*FU*Uq-wx3+hp@E$~|L zh0W66vUQ_{{?BC5`?UWa93JdD_TP2<$JIQJ{?B@QX+{7B?0Yc;2wIkG45-xWbOl1! z9yG~8;^eU*@Yg%0j?NQ`@nv64=>mAi`k*7xaF4c1%VTgJ1C+?LaJG`?QR|u`{ct0< zgS;Q@WnvxQ`t{Q*LPxU`B0G<1zdURV>wgnj?T}aXB`fCDA6dWoRJ^$~D$Yes$@4bq z4TiT_Cg0)8bQ%MX(qvYt)xRtBsy4cjsZrI}s3fRXlhP=*f^Zon$}rtQ;8z-%IL`)x zHSN8+lWfngb(P*|dRJ6vVG^%LnoE}tKRrVhN3vXu=D|?Zo(VmbaJ!ZM>+`3ZUrSLM zh!$A9Tp(0fh%zdDBUP@pRbvYFD}i6b9&Cn8W6F`2;?iK;+Ek&h7|T_`s=7kcJ^0}z zAJodiX6L_o*w3PBZYneEdds-f}0i4UDIWuDWS2&#%y&yLn z#Ruo0vS5(0gqKHi*0CNd&OdhQylB3)rM=bDwEhq9Clozh%n77n{XgE_ckDmMyX*CT zC6BTG|I9jjd0rrD?0gqHKuOF}w}9S5a5^P80tt>mN^n9^W=HZf0^#WkV}X-tbEwFZ zUQ%F%jdsF4OmT$a8BB9uWZMjh^*Hao`tA9X=cgaePR}nae@1;HD^?J@c!93g-lMiv zJ$NflMF^!&KTcq5K;}LTZxj4ce_J0I$!jL^;q=(F7EKcTae@jrmTG?n42ry$wJx%wRggVIF{BiX%jPR>KgcyjL~WctniC1B9377|de{ z^fRk4uwAwG{16DRe`X1{n4?f8+u=vC85#5FdUe`mG2iWMJt2(4Nz7vr&K}9s$ep&y zxxz4tO9796xcsLr1r`jv{HLCf#F~MT{Sw^oZEsr)kQtkniNUybeHc`A@b61Z+s@Ye2ioyrX4( z{`Z_9K3qJ#tO6qpi>+p2x#0}c$y^FV#^sxzxCxnN6V&N|fc1;^~_Yi$hr$0$Ugqh-dSGc=qP? z+w%{LgYiPB7-WRdpD);u$`FjWU+?QTARPk?j!}M_Q#5wR+AET9RoynglKe?Po={aP++!LE14 z`7JvF=+4))o|N*xW}5eRrm9RVi` zn1QOf{}qrP*_S!%%q$hDB}!;U8wDwkd}$AyT3!*kjj=&#mJf3Ch+YMtZnPW~n07Oi zk{nZ_Wnh}!qo%}1gZFq&j3^u~2Nep3v*EDiTu#=Jn%#hA;UXud0B)Or%CS+z4>B5` zg@frNj?YPq!`mujX)#cPvTOi?=Yv;-o@XdW39SjRw3)IB80n@uvubb}-@x0P>2hd_ zvcS@ZO}m>9@1lu?xLyK$+-!u?dO$PBm3a8@tg~enJpP(VPuEZJG|7K49-#0xjM4q& z|Jv^#AKUWZZvS{K|E=ON)^2FdO(FDz>w&Nf+cwAxg)iYOof?_ZgVTP75jze>r=^_&o?yA3NwN}?j8y%Tmo zoz7{A)nx+mZntas^bRZxj8x^tb|K)206jS8Dd*k1;eL2lBD)>)>Q(O{&vlcMNSsSc zl8kKRnru-ES{Ha3e~SF)?kyFAe-*dUJR%&jgF9&H?sGTMJr}qnX)43Jk1`AK^V($a z^PpXQk-fx02W?6UMGkzy&Ta9hHek(O5vz)g)@Cue{NvVPX~W<(QCH}A6YaMiz!fm- zMzAr83lgixvNfKoThYfvUNMqucv}$*#4|uD$9Bu{Z4m7pjdA7tM!GE5I9fq56V}nhp8bWfge@ws`C#^KE&@ z&TY2pmLCn%^Ndgul32G_&@insR~Xe(Syx>u-ZD6#K2|#!4qzN#!SMQt_+IRt3MX$k zH;t8r!dJ9qQsm`jQTCA})Xy%K6ysb*u9g!77 z8R6gt$FWh1Q*&9wEzBt^phYh%fMLDGXq)HTM4#X|jnOt6dADRDJjx-sJUi#8zkPBp zmK@%VY<0@nc;T;-$@mIoT^UJnRM>ggpQ_EAqsuY8LaOC1xMZR|Tf--ayRnlS9#D}p zDF-8%rYPY@b6Xb(f$PZ?$`Zsh#q!U;?)DFlcKe+!IE{0{2t$J0+~%QT9ONfqywf-j zU%kEra4hn{np4h4n2mXuz zGBxZLC^0XGNlh#fT39KpS{DkKDwm?LtGU~1>Yk8x4M|sNO^#_m_e-@EE1M=wJlE|8 zj$-7|5p*AOV``Z&QE&nO%tm{X3i!;o#! z6}R@N&^k%)b`eXeMAhS~VzBB|Z(KD|vQ1?@uH##!!1%RS*FXN#y#JG{MUw#6@Bh2~ z-6JRe*TF%5z5lP`G3@{6yt9|JUG3 zZ=OtklA3NH9KfaJ3u0JRl&NKyrC}gX-a9@wNy84uM?w9n?Q?<<73-2vnsL*02JD!E z26v3G@|-EeeCf{GxJ1aMOu7dffrSl-HO2_j{;jazmVY~9SINlg`_%;$ogH(KCoq`F z$wP0i{Lv7(0FlyxmBsGJwR<1@!5SeCZnNOKv- z%Ih1XHB{k0Ut|CBj|2`(o7i)C|H!exK+QfNWV7Xu8mFIf@ZR0=&BJp4@e$|sm07K` zjNnh{CnFd589agbSxrHbYv!Gm0ve_lB)tBbG>9!?5h4VHuZ91Ly~-BA-?J996{s%p z7?FwBsiGFmVxk7dN?(C%!!~HCTebiR6p~96Bx~sYM&-$pqGgGdwp7W>l)rSzld2x7 z$l_78NvdkLwBV2Ylcy*IMLfCJQCb?tuYfZat%x4|h!>;jUA;K00S&?q_^ zQj=%YiPPJH3{MGG(H@vqE&DU8VpCvMu|Kma=D@Zpm>*ejW7u1zjc;Im$?K2#G}-^k z;5+wq|7&+|fB(R_|8=;||G$#Q5Z~UY&R&k>R*aqRLTb~fS+*gt09_kzu}0D|%M_wT z`PwfackE-9N8GVM9cbDRu8e_Qyc2$vo{(lFfyV+6Ug z(Inw@%cCuH>~yhY)E<8h1MmVcFw z3nc1!oJ@3!CU>Rq-~Fg}l&>YB@&G0GU+*xcrx_Yg|57o_+GzfK$XRQHHMAK>Hj?!g zy>p;Uo@37SqA?Xb#!33k!%`Z#y#uco`fMx4WAG#Q1gjq9VzfLV2?a6^avqLQG>H-D zvz;vWdLRv{w0BH9ps&tf_>F6k+H&zUmfBdf7S)J1ST%X&`^ej$_Rz1`A}tM?GReEPDo!mC&3zwJHID{v%+h>HQ7ht`E10D_Q77s3DC z>i_Fs-FLe?KfM3K|NpMP^TYdxoh|m3{rP45kIrV`Ru|$agP>L0diV7F^4ZH@-{XIL zLHyN!b^ftw`b3~CBiYM*SdE&7-qv{xaRQzv6b<>zM#C=H?QDaspJM{4e9`Y7vR5y0 zjG6E+ULN-QD0`Y9y|lcVM9{R4E=F+D$uVPrdy2-Zj%Iv&9+gcJ=) zrsuv_%9bcEhScwf`#i!pCjdqf2!sL?0O5o=05=HSz=R69R(K+EXMI~LDxE~^5?rz}MXw+7R9aV+4_wA8}^^NLZCMI;!;dqP}UpP zXIkuip{iB|=2wN^<|y-*WM7J6Ja>e@oJg9&3VL$`xRv}V1n%xOAln1aGd#sH8ltC6 z$>;i*1EQ)RKP6YMBd1#Vi67XbFeKyjJR<`fb6-lfhdPzaV!}05Kiv?4QEH0^FGvXE z5y@#Fs>bTKYP_M*RQwBU|Ar8z@CwJ6V#JS9N?TJ{j;XRpmnjAu28^N;TfT0r1i((s z0mf(J&N^!VynF9ST~Uu=l#x_GV1Kp7v8*-=lDr8QOV@UCrY7dfSMAz0;hSH-b?TOU z%v%^fTPDIX^r3b}$VQmemopaMX_zMS1fledq)u%31}YT>ucs)>a3oy>i!y)9ea$;T zO|3ReHB`gZe;BS6=+-c)yiJ_*&;&OKjPY(^r#S2Dkn_v>7 zyP%hoJHkG^6Ww9YEampQglBdwN~zwJ6rju}O1MQ{0bP95BO>->J6ru~0P z;>j4jB$H(RG!RYkpN{sO{r~7_9shA9kFo!2oxQ{?5E|6)LI^PES+)=`C9#-nzKap| z74{TmInF6cLgaPStGsls?hlmpRUD)8O?mgi7a>5i9u)ge#SwxE&h7d_85A3tZoOMt zQ8GwmBnuP&HZ?`&bNy<4P2n;7M@l*_Yr4f}EdqJqh#6kU`Q)k^uKYMVRCN&G2U}$1 zFX3{9yA^0bYerHyRN{OkN6Jzj5{%I@02++y%nr&7;Wp???@+|=*KVDh#<7UtFR#Sq zfURdKiSnLy^@TMls@rvo5aDBZjX;i)9PyCd)6ky*fZybB(Y3+4&T!fSU|zi_-Y{mo*y*}^;d3!JUYHOH@-rA zt!1kTkLjPH5D#!z6_8jP_{BQlKhQ2dt78BIWiMq_<9Fs&sj6!lI?PzZ*pMr4)2Y-+ zutoT2b9tNlR^7tXyOhst)|Zl+E+lEqmS7m)KBbIQTg+-D-SBiT>XRne_$@mPB8>@5 zNi#Em@(3F~1T{IsVs<~#vY8_Ku%DfNp8<>nKrtbAz`DDUu%*W7#TEPF`M2wPBSi)Et8a!Y=MCO1zBx zVW&Ovuih3QXBcV}lyB=nfBuT$>l^HUJha(Pkw z_79KN@t;=m81_HbsX%n`a!h{>kyR^ge`Q?NP4UMc));6~xGZa+EF@^>1>~O|4<${6 zWf($Bx}5C-DN{awlwcn7K!=R5_uP|8>x>=S?Vpw6@tQ={(o4S0D3O(x6FBH#eI_-_ zGw=F8%+lqp|A+hb`hV14=l@vAW32zIQ}1Q{uM2Pf9c==72=)8l1gdrcBQxxrTL6P0 z)_+D*!}@PHV5?lVK7`7h%gIseAT8dAv3SzIZUKy{Wo-ef z45TAgCg>Tw%EJ*7i3?RcvM-9B8RTan_&?~Cs<@ur4Rx2->+=!|xjUDjPc zGR{42-CeH3sGjLa@0AAn@9s9_@IR>nJtDc5YMk%X7DyYSZ%+pxEo_5nX~g45%4_Qa zVIvQ^A0bN9Ul5E?mP@?K7tT#@nPs)O4QSc(in9h48_4w>ZJc-_a$wPm5)&hopurpf zbW>_+L1hnzRq$93bSQ2j7Cg5j2mW!4lk4Z+pLylKLZfRT0XFLY$F}|V;HbZr|5oyt z_dispu8jcm%YYi0-NS@P2I#X!&^8fAoo>EP?U!graN!L)80FhN7MQ z7C^)Lf3UZIWXFFyK3d=ZTgf9mheUsaqQkW?CyQ(X&Oq`-U#>jcVbio>1()EEaHx}u zan6@<)i%HdQ9RbeaFVh1Ng|i``t`k@f?3`BJ>F=RPwJNU0)A!rPMtpK>DFq$Q_bnr zdmX><@o2`SS|hfVK@BmRiU#bpZOQ;tmwnoU1Ww_2k+xa=Ihu5p>^a)yK zt!TuPf#(!b9M%Us@ggh$E->Uuv}d~uDckj8RX^%@1_{g8n^zS~cz%AStqF;Ta8d3J znNWtoR)Q*cV{^5Ax9VN$$LcXB<3|Ud$KYm!5`(Q+TvK=_ioLHNn&@K#F}AOscPv+M z(&K_Q3-up`6;+tLLU#1NN9_P;q;_eeM*F z-VjoB1AR`-GomH|&5qX0e$Q(meU*<_{>NiDMCX$@zCdAyXzxRqAxM$f^Jl*U+#vt& z9XS4fyZimUwfw(|N67VjfgQtiNn*b>e!AuGX%hN{O(?MZ`R6eAYyhq!h$>uLkVS3W z+9&~a^vr6+sWJp5!>^wjt)=~k_d@gF_dkKjKrG}i4n*J z0JEGPy%SEv8C>ZXe)1q!S1q(Hl5wv)$=NaD2s1~m$q__}% z1`;2aoOil+`S`G@ud$p~PYfmH zSQ9DR2eN#ta{9O}g!BW66Sw(`cqbOKXVHs@vRp1TYUmuR5AbpzH*)X{gt~NkAcDS7 z0r!co2X9+q;%jDGfZ@c?@^42wi>g6$OD4^qKH7ME3Ey!Opt$eYj|%Yn(?RWaiird3 ze%+qegEp!jStiI)XWuWy6)JSnm+a!TrI=N=@jum5R%>&lL_p5a@IJoXJ*TWcrv3io z7-xtK?zzcE4!T*PQ>@I#&+0?m(7(dpl>MV-T6UN+e3mbGwhk8>z#InbG+P=<4x2fKtC!4w0row3{KyCSR##h__T?Xp)X!0vtu^LK5y8HY08M$`4P zFI*)yFg*T5OBUnGjf=&~mn*4UY}i&Szm^g7HQ115HWevIdXuo2SqXuqku5InY(j6S z4s-OV@>_3N=8=3+;X7wQe~Xj&B?JWx~RvaKQFlHcd+ z?|-{BkaqeXfz0v4*lt(aMhc)Hq4->=JmC?r9MCq@BhjHJHO4N6i90aox_}WZ-@PqDr z5lWvlCsay+aUJA4Nhc4)kG!CUaD2E887r{tJxZR>i#7fu%JfR z+vQ5{#r9i$Kj>dRa86#o4>^1f-s`boipRdmSs}PBTQMwZWafB5yJ1YR+{pZVVfJyI zGuMAzGVI2hxoXJ)P;-Jw4uSl0V0mlHv;e{=RptOUg+T|E_3QST+^1GHA-oJdzP1E2GO$FJb^t@d-EdraZ=f56@SVZTcL%WeL^Iw!&IQtWXN`@^vdtGb(JDTc?>GG*o>SkV zHB%>tt_(S%@XAGIDFU29p$s3G(T>W(PWe~z*6cp`yM{PEn7X>(693)6;~L;Ex7pSE zRiEu_f8yK43m!}|b-{1d`1w+Q!@))i$6pHs1bDw)g0F?aj}GMZZ)0JW$tB}`t$E)D zNL9S%z&hCJU&$g=qTY-mS00j(EXPr0-#xDaD*Eyo_wY+d>ik`&W1xS72%3z{uU zF@YXob{CxzKQEJvYl#-=k8NY5$Z1u}z`C_Aw^ywRBZCY5DSsJ71 zR%Z@1+bZENJ*9SN%Q=y4qLsbC7aqzc_48)ipA7(l?k9$VvU}j_cLK0+Nm2hFqC5VU zR@|TI`Cf0pyT0{$8}664Pi;gyRNvU4&X^o5-EUJK z$PbR+9d+vg8|%}N8sOV0paohM2SkK7jn^T^0O2W+o$dY=JR;7zAOZTp(k(yOl<7uJ zwRgYR|ID19%!MJ+vPhpIUSD~U@+*~Hhd^6^X>yd=bN^R`efpuyurh3IZKVw{jyeb6 zJi^H0yE3h*?5?WhUEN#aS^+IsFnlc(A zkcW3DMklZT9+Fj~YIN;$omW9NSCg9DTFs#1_5IdP4%halk+HJ~D^Z%C<{v~ipZJ@+ zd!J++#n-2%w=#y^eE1r1ZIgk0sA|NG*h;yf^bsNB;I4M8q?CAe3nW+0$H=|3;Z&}j zm$RJ;hXLD>4m=qi_Xzy$ipcRzlfRRi>hy*knAl|LrDmZHBaDqL#jYt9{sHvf;8Y?5 zyN{;Y%E#CW^qANG3MTa}CApJyhIkx{tY6wm_u$O2ybfZOSQvZcu{iM6w9~?(#DXx` z!=z5yG}BZIRJCz^VXfLuB-2zuGvmJ37pcK(KIF<}%{Bn}KMh9z9M#N4eRgQZPzu-*5%;_R&dBQTAaEx z)$l`(iy6RyWY|Ph_?>c`hV$)!{Krg_PRF1`EdHmMw6YNwi!!f;He?z*gAX_?CS~YF zaoE0iG$OFFhVfBHq#Euo|5LfzKOiya%2R*0TI(!Bqjz)aEEoI`E!tM~^9uuSu)Seo zYTwTySg^kh^Q!6*u)lcy`moRdP>|o%zJj`=qE4R@A*1(KAXT40 zGN;oVd!pfATr8ZH99+GN6iRf8kcn9C8BqD}YJvtcZzMIZ_{=VE-?qzOJ8*9r%(cr^ zFL06U{egt8^UQsBK!@5;_(FdZssf%ZDhb+XUJthGUZ_5|%dGAXs?L6tkbsbeL@D(J zp^Mq9j8s-k~}&Zu&O)U9o4-^*$*>W_#bM>C7*IE zcg-BXIL|d>wksmE`3j3O9M(HQ7?|H<*xkXlIJlm|dTf6AW`CG~8y_#t!Q`&tm>zC^ zcZM9DR$}`rS<-hnN?$o_-2xk}`!H# z8s$d8X1(TqN3vkod~XW|f6G^9gDI7GQseC~CJN~grBFrvRH>saC{v>q%pi+;Jo^C2 zB=V>ZgE%1*&fYHHfA)HTAJau6!H3?@#ghf7*SU-EK_#rle0QD$lcqtYq^uKbVb-JCS!r!393KmEA`<{tuPulqkdJm$TF&VlBfu?=AHcnJFeIQbFgVh3>88$5vP$%bn5 z1{W%t?x-TPYlX`TBx~gp9V1+WdWpT%2A@2fJ?>8>a7b2m`d1MCqoVK0-dzA!h*xs& zx(1N@ln)`Ix91)%3yUkx78S*$Qy+(j9y1RV?RAXm`m$<_}TEe>oPEcW8*`L5#g zE?UsFG541IZ->VAK%vI{i`n1rcuEkcG5Zc=69W>KL+8~Ztyf7F?t@QUT zH-s;#Z&hrt$ZFLXmK;On%4b1$osKcmED^*ahh`yb*{-J93uthP8BdZ8L_$Q`@dTj1y}P?T0ccApZ{TOU#x8W(3+(Rh z%gicudG}`-I?rlGg*#IjcqIPf_9y|J*h)I~B~D}B0)d7$mgEsm;P{J!uLLUVBtmRg z*J%67xpW--=vq&uHKJboab3}0c`}aMSdo~MR?Q!A1-W_-k(P%dWSac3^MvLob()H! z(Mqtz*{o4RuO+>AHVOuvhe6F5el zI)&>#86wW!*R{A)Rm*7V0dAV@Okq1;BcMv8D{h@{iWXcKo71XQlPntqp5yiBX&JMp zam?E6skQgj`_52XB8U4Me!E=H_r`biy$T<0=m*XDg^gOr4%edQmr+q$mMSeg;U~d0 zEaHSO;cx!w!?#tA<6Q`DMpNI@h4dYn%yEJ{sWgbi4U8<_t4M`R%1_#i1bO&blhKN3 z+mKkePyV<{lpzL>c~oYIERdYHDVWi4MPVgJsUV!p>~G)I=}#Ht)Inc@O{KDF!xQyM zxair8ZqWKmtiIgbqZZ14`Xbhd$^1U+VAL;rz7EHNzVBTXd-&`@^-gH+lwF?kN7~z+ zooi#O^cwy+h{d``=(v?`SOUAZ`Hr|OLt?2H=gKdFYOnep)TW+=Ixn^X2wqSKK0`$L zrDuu%L`lE{8+!3j()*=&H25Goa4V8*pvY>19ttmUlzY#3np-!1M3K>?X7|lO4?S-z zU7*m;M{@0#Rt3VZn1->8SS6JdX45F!8~(P!Tm}l_448>bMiT0!e`=9T+$ewiWX<}% z-n_u&$zzQ(e1;6#l^Np)lVY@lT-c>`NQ+6G$ehDA!2By#0Ga2&(kX2pyZ}uauAJ+K z|C#^xnW)eYavB!5Ddm2+WEX;B+$T|oSjzCjITdOQlgs7jg;g2KMH4S$KI8p<=!cBk z`Euho)TrX;AoFx$#Qo3HNH&V3Ar&?Dl5hgi!)n(C@k7$|y4dn_d0w8|Rj2n1l*Wrm zeXe*Di~B0hPqoaE5yP}RMZ`tYm6>VGA7?3BHl*a))N6-Zi<`IxRALNCCPKs&J1b^A z^OI<)cu~AJ+~>hQu29~uV_ubk{5mOf0)Ymt@pR%4lP|ZA5FxdHojDuvt_d9>bJFSP z9)iMI9krLtex`1bW`X0AzJ)D8B*At6iE;ap%(U-uw`^FvJlJ z3Dc9KFet(>5%D~b2|Zb94!)9s}w z^acvHaxF}`fv(@@Y>^~ovCxN5Kc99gm6(4N`CnP%j)JRVN&Ys3 z|9FXbzi|E;bo!TUz7EaH(HVJy7Lh#o-^MGt86JULXBQ{u&Mb;`eDeIg!MEH|?&=%D ze{gS%B=ZSWfn#)4Om1dQZEe2a%SLGvPc7{XwmE7ziC~(mhWOs;h|ay|DYo1!-dXo6 z+W_lmmrctrhDR`xslcHd#7*lN_{Z#jeZWJ3K=IT^v~hSgiBYH*+jDVzyeaRu-=R{> z(3Nv&G^wcjgRDLS=)$ZZO+4oM4KbJv*&hXFF{Vsgwj^c3XO32lhUB(i2XFCmidi|~ zenX%vhSgrUL!L^v;mOkQ!&|{4QK`?W&e=ycI3r;UP206c9EAa7YL&BemU^LEF>RZ- zJq+Yc8whsgPoVLSP@&E7v}YU?b4R-lG3=v@{Qs<+EBDIx?+nUZ^_l?n=g{dt8s8x&7eBXKi+vwXmagJXlic3^wF({Ih_NDLfcf z=3g6n7FUaKA*GgMk0DsUKynvYX@cXHra_~TiC$%gFS3M-UADFC@x}T&q!v%|KexPt zQW@CQ>{yLG`+{5B^<=BDXE)j*b&o zuQ>5t{uyYrW4O`lFERaL|Lj;K2MNod?K`}z8u{pw&*7%!vQA(*%l+;ePso$toHfgB z3m-{me!jbFx00O3@cjNxB6HuXx8QL;GfQglVY`Yq6&h!!vx{$7C(UUp-_AJHBgqG3 zlH+Es-+yb!>^Q56!o2j*d#@w9cmr~_ZZeaFwNC;bAAKt*Eb!!&w~TE89KnI3<$Wqn(ov*{O~|6R{WBm9UJtkvS!x87Ml zb<8*X%TFN)A^Mz<7dFme_*Xs1E68xSFm#wdpGU?abp4CfbvSOk(hQ1O)>Nc{ffu6u zc=p|e6u1xdYfkhZ{C@~GHkDNY`oczDZJHCqt(4tQI&6RzWNJM0Q%r2iJbFee@;MzU zMYdTE&Ls)(PWXw21q?Wl%YeICyGgJ9yRw9w-OJewu2J1j$3~#*vKdR0W_)RB z#haxN>dD~OvHo-2wd}j|7@Dg3TVbJtS^P7Wf+Xx(rDMXD&azpnVBb<)y>&pfApps^ zWQ-aN8U=|9iZ|W%lV4tv*Z(&cI(RYjejZW@LOxkHUGXB$=#6(A&`*YucA5Ee*NVZG zd5&F>Cc8NPlyL#y$QV!hRdQdLU7d28g&>#K#w)txd`j=I*7^DbHR%BVE5U$jzY&z? zF|(ZML-j{KH)=gS+#UE{yEn8V`c*;ZVUOpW+Dfl$`y&xa*LTc6B zF5KvYoc+30)jwP0slIp9ea#=2{8de3Ed8TF%8pG>-K&Bnq!G%0QMLc;V>+f|4_|OW zH+>%1yeI;$E?Fes>Kr{^vjpsW(%E;YcPk3enV%WQ&U&|udt(^qlF9gpjqhWlA`Kh% z)r1L{Xi-mNl3=%7cWE>vid?0!W@`el{)3-Z6K~PbHOqS4<(c|n>Fs7Rgsk_C7xVk= zNJgtGM0Uxr7Ykpi_cixdx*zi=D>sh~Xm9505#_VFYX~5Qk7(o)1w<)3_LJ{6a$GQ> z*4%y4**s95vQEW*igJ7z!?l@~n2vHIAAahYgKvl@NVrEx0O-mJ`q#XE0#MxK%WKz* z(aih}wfx9E;j*Q$3J59dLlk`1+RX)pP=T?@QAGw&PMaT3F!TP9Y5NRZna@rFodKS% z4GBO`%2*Nr!ZGcuIO9;55ny>Fc;YZT5WqOnPTLnOXGGSzrwgo2+RZzFI?@}yT2S%d z85MFB{t$c?^iS1d#P&}d#O<_1}x#2K4(wH#69}xleEGjnr5w* zhIClj>7tQWrdq^Q`s}XycQK{wXj`0?+R-9Hw>}T~FokbX@l`?7$#nla`8U*7@JjQM%T4z~MJ>=dd zh?AF`BELqM@iB-Yp>|)OIbu`hN;Y1$O?Pt6fM{E-GLxJ9P)yZ2_uCOo?u2DP$~KRf zlT$N`mkQ_YuP2URTVJ&Q0?n|LEA9q3UzF9cB5xr*GU@zWs9>hKUa$vyGYMy3FLQq}6j zwU@|Ee%^>LC_ZqMSQY-O@TKZ`W6P5h!B@yWRBR;sGGRPXN7Dw4#x zX8WP5ZRCY2?waO>zD8L<9ypJr(Zt4F0#6+%Xu+>tJCgrx6A)jx(Kg0V+da_O6dDP zv$5h&EF|z{_kUJn35vg85ai}c8{FW^qpz_U%q5$+_NpJcLGbUpySpHG1V@R!<+U~> z?q=3!Hl!ZuiZ%``p~*UJ{6DWU*YaO~+uQS>iipKB5fd!=f_G(&p>+va62Au{W_8Jn z?@F#O<_nC?5^m&C_nlf-E#l744NY@X;+;?Gi;PgA_xAq&AYE1Wpq@;7$wjT=M-;Gp>k@KmC90K(n^m|rWQ1;O*Ei=PD|d&4Z2kI z(IOsv6P5WN7f~2~`0d4rY9lRL2SzrJw-1n^|ND1<6~+(k7Rz@zU@Nv|Qc+!Sw;a2@ zo+p`({`V$?i69zNd>#IZK-odL%~uSK1PKxkpdPck(or39e4Zj8SS3Wwu!|Q`mvt)f zE0HFf$@|>oiRqydg%X`Kj-vE~)HuQ1&QR@ zVA|>osH)EFK3~q$3Unj^DNQ!DgSld_tk0ZYa)rQ&EGUBhIs%T$S)7{T2`u z!M0^jD!KSc5NkpR5T-s5JjR6=W47k9U&jD9Qy+nd&!LwCgG(dU16Hl5&Z7UHp$sJp zjx=p}t!YL-)9&y|2*~VsM0@>14?%r<0n=wkzIeUY7N1HH#z8glp(*BD77xPzD1LIOw&R)g3 zvgWnV752C6BkriHEA?Psml$*a1&rqe3%x`g68Fg=hk0AYavu72@Y3eDw#pwR-`ouz|<*5^Zv zE8a_B(&7QU1ERP~%zFpSgMk0MjzD$Yrwg#zt{Wul4xnQK&A%61^D5kSmwdjDz%3M9 zV}w6q3xI=u_xQ$YF5*>raNAkI}Q*%l=yZLsS89Xpe4 z$_zRTmJ%aj^sn!t*Z#{ZS5 z3;*{r%**2|WasWMFN?i^$VfY``x71^Ap-h02G{+D`W*T%^*zW>wG-gjBsvxFBj{X) zvaj!!YwSD5VAqKXelFGI(J2BUq`M@VWF-HGsjV9jR1$qngId|3VVYbeE<#hnI=%^8V_ziw(5Af>=a9Rfv6B3so zw%7c%Hwg|`b-xeB{FL}}hz3C{TfZn&Xnb!Mjtz@2?#M$uvi2Dfv2CFC;Z_a;C=!v= zn$r_L;uvdV86eWPV;6DRFLCt58$PUtB5&b1`*wDQP2$R{Op)ql4%z)&4ao68%g$og z_vA~(7UIVJUCcKq*rvDAl_rxT`LFT_+YXPj_Vf>SIH9LR&zv~VkNe3Nv#c6ixmb|rnYTlbIr1(#`GX&!KD|$ zG3QynfU9&p96Ty`uFy9VSi`UdWu-sx)EKNBLKAM>aF?RDcBipPgo7o`=kZ?7PnSLQ zjo-)j7wX1a(fBdcYig88*3LaEQLgalB8vX7{qcWA;NsSLOn*TmCB?^9bKL89!seiR zbNm6xaZ1JkydY!l;;~79{70Z43BnMM9mG$_uI zS#EBnbB}8xO(qM`2gKg?^QgWmpGXQZaT;Ag-%F z?+o8){3e{Gy1egQMdp)zt2BHL9`fwoIlG;JrqqzlyLHDz&+w>59fdHv%T)R`aYzDbcF> z@;{^DXWQ|NPoIH)dHF41@h>%=49o_VfLlDL!ay4 z7}M}DthfL3F?sa~4?aL*$7fYtM*>x*Fa>T$i9+Ytg5`4CN}EbFto#<|>P-sF7_Qmc z$KA}SR9EzBubi5Gc9EU!t~iYz>S zr=kekP5Y+kV7M4XKh%<6zHpF|WwgQaP6CMkhr~@mpcPp~{Nu;Yv~;r<)ByKW-N{#{ zzYd{q2v871nj5>U|8;xHE1fSrJUwy|HS%}Hie6V0g^1VzFWA$7IP?jbWo%WiWM)ft z)Fy>04y{GQ<3Bd2UN8*qRtDdegseJiP@Jy}*uATI9HlzU|m1n?L{-j^F}3rU~r`NBThbZ`IW z6q`k&ql&qIwdPfY#f)eC2<(lfSks}?5-m2tpV+!shRQ!y!6baRP9%h$ACXoUYrSu>cjxwA$x zCDVi81&hWoa6*DXBxlw_C5`uxq&bibhugpYqdw%{_-jfFqw~7k?s({t=%K#3_Ql5(1?7!WaX;H0d7JL4)^!3l zmAZWA#7rFOWaXADxHw9>>M5_yhxNdr{DO5eclmc}D+Zxp=6sJaXtTHunGr5c8ID^FF^ey3`$iL6v_!F22CG+Gf2u*AHf1P_Io&P9! zBirX{cG}lvHB50^OurX#QKe0?FC*{9RH*(ETPPlxwft$ou}@38rr|I_b~{htkF%VA zm2X5=YWah4TObR;U&t>?XUG&0d~euX_uuIRb*v;fyXgU zW_aBGOT&c^H8?(vnHNSOd}F-W!?V=AA)vVRItMQbD&XwHOg@1A>fxv{- zaCg9%myOHTTppH2e?x#nX!o3s(Ujiw)maf;0YAZxUdYV&Mj<$Jf1mi*%l%VmH;R|61bZuJPUX~c z2LCOUoMa02#r&oV_>1@+hx<+Ig*qzPpZY#wUel3)Ha6 z)wwuaDTkzstN4v7st7X~YP37!&thl0-PE0hp~fo3sh^tAj;d~=WC8N}t$QmgC}|cN zsub(kx5)K|?YPzWyU!yVS_Od5PP1Kue$LTI^Q7(A=ViW8<10gtD?}5NRC9L8mzS5) z)8~S{WvsGP0os5l^CwsQNT%Wzadq?5w|296Adj?W7pN%{JOnM?vG2up6ra0%lc*pc zvxFaHXrfsPc_d!-jAc6fSP8Q*VQ%StBVoj+X?1AN|4^$rAmM$i3@{brran1|j&jYc z#e|^W0j~A3K;qIPh=uvXdq3_1>Yq3E&sfz^ht5U*^iGF zxOVekad|cOf{Q8p+U}!6v~n6V=Z6~Tn^=&#gfw_TreQ4RE8iy~`^K>)UY=0;j1pY% zDrM5QHE&sWZ*EaJ+Cx1v*yl$&6h+dP9^r3ipCf=er-8cjmbyHjeT~FZ$I@P%O1ka- z)APl&;*Z~kpiE=xZl*Jg;&!74&cb6N1!rE2>#jSUGfIZqwOV`H;rU(Sw?N`TYwIi^ zvE36~ohpXeY|>WmdM)onO*HYd5He`VRSNCIWdU{|1@AkLlF2u@*~|nNa%T z>|X}HNC!voc>u?k=l&@;c->r39q_!o67fy0c|@T>ua%ZBNJUNL-v3bbz;B%gY)5lf>or`em3#cxA4KEG6mX;>_4S zlt9a58YF!zFDkjDIa^nmN5PEyKK!QKnE)ZiI|Wa^ub(L8WLMp}Ok=xM|GX(+w9?D;#F)*A`H zTCLV-AFjg&BjDg3V5Pj6J){21!oZGK5{_8qFGPYSxAN%dj@ua&>l;Bv;UZ1Cv(0>8 zvsqlN#7+_%U%(v+@n#i{qjv8{|4Mz#_n{qHX;36hmQxZo9WjhMbg;USo^V2HyFc0S zh2WP#b(FquEDy9ro<_aaWF)Oa2v-8v_d?9KR1=-#cK$HIw%kp->3LBk%+g&^2ZyeT z)w*Yy%|L_&v@rn=Of(u&nlE4P__sR?s4*u6sEyJ%%}7#pK@)bz1$#MKo_Qfm2TQvS z>e9~3!xH8DZ8QO{nKkNRE|FoFSkg2JNvda=j%xc2+T z%>iQ03Se;TYTbpJ`LxXIQ-u`KF;<=^ls>S+E!|Fh{5g)UKBvtIe-Z!c>#5;J|GTY1 zg_|QG<--X6QFBHWe&<47f6m;2IED7~yf<-8odd7`I7zM1Z|69$zq|)mfbmF;4Dp_oXjv-mggO)%lV^5U&8XR zmCQJFJ^e~+9oA&C`X|s1Dd(?HVocS3Nyd!8JJZ{nc%%=e!j5;b}=T)G; zpvG4*S%LL#i+&yeVM8y|5sv@$GZ2lJif}v{H!)CF0QPYW+R} zO3OIKLh2!_;YD0)G|DZ8zz!V6xC!|Jtt5}YFVuNznke~kUSUv5&vF7N?N5YHu_RWw z5on&VP3O%2psf1^k!o~S2{sT6vXEq-5Sn%LM!!w)a7Pe*pfrx4vJ8rXy=q4`MruO- zwIpHuaKq;qdvgtsAr(HL_Cbfx4oRya20;LJiJ|?w;xT^5nAUJJR7zG!&GEeXjRBg% zgSW;GMHBJwz;W}iX98uVxk)~haoqGs7Gr2%VL7TuqF8d;KG!lWJ}7-XL{4RTR|aVx z#+@_rvf$ylFkS46c^Ab%@~9&o6a{mgn-*gyu5W*K)r$v*(hd0=y$rZ+O9xXZ zP`y&W)uz-PE}h;I*-1}yLs;KV7`^9|;8F5e21=A3Z;E_d=Rm6kgS6|i<++1{H_lbWZV}F>Wm>yQ;X&O{FTN*E2 z+{5dXb3>Ip5ih_i;Y}oxxfcyhYa5Pwov1Nw_xNlsw!_pTMc_AFA=KWPHCsCPdFINo z!o%t5{c$t=_Zj-+%Dhtu!;gm=Mr@PBybFE7zArb@7VjAnIeu=G?D~ZITIei4Yx>`8 z1~CKiEd&dErZaL3S9KLQGTVYjc`k6#^VN|qEx2+nItVc>L<8*GA7nljQ_x?}GNJv3 zSLQ;di{ia~ax|`0P-ZDq3J;GLdz9wRacE6?D#G2Xj20N0S+S^I^%OUXznlpvjc9M) zh%~t#e}am(qR)sqb$G6xmScf62DxPqyb_kig?85n){!A3xIO$Oj(smVcde<{<1OJw zeMul;n(585;c<}5$hf93(CRPI<^b>>>eq0uGB4=2zk$uhN}o6w0vw-R=ti0VhV9oG9pG!JEb*?f^DUWIebxW2U-Cy+Xs<8?h?U(H zXX$C`PPe0#kM+CX=BbxR_axL&Q?!kOVXRZIjFo9YXM}$I3y*#4==GrdB4ZnF@WHCq z`LXNb@LuXYTIKb&pOf=s5(ZMy0~8pX-?o1KYy}>bV;zBZbNqpJ`-}YGRl;U}cK5LcwFo7&g(&RJ zv?!y>Wn$ji#B&Mh&mizD{VR}(e+Uc~Q3#vAh@j=wS-=G^%qkac-Q{*=xe&wJwg~Y2%_Wg9OCoyBYkF*r>=b%0yZA*y zKMG1XZEY?T ze~30({mGs?#!XW}Qn8~dMUpAMZc304P+=+n;363}-r;`Of1PsCBAx+yfA$8AfnT4F zAU)X^x(JtpWy~?C5yO`xOj0{h`napFUFv*AHR2V|u|xxmC&n;U1w5GPZt>0Hge`R# zskHvTDQeoUhm`NZc7$eV@b)c$kn1}rQA1<-L4t)T5a_4ow2oJWtKeiRVQcSMNvAiv zBHpBy^w_?icnZUHqffnt0Z9bBqZIPeF@0$h#tiI<9f*F3E%NTbyx6D0KJ1O0pxC?|bxo!@d9T-<~J4Ujfh3jvp*7zr<_@>PA?K%pv z=*|*cJZjPH&-ZR`=NXf?1#b4J*igjJAOT<(d_6I^{qkle*Z9Y-;deo{zH=dyL({~9 z@h>Q47hRGjQ~GDSozXAKme1_E7R+nz@EK1H^b#Iv^WaQ4&|~Ug*Doc+oF^c4;fMBH zLFzr&ObM&&-Lh)X2Ig`VChOz<<$jE3lM~zBJ1Z#!Qiyx6da!d_M{4GAZqr8>cs z9+VqP)u^$HpWI}3{#++zXqrL=wryjimqz#bQ2(-}U#1|TNFSQiRNr8Q5RmR~?aWlD z1^Bo_>`(zwr>{UdZsXOWF2}_kho|Gl40xyeB-KpDG4FNc=S@gGfqVPzCkU9@pkGj% z=-+N5hLLzxs84J?%XKN%!b~tG5MWJYd^uNOblOy*9R$wQUFNy{ZyyhaKnk8uV8?&m z*tTv-;6x**{D24ad<@l9pqVWiC*tZNOpm8TE7=;eM#{~Qi?FsYkWMrW+1mnp6 zLwq7AyvKj8-+VY~BdS;DWlMCjD|Cw%cWDL|lj5azXG^hk-0CWQ``Sbbr$?_W@Q|u@ zVq^0yNJD97eP!1OSGHkCpGNs@Y6Q1r7yG7Uj@8?GC^H2a-~6Juw0wfDtgk-EA!+me zONSe3J9ArXQkXJN@NcaN7p>&6+)2{650jFxnme7LvwS8#qS=zaHkTVBL<1N58Fp}E^udd5H#P9+Q5W-ndZ z48i3Ba$={NExC-2h&3Gg#Z(RcCXE^YNHlReJP)s#P?gt9_Y8|#f%7P)goBwXV7_M3 z7fv)W?DCT(xH@G1s@oJ(_sfY9eGCW=dx_zE{!pOM=ebKCe(@0GkAC>;^@sBAJCIxr zNI)hQTR?pY($4{k*?f+ZVFK^;?+Jd_F-#mR`lX?w9tCh-!p#^*g{FJleeo=&n7zN? zUWfOno-VO>2S`4__YVj=SmFqKz)yqEzhVe>AC_)d`kK6xbBu9Q2n_O@O&KHhVfJ4P z`iLV)r7fVnqemhAEk?w|mVMsY&Sq_gF5xYpK2|XHZrmd;-~R(Dgob0J%ftIAgWsJByi z9yEiaIq}>hDDVt7}d$)kQD+2x|RqO#YZYRn$BdauQB0Daf4hXEJ>lspLDhQ=7}GOS;ytYMo~(GN93L1ujhE2 zg_E%?c;~WKED-n=OWHXf$OX1qhQhkdmmAfKu1)pZCI}5=wdm|c4g3hQz!TyI*qqF^ z{tUs^%*&m@?zd^I*^8{#AnKtd=H34DOEU6|oqn?VTZy`oUs&beK>mDEg&aOoX2}7! zo^FnY&Ae@{IOMJU15+}US zv<0r%6)7D~7A+%!>#r3Dc^}unAL^NI%4JZaIR~h#P*FV;$0!s@ymC_3`J{I6o{xgD zzHJza*;h$ezh}p{ws}ux{pJaw$E2(hisuF3<$_>-R1}`%!U%FUycJw`D6VcE658}% zYUXg6T)Q3B(I%9)P(=?-CO#zjYN6teVjK0fjj3Tx z)8wma*NukUQpt3YpJ2XSK7q#mY542_DkYjw^%LJwQbjlqM@XP{8YwDLz!anxWatkF zuidb1-PdZW+AR&@#7Ds9bx}1SCi-a|RA1&4jGAS`_)X{<6NiIa?9-tj%4&w9xhtv* zCfOZ7Tza`*N)qpnV0BI0klbjKxaqjv+%HMRNVZQ2$p=oBqET)u>rh->Si*m&Y2~cm zh$0}w*mA8@@+mVGWe8j;F%jKIi@yfY zzlrb!UzW9po7eBF6c9#BcgA{x?i&5Ct|C7L^nl>QOG&jBlt!}2bOAo3^}2#8N1b@1 zRZe|Z5Q0>|?KvaJeI^7M3}1?y>Wg&o!C%##Lb<4)fSR~OaN=o-hiwAYbRdfh7eMVH zOLPmifXjz`dUmgDc^%5GDfX9clq)%5q&DIj${Qfnm8JP@zsFA(R`Ym_pUlyQ~U z933f|qBuh#Kronq3{MewAUT-ATi#ZDqh_dRT(F7-6Hm7#UKPUzlSD(nsI>S~EE=R# z?->DO5=G=5T%swAGaRUjteMS8mL+t!yGzmZ4y6N<-t2Dm?$p*$^wAx?Gg7JZGUxRg zvF0^0>k-u3Xo(_)Afu;&J#OKVsmI>is2ROjuL_J5jUyzveg&vIDlY4>FMBXa3IekK zEgX64VifoMfA{k2#p{=YX}G{Xn)E;WCHoJa5@LP+ub>nM-}Aa-ojv0fdcCJl|91B7 z&H0<3hv4cj=a=C5U(ViLf%8l7=Is@D{qpS16}Wl}etZee-&|guy?XWX1$c4(?&b5V zSAT!{wAWMA6M_$aLDAIi{-Y+tObi{+$!^Yc{ui{o&p{0gMKZBJP>4SN6x zLDN*m%f^K{m2IgjOne653-~oB83J6*$}1)?5Y1R|U-@IZb_B0cM2EHshqAch?*_{H z=oSBIXF5FkUT;UM_dhpjG3dbT1fWU(b97M7|8=_F|0^kc|6iF`WSk5j3LxXruA?0B z+ZN7MK_2o?5D68fnsYEr;1nilVecMi6C9hyBa%rPR1y@q)NB`Eeu;LcZ_wnG+oj=p z%WKGQN=B;|IVo&I2l`7q2Fj{W_QFjYFZ1yjf3|M&%q~o?lsge}+I%gW8Wb&U$qp?O zizoChxOzx9#Of1nclJfu*noaBUG)=G3m%j9mBTz+^v@-Drs<4=QPc$b@({>tP3OJ0 z88&`jn_S@}O>Yfr7Je&GS;u%VbYSs}!U4eiMH3VZ3!pYh3O3QN#RT=AiwINa7yT`; ziKa>RpkHoniS~qkOjj%qF;K5Wef?9+m%q|)zo9rRkZ0H`YS7-05M7Wo>ziQk6(DQa zpX*=3JeA+JXrQ_Dp&C@2fY2n#>mIIAwd}$ARg>$iFK2rX_~nr{l9a&qje*@s<0Z8* zx4;*WrFd%0?1AV`o!L!`yWwy*&i3!;Xm3^8pZ}luw9Uc=H0gi#j!s>L6n1=O@viOz*eACihAZ$I&2`&$rZp1b})ZJ5+SNIJhl>tymMk zE$APNBL1;THT{q9^)5f=cRv~2))MGH6ZcB_pVsl8S5r*=k9Gtz=DU)(8+8OpPe~L> z3YWq-Jd2VEe3MVXv8jmp4mBv>c4@W$1DL>TX@@Wa0chg?4i3uue|`VAnj-nXEKl_% ze@c=RbN6Jed*F=U3y8P^CR4hf8qUvLFd_erqHIt!Sg3e}cBv1Ogznz$_e*-#UKa?p zlVVp8^@mG`@iK!M8s|}WJW~1PDlj=al+p*X4#I1g1(V&o{cDs#51e0nOZ=fqEBY^W zC`-!!xqn#l|2aL{KUmZMRTPu|liFK4fhh_B3{paA^X^yLW43jb)dpWTHP?GmeK-&- zVSAljp}HRkL*+AVeFnI)JQ>{P*C>rqhUfs3U2VX}#Ng5=9>&z$iZFBtcdj4oyGEr5 zvA-8|_EG{r7gkFs*zv;GaG9!ZKD^)Jm}W2z>b_6KaNiWou&Vm{L_4^0ccDuMVo_Ua zW7KfWFe;v}rq~am(WTwbo+Plvea#EQ4j;{~nd?|4$E& z*7v_FDV$cl{G2F%e=Etou*k0>Q6_QmT-a_ZfB8bw8R8(@D(c26LxOrQDKx*iROEqG zdV7b`6o-gk1Lbi5P7dXbkho(7{hj_6=zOmmS6t}E9d2?3OIt*rDV+m4)RP+IIFF(S z@M{huJjU!qND_|qLGN!!43F2(*dW;qQ0;0-$rORVYU(ZKYK&17ii^4kPqDOg=f;Vf z*AILiU%a_wb#Z(HXo7;RLGOGFBvBWQXwOYyM<_z~6i&9eblij-cnNL&vM6rcXIUCX zv)bXa-(dD-Aqyt8d{7Lm{NbkuzW^yo*h-LR<*ZkYIfXZ28v~)JKB73 zvklj|)e-luQo&M$xKm-$LSYQWDIW|&009+^YIiGxY~nE}Ry)8HP*iO-=^53Gq_N#@ zbvCI(C`y~Pz*3P!t=O;j*Pd;?R^EJ@rGft!2OLW2?k5!A;grN&N!m>mXyE@3_x9cR z@B7Ec`)mGx6~(mwFlHFs!4$*m2vsY6_0kv^-~A##GiV!%@6=N+_7{}QA^S9#ps5ad ziT;Wn3L`OX5oWg54<;zMmGvS_Rm{yTi&~nW2vxyPDVZAS;Fkr9$hajaz5MZ4^q`>I zF)TJs2qgz+n67J>g^`T=9A{qNZF? zD1<7moqbm#mCL{S{=0ttQ@;)Kd^l9+eHndT2#jqY)o;#LR7`;H>q68G$v>|AYO#y^{U!I{x2kicSBGt0(1KTuJc_n^{#?(0Z>| zvi2^ocFcC-G|cVEXD_X820rA zntIO<71ia?^wrfL_1_`kLEqP3=LtL5F6C!HG-5cs^4O}cmWwcBMIlNkWOhpRSr>>Ph0bU->+aDZ&!s%_Vr=idGd1Vi3mE`leqP z2D5jCK12Ty#?#h2%VJl4DO#0ZiXXzMTSxdPDmeim)@Hw5Oa1;&5hZyVAiDc0Kr=>v zXx9In?3MQa{^>gZ%SwvP!enWVcE?Z#n_*Lq$C%rrVhZ3L#1X&N!!f|0pBHbdZ%Oq6 z8nDJb$s4>SsD%eUEsyw~0s1x(9G!9dW@~sA&uxzjZ0hJdZc}_fe?j(!$b@BPYoVl`LgshaL_zq_17L|1Qk5cK@n*MX+^4VfQG~WN6mh8Wd*8JaU3a3o~ z0Ps#uH83Vx5u<8aR8%(DzfF=B-d#Kcwrczpt4{UHn16`+=5;8oTvsSpZ%eu{q05zS-_I}ZB( z-qeEgc<(j#I<_rl{_FR@I5*}{{qoYp|Lq@^;{P74^}nkr!q0-8``p9|0)Fn3F}Ot! z!mCK~Y>erH+!h^^7^V-^(Sd!uMm@JO=6)TU?wz~jOt#8z3P#1?My8lj9N)0VtbINZ z#{f>9`08^L1oW%hkBUh)09!yX#ooR|&epReVH?wWGpIfH6&qrHp`P1$?p});;7>Ah zVlfMSuxWk&1^koX81%P+$*5Vqo8u6XAkT~j`Ak@AAR~a|i;t2g*b!0Y!+Ix+uf4F> zrB!L5{~1Z)4ch$#ljKtTz4-V)M~80w=YzeIgEjqMNs*pVA}>^u{6eC9ie8gEmeC%Y zEkEQMDa=03>}Jm6=c1An-_y>|<4Yflg@9l0{7>ks>@U*vOV@1ginpX3%j{Q7k&|Sc6B3`hz^dr-zgukKr zb@5#OD894amaS5FofN^42Nss>t@u^6VZX03PH8e((GGlkA#z(81{jY{s-~q{Csn;* z>53O<1v8|hURSJDcR`xA{1t21w=9cQS-E<|mn0R{r%Cqk0;k}K{!^k&R8|j%;5RGo zwD2WVv!ugyizPEq&tD2)bZk|%^q7c*Qxr;*DK^hB$pA%J-}>H+ZK|VP`$Iy{X=aK) ztJSh)=klMaA9&~MBZL{G(s{_~<;fk1Ua&TX|3hR_wkmU+7!OQv^&-)abi*3mr7_6O zl1laEUnIJJO34)eFVRfDfXN$RwmK+F3oqTDQN{xk-${tu-Ki_EVHEjx_d<>a36bAD zqn5}FT03PpNYKZCM28^nGayAD$rf!|27bhYu1NB*4(*ZlwRx&Dy-*j3RQ6!cVLZ5%)lxd($}UgFa;^VLwE7ebAR_G5Yo)C|IC@ex@5{U4Keg zi!_OF_KLT<+pn*>d5^OR$us?|Z*-^Y^Ys6pru2q?qI5IoF+bmd+9BXibO1O*qVy#Y zh#LHDE+XxN8+?aikPs39G`Iny-D#ZdW-z|prDTd&)e*o{etADZDS}kg8ZmyXs6XOL zIxL|;pW!r#5FPN48SW62q7D5DHo3LE9`N3l!2K53j54sP9)AH5inqX_-IQvMYmW@H zxZSCwB^CXZXV!t$2g*UYb{lY7fV9s*%EIeUB2wR{I}&+7>(rSJt6v6y$M2s&>OqXX zIc7w?(RIDkt={`QiL${}{6Gsb(9BXK$zPmJkDM)EY&Wf$wRiIq*3%~yj>*ezxC^BC z#FZobXj4GgDqH!`(^zY~f+`W9jv}g#E0{h#Gdx1#>~q6EpMQ3gdyX24eaXdUjCXX_ zFm3fy;BCA-9VgsJ z@BjCXkJjE-q7aZ6NZmrcu~Iv&fuqlABrs15#f1`7L#i_W zF$h}`kmA1YiKQt~ZD}F6Wm}$nIp2;nD);{~(!T4`c>jNL>gIo6+kda9YycVjTjpWs z3C7=uV4;`61Wi$|x8o%89r83<7b%{?^kE1_Pkzdyh;5w_fAKb(pp=@=cb;69A_kPXicl4|IJgmi{hE=Z_a(7GyK<+*udBVUj4&1;z04d}hGfuB^A zSFrO8jOxMk7Wd{PZ;s#~a_E5F{v7fy8@Xz+cgWt4--zz5oDtK1BBCJ9RtA zp8f?zQ*fmmBxO|zH2?Ji(ICYf>>2v)eF4Lrc?-~u484CA#eV3m(y8Cxm%>Dq&#B7R z+!gzy5C_>vU>E%7|NTGW@qhluzk|)Uu?WcrNE|(Ei5jEdejmwC&vZIbAQL@^?BPig zJ+Ng1qe$l!_u}6ffSDG0)dM&)`ffK0&j6-4);X8E3;@RremQ{u_;;ZG2F8d~Wia}G z_V)Hh;@4{&<7qzSnVtdf_Dm=nTlH)VU<{+^8V0wDCJd64TqC(Jn+7nV+y!LRb^wzs zOXL95cIMr2H+pbCK{2O3LI~w)szvsBby*srI}|kyK*puMP*GkMH~=up0(Sr^{I`xO zQ#A}#v2g}u#TIkWaR4KoC4A%=K`Ohhhfi9)R6&y9t)Nq?2%rF3&2LYmV@dGF|+-?B9ot>Rt&rb=4z20avdVtfYXAMSp zgx#SSQRy<}*?>c^zb9q}7SwZha6_;!?OO5I1md6v0Fzs@Jn0O= zu@{1a3J6a2D)BHHjpQu8lvW4Eya@((SVZmN&G4w>oWWK3L#q2KU z`iZPsO;ziudPP+&?9$TyngEFxoHZrkt|R9R zgmwl~K*=_EAUXef0`Cxjfa3TjVxQqSW3sBew_{C7kod(PXWhB#`2G2Ik3m2)97UoP zo;sL^oZ{jxQQipI1Wjw;+GZy~04d@yNlnpgN+Cl9Wb1%z4bT@u`!lEV$LMF;x`6zyZTk(q`#=`%@zpIqUXTYtl2?E{)52H<$iid(+W=WP{#SkU z2p5I|xngNNW-M1MjmHS`n_tdfoS%Jqes*!`{Rn_jglX4>VYa%-{qGdl!F68zsQ>xm zJ)_tOq!fi)jUXo^l;Luk#yQ(sR*jc+>x@I13Cjh@()CT60KCHSEww=&T@w-^7<=`L zRUp?lIxol*LbEp_{GRWl*+8yubY75C#JP7F?#~1AEZeWX(Ro2Gq7!;QnhoUoMi&6G zjE3k3c_xZc-{`y`vt@S{VMx71bViWt8=V*Aj6^7{ylb2h0Vgoco|8C3pJn!F7~R7M3Nm=hBgq6PL~($&sz8Q$M!2oDZ7_C4 zZc#ilk*jZXUM!0wvV0PMPGNv9ER{OHzpU1=RxXU%MmvDq`|tmCX9rxpeere(&ZkLA zcua3C2~)7M^UT)8np(W8e+!}mOU9g46#(z{%qW5q-3q!@xTz7%@^7y)Ue=I$q)(oDQ50?q!#%H->JkNcin9kG_vTt7 zwP1~uvE`Pko0`uEX}NkRi$GGj;?!Z#4s){z3hvsj#a#t>gVG)6^1!pA>d=nh4KCiF zzo-IlmV<`3=Mf3hJdSaE10V${A=y?-@ZP^ZyZoykyqUO-%JycOT*eWd(KjT1M@Z&^ zHw$Ocx^w{VJuR=o87Frc;QgGEJb9ep$=E_{a(}`Rq7O7f(?>J8+^hE@#dkPDH|Qlh z%v5~P#{gcUAahLt9|w381p%2R7bzKI>+)bmvb=CH9p ze-x8zrPzUCXn{9_)W1yd!jvSB0lb7XniMaRq4Md38^9Zky=R#T-d8)+4Dg&Y z@N4c|1|H3mBtqO*B=X?#E3dr)eV{>B?cA_@@Y*R}JUSO=G{YVM8(_z9F9fOv7bDaT zu)>2;{?T(oM$aSVi=zX28aYgbhJ(ohLvVcZXa0+`-b2ve+vA!IuD8(4^N>doEFLqa zwfMAP6pd$I?#yVXia#oJ9{?0giuu$&-ITUQq}Y2Wlr0j^LJ?)qOH~<$q14W>!ieZl zD|mLm*{fG-7A{CwjekaksxhCCum{+`qUo`VA%g0~#quQBDx{-iCQv-7A1U9Nim z+tLG_PvH%swW^IT6@FFS^cHmridMc)joJrm>x+ct&c?2`ORw73=Wa9QPRuOf_3j7t zoxCfW@pO{Gn_?uhcXCxUueQzq*^qCH}bEsAm%d#)Od?_A4Oq9f~=XDPXxL=`Bjn=Z5Ht zTRdSJ|BwL~KV%cuBM+sZwlhFC6yi$4&Q%1EEy%Ye401RV%%Q!N*PZul`P&YJA*O ze_3ygpa8Ol@x-dBVgl%p0J47Rx%w(58KNII`G5SGn9Miq_fWb73l$;-Fh~id{7hu4 zJS@$!b*PB23#0%1zyD_hrU)vd4}ApyFy$TvDmGCl>;K2USJ&5dx5e37EOCHinjshh zG6oP#U>XJ_M4|Y!xSpUW1DM}PjH(RFM+3pQ#38H6uRE_rieVU_5L`bPAgPtg{UJu> z=0-q{fI$Z%!TRjx$xRAF;TSPkO3(z;|KD8Xi|nH*{^#DQ6aRDn@bq|{|8FH_qlin= z;o__ElFRFauNcOb_gwAoxZ2%kIS<=jX>mC8mT1I>qsmZT<*GQIRMMxM<3?R~25KTG zfRu;!rUpie%~_mFJB(lW*Z@g`PnU+|FC+?S0fboRX~_&-;gT1X!a{NKr8DgWQm>A^bw z-%83xp;zwp&M3{NNcd|pVjvYh6G#CBNs7k!Gb8sSC72Jiur5!SgoKv~3Pv4`s9M`h zb>SpCnM!rFjB3S1s`FUtnGVi{l_8TmjYw6Nw1?I1eT+QRWUEQeZaR1O&}O z92;xG1;P?6{6O4K5Muz?(8c5e(I`o|8l?pgS@vKp%!L5K8ZAI*<`J8y%%Elj)oi6N zx@RRrxz*bNZ%Dl3`Dn+9@L9{08lWkz^fgJ5NU+Ix_>rzOQl_<>c? z>0$EKs$tx%wSuZx;Y7`H@kFdN#UB?7uDBhvXLo3%94L1nO1T?REE+fzKaJOX50^g5 zGSv{jbJ*Ab=P}NVGrj#eyp&Ve-&6aec_{~T^=XYwucy{0x))!(9UGoa_H$e5%eR5lm2a_g*da_&7Rz#DO5O2st7@AM{2N53@ETKOd};uG*_;9@@GA27|#`HPOEK<$uXc zEU1qL`Tt=5c&{w~uk*jHq-=n*^oA}@^si;g9kqZU{#S;r^fH-_w#8yjs*RJD!Gd&R zRoEU?c;mK=yS62dEu&cn?1zum0SnWcO}aGz=VM`WB3$yel^~)5`9XGIupYW#QsjhU zpw0`WYKen-H6au!XGIi;47_p1#LWo;BZivM0KBJYoJU-~$|*{VfiQ45JMi=S^QDTR z0}jdeBcib34B5YC8)}A!R=Twv{bGF_KjPv){|gPnBKl~`|8sJ5=$!w@NBisZeLe>y3h!!jn!IEOO4M3D*BwjIDE@fJn;}{ z4Hx7#s3XQ=@GqB93BiK)@*QmSbqi-`b!Gca)m7Gv8XZn%4_= zHmsU$l^5zl)~e{D^Fpl$)wh=BU#k+-t_!su)Y3w2Hs)CDT6HGC26c>46xPwW`PQm# zzVkY*237pQvp>6_&a(h`t0M3A45b28nBZSfN=tlD8Pr;=I-pjy+7{H_GsbY@l*CgM zXL@d^nJ#98;=7Udr=kIj*$c*YggFl%p9#yE-ZOBGvU`MLVeu@No8ibrnIy9-twnZ~ zc?rMo^kk(4m`TxKjN_037(Wbp&%nssP$O~g>zoG+)NBGq?rs}#AF_<7T_odSQl1|3 zPG;v1x$j!JpbKOS>O zw|gjp?gb>~{6CZ^EHDUy6mc*~o>3ekVeXHq$mzLEWdd6S-;W{z#do&4;N_cNKD{}6 z{c?ZE|NQ0b)%%y;3I`rX08T2DAAtM8q1_R1c}n*+02_dNZ>k+97L&;2`hz0vjyu5* zrA9<-OuJU868A7D>fE9S?+}h$7|mT+hF^3o>eTcrE4ZBkeu-i4A2Ym!3*4~_fFikN z!1Qr31XGm35N2@Tg|8s1LvXjh!W)xH{g1TJTSOlX`ky2AuB87zTUQMmpGu*rUW zN}$ylBs%@J)&8u`IMJ{6Vbj)(LnqKtrR}y)-@|*DP2pp}D5aA2GHEws%KFwj!#ImD zYG2eWLlkvjoI$j+?DUr+*l`#&x6x8p*4fFWruDXXG+XJcBx{^&M?2u4)`$g(AYO8#H^*DRusCi~yxKvvrA&+0H>VACS|G1sT)otvsqOtztHG%e@ z|Ar&(0{Uo*|FO64`u`jsA0DmG|5cO?@DrQsM_~olIs&n$=%B=&vS^o~D*a&R_{QzZ z!u^T(0QAY_%zzy|xtf3R6{)cC&%s-jm20dP9G%saOwNI(Qf6B72Ck)Y2xgSetABvs z%Of#{5X#kd^^Zjj!Ax}2eh5}*(uSl=Y(&Noc>Fdw3{jyxlFc(2&ov{m4r6opU!N{t zUTxV!FjG@4dI-F2J|`7J;1%jez^V+u`^%T_KApeV2Jg>bY`L>w=1K0r%e(8xpUzn? zsfr<(bxR}J1_%ZdfZ{BDU|cgaeDP|mDj55#Mz;k1w=3JL{NsOo(4$r=Latl0f^#F^ zh&a1^^^c)%zivvT38{kz@Qt1I!1MlrJPuK6AZDw#qtYF8-BI)R$#&9;`@KB*^zP-^ zi%)Ogy!!j6cW>Xa{`W`HsFtUH8~M{Ui~vc&$V>!bsC!w#bQd#vry^bVh6WQ-#> z$DlG(7+~{+2?FT75d-*V2ItT3-oC%!5dX{|z9K@mJyz8j6lzN*Bm|o;u~4KN+gH9e zGGYqz|q3imWh^2}B)7inA$?UqEgm;T-( z7Eae?>BTSqn^D2$@1sHfKR!Av>Hkj;*Y-avDI4IGn(MDF{{xGoHr;|*(Fy_mZ2nO5 zGnFRupcVrEf!7cq^fM56yIY_-V7@bgncVdakxcigF3q<5 zBS=WGjs$QjizP5dz>w2*1VZ{rvuzVB6Uzl;bFHEYq1mjf$R2_I%NPM`eH+~VnJURm zD2Lv@0OuDo49q_VhAYpUBN*+L=YX}ouqmjRgDgw_f?$YJ+LjhIrLZvPz-S%EjMWgS z!$1OYN;{8jsX;A@$dBKT_^HQa%aHPza0N?|Nt4l^l4FS{4hArTUf9j6W6s|Jn`-9; zqc%hE=e_WdmIBxqdXlpIiLGpeVLTSiJWLhHXmS9da40uP0!ZCAv;G%nicl zqRR4xSV5)QA{A6HF`}4k7jP>08MWF{a}!<$ObcmzI17`KPJ3m~M=1t6*lOQ!zF0j5HT7RAIw@qv8jRSDFU5t9;H zW67l6RT`>okOj#$xJi?sgR-g$OQw#>0mc(iQlh|7Tg{Ipr5@^pr6noBd{{E|U=A># zLMg`PXEzIyU2`^S6lBZ7l2_4Y0muKL9W*|bSgHy-v(g=>)Ld;!qbiK!BT~qtWBBqjO(UuYg}7ZSfWh&<2i$2^a4fj;SvQT4yk9yHDby4&Ndbt z!zj9j!L5|q=zxQAg{O$*nFE;*C}9ujP#S+bf08#qLuvCJ|gQZd(152A)6lM&el4Yhj%>aztp#}EI;H_a(MQ;_CBzP;iJEBxct3J9imGjqJo-$#@E=ic#&bN_d;x3`Y}zml>6-l@5M99MwzIDzug ze2drd?ymMaZb?3$b9~I<)f?D{U)#mAI(UREUWXIQK~l4;#p}9TEDOLvihj)z&FD-3 z`ki5PlL|=ZUPQjFgwYS+AV_l2So`oBwczmvJq*9~-V0;}fKxOj=|cwq8{m`el{6)8 z1%J?zqQMAHaYk#_V6AJVA4u7z;Z$i|5b~Ebi_iz4nqbcq*8o@to-xBd0IMgs0zirH zP5{=zXUwn{z{&|$UZ*gaNKIxoff>LegR&8Qg*(#een-;Z%;SkxM2ovY8AwqQ!2pFK zwszskrdl4AhBV?a+|<(K-fB;urt$!J`g9vyqX6a<@fJy*0i11v+x!}(G0G6vbBeUr zBQf?7fK)**+Z=$uO>i*bHx&_rArnQp_2@M_G;xqIcx7a~2PT9B9CVx(ZIYBD2;HHW z-~NPoghCFvs=?tVi3oec;Fk9yGWc9Sk9kcL_QCZ7dz#_+M%<)u6j87_3X)vLDi;$t z+Tzj9_SoV34&9*7;5E#G2^ai7JimAk#KS3j_;Hgve zHvw%eEP~c%pG!3O>|*cf4>{gWa$JZ-<}%GXIVK$1Q#T_{C~2cqnoU&&0BRMaq8t^- z%#3A0J--#F2Nwe!JHmqteUCK{F51QFD8TS)0l0{$t1QBvwGtORaK_iig#g1qMj02P z$^ww##f3Loi;xrTFyWnX(Gm-O0LpS@Ma4OCO1eP7C?fY4DZaxIx+m zb7RAYivT9@8b>(8j)r(aXKFiKSWr~p!m6`$Tnu0sTDY)Mr_6$j?wH^(coo;BT65u} z5f@=v1XWlBE@nUl2ca1kyxKg-@Zo}@ARyD^A|+#N1x#4X9%+XS2ME8m+o?3?E@{Sv zVWwY7mC_v-vmio1;8U#o>UqLKzRTkbPmvV;w!tgqNxTi-$2`_ytZd60aFOWsVdJ96 zQq48Ox&vWXyEO-|RRKVm*Q%)KK}P|nvijBVZWZgIy}sW8e(_rWO6>4kfb%hc1%=@8 zG7Sikh}}1WVJJfIG4e42B(8?->C-oFubw{TFiuf=gTmf32Sy&eKP6LvfR1$T0}R7m z2FAzH0Q{I2Q89@TD0I5i;PLL1eLw1SXJoeS+vK%8hE7_H9fISNKbK!|sm}AxE9H3F zuMz=#`6mk&+4t7o?EVM~ud3oD$d9(s{Cz1jr z*73G@_vYo*r?VHY&)?`2PuB>Hil>7=%uR=1|DU0BietVK7hnO_l>g`8Xy3K}I^18| zf32i!fU9DzABXC{tp(V8vHlim)it9|oWo#jwK5*sTFI1REE$b9iUST5gDIjE-XNLf zex58q1{AVU;jrg7C-Fl;A{=;3n&yN;wCb~4S|W>OK=K{2SH`I9bKY1-L$Dj7JM&oC ziO7w&HlLXxU|iGMzLI7rbArkQJ&-4Z}gh+W-Y9gtlB%qdD`!q0^O zsM}ieUbC=k7)H$hgWfmSDpvMPl@vTl(KXS0-&r)AI=*^Km z5Z(m7iAkz1J}?CVq-e|Asr&!}HuTDDUiwZUA)!dp%dc5f;x3hbX8@kV7);036z1@!51;hWXJ*yO(D#UcX#L{{Q{sgMByt%R2wV zs>%kqC}w>|&3_vjTXi`wZ*Ko3`Q^=a$N<*pE+r#!i9!#0mx{eozCUfqrwHFo%j06EL6l4Qy|8mu8)*bSOjV2n+o6z zkl4jtdt8vNPF<_uwIFA$#2r>bLOxn^We_>`b`W>K#o$9i!q!~aDsjPJ3IQBv())>_ z#at^$EtO^9qGW;kxNuQe-RhOm0wIgSMVS?u?Hn0ZFgPPWF4zcd7Gq9V%?0AZIOu1< zg%=S;lNE77ye!5nC|MXTO039?{Kd%2;Z((s5rO`%7qKc9h>H>{GUJ&#@^d&fd&FWf z=0QeB8;~+(Hf=!Ii6$Pu7W9g^NBCl_M5MQB16YO~j0Z3aX{?T7$Ogu>iNY>bTm{Y2 zJjn7C4LTW;RKr&ol2ieys%T()&-`;m*m}q*8t0L4R(>EkxQC)8aezQTCy=4KV)6|4 zjNUWwmho=)n4)dolyn8mDJl=zduV5bN2teR9QeDazgRN1XgjkRLsi>gGUL=#<}%N~ z)r3&Q`E#*8rc)Aw(JgwQBhAe}eQH4V^eMxXVc^N?ZUY>TNjeoIn~hr9j?isD5n`+@ zUsVb@w>aj;cqUQeu}8H+;p3+Mb1)5gh*7@8Uf}fOrus|0QL2fLT1lbaC{@MBP4$<0 zBlHv>H^u+zsnBA4+@#9mp~kRi1IUMLBzmDK*yNh%8ABZQfUH$z7$dVN$R_wB%^VED zuK1WgR`k$x{q!eWvN3d=coldV+>%*iv;F0U&!a%kqB?+L*rZi5@L6+__c?)a__hGIg9NCu zO=?=`_;^OnP zXXO?bkf-4+QEDUi9GT@9vD<3ZEywFT!ETIhMO(ezGcXdnd8DH|CMn9Y2QbY=f+9dA z_cc=Ajt1arB0Rl8h{t1;@}mjM`+YnHu-vNDT64`Y;@0LFyhQ*S&fx*~irWSezC}9D z8_km>Lj1^!ctAZ`(qC)O$8A6fz`~Y2&v1nQrMNXtuO7$o8=|}BgI7SzA1JI#ea&u0 zc6F3Kb2f+I$A|>Ca>p*@6s)5EhRSvBKAPzN;mNTp|L-5J>HkW~Mxi=va{??iHd~wH zV5yPWnvB#KvGJS=-N-X*#>M23b$AE0Xr%u~ZvL;6{eyMA&69ADaH-&&`xyFGV0j21(qpH#;y%)>MDt zrHcO31%?1_wErl@|35z2KUvfNRg?|s$hkKD_=b%?WbD50$MQoCXl?cZ+M9j2!7pc; z^kv$7v;?p}`;y)c69lH4+ z4o=tn-)hPRc=zMk^G@7fCGWT3L=SaDw>_V>s>BZs+#uUqZLvFlA_(5w?4gbnz=IF$ z-v-C}c@sl$Sm%sKy{xnqCIDi4J=J9`V*k+ArLKZ^k9Tn;gIdOWVH10<7B|37J?y-fkpq z03Lkcc^W=;PyM0)dKnw}TuhKVml}XmL`j|oXwewf?JgR_y5WUm*Z_Hv7`{X4b(s#& zk73^KOxSG$u*NQE)|9lyumpLg;-|wo*EWycAYsrBdjRMy(mo@wA*ns)bVuc_WI)T0 zv_iqGxhOO0#EwXmAd2P!oEl9jmjK|WoBh>|RGW8bg(n1pSs*Og6ooNV!eGxtG?1v$dhZb`d3ROrnU~^P$H$Nl-R7 zyaE{4kYq!o;^Nb6Mk;q=dF~d$I%Qw8nx1GtD-2IqD_{dCe32>6xS-1f!yl+=vL$nw z$tb$sNO-#$+2zl6S+{IiDjrf)vYu`Lk_xMq`nD>qU*yVnOj~px4cIm#i+&^M)_62W z?vFBPB}y%re>(tiRXo9(sT5_SJf&b$jY-CFRne9wDCL{(9!1eMNKje;vE^F_GtBfV z(9r8`fFDUV5sN8Bl<`?O22h8h{*<48e&+)|SNUVhF{8pG&3&QLmr zi--Z#Apf15oE*CTUq|cs534Ck{!`Nq^t{iJ4A2$|jiTj4yY`Zu2F$)@&g<7H+wk&T z3@pf$*ihQLZDz{8T{DU)J`~kKlWjT=X`xmVR*+D3#PSQyPIFa3lA6*2l|^DfB}-wuWf&Dw&e}|MSKBMf-p?`v32{_rHfnM@MV6pH<*rYD~!4 zW%i{;inPS;pD*5b#Fye-y83;$l&ww3x}=RYB$h_Vlw|TZu0OZE8mbXe16gen*I96O zH9?ws@>FfSqk06i0R@Ugl&3eAeHN(fAyd_$D0k_*)6Z32JI z`F+;&oMvRIdh;pzD_Nm>lI)WjFf@Nu0Zh;Ur^U1aEUCOcVke_ylM z{2zDw*_Cd5=NAiN1)Kaoj`!X8PsfJ`2W$Rs6=ehH*`CAT$2mW~QgBe&`^+Xjvv8Zs zvh0zEFyD~u6c!G7R@j~Mi8Ee-ND~x9e(usD&Fqz4G#7g z410saBN-XMB057&3w&<{Nm9)z%2eq4Z4xyEoOJlE4S>2~6R03*;nmN6IM)c}>F`g9 zuOsIILVrxsYzY3mXS7B#5|C&JCRvs^&0Waaf8P6sWmup5_lAUs4Q@sL|0jC~CIA2Z z)8n=Lw~Dd>)NHTCKSuyti+^kJZ!P|<#lN-q_Xxzl4trz~(%tezv^INWff87Yfn23* zW`hPQJntUSQTCNqBnVMAu3y@Z4x%-#$IRK27E-F&-4@?=HWKxf zT7)TMQh}>Evo|fI)CoEjiJ*#aJKD7Rineq0cTjEnI@_k0ztkYCDos-HZD#{mU#VST zRi?UM3thDcYmAt(T7;D?i@yriY7kZvUqpV}(ZIP}M%u8=i!(3L7x72*hud1>?G}cl z)K`t}qC!wM5iwKZEDII&v`Hf3z6f+w36;#Uwd_*2a+=&(TdbTmr=M`s^a5vP4kp~U zG{W(%xstZQ^@9qODO5x`MXt}`Tqts2YS50=e%m#Nk+-zvuLL;SUlUvR+Msf6W0uqaTnS-b-R$+l3RhhxgcUkEIiA{koF;^g+_@+% zH2c`-jfZ6*h0I!5s|VstEYoUyfjlEa@7!=-sa*Lj{5CUu>9JRSX^ z41bt0jG}88+)5n;RVg7aR2RShKJu(E4Z-Fl%aU!bbEVrL3zBV+hso9eY@S7w2!zR% zSNQu2G6>_4wR4TA_?|!D4FQ<)>USv3WQL_6VMla|K#Wj`!rB|@#w(He`KzYc^xv6$ z)zS%J6GF3Y2x~#~>wt4(7qZT`0iBRM3fazk`V`&~9HQ{)(`}H)Jb1vgB7yKYa>f6d+1xO7QE4sXGnRoY`s-W<}DF+!&^kroGN-#xO`?kjEiPHRr}Eq7cAq za@TlC-x6U}VJSB07QobvOCbYlz&s;6GX6((V2UQ6NO57ff^=q5W!&gfscR{x%4gte zLMY=?mB^3rn~P=re1^Lctk zGS=&uq2hxU@jh;v-fnEvAC%1Zanmq_-1<&$#ys~wG9TEg?tk`<5BJ>o-$$n>>-Y~V zDf<2g$Z3Cs*`G}E`q=V7`R_PXM#@^u&7Tp<>8<|Cq72^P1BDfL3Y|sVQkV%V@p+3I zf;#X@8vOZFS5@iZVa3eVf~St_YVhhOw*c=FWqx=d1#T~`!E@F5i_fuDkGlr&T;=(a zvTfDCSPPyTYkpRRtQ|?dkeaMpLATY= zzkVEDBf;_F;^)?ly<-$z>-!aQ{j$e)%)e22%dva>u~3kUeB60Pcmg8((<^d|VvbFU zIGPl({Qudzw%xXMto>i-DTwxBJB6b^PMYiu15=>rVRsj8S~M*-FhNk!676s*iyl!< zlbPuo%qz^x&65nogGA~;k+kBZfZ1L+I&gjbL{W>2Yc0yzLha3_0oz-RJ*=DnbhAou zg!AN<-H&+{tVi7i z{O@F!|8G0xahav_?&JTgy#Zx0dIgr!26GPFZs=h5L8mgLzaL|uOqsk9m4o=~iDFnO zt!hxT*Rlm(K71+%^$)*WMT0C8i(_h_jk)PanSEhr(xRMvrZPH7fV?~*970W zTN^nr&BdFTw#`9lMNr=a7szE*CJuVN1T{=U_`iu_^)9rVDm(@^BL^;9rQItBb$f^# z5k?Mrefcy@j+>U7ior*#szLcK$dw@N%^1BztAyMxQJRmzi;Sdi$!rYXl39H{&^#XS z385ti_w!wlc8(3awQV@C8W-;MUHC|1@XlfIs#Rsffz7zEeGZC-Klj<(u~C&32L|Iv zg~`!Ut{5R!B>up+bZi%ur(D#JA0ZgA@8&+|;1>#Punob%6`}bV%8Rqz6?qzzJGf9q zs!dmF;2hXs8-fF_FAAdH;q+Te$MfQ#gMb!!4IU&1HrR&XAVV~VS#FH6_jJkXU_qD2 z2zZ`+hqskWp5#EgGLV;z!5O+n*%*9CUqhU%GxH{TmhS?yv75*o(k;zOKd9b?K5Tte z*>I4fY$>*2{5^va`iL@2Vwt|9YL$!gXGaGxi((yOa&)*~abSaO2o4IapC=enLjoJ; zRjdt*+7AHi0oPNNBL@Lqbz!<=7tMw|)`{5kAjB({d7{8c-3f8#K)!#y`@G(HKX_9j z;ahtnUoQMP2ri1BrNwFc{osOigiGENN?4&gBUT*5DecVw=Ep(D$XE$vqo8mAe2p_& z#(Bx{;N{sl_^2nUVb_g;`q!U0zk0*9sj)O#i_A}fH3vL*iIIa1Y^vQ<2)RER^9PlK zUU25(#zDZk8_KRx<}n^P=m*^M!3ey`!2vi^;EmqH8*psnJM7Pa@*CLMQ0_!W>fpel z>AoCL1heR>ZD@HA{oq`}W1YY@b)6>%!3FhEiqjKQlLOmmw!NM{bdbvSF( zIQZ{>{{8>F(c2>78@dgH%JGAw$u0QKd?YJ+{sKZqP`DupT`$|clfZ!a(cnx1n$KHz zj^6&vQRjf;3WL!Zd3A%Lb&iTz(Rp-*;&p;#*5&HR{stUWzn!gV16vSu4jQ<^z`80c z%knzS@e;jAAf;y=U*CZ(%XNwD+wkbozEXp*EL&h3f&+@8b;i?wvW*4XIoL!~RH>** zD^M6_&o)vMy!8i-YEF^aEQ}9cIrhSVjd7mhiafm;Gvz9|yNI%4@6r z_r^gB7RRy)2ip8``!mNdWnm*S{SU*meGXKm@g6wfs^R7&SaDG0VliR5CvV*n+{h_Y zj9Qfq2ROy~iyj{CjROsw7Y|xS`MteoAS_on%D^e+@B(uj!6dn5F;E=~7@?S>DBdAT z7$0~B!n#%$^4K;WoCjcfD=Z*PY#NuD&&trXMM7pU3GmH}E12c-S3) z0M7vgzkmF~V(LUp9*Y)K(tZ?@&Lfy0@E*r;g1*CyL7;tdVH}?|M2A(FSg`jD6wLC_ zKpDx$W^*het!P=35|M?1rH3o-xX@FN> z*Xb(5*Em576n|ZjEdR%F18Up`KOT8 z6E~@iV6JIXEFmq9%sko-!91b612ld zE)@A)n75>koD4?Yi=DF+i8c_q(GyCAR4v02Omk_wtI4@|+y>2LLes?A_pvlUbi zsWG?K8CB~Q^PpDB74?JlIIefFk9ymam>eEG1*az`$0xg3?4Pl;#(!5|??Ghr?f-go zJgM*hdUU$m|8*{XUVOt)_Uw`a6=Ye07Qwyurh9dB(mRZy`6 z*2-{cp=vQuwe45eFhuED!@5PaaoipEhnMIdB(;LvxmTdNu=4q@%~ZPvAx>Z;l1A$+ zLuu65Zq^=b$?j{C&2SvH^V<|PdY&ZY`xtyes{}@94EX)~X2^4h6BNHCGx`P>D(CGx zyu@XGXwx>IExTg^5Ki<(W)-qQloQKz9Yu)J`8sLTQ{*lJ$29>?J)|WL=BXKQrZWh1y zZ6Ftu7&4!?Js+=*anju}45B<)Zakr(JBC4&6XX@lV3ME&)8!D5O(TXuloRAUPsD5R ze9oq^DW+FExr7JgaB_6m`Q0;!a)Jz_9ABf>mw4!oVGz}XY_+XyY4T+I%9c^^wT)%V zwwt$>9l+wnHM%8z18-U>{?4vi-9+1xFl6 z=ND!Q#NM>+1A1kXQpchxI1z}{A$1DGFj_lD<>ktYCJ%LV z$Dmr#@y`I~Y6MV=DaqSF$=$pYyKQPL=qN+wZ0noZWH3jIUMF#9O(pzjJr7lF z$|Eo|((cGQ#^4i45}Yo+tYVl~F2Kg7W$GVE^S{rsPW{&(EW|NHcCxBj!0@)-E8{n+b#iiYQ|(D~?Y zK5CnXPUdH&wb#5fSbni!}w#LjBCE4#8QyW&~?7XSeN|Dzf6 IsQ?}a06vZg$N&HU literal 0 HcmV?d00001 diff --git a/library/ix-dev/community/deluge/ci/basic-values.yaml b/library/ix-dev/community/deluge/ci/basic-values.yaml new file mode 100644 index 0000000000..43924ebd3b --- /dev/null +++ b/library/ix-dev/community/deluge/ci/basic-values.yaml @@ -0,0 +1,7 @@ +delugeStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/config + downloads: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/downloads diff --git a/library/ix-dev/community/deluge/ci/hostnet-values.yaml b/library/ix-dev/community/deluge/ci/hostnet-values.yaml new file mode 100644 index 0000000000..55823748a0 --- /dev/null +++ b/library/ix-dev/community/deluge/ci/hostnet-values.yaml @@ -0,0 +1,10 @@ +delugeStorage: + config: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/config + downloads: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/downloads + +delugeNetwork: + hostNetwork: true diff --git a/library/ix-dev/community/deluge/item.yaml b/library/ix-dev/community/deluge/item.yaml new file mode 100644 index 0000000000..532e43d54c --- /dev/null +++ b/library/ix-dev/community/deluge/item.yaml @@ -0,0 +1,7 @@ +icon_url: https://deluge-torrent.org/images/deluge_logo.png +categories: + - media +screenshots: [] +tags: + - torrent + - download diff --git a/library/ix-dev/community/deluge/metadata.yaml b/library/ix-dev/community/deluge/metadata.yaml new file mode 100644 index 0000000000..d874017d61 --- /dev/null +++ b/library/ix-dev/community/deluge/metadata.yaml @@ -0,0 +1,18 @@ +runAsContext: + - userName: root + groupName: root + gid: 0 + uid: 0 + description: Deluge requires root privileges to start the Deluge process +capabilities: + - name: CHOWN + description: Deluge is able to chown files. + - name: DAC_OVERRIDE + description: Deluge is able to bypass permission checks. + - name: FOWNER + description: Deluge is able bypass permission checks for it's sub-processes. + - name: SETGID + description: Deluge is able to set group ID for it's sub-processes. + - name: SETUID + description: Deluge is able to set user ID for it's sub-processes. +hostMounts: [] diff --git a/library/ix-dev/community/deluge/questions.yaml b/library/ix-dev/community/deluge/questions.yaml new file mode 100644 index 0000000000..36dd5f2f61 --- /dev/null +++ b/library/ix-dev/community/deluge/questions.yaml @@ -0,0 +1,280 @@ +groups: + - name: Deluge Configuration + description: Configure Deluge + - name: User and Group Configuration + description: Configure User and Group for Deluge + - name: Network Configuration + description: Configure Network for Deluge + - name: Storage Configuration + description: Configure Storage for Deluge + - name: Resources Configuration + description: Configure Resources for Deluge + +portals: + web_portal: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" + path: "$kubernetes-resource_configmap_portal_path" + +questions: + - variable: TZ + group: Deluge Configuration + label: Timezone + schema: + type: string + default: Etc/UTC + required: true + $ref: + - definitions/timezone + + - variable: delugeConfig + label: "" + group: Deluge Configuration + schema: + type: dict + attrs: + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Deluge. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: delugeID + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: he user id that Deluge files will be owned by. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Deluge files will be owned by. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: delugeNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: hostNetwork + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled.
+ schema: + type: boolean + default: false + - variable: webPort + label: Web Port + description: The port for the Deluge Web UI. + schema: + type: int + show_if: [["hostNetwork", "=", false]] + default: 30038 + min: 9000 + max: 65535 + required: true + - variable: torrentPort + label: Torrent Port + description: | + The port for the Deluge Torrent.
+ Applies to both TCP and UDP. + (Internal port is always 6881) + schema: + type: int + show_if: [["hostNetwork", "=", false]] + default: 30039 + min: 9000 + max: 65535 + required: true + + - variable: delugeStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: Deluge Config Storage + description: The path to store Deluge Configuration. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "config" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: downloads + label: Deluge Downloads Storage + description: The path to store Deluge Downloads. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "downloads" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Deluge. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Deluge. + schema: + type: string + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Deluge. + schema: + type: string + default: "8Gi" + required: true diff --git a/library/ix-dev/community/deluge/templates/NOTES.txt b/library/ix-dev/community/deluge/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/deluge/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/deluge/templates/_deluge.tpl b/library/ix-dev/community/deluge/templates/_deluge.tpl new file mode 100644 index 0000000000..b0d310cfd1 --- /dev/null +++ b/library/ix-dev/community/deluge/templates/_deluge.tpl @@ -0,0 +1,118 @@ +{{- define "deluge.workload" -}} +workload: + deluge: + enabled: true + primary: true + type: Deployment + podSpec: + securityContext: + fsGroup: {{ .Values.delugeID.group }} + hostNetwork: {{ .Values.delugeNetwork.hostNetwork }} + containers: + deluge: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - DAC_OVERRIDE + - FOWNER + - SETGID + - SETUID + {{ with .Values.delugeConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: 8112 + path: / + readiness: + enabled: true + type: http + port: 8112 + path: / + startup: + enabled: true + type: http + port: 8112 + path: / + +{{/* Service */}} +service: + deluge: + enabled: true + primary: true + type: NodePort + targetSelector: deluge + ports: + webui: + enabled: true + primary: true + port: {{ .Values.delugeNetwork.webPort }} + nodePort: {{ .Values.delugeNetwork.webPort }} + targetPort: 8112 + targetSelector: deluge + torrent: + enabled: true + type: NodePort + targetSelector: deluge + ports: + tcp: + enabled: true + primary: true + port: {{ .Values.delugeNetwork.torrentPort }} + nodePort: {{ .Values.delugeNetwork.torrentPort }} + targetPort: 6881 + targetSelector: deluge + udp: + enabled: true + port: {{ .Values.delugeNetwork.torrentPort }} + nodePort: {{ .Values.delugeNetwork.torrentPort }} + targetPort: 6881 + protocol: udp + targetSelector: deluge + +{{/* Persistence */}} +persistence: + config: + enabled: true + type: {{ .Values.delugeStorage.config.type }} + datasetName: {{ .Values.delugeStorage.config.datasetName | default "" }} + hostPath: {{ .Values.delugeStorage.config.hostPath | default "" }} + targetSelector: + deluge: + deluge: + mountPath: /config + downloads: + enabled: true + type: {{ .Values.delugeStorage.downloads.type }} + datasetName: {{ .Values.delugeStorage.downloads.datasetName | default "" }} + hostPath: {{ .Values.delugeStorage.downloads.hostPath | default "" }} + targetSelector: + deluge: + deluge: + mountPath: /downloads + {{- range $idx, $storage := .Values.delugeStorage.additionalStorages }} + {{ printf "deluge-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + deluge: + deluge: + mountPath: {{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/deluge/templates/_portal.tpl b/library/ix-dev/community/deluge/templates/_portal.tpl new file mode 100644 index 0000000000..a5ab633f3f --- /dev/null +++ b/library/ix-dev/community/deluge/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "deluge.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.delugeNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/deluge/templates/common.yaml b/library/ix-dev/community/deluge/templates/common.yaml new file mode 100644 index 0000000000..0596641f18 --- /dev/null +++ b/library/ix-dev/community/deluge/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "deluge.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "deluge.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/deluge/upgrade_info.json b/library/ix-dev/community/deluge/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/deluge/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/deluge/upgrade_strategy b/library/ix-dev/community/deluge/upgrade_strategy new file mode 100755 index 0000000000..41e9448b21 --- /dev/null +++ b/library/ix-dev/community/deluge/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + + +RE_STABLE_VERSION = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + if not version: + return {} + + return { + 'tags': {key: tags[version]}, + 'app_version': version, + } + + +if __name__ == '__main__': + try: + versions_json = json.loads(sys.stdin.read()) + except ValueError: + raise ValueError('Invalid json specified') + + print(json.dumps(newer_mapping(versions_json))) diff --git a/library/ix-dev/community/deluge/values.yaml b/library/ix-dev/community/deluge/values.yaml new file mode 100644 index 0000000000..6835c6ea15 --- /dev/null +++ b/library/ix-dev/community/deluge/values.yaml @@ -0,0 +1,36 @@ +image: + repository: linuxserver/deluge + pullPolicy: IfNotPresent + tag: '2.1.1' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +delugeConfig: + additionalEnvs: [] + +delugeNetwork: + hostNetwork: false + webPort: 30038 + torrentPort: 30039 + +delugeID: + user: 568 + group: 568 + +delugeStorage: + config: + type: ixVolume + datasetName: config + downloads: + type: ixVolume + datasetName: downloads + additionalStorages: [] + +notes: + custom: | + Default credentials: + - Username: admin + - Password: deluge