From d32fa31c59ea330e9d7be734ced233b5341c9f80 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Sun, 2 Oct 2022 22:15:38 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- incubator/microbin/0.0.1/CHANGELOG.md | 11 + incubator/microbin/0.0.1/Chart.lock | 6 + incubator/microbin/0.0.1/Chart.yaml | 26 + incubator/microbin/0.0.1/README.md | 106 + incubator/microbin/0.0.1/app-readme.md | 8 + .../microbin/0.0.1/charts/common-10.6.4.tgz | Bin 0 -> 48411 bytes incubator/microbin/0.0.1/ix_values.yaml | 35 + incubator/microbin/0.0.1/questions.yaml | 2645 +++++++++++++++++ incubator/microbin/0.0.1/templates/_args.tpl | 58 + .../microbin/0.0.1/templates/common.yaml | 10 + incubator/microbin/0.0.1/values.yaml | 0 incubator/microbin/item.yaml | 4 + 12 files changed, 2909 insertions(+) create mode 100644 incubator/microbin/0.0.1/CHANGELOG.md create mode 100644 incubator/microbin/0.0.1/Chart.lock create mode 100644 incubator/microbin/0.0.1/Chart.yaml create mode 100644 incubator/microbin/0.0.1/README.md create mode 100644 incubator/microbin/0.0.1/app-readme.md create mode 100644 incubator/microbin/0.0.1/charts/common-10.6.4.tgz create mode 100644 incubator/microbin/0.0.1/ix_values.yaml create mode 100644 incubator/microbin/0.0.1/questions.yaml create mode 100644 incubator/microbin/0.0.1/templates/_args.tpl create mode 100644 incubator/microbin/0.0.1/templates/common.yaml create mode 100644 incubator/microbin/0.0.1/values.yaml create mode 100644 incubator/microbin/item.yaml diff --git a/incubator/microbin/0.0.1/CHANGELOG.md b/incubator/microbin/0.0.1/CHANGELOG.md new file mode 100644 index 00000000000..c80ab2c6679 --- /dev/null +++ b/incubator/microbin/0.0.1/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + + + +## [microbin-0.0.1]microbin-0.0.1 (2022-10-02) + +### Feat + +- add microbin ([#3993](https://github.com/truecharts/charts/issues/3993)) + + \ No newline at end of file diff --git a/incubator/microbin/0.0.1/Chart.lock b/incubator/microbin/0.0.1/Chart.lock new file mode 100644 index 00000000000..747cd441507 --- /dev/null +++ b/incubator/microbin/0.0.1/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://library-charts.truecharts.org + version: 10.6.4 +digest: sha256:fa80993e3b2454e2e053e66252db4cc5c9347dc4b8fd28f0041f3bb6169b13ee +generated: "2022-10-02T22:14:01.471349424Z" diff --git a/incubator/microbin/0.0.1/Chart.yaml b/incubator/microbin/0.0.1/Chart.yaml new file mode 100644 index 00000000000..0b0572a87a7 --- /dev/null +++ b/incubator/microbin/0.0.1/Chart.yaml @@ -0,0 +1,26 @@ +apiVersion: v2 +appVersion: "1.1.1" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 10.6.4 +description: MicroBin is a super tiny, feature rich, configurable, self-contained and self-hosted paste bin web application. +home: https://truecharts.org/docs/charts/incubator/microbin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/microbin.png +keywords: + - microbin +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: microbin +sources: + - https://github.com/truecharts/charts/tree/master/charts/incubator/microbin + - https://github.com/szabodanika/microbin +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - utility + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/incubator/microbin/0.0.1/README.md b/incubator/microbin/0.0.1/README.md new file mode 100644 index 00000000000..acee7a10d23 --- /dev/null +++ b/incubator/microbin/0.0.1/README.md @@ -0,0 +1,106 @@ +# microbin + +MicroBin is a super tiny, feature rich, configurable, self-contained and self-hosted paste bin web application. + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. + +This readme is just an automatically generated general guide on installing our Helm Charts and Apps. +For more information, please click here: [microbin](https://truecharts.org/docs/charts/incubator/microbin) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Source Code + +* +* + +## Requirements + +Kubernetes: `>=1.16.0-0` + +## Dependencies + +| Repository | Name | Version | +|------------|------|---------| +| https://library-charts.truecharts.org | common | 10.6.4 | + +## Installing the Chart + +### TrueNAS SCALE + +To install this Chart on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Installing-an-App). + +### Helm + +To install the chart with the release name `microbin` + +```console +helm repo add TrueCharts https://charts.truecharts.org +helm repo update +helm install microbin TrueCharts/microbin +``` + +## Uninstall + +### TrueNAS SCALE + +**Upgrading, Rolling Back and Uninstalling the Chart** + +To upgrade, rollback or delete this Chart from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/docs/manual/SCALE%20Apps/Upgrade-rollback-delete-an-App). + +### Helm + +To uninstall the `microbin` deployment + +```console +helm uninstall microbin +``` + +## Configuration + +### Helm + +#### Available Settings + +Read through the values.yaml file. It has several commented out suggested values. +Other values may be used from the [values.yaml](https://github.com/truecharts/library-charts/tree/main/charts/stable/common/values.yaml) from the [common library](https://github.com/k8s-at-home/library-charts/tree/main/charts/stable/common). + +#### Configure using the command line + +Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. + +```console +helm install microbin \ + --set env.TZ="America/New York" \ + TrueCharts/microbin +``` + +#### Configure using a yaml file + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. + +```console +helm install microbin TrueCharts/microbin -f values.yaml +``` + +#### Connecting to other charts + +If you need to connect this Chart to other Charts on TrueNAS SCALE, please refer to our [Linking Charts Internally](https://truecharts.org/docs/manual/SCALE%20Apps/linking-apps) quick-start guide. + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/docs/manual/SCALE%20Apps/Important-MUST-READ). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/apps/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! + +--- + +All Rights Reserved - The TrueCharts Project diff --git a/incubator/microbin/0.0.1/app-readme.md b/incubator/microbin/0.0.1/app-readme.md new file mode 100644 index 00000000000..ad4a669988c --- /dev/null +++ b/incubator/microbin/0.0.1/app-readme.md @@ -0,0 +1,8 @@ +MicroBin is a super tiny, feature rich, configurable, self-contained and self-hosted paste bin web application. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/docs/charts/incubator/microbin](https://truecharts.org/docs/charts/incubator/microbin) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/docs/about/sponsor) or contributing back to the project any way you can! diff --git a/incubator/microbin/0.0.1/charts/common-10.6.4.tgz b/incubator/microbin/0.0.1/charts/common-10.6.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2a39fa03ab219bec2da674eaf644f63cccc67271 GIT binary patch literal 48411 zcmV)$K#sp3iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ{cH20TI6QyrDey6wZF_#!&6Z`yGug9l+v)b{#PPA6^zP2i zaUc?sFs2AL0Lsy%^X}ill>jdikAO?*$ry+9PrZA$ zRqWjF7-iiT~0F;$}(M;rmV{;Lfsi;9MP_RuUN5#L(z}{0q2lI z$~p>E#t;oj!coE{)U3NV9Q1m7ySuF$w74ZSVh61@$Qx_54W@1RqSXevnVW2cY*)Yg z&)5A?zf1c<66Fe_KyA9r_ zDEWAP23U$hJjNjiNixQhj6yNjTQ9(WMQ9AOn2W-f2!Rob$!&|ID4D0p=?qTLK??v0 z>r%p406s-P7XV?5QNjTh1zP}6loEzHp^F2+!;p3`api-q)mF8d!UY_P3CZEaNUr~4 zQ@Fi5Jm`=2cOn!<<6(agj>dz1v_05<^=i968jgEt40~vQdv`n-?2UKB-F|O0+#Q9l zdgI}+x4peL+~04EL7K%eNJ)&tMGMGZ=kmt^I31r6eohe+9coEvKVyo1$RLf@rTQ(V zXd)`s(>;gXkmMF-186Rx=lxEvv)$Y7_g?h}hTgBnyF;`)9QM$DG~SN}(a!$vb{|E1 zJ8%$&+porOdoUXB?(O$_d!z9P4R>}>uh-unplvi7kHRK6tVQZ8h+`JQ7_CccZYtK3 zI)`0JYV);g|7rlFK;fN!r{C)v>h2F-!B=~5dwcLI8b)Y1*dK+_tKGfv?jC$Kg8O@e zeYm}c`or<|?tV1b3wxvO!S1W!&H$qE_Gs9o{k5o@QZf_0TbH<|UOjCs{#-mL2tO%f3>$A?x0aL-iyNB;r3{M7;cXT`>zK5ec0Q1^=dzYy3{rG>ZxlXH>9p9zZzD(C`Nlb{oSy)7l}V! z!R_sEyx$MUdvIqv>h1Rj{eC!#M*GpYzu$*Du-D(--rL`KHR=y`cKZF@euK8_se2gT z!UfZG4M~I;qH{#orEFfap0=V)TZ3;%UZ+YUh%S)_oxM)a(6~1q?Y@dedk7BE818TH z?S^5r|EjmQz1!P<1z+_>qtWheINCvI4Ey`LaMXJ>?Dt;1+8yl;20O2swZ0Y;!#Kss z+R|6msweWHg4&S23fd|-E>(BLieTH2b+6xlwLj|bgm4!@xHA}p!%?(7ih5xmZoe9j zdi#UDz3suyPPo0_?~lUqE4a5m+S}XT*&prijp53cn^JU^#T?@VFPYl1NL!R?N}aq$ z6+DU}%qk>juhYvV=Wf{F8Sahu2D{sP;a(Vxd)rZOXAtde_oH642gCj@414=y!EmF! z@vDAs*x%g_d%LK&yEE)pnptkcP3bd<$q2?dT@VK_0c4IS#SxMVRwb0t7=H$2EPsu& zI2MaDy`+1uOM6g6Ih1frkt_ouG!_ICEDS7w%9=2WWH}fEg&m0D2*s=eenjyMa5PJ$ zoCG0EzzBhip{UaWy3_&q@^v{hm?VVD$+QxrQ&hrjiRCmUag3-%86|KOBR%oWS5aAg zhz{feyGWY6C=e^#j{N=+#yA2*dJhND{0FaAg^;Z7r;&Ois zmJF{N|24p>3is{P9h-GKa+b|Th>F=2A%-c6KuRK}mmPrt(wrbh}4?k62&OwgaR1HVFTwhpVGjD}_9qo+gCj@j@$-mL~>M z+28_5I>*+*e0F%LT5hQiMQt@f2~q~7(din1GB#&0brskc#>~n*OVxA8ryyfu{HH>T z&LPF30+S_E$fpP3yY6?TdZM){VSG#R(PubIV{{-0senNcW{i^=I6aqjMcD(;f3@A| z5BEF6VP{wg5@v+YAjct$;{}*NK1D*3;$%V*W3qp;o_=voC_ezh;m{%Ia#fjA0bV zRn*@i%p|P;Y)x&Ia}wnh#Qd2-oG3j|ni!fN9gT8>lSoc2NGDS3iz05D0-7YS_@qkx zgp3Sq}|R zpy>qIlw@%vmSoCSjjHBf4$_gFVhmvv8KqqSEUT1OcNWgo6nWFHh!!VeiRjQVAzWGm z!ur)#wHP9rp)CLvD9nu3MUmEY?poR|LM2cowS&NCA_$J+jB!LSNUSVv=lAzGiEuKh zWi2{_VPl38h40Ho0!AJ4Nciis%!wR$CKkY2WGl2AkYy>~2-SC3*2fMQSvJgnyE@SW z<7?0*5K3Bp4Qx!OiZJ#2^^tR_RED=4)r(9HNp***_*kfPjK)&g8#ZOx=$|O$MTv3- zXLgGDpU&*;$Y*{O892<$`EvgZIGluW7HQ^zBQm%0r6{P?3Q)myETALpla&tjTS9Nt zvdLQg(oqP+tmrJ;bjWK~%*;Aw_v$U-Yh^{_f9Yx|iR?PgEXggYgaNN&J^<5&+KO2; zFsJr`Lv|ry2?Z3*1PwJ2_##ED1Ky{aW3c2uMInzD0CEn)skT0aI?;)^OLdFmSH~Y-66cZ~zL=zaF8UW03Jc(tF{cr#Rl(3yZ`=4+MX9xOk?d%Jp zX_y8zbw{+ftSS?eIW#4J`gwYOxm(GWv(lZ_Bf z5J!UEAw?XFF=f2dQol};xifv=LAidIV@eWfuG_V12V7}AoUbolfXhX~;b-HSJ!riE zhnv7G(qDk@H^KSg<>k-E2jIIeUqI&qNv7xsIR(Cc{jT)_9N8i*-Fvmteh1T^(BcA( z?R%sA)%W%crfs`&lg|xW9Eksz*T*H$a#i<+l9>Zkk)hO4eNEp=2)cH>+4nEC>5KGPQMQN=4m17L0SrFhr{lD*(on%%msF zaFMf5A#0o|7qRwXwDUrq2p6L0SV?egO)CBr&__rx@)G0Lvq@pdGZ=#iawr7S2!WWu zNE&I@&Xuqs1B_FgOpYOk8paV!%(@!zG&TmOQTqa@tKpOnCZ(8A%oiYxAyW>t+||bg z+H(Gk)D9F2rzpzA0^8I(64jKx7HWLKIGVK+5}|fTv2@m$6}xgRs$I{8=LfP-6lq#(kAoXRsQVS!B;0=>r6EMlJ zvL2uyHOpqXOHl}X1CoiEVt$wf;m=c)7`GW={7h+c$4*|5Os*xOgc*fOz$b0Yyb(g} zXUwNRs=A+A4v?Z-CD-wRTRi}H?6r-Vswi#epr)m&TEaZFx=|K5u0kK)$!S- zAv4>u8{1|nlthFxEo8wAE&xT0#B&4^787!lr2sRQDO*zx!%wcv=UK{xT>9QRWWg;0 zFs2Ab3p4T{P_4Y~gJ26p8IntV0gECMh6m`Xp0>}FdR?7o0uh?rp8HlHH%db6d()usCR7AH5% z=R)JCKBq*~7iJa(r^jI9{KM(-rs!FF4n;pwxipR!LeyqLbO;KILI+@XxZeWc!@I-F zpAJB;w{1jJzF8}W5eef})jc8!N1u5ogee^17;`KJG~*0Mc2WPshf^`ezPntBoFk{2 zKqI0g)x!rPcZ(rk2S{JPZXM|6?Q-B;IZ`iu?BqUImK-uc6Vpri;s;8y)Vvw{KUtQh zF%ql*WBI`_mM(WR6;jYl$oI(wA^aU?Gswf~dRR+$V!lPf%GjqA&vA?D<&iVIhpQjc5S~3Y-y%xUCizM#LMF<)aegF$x!9jOsdO3pncU zN*bMx8~PT8ugoGHU3xGMAu?{#9O?st` z!)^-a2w)-2ZxdlZ3h^Wim;wy(N%b`{djKk6m_~>$56)LJbR)bOw!2;ezM|lnf0E0u>G*%PT1?wBZdis084_KNspTwt6!YC02(=BFG z<+fL&zaSZvgJgi8Ti8m(m+WhXxbcCC&WWWmxD~cqLU?g!GDpD29tm6p|!j2cX~6UsFV}RI-KlLPC;^+Yh_?{TSjnqv&c%5fccDFL|6s z1o54C-A=P=X1AXoh1)IkXLetQ-F>n>Fuzv=|JE4(Qt5=X*-`9E`udVW_oG7DMh-y0EeMm6oRYsw^bNu1Z2QWaKDM>HvYiVtP1o) zOtRu++Sc!1yil(G8G;D|n1iXX)4>dWmSF{C40ivr(|g_D?TJ;Xs4Ll6U;np1Y_GBcGT=`0M9^RW$6+`T3ACMGayQ^ZI{L&Unmgq`=hFYJP>-QN`J zJB`J;m;zQ{ohA_u#Uf`)Zku-`4=6}UnhA?Ns*An;Bv!AVq)+VA8yLqU7~Wiww`9WJ zCnuB=`sp_!gNe{I+o@Vi1DxcXrZ)UQf{@}nLkk2Z6ozP=#qr{au$Q>YR?kcNs<>Wv z)?P+TuC=Gij2}uzz*YGJRscS%KtZqRU=*PUjMTbPhrQY*q*%%_Ji{@hW>@t)!IIw@ zFe|ZMV-Hx@s8Fd5LxmnFMrcKF&>ccNyqHeqm(Rvy{8@oFx>XGwW*#B@6D1WOtrpTd z*-8`G5ad#1gB$uI6uLRnBtqvZ z4AmGC_G>X9$vKr!b1tFwWP6)Ncr2uAdA>B;qmkd)S3Txt`N{1!xh}NBs zOw@NtgIdy?xGET?QsQVQwz8dYGA4AU1gjDat4s<}EhmuEW9NvLi2%5wa6HCgA!@`3 zik!nVe+Z@uVVuKUEwXvW3B@qZUHx4pq1!m^ZmI#S#O9y|b)4!TjgC73l1Yp%ISg;M zz`4{C#~FNZ-I2ju*y3?SLo*;NcXEMNw>a+H&13oohK7r|0v*miX_` zZ33G;mWokVe(wgu?PvozzIRpyVyGNd(1@9gfto9Ym5L!X@})*Itk4dU7AsVP1Luy~ zK~cO`HPomFk2xfWM4p?<>xdOfp{$U%q92@uB>1Tk79S@yFHC zxi$bl9G`!3tE;7)_@ozgDZEVp6f46#S~Q8k1o2#B$-p7ON*^xX%CAztl2N3WWzH~I z-Ha1^Ku!71owXWH7)LMyWbCvfN`Fda6LK^}P@Pgg?_kXmUR%^{{U8aehofo~Ip{?Q68`>u7ueqUZNC1|F4_C`l zbMok(mbQ(atd^ywl}ERW`pAhCcR z<+Vwgaq<=?H)Yz}pb27*lfopA0GZ(^ifXDZAig&{J>4g|vXG@6F2qRr%HZf;`d6mVe*D#0{GVl6M=i{HBGye%8O zo7Yqyb$j_?L_3mRu!F@lpNShL4r9|p$2bzv=aeuTd8u1RNz~4m*2Ci>ZM6(*i`kEp z_6RZ@`f=N)?LP$7XD(Zr;Dm2;S!a}&udK|plkt8BAerFgb4^hmvo;K6D886L!S8&b z_`pj{<3P{^m4T2=MC%K)ZenhHn@qX*N-b|3fHnj&kOO5-M7${I;wfP~*Tb$(lV9>l zs!;!tFnQKgBIU<77!57M+Z~Hb9nzH=zOBPyJF#7}Rw9)`KFyI50CM|Re9BimIcDdO zPdlI)O2F=#biH@Vdn|QDB45Kr!d3ysGGbeZN5xrU1X3N~ z2mR4eO`F>@C+@*FH)a~j&^^0fAP?~#A()sg_8Yn`8|k` zIy!PMJKn*zY|E<_YEAiOJ$)?X3awXSXwL>TSZO$A@4D1bAimS51?txtHj{#2uh51M zuUKzb1glmYwzfLpS2*J8SM{>YfK|t1{km0_f&^fTsUrv`xo|-q+k-Q}Jyu`@*O-t4 zFoJX$r`?;&8jhik;HwFK%ki<>tH)-0y@0D1FCjNsS!Ze3L^=?EagcUd(iG_<*MQkj@Z^u;0l&p3{y=_A)o z$-<_1quLFimU9A5#c|u8rKf@urL0uM2Z^&8GAlNJGu{x`J(BXN`!|8kH5p&?DY{nG z|MSz9E~<}-h?3v6ztbv|xh;({?#~kS{++-`H7JpjQ3C>^j)^VrZs4&CHs58C)lnn^ zxY{a+ThuiH?j@bi8Fb^s5*ZMPRyYxKzsm5$oaR$`)+%O5ft=tuN&r*6Qk^Q- z&l2e|MiJO>(AeAp3Gu2*BUA<;$&Fw!S*FDLC#uj_jkqw>;;HTOwvI=-g(}elMVUMq z1<+^ABuj=d#Ivn@lyv}-{Vryjw0EE~y1gGNiuCQ4E` z(I+-MId~|~2fZV1)<`1}d4X5o<*rPk4S8uDOAug2B4p=G?(84w;6FWlYFr~k|33|M zEhoH!(akYzD-4-A=+qWiFy(@WwrdCA0>S8KiaB~O4A#8+@_43AC1Y?jy%3rPv3$#- zmNpFk3mt%0uU`Fti@pRR*Di`B)gjKQlImGX67Wgp;K~wx%;b|6Ria=;o)q8fXCec| zR7xR*GsF=!t1!WeUaGDwF%l$2$;tPZ=G>LA^2EQT+TZJO7MezzoKdE>oP?b-b}}%y z`NMR8p5`!bDVSI#X&74IFojeYSNs;C1i;um@6mFYV;$bG3?bW#Fx^}p2rE#C3JId@ zYEvm`gLzRqbyejG@6ilJIFqi{KqVUra;*yipQU34HZBg|wMQ_#5$t78Ty2_(u7TPx zNyV84uwYP8m)R{btvls+DGXG@zJ!!}c9-~HNPYZXw*FC3>=PIx$i=8nbRry0k1Z)! zLum3Uv3w^J|4WIDnFI%PZ}br4Q$y!M1TR2eO_1LOYs?{y$%NgJH|CIbMfGRycw+8Q zvKq}&A}{aJv{^dRqVyeyna|R1dVv3U3_4VturH)J3Uwgyt*ezroFQvEXp3 zPH<@dmnc(qPbdOEW!1bcPv|o+y1NXi9Dqm9}s?)0smV;^%q6lAEK# z_oEk`4Lv{he2^HHPX_Z(RW6&^;@IuYrJEhbRJ>ZG($gnaz~K~yH|A^&rwi>t@-a0y ziD7cKSR)e3yw2K(OQ><$`4leaC@c7pBr(?TBAMWmGQ+C)^52kem3OiM`x-aqec4y_ z_~Dt@z0y%f)rT|PtvqerGym4}Z{?8dP>|K*t@Hgg8*Ej0 z^+zsA$gHTIg8_0VU%ES8fw$Ea$nR=rA31de>F#yN%Xw<^N zNu^9*JD+0{)J$t_m_%)uaNIU;He2Se3M4s6NlYe-%TzG+(LFIWDFbAt0F^GlG|*CgKiJN-*Cdw1kwML>|rYYB&7P^R6bnw<#vja4+(=Dv$5QB zEPR)NKKZcyO-a@NEM%DDk_eo{`uHAufH9LW<@n@qB@JvNg_PxDEq54W$dHZc(-uBT zIK}F17xA#GLUjeT(o{&!({mH!tqSE?Yabw&D2$@EMxf1!bWL@pgn$^qxjr){)5Zvv4>8G@ zfE-Qj){DUhz))*{cx&fiR!DO;+VuSxs^GjUw~MMi!A`7e`buUGeVGo1PPfA z>0(QEUMJ;OOHmpxz=+CIHE_%k1>fZ~{!U)%DMv&ZNMV{CfI+X z|Jra-S=6KfRVRSe-+uPW7BC+Qcdg0#=6c65$*+1W)z=?guT|H(>R`Mr8Ba4$lPzFd27;xW zd+_Zouey$Vk~2k#Xr|`MXjQI0*MM$2cg(2Gvj`;|Llp?CQ$rhhpFD#avoU^Gd`6O=}T#L zA*5RXTZg(l4V)k)p@bg5i6pN)vgnXo{&sdAmC2p*>&V~f0f4G2J@UpQ#Q3#T$>t3s z;mz)~Sy|fG@}kRYb)#lpTSjSLSAHuUP8hqqZ@O#ntqMB7!EtE)W<+Yrz$1JNsWTkBZe?P>#yCC1t*G56fK_GZ#=7-8@10Vte4 zK*>D!GM8_{1f?Sc`8`UJ#JqgeLwj4K92{ApuiOBt^c$SZf%5KudL`WiaD*>X~tdRDdiYQhGa=tw? z!$G=;M?9xheI>PA7vIqXU;^6K~0h{z5E9f{VC*jV1GLQdVZ1aRyPCHJ47cU+q^_2un(f9y7Z0ako0ry9q3JdHE`@KEI2Toq6 z5+5Ws578Qo;4Xx!^QM4xGN%*{V;9nH0DXg_8oJK1BpMZ|F+}aEG#65!uAAkeHqV7g z;IN)imQpek>o~_E%Z;*_Oq4s6O>qiLMxmJ8;596@ zbS)pY?nO+@VPKmmMq4?eLiaBnQJ`|kZd@e!U+Dr^eGQk7#bz<+> zlULE*Vm_5d$2o}}Y;qVJmQ4vxNaYR!5ii#~0qW`eP!(fZxe6`OTT7k=Wdkz_*d)HPMHVb@gQr|nu8-BoW!9f1o>-CEN_V#xAf9el*`h%VA-MvBoPrdD4Z*TA?(0j;^);$^Hkp8K6@3xAa z`<*;rzI6Z6l4{!~yOQfj9mFw;Gn7)Cs4QtGnkj(g3VXx2x;UC5d+~Q>vzF*+gb$~k z)?d0`zqY=7vB8-E4?BtjJ91;JQ)asWv~?Xk2B7m%8GMtNj9}cspO3`S(p>YZ3sRU& z5O|4`2z}lHFR?`Q;I*xcKcAGEIr8>E1f+Jm-GV9BtIGor-0ZVXnBY#Bgk!Nfp7(>+ z4Njs1pf}tOIfvm?SYXFCKX_|~I8-5u<^%x#-2U0XL@~M2^&EM&U3!uz6sy=)b zD_ZxBJD_5X=*i&;?Wj=Auf|(wm_oe1O5^;4_@sOI8f*Zb#(ANaVAF?yVumc38W@Fd zwpw**pQKKeBq}4XoHQOFL(6K>5r&57*ex1K2Nf!J%_(WA`sQ)%j%d$G)q>{ z$DK19S_G7fbz~k=w?~^UmlP1X1Dqx7g~tH>qUSYi<8kl{Rz{6If>B`@Z z-Ki;}v$_#?H)nN2X>}u2&8YH5PzFC^P%;>=+0vkmxmBYCSHY&%~VTyv(tpM_}BnoOKlazK24YWwC0xZ8(02b!AXMfN8 z+S;~qrNXvWKwEZyN@4)2bh`W=fDZT-Bw`LF91KLm2421|Db#}<57{ZTwPn@Dui%$V ztm5T2wfiaSh@tksNte9*CVK6CQ;YjAj!^#d{Gi+Y^Zek?^FPl62L;ur0M1Y@9p$^&-VXQJj?8VG5j4B6rmOYN>@Ai z@}((Tnp^6~%{Yr=@t2rmZC6yhmo5V>1w#)HeSMyh3%2blf(Ckt99^^~G&Yez56u#GWe$tNImEG8eFRdGsHxeVR%F)GrLQtQcnvm$tejuI;2(Be!Q zCc6A;jPl0pE=gsVuXXgN1)U2$K~wWXQMf1%-M@w6atB69a~b7Iyn$&r6pl9d=7pu9)o&}?G!fbD64l|l9nZ*E~Mv|n4e2T;Xfp(kH$~Y{R=ph*WQ+nN919@I=nW&H6%|z z0VIan;gQ#X5 zf9mA5E1J!c%7)h)4ioaxbU4iUtjgigADaw^X}5-&KBQH{p&@kt0*(4=xMzlm&#x}o>&MJXLf(%W=6RCBEAizSH+o(ODb{4N>}Yd#+|!a)J`hVvn>eV_U8 zY~uf>Pec3PB#gV0FL;&zx7QmK?f>3z=h^;$ibuzP7tDgb$((;Z6(2iJ(t@vF50(_76_vRYxFeLzMJiGNIa1niK-~Z??e8 zx$>Wt`hHW<;rZ$?7@fetK=Kj`SUx>BAv||A6jZQ}m)JlhEy+7q4_cIz=MN+XHC<|h zpxu_nfcW!Xs0O;FS^#;b5%8-`5a9$2%WrS*#0<4U`tlWgf`iKc|`ZilgHS7icG2e3`PX#K9x z$rY0&&%XNgtCz%8PCriM8r2Oi*uMW!k>}?R_%yQr*!^MvSJ;33?UMc1+Zhg@?Z2mZ zto>&)u7*yUR5k9*T7N3NU^7`VQjPmZE+TI z#++y=EMcBqxxb&MPX3#;QTKNKHjw|r!LTU*cel5n<^NMWR{qy#8C&1^YhYEoe$Ce^ z$FKRe!tLu9YvT0vYxpkTwSB$-gfN989Al1=mX0ur@}$IPCs)^p$L~(hT5I@+E!BRX z-eJo?59J$n>GAlUVV%hFKtk(|aMG36UbI0wl>e|8p%mam-6^&j>EDTmZngZkJ$k(S zPs39Fr$O)e{O6NAb@6|0I?pE#{xeN43;lCs!?M7?ie#S;8}(PE=^i=eFDK8^h`)x$ zc-{Or32vqRr!IniH2ZI`yIq?9!)N>NNgiwexk;nPc(T6F*8u2PhFLa&ZD}WOP_4^$ zS;mJo*1e|9LVAexJho1L2-SfFoW%#=SDU>*Pli9`JiU%($mg|63-PMAZ?cn5Xd3z- z)fZ{;Vtw>qMtA6A=I`q%cKV z1~@+M%1vyiy@^d{(gyz|qiZ`>o;eESWrH~M;fp#dSkTJ~-7r-T|NIK zqpEhqbA6pcKE1xyD-NBbB&f{c@^9nCXe9q1cm2P;y<4{b_V%9T|5H3=`Tqdxe^(Wh z*Z)=wSFHcdw-xJuzgUy?zhC2?>;E+t^^TtVJud1kS3K0B-lfOmFX~rBU0Gxr$6P5z z)e$=RwY-Ab%1O^22ue{+rZc9PhE$3bs)y-E4V6FT*YnF8b{-%yt3fQ*(joqxxIq4` zpVj)`4(DU}fBJj7JEi!a-RJe+lRS0)ANQW4C-(oCrq^0NR{MV{ZbEuk|4)^r^T__6 zoIGov__QnY`m>&Sk*3`?YyILe&m5B1*ZlR`hdqlfiU&FMX}dCitfQUC7%^EByR z&(q`~Zh%;2|LydP_dg7`_nzawpX8~t|303d{RXDrJWV{SPn3x;(|WRC14`~(q{vs$ z=ob)>6eSYW@*1_ye}zmA1yoxnw!K?S(IkU(C5|gvbm6ROQwThncIuvOx^R}YDTiyl zHdok1^E5FQQ3W*h=?#uim2vp*<)nYaXPNxh6QFyoIpwj||J%LYqW!l$c((tZ**LX4#>E2UEP97Bx}No(?vqIDChGSH`-jVV!3+BPs}-{M_Tdg z=AUrEZ#%s9dY|1tv6Ja8d+20N&rr*!`F0k(fD zL}b4Et3Ot4{_0OF_I|xmO}2i$3inI)u}0vxd2{(cm)Gy!AAfjzvc|5lpx*Cu!&tD; zL+ur7Dm?x+am^-!X#WPs@#QV%;nZ*K&FRI-&xdc{x~&E8&jP2&#rqFeC)a(iM1OC) z(;s$vonE)U9kje$V&=Y5Ma&we_^jgb^o^tJ`t*E0@G(=(e)%FTE`6csb`@P}hTING zH9@K{7&`ZhnD6?&e>NY=8{Gn1qH-sGMc?XSzXskNB!88+k5rWF6s|ujpmS&94=ad2 zEKt9H7wXq@DWT3CUk-Xk>}CwnMBUrBv|I`qyCpPIltIb-4J9)btDr2n3p6&8ZEc^d z5%UiI<&X#`@WBn$$(;lpHiZ;L9b3>)QsJY%E@4*3iQo;Bbv=~gFND2gYBmXW5M^UL zM+su=oRX1j$a~Q=-l4ssmB)#uXk`CAZvKznaJ#hsKNvjU|NSJ-fZ!@85?@IbDSHsKZzjgQC(*wB5|JN($ zf7tCm@Bci>Q|JG?GGqTB9zZQJmdXrgbD`R^m!ot~-=6i=RfR?tkn#L{n~&h#bGls# z&ks_=Es{D)g;|dRBpm{?Tf2Zi4sAj>-BpZcb}qf2vFNr8svynf+d`=*)Cqosr~%5Uv}~ zj}nNNV)4utjH8)zupsvfu5g$7;N`_)OW>>T-VwyL5^XebVE9+K>Z3flXW;7c`lk=y zpIl#_99^7T6}>ioU9Z-M%ae=C^TVT)LY;;q=6Qk~u!l!SC+An!$7h%8z=dImQhpsJ z%m-Y5R@ARgNyZT?AtSw8B}8hDjy7v4LX2PIwA9q`$>r7c>G^}U#YlLwd#y8A7aP2M zfArJk?)Bx##mAG22W=L8<`iC=BSv1MC;xqQad>@r@k5!Y72~!(aUq(K z<&Ce$cf;j*JEOdv@eS-}JgTepkLU*dw|yGg|6)1$Xy?BN<@|3ugXi<#Px5$He8GEQ zBQ0Nw-%IUv$u(@N4TAI)NUUCE;Vt`dt0;z9l^OCyQX{kY+K zoJ2U8{K1)m#7Hl}%;+tlQwxCdq^Y9{%jC6Un&r$slDz2TFbstW(<-d`;F)7G$|)|^ zUCJ7|K+*{8oSE1EK6XMw{mwgAa?f>9fdf8sEH;1dm zqdS*>x5Duo5id>W|9v7rR?Yvte(C)0-t+$N(>(g3*0H&zRmbj^J^ZCjLq|S5hCg4* z2#MX*6z8ERkRlKh80jO1cGE&4yez!LyJ@9Ht`xkx_mM3IdP9+t@#&4a(gjGb?}w`& zuYWrEAM1b1BSk8O$lYbgviWb1BR+2YM{l@Sn*Y1I&-Z^k$x|2q@v|BGhm8MNxo_wk zfUS-J$dNpzTT zA{VN6I{?0F|F?YqOMhqg`TmzDd9?k9S$_Ae43J^~G62CS&XAN;Qu|IVQ-G9209v*H zL~X|aK80NRXw=qS)XEr6CVIgrI1R*jL?K-)H6kSscBUx|oJG(}btiyvGc`PjXex`h zYgKg`o~G6Tp2KmztMpc`oi$BiA$`&mGI>cQ2;NIlse*yGXjF2-{cZs%>(OoPwZ+k2 zBg$C+a{4A=+HGhg42VGV_5B=CiX#+kn)e;|wZE!0lyJO!^R`r9=F1Woj^HZ#{|zVM zWYV2)YsX!U2&!@383gX_xf7PBs3}{!l00YQNIjg>ly&Foc(+2>p6g{D#j8KzBm%#h zYc;_}J?G^Kxvyl>PpkUfE_$#XxbDo5m1a1(KxvFa$h?})d#AcSo;-t}t1IR2ok}~p z65Jde&leBe0Nd%fp~hA821Vpj`opggk|TK{QQH|j9I+e6VIOf&mNHE=jb z6i$%SNCmZ4VNnrYS?b9To}Q^}RKDIUV*lpwE5Ul(oA5 z{cgIw=`CJ`#w=KMiNy@j2?84i1*N?meH7u4Z&o_<-SghY>%Y0_*$H>qzh8o!8z9gG zL#KQ-nuRchJH;C)dRv?guHtoGR>CwOeTa2y&p&i@)F1z;)BiY`P{i0nq<>za|NH&H zuvgUo{pb6?p5|Fw|DP(xcpUAox$ePqzlOJ_=GV0zM(?}8z7ehOQl+f(-LDNazJuV) zl;Rnr3mwEKNIG$Lz?ptssig6!lW`oILLCjNu;Km^W}Ljm$;~4+q4l+HVHxWb2c*#b z(!luNmkdw^3gvOCDAb^ZB9oO`J13MIvKHZ`gmTu9xT0uIVtwVwT+f*T;LXiD@cBkH zce)=8w}4HbzC|voW}?*-sdAjW3ACiRB($b;0U=H3rnApVJ9f$8D6W%~?pC!COC3{3 zdrJ+dSrpyUJRJVuH3&5JfwyC9P}Ja#gcSG9_adm*&fXXP-2SuRhB_ddB`ek{1^gLB z?{E~w=oV5XzJqGi)HOSAiWQ8IE#&_z0G3l<11h!YNp#VoO84iyu0Zs)xA(UNPE0QEVIfHnXNe( zvu5KkTQ&ro$ChDPT8L3uHi?!r$f_FK zEcLhOd#KJJS1AbdYFZR3r-e3mYg`ttsDFBgMR|j`%1u#n9t501G{!f!>p5R_FzL$N z543|4P8TV`31@-lfX+WSy$Np7NCr@uNSvn4I3uo`ae1H=G4wS4mOD9E%)XHuOJz0k zay?mm>(RSjwR)1(-L8oBwBm8;%62PJdCWfAl~1`U0BtZO%)Nr$0b(n6WSM*ti)vrK zNYZsAy}ZN`6+10C@;OYo^LB(N&kNb8R8qVs(5@I!`@PqLe3#d)Tqt}OwXft3;+HSEY(1xFj6Vko zxcFQJwuBh~BN*PGBs%b3u0{d?O@v}a|E!E6bg3=?f^_Ao03_LLgs7@6$y=&hwwekU zovm)4<&3qmsUpehrr;mg*InoT)nSM#Jo=tq;8p(L;dUYaM}Ke7d%pkqNgnC{{oeEP z@+ksm?(l10uX6QFxFEK8(+|3^JE5zp3Z9 zOsBG6v0SG4zOPy{dCcRj$24r5Oq}Ex)k~`~8sF*y>-V(}Y?di0i7ru$LQd#Gc?scs zEp)QBgeoJ5rE#gnqV2l{bnO}B;q-0Oz`YLBjlZpk;~UmFoV*?i#>%a!FZOE9iV}g{ zn384lFYEyPJ)aQb~r!kgL;oe)RV|0*HAmibHb#gZAs6$!!OH4pHjamg-H_l6gs`wwGeE(m3@;YxNr+Vdebm*rYdh-fn^oc{89S z&t|Ek>Y|xawT?4W)g3c6MNU4af+3{*+bpUIjq&-&|GfBl~I*HfymFTY7bxH|uDI=_3q=i;*} z|4VZU1XZ!j5?~^=h$N!$2Q~ms-%mZ)~Lp*z&Xy9}nI=9A@J-1GR0b6XP)3(NC zTZ9E_-L?Ll^``I3bRMql!hRSBuZAKN+lJ#T@=6Bnpb!XY@GX0R&6lN37U_`p#>UJM z>g@>^TCFaYL(6^2m26i$XH@M;HqE(oBGk4`5r;SdRZiP_r>oONU0;(mn4);rVbiWT z^V!y09S7hBp|n+@%Ad}E+}vSY;o`PG8sD&4<2d)+$gyXu+{2#@!w@m{jzlI8Q(Fa! zSYq1mZrIWVg3-?ubM!t5Q6MknbT;k_nZ+skB|}a~4C92#^i@u@4#WTQ8hG{U)ektR z31qUBQe<;GR`=gMgjE`wsxi>GDM=cD4WI(B9WfW=VrCMP5sU@TY*q#osf;iAB+7q# zeRqmgU2F|ZCZum5?d|iUpE~>RUKf58o)z}rptsvE+JA$c=l%aDdDgQ31XDaps+at} z5p5#eCm4V&&(`AJWzsN2K=#{f;bW-`^D>wFR@oiH2%Ki?&C&9b^3kFPSY7fLwlepN zZ=f1XEFG(AmOO5@`TQtKkpv}m^S~6ayi=xu{dBie^55KLG7n~}6-KAhoc^ZG-x3{U zJT7o=y=eybOP-SQ_i}qoGcKr&llkVxz8R*!?~7}y78ttK{BvD)!4l^`8|#1Qr_TPr z*M%R2XI1{E-e9+w|Do6KKimIL@vQCt)fa?3io@5vTI3-X0^YqO4Q+khzXyo}c3^!g zCVWnk3Nzk0t#rRsPx{W4X4kCL8UfECy$xNUoZ@71{G8zF`C0p^*Z=Aq+!N$~>TT~7 z{eQ#$@Ol6DNuIU!zsZ^MNCtoezI4~uJra7K9pB>7(zSMb&BbS4j-cOQ%hyApN~1f; zf$AU?H?i3~l&1@vL>pZEc6PO#0n(X#ytF~~q{2g`3sQe5ow@4n$Xcr-C&km79qZrK`fWpLZ zO0n^`1V-P(7$za276&mbaXji|2^OuO4j*@69FyC&y8fY!)4GHmOA@>P1}59Rwy8D! zHV9R58is^{b{?Ic2b*96%~HOwA5Ft5x3n!--lq-CCsp45^mb_rg}!_-H;a5JoHw$l zoqXnqCQvS(0v8oIuXHK-8aXBXq#@1+(5$u7^I%2E3O1|3t3apNsc7inzw?l)x=0D=pcOiZquy06CkH$1fx+FIx9mJp_{8)nR|C>)P*nBSC@kF)owa=*);!4o!Q{6~Z!)Y=MB_UNL)9E?$DSLYEt_Pd1THOg0+Ma()#* z6OQ+(CKP52>f5Lp1PvFPe&xT5oX}(h><=3w{3SnbBJ|gmlMThQl)OO{uXOG@4X>>- zYuKa~9XGRux)#9CdeO;Wy0=BRceQz~S!2TgC?n#9;Pneh6C;oj@iiYWYrkF{ojdu< z%=-gyb#&gUiipok@%ubeKJS9xPKoK!W@)X9b=yuMlYSt!;`E&XZ_fV1VNzgfl6?5r}0YhRoI=v;tZCj@v*R$YtGOncP2>&{*ay zlR5y@NuFG!?Dz7r%Vtt_wyS5K<8Sz^@c%)zCw)IR;EMgf{%&utnEz*Y@O=NvlRRtr z|NKCOM~MXV!|0wWCa~7a=!Ww>z;<9oh~PTgf>mdofAi2jM`o||&6yCF8fE%GH@H>U zE6q-Itm)JFBWSCV{EzXd8%`nR-D`(N_fi0>cqG{T%=OB#)5);7CbncakWd zEPx>;&Sf9VE`E32rp1jHEdbRylk#Nr%+=!k+g3&;MuHboC#X3tzKHqzat>aq$!YCR zDP7cg6kWE;CasBkYe@Y9hxmxdlIE zBcv@izzG;3K$N8yp`^2HB3I_qzsaGw`oOphI!A6Lr|FJC!3Zk{P+{A;D32}>&!|pE znx>Sb6pQstZjj1FOz{G%bvx!>6p;5zEs}z&1ebw-7>J?S9MK~(OXZ~wf9rSpuY$^* z$klZ1_~*Gb5+lT+*J@RY2}QD_DGF~aNf=k{E!HMVevM4KxJ`Vg3m7(+lTw@OG^@G~ z=UFkV@hp@7+Vy(x5U^G9f6y=5|HIv#=lJg@d0hKn2fnOr`kRHgm~bZjfn=fO@f@;< z4(6yXSL^$C%;h5irE{33M#gI-+EicSZ~y}LsEoba;p^9+1=F+;3p01Fjw!>gFh9S3 zt$;Fv37nv)JzDtZbT0F(^>vFQ_juLPRZ-2F=)qP*OHF^9P3wLxgCYUy=6F?|&cc^tOxge`ol7|Lc=HayFlQPGJ&B!&wRlGFHxe z!3N7Fu{-x1Z@Q9XXRfPQUG7$SDE?z135n;It^oBKY}inSiq8dcT6Lnl>{icLB~s!` z(O_G#7X`S@R5ZN_eibHZ5`y85{1eYEv+)>z20=Thw!d3Pa>oQfi@`XH;|2I7gE1as zAyLy*j!CEWGg8oHc`n)zvRmL5|Ro?ND>Zl!Zbt3cbJ1)9LHjnm@$DT15hHbv0ceE z`9_VyImxQ+orq zjmaovZLl1m+VOR0F)^ybq`FM00l!jy-=Dk~)Q9mhDM4D2R?*HxRjt{41bRL?j4lMD zHVOrkOJ>(IN0pM6%xWpAt=)ph!0D?adi3A9)k#qr!w`Ys{{O+uZmw z+YIV3suC!*8b%Clprq&j13^dr*CrDP!1$LaX&|$IiISYbat7`Q2Cj1Sl=kE|t8y0H zkH3Fw3+ng%RNMcS(Yn`K^b4N5>q20~`M>_oZo&Vv-P_rDw*Q~x5i_a#7jQL2U~NQE_;M7(U%GY{R``c=DJ38t8Gvf$w!!MfeCePMo|!a@6?Npt+>_u}I?v+Ri6plh zpyFF6wI4zCezj-;n*Cw@!^;7BgOli#3DrPxG6{0$jCTuaO-M4R&GxuPGR`k<*7A=w zFqFbWI??IM^;@W3sOT3uv61Osk7Xg>_PbXfn?}{F>Y|5a-oI}U(|WYIIiAAx8J4BT z*lZvgk4$!1`R5unQJ7J6PKBe-+#GoEUfwzOsiM6Yk5RY?&4r@&=R>x^5uM>gWnY>h z#>5nde5&c1e|(pJJ17nQ`b{`OqN0&pzSK3-0stj*Nr*3A_&&*(YBJNkH#i-dC5P+- zL)4weW&}IuA5M?+Llj1^inm(4NYCy;S<2J^D&1OZKz_J9xww9Ks1F74iyv8T;lDe) z{AtY=WSyl*ivrh|Csz*y_|duHho)4nXmHGA>a%6^_~GLHhx5j~amO|u1-#ESRce$K z>5pLaK8Y6>gzz^wMr^@2nt`g(@P_P+B%(@ra4v_}7bl0u*YD5X{?GNr`}YN=3i?4U zqVmL1-fReC^uzgwaua7CPmfOzuRoq%o__!KsNAY~ft}Z?l2C`rq<^m92ne{;<)5FX#Rj$D+Uq5B%dS zMb8yQzhs!A2m~mZV@i^l&}nl>F&xDvnm)#i12P6Pm@-oXK*v*SQXO>srfSHU@8Ok; zJIK#qYT!CxulKC5b8Qd2?Kv$(PJISR`Tj$2pnM2icht+P)m^kC`#@cuO~AQtNJmXyo0INg!{Ix6}QathE^=7yz|smQDwQ~K^9dfLpa5=B?m+* z!_#s=>PmxmBuiX)dVaef?Md;xp}OH*fjT84RE@h$(Axb=3xIcsP7sr>nJb#1v%^bp zd35;p1WZtZDC8&t!X&`Sn5eFbk~X8cx!FP{LTLfz=GPJ^|9J3P-y0z}59K`)C7Z*~ zsp8%s;Q)FKR8|(}RT&jo(YtfQ4%5p*DZQR-aw`AXSG??5>Hkehbl(t=75?Ae&R(w= z|J{GS|KVvK<^OG6O%X^*q};ifW0EZK|8`nU9l$AxY7YZh|Ex+DDkpaFU7mkqndhjS zxLPMNgLlo$=B~v3Q=8JK?Vpf$jxM@)6Zj!?K9sY{Gmj+_l^3)MRHX}VT^d!jM=_C* zW5}4ntMqbRhZ+l~D9U0)Z4Pwz#k$a@gz+;K8ZJsWKbw0-MI~c=n!g+1;TV5W!g8me z{o(B~ctw13s-`av9G&Fr4W^9$jQR9ORkC0$)l{fVf8j)!M2SA_)gh@my;c4qr-#Z1 zSMil0NW-a8#`bOHhC;b5Ne%s@8Sggo3|FHr%Q`O}r9qb(0GMBQZOZvmi5VR<{1zwr zKwrKRD1L6>(w52XS%6H6!xySvxaFsCSm6a{q`4_IHQ^2C`~ zfm3#xFb?C`^R{uscn8}L?kD{=M^9(G(S~XH^TBK7ohf^i1d^Y(z{?x75T!P5(1I;# z=U0#=_!saiV1#mca3<|ngEb8(2{eb zfjD{V`6M5{zc*s+K=Kq!S7wROXM&esDkOw{`qc{(MLNCj5{$u zJm3HDB#+!oIG3p)t;5e8Z}1#`&D?!*+r>GYqmoP-t=X>G(yF?OL0EFe&E_8#sZMLD z^I0xYrn01`M@xkjjMre6F@C7krFy4ox7XcNRfjLoXHmOLQ4%34X=@?@6mUyjlY*03 zXQb||?8Qr)va?7aKd@GMvGh(`apmOZ1l}kGOy(b*Z5;o&!uyP>gD(t3MA|bfOC@nc zi;?cpm{2DraR+SJ65!8l%lQP<2?uqosIqyK2jFTm!=}-#PH^nxMK*NulLdeA^BUKs zG_K8NT$9MSm}1!9*Yr{t%Mr3r>imsWl^xKYQY)ypy1z^Ff3^Hq9-GI@|I^>?4+q8g z|6YIaEdQV4S(^V-NGd-AsCY9YS;Ef|one^{pMigpk;(yz8K7Cx8lf?v=6IZT^eE?J zQ$1q5g!Y!1iHzcNqEVK_`q@gtyg!G0s&?q@W_CfeYCR%*<+Xq)!;GUOME;pJ8S)~F zTluShGUU-^*#XTB_2yT=$)%LO!g^IuO2-@>9aiX)f~s+^KMm%n2TfYi7 z>xff%Jc6Q>Fw6-RON@j1ava*r6e>2RY}D!j=+$oT*Te!itIl;?^(NH1=nldgv`4sWI;W2mn8M{iG$e){qKhs%@e^V72*?n;2Xp=ui7 zWYPd#Mq*lrXmI)d?S&kq;I2pt@M{c_Z1Cv)MJe9e861hR_|FlcQho+y5GQAc-@iS% zKKyX?CxfU>HD(=AWtMA4l_PQ3CE$-<<%`59=|(1yZ&%_a&dO}ZV4+{&_Xk4 zpJpw%`%d;+YKsp`M4@-$uML9k2q#@OHFyT?(ERzUhAc~rAe(}}{q4Jx_iw(_?@>4< zAUMo8nL$CoI9`B|P>Mn>RDYTq4V_LW@Lk4gzsqr3i&FD6(Sen3aGXymedk9-VSO?l zGg&ZLS&~B>%Md^3o|bj`A+5!En&=QwFcxU$eZymrjM?CGM6V}^k6{>t|M-v6t6#x{ zq7<}$nS@iy}6tZz~Rx`;IG0aP3*`j4DDwIBE(V1QM3hAR(jFKHPa1n zBF(C5`UAgg8-l}wgWci&!Nt%24Z8C*>6%dhzy7KlzC>J7B4dd9=GvebZ--GrA5XkKg_g5iDZWBb=6sJ|4mf!`j$^W~3 zfL@OAvYim)JlO&-r|C?(Pznb0T{-*97YVYX)-a_rHU70)m(RdN2V0_=o6(^0=!N+tJ%oY4W}< z6*k!D(r-^cp1dBzn4!PAM{w;iL1r6ghK^~(*%wgiCV86p`6Z3cG0wnJZ4 zNvtr#7#H3HF+&WFa(PiMkmfype^F7uE^pMcY5&G!@OKcrGzbUa^=lBEzd!pS0RIre zsr>Qn`@`eYvmd~PKo?*pFD^Cr`b3aJp;~YPW@tv}A^`s=s4Af7$!Uh1cWNT$O_e^W z<}T#-NQi!v$X0QJc^;!6jAF(im7>&7T(ZG7Jz?!>nZ^htgzM22t#>*da49%gG$-_b zzbDolUOPbZc)w>~jqx4$y?&)^`0-Yl2wLEPcAHa-*y}!Mw^@oKL_zTKOJOnnHTbK` zwyL8?qM;u}Lt@cIEHgV@-4?whN#xrNwZggrE(}AI%25hQk_c;xBrIr1imFw(W##%6 zt>WJWVr8aO1Pn78gLYePY_;3cRu5i&saU{%4G#Pdj*v4Slt4V#f3?5U6$p3D2f1MX z8g!*B?FxE&gJ8&YNn#3?b6oW>6bHf|3YY84z5ce5&*#k-FNcPBPTs$1)ttR6y7ZUZ z{Oy{H3IVV-+(D(C@AIns%(9XHQNPFmlu9hyK>h~T{)SrfG*NArY2~fvik*6nz4wnj7b7wGQnZ<-CA{G+3vfh6we@C zm}K`l*tr<&QxyOj<54H$I5vek8kD{1#D#yZBYy(#{;Xo_ZZMKlPX}Q8g>?*3Gt6XM zoW*ZLos)L%1Fp`9xwMBWO9l&ycx`T026eoYl$RG83o^)9l(sqjs8yjXa;8J2#NXZ) zw;FeMb6XWEMP7-oLE!AW_PkhW+Y0#lRWg&e|Eghz8RKMD%>1jq$vf13HJiMpAkJbu zOhH8!$J`rfH^{4qlGJy80b4{~Tb`E+4nJJI4@!mIUdWMn?X{i<`Bb%1$b`HM;!jW97geeD>Hx5C zii9;n(eOA_8J@5NG*nr=9kxmWgE2CfODH*{2kThWgN0ho&saj}6aPo=~77{zd5k0m-BBm_vOq7Ya)W zsAqKMKAD5pd3<_TN<-PwX7NA)`UM2W85HCfdIae_40Jyzx_t3_*&C$58S{K2K`w}(9c-##Pv3HIH}wVDW7~y87Dn*7n!eruu&e6)^^&7*ON3r7v5U&y z1+8?x`rvuB=AlU-*5q=VmnD0{@4#owI8G)~%=>~>Ucr3}7Yw8njpg<>@QdTIJz>KT zH`y9Xn7&@t}x}6O8$qzQ9d#SFH zG+@dOJEwmeg=@1K4oq#6o8<(?N%6pG$#e8TI2DZ4y5@^y9uulO%*$|ES)5iChL(KJ23{Vd!_03;}qzBKI!AKF+1_TISd z8#Xqc<3!(X@>lJmmah4!pw=kBo02=ZxGI%{>+zbs3jMksLyG@{Ug0%1@BLOH$tzdk z;n$Kx-Kw0_IUM`#CNZKUDeoaZs(GT_-l44ukCX2mYU9pd>&-b`p2<94)=C9--xu+_ zfGX2w79Cyta#3r@3jkKkBHy+0%TrJ?-fBCYUlQhj^VM1$@hgxkj}-XO@K*fauXnZ8 z)#38`5hCY166EcapQ=ogMque!=TQvok5grF*4~zz*!B0?4ODeENSA2W%Ok0B5N*AXp}VItx-=aB2W777I>`@Td=z6{(+d3C=R05j8(+N6U3W>BRh zzj)X?1fRfsG76BNvq;}z!;0Sp-;iB zdvJrJ;1uvBdayB|Nq&9*I@yRlT85=+4S+`t{cX3B6(|^Xg*2*rG;} zufO(@-*7$!s*x|&ZA}}x4%K$-E|FZDmUcK=o&uw=c61F^x7j3NsR?UC*I9KFHjPzH z*tA!*Ind3>@?zo}qWJq#@(S>*7+wbMFkfUf;0BcV9vjAqdMD9Wq?D#zah zn3kca0-}kOX&voo)Zl3N8UicP*j{rl4^3sI%HG!NSoV$;*s5A;PBf+nv9ZXbZhsC{ zrCMM)^*m?7v{iGDiT^j$q>Wa&4lU=uN>htSnzp0z|4P$vO#<|lxDNH`R2#aiMml3> zj8Z#KtA%TW*&ZC%X*Edfr}XDgI7*q(QeFf1GfEU!pWQ^SB7%Q-1Of!`DiXw}2PA^~ zy1$R%&l_Y>1_h*iJ{2ObK`C6LDKO3Cc-C$~cEG{){D;TGjg%6e z2Aj4cGE2wq9bsXUJo`LYemnBH8T9NC*p)(;&8YgVmHHN?iT%e@tUR3kH*!t?zdQBz z_dg${e17(yNa%AH`;UXDw*Sicf*#%eQ&V)_$^KIS{Z{rLC*hv#KLKo~{bwNEWwKS! zsKIGv|Ji7KIQy@vw>#`VYscYgd9{?W6c0_H)BoA zMoVK&9g7Y)8XIeO#A7qo8q9D zDDJfX1OZK8RTeK7WJ0>@>n^8T$QLicKKe zEMH^LtC!0C4Oj!?vH+&`tfPrp1uRxU0f*Gx+#k;dTr)P`@`>%Rq z>3*C8`a7Bx2E1Njhml=|*2S!@Kv`!l@340nG*u3%t!Ld&B+)gA9>xC&J%Z>DH*YE_|mX>TM~sBzkNU5jf1ty+y! zXscA@%1DbQ9W*&JT>yo}-^5b&xbmCT1=4CaiSZ_PckPA3;De{>E=r$w3S>r0JLQFM zrbgo4fZkMfsl>3C@sC(4<^Lwb;qgy!v0x7>-0}6N-SHn&XJWqpG@S19|2#@z`QLBx z`jn^j!y%&V=&Lmy7Jr3KdCt!RrY5{W*(Qkq1Swf$AR+-e<4a`Ag*whKi4K1GrAk05 zi-|U*9AlB?&nDfVZ4dOm`TqM}@dnbf5T_aFeSP+(NB{eeo_GbRMv<@}p{;mg)dU64 zHwliGSN;kGn-E9Ki)BRepI>}L{)XiZKLDUFvazDbM>50S8fO0L#m6{7{L$vqJpX1N z+#r#}{052K=CY8ODpVvn1sCf3sJy4ArI%EA&fEe2tV5!BSe|svl-8Ro2?ReNyj*3c zz||P3F`Fxx1b3ZH3gf|NlOv(6WQx7!lSv_5vG>hLa*Yz1GqL}Bn$em$yxa8UGe`G+ zkBViwZ60bK)rTQOI(?Cyl%Z9#em3SK0|lm%Oi`wk7%l%aHh$#LH3lxNs2#<+y8@(C@G zg8c?tHD*egoEWtV!?pxDBQXida{D*R zgY^NS)&<4UQpDZsw$udPZ?-K9iTHTivc2r>S8u<2-FzqNnryuD?!NCTc3sCk*LcSn zD9gL8EKT04ObVKH`KlTzsP$5e>O`r(wddi=e#-9u9}$UDovJjeVUGUa)0F+0lX z0&9x`^|>BaMT&D!WM*E$^lxaJgDTpVvFb=mH5H4uVj>GTH4~{+ddPVcTj4qJZ%_g* z*sQ)mOPprORvab)CVIiM0L2ONVTOWJut^ap%~OJ+040~3FyswWfTJ`+FgUDV5OLAM z*k!q(v~D!_$o_43SZqUCiT~YjPilnS<4_{11;C6>rtqo2;s7(PAFR?K-}{iM3Vowt zsvzn9Bz%3Tk^e&VesKBkj7O&be=>5Nz5IWS(n9|KEjJB7n!zZbHZ@-(bxT~VBH2R8 zopostC^cS3C>rT!5U(Wvg?~w}I|B4J|3Mp9#dCV375DNhCXRzv?f)4R~ zKo`$It{DMBHMO6LD4Yvk1*OJ&Z;Jbb5_1HeO8lw@DtugKHj@a3%=$!} z#*Ad*CX{Z%Ohnx@puLRKpq_H8XF`Y08}{T79u~cm6JzvF5cHMkOXHr%m$pTFwOs-8 z25r-dE_?zDoTOO=a2>#7=`;J%t~B8P$sGE3(gJt#e`jRIe~gFw{Ev@P$~G8hEp*Za z!>`qsB*SNmq=wtm@4GoY!>X`(_P5F78LFlXp5uKW<}S(Ak=1c^)bU)O{G1cM z=jH!>r2+p>QF4oY^nm)m>Hi-(!|`;_{~x2+_`jI+HX=Z-lNu>-#jETV1QNX>3*=9x zIFM+YN`#z-2NDVj=_QnPqCvJ(rGqh~zny@{d$5-gf2`7+|DX9j*+f|fF|dpO4@>#~ z+=;XI|2#_B!T-gicMtJNZAOiE{m0nT0ATGeuUbF^lJjTQhbZ*5`m{A&PWZ zhiZJ^0^$%nlVK*W3E&jN1OZ7P9b&2Z|Fid}^q;-|=>a)##+%~uneR5jMUI)?;W|OW zTBzcK4d`z!G&tdVQE|_uj{j#Qfy+DiePr3i|3~KgzwTt>?EOEFQrgFVs-ap}e2IYb z5T>@UE4hq(TBnG$5~(9lZ&MYIs8M~!OuFlV1z3Bhro2wdRpeeRLr9B{`^YmD~0seTt zf=PBRE(DlOO$u9}YcQZ%xVjjCCS)og9;(kqgwcPcw5Z|#SsV&Q>y8p&2mf~_uF3zW z?qs;<|Bq2x@&715NeUp3xdqt@X22&=260qG-wqDmrf`W)Ez+P^R6OXl5D4t&YEi&` zY7ein{ zhLf88{{bcuj+S?i0N$nlIisPe|4sMrzdTN9vHySI>jA(y*<|9pI*PX{^{$B z*Ux{tdhzDn#rca}f!{*oQWuTp>s{cFC^(1lS->t6vO8AASAUacWNrP-fLp%?Tgv== z>vxIzc|zhk+?MYWx#e?#y}E*$h7$Rk1ZP`mmufo<27#r=Uv&VGrwC|6LO?rU>3BmT zbPzTw@*%f%Ut14fHE!1epV3!+5!7O=>|*|GSAuUZh1Y!nwY-)h4U`ekWbxdKi;bsW z0ddfwc8j@?WSv0TS0&~F!eG>UF(|NDPSqv&Q7?PWrK-lj( zZ!meFI$2LkKUU-qt>Gx3NB3K=fYZ0`_NS$8w8R91pqE1_;rRoq#kKmM;@-W&>p1Lq z7PQO$ciqzaFYaWo|2;}!oaQVH$p?^PFYBLQ{J2hbIs(gN(dj=E|G`Y@F>Zrdc`Fj}5%XjC!N=A@p7m9EFGWWH@ z`}T4NxD`pWOPH;CI-x1bE>W_^JiR2}M;1VO)!weQC0$2SP>ZA>(^|is6#N5n#s8jC z&;JvAi$k0Oc=cNSkBK2X&Bw-2G z=gKQ<_rI`E@1pyC(P00NCMEyhaJoPLd6ZJC|K*p!?oaoVA)&kUzLIlfht78;;MHnq zuLumjh9Qi6l-M-C|1u4ye*bUcI7Dj{WiWi1kWJj}6kx~x9}dm;ABL_s9qsr3V-&vs z3JVdPE05EQm>(S>Co*<+qY%BDSwkx$LtUsC4CfSD4{x&(gT4GN0mKLJD_MV zF$t~=#iwFasyp^oS15+lQ7nZ7{k&nFTIN$x0i;$dGT<| zp|nORE-yIHtJ?Ak9sBV7&!yDL|N9C5+#Ubvx#jq;z5V|vg)x}#P_jfUu0JF`4Ec+V zd1lop;LkX+l_I_gRiRb`xRt5eaAq;{1xW4okAVCxKm804iqA>Bt!+gGaYd77WQ~>7 z#=K=ukEnmTro9h}*6U50u@U+H7A2hD8dRz1G*GI|@lGbH&#BQc9ok~#AD1Q8?|(nL ztL^_q6aU}P-2cyzKxMjR$mrX(57@IOHn@?3##$D^w$}9R}3k8Sty%%5{*^rdL{1TufzP z16WT?9o8D_s%Qjy3N%fx&@sZ{R&VxG;d zFY>Cl-t{a|dfk5KfLm_$u%NSkmn+cQZSWAzYxg&&z=F!Yt3gkuy06^DA)L3`#CIqS z_P@wF-BI{Ax&LL}{~vnZXrKSfbzG7JV2%_w}^cu>={P^`gjDM;tZ{; zQoYOSEX{j{)_IN>`Qd4q$PzzM@lhC6%7Vc~EKo~)L}eokM7ECkV?_p{62ZC_!P?od zR?$bt%c>eEC=QDuSLyuy+c5jmy)@_l9hJW(_TR+J|2rIx_xZmbrIh)hbasWFN#xk@f+M>qiL*-ppl|oIC)L4AI!YJ5#g}PV(HeJbW+*2*~ ze}|pV%g+7pd8PP&Z-4&tD5YZmn>)Ylo;Qs=94+g2W<4KZ^k}Cnk$493S)Lh);_Uy4 zWtZaM)GPn_)h~maFfhOVs;0AJKYdm4{TKbs>0qM=Z>O5>zrMMTc5 z+2jQs4aNrhU%7(O%?8|M|CQc<8IFeT-u`=(qU?YBJacwX{k_ATpE?)t4xV7U4rJ30 zs%hS>C^T^**T8PAHkjsNiTWxVv4#M}Q`+(WZZ_a<|DVbKy?y?V zM=I6)-?RZspE_{;PPX73`29WEgw+u5ZWk(WD{RARtgY-r9l@TT?@Lu_$^Sd~0Cw^J za{m9J5rWMc3}CYD!X?8QrgfU(2Sn>N=<5D1TFK)olNF zKl}ZnQT`8e|GVCFZ~s3^(f5DJ?w3Ec*!7lBzZ}&4#`x)A8*cQbQGGh_hC#YjrZ_|S zS!yMX_J5My;qj&{~x7j`(Mnn-1|xW{XT8qCt2&W9Q{G(U5-79VYlr# z6nKWTngCYxtBh%=qiSwZ4jWik!(Hapu#J6{4}fA}4IB9$jr6e`RLSF*!?$}GSsjD3 zu{ZDPeT#cXt- zc=wk-dD&_IkIno48=f^4RWvA~TjsS|XWE&G4@pqqS|30+Cgu{{3jS1P3q-RXK9}C3uM8-s;$9Bw7t-vNWQ z?|<5n`{4jP_W#K7MrQsW$KA(&KT2Wy{|fme3g{MBm;l{f^3`v?C``Vx~Fp(KLgMUXzPUw~W1j@5PxT_o zyMmxkBC7T!=;sYiSiZOFTtzSlNR$p}Yu>m@{j8vswNsi2-cTrf{VF2gUA}HY93Ace zr;LuCN$PDJ@w6xXCKTSrQ8Uuwgsd}&!w!Qdo3znMNyG;N=>|yH|M(KSU@Q*_8rq{vTD))+jm-Vk;n-FL}D37)0WDa33& zCCpfXzE3t$4Mkc8vD|52HETTgPq{A71{9z;B-=HjxHMa@f=0D&i7wtQ&q!X26QVVV zQq%-xQS~ku(+p;4u?ZQVok+FXwP-a+3(63lNt63E-G5Xc!vQeqdG@FDuxF$8(6p(w z8_WGBizt~x-?nt>+O1;PrCDxZw{MzXPkHxD0Q~T(i8~{7?{~GfM2Sh7Q4#lZ2x6F~ zA4n3U+-gBVNgc0LxwvZwvlC_sYk;GFBR?ZaJ@NzvIK4Yw2Bsm(HB2xJ=66Rb05wHR zq9wT(v>Z@Fw0?;Fn-$rl=!bMp+|hJe^8fAS z|Kk*P{!8ba`SICn1R3F{v~pwA2LWkjuxZc@N6Rp@3dv$Dc zbF`%!GK~>iu2Xhte}@j}C;iPwt%wn8j7m=`(iBxy`k}UMZR7L1IMr!hO8h@2L3;dC z?t8iq39!@tGv9x6C*Ej({`)9}o&Q{~aGJYzS=bLX=2B+M&BG01e!cwk=Q&#&S18NR zMza;n089|@69h999DKmp3P%-Z$hGIbx^J}K?;pSzzoR^hM5h48ae92~9^Bw4I4y`c zSfdOEFoUND07P(&PAz+!eoF_7O&HRDY5sZ^?evTX+B~zzgMZ3j$fEM`5In2mBqI9z zDfk2y30eOguERs&*5uz#8OkgU*<1DWI~agN)my;Wf_K{8n_nsxAkdqL3*vr_8myhMB+O zVg0A|zHmNY1KIqQm|E3mI^h`P-Vqp-6-kRa8ub{fMtDF6L&tieJKx!|uv}NlD}vqg zV1QL(+VZul0qZtoCnilM`LC2z3GFE_(Jt3g4b{pjib+s0!wSgXnql8_vC04Zxa%Gi zfF1JRn@lIB{2!0^@4q}s=_3F0wQ=tXfPNsmLj%Yw?^S@k3a~>3NKhPNAEx$}{JR={ zoh2|s%PoIUjE`gQ4dN@j@&r3?p$3_-7b7F2z$<_pmcEcM#L@C?9PrP|X}JA_J#Ws= z*Xb@*b|^n?&ruv!EGzkq3rPxujnY%SI~B589Y2+DBgjCE0s6VFr_V?N2I+={x^E(Q z3vmeNVG$6ZAvmqjACyJ~{x$sgw)mY-evPW2L*&$`u&(GY4WLxq2q;E-uZ-@M(a%R2 zwdj9J7|`7nz+LgbW7j31YR%2ZJ#IWS7wps1!u ziQXFogC7!{q3>B*K0d-fZ-{CXQeK*pP2%ea67=&1rJ42{HBLzamugoS_7wj|!#kVJ zUScagOGq>aJ@7-wo>Sma4|-lfHVwUHNair?fv2VT^xwU2xTOD!Kymi$C%<;`(C`1d z!=V}fGj&G$`+tv8nEuZ%-PEmsri=IVAp_a)%fzwrRsaUluHE#N@jFa zU)K`ckv2GDPi1nzDvKpp7e;7{s`z&_;zl!1G-2ZUhkypC^G1|ZX{wU=^ z`9Hf;cfXu}6+@NhuSkObL!u0Zmn1mbWQ1LiOH2ts*RqB8uVScheG0w{zo+f$IDL+# zF^@0kdLZu3CZ|Btn4|M{dtUy>D0coY17ROL{$uD(O7Z{u_>V^_jKit?|3bV)Sj+wE zZUmIBH`fUP@H-F008t4w=Ku1kMB96@1<#l3*TVP3XNC7mI92>#xx`p`xXqZn22x}6 z!b8hAccsH0&j*_fhk5k5NW9VmPY)04q=ep!osy#8O;qGlspD%bGK%&LsQIdf}@C-baOM^RZ2KeJSUA5x=Vv+Js83Ro$Yxx8Jbld;aZ4dOa zkPiTNpY=;1lr^_Y)K}pwp=4O=Anv5dh-@g$b}`&l3#X3q-KHZ-vTsQkprohZsT?+2 zk^>4NPfqf*bG*e~C#fxV`7bg>T(V3NchUlO*?*pE#(z$yqrLoplv1+)v}wNw8_-BN zQl|`PRhudVI=zZopnouw1ATE@R0OS(qA2K)yO@i5PwNcF3K|-lkX7_QkTI#D>Q$m{ ztSuNTW^ZafWU=%A_||_U|KD&}_Ww=x@n4TpO8oy)9)D)w9XoRd?9llhBmv6=SIz(9 zTYo3Nmqxul>?2My94%S@P41;W zud0X!N?gB^k(cT>X5(c{CKKl-K((RQhKuV*-zB__IXE9$EwxyG&%{5=V(0(K9Nv=v z*vrWrCUkvdk_M}C?@vn-A6F|BMIk61tTvIB##>R|B;{(YmW5Vw? z+kbG0RmcB%mahjt|96Mx`=9P)ypR8VoKnI6`2%D3Apk^b^g07TRBFK~Ie8WDh?aOI zU%ysn$v$h`vUrcQExVL$cbWwn+HRJC>{wIdK=0{;@mw+4I=U8ISGNDJV7s49*~$OK zYaDkG13S-uC#CnFU3Y)}`zWQv|HZVQ@oB$5F_6FN(m)zWN}K-RFOOl=1{z!Yo5clv4i0R{;31LJ^p6a2Vid31aBqz$Hot2TuUY z6q0UY{)BwGLSYD&A(`_l@Hko?fdqvx!?y^;Fk30V!zeg-0wT0zcgn%DI6({i5e3{W z^go9K@O>0+0f|^kN)m`s0zw?2!NK79)lXL$NzlO)aL)6IygR=F0Z!6`!4hZ3?7y7+ zgTeei$uaw{{9&~`rvH(Drnk{?0cZ~Wn@tQBI7I2emxJ^}eDLL94sQ;=9Asx^B`G55bWcK7@LG0GEgzM{%hNS1$@Cx1OSIQR>{$@Eo^FOB|e z;11kT@2`J3hJQVH^5hBlQTy<(XR9oW)6?VQCC*lxIhE4KS+YS)LrjlZ&K;kuW0;_0 zwWT*03^YiG;Mvd_4*QPRA5IPrC@xAJ-LVH>itHjFApQ+X0DlN11QCh)Yxr-Hi0a?q zkF;`@Y$-ci;E$je;DGrn7dQ$4`WPcWLjmaZdjLlP_F+a6@a)GY!{Kz?s4qB8Hz+-( z^$!mZYy;-m2F&X`U_)cTJaxcE?FY<4`OrrBuruYZLHV$faxr&jK_Fk!xmd#`)0;(Z z{w-XGVy>DIQ_R({X0BXYkKN8ac8ngobv@3uF#$Nr-w#SqOhh-EQBZW#t?8y?>!#DS zn=_-A&Ye~y@A7!ouFK=u;bHgHKC_HTGa@R6%(JTD2xq+a!%4f| z4=45sKe6=fq-)~+wB#1RkALYOE&5~hrPMV2A ziOo524h^23pf$Ng;5|v+b2FMqqZTI14Nu8T`!#8~cqcWB*QT*`SJ?D)+9mT^6ka*9>~`&w2N~c3O?&&FtN`>2V#^ILDlBr?&g^%{pe@=@@4IO3ZqnLM15z0Z!pOMENkK zE0~}F;8+YpGyYNxgJ&BC$1)5~w_!LLxKo{HJNh_y#y*jOJv zNfP8|bWw2j09GW;OxD5rJ!z(J<^7(FYWiKpA^3-m{hpNO+EM#GD)GvY_&1fErF(&= z%4VNAFQsN6RZSp{kXQ$kRwfRuZyk?`Z5>QHuY-xP4kr3K7@Fg8mZo%TU;hKZ{D_pf zc6evKmXq(C3eH|)Eu9UZ*S z(^mQ~tzXk;ix3-k7Gh(Av5hq$=5!NcCzDo6FRfqGXAAQhcV=E=gL#cL=GD#4aZe_# zG+bK0sl&rP8MoXw8rcNTsI%Z18G>h| z2p+fZxvl#wK4fso1@FnQQ$yqDG2{ayyxlfb2{fBOfoY&w6sc zt0SI`C3~G&vS+YlPhrWfV)(RMj4h4dX^rvg*;umInI(G$OZGIDJZ#UBS)a%44BYA1 zZs2-0Htcm~!=Ay0J&g^!vu=GJwe0h#uFn=m>vd+dp2286jnQ`P^RS(8nGR>>$qG~B zzyb;1dy29QM@uC_d_fZVE7-)~?bX*HKtq#Fx z{h9@1;p$#zu0AYn5|yjFm0bPh+Y2^ddMY*6*>5L*J8!z7vFV2TrYntMoRAnL;g&A=O$^Y-EP;KPEc4)8(dm{8$FVP* zp>4AaJ8zbuu~~-tW*Hg`ARsw;eUIh(j{FT}g^l8MVVdbS6dDP#q<3$L;F;o1Cln(cqbakE`&{8$U_Tv-F=)qrCsRB7b!^J5 z(^bhtVt4?RJ>KJ0x(Zs6L&1o!>U5T>jv+)GO{#Wu7f#y6@6h@+eYQxD&aoS_!EkEySx68nKKjF1mEe>DlBx*s z2qY*Xw{#pB^bF5KbObO9K$kC3@{t&}WNbq#W20nOjs*SCc_cJhN+GEu(aivvxGe>k zYZYLWKwFUc%90zf}>?(@*-v#0j? zq{0D{KLu*PGU^W=KMt_Hu{q1&zf$B$mC~~`N z+%kM;Y!Ba|#M{QBqoyz$3>{-UTy;FUX$s?Zw=!t`nm$)+3iLzQKD#rc&#I>2cJthi z-F6z`*tKeelt4?L8=lWq_4!2avpcKovslPdF=7Fk0bZ~$%?$iInEPOpgnv%iu9uh9 zaP)7c99g?lbq$GsxYJ#OsnMkqwM*8+h|+;Do4%H!e(cn+Y1gLGxt&!y*HGzPRi$%G zHk~C~uwij_5Tq#P=~Z&=cA1b(%qB2EF^U2d`CE`B5J%Py+4MEHv%cmU`kFhb?2vu( z=&X%S+HJbgN!_NiDNzkI->Oa;N|dWAQTFg6qm$EiZtKz1>b9O$-{R&U?z9!nUSpP#?s)V6d1j7I!k8;a6Rf~w)e z1OYuK#_hqEzz-3OHZjk+gxSXBNre1Og0n4%seuZ?9B1-w2JbJsij*aIxkQN!z?b(4 zZBx+hP7Zxj;P6N%eJ4ds0(57*A zRyYlTUZ|UH-?Msu?t{x(I%reQI_qYJYBp9nI5f{aVE6%UQxRbasU{8ANL*$US9r(* z_$bNxGV3>q1OXm{v5vfuHTSx&-cT@S)$1H9u++^tI`ovCXpZ`dTuksg*I=ZvA$?^lRMtoz_pE3`J+lR*gq5o|js|ClJu9W=EpfSf(4_IUXKT8~{5Z*{288Oq$td{|oUYalK8k2RCJ;u<~k`hrai&MDM9@1^UtG$lP|O4`WzUjN=krC|dfjwdXcwK%QRov;r(b6`=)l$B5QVS!e#aNT_%4uq@#ixX^ zPm#U|t>-8KF-fy!g3_NukPwoA7^dk5k_5IsR15OXNh*vS6=O}1H$8G2PTOfJ!>LtM zv8ANwoRPvvNHNv~c||UPD{dKY^NU3RibJxcrt^`eQwvp_9iE+&C_^84sLt@D9a9*d z)G&o=q2D=Gg^{UZtO@;!!C*J#f&gcjL@)#}#4t?}m;20xkS85lX=B63p`B0|o>=|1 zwj2|kQ%sD^ad0ZfLGD}}WeEv3zVMr%%XjB|`srWWZ!h(MQ3ryj^W($OlKa^&h}-T{ zcfL;T8L>>G9piBp1akU?+ky6zXT*F(VDL2zVdSF(oY8R+-EXG?4(*;&&lcF^bq;Lu zjKC&O4Qz7zPD6j;aMI2pI-FP?qMj|>$?F*I#9B^`PM)ZpYQBKW^2y^cLJuXy|Q)2lB*euV8&GOXPth%8#wv^X$J$ZHOsanhR?i!or7#$s{9W@iuZ&H+d zZmG0X&y~2g&I1b-?UzXpC6tgv;OhMB)eAmCEw9@S?bmI+>L)e$htA7jXpD}hj7~+& z|0RF$r~kqaahxI$!z2U4BLD*!v$F}7){)xo^bcP?tir~^ownO=?zAR`$!&R1;PQil zDi1xMtpH^rJuQhqn!yY$Her~e%sLy@3cuI!nGn{}HD+U|&W3pweNN&nz#o}|L@4ru z(m7~GfWN|Fz*Fj5{K%dycFOA*JH=X>8_%uojL^-fKw~q}|Hn61a#L~nR_YYhR{5-n zbWYid9iyaRiEmNFkCNP$$0)A-7{#+iQF$GssA$WXF+7esJX2$?|L;wjfjA+zI6&Y7 zOxX5fo%dI35`YE7{5TD6G7_U?jnkA#e>M{1b{360wpuivC4kH88o=cZ3z;1Qi?6Qz;;U!zgnC^)p+-6_Z=foS_Uk+Lq)`+w`0i7mi}|s9*Sklu+=%imXTk}8>p%pyNzE>hD|N% ztQ8qbk=Kk2n?BH89ni@bHY39-$-9za%JF7o*aT)rc{wyE#c4u@El*MBG(|?1qM<%1 zBP$uzlhQeHkdZfNs85QWjOt10p039n4W|hi)z6olbbY?$WMC!@(nrG^7Db@SM>1@o*> zc+F_B z@saLqL?>g|jErhY(>b+}ky*$oBuzaTHdc0*D_E|%N}S!aOex7#tCfG~Le12WdmNHN zifcahx`sChu&900S&^bFWtTho9c}U<-Tr|rvHItKOX1}^1+h&DI;?%%u1*CJk!u1}bO4+sP#`g6t(44!RKb_mEO17snd z)VFr2iW5vbD>YMHshOHeO{qt;eTXs?ZskK{n`o1wAnzUX-{(6HMeMOEt;T{RbUbW5 ztWuVyU6rM&uAoc}J*m_^(I*mGV$0PR*LXKXz2nqRa9r&lpIY>tX;*z`s_Q#bL*J>G zG=5NV8%Jj3j*Z?b#c0}9F`DX%(bQ0kEa^#ED+?K&JYclpNGD@lH*A9Uz$hXayDsz! zrx{=2?D`4+lW$|njpBs(C{0BkZShcBpx!~4wR??xW_yf$YS9^|U3JE(t}{*zow1>F zaMmt7V8){Z^sLM{s=X}DPvZGtwu{G@@o)@=?P47#fTiT{@Bz`67mpUBxprI@|Es)ROL6i9URqPU4u0w0NnMH!+5e zY!a$^YVU)v_HWPv^2>H#ilc3j9y5enD*ZDe1!kUXh;Or$Dh4SIkWV|o=c844$jtVT z)zo6+OuO1RQ{Bdy8a7UOFj>ZNDoCj&1X)<+CCpZNo)#`&7dS*L&>6viT^7%!GaHO{ zoM7x#=Eg`i(OLSML~jUTb5ZahGu$tSW}DDH|=WmO^nBIriR5= zWGhye=^K=0$;Quk(hIiO+1odiS1JLr#ZVPXIlxltwY$$Xvt8$!*k06`bbe81!rqrq zHvdF58s@meVFxEM1)K5VWJ&xm(XKo%W^EJtnPW&5DVVa(Yo&G z_KaiA*(v&%p)@N(moSg`owdt6GP5Nf5d>O$-F?DmW~VI^u4f3?#NsA744HdDi{}#0 zq_7+?(9bq747YTV@Rz}6?JoSy*nPh*_T_g`_)0o{^WyCJcP|F(;3050j^j*5BldsC zam@d_V{iC{JM!F-Hylq#?iY?bbcW6szf8JF3)-${7_F2pqnDhv+} zzS%@P4lu;?1SVUi$y_HJbS@(3c2&5-?3xV-33CWhC8+qyUv;PASNy#oOcQ}1#cLeG z1jI1QP!b)1Y=zSt#|M~#`38qfG$)8%>R3Y@WhjCaolnvX%u)6Mp@{2U96a+@QPoTc z{Vdr6=&vxkr6ev13@MHL;ri!q{yw0*6TIOMN>OH+9vu8_Ge=2;GL)Wz_kaD$We-31 zo%gKjb47X_9DD+AP)t&skz@-#0T!(H3A{rIwFbbagHL^>eA50$|HU9)TNJLrD={qmcId$mXK!9#yncBKuD`vw0_WeJy}1S#SK#&c*WkMsXRoip z_4nZG7vSRc)%Dq{S1+D}=NE5YoL|5CJHvRz@53G(^uZ;&qX+yI@^6?S@Z--L?BDe1 z7RkVJg9DTnqM+da1ClI{*D%_^@c92>Ev{&bKMkFitj)3G_RoR7 z6HskLS%f|u`zu0Hba>G3_Ycm(5WK<5RhClK5+%1N0DW++FL4nh{5z3=g8#2jxb6$r z!MzKCTK?}kBX>MC_`m15qdotBj6!)Bk29v6rT>mCfrA5OJ>wL_30}hlhg-&k1ImP% zLb+w@{`J|Fh)1T}eQ@wC`G9Uwas)mgaeJ26g<&Z8e+tqJMgdF$j+J8?fQyK;{rsgb z3IVT~J*GbXB}1e6f(1BY9D$!bNT$eGCfn1r2h4{*-xhL-HekeLB#$gkVT6h-3CvSU zme}V~L5|EP@Ha%c`}H=a++B_y{TKJ5tGvF<;g z-h)rz3S}UF+7w*lHTn;U5QVImuEpD@;FECGQXs$l${?^;Qnvs`+e&LU1uK-W`+wBf zr5}?mz!_Sn1MmX+t7;QDU6DvT0_zKCoG9i}@qLu0V1YwKS8~>Xz;8&x-IzF9kfU7eX5dG< zIs@VhVM}Ej@za4~sxzrYHc6i`ZXvpaRVXO$ivc@+q7ZyoJt_nCbl@it;*>3*AA9{i z++?fXQ7itWuNM#@?HnvA_gaAyIY`GT$#?m?BE~3*ndCL{WJPi=~Yt@w8xI zMR8lT&scJREkMyNPDsSK)GbUf#hHp12n%#<&so90;uDb10~>g%b`$``lqPl$9$TEe^2SARJJ5b<%2JDb)_Zu?y~2RLiy67WVzKHSmMmKzrT+;C*g8{ zs{DMvK=2Z0ASv|b`IaS95Q)Jcl|9Ute0B9L-8FX11AgV7b7zI2GH&_?eqazJw1$wr zhAEniD&X-CeH77_feCs5epsOh%t^LVCJypfYmeACCxReK2v3d{C&)+CmOvKPrIU8W z&veVAz4(Yzwq3-jub6oHi#Y<<(ozEGW6X~EFtf1ch;PIw%Xt<8?{V-`lEU{j%yodH zWrEVQ!Cr(B5S0~Qxye^;XvFpP3N%!aSFz-&0^1|`K$06AEuZ5=ALQenDqJZ{Q4=uc z#^NKyo+L4fP#|t9sSGV+n$^VuL?q+4w)m=mam*V_4M*(fHQ7X23|DfOGQ&yX1Ux$7 zJ6cQaO@y*^MM!B=b`W|ws6ygp3E9wv&3+aS`R1uzaJFLG_mTt+rC|l#t$2D);Vy=* zK<~!Rb4(^LS0UdMC(m)UnKC9pPYPJv&)<`n4N)?ALsTyrYqds=fju9j;qZ`X3o4cMYE z>85KfhS@6R3uMVIcv3W+*;xSH;0lpQLA`zRiUNAYY7|Xx$$#L<25RYGx!^T$@J2~eXi8SHq5_os{dSLI)AU}rJ1-C{# zCE|w__E&6?$+bmWN)vZ320`@Q5f@(O-({N+`R}*j{0ec=X{R_&y5d zlVCDW9l$9-5!ozPCLw0DNG)@ua!VptTtu?RC0IJDth8lh*kMVD0eA;P9LSZ< zY%1C42*?>Bi4t?okS-QD!r8WB7d%G`98v2`R`E%cvIo&JkZhPU=f@utwD?zXaB!3F z!2u?WLm&Gj@==_n$Em+U!6wAfvX5@LTkV*dv&*O-lb|1w03AP(xcV>(`Y_6HU;ZMP zbQt3ZU9hESSzWwJ?cyqc4B|}~UXl>|hHZSYculfPZt9iB{EVaEJAy(0u>fH}Pt;Q{ z1^RO3Cv=3=(-qdN9+e3`gG(LmEz6ZO{NHp1hvUiVaE1bJbmBk+k!o}poU7%nb zj28aT9gp1!oG)B|;M4=2HiKl6wFbbR8~Q^T-RimG(X?{86(P%*}gH(Ep5 znbLqOb_D~n$w=zMkoP2?*uTgn{8!5Af&f79ElKcyXxosQP~c276mSYNwRVxHZXo+Y zF@SYjEUI~1y<$u>Emn;JyaD1WWaTw98Vm=HTtX*9Gz?ChAsWx-!^vzsa%Pk9a0a1s zf=;|Sng>J283k}M87&Z+!TH3Wxh@(l#`K?~lLl1DbtEm3+NC5aJxdRFET|%q(6R*1 zr50Lb-d8*>OrfPRbU>G#;_R0-g)Yk_>wH`2yvmWm4cg|%_d*!`nS=PVplP7fD%7Vz z5u09hd~v3HrS@Z>csJ!60+nC`n86BoMJrZ;1@1-@eezCo+TsznPZ!%Immp5f?18gJcX9PWlEK`iE+c7p08pTK*U;&{DbiHOMp1SrMS z%8W^nmK)#V6qD#%oKjBv3a^=qUI6l#Yn;QsVi$yXZLs3iLCEVHFbRuKdCP(+2Qf@C z%w>tfUn3mKflxXL-l$E1(zFgkx=EJE2E7ViURuOp&b zWQLYo8(e+qf=#?kV1Pj0>>HAR=Q-~5i0a-rkj4nreBa0i$es!5aL8P18kOAJa3v<; z3RMF7K6;Kql%aC-0`vepXG@fV0C*WOTXlug(w?hO>+@dpESs2>e2EGcDY%*$8N{jL3 z+Y7p_^(Y8R4v(nSnZu9&(&Vv{aG2Gr63TA{U1FMHq_P!?9EsHVne3hZ$UpW@dn{XP@2JNX zU+=W%_I~}>Q7=U>@mDC#=S3bDg6FTVMlkceM-QQRjf$~LiBy+M>#XuM*tK9><883DcXaFb>z`35Ix)&qFK{5h}l!w z6r3G`>wlbrx7X+3>qBsPc6If`^HcEWUw#3DH{$657LWPsuYU&TMFmz+bo)(0*5WS! z1_L=4?Dvv*mmja=u%aLGD+?GB?W^m2%uo`+@FL1kvVcA++m~-sBqE})xRVUCjD_Z~ z0|pjJ!S_9uKn603lkV*gFhQq)g+k4@F;8}WbCTwZK+=)GvnunJnWFRqE*OtgMTrq z=3Cw@YPBW^VFZY*B74AJ#?6mk1?dbj-O4Oux@G>Z8HMiTiE3L9A(KJD(31e49N%S3}!xa^pSERoE6Pv=n#d4 z>%1ERX0_`A*EuY-mTH~6q3L|kT1dYD`|C=+5U8n7>=VrV z^Xwsix=Q(r!l~N2f&ec2zQG?+@Es0<5K-=)R+z@QT0o?p4x^kugEeg{npUG|<=@EH zj0tN|CbS4I^j8o^{W(mr&w~q@3QQK9I?+HJrDq953w)z~p)!nd!WjBUa#cD(YnWl5 zMVXy5l{sZPb3WU}xU10Eb5J>up_4h1A zG1b=4p+*R$j%-*o7DhP# zOjZgP(*-7WDN`4!HbRb$ozBaDR0T<0vSZ780bf2|y<{SpvqiSb1FBd@Bm-0!%3C*o z{R+4Pchq;9Ad+!qHi;uO2fp&<)@HTyL=S=+;*_5&x4_D-<~GL4YB$Cz{wR`&*C<>Ne%g>uNS5l~@V&cg$o;UEZb1YUc@D z7uqbS4!dJUONjX8k8OpV`HpIKtTk7Wc|9o*_#rfo_&cxZ5#5^fe<-bUY>{6XtdTMlGjI+k~LyXEhE{15e?KeWMSIC6G z)H@O3nxSNkBfdaM5};)F9TM?aU~RX=^^l^93=c^*(Gh!EfoFlpYaFrbr_qvXOqfo0 zCh@Q($1#U^f&8s+#!CJAzN8lyHRa^eb!eR1$;U`7nzsC`Jgibaw-uEJo21GO;p?7F zwwGYU?F8#yR^6mX3D~3^c>eW3#aMghoIkT_KX6vTbUSU9NUF^> z4StJbX3=g3wi1T&*|O^lrUOqNE>FDa$eX(k^v9Fo{A4ll;5_hx1sskh!`X>HnM_ao z1)9&$bUdE1$$T^%&u9MVWbQf5sFK@XJ44&G`PIsI(-0em>Et&n6wD$*#YU~X_-xWzj^9pg zpa)#V_>LGBOz#bX!4C<}(D#wg9iL}K&D22cK{-FD`!j|-~$B4w;R3hPt+>7jKj>Vu)E>8S@qUA{Zdt5t*S zz{u6vWcs=dw76t=9zwjXGCwaC%-#P1Mj~emOOO`<*%0`&?zs7)xq4 zo4v&OwIawThAeXaAv=?xpEoGY@*Y)kEE`t!;ms;noxsH_=*cE?*cS_S+C~>b|NRjN zwh>%opYyjAlSn)oC}WSc2Kifr?~k-N_$F58`o6fMS4j5)tTC)wU^ z3LcudvPIJuliXxs@Kt766$-RJ#DY-!^N2Gs-~cF8>qRNPy!dRq6ZmL-Hn3e3W~n8Y z6=N2GGRM{ncHfdTV@#E2M<6&-avSF{kd)qI3S~h;b_a{r`d$Ou;;)C<7C-t>?CjtaBW7xW8J7p?bUYSS*r)r?hQ^ zG~2mp*t&$_hVA3`vOn*u2@23{BW{on3#aFPCeB8YZ4v@>dmodaVz4;2ew+Klm6TeR z%VV#SDy}F`B@L#?NNB|pb0jIsE|vG0EO9^VG?;0o>SInk4$fbZ4-tP=hCNhWiHd7p zjTiqFtNw_4pr9{bsDg$E*$@@zKJR^@5d1l84~3iu-z5qzeY4~X2%71D+@I^ zkEmoY*Q#?`VB3L*JMWc4v0r*OXxlsO$t)1Pqh8E2udKIymbd?Sz3t~;fBl!CmA;alG6GoBJWaax zP*r*-{>E?xI4LU-oZ7(}1$a|=P9TF0MU9Mr-gjtCl5MY8ZxCebc#(o|kk|W@vq=`pwwf3FoK;xq=y>t;A6^2`c=qg3c8G2gy6KRYw{W!22uwAH-?=n$g0| z;PgFMAjqDYS<)$B306d2k}cV=vy4)eOps`i!QLk^0$A;w?->rnBG0-WBA2{+m}4`Z-U0vaxEbpW(bGo9K74 z;{~yw>(t-*2KYT*+m1{avJ9Hmz6({3mruIwq!-v82D zq%WzW-8&smPLAYX=PdO&50dJg_P%G&?0tvRHO%}~@2JOK-&5PMAKs=Y5r3->aIt#D zU3WcvSP};$b#hf)<{d~f7}`=cGF9_eb%V;de9^9aYFhxUix?64R`hG;d|(+|B@+>Y zmuAZZr9YPv%1W+xS=6YFaxNe}VxV(@v^LOA>19oxn$4(8W?2YC#!(TjDZ=;pl@{Bw zXmAXc!SsenXTI}U$Y(CtmES{riz1Y!eQFV6_Aiz^d=vLM4f5QK{V|Z$ZIr!|-&y^t zwW`Az$kY7_QqR5bWB3TGbCTxTJS|eo4nK z%|lDr@Udzvw|zu1;l0gI>PvHzFJRjUy+HxQO%`Vk>3&yd4z{#B3xtiXgVDt<6;HKn0XXU6&H+ zJ+Df2r0#7^>OdqfI zMny(ocj_YNB=Cd44JN)bn=cl#(aiUzJ{m1X)A3|JL&$Nx;o>AX8BIKQb~0H&I2?N8 z$q-gt?Jx+E>Si*B)^#hrIzZ&Nc|$^elUVutYa9hKI}L?3@QZJ|O?BPARnb(z6S(dG zwvJlyt=6PJD|-VPLcasp0$zvP5N)Q8h;FXcewYf<~fl#Whj3Nj(JAZ)N-|(lbV}~ zHUqSrxGEO_g_)V>7n4WHrD4vK!({}-B;JIa--!Bo5(*(CnGEC@2jFXw8;<)}Gj?NM zNe4y~8;c84Lb4w5xD0k$$x=74z?xf}Vv%kLM%y_Fwj8;fMdesuJRGpVp^%|6 z*`_h8mv1kg3&+{p@6N9N);k?)Gjl0&FuYAs0xq6|XSBf~K+$dg7A8Pu*9o^8l4^e+ ziwe0+@GTC}61_-$7_wz9d}&8LH32AHKIKfJN4;3K5AtU69QX|(**Ce1sYMFvZ zsec46*`1T;8yJcoMEaimmohE)o3uv*eb3j$taHX+YihJFuGHj8I9iZo%|%{mXKkzJ?);e3USO@LJZBQy?zg z-!(~Po=cX(V>jYyCk|`-W=o=VEe9szdDClQw9I(K;Od4*& zk`bQ~uP_g4ob$wN6soK<09X7nw5kHUr*+>S@&8}Ze_WqmzGu_@{_XS2_XEH!efop2 z`D6GY0uWrEUuszomnbWCDoayK_s`omuh>_%ua!fkx=v*^Ypearx}Nnpv7 zgnmVbC=d)sYG=ju^_>4P7lv(B=;x)?3{c_ZJNRH3N6Q_PY7bR)$Pu<<*GTvcH%@9# z_K^#r+_{w3HKCO6WC}Cw;!=y4P`RWksMm3bo>AsH7tHnWNaM9fAcuEU@LYwAGil$| zdL$~0LA`zFcUkgXZwDuJ}e2u~e0w>}5* zQQnlrLIg7NzR1yj1Rw{3Q^~YYAe?xanix9IcBv59au3$(=nQNYun_ptP(GKb)rzrH zf`<63+9UwUCgLea1tjh18xDa@^I(}kA6=pZv(O0=1?pQQ&inktvrf?Gx1E)beHi0o zD(pi7gMMz|AIBu<-@3<7@=R)n|0>b6MrjI{$QH5uzy$T(8j`HZr5}wb5(;rz@hYy= z?;yVvQPjL^@*)P2y=YfJ6{ph~iAhM7+pCxw#pij#q%wK(H9lL5E>H5wv13EV$4!Fo zrwo3-$l)Xp)U&KIfV=h9y1xFqzOlqJFAtu=5J7(hP=MKMDI5Nli@Y69840I`$E~rH z1=o4n#fmKUmYfI1t1qYOvn=nGhf8o2;9DGQU`S1s8=114rIJiDn7?_SzuH)P?C}Fm z&`b8VW6imT4yxP1M}esNKAMi^!{Km#;*6)rnYnZ5%tvUvm<(sL*-py%DagTD z7=kx=xyn-ThClxjfIbtq*U1K*v;Kn1gwTmR_+no^ufm^>K9(-h!8*8q9FF5SlhKI% z-*FuC|ITPK{lXo2?#LUCrz7_Z#~n^b&KJPBe^Sb2lV&ja!nrdpvva?b((m^VRyaVX z2LSXzM*IW%%fXYv_e?FITZ}#&9Q=hnaj;6z;;Wt%yai7ikYsuM6BPj1Kh6?-yB+vx z+GA$USG^2<%#PXL2@1dJrP($_=?bB&2af-GaPZ^_%l+GD?1KLJ^bluekW z2L}fSpTKJZzQd`;?5Ql-M1g#}hw{tQ{;u+gVJu{@#7MPusri%f9T( Toy-3p00960lqro=0PF++-7&B& literal 0 HcmV?d00001 diff --git a/incubator/microbin/0.0.1/ix_values.yaml b/incubator/microbin/0.0.1/ix_values.yaml new file mode 100644 index 00000000000..c8f21caeba0 --- /dev/null +++ b/incubator/microbin/0.0.1/ix_values.yaml @@ -0,0 +1,35 @@ +image: + repository: tccr.io/truecharts/microbin + tag: v1.1.1@sha256:0af550df5ac615d1c3db0d39b3c91eb440d616e1de15a5a49115e8f81ded9e07 + pullPolicy: IfNotPresent + +microbin: + username: user + password: pass + title: Microbin + editable: true + syntax_highlight: true + hide_logo: false + hide_header: false + hide_footer: false + footer: TrueCharts + no_listing: false + private: true + pure_html: false + read_only: true + wide: true + threads: 1 + +service: + main: + ports: + main: + port: 10302 + +persistence: + data: + enabled: true + mountPath: "/app/pasta_data" + +portal: + enabled: true diff --git a/incubator/microbin/0.0.1/questions.yaml b/incubator/microbin/0.0.1/questions.yaml new file mode 100644 index 00000000000..b9530ec9a9e --- /dev/null +++ b/incubator/microbin/0.0.1/questions.yaml @@ -0,0 +1,2645 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: Controller + description: Configure Workload Deployment + - name: Container Configuration + description: Additional Container Configuration + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Advanced + description: Advanced Configuration + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: global + label: Global Settings + group: Controller + schema: + type: dict + hidden: true + attrs: + - variable: isSCALE + label: Flag this is SCALE + schema: + type: boolean + default: true + hidden: true + - variable: controller + group: Controller + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: Show Advanced Controller Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: Please specify type of workload to deploy + label: (Advanced) Controller Type + schema: + type: string + required: true + enum: + - value: deployment + description: Deployment + - value: statefulset + description: Statefulset + - value: daemonset + description: Daemonset + default: deployment + - variable: replicas + description: Number of desired pod replicas + label: Desired Replicas + schema: + type: int + required: true + default: 1 + - variable: strategy + description: Please specify type of workload to deploy + label: (Advanced) Update Strategy + schema: + type: string + required: true + enum: + - value: Recreate + description: "Recreate: Kill existing pods before creating new ones" + - value: RollingUpdate + description: "RollingUpdate: Create new pods and then kill old ones" + - value: OnDelete + description: "(Legacy) OnDelete: ignore .spec.template changes" + default: Recreate + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Controller Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Controller Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: customextraargs + group: Controller + label: "Extra Args" + description: "Do not click this unless you know what you are doing" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: microbin + group: Container Configuration + label: Microbin Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: Username + description: Require username for HTTP Basic Authentication when visiting the service. + schema: + type: string + default: "" + - variable: password + label: Password + description: Require password for HTTP Basic Authentication when visiting the service. + schema: + type: string + private: true + default: "" + - variable: title + label: Title + description: Replaces the default title in the navigation bar with your own. + schema: + type: string + default: "" + - variable: editable + label: Editable + description: Enables editable pastas. + schema: + type: boolean + default: true + - variable: syntax_highlight + label: Syntax Highlight + description: Enables syntax highlighting support. + schema: + type: boolean + default: true + - variable: hide_logo + label: Hide Logo + description: Hides the MicroBin logo from the navigation bar on every page. + schema: + type: boolean + default: false + - variable: hide_header + label: Hide Header + description: Hides the navigation bar on every page. + schema: + type: boolean + default: false + - variable: hide_footer + label: Hide Footer + description: Hides the footer on every page. + schema: + type: boolean + default: false + show_subquestions_if: false + subquestions: + - variable: footer + label: Footer + description: Replaces the default footer text with your own. + schema: + type: string + default: "" + - variable: no_listing + label: No Listing + description: Disables the /pastalist endpoint, essentially making all pastas private. + schema: + type: boolean + default: false + - variable: private + label: Private + description: Enables private pastas. With the URL to your pasta, it will still be accessible. + schema: + type: boolean + default: true + - variable: pure_html + label: Pure HTML + description: Disables main CSS styling, just uses a few in-line stylings for the layout. + schema: + type: boolean + default: false + - variable: read_only + label: Read Only + description: Disables adding/editing/removing pastas entirely. + schema: + type: boolean + default: false + - variable: wide + label: Wide + description: Changes the maximum width of the UI from 720 pixels to 1080 pixels. + schema: + type: boolean + default: true + - variable: threads + label: Threads + description: Number of workers MicroBin is allowed to have. + schema: + type: int + default: 1 + - variable: TZ + label: Timezone + group: Container Configuration + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + group: Container Configuration + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: expertpodconf + group: Container Configuration + label: Show Expert Configuration + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: tty + label: Enable TTY + description: Determines whether containers in a pod runs with TTY enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: stdin + label: Enable STDIN + description: Determines whether containers in a pod runs with stdin enabled. By default pod has it disabled. + group: Workload Details + schema: + type: boolean + default: false + - variable: termination + group: Container Configuration + label: Termination settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: gracePeriodSeconds + label: Grace Period Seconds + schema: + type: int + default: 10 + - variable: podLabelsList + group: Container Configuration + label: Pod Labels + schema: + type: list + default: [] + items: + - variable: podLabelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: podAnnotationsList + group: Container Configuration + label: Pod Annotations + schema: + type: list + default: [] + items: + - variable: podAnnotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Service + description: The Primary service on which the healthcheck runs, often the webUI + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 10302 + required: true + - variable: advanced + label: Show Advanced Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enabled + label: Enable the Port + schema: + type: boolean + hidden: true + default: true + - variable: protocol + label: Port Type + schema: + type: string + default: HTTP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: nodePort + label: Node Port (Optional) + description: This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: Target Port + description: The internal(!) port on the container the Application runs on + schema: + type: int + default: 10302 + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + - variable: dnsPolicy + group: Networking and Services + label: dnsPolicy + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ClusterFirst + description: ClusterFirst + - value: ClusterFirstWithHostNet + description: ClusterFirstWithHostNet + - value: None + description: None + - variable: dnsConfig + label: DNS Configuration + group: Networking and Services + description: Specify custom DNS configuration which will be applied to the pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: nameservers + label: Name Servers + schema: + default: [] + type: list + items: + - variable: nameserver + label: Name Server + schema: + type: string + - variable: options + label: Options + schema: + default: [] + type: list + items: + - variable: option + label: Option Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: searches + label: Searches + schema: + default: [] + type: list + items: + - variable: search + label: Search Entry + schema: + type: string + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: TCP + enum: + - value: HTTP + description: HTTP + - value: HTTPS + description: HTTPS + - value: TCP + description: TCP + - value: UDP + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + - variable: persistence + label: Integrated Persistent Storage + description: Integrated Persistent Storage + group: Storage and Persistence + schema: + additional_attrs: true + type: dict + attrs: + - variable: data + label: App Data Storage + description: Stores the Application Data. + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simplePVC + enum: + - value: simplePVC + description: PVC (simple) + - value: simpleHP + description: Host Path (simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) hostPath Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) storageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name (Optional) + description: "Not required, please set to config when mounting /config or temp when mounting /tmp" + schema: + type: string + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: simpleHP + enum: + - value: simplePVC + description: PVC (Simple) + - value: simpleHP + description: Host Path (Simple) + - value: emptyDir + description: emptyDir + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: setPermissionsSimple + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "simpleHP"]] + type: boolean + default: false + - variable: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPathSimple + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "simpleHP"]] + type: hostpath + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: hostPathType + label: (Advanced) Host Path Type + schema: + show_if: [["type", "=", "hostPath"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: DirectoryOrCreate + description: DirectoryOrCreate + - value: Directory + description: Directory + - value: FileOrCreate + description: FileOrCreate + - value: File + description: File + - value: Socket + description: Socket + - value: CharDevice + description: CharDevice + - value: BlockDevice + description: BlockDevice + - variable: storageClass + label: (Advanced) StorageClass + description: "Warning: Anything other than SCALE-ZFS or empty will break rollback!" + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: SCALE-ZFS + - variable: accessMode + label: (Advanced) Access Mode + description: Allow or disallow multiple PVC's writhing to the same PV + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: ReadWriteOnce + enum: + - value: ReadWriteOnce + description: ReadWriteOnce + - value: ReadOnlyMany + description: ReadOnlyMany + - value: ReadWriteMany + description: ReadWriteMany + - variable: advanced + label: Show Advanced Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: expert + label: Show Expert Configuration Options + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: enableFixedMiddlewares + description: These middlewares enforce a number of best practices. + label: Enable Default Middlewares + schema: + type: boolean + default: true + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: labelsList + label: Labels + schema: + type: list + default: [] + items: + - variable: labelItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: annotationsList + label: Annotations + schema: + type: list + default: [] + items: + - variable: annotationItem + label: Label + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: service + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: Select TrueNAS SCALE Certificate + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - variable: security + label: Container Security Settings + group: Security and Permissions + schema: + type: dict + additional_attrs: true + attrs: + - variable: editsecurity + label: Change PUID / UMASK values + description: By enabling this you override default set values. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "002" + - variable: advancedSecurity + label: Show Advanced Security Settings + group: Security and Permissions + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: Privileged mode + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: ReadOnly Root Filesystem + schema: + type: boolean + default: true + - variable: allowPrivilegeEscalation + label: Allow Privilege Escalation + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: runAsNonRoot + schema: + type: boolean + default: true + - variable: capabilities + label: Capabilities + schema: + additional_attrs: true + type: dict + attrs: + - variable: drop + label: Drop Capability + schema: + type: list + default: [] + items: + - variable: dropEntry + label: "" + schema: + type: string + - variable: add + label: Add Capability + schema: + type: list + default: [] + items: + - variable: addEntry + label: "" + schema: + type: string + - variable: podSecurityContext + group: Security and Permissions + label: Pod Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: runAsUser + description: The UserID of the user running the application + schema: + type: int + default: 568 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 568 + - variable: fsGroup + label: fsGroup + description: The group that should own ALL storage. + schema: + type: int + default: 568 + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + + - variable: advancedresources + label: Set Custom Resource Limits/Requests (Advanced) + group: Resources and Devices + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: resources + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 10m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 50Mi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: hostPath + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - variable: autoscaling +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: networkPolicy +# group: Advanced +# label: (Advanced) Network Policy +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: policyType +# label: Policy Type +# schema: +# type: string +# default: "" +# enum: +# - value: "" +# description: Default +# - value: ingress +# description: Ingress +# - value: egress +# description: Egress +# - value: ingress-egress +# description: Ingress and Egress +# - variable: egress +# label: Egress +# schema: +# type: list +# default: [] +# items: +# - variable: egressEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: to +# label: To +# schema: +# type: list +# default: [] +# items: +# - variable: toEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: ipBlock +# label: IP Block +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: cidr +# label: CIDR +# schema: +# type: string +# default: "" +# - variable: except +# label: Except +# schema: +# type: list +# default: [] +# items: +# - variable: exceptint +# label: "" +# schema: +# type: string +# - variable: namespaceSelector +# label: Namespace Selector +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: podSelector +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: ports +# label: Ports +# schema: +# type: list +# default: [] +# items: +# - variable: portsEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: port +# label: Port +# schema: +# type: int +# - variable: endPort +# label: End Port +# schema: +# type: int +# - variable: protocol +# label: Protocol +# schema: +# type: string +# default: TCP +# enum: +# - value: TCP +# description: TCP +# - value: UDP +# description: UDP +# - value: SCTP +# description: SCTP +# - variable: ingress +# label: Ingress +# schema: +# type: list +# default: [] +# items: +# - variable: ingressEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: from +# label: From +# schema: +# type: list +# default: [] +# items: +# - variable: fromEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: ipBlock +# label: IP Block +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: cidr +# label: CIDR +# schema: +# type: string +# default: "" +# - variable: except +# label: Except +# schema: +# type: list +# default: [] +# items: +# - variable: exceptint +# label: "" +# schema: +# type: string +# - variable: namespaceSelector +# label: Namespace Selector +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: podSelector +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: matchExpressions +# label: Match Expressions +# schema: +# type: list +# default: [] +# items: +# - variable: expressionEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: key +# label: Key +# schema: +# type: string +# - variable: operator +# label: Operator +# schema: +# type: string +# default: TCP +# enum: +# - value: In +# description: In +# - value: NotIn +# description: NotIn +# - value: Exists +# description: Exists +# - value: DoesNotExist +# description: DoesNotExist +# - variable: values +# label: Values +# schema: +# type: list +# default: [] +# items: +# - variable: value +# label: "" +# schema: +# type: string +# - variable: ports +# label: Ports +# schema: +# type: list +# default: [] +# items: +# - variable: portsEntry +# label: "" +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: port +# label: Port +# schema: +# type: int +# - variable: endPort +# label: End Port +# schema: +# type: int +# - variable: protocol +# label: Protocol +# schema: +# type: string +# default: TCP +# enum: +# - value: TCP +# description: TCP +# - value: UDP +# description: UDP +# - value: SCTP +# description: SCTP + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: git + label: Git Settings + schema: + additional_attrs: true + type: dict + attrs: + - variable: deployKey + description: Raw SSH Private Key + label: Deploy Key + schema: + type: string + - variable: deployKeyBase64 + description: Base64-encoded SSH private key. When both variables are set, the raw SSH key takes precedence + label: Deploy Key Base64 + schema: + type: string + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: nodePort + description: Leave Empty to Disable + label: nodePort DEPRECATED + schema: + type: int + default: 36107 + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: promtail + label: Promtail + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: loki + label: Loki URL + schema: + type: string + required: true + - variable: logs + label: Log Paths + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: path + label: Path + schema: + type: string + required: true + - variable: args + label: Promtail Command Line Arguments + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + required: true + - variable: envList + label: Promtail Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: openvpn + description: OpenVPN + - value: wireguard + description: Wireguard + - value: tailscale + description: Tailscale + - variable: openvpn + label: OpenVPN Settings + schema: + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: Sock5 Server + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: dict + show_if: [["type", "!=", "disabled"]] + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type + schema: + type: string + default: hostPath + hidden: true + - variable: hostPathType + label: hostPathType + schema: + type: string + default: File + hidden: true + - variable: noMount + label: noMount + schema: + type: boolean + default: true + hidden: true + - variable: hostPath + label: Full Path to File + description: "Path to your local VPN config file for example: /mnt/tank/vpn.conf or /mnt/tank/vpn.ovpn" + schema: + type: string + default: "" + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true diff --git a/incubator/microbin/0.0.1/templates/_args.tpl b/incubator/microbin/0.0.1/templates/_args.tpl new file mode 100644 index 00000000000..47a735fc75f --- /dev/null +++ b/incubator/microbin/0.0.1/templates/_args.tpl @@ -0,0 +1,58 @@ +{{- define "microbin.args" -}} +{{ $v := .Values.microbin }} +args: + - --port + - {{ .Values.service.main.ports.main.port | quote }} + {{- if $v.editable }} + - --editable + {{- end }} + {{- if $v.hide_logo }} + - --hide-logo + {{- end }} + {{- if $v.hide_header }} + - --hide-header + {{- end }} + {{- if not $v.hide_footer }} + {{- with $v.footer }} + - --footer-text + - {{ . | quote }} + {{- end }} + {{- else }} + - --hide-footer + {{- end }} + {{- if $v.no_listing }} + - --no-listing + {{- end }} + {{- if $v.syntax_highlight }} + - --highlightsyntax + {{- end }} + {{- if $v.private }} + - --private + {{- end }} + {{- if $v.pure_html }} + - --pure-html + {{- end }} + {{- if $v.read_only }} + - --readonly + {{- end }} + {{- with $v.title }} + - --title + - {{ . | quote }} + {{- end }} + {{- if $v.wide }} + - --wide + {{- end }} + {{- with $v.threads }} + - --threads + - {{ . | quote }} + {{- end }} + {{- if $v.username }} + - --auth-username + - {{ $v.username | quote }} + {{- if $v.password }} + - --auth-password + - {{ $v.password | quote }} + {{- end }} + {{- end }} + +{{- end -}} diff --git a/incubator/microbin/0.0.1/templates/common.yaml b/incubator/microbin/0.0.1/templates/common.yaml new file mode 100644 index 00000000000..c38e984a8be --- /dev/null +++ b/incubator/microbin/0.0.1/templates/common.yaml @@ -0,0 +1,10 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.common.loader.init" . }} + +{{- $newArgs := (include "microbin.args" . | fromYaml) }} +{{- $_ := set .Values "newArgs" $newArgs -}} +{{- $args := concat .Values.args .Values.newArgs.args }} +{{- $_ := set .Values "args" $args -}} + +{{/* Render the templates */}} +{{ include "tc.common.loader.apply" . }} diff --git a/incubator/microbin/0.0.1/values.yaml b/incubator/microbin/0.0.1/values.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/incubator/microbin/item.yaml b/incubator/microbin/item.yaml new file mode 100644 index 00000000000..083fc65bf56 --- /dev/null +++ b/incubator/microbin/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/microbin.png +categories: +- utility +