From 03dee6b2c704d2e17ab1f5fdf3ddf26279349385 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Tue, 26 Dec 2023 18:09:19 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- stable/nextcloud/28.0.1/CHANGELOG.md | 99 + stable/nextcloud/28.0.1/Chart.yaml | 48 + stable/nextcloud/28.0.1/LICENSE | 106 + stable/nextcloud/28.0.1/README.md | 27 + stable/nextcloud/28.0.1/app-changelog.md | 9 + stable/nextcloud/28.0.1/app-readme.md | 8 + .../nextcloud/28.0.1/charts/common-17.1.0.tgz | Bin 0 -> 97068 bytes .../nextcloud/28.0.1/charts/redis-11.0.1.tgz | Bin 0 -> 103176 bytes stable/nextcloud/28.0.1/ix_values.yaml | 516 ++ stable/nextcloud/28.0.1/questions.yaml | 4172 +++++++++++++++++ stable/nextcloud/28.0.1/templates/NOTES.txt | 1 + .../nextcloud/28.0.1/templates/_configmap.tpl | 443 ++ .../nextcloud/28.0.1/templates/_cronjobs.tpl | 34 + .../28.0.1/templates/_ingressInjector.tpl | 23 + .../nextcloud/28.0.1/templates/_initPerms.tpl | 29 + .../28.0.1/templates/_validation.tpl | 42 + .../28.0.1/templates/_waitNextcloud.tpl | 25 + stable/nextcloud/28.0.1/templates/common.yaml | 92 + stable/nextcloud/28.0.1/values.yaml | 0 19 files changed, 5674 insertions(+) create mode 100644 stable/nextcloud/28.0.1/CHANGELOG.md create mode 100644 stable/nextcloud/28.0.1/Chart.yaml create mode 100644 stable/nextcloud/28.0.1/LICENSE create mode 100644 stable/nextcloud/28.0.1/README.md create mode 100644 stable/nextcloud/28.0.1/app-changelog.md create mode 100644 stable/nextcloud/28.0.1/app-readme.md create mode 100644 stable/nextcloud/28.0.1/charts/common-17.1.0.tgz create mode 100644 stable/nextcloud/28.0.1/charts/redis-11.0.1.tgz create mode 100644 stable/nextcloud/28.0.1/ix_values.yaml create mode 100644 stable/nextcloud/28.0.1/questions.yaml create mode 100644 stable/nextcloud/28.0.1/templates/NOTES.txt create mode 100644 stable/nextcloud/28.0.1/templates/_configmap.tpl create mode 100644 stable/nextcloud/28.0.1/templates/_cronjobs.tpl create mode 100644 stable/nextcloud/28.0.1/templates/_ingressInjector.tpl create mode 100644 stable/nextcloud/28.0.1/templates/_initPerms.tpl create mode 100644 stable/nextcloud/28.0.1/templates/_validation.tpl create mode 100644 stable/nextcloud/28.0.1/templates/_waitNextcloud.tpl create mode 100644 stable/nextcloud/28.0.1/templates/common.yaml create mode 100644 stable/nextcloud/28.0.1/values.yaml diff --git a/stable/nextcloud/28.0.1/CHANGELOG.md b/stable/nextcloud/28.0.1/CHANGELOG.md new file mode 100644 index 0000000000..a1aa89bff5 --- /dev/null +++ b/stable/nextcloud/28.0.1/CHANGELOG.md @@ -0,0 +1,99 @@ +**Important:** +*for the complete changelog, please refer to the website* + + + + +## [nextcloud-28.0.1](https://github.com/truecharts/charts/compare/nextcloud-28.0.0...nextcloud-28.0.1) (2023-12-26) + +### Fix + +- fix collabora's ingress ([#16554](https://github.com/truecharts/charts/issues/16554)) + + + + +## [nextcloud-28.0.0](https://github.com/truecharts/charts/compare/nextcloud-27.0.4...nextcloud-28.0.0) (2023-12-26) + +### Chore + +- update helm general major by renovate (major) ([#16547](https://github.com/truecharts/charts/issues/16547)) + - update container image tccr.io/truecharts/nextcloud-fpm to v28.0.1[@060284d](https://github.com/060284d) by renovate ([#16478](https://github.com/truecharts/charts/issues/16478)) + + + + +## [nextcloud-28.0.0](https://github.com/truecharts/charts/compare/nextcloud-27.0.4...nextcloud-28.0.0) (2023-12-26) + +### Chore + +- update helm general major by renovate (major) ([#16547](https://github.com/truecharts/charts/issues/16547)) + - update container image tccr.io/truecharts/nextcloud-fpm to v28.0.1[@060284d](https://github.com/060284d) by renovate ([#16478](https://github.com/truecharts/charts/issues/16478)) + + + + +## [nextcloud-27.0.4](https://github.com/truecharts/charts/compare/nextcloud-27.0.3...nextcloud-27.0.4) (2023-12-26) + +### Chore + +- update container image collabora/code to v23.05.6.4.1[@46534fe](https://github.com/46534fe) by renovate ([#16463](https://github.com/truecharts/charts/issues/16463)) + + + + +## [nextcloud-27.0.3](https://github.com/truecharts/charts/compare/nextcloud-27.0.2...nextcloud-27.0.3) (2023-12-26) + +### Chore + +- update container image nginxinc/nginx-unprivileged to 1.25.3[@f67dc75](https://github.com/f67dc75) by renovate ([#16441](https://github.com/truecharts/charts/issues/16441)) + + + + +## [nextcloud-27.0.2](https://github.com/truecharts/charts/compare/nextcloud-27.0.1...nextcloud-27.0.2) (2023-12-26) + +### Chore + +- update container image tccr.io/truecharts/nextcloud-fpm to v[@9c9d396](https://github.com/9c9d396) by renovate ([#16450](https://github.com/truecharts/charts/issues/16450)) + + + + +## [nextcloud-27.0.1](https://github.com/truecharts/charts/compare/nextcloud-27.0.0...nextcloud-27.0.1) (2023-12-25) + +### Chore + +- mount additional storage to cron containers too ([#16542](https://github.com/truecharts/charts/issues/16542)) + + + + +## [nextcloud-27.0.0](https://github.com/truecharts/charts/compare/nextcloud-26.0.1...nextcloud-27.0.0) (2023-12-25) + +### Chore + +- update helm chart common to 17.1.0 by renovate ([#16532](https://github.com/truecharts/charts/issues/16532)) + + + + +## [nextcloud-26.0.1](https://github.com/truecharts/charts/compare/nextcloud-26.0.0...nextcloud-26.0.1) (2023-12-24) + +### Chore + +- update helm general non-major by renovate ([#16384](https://github.com/truecharts/charts/issues/16384)) + + + + +## [nextcloud-26.0.0](https://github.com/truecharts/charts/compare/nextcloud-25.0.14...nextcloud-26.0.0) (2023-12-24) + +### Chore + +- BREAKING CHANGE remove service settings for SCALE GUI ([#16379](https://github.com/truecharts/charts/issues/16379)) + + ### Docs + +- update installation notes ([#16380](https://github.com/truecharts/charts/issues/16380)) + diff --git a/stable/nextcloud/28.0.1/Chart.yaml b/stable/nextcloud/28.0.1/Chart.yaml new file mode 100644 index 0000000000..84dd6346b3 --- /dev/null +++ b/stable/nextcloud/28.0.1/Chart.yaml @@ -0,0 +1,48 @@ +kubeVersion: ">=1.24.0-0" +apiVersion: v2 +name: nextcloud +version: 28.0.1 +appVersion: 28.0.0 +description: A private cloud server that puts the control and security of your own data back into your hands. +home: https://truecharts.org/charts/stable/nextcloud +icon: https://truecharts.org/img/hotlink-ok/chart-icons/nextcloud.png +deprecated: false +sources: + - https://github.com/nextcloud/docker + - https://github.com/truecharts/charts/tree/master/charts/stable/nextcloud + - https://hub.docker.com/r/collabora/code + - https://github.com/nextcloud/helm +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +keywords: + - nextcloud + - storage + - http + - web + - php +dependencies: + - name: common + version: 17.1.0 + repository: https://library-charts.truecharts.org + condition: "" + alias: "" + tags: [] + import-values: [] + - name: redis + version: 11.0.1 + repository: https://deps.truecharts.org + condition: redis.enabled + alias: "" + tags: [] + import-values: [] +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: cloud + truecharts.org/max_helm_version: "3.13" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +type: application diff --git a/stable/nextcloud/28.0.1/LICENSE b/stable/nextcloud/28.0.1/LICENSE new file mode 100644 index 0000000000..33a8cbb23f --- /dev/null +++ b/stable/nextcloud/28.0.1/LICENSE @@ -0,0 +1,106 @@ +Business Source License 1.1 + +Parameters + +Licensor: The TrueCharts Project, it's owner and it's contributors +Licensed Work: The TrueCharts "Blocky" Helm Chart +Additional Use Grant: You may use the licensed work in production, as long + as it is directly sourced from a TrueCharts provided + official repository, catalog or source. You may also make private + modification to the directly sourced licenced work, + when used in production. + + The following cases are, due to their nature, also + defined as 'production use' and explicitly prohibited: + - Bundling, including or displaying the licensed work + with(in) another work intended for production use, + with the apparent intend of facilitating and/or + promoting production use by third parties in + violation of this license. + +Change Date: 2050-01-01 + +Change License: 3-clause BSD license + +For information about alternative licensing arrangements for the Software, +please contact: legal@truecharts.org + +Notice + +The Business Source License (this document, or the “License”) is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +“Business Source License” is a trademark of MariaDB Corporation Ab. + +----------------------------------------------------------------------------- + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark “Business Source License”, +as long as you comply with the Covenants of Licensor below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the “Business +Source License” name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where “compatible” means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text “None”. + +3. To specify a Change Date. + +4. Not to modify this License in any other way. diff --git a/stable/nextcloud/28.0.1/README.md b/stable/nextcloud/28.0.1/README.md new file mode 100644 index 0000000000..d551b5d959 --- /dev/null +++ b/stable/nextcloud/28.0.1/README.md @@ -0,0 +1,27 @@ +# README + +## General Info + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/nextcloud) + +**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)** + + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/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/stable/nextcloud/28.0.1/app-changelog.md b/stable/nextcloud/28.0.1/app-changelog.md new file mode 100644 index 0000000000..f9d25b5e42 --- /dev/null +++ b/stable/nextcloud/28.0.1/app-changelog.md @@ -0,0 +1,9 @@ + + +## [nextcloud-28.0.1](https://github.com/truecharts/charts/compare/nextcloud-28.0.0...nextcloud-28.0.1) (2023-12-26) + +### Fix + +- fix collabora's ingress ([#16554](https://github.com/truecharts/charts/issues/16554)) + + \ No newline at end of file diff --git a/stable/nextcloud/28.0.1/app-readme.md b/stable/nextcloud/28.0.1/app-readme.md new file mode 100644 index 0000000000..1369f69bf5 --- /dev/null +++ b/stable/nextcloud/28.0.1/app-readme.md @@ -0,0 +1,8 @@ +A private cloud server that puts the control and security of your own data back into your hands. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/nextcloud](https://truecharts.org/charts/stable/nextcloud) + +--- + +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! diff --git a/stable/nextcloud/28.0.1/charts/common-17.1.0.tgz b/stable/nextcloud/28.0.1/charts/common-17.1.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b40bd72708002b5ac7afbc925e06760054cfee21 GIT binary patch literal 97068 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 TF#Z1l00960?4*=b06Gi+L)ca) literal 0 HcmV?d00001 diff --git a/stable/nextcloud/28.0.1/charts/redis-11.0.1.tgz b/stable/nextcloud/28.0.1/charts/redis-11.0.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b808f596effa2d3f9b4aad89621cbfa095dcf948 GIT binary patch literal 103176 zcmV)nK%KuIiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POvHd)qj&I0(<*`V=^FpI^s$BbwA*n#sJ!vE6BJJGPJIq-TD; z^LRiKk}#$S4gty0WU|kGjs1H2N%p~&;6*pzI^D-SXF3)M6sih9p{h_Qq$tGn;Ajd{ z<}BeX`oj}EuIswpc3b@Gx^D4buiI_@!E1Ng%~re9^4foJy=Kev{s7#kK&JT2DTC=B z+y}Q+B-b&4n{|ZXD1ChPZE-{A*l1u^>VQQGBhFSatK1mpbsf3m*F@~Q8de1t+yPnRRN77 zST5PDD9KWY;~@x9g5nUx!LkMu{7KhZG;1(P%+H?FbXql279%>WH9!n!Xb1u_n~}H% zK#CGVF%z^*8B6H!;2^?&3e#mnHJrzx27p1+>p7m|)j~vr6emo)yGT$BD4C}LdIMm% zfN_9AaEq3W1&rnhP)1VZ)TV@^p<67nSNwU9k$E8IdkqJ?g%y?XY;rIqEW+_^gWO6O z4PJxF+D;NrYPV>4N77JmLc(lt+yrX1M%J6Ra~~N-e*fpUp3`hQZo~b)HiI~35XUGL zK+p{0Xb5mTCjV7pl;rhwI!8iM(Ha2rG+ISLO%|7ENe+r8bm<9Z)4A^iWOm?V7Q-3V z|29Gr+@iFhDXOTEHKn=BQiKj>kTR66WOxRO!;!5BaH&B-7G%o=4FOD&2nS+X*0Mq3 zIj-Z?9(VrR@;@TM?c+k1&j$JLwpzWS{BQO;FY^C6p68Hic!DS!0y>4wPIuTF54tWI z1gPKh`-8UMbiIx@2s&=x_gbC{TkWwAJHenefY5{OX1CY%TF7m7+ikz!9dv3F6r&U} z6b?bX={8#pui0pJuD$-S)f~3^PPgCh4!S+B`@idtJXwB+kDUKPY}2Pw0N2ldujzJM z#rfZ9w_oP}b3AwkCumrh>G>rIfMgy;mn6c$atKbx=Y(CRh@zNry$Vj0g7jZ%eh*;K z^8InI*LDZpLD*_``vcVKx?vcMVQ1X!H9M_-(C&@9<8Cl+4!T~i6|~%5KSVAH$IaRu zNpB+pL#dDAnExyA<4YnP0#E#w3+0GGhQ{+~gqV0s8J7%`gpW0O)f9u_1Vj7{<8Sa=MZg|tG`N&V**uXQ#3%k3Pv)sq zuk(ffD@0>BkC>>15b#k%?s8?QgjJ+Lv~wbu0@xJkVzSBK5br1o<|$^&BN8+8nepa~ zpwxmGh8J41VF=s%j{_ga2R^ho@XIft5rg`7d0AKofBPHwU;m3sIW9QG$D^~;o5PRSKfWy$ zHo#Iu6B1MO_PbXWHyNHGGH0McK?{86f&bI`CZ$6V;oMsQ8dD%hm=em0pAzt0wg?nH zayFP3`{pk^2ETy%cN)Js_>Z@setB{Jz7GEOM?L`UfsKMG0rfG&5efk#yhCFYFfgY$ zo&YV$hM>R(L;VnB4cTBnW2P2k{*1BRb0xv@(s3I*j?-EGcy@7ke0u&KTyX>erhw~4 zyyLi-;WLIJ25<~!XhzcI>i*xo53|`P)tlXW@x$Th`s8Z2&Mek>nm)}p_T$B<*ne5) zYJ@JXu5Zpiet36s^<;DO0rTvoiypa)zTMd<do~k=@L7H$vDa%ZyZM3Pp(IO48S1atWe*>)q*JHw_IG)tOzA%WSGA&Ikk{ZpS zwg)a^1jv{Vb&3EHI~Zbir0Ab>oTBgzn8y*K6wE0K0i*z0doN&2QUG~dD7BpYKzJ3M zS`ND*sMl+GYfrpV)^grwAgpH1g1l`nx23wR-oU)d3~TjaL8AE#9Yqk&uF))sAd}Wz z#@I5`XJj6;OUR}}P|v&e>$L=>6jO%cKzUqvpRCu2r8!_!Xz`9%HoB}`ZdtyUqg?go z2NH6l-tBcd@;zo~X1LRk*6oTZpRrBAUth`wRhl(bkX99{#>vc{^+*+qRbsUk*2+?= z3Cs(l&9qjQU(*$v;jgd2M?H*qpOXZ|g+V6`xEYM`7*X~C#&9BSzCwv#+hzIkJmMq$ z|4fUwgY%2)laa$dvqx-W)Bc~^^$Py~w(GWD{QuAKeEHGVh&pHT?zFq?w^*muB194!HfMNN(pNKgtQ93!XZ9FJ~BjHIZx2abe% z0-ugXAjB!HITOqd#D69FHOK!~dLaI*UrZ+l{6G39UBm|&ARh*|^8}1>glO%xL+_H> zYsZJTwbu@tCAHW8S8We`f+;3*3QmttXw6Ad!cFj+gF^%lWVw|5qvkAVKtjY}U;KQ2 zay1e_g?rPC$VFRs)~`KEQvFRN>2|)%%a9;=QUVqiTT+ z4~#%e;>JwWc=gL(yVdP(NerfRj_3ievAUst0`rA;qUT(Fvohcb*o}#Qo+O{IFinMltw60BB=bmfTrvB~g{&hRMa>4EF z?{C#c&+!HiYNU$O4_N%X!s6%Ii=W$mB2M=luTwo}?zNWSnBvKlHC)GaTAczxxfP|g z>zwa7UgeVFJzz=k3QLNYTT;BI2V87kLNxj7uHI-W_Me( zGX}WT3~(Q?I=O|_$<0GmDH+76mDL3S4G+Du27WS2PkcBL1}Y6n*q%y8|6L4gk6_7 zue)lAyT8shD5z|%YxCgg6xVJA9fSL8UW2^iH5fb(6>Zs*?OmM*Ub~k!F4s?&on0^9 z3fIeESB;R(eFW2BiWitNnXlm=l*Cdp=BLk~zn15lnb}m#+*SB{?P}paxWD2z$m@Lr zTkZ26xcsf}>aBfahI(&BSKnXj8|0O~fvxj-PvxoUIbIbN+b$HV*YEr)H|W^Jl$;^k z^pV@&R2DXCcJ*B1X_I5Q)++MX|GI+RdR**opYPNEhXUzzd zzCyRVs|0epD4&(lxD#RoW9nex8p*Rv^ygJo4>XbWpI$vVf>BxR;@3?W#YgBK5^&hN_Gz*;Q*qm79Ojtu=Tavi-c99{` ztJX-iR&6ReIj@oQ+cs%Wr8Rct?sTiawKAbO&>vK<+5P(mXY}*28U5BHa$v2f>i2hC z40(-e>hG_y^z#}^ziCtdRJ)E{$E~7bSFL58ncK{7T=zYjuKRk)9<%d1JFeus#+F;# zo$8&X{{8(;y}UZucWrJymCJ1f8C$DZ6=dX1kww%b{z(n}=rNwhi*mjU!LfL=z%Lr2E_1GtJKqic_hCysRg2D|*5?~?nTqj>(! zrf;8@rA_n~COsaLejn7Aw&I_etX-o>*6vQ{qb_=#wS=ZJa4Ky@E+{;WGKX_nsY7;_ZC!x1*1h70|qY#78e5@zJv*KD;O1 z2HtAW?ix(bYgG5;H^!vjDfQ1x*8QV>diiLdo*nH|jz8Z#GY3`Z-T!P?FCQ7+vx9ba zj|}g~gNdzPb7#@m+#x8p)!TUouGg&2Lb7#`ewlUMe1uNVj?gJbGjB!K*5}gTa#0XwtepJ1f+T#1j(wjV4EFN80SVT;0jRvZ=e5 zlu&NY14VHg|XA!HEz4p zwd1yf2nV-QGN-5^E-l|xOD)#ts%i=5HdL-NxfG?lTF;%_VfPZI52VzqpfuN?_s|Gj zN$JkVO*-xF8cKK7fs6Is3Q9eT((+Ehrje^YFgTG%)jC`EhN0M7*SEW>u7&!83W8mm z;GGX0wjHmv3fo;3(n9rq8QFo2>&^$1i=ETnHPr^MvAT11J;_$6-Yb*ax5+JOsxS;W zN%I+snM`OMOi^&_lg|ef1>yxG07jA87dT83x|R0T7DoaA;H~|DKl8SPYYcs6DLhOk zRQkm9)m;IJSxV$NO`_jQ2Jf2uf!A2g;9a)^3)Q=22KQ_R@2ms1b#!aHxnqhsUSl<# zyDE@{>YXy3-EHVxyBxQ7JyXnUC~ZGQNdyA~{y9ffUdxv7k}~Uh{%CJ|>!dxV8F!7m z+&I5slC0!oyUfQ-OYN;u-^dJs2*a=ab zpX$J3Te*^&oAYxNIM&_4k<{FrH=_W3jm+PuRqn{=)>=M4J9!%?<2v#x^vI@7-p*=d zTRE1Rn*&4gB=*)UD%(xY6(m+EkT!{>HT&IsmWU-;0_T*;Ze;pWcmU%tyYC#NXpB-6 z2Z(}jE>g}<=Mw~Q9Ha2muyu-QqG=b%p4UctbPD(NZ)x+}~o*XCf! zT`n|{tOnl1w9K&iH>h*mUt`8bM{R&jwHK_W0`Y{4fOy?;A)}2EDQ;?*HqL^{^@+m5>fL($2 zMul%3+TAkReH-glPH7x)<%v&Vud~|(_Bwn5XAB4;1mk%ENEFITUPO;kE`-t)1xz#r z=4rHw{_UDyL4T)Ae|IhY8f|N+`9v);-;_?&%hEPqB-*8m;ykwC=4Ly2^)MgjYms&+56?Qe4Y%i(^K_9pyq6%UgwH zw`|Vgm+uyx!EY7)tu^%DTVr#}8k<|t*fw-aa}8P#TVTp)HP?5`78<*(Aq3}Z{tr0f zE&M1J-FZS;ir`G>9;y$w8(3K%w%7NeXECez$s*0wr2T*(6O@IajVZ^?-Mn3w!_5_& zb-(ttNdIFVvGIH$$KR7&{4`nclurCg}`DufdPpZd9d7%D*4-g@(l9LjUu_kyM(U+K=Q8El>(b z94$3KC>>LC%8doSNagBCNOVaVngN(1eg7Z|om%Y&l7g8~A>%PeMX2b|Cvyha6bmfg zfFu&;n()vH_(JRAwykPQA^yu9@+oF06Ihv)a!5MS?yt<|k#QXRwc6{~;%Y=G&M^fs zVPFQav?N2|FGX8MbgLT#h2{t2C6LljIpwB$S)fxgk3!D*6k>`(@XHjXXg42SjP4GC zDIpZ?zkV&%$&utA*X=HC&X9Que);Dd2e%DADHxc{afqn6zcAM$EBP~n@f=16qR@e? zeLw>kp$3jwO7@*v1B?(7B>wXAdS-Kt`6$Ed7}J2HVOBbnFPzEbfPJEu*FXMz%~D?J zB0({L;1|Jwdo!z6Ycv{?T?vV)Vu3bG3UfmYX7m|TrX2;GLg6O}u^%CT#$%E)K*oX? z%HVkH)HL%+Ofgr-X3AOyzl0)m|S)5xByWDWl*DQIsxF2pZrzKOHV*{nsz6@$dJM>px7AMxgJ3d~`Kn)BV4# z(*579w)?XFKg(kWGJ0FNWGe$1J?)USAxSH!)$p1-255La$8$WsXr?G83tsNkFMD3M z)7mkFK~xdj6Ey&SZB~DikDUJjKJX#ML1Q6zl^^x`|IPRRx4Omq|C`>+{lCxhi2lEX zl-`jv9D+JSlqKqC{bk|*-9K{vo8W*)p84|GF#kKvZqfd4wcO6j{C|#T51ht9G!N02 zNlNAk{aQ0)VOX<1M#P8FSL@9kNpB+p!>V`3D2d2&hGO=$W_?ak65#++&#se@aFn3H zeq}abKR_H;et5?htI98j;R4113UdvcuSa5+x6u5B*w>?9#Rl#IrWpDW8iJf;tN{Rk z;Ls4%50eB)Nb^*fX?5{Af>f`)*y6vq?wDnw&A zkJu2@>*`I4{yE1f3WtEJHx|lNo;bfEgndrPy6H^2uHkBTObRN?;fQ%WEzLY!Ue>}Be=joOY3`5KtgV7CS zETxJ-yNF~^hy#|dDTS8CKSqkab9Oy0hXg^gv1()2! zuNWBRr;05*vSjkBl&~l^+Z{du-oblHk92oJx@L-C}nbzuJ~B-;SAH<>qWrqdA@dBltw|J z&+Q%#A%hhnf=jkz$RHRolETRvF~JL{?mJ9`SQnmGUfFp@0g#}SV#-h)pwgOPeJiq+ zqF|n4wmc#+L!T9k3mu+Y3+C}5{YX(-8WfsyrbKzXmgOricX|xSSUQC%N_h*h_I|^R zp=D^RNBp``Zbo*e+uuazd%n!ACsY*KhElO)o*o-t{I5c@ySnF(wCGtgIx>}FWsyq~ z7MBy7t>Xzf9SMpr8(dpNF%wYd2fc3Fb$gvo?G`P$xkZPy2FMz#H8iFT@uJpH zZsywU+((Ag@BjSPbG)wOHr(%PX4^Iuz|aihXejoV|0}->R|6t?W@s}2fO#5a=oc!; z;tB&Pd=+}Ng~mlXzn@FSRn7m$b^@=R|DM{C}W;Q4kUlaG?T2gtnTZf+ATwU=Z_x~geG+q(QpDJVn99Go{yfH? zQ3z%@3?p<0xoM^Xsc}3>5v7WbJ#ZvLdB_5#={!OqNKmQ^i6Tg}@B@eUAp@5~LRfr= zTFvRhjytzDF1AzC>a&uSQ;6e+*qkyt>K>3TI~ctI{!%Nd;0{L-VCfPtVim1Ngxt=P zy5N!-5x|EOh1%7?Uz;k$Q6mQ56yO!bj}orz2WhIaDt{9Z3WXIJ+^? z6-i2bBrK^KkUy@)!p>EIVp-!UObH_ai8yTeO26S_VP&;z*@&tln>mW+T!}ipEa8>8 zKMZ!+D_J>N1jTAsi1(HvJXr+tx8{AJ@a3l?Fv9;rvMB#+2t3z)kBbFA9bM~!i-4^u zc=_q*fEPXt0z@hJz%53;UWlLKmz+BdaXjbe6f<-Y2PMQ*r{EbPbD@>Vj#0lQhzKuG zjHsE6IK~Xa=om$CIYI%6L&}jpr1Vj97Ak>tb77V6rp4a^`aq;Q))}UuX)MjN{XpWf7Pp zj+V8&bdw-XXK;eFri1wpGoj_D+=0IA2cMTg>R@79GIvt~XE&tz7qJ{)rg(uPG(jgcfHM3zlW<&EsL!GOmZBgav*a=* zV;rIUUf$I_<|AE+AMq)G3G{J<8P3*w7=}ae%ir{#UrG|&J%4z1R?|!Q&s;U+gPakG z!W)3q3I^wl%pk)7jH0Ef0K*U*{dn>7`5Q1gx&C;1EdG7Z|NY_O=kt@RH{kg2=;q?n z$<@{A@rkKtqX{m~&;AO8R%#uBoyQbF3a&0Lt~KIP^Bi@LU_xyciLr3`@$|U5*SG3- zAOK`NDqw#6a5(zuK|lqBA*j1ZEU^;^=n95N#PZF8z7Dl25H6w&BX}}`+Th7NT?R%|lq}jM>IernIVZH1H$$SXf zuItXk&l#Et@zxh>af-zDzg^TT6zsSkaIIzRw$T zc^F|xkscOYE7u#@64343M`?^0qI`LRX)qmvI-G^wwi)LixyCDw-i}Eca1D7v_|Q+d zxD;KIg=|QzeZ(L`<9Refj9P|A&Fl+|MBU5;CJBkiWGP=Ck(i3p;7p^t&x$uR zn4)kVq4ZoZL9RzBCSrNfio1HBO7U8JEhHhC$4nc|LBM}qlUroTbB59xmhtrOQy8Gj zyr$B1)d+nRl7JrQ7?$iz)P7CB(}CrRU!;b4&=K{P#8=nhzTq8-^MuJ*fcL*Y__C*|GvpB==M7h%YxEI z<+D*BCn`7N{zYPC$fE^Hmv>W?noVRsLbdDvJp>=Gk8)F6fwyP2dbRt+7T9U-_vM{#!F z>kM1XuB*!=;w#q$zSjl1qQLiWfO*rCZ~g}Mh;oAJ>iD1WkpIVNx~|u7+fG1c4*Cpd zNrZ+v5`rs64qZ~u`Mms>t{Kf^84)6$F_n%m^qIB6-bJw$PS$D6P&yWhpq5wVg2FYz zh|*;^V%}iTZnzzRSc<|aWJ9jHdF9G*&ZZ+o#qOVe2SkL7R1fQv%#i+B&q^d&)IKkf zMeUbhoNDw6z|8v!sKq*^_jMb8aXOO=;@=zvi-2vK0gHf@$G;MldjN#X7|w9eNEX2+ zNXa5t2WibzwHj%Jkin5K?w+na07|U@aEoK!SC@LlVV_7e7iu}4nGR50E>6SZcyjsa zNPN=28v!r9HR8IOXhU^mV70e1VH#kvc-jsFU?G@up3Q*EPXcMmAj3f;9@D4BK(=JM zZ$?6HZH}paA!D(Ipnky7lfO(qiZ&GH;%^&yI`e-OoR<;2VcI**(8?Sh8*iOh6$aLjRN)IvudPTqJ|&ZnNpuEH5%5MkgsL?5whX| ze_IEyw63vVs}(|srAi*6yoz1{Td=3%y{uIFR#iSLyH`zfhPdXzIwIvjF`Tifl$B{- z)Pp^c;NTXJ*mQfgeQ3*l(?YTc#PZIq6}6{3K@7l%p%jJt21)@-8O>Gd45=xoJ)8I+ zC}1d*nU7^okZd=;wg)caNJgTWgpG2%;?F0a8CMh{qr}nN`3%v4PuzxZBtA+*M<``@ zj04CX383soTCy~Scj$5+MI#iXh+E;|ey#9Q49#6DRob;O_2vvFqK5fZYJdt5%51Mh zf#%$Rwt=r+m1?9u3`9BpM;TrKBUI{M3Agf7i8fKp>bI<}^|HF%_m>~D((f-nYS`x& z*C!)~eP*?oFzK_KA{cUk{%;em0^?he?t^!`O0t9F3Hb5_I5N6dL`8i43jC!Nz32#k zu@n{3pTo#s;Vd$49py&SC1iVFzBB+H8z&C_i?sZBVTsQkI3jV30+FBuDW0jVtG~*e zBqIHx*uNE+aI{E*#OVMMBYkRMOrnU~@s~2gGmbftDezNr$CvJ!!6$|B1g%D?0W#Vg z{gT&1aR?fP-(S_yki9)1^gFh7zRT1ngpA(=;sllJq4AwQM z6YZ$!iT@(^lc{vvacu@z(XuMiO8GWwX4t8zySKMj6aR0MKT1%*&eqxV))dgOe%85G?Q+fDDEDy|bRgz`og-XV^uEc0wnX5kbzDf~ zwp1d;safF-wMjHbY#yKLD31-%9ICj9-e@_kuH)+H4L1l|UBB5I2jigW`2*{A7mZ;s?gefqY>mTa(1$@QfP=2v9e4We?!av}$DJcx9o1WWm2R*OX4^Z28*CGs~1jk$RR+hGgtk-wi8qbaw zv;#PR{ifFnTjRFd?D}D+>!Ln{%@DP^ov_*Kgxw%?n}a?YkDCxR-EPktqj9T^25a%8 zK?+$g-4;<*Tw^NFmS{w~{l4qNzK2k+IT&}4*YQygw!1wD+o;v<_dDIT*YaJr(+bC^ z*MZ}35Dq%txY_G=y+Lm+qPKG&1uWVYQB~X;t4&J^w3;pG_aJPcUV!@Tz-_j}ac>a1 z<5sub>^B3?YjxU#L37X_ciKK`!VtB)9k&lXuN$=ewV2*b(AE-wm(@6m+)Elmuh(t+ zp6~YtekW|TP>B3)$9Mg()9y5V7Y@43=D6Q=o8wLk_IjubJ6^Zh^@1_tbcJg%ObBIM zo*zXR#arVV`i(n?Swq*(@U~3fF@ff=OZs-nr z{-E6-cbmT3ZneUmJ8n0<0cZyJEyTx6Z_pZe{qCUE_WaQAw)*S&EU$RHC!b~I zN~}9>bKG-bx6^_Hw*$jwtJCYErrQr))M>UoGzfw|L@4aGe1Fhvp>7EKoo>qygI3_7 z^%6qGC!zS$<+;3;fa_y{ZN%61z<=r8pN7m~>7$6;)wq(fNHQHmYA^zZO!=t_fI#rX z1YT_5iK^9*wYG(82cPC8tT*nrLKKAKuGbFyal4P2?dD+6^!)DFMPulqezP-fw|nDG z(D7U@GJ=6S?snZ~v)AqSx5i-Guv7uP5=6eQvOO_j$TRnoiuUu(m0KWvAsey8c7u-Ag^AZQN8u-W#NpIQn_!KfeLt#T~L zjHoiPjj9P=39ACfD*ovW5H6KB0I|SvoP9^ZITh{)c~6BflGzl-z|&yffEjOvO721# zeV%<5wP1QH( z$Udhh5ArFSat4_&Bs)0E6KrWK#!hi(2MYI4Hc8zHV_{OsJh+)){W_=eJyAXgAyn zXfnp*GDTzjxeDxs@_tY|@sQ;%H{*>1%bmlM<>d(A!*famf`vx3cV(1Co7tb&ViCjH zN>oa4#1_~t&_!h3w$L-jPhm;9J{uLstpnZ>HU-jAFIl|s5j7K1hW7J;9! z(PxE&%waE)u+E3Bg;lDURWi-wVafSkv$)?_IbCtg&_qX8>i}YuvJWtZ6O>kjC1y*( zda?@Vn!(D@Mk77B@VrC5I8lMDN-SL_LGBW=o|Fz0 z%h6*W$OZPH+#);nR-Qd5Wy=tMwVPY*__iQ1m z^$}h|=`HzjUIr?6tFP6flmRIuy8snxtTeaYom?Ld3mVh}GIR%*ASH9Qjpe1vJrJLhePm6FUE2aN+{cJ5SS4{_~P9Pv@T zBy(^FV=>a1H0~e+DWLn zDT>(@8k@WUT)PxW^i)uR8Vk&T)Aopx>??k! z=MuN6CRf+W*7Pm)eB!C8C=J>Y=BnhmL8D}OqRdQI>;GL^0`BJGG#jN11Or?0g2^2vD_VoC>#f5W>e>60bXV{XQxR;JycML7qA zSd-l-KGKzyTTw*~?MjT8>ty7AQg~;R=)pQ(SmX_W&li!3Q=y zkf2o0L<-bFt+E9Z2%6cX!phMWvG95+r+sX#S`wJz+LIF<4DqD=c zn=g?nN%+Pz30DJGd86bw4YOPN1i-pd3G0qAD4c4d)o`l*R@*bHiN;9bnC2Lv$H6LO zbtT812q8)}SeY_UwQh%d`}5!yu}Y@PFEYKC#bz8k+T|WP29hjoLk{2(5*D|NVuQjl z&}{=02ZS3nM~A?l$Dzz1##MdcvRR-MkC!4;?`*`^#8~Pfma3pAwfL?Zl}+ZN*~O}+ z$qR8R){P~Y$DG4b4~0<#K8Z0dPCu2#k*zFAGOOB_EoI%PR}B*XAlB?SSQ=hT$sHKW zw=7!f##OtjqSS9?znLu0rFJV?$xz7BXMqsOdPVhOH!jPVHIA@iaYV zITmBA$rTnHDA+?)7+|L^~Y=D<1N)#1PRf=uFQxo_camC0eO z+S8{MvJc7Jk8qHu*tX{0A6;hKm9n-Lre;rP<&?I93@lU%(B%I2IOl&6vRdUv0a#2w zCNK3xP*}vW(=|8w$Q|PdIj=anMV{mjYGfazz!9sDxE($7(pfSOkW^-o9P{SIro!kJ zC)a1APhuJ2Qb=Xf@{v%@-l(1vu`3jZNK0KRT`w5|;|NY1@B>M;cvh8;$ZRI|9q=vE zf>iNXs<}RTQ+OYd3C#kvVHipmSOh1a(a?xDIGqg^(S}?CGfXN;8`kz#>589nN39;N zEG{bH-A`N0pBT*4#p*UJeX*z>{@a$bvNq6QiwdHCFFj|z@K7>%i%N=2Nhx(4X9a4N zXY^L9bp^X{D_yTh)g~S9ceYSgv(^FNl~zU$^c@}hkGp)XZ{k~DQ^iYrO%*R-f>j>W zpK0N;E4d_(7Zb|&VWG$fsxd8xYWWWs@DZ`C

Mn4>YyN-w810hJIsG!AbI?}kFzb{|!oeztr_MFG9q zb5!LL(kJGHBT4?qd`KaRknJqHvVB9CR=UOtKBn3Xu@nb%qa(E{U{Gfj)GE}B#F&xv z4M<3+{BcpcDWIcTZzv#RYF6oE6%9QtW{UQ*k}N z*lNgqlba8AB!yLjb4y)1pmZm>$FaarNI7{N`~AmLv%yIgDCMU1RBOfM7PD=#V%vM* zth!Z6ESOUb)ikVXW-t|BvKAXAT*7dt{u|>?%}zp0vuJV^#UPi=?5c5U+j%5aY$FLu zxzh z-xu*onsP~yhXTzYL7!O)Ehv1!6Ni7tN)Tl|c%cia5ws^j3FVKoPUvIO=O|o)P+#GZ zF&=Zy%;QiVUDr2!r~r*k(DVfzE1>D{w=JP%vS}5-ti-l3gNV$-7&5#-jbyS4Zobsk zuu;kyGZ`kh60%js3U9d@x2#;sG`d=@2kSciQmgEz((R;MB|Lu+bp zfI3?IMxU8^1I%d?E`RJ3vNAA9o<-ub`DarQrrAk$6oL>XDGJ0PZ(!Y+DVwZi*j{Vk zs}9-7lGWUo-%N4<9FIvBxKsh9>gF%qzV(+M5&wXz3eq)j+ouQVJa*_*ZSAUZS>ytj z!E-j1)*I2g0a^@mUgfvu;har{#c4M2_rM{a1)O^UOhqbr-4$_%AK6|GoQ-pUP$i*JJfCF~}Q3&Eu_p36chM3miNJJNuX;I?yPGF$1_LZaTl zbdswLxej+z`Hjq(&nNK>?~j`#C7+i!kx1Q>;|S-f71}elhoa_`CaM_bW*}@hIJaqZ zsTq;$>Z81iVs&q;13Y3wt^xNA46*SbS9P7cOJ2)E=98(_rG+q2E6-QmqVO<^%w?W5 zvrVN-RBsN-_&n_>OJdExLK=EGnZy=UKJUfY&?ZlJS-I}Vc%pBtkjwbO(rWjBNp<@T zBW(P4rk9n@$yH7iFU)&8L{vqHW^^r8vKYC07cCWOOG_LH2eZs?1T2q;?oVmp)7)rV z3w55zDj7%sa=}5;rci)uTf+^>U0jCD->!$9kEc^nG5B976kV8`dXg2!1Dd(Dq+?C= zonvw72OOco$ltah67dza&{S@K@o`cdSl5MKvon~8cnA~%iiBcTP{w77dOSsykz$-=wa#pb-HYp^v*N~6=j49f)A&0&ys&i)LKuV)p z-jv0$#<66sPOVx-& zE!Rb<4{_ipkH1O z#fJ@jG%YXVV=0E$+*O@ND7z&^MFq%PK}sG8OLs(k)GoP9#3_lnJhenM?*$va5e-`A zKSah`!{lC~-m3q!5?}Viju)8`U5SkoRx0NQ$yZf zl=ba#BxSz0b&dW{UYpmNI`vLRm$>EaXVAwsYk! zgwTm#!CDrpA8$onL|m(w2dgdTV?mI_&Uv$4UK2}jEWiE(ykUW+uYGS$BF*=0ud z;k(hr*~jaXv%iAllhO6n$D`}hPx7WWaqZKUs#q9~d?IM6eRO{LUU&+9NRb0fAiWTu zCNTds_`A;K^v~$;g_oFGZy25-;Z6wszgupqthPo%&sZ`Bm*%62F?yp{V8ewNiX#v- zn4%fVT8q#G220(%yfIn?XUoKaVxi39Thxu~veV4<>k@`WORX1TxNzJI%WdAwvTI2N z8sZ9Daf9vOLBlL6yp#iu#AYQGeM(X=PeSq2wkkv)C`z3SYKlb4Lk>~{fk3@9j1k-G zD}gDd*f8aY;6O*>kUj+&_Q0PrwYw^IKXPrTkft|wU@GDyEieShPxnYZa33yS+Z)qtDNb)iSzl) z=W}-~cWUCmY-yR_L(t61t4K92)&PkC#qlIUjhK%?g#uLC>IOn1x?6qI*qwByxivN`x30`I`&+@0HVnus5d*^_qe_VR(CLZWTft3G};!gMnmSOkb;f#-sQ@Ny}V#*>v?<9 zveJl{s~P3VF6~%1@U5#G&AShXO{HxwlOPMxm`qX_qSCoJl2vQ<5KTAO)({6;~ zP%j+w3Bp$}B}6Eg!UY08LUGnt@-E)-JmQPKfDzjEHWf|*E zN)5q%t$iv)KMGiqs-XoYqjFr48n&ujO<)K`KL^|W@?!Aq1C+I zxQWA3)ah^9ibg57nN~C{CT2EX@_5^mOC1oG(F2;hjOfj+97FU9S~a@#2pZ;UWFzca zq^nT^_5TGTjl`19N(V^PQk3?TvQO}vo8zFVgJRKe!xe!rvkV~Ywt7tRF)D1Z%RMUdDHoGwt_MmcHvtT$=w^!9jTlAw zV7GGW#6t2Z70O;$w?5sXW!*@Bp@{1*|CET-_j8r`TV8#1a&~fbtlCH8|Gz@f6v1#`z!EfqAFeJwaI;L@B1LYvXt-g* z+w{jg{Z=Gu_L2_&Ofdsir|$vn6UjmavD)pJ5{jgshzpR+RMvSn^?iq`*}Y6~$%twRL?@a0n$HqgN_cy}4-vS#SrZX7lodQLya`1Dmf^`inFoaw`Mo^`{Fp|so&>irR zqVYT`oKq|6qw)x9Hsl0@j=20j7xMe^{TqN5D3&ylITOdjvYethKMGL2H&lI4%WS?& zf@3CFjAvGF%Wa$N*j<&fY3|y!t-MD8Wc{boG!|9eAFPwb?6Vq%_BjOdOGR zoas>WT(X#Ku8dmQB1~J(pX7m;KRa*+|3zYWN1cGoOeB?prS1p;d*BRlGe}&m%Q=um zQ0wMLEmLb})Dw~XbS2ufH9R=@lRQcO=Rfhnf6m0jzvii>Ui>M4H1yBTpVW33XX~Gx zfTYN|!*NLNs1qZ0@F$DwMbPgFnM7y^CUjNvA)-uOnSW{D@nRh{1GFUqt;G1Etv3Mv zOPJUb0bF~WTG_Bw2a)WwIx1Cw{YqUabCA7}Tm3)fg86_l0`hMK2E#R=vLpf{CNz&6 z#QfRYiccjR7tI ztYGNm7M*09OvNmU);&5_(A`>>s*)pR&#FobQGF-_?1`(sbc9ZjOWrh3v_~OYz5$e& zmv$7bm5kCdcYcFH~RPvipIHOSZ8x8 zXQ>5%&S`?;d=LO1oQ%_+9UH8-+|W|28sLNUvFc+rN+xQhQ+!;{Ax1*D%%M`+vXZY? z2Y+Z#J{pr0eUyIU`+!`vnp{rak$D_cZq+4(MD|WyqoI8Y<_xVmY?MrV1x4O-3PTap zFDJ5ALq&zFi+mUHHe|LLDzD(TTib1yC%2cUp;!k!Ei+^WKi|kK5;t5z3_;y&DOTaTGH#)Nd(2mfIlf_WNIZrvnvao?W0Gf40(kt@#a^&Qe%3OK)#XTA#87EqSeNar5O0zvr#di;(X zD;eTqlHf6-`CRBFMAT)nhHNd8D)kt}4Rt5f?)*>{D>+gM7FLA?N%ien2A`N^iUsnz zrhBkJR@{;WvhcUbf*``d?Uc+#^umr@$m(v#h^+j#$qP!NbayWBT9x$k4@X4gu=mtY z8Gm;;XHz~yb=rV>EPQz-e(@ULCa2Ew=VWE%nAqP$Nko=edchQlB-k}k@H&aaGXICi zeS~~IFjrsBW+Xn)2^{EwJbYQc3R!;AG~&_ z-E6fxEwB9tx7q4;ntuT9Bhy;>%qfHEAKVAGRV3~=@_hMn@VcfG-Am`7I5$xUA0~0_ zRE3VKyd2;FU~%)j8mh{PXvR+d_6HF_u8&*PULSn@TKn>)q0%6NIt!eI=g8sbh~^yo zz)M3F|1KZ#4u)^}8j0hq1Rk5a$|W4?*yA-{UEYOV1^DfbQ0!~G3)i8S>novPnm>3A z4ihdnOL5z|BLF&>KO!)sK(J6DpA{RvHQlqGr;e#p2M+kRa0QFo&@-NJR%Vdxd&9po zIp2nF!3434S>{8Lp}FceydLHCba^Ks;V3~th8E2qc`9L2xHw(FokDsky$Skw=5*!W-Sa{J+1(`)*yK@M--al^OZRW+L<>^pOYBi+Y!@G8VXW>VTu zJtc%4vCnnz9jMDyfLlj(3#00K+#;(R3P3%8QN(#vKO!L#Cu32n56IT5L5NMudUio{txUxue68vN9_>>8%WO%tNcXh<`=T^Z65&Cy(wz zYo@H7mOA5netIgb)yMKcSqW#=kk3P^=jTa%?ZnYn{g+u-xc7f$YpPf3d5%}{JA+Z2 z68U+VZ(z3`(nnUd?IC^kq_T(9$8CB@w_C;A9GL0_LssE5Q97R?bvL0euRF7D3?wQ| zi#UpEpJP+>R&-aMh|=H?!X)1T_K*F_9<5bOy;H@3f_%(LNE}a;gv9YAW2=$%MJ_&x zkX$Dw4O**eDnY3TSs^GDE2;(M8d0gp&xy+Igk>f!4F#3ra%HcT1ZH^(uNR_gB+6-Z zudW=TnU&W_TCj6GyxUg(a6q+lJw!HMoBU6?>tN#AAweD}{xsUy) zG_h^XzfJaEv)wA$f9-Df#r}JaN7{cy)v0(qTtyJ!n4*-Sa90b?wl?_m%b$^zcP|fX z07TqMG)G*^Cu!x8*e_qU(Bi~dUHgMrj+KnDx3N+LL;T#0iX#y^3E^`zDGuysm*rSe zRNSDh3S3%uh+C}}3Om_V0`p%&R&NT;F106F$SWj4(wN z18?7e?-qi68Ns)P%7sl?Rl{Gu)?_M#4CLzOc}ZTQAx2ddXz{V$Xz}$|YESEv}ZD617%7 z&x!{?02Aor2s5mYm%}j3lFyugqQy}3I4dEH`J^lO_=`i-oWCN0K;R?2l; zc>0BMW$Rn5laIST?I`~Zsym4Pjq=~~ItBUP>~%XY^8Y!WZ+8DrkF*_k|5i`zUu)B? zY8m`ix7;$OuibEaajX4qo~`8nB8i3SFO%QzB>VrcS^m2nw^@|`ZnOO&|DWSA`oBuh zI>r;B^{GU;M)8-)Jhv0wi$q_+GlNN$&L2Vshb#RSyt-=MnI}@|nkNpO4#B@0Mx=2O z8sj+R`d_=K7i|SQBzLid&i~p8{_jWVZ9o524*R3sJpdc#f6Fb~|Lqt1|9KuW|5f)s zlI_punS!|9{4bc=s*W(Ujjg{Tu#2~$odB1-sGQ8UUx3$SL}*#|d~TZgY%I{V-UQ3~ zdYEHjOV7d1o&ww7(CPLc;ycj4Km2rlacq8#{yMt(aB=+c?4%~W3jiFSk8XZCIk~(! zKm2eqI=T9Eay0~X64&{+i);S(cwArCd0AFz-5=lStkJQ`8ZE*IK$7B^jY0iC7jOP^ zQO{rrv88y)_1UA-b#gGq-HWdPt~dSG!~c z1L8&IE#ebc&E=|@Y_I&A-Chd%uj27)?CA31n%RB4UF&(PeN8%{^>!@&UFkkA&o26( zx~Sy|^uJ!GRo4Gr?7wGuo>2c&17;`vPu2M!uK!s(M^CNCJ?8pbT1P8D>OrAzUs_wp zWWp1WKV6>R9Dcn1QLMDDG9~AaIi2vKZS8}~MRj`>7AK2#v`+1))GqaUZMRdY-j8`WC#{TnSn&}v^!DZDtZ*9xJ>A^Q9Vd?$4v&PUUV=$xyIkJl$R zU%rTIF=T1rWm|G9bgyc9H|pDK)$QS1P_LIym+WX%Y^%=yu~MC1bd5rvqjUpHcVmEH zdG`T4uh1S}boD3I)wgm~Zm<8zWAZyY|F`h}x7?!s=e61|`@hff82wLQxP}cG!_9@o z3fauc^jx=SXxgu~-g{7|74q!cDGpLW*tEHk4h~6b83Ao;bCiu{Z*1?gY($*Z0AG&j5_> z;F8vEV{)g{4Z|dn=Sb%wAFa5POU}bkgk9A*4*D8aeY#s^juVQoh|P)+ly`){Xr3Z9 zQPqCU_2|Z;TxD##9^H&Cj(+054;C;zNau0Yh25b;NpP#mUmsqd+#H`?sVWinttx_M zS&-Z6Hy7teCsN&BJ6z38+Ic+8##%d3mO{PpJSbaZ`kE)U+6eGpr>E^iq(EeX4A^kAs! zs&WJN_+)f_b9(t;xb}tT1~?y)qt1=qQ+!|(*#+sQfs?;nUme~YUcJ|hsWe=7V^Hxn zcGKAP;py4v= z@&eZU))Zm($nx80ZXzt8d*{aspURqHcnxwep=GQukCR17&{D zy4&mZ>NU*JEVD&6hAuYbZ6P9lv8GSt%3l>*3|mAiDu60v(SX#yElE?p9{S6wvzl^E z$%T(=0mnt1)UOvwtQBo>*|W^)%q5@cxJ?3g!&s9Y_4q?g!hPhCCIA^mh*i|)Lt!MU z4kqauA6KPE-cD;MdQ}W*X=SV%pxpKmBSkl0od`FtRu8*!!}i=MAFi#gvua}5Mq^=4 zN?ugdG;GX`Ed`{|8E>uqL9u)Za_d^k$>a3h%Usv63^5uV3ZiwRhYi5+At@birp?K8+gsXC?8=1cCY;PSIoz)3Bc3 zfHn>C_7DpW@&&6}{#lo>n-@}f0}d+QXdMQ2k*c=etB@tT<(&PTf%|1b9{c16%byHqUUjbBKDNY($8rW)mR;eJF zu*n|)ULmKO5UsWKZ*{@NSi6(@ePog4*jRnEOE1E(lfH(GMNRJAMvvxuv; zCWvLVZZbmG@o=6Th%(mk!R*r38BB_dG#|F%rFEuoEju%yn>d=4tY_|kdKH9wGuE;i z9%A`zF>n>HEls+T*~#W3>lLQ+77R~Nx{={Fa=CF_22suN#`BHk!Wdr7S5lQc9lQo7F`cJK z-BbpQkzrpCJcBp}2?^yDqj(JFF-OPFEm2N%A!1*xY!@q|05)a2uWn)2eD~GFm&H;( zk%pCN!lG8~t*p;`js9s_43#@#S_`ncdg~M&D^9C^S2e)aW$M@=TZdDwv}KMCp&(T@ z{-rAAZ)S?sEu(rX79P9?Kb-#M!%233-~_Yj+~>@ziV`@$l+F=7=zIPCnk3g|;*sz| z-1bL7UEGq-&Fp++gSh3cUX>qyx6Z8$MEW+n*Y2eIbh0|n@Iaf~M*#K&@fzD#zmv z_W$<&A2V(rJN~!TE}#GGHDBWYpXGVN^PiQ1Ze#SXsr5he45-}dDd+Rp6eJ6yh}>PK zc!47{K_^^_s0;G+zS8=@*~5>=r`I<>U!7i`tO=$aom_uBJ+^hyV zi>o21|FK>J;PmqP@ZH(T=;qzw(N8Dm$3sw$$83kJBLMt#dUiJY`Skke$Dz8bW950j zb}=2vA0Ha0LxkMa zRKX$O3Mu~~v{3X}T$d|6hst5Lr?rDc`Xn1U%vR@~=(URZpWRN^ds+XV6_>Z#s z%c1ftYriNef6Mh(daCpV|0qTCnT)vSLgDYYOC+) zl%(SIe$}kX4~1uwO8T*-lZ}Wy!MrA@KsA3sb@qN+(WQs<8WFZ-&u-tp+laeIZxnrI zD2-us8Z(rRVSp}4n8V^(hX3~XCI$4?tqIxlE3FRtDXkJVUfT_3>$P4$>>^t%Btj0{ zt2a4CHj?iBk_&8Q|HuEM~FR!1sI|vBFhGwy&M1=?f+Ks z{!g#vzTE%xERVGRP5=JB9RS%d-qHhLQSvLe08HzT>jN-ge-loCtP5Ve054vEZ`liA zM(T?j;KdE_;s$te1H8BaUfcjLZh)8PTYk2(|4|$!1mDy8-{SmNyLkTJ?X_R*|7Uqr z)+*V*k751mvGRPjKb0wigz^7IUZNxtR#rO!RDvPpG1$@(kP&4WS5I=zN_PeQEg0t- z*%#CN#Wa6j(|qnz#MCVZFbq>fDcaI1HjA05_lU|5Z$2R@+Z7j4=hslec3S^O5f1Kg z1JK6&Kh5I#FR$nIUe^ETcyjB%=-=V`7~4K_P1}(gp$%sJ;7|VXLJf0E6f>d^v|9x-Ej{kVr=YL$uBjP_Q${o|9AO=1LKDdo%kcC8J(YXpf zU;)hioD+l&g}Khvy}<^pkaoB7#8T^LEOZB0^NGr8~};pcQ2 zD-GmIB?i|InNBbq&El9Zg+mn-eccJ5N$N{D1yJQXPkzF5J`tI0lKMty+=-8WgAZT` zJf8867u0hjv2|yte$N3FTTR*8D<$f$y|fw&?IiWz=E{wLAe9-t*s;DO%d+Yctar>$ zLa;7+Cvo#A5ijO2%c78~SQ3i*T31yiiC-z<`8HU1KKZ2rhO#J{ifj2UMhTWlsXQ!d z(cR0pZ$iKQ)h!rHG+l|TL&MFZ))n!g3SB1uIF8Y+AD5K5f-JJ$@I3!otGgBhzpT#s zc*@f1bxVWKJJBg0lRl57MQ$iQFpRHnnDo7ZBN0E=;bKPL^QplyVsp0TQv0_k2^C_l zmrOk_Yw3PJLv&NdJr0H-KO-&XlLlU$3(7LVDovy03Z`)s_*ko{yjQAki%R}icctRJ zQfXIIf+ULqg}!t*uHkud`TjkL;^+@H5|=OwU_$&cl-=6^JiXx+#AucUPzd)-{45TI zIURy@mcQW*9M56qkD=0tgIaZ1m<|xmuDpX&ls$CWn<<01NQWBW^5@?vu4mJyk^Ubg zW4d>IocLecTYHCQ{LiiZ!#@7!N*-q6J>%osh2>YU%6I1ZEjrlH#+&z{bL%di2eL@T zqMuJUEhW;jK2>fLqG|=@&VVo!hHLlC#~{L# ztzLo=$^r;ffWX59r6~-(XMhT#2MCEQz~&>9N#aGJ=^6=~D+I)hMDdWeaU92 z;|}vCwTVW`&#fQa!6anSlEn~OUg54G6^$s$i-)AG5v-*{`9ml<164=T8qj*M!TQcf z$0(PweiqFd-K8J%qc;`@TGTKP?=LerioSY-Qb>XfM@HYp8L#5{NL(wP-d;-rfp23W+n_Tw}LBx}U-%n7SuZJ(G z{?5-4^!1QsE76wlLUmNtu11B1A}N!&rxe>$DGI;7te;Rk{dPWcbMrLbATi!}9y-q7 z*C}Xr)r%;8{|s(192?Cise|$|ouN;AMscM5R|(HaERzq+IDvB2B!epHB`~!k6l@LU zh)FpTWAm`0pq{4j0X4hcP$^_x$5Fls7Z$C&;ll!qY>%{X;K%R;W~2tTGO(;l!{IG$ z*Pa%Q+h4Zjc!mkgP6`AXHm#t%!4kb@8_(%JUy$7a*H%oe+bY%!Qrj+@9M*zI^l52M zpsEF~UXuOXM#Dz-za?V-|Nk1q|KHy;;y-R59`^AcSM#v-qNCXV-(TGS<}v@DDBgeP zvHpLMIRAZ&|9(gQoyT+NGQNKw2%!&z&<8^310nQ*5c)s}-`CS<|2Lh{kx0hB!`lf$ zcPFaVsKLgt?*8BIuIc}=zqQ@p|6j?&_ImFs#wQ1t*hB2muwvj zcY4{nT6Gy`E9kEyGA`XlU;1>XHmx!)IgJOicPyj0!=xO!8%AQv%fVEYd zXn?gq_z69)&;OQHBWZDHrl(a7!DFduR3QtJXc#2HNYl*D%dzb+LCn@jjM$in8l&~rGrXghR|r@6rIVwL_Xe+hm1OZ~dm zk)rTgNigxJe#Kk)T0mf~>;%ysy9y2%OZ(qCc} z+?9VB22q%q`WFTI3Xp83M5GYq3$FrNkuBmnsM3bu*8ry4eHi}6<)L0tiMgl`tG#X7 zzR@vesvRiQja*U=z&g83&FEvg=SL%eGH1P^GS?Z5vLdHnQ_2@?sWrhf7BI)ef}_)t zQokA-^>UI!BIPS%HI%=ASlo(LY38^J#Sclfn!~n81X5K=EwaHU&uC{m;W~)Bks8f4lepSjodYIxdaz?ZV|Foj2>(W@MuJTV#haeV6scLGz|esIN0YvI9IXt=v53C}R_qGayJkr5+-w_yay z5)Hp{lq}y}tYt8W{b(wV{El7$b_XbX03Jt;jPfnMH%T0NZy*K}MOc9)ekP8YOW zX2o}-0Ui@$Sdq)6G!LE0EN#4Us!ptWKjk07Pnl||+B6X87SR+{jJ*HyCNQ23@nlm* z_TAtn>HqRP;N3x(n(^io5|qG9=R-ZOO(Af@joSx(a;w7lhxG#TQ$L8v1Fwe(%KWjI zW^zJvW4|#quT*Ko%j*J))e`WGNMp|V>jweE_#Fz>2xH|`Oy|K+sj{4BT_JY>@15uL z{nj~E>BSVy62h;r2)$f=W5p^$sTHS4gJAF7P)df(U{q|*w7^fVil8{O=pB4eyx7_M z5{BfbkHe{d2hS36k)0!ydP;i(1&+Q^(RPY5LYdh(XtcR;{W2(wDSHRHvp+kn^6>Q5 za}*s;QD_;!O1Vk!=@3tEPp;3p%JHN1wK!n&k`e9>-~Yxasp?fr*T3aO zg`vZ*G(wTn`EcN(xpOn%O29CUlH<7_#r|y!g-@FLs)&P3&^5`TWUOzwl%i%R& zU*9LbiG=pD4h^kvJtCGRZk9}-ACt+$B??dH5evJk?!n8y=a>yET78Vepr-o&JCsBO zHBR}dJ$3s3_ST+x|7T~fzyGt6r(QXn@{xa>yF3N_mKS-7irw7e5sBNnxW7}N*5vX| zQTmB)?ifR0U)wPXJZ7rRqN%cso0qvLD%mF(*gCcePjgkr;)=h;J)LHnzIzVzcXR;w z7rJEw&N6Ho=OL6eE$#nL-TM(c?#8$-@!+Z(JhqwHvGMP3>U68kFLP7J(%<>H5enb& zRqnLNykEr>d8T~_S3J67Qva;vX{P^Y5y~R+z-+=@-~Zp*-Q7O4@BjDyUn_aI{a=hP z8}3dl|0=*Iw)v~5)L8q?qK)kQdZlJ2cbz<)xl@TkTy+&LMCKKQ#{N?3`b@ba?bPqGh_{{362>=dKmkHm#JqsZYvWP*p8dbij?VTf_ei=t|n0UP^ zy5!SP|3gzqCUAzYW^r5Z|9boH&f&i4|G&N8>whbGYBd!(^4Tngk7NVZ+GuMB)+&F0 zwqOmtM)qK>##7mZ?ICg4h3!I*Y8%#?E42@6qN>bBY-9fY*oj>n)7y$m=+oPab$jtR zL$lO&bEe$+60EVW9|{@DOY4`GD`vV`q@XM*Y-Pon(6=Z z;1Tn`?rrVv+4*04|BsbC&ilV7u^&ylxdiOWpSaRnz$bOrfKQs=17<}_F4ulIvF_6X zFlXdEccR9>vD~#$5(0wM`kpsva2NQb(Pd!e;+MdizX9Cb&u<|Q!TRwnh6!nW4LEp& zd%(rz-X*RA=Vt9&gyIHwfD14!uL1vv_juXV{vmAX=0!ljQ16ZEKaEkHs=nqF78pOm zHRB({gx@SjvAl3d^)kG8j$-S|VXt2Q?Vd*Ze|GCHvjM2l|M&NI&HN8rTf6=J&y_q( zv%mV~_@oPUpYqAm>idjSD;0iOqKU>Y%Lefb6PW!Tg-}t(MF9|DSpeKeAp|G`31as* zxh;nGi`hX8xOm38B-L{9OE1+(8|Q?7tV^2=5r0M|D2x7ZXWIPp&msoS2`9!CilGNQ z{*QJAte_?+O}bDTSVs7+Q~-QBot4fbRYBFQ+P${=BWtTahW?maf2$QpHltbD4pqnQ z#KtdC5=O~bNRRy2QwouMgI{r^*H8C;y03V;qZnSn5iRbg(VGm-(u#Ta41lFq>ze76 zYc$P75Qf=23gB@NpjqMy4zj2$YSy|y_V2uXZnpnJGt%DeD}QSCe}`MU2j>27=U}Jb z|E=O-`TuUzT^^v55@O(E;DcK&Ga%g&UQu2U838dM6Q2M-gCNMDPhj|r%1v=T!MO>< z(QW2u55q?30~x1z`E7TH!xt-&7pQgeDsk~Dpp?6J{aJGLzSv^TNF$dnRM%a?C^xAc(vmeiXMcRNTuXSXV!CnhLrZ zebhZDog85_ZgGbGy_7>7?c2QKC{zpI;vOByCCW%nF#{Hl%-(pMX=!V;@jQ^y#3Gf( z36#F(_Gj!9c<(>RoRiuG7e7uX{*E>z2~_8X_vY&IgwKG1^{tp4_P3jp@=tHC%Raq- zo!2Ucb>v4eSeL_ijtKApyC(#=^kkEE{W%_Z3ao)PZn;|~-$BXtN;hmd$9^~Nn5vNf zTXqm^Uq@OD-|4`@YpOI z>Mq=vPQTlLzTYgbHLM9`*h8VJdO6M9z%1fRRNiFpk$P=qO+zzcDC8D}Q z=07#&E-75Jm*VM@g7FwiC%RZ4Efs%hvH}i*5Q}ZWnJS)zJFn{ zCJIgvKXp%E2WvRu=ee+Qc-a0ZCXD`B;%Q|6!7#|$g?!eYI{)9@Jv08>*53A3Z~s}v z!}hP&Y<#=$0N|YRv_1fWTPwW)iZV_70E*J&Ar&pszwGbs@Xp2ex`@uAWa}W#lI~rH zlHhPz=INtXz`IEOFEi*FcMj<~rkn*Z%6I|HNHmH9pFsV>r3&*E@bs8gB-SiY9&O$9n1ohjH2^gude`QC>ioVNo(EF5wxqXma8Y-;Odxn8bT`LNi0eu>uH_^6vt^x$>=J|sV&+4c!T157gq>=qD3s^l3a`m%gSnn2xn4t0y_6}A z)Gtv81P|T%bS|SrY?4J7;dPNY*T2Ou;hX4)3}o9DBR+L15NYie>bAkv5=(Ww6+)=< zjjL|6jH%2;cO5gc%6%k7;ZP~txNkYC0~6QZCos_vjWD~#C&n#B;Y%<=8Cz+XSK-;^ zOMsD-;TYVbgaDE~6t|-3a8vH%vOoZ$O_<#lsruRUGcEut7!8bHdU>wFnl+f6UhS1f z=cP9o*wa^X_N&~l^6b)UID?!eVW*i3faq593&8c*;$x7%`$)RijuVQY3QM z1f}3Oj>Q1G5CbY^a;sM7jX_X)9LJs_pLMHC1@4Xwc5#bTosNVB)Xrhmm}eMc{up)` zAzZ!_LyQve#eSN=UohWMuB_?7($#zRYRaSDaMa~}Zl@LEE%L)({Mb(dnCX(H;)b)> zaZ+UBx4&q3EHFzd3{hp$LyFN{2W*Ep$$U79?iwP#0DeD!na;e=Ucw(G%TPUyDR6l| zf!6La?{2MaZ5gg+h{qa$mEwMmLgvu05Z*~%d8Ih(dzJ<8h8ln;!F@p%hf4L%@optl zGzB9()vxwtyuLQW@H!SQ?wVmkKr4^hl-D%2GWq*g)x{mVEY1KWfUE4AGA9nJ z*Ufa?vY4bjI*)hr6I8GUjmD4Cmc0!Bh;bYnyP32^MtPn7! zMNBmK0~y97bALAmvfkkIH}F*Y_U##!1Z>LdQ%A@JW4croR%pskTf0!l+N}SJ<^Zqr z|K8c!vGTv{?DgyaDxPNR%cJH1*V|~B|3$BCI3_=R{udp+Ccy&q8c&q}#W5uIg>FZo z$ISntH&>Sb70Wp^?1L$&!2 zejJ5NDaeUhMMzV}_R|y>aaR>W{17I*0^Qzx*PHLY!;BoR8GF5WW)A%_oUXAyqR!aZ zm!Qm>(l}2R`eU(hF#HvHqgYq!=W>d|YvwrRoYR&5rp>)hm+@+C-b#wXri0+*kFN1~ ze9o{WKr!?ylb-a6wTWX30B06T%g?`|M3o#{Az2#?U@PXWmB5`gn0uxr1ZE>YfR`v- z&R4fBcQ?m1HBhTso{FJN_o6ZKH(6 z^VQWh31v2g3=ocxnK9L9=v8g~`ZGYe5SSTat`*VKHp@$IAL#7^k8U4GGc=DV55vr2 zN9CJTDXgr&sh{~%NMOcp9TdNgLvx%R^^m|SL zQ5~$^fp6a`tatp7Y&iAr;8{X0vU7w|ek!L2%XPVgfBW_+3dACF`NM{N#;&BXz{rw$9{y9FoAb}3f616E7fxEIp3KYlz43h?vkY&UUnA6^RDH; zbNF^|omW@;+lsB9X8Iq~Vy_cF#S_%|{lDG4Ez|#JXM3-=|E=U<3LPI`EXKDJeNTh< z#QL3vON~Bfm2ITIS+#2QF1<#3JRQ4yD=X_~_sy2Jo(0Ufo|5_gd*V_NA^WWX=-CqA&$>Y%f*r0c>1bznx!VZMm zsDrJJhn-ay(Cr@UusFgZe7GxmcQmqs=qfTguWB3%7a(7`%Yz2z!0i;y{#^L)qUX8w zEt_4mD~}Q05cq7cdBho`;799B^GV$O>XpVYi{|2dnV(P=)aReH^U4s$khWBE46A=G zIfpG#&q`0L^N!f()AH<@VScA#%1{&G`sb7?=$b{~9%yDhEk|pw&~^JX(f$M7 zFk!Yl^L%w;o~%v~CQ9~osXnbu$}}eJT8Ky~_#1rSo$%u^$|5qE9)Z)7*Vo5frH=l9 zM__0Ffc?rux1}z59N+s7_!$5Z#xs~*!4U_QO9N9sRfN|Wt75p;$+Yk?3Op;r-iy@o zhG25rHI-I)u0wg>L*AfN-xVX+KoFEdUV(^M`Te-qx>o8;CGWE2HWe1-^jxJFdBWYE z<7!t!LO;fCr;+}jq~p!cw|;OpOCKTr$L^tZ{=dDu-P?ax^3NpKh9{ic5jJ?VLKQ17hRK*rJg~FB zJ80BIE<_yg8>qAAmv6u?d;kU-_1+1%8vW4izmy<@b^5G2WIT=?Z^;dUQvuh5x~&D` z3~N^k;uR>?68($PUsngzy%M_pml;g4kqTQzqY7Y>P|bkeHUn24>8=`>gLvv^lP;xw zbZi+@gvmIA_)E;?gt}|w07^ED%6xj-y`na`tc{ZFlt?jTsqfAU1T?V zM+X=7yF|%j`ev$v+d5JJo9lm~{m$=yZyz2WY+Lug_j>#9N}eYApBVX$6+jU}I$1D; z^qSr3vT9z*WP1{oPnbgto$oA(NaV-SAFwQ~cXSK0gkRe_dIdZ*8fn88C7Ae0z+-5u zdBE1DC}iW{(E_0#qXcR-dB$xKSDC8quB6{#glQ>py!wA;FpGFoR>@$737RS;SY~Rg zz3W*Dv-cQgj@#^OQF56fs(`qg$lwga%MT~6s%Zve z1N%H6tgITydx^Sf7ES%^;e8tV1YVQOCvg10MrW2_N|JemVd#}sc?Zb^g?u>gBN9x| z+?c;H8oz~e$Swf;;$t0sKm7a|=f(gEBv}9|V;0e)0hD?3R~v zWc`-0$Te2im^-&1x%2hr(#Ozs-D%-m%}sNrZPubve(^@dCZJi1vhbqKNqI$QFY|+F z(yU!+`R3`ISp);6UKtXPwC@!txNA$DrzI3^&!vA-FztGGDjKSQBfGOOJXgo6c9TjM zEmsnWOtB>C&Sd%PS6aFVlO6I@KcFB}?lcM*4UZCVp+PI+6Rz(OtM%asN`e_PEWiqcX&5P31}-lF9T zIpn&@B?<*(HEf()S$btx(i$;OQyh&tbt|i7w+8mAqC}AZM+t!ml}_OIC<)QML--h4 zpGXrDeLbODkrUz4;z9{W$vB4RmQ+x*T}J}dLff^J-KMf5K_OJSCVE!Gl?7HhD;oGJ z<=XPS?3f8(>2O}A1^Zp{9RMh{03~dQd8Svl{L^<415^4Ln+!J(TE!|9FlWkL5=|iv z{1}F}UM&W60Y6St3fcbb0#&l;QeCZ5oaX#2Jacie$5D4ki>-5ozUY7}H*PlQmPTx` z39om1vMj+*YSAui2c;%$KJZ6Of2lTH>+0)IYq@sYZ!;9fVz@Iu36JA+;-Al^VBd60 zmULCLL(U|sx@bA(R2j(~+VxLjC2wOEcdpNzvgQKMKsc3KUf!+u+O@cv>Zl|1S3akN z=E;lYdMNvr?_9)fgM1@Xu|LVzf?OIoq%+4gFHv!G(*aJ9-gMdL07{(prn~Qax_buzp7dN5GYO$&s$HG@g9{N{AmNFdJr&-;7-(Dzan;V;<%pn`dVeYdNow&I8?} zu7RaTY6HNd%eE(U0DV_cA1yka2SdDAb_ElW^6=G#im^m@3m|!qrFQZZoi5O+4%;1# z9D7*ywb&$cBAB~cRW_S-0dQ_Yc@_8mRNopH`%Ss_sxNs&uXldxkQZN=J4)(@(9^2J2bx%?VbwzLNQO2 zI05vzgF*%PGQ5M@g*V>OjW4373oQ`02oX#&&T$HDm=(`)npQX8)g#wo4t%HrS|~1l zA=i~o#2D)MW-vf=m_00sZ2_h(SCx&}l1=7GDJ0`BN3NZ!?YPV9i_5+cEYKI>XW2Qv zf0p}-H242V5sDXb|ERtHx3|4z`Ty?q`M+24{Mo?&gOB`5{C{~q)#pF8K&Nssk|Zqr0-8YC9O(VWIZr5f4FmI~8C=R~Cil=v2c4P~G>& zfl~3kKxn6}$&zzQiN#W3cUIPjmer2NM|1Vi^9?_99@7{=dI{xNF6K+uQE-|5ZFq z^#6S1zlV!}44J?8b--&m9{t6@{$k*hUkp@P@3qNxc!rs)NlA=Bhbu9g-<<13Wz&;b z!hGefH~@dl9a`X4;)Eslf-?2fVwB0No3tt5mQklDv6O4fwXO~P2p2saVzYGX z*a_X&%;12dQeRh3=E)h%Pf&XV}KJ{MaYn3Q3B zdn?6-*xu&SgMEFfTdV!k)zf7EH-|CIkc;p#^-(4JsFF{iJhIf%VOh@UQ2Il=y@NAIp+~;(3NC&diri53 zq>^4#LvDg^cz=%_8;EAu-?fp#9WKY~GB7w;n-5Bj{cazv3gm=7^N<9WFpH#XxB0d@ zzmA>4CpYW;GlO4dFbM>;93NbuIb$$Ccjp;U@kx)|?uWl;5s?Z#ub}y_-p+zMNGy0- z$ssS~qO8?Xy<(cdQIv=Dvo-0u~PCMH_3hL<^-(tRU(H z(E+UExLzy!E}u5~pPmM?xdFIN|Jyw@^Z)Gk{y!^v9Qhv~!2s-T;Co62*~|o7UZ;IZ z$TmjclA4R^lx4%QLJjkSQyg2QdZrYN-BH>wgm%r!d2t zpJ6h8Jxk%q1O|7luYlI*f7|=JJEr|_YiFz1|5ovE#f}auI8EkYgfj4Ymc}eU)55wR zXB#DYiON20v_9bR5G5X1<9~=?1#5TkfeFq96hc;%{|3xWnjmls>7F{Ie{zw|>*n~^ zq-m__Z>R3^8#yUx3Gt@_g54^jpNuQ8?B)!8Pybb+g|igWp{MKb*a%}H`XT78)QUz$ zMfD(OET2Y1Z+_5iZYZ;>00(d#4ZOPpW{y;O8CDdi}(!3gXS;@nM`xPX!EWzL{x`&tmKMBFF(Rf1tPEkfM@G*|Y37?&WZEhb5 z=}2cCeVL+g(FKDl)q>ZC7zVQ}A`c=)>QH69))s?DT^}w{Shq4X?^vgc1XxQYWG2@+ z(I(M&;(;yT#pvDxTim3gDd1Gee+kww%;r(x%w8Zr>9-zW3w}w#Lvc%T+5P1AfwF};5Z2x=SCRh z-B94=5aE|npzgRujz~y(14aN}bIYRMT~(>6(jh@b|0A5QfVVRuyCZ@ZI(wsU6M4Cg z5H7iFYmBpis|P{Txsb9j=Q_rSlK5OAnV3+hMFkfF<(;C%ZV=ab>EuxB@sXv|QZY2B z1?Zmx2dSbF$O8rwo;pHnNU!0*RdV+`|35GGcAAt3k zh%U=k80>*~nU@r=&AwWCQXy!#SgGiBYlNx58i4h21B_|W1yJT9u`SLfpVxA}OVuo} z_zMv9zcEUl!a&hn|GO4*macm3G{E}vA4~t+-9PB{zg0XuoVQ%m!5c_`9B8WFbfM7c zyu;<_LP5^xl&DhFq{|KOO=I1!=H#TlD_yB>q7Xl6UMMIR+aAgHc6=n*cBaB9s^} zr@?Sgt4rvOYYYEkNC*f`k=T3zexF1!1osf!CFq{BV6Fv@GBgGHFuVjYB>#rlS`-lg zzou~%L?nJ-5U)|LEC+r9vi#;An|fiC!GOdMFX>if>XTr?FNwg3KabEXqpa=cGl0UQ zJb`A!z#-Qc*L{p-auE)wY5_YvzK?$)8p(*jaAzKB*?^|P+DJ7+HpM8 z2~11OaFmSs?ow!}`7SeuejH;&;U|#q&;quMk5C4tvzSC_EGtJ41G;;72_j1W+<1f% z2oT@H=4@VgYwM&CDr$;Y)KjLVhOT{54rs&LnxrUnu&MsNLMJbsw+t1t0+a5 z7#(@WT_|zxsT#9^BunW&VKHSXw@`pNZ!<~&)tA^LNHa+L0$HdfC5eZMW3FKJ2SDc2 zUjMt6o8YeE|LpE>o992fJ3ITm{)~l`J zrqY;ON2`pv6%%~TZvIgf$Z{r8DfWFRk~*$GmonK<|C{=E@GK!0**QXOLO-&n&i`j; z`@p*Yx7GXqtmLWlY0(B=Q*V?At;z%wGjju+C4|kdUtv6DLgE$z7?BA(FD5VP{|@#5 z%D^Z_J~`MM<~7AUV?G{qa0u69{(u>xB4`$eY!SX?4mxv~5g6t&f*^KK;*b3(0Y2tZ z={|~MfJqjmAclTOmkJ6D7fqhernfM|1wabu6iAm$aQndfK_TUB`SHE~faN(jlaL)oL^&wRi*8`n2fHNr3&iLiW~_pyH_DR5 z0hM)bsg&zIGQY2n;?dE3^d=C87zm4LEL=d;n08%Ia4|dG>PuqR`rxiV_Qp7xa z(lkS9#zMRmS2&o8tfa24c6!mcB}JjgEHy0PsS63)cIoM-PzDjE&^G7Wo+TunwZK{I z&KJO2D1A?e`(=ivkWAnVU(I6JispIEY!<_(!2KMOdz9T>qBsg3T40{=dMT?{jkqXE z5x@JNm|reh4(VS}7X3k&!T1t|$1{RhCgcqGcRu*_^0-AeCaGVIyf2_f$#`?VW23#Y z`Cl*p1DKI$#2msmKNp+b?(DyNTl?ny&)x0A{``L>4>#);Lrk@A&785A-B)26SD^Do z?wf|0_Za|9Ex9uOQDGidd&s{vviFvCqhpVLX{%IkOBF4jVLXGG?Pl+>ph)lh#2>>< z>){4C{hD&~WrC6oI8Dg|_-KLrRGQ-5iP8jNf|o~wfoafmRRVqnV^DSTpaD(-6XDmV7Kl zg>`=7&mr&$h@p=OU}pXi_{cGNsou{02jCrsP zAT?&?$`~=Cs+>@6sj*d3* z_pYDgm?s%u0#6A;50oM^#y867upN$Z80eJXL3jQF8BAmPm-jzB z;C=QM>9g2JL#)o7#=SH*ng>|kYM zywLKENy1b%#tT(9_S6j8Kact}kpC?Evy#WH^Y~voyXN`d_Tgdg|F@E-T9hQ|Sk2() zb#byK_1+D)_qZDTYc9{vy%>)D;GyEsXiZHtXdJp|d!@}6;5cRZ4J9HXri}o=74&EX z{J9^+EZUUrqL)BtcMKFASm~Say3Ex&nOv^Sq8k+V3Qgh>WNoCmyO(#yjn^a@*2k<$8T zbMyK9==uEreLmmF?vM8Oc6T;Sp*+J>I~E93O6$-k{;iK8cc=CegmK)W*?(XhPf-Y8 zg%PImxg#`El#vO-#8WS~$!6{KN7QoFC@uW2@HS8i)1OC1Z%fHriT=PI*{ci39Y-^m z6+$u0D98E)UR@Zgn1G@(NK+O;-Lgn?CP9zOB;{;^D%r%%D5#=%BUULPb4@2IJaOt` zc{3Tug&Lz_ejLw#SS0qS2WklMGL_c4=tmnX2thH}c#b#h2J>5S1O4jc5bPBI+b%wgE~we@j)13q6N%%R}hj! zRAImBD;2X|)RQmjt7_GnRpFCgRG~kNU1DPyUP>~Ra}~1H6HcqB60Z^YwAuy-2G^nTvqWSRR{@{NC=papuoxw8mHa`h*$8bG5QVHTS_o4VC4^Pl zU?TVk2xNP4()4LM|D}bQsrjAH|1Ep|_xHb6@-#UAVY!;7emayqAOl>hHazi31PfrM zJpGlU@NXg`iTZn^RDGlpKrJbfLYYnXxMY_z(3QxIx`K z#iFP!5;iujuV)+-K-5fz+RdpN^PQ+(d6l+V;Kb?%d74nA$tBt;wM9HN&-YL9w3Ppk zasPkIj{m>Ay}i@R|5ZHo^4}qPI`9H2U}#3pRe&1Z8mZv;W5|Yqk@tng6?oho=2!Z)d-s|0{VK`~M9s7C2!W z!y)5?&I2Eprm+lVz0gdHnP2g1d>OB}(6{EmliSUueM>#&mWP@$!7}}ukzqp~sph!2 zbAz$&=^hT!ob~?dEp5)zC>lacqJ&A`OP^o!(hJ;KuSCi+Mm|sOkqz%ewar(i=N_vt zREubJO_WONo5eI3ci@$c+n@3pqt*kdjW)zzt_lmHFRRyM@7NXT7wP5NR|P6B!?=W? z%pb$!AV4!M=a+pmj;)g{T=jpTS$<58Qy4^}2k`MZ=9AL^`3azmeKb(|?S+63L44mRnacU$x_;%T%4bup4^;WoPWN)xjH+4 z!;Xbj+B5`oeRFYj{O0uY@yW@>`}3Ou%y00aC5Ycn|D&jW?c*DC2a}dCu8*%j-(385 zdTwjKi|c=5gvN0r1+Y&4+uAYh|9iU!+r9p`if4KKkMlvV0CGAkp#hHXWFB@khpt$q z@@Qzc2*pxv^BNJ)j&3-y323ieMJv46dNs6HLm9)|&VoC*tokX|2o7tt`p=jvKZ=$k zdi1^MEu1!n;v%ML#^))oD`qmo!%x#V3K$%tW&?HL`111Y*~u}}Z%(dGU!R`eoE^Wt z?oDEU<7aXG5AQZT0;tpfcC7Q?-Mzj3{C6eK^7ycOkll^`Z!NR z{ZA+Xo1cX@K&SqHd%KqZ|6cF^znZ6w{->_P%j1@V}Yl7y?rW z0+2yMWfw|#+8Hik93YKyyt1X8Hv5@Zi4VXu!* zuXpwj*azviyg*d|{)KLFDgN}MvXt%sE=0rZJe3{Y@O*(=YB7OSZ}nycoJqU}lvm?yxG`Y}eLz z3dsb8#nx3UFmk<96<}9&#W&KqFRp5mfBTH72o()uG|K{bB=R0H;VK9Ggwv;N$K`A( zjYxLG7iD!{V=ds03PTdfKFP2A1E&gK-ftp7n<4lMe3>DVZw+i5d#BE2p9SPU(H4Ny zuLNd^9}8A;tp~O8--`cuczD>K|F7iH<^L!{Qvmf5#VcDChDOWkD$!AzwbtU(BnH21 z%;k5bKy~gY3M){VqFzW%T~n{u)$6qNe4H$G{RdFkbHzbb*$?`aVCiRJ`F~CPB=lpH z)VqMy$p5{=1JnMqzq51L%l}n8i^yx74}IsCLD!-rBH^tg&fi*!FgZ&ia{YhUF&WE( z@AxbitD0iRg(F2tNh*I%CNQ|evnej|%F-f=+4~OQ@$Qrd7^|pL6K~8=&*dly`f1IT z^!ZfP1UX+k62o z-GiY=w=+~5et1eZTr7(X!(D6?aF^9C`BIbu?vtOI6Dta1}O>khBcsdq2L0<0(wYb@Yb-uD`2>PZyMusl&>+ zza8ZhQ^av#4$PH+=mzS~KY2cqd7(BmHul))S~%7t_K4W1tB;12@}UMh3&gTmmTrsM z>i>%b0I1ggw|9284o&~R-JRb5ZzWH2{ePJN0BafiGK(@8{std-fOe*gd2-$GM7U*j z0TUDBjt7a-AvipLOnV2bS(7OH{PK+&U%*!*3_Qo5z#V+>3^?UeOwl9l9YK-H#LyNQ zRYev)l``RyGFp*mqyqlA}1 zrgrFt!=^Kd8Mc*18nBHp`)Y)wU>2E3qD>Q{4rs}2sV-XHJfs>ei>UmbvJ2BTlg-J= zR9&T=1<6UlEJ9AvrioDpjZJ;T*=ENe7ND`=*Ws%rcaDz`OUeghgHS zqGW_T;DzvZMt_pb51<9DYDDCUE>Y2%RsppdAQS2$gC$X@!q)7m>0qmjUb7KNvuNsP z5AV~EYTP9A2^>F^43GF6>7r+r!fYO47*ahZQGPBmDo%8)=9eBOXETe8nTk{6{ygp= zzGJ6(B}2$RYU6hwkzhiX3ASLcl+w!&9dAc(wA)eRKo?qLBsvXy(fM#$cJYO5940Z% zF_L=Oa3F^|N(hsnA8RkRcJ>~-OSh2RLzsYVmdu>CXsL!nOAU1Qtcs(`R%F9q%yhPr%TA8y zbNN}gLlxn4$z3AK_J-1&MCI*{Op`!xg{qk@C>F{jK!Twr@VD$F$JB4?t5@7n0A$Ky=#@^ zetFuafG-P_Ju^6h*#_Hj-P)Q`6^9xvYi%`J9POx(A9a`u?GYpb<*1gefGXiKIEG)v zor0rR!29oy+Z+G>>EqVMzkho1F}$CCT4OB1&-6}E8o`izT+LEUGU!hWS00;^R}}a= zp9B-Vp#~QmmL;qKj!~E$SOJEJpm9OpW$UY^^-W1TC zY-?lZOJ-a!cD~A9Dr4lz!_CF(izDzpi3lJN6AVTulNgH}U8XLvre*M|36tT<`y~2O zBw=chBUsHKYBGGmkTQ3uXwgm{YQk1hhZ^0gGfFf`GudXsAWzo<%V$kB?<_lWl=f9N zz9?nm6*6+Cto;2k^8)OQ+Ol&Sy||rP+*1F0jQkJVhgSZt-R-?T{`*Rvdi~EKky^Wd zI8PbrB%=~^petadwgZ7k`FUc=&Q=JM%EQFv4ipv4N-~jGTE*p}(&Cg~w7AG&zk?i4 zbmq_Lc{#R@@_D2Lezuulp9OL@*~CE&`VWQG*j{SZ(-3N4FLjVo!dk=(l{Z|0V-xbW zSpk~Le{rD;x5@h+CSZMXZ7L%^VKLB3o-VcITeBxH3zaZAsC|DH1Zgi{ln{_c*@*8)2q%69hgo zV4qy!_>2&8B@E{{PjOJ|H~27cy_W;-Ts7K}>Noh{B9qZjCsZoeQ`m8mH7QD%yhWE$ z5n2YnJv^0{j^{I`Oti5u@S7>|84D={{Q=1TYdbWl{_t$9&_MZ>;t9M zrcHFRhL&cDon%s6@mPCHYc+)a9e-A`geNT%m3zif8wG>1urjY!*~ch@0?s= zqC^;Ah6PkT${a7>HYT*4+@r)}zahnB?XGE76NImnXnDQXWGfHO=Q3nAi`18s={eRk z9XmQ-X(&FK)Q0`5V#F@$tS^9w)E;dljJ672i&FPLAw;CV1qW@rTd0Y8p5r`GkIMl= zu%&|B@F!QF+OPliq^sKt*6#lf%=q8?yNA2|`oD^&#rp4(wq02O-4b`@Cct7jGHihI z5>N+Lz`8iBt?y-(SpqGZ_NKu8F`xGGzj@wA`P9k(oqaR@_s&-D|FN2<&Hit98QY(l z7fiGG$<$yK9v49UIPn986$1i($wYfp!;x>-4|~2?c0B`+U7-IuO%w9GJa-1ZHFiC1c@{2F3OXlVa z@Xo)3zy|?JAE-B`oezq_{wu%fu%D6H=Tt zR_ut?vmq(Za&SxHDZzArtLrjhj;~y7F6iog1xGN0N#KtEDvPKpbiyO)Vi=FSidd(m zck2qexzI2hZgAPIio73PZ8Rcqou&>P_w*F3oA-F>fV1kzM$;(_qeX&Y7f9wXmZg0T zs13ne#nN^m-6=is45u&&m!PJAuq-VFm=#b`BHZm5#fwUPcDvT7>4xE3??CqWy3_g!0lOsY~@Brn!B<$68(C9 zD|v9mTJqpmlKIE+4cUpih09HLrFfg%P)ldF#JZZTUS%3VNIsVf9~4Jzg9NH4j6fTxxGhsk^a^}kO3 z9~|zR{vX@Bd%ga@l1G#Or^&n=GuHV6!sx|7y23;Awq8*Ro7)xFYO9wrV3;|#O@Qw03wyypFw#{HB; z&JjvI*|KXjH5PI~YNfG%W@vh(=cLh2bpvU{`wc!^!4W&)6)xud=O}`4NdI(fC{YI1 z6A0F0n1J=QIrt0Q!3R9x3CQ%sYx!637Z^nuCIgO&BNv!uW#mk)Ss7t6|HL=HKFHvR zPVR|6Zya5fwXD9;@WUu0$8kFG2ZJVAewe>l!N%%0=a#;P!)M~)5sh@=Bf@A73R1~Gn`-}F|M7&p3Pq-uGoqEwx z64$G$$S+FLbz(3m8C3X1>$yj=8T6c^yA}~RWu#f-v?p0Ky`GIm(O2Nf`SKTt(YP<(8Yp^gH3a0h0;Tin1R2!A7{G9m%ZP@r+)i0k1}h5N1><$)s;c2%cl^ZK7SB z@xXfEPhlMR7|Na~D4NYXW|`>e2+fkv%y*-gv9yxVI*W3S^IiG$HJX3LE`*gpGgDpG z_DK#0hu!&j(EhLiiITFh$@|^WAPMQBrlEL_y(*!>6=GTs4@a{&7IRvrw{fFkNx(wA zV;HnH(&{=wv2qovgoGtu9GS}<8_D@le&>H&`efq3JwFYtT?lM&pFF4bmcPmia(Xy1 zDxps_(#rd3^Z{l#LP=4ucxQoEiZ5*>Z)a<1yZ@&OX2eQm|bpk*ttN(?&wkXMs+)*VR=odK*3SFZBel)VnV{) z7`50IDa15F&1ogLz0NYG8IAFNXcEP_5fbgWw@`(nn>xxRTPlIqE5%#Pg`XM+jv-md zxkWG(fxp_IcdZ1nFmS8eaR^)%-g3z8gc3KdkUaze_%*`B%aN_^mA!SUurj-MbWdSw z)~``N$0a>3Y|)L)N~$pGc0W}%6v{?|or^N2mR7oAf2H8%cDZ>1x0km1|Jw+YuKhm_ zcg^^(JKG2S`QJ(&OaFh{neT_-mY+rc=Y4sc!$6q0jsn?GI4&g7;-=Eq$~3|zvC#4y z0*9Zsofb!IAi{th$u&uX{J5u+d=$j0An9P=Y2+u3tN{OIkkL8_Dox^dcQCl@%Fs&wkD{+IJZq%6o5LU5$g2Wz?9uK0G@TK; zIL=5EN94f+-Z=BqNfclYc=ITP$YneXd>&m#A&o=RC~o%C@(hDT41#WAHM)PVQ;H)% z|7nwE7{lO1$d98}EUftd#we-W3Fgxt!(f(0A?W3!!LBGNkt*BWe8B#cvX*VW)s3Z=a2B8*Kaa3OR4Uh`k1am zl=IjUl%h}-@oSfFYzo?dY~JC4osQF#A|c)huDtVrck`cA0(g|6R0+_mG8<-5pZ&cc zh|kxjH*PSSFTl;k>x(0BF&e=PjMEvwJR>X5rNGsG3`QseiBFTsiiJivg(!ZOEKF;Z zfa{avx2MLguQ=p4Ci6H(w|)#flgh@9s!gvxoL!&&^7i!e>(dWsC$dK#RhYacD}Z3L zvk}N}!h zUw&R5j1xi$lOaU@c}-a=gMP>+(!~`B5yVWJ61?{k#E<}dQ0zo7)q?I4bPveHCt!pn z2&PBsoQE=v|DoCv8)GGqM>nP*jdOkqdyvtiuKj`-_zUjUpPOrn z4J~h$IRLPdDgw-ZMBPegsOl>~4(XM7nX}5i;@1BZXj&V2SH%5u;fSEjkqn`+M@@l`0`Jp;7!iNm4JyPRFN#Ati{ncaN5Mmx zxiKGVuPEyQ?`(9A$YlmGOh{$&MOq<(s+CKx>K(`T{sX4_12|X0Q94alF1+(5+FSe- z8WsSXM0(HpTeV~rc)0MaG6Uu`{tFPq3|Y%46Rp<&I2ys=A!wKVyFvWlL+ku!f2+^` zy^=>;|MT(fX3@{V{S*tn(wnXq`w2pKs?bX_cunXY!b=e**Tm0=ChAz0O0@#~3Ih*# z6GBq)5B98dovKPujI=5S#jcH_^OFA~)@T;kM>peG;+7T{U0LjsXO7b+@R5RPAX`<5 zDq3d$Hn_(rSGS^MdsTKwLWne}N=QLYNS+V|G*ctCo(G zn1;^zw^$D;j5pBbJoRXuG(FWz4%NO7yG8$W^R&|cQk0Pe0zlTqf7vRl^e+bQr%?VxPaenn6T@sC1@PRT!k784Li4iE%vk|_51yisTX>-3qPIMs zkToL=M3&CsaA=+G=@<+}NnLy4@W=#a44Mz}O|BA*#SM@6*%%Vd9Hp$1n=im|60#F= zb}}crWQBMUxaAg4kesiLEDn(3l0V;`=sZ^%V1qsS|; z&fMMgx5Y&$yVsU3sZ=U88{fSnggn^5gi{5AI&` z@A=v(aT>V8dgY{4^MmrX^d32BnU{SfI_f5uaqujqDL*IHC@->IYlFc`$(96!f*!Lp zg&DA#(uIqMoaE18ZaC*dwT3w$j<8sN;zm-T_C1z7C&;tcxX1Mu_K z3-C^jUKvVTowLt~E@af00&L(XbRCxMQ3Z`IaWV2kcUZCwD`bj-gp0V1V}eNryMkY4 z5mi+Ph@p=O!`LFoOFk42CRZqfqz*feB~+m5@U+lKb*wfnn<&UeRq#5xl`4!+EnUC= zr{(&OZejZafa>*sduwOg^#9!1>is`g^Jw<}OE$h;E%_AI&td!*UFq8GgTbYHe$_M* zM{}4!j6LAdB`OksQ!XX5RCfbm0B#Il5Y4J0O)cXr4Lou3K5#ktX?8fq1=Uj9FI>lG zmQAoIZNL%cGKQ7YH%Muy#DBWN{^jNb227dQ3wi$tUZ9}bGlXci_)+2XQ!wwhZ*1`} z+<#o1bNb4x)>($rr|^>z0=|VO5Id{MyJVYr+xCD2=`{-Op0W>oiCCr+9KuuKzhbYl zCGdC1f~E@9O*DmQ=5(s4L^GeLo+jx_aIIMejqR4HKmv(mhl*rHzkg7DvglD)YNe@F zvNFXlRr4frgpT;-&({#9Cn$Yz$JZ=bF(nLBb#TXj!6^(tamjoRv->O}kT0_G{FrE* zlP|ORYmV(Zn2lipq4?}-ujCd5%l%R)%@Mcby@s*>a18^Lgj9E?OYJO!Hr2fm0(A;?VVNRaPrRbTOV8Nw57f-$B%ULZa7NNiY9{^wam}7irE9BiusvV(HY#R zpns&rHTE}3Yu~{4atZox{Is(F6@gDWy#KYmv%9}z-T&I}Qep-X1) z%M4 zn&mp}rH^rxjKS7R?g_*Fdl=hA~f3N0Z$ex)Uc?wx4%rITRG4RbsJ< z=vWmy=w_SHH<$18=wTfTvW2_!y~{M-v97!$a)~3OobeLHPgVGh)0td%v|xz(mg&vq z`-&S8fgeLU?2a8$QIq!3rTf>OYe?`EfIDKgVjjok-t1zEW*92Y)1!RzYdKpKm^(bq zi%#V3_~E(X2f~Tf0E|vC!%YML%luqNGB$`a;UvvdT;xR5ktj*YX8AryZxHSz&oii$ z-R~GEc4w#8ywXFb+c9oS&84Jg+56 z=KbOGcEKfj?)GEUHV+Pcol@%Z{Sja%ZAY7%863l}+gq%;&201a-mhqOwz*w+b#1-? z?@r&9RyaSu{IK&{t-z2NL#79~b8~qCRWH2%Uf=q!{~CVW-uU-Vf3g36+}il}PcH`R z^ez4KujxMqYj&P3kL#xtf>Le$u+PsN2-$a}5qRro;ylg}Z>nKMFxP72gNR-*y z*`tL{zosaminMsWy9W;jx*tf+My5LnCynUCz@eE1K7nJDsVUFpZp%~B_y5l0^7=7G zzz;*<@g0l@xJ%{;+(U5hCxk1u+%J*c2{6^7!Zk$Mu}UNsuxl$~yO?V{a+3|!xqJ#j zklf)wBjtwa)tYypq8Dpsw2fuEWAw;wput*D<;!D^d_KMdw-w?< zXQ)j_!9e7LOctYKaZ*Ys8>0_0Z;TQ^S*+!J^^zLC?jml0%a3!es4RWQDoUKFa21Fs zN{ZJ0z?~hg$?1m4CuYV@y0VQ>9HV>M>aGj{I7L!$5mmQwx->$l z=wFR-EUL9Zk~LvtXT>j{zyp#D(?`#BoAYQVJ9XwV6iLDlV*p%fTa(5SfMj#)I0dkCh{ctU8wS;~=O5j}(n!XFWs zfhldwai83<=}6Vf6Mr-H$~5fEbvufJx6_>Cc3z!xt3da@tL8WtF03D;gnZKdSJ`Sr z#hq%@;Qcc&ZRgwCS-vQp@X5}?5)040Lsb4*KIrke7$x~pE8vsEB1_?qsOFSNa#*p}qJL|%E6**r{5i5ri8 zl^LjHanhl&emW>)JO)avC&TN=fIeg%o8a`a2TU|upY~sHro3EKXNv9NQF{; z?=%b2`kiPc%#^TRO5rCil#Am1TOwDgg5o0-j$BE@8c z!7U8@8HRK-O81-ufnb8}69#}w>svTN83gz~BEcj|#Xlh<$G%!EA8! zXo_?jcJk}R@8=-!Q(DrMOt)Oo1*Qj@Ynd)Ju0`0tjp6md$$}ZltK@?Yz0LC82;E}k zZ`QlIcnmG(MAdRpfpD8?!8pQ7`CD1#`t*h+jBQ!xP1`#Ey!ie6^r~H**T*NHFFu@J zU7fuync&;~Hm0-JV_w^!Z8p=HKs5|o{FD}*pT{W9}ozNo!VqAzmL79G3R zeVirH7rJkE^-xiaE5^~Sa4CDaPSV@;PtDWH|AWA68YL|vzw)Op{_FPkzUlw5b=b#$ zTgjv6|1HM1o1;So;7@T_sP(7o<3W}B#ZGeyG4{vs(kBxScwX^BCRf#+a;@VB6{;$S zS;3(K-PDT;bw&lD@y{cKU^(Ko%vTCa-e|_}I4cjWJXN&!36hjYq{}cgBZqQpa z#uv$HmZ8iu*F`%3S80yeHfoS6B(=V_H7XSuVpA}knpxh)|DxPE2+ zd7f75zj9XJCIm!{|L6Yho|*r5cjs`cU;kI}XzRZ+z8z+PQ=tA7N`Tg%u9bi}iuwF< z-GyEYPzbMKHiy~SI6)Z%8Aao%pL)Q`x#38vE0qM5G)F~^mf(q?C4pQ)#_4}IZhw59L^`N zW*Z`>DoarSN6}Z{ZF(+@stsu+C@F}r%iP458Jm1CLfO5ag#gDso`8>=wWzM81w~C! ze~uEm*ZCD;a)a`%hzGo1qA7yk>I3v%3}SLwY38!=qGmXa?cQ}VY>rH7P-7ilBbf(`Ozp*OgvUhwqcZ# zuYuNMZe_3p3M(Uim`UW^lGgxaF`3eX;%znPKP$ovwAJsl^-w*nH&#FvY1Me=E?%fr zL;GzzZL!2PR^~!<d1Wf^( zF(_fK8Y#@C5ys3xy(HF<8db@?VKD%C0~gY?(52FvWoNCg<4n|C(ecKUPA?PiO zKDQ-Wi=)`m|sY7BHfXqGcXDFF-rFAcE<=R1YpmPW~idZg@~?Y@t=5ScMTfb*>v)3z5wi!72kUZEtxq`@*7jPkV!SVxU(F~ zDGZ`f6jUXMTpK|WOkj9j!r(>+oH#peV6Ci)j5C~=ID;IzaV|l*WDvk#U=(GTI4pRs zI4;FX;lAvae=b3;@e63omsj1E^3ACk%rDw_S8?5KY( zA0e`oat>oB4|Bwdsy^Kj`L|+LzZ4f=87b8xBz>!v53Y86tnZ~13JI8g0=ST3`&A7h zd*cGu2mfjQv^oD}DJ?eQXas|YAch+vZ_?&x_!R~f=fO4pU)#HT+s66t!FC`2XEl#@ z{!7OZ@KNpN=(i@bR>h@!nOAF#|MA@(2J1cS>NHp$_p-jT0^-k&%FLY<`c_lLp%0~-EvR{Ll?H+zCEL*ScraJwTP0^giA!FZeqpn^^(8M(~0~aXX#S% zf8UJ%cCfS6`~R%u(d0iJ$48O>Rp~8%qD4SWq51fWK-nt5E>$kM1W*`U{?k6y$bZ!$ z&l)%LAWMXbmCL-Evt}X9-|)1${O>iJf@1ZdIMOAD7USoatU|vM)IXibf02K;Yze55 z|GQg} zD;!K9cc&2f!5?ka*r>QNld9fm1-d0E-rZI+mxo!Z`II#r7BLvj{K@`5_Wu02Z6rw) z$MpWJY=(_sO++ zx_CO_|D<^5<^XHu{}WUHdvdV1;s4h1=>ETA9ydyW<#|A5n13uyKpu3)1wNJ{K;nL* z4QTk()Bg~rWN*X)f_V315TW3HlFTr?jQ^XNi_|)T*3kdM<6~3)KiWIo(EqhOJfzrr zm9m2|jA2G&%lm}+4XI%%#t%ux3>09DXBor*<$&96Vc-W@f-#t-G>6|V3=xa;CaG}^ zF;$n@pjc%C;l(KVPc#C;6HzIqTQQo(@pC^zo4ot)T@Gi~Z93?a6u9+nFvlMvqeGhmy9B!>HPW=F?9Xs1fqOeVKo&~Sg>a~w4 zbYvpWqjch5&8FaJ&tcG-LEvW)$RRP*;~hZZm7$~K5QH$u7HO^}XcOil3QjaK&LKGi z+b9mcJ zQfIpV>rW%4T^`+@G_9R8))Eo3ta233EhfS~w0lPT>oH|)%m0UW|MXGg%zx~u=Kl|d zhsVbT|9@~eJlOF6>v$@a8zD^b;K4_lDnsGF>Ef{*h?uTI>J~~jqSgaz%L7~X?ko16 zor6YI&tfkvW_N@H1&s{x`q=+aM9_MZDkP8qP#rKqTH8pIyUiM zk{waBX?fw-FCS5L#VsGFBwA&3Aj8j=Nbj%>+>=%i6bubC$K2C9ishrv4ZT zN5)e?D_ukg#`z`r^2~_1PK0+Q4f4_PU&RZa@R+|T$!tvf=M`kuW&W}}nK9EH0H9_n z7VqqC)Rp5o~l0A})EHR-OJJ{N#KIDh^68I0%T#k-d;E^j{m`u65M`^?1Pf562% zI1&}g^d0Ogvw```moGI!H$^^|x4(V+3$J|-7pH|TL;`eueslBBx9?tjN1&J-AQU(S zWN+WSKLy_L@Z@jaGsWem54_zw6z}4R$A0w#_QzM+DE)Tl;|ciB|NP6#x35@NFqkC3 zd-)j#vmC`^@Zx7cRyQ6D1|BW&;REQ$z}wQX;(^;+@bCXlaFAp<1MK4U<;U~i-v4@L z75&xF?o>5G(*JK$*z}q74dC4&0XviQ=lNiIZt!;(YkY$(5a?rro0Q4tv2xO&s=I68+;oEoC=M=?b`J%`FLL=}2cv}KQ51gF=@A~c4FCMrB zU%xs&zJ7cD;_~Vj@Qwfp5C((-OU<;O`-Iw|7);?b$rc{C{SWdbmOWF<@!iaqAf3IU z8{-4(=pFqU!f=PsIMN>>qy@qBof{XMd=lpX-U-;ohE6@~^)jaUQ%me|LHQ;^(!T z2z+|$&jbO~ySH!OukC24gifd$vLwliGvd*Y14^wq9Mc8<6#3y4#h^ct<_H7NEp1QSvef#F+*)9u&P5C@p zIlLQWv-pAmvi&c55&JK%=Yg+med7t}_oy~d#0rzmH9Fl2=< zUktZbdP{bCrr(;$YZZ3$6sKc(amGK@5|b}qSVa*>zrv%8`g9R+@L)8HA|9Py0itL~ zGry*{MAVj8e%E|u8H_Jr&OD&r{S%}~62WW-s(I;((IIZ{I*aq(8$#7zF)^qa{;xI?_2jb($D! z_wH>O4&K^0c>8!bNIJtoQjY`0d%EhETHTa6zqi$1cTZdUPp))q?)+8n|8+b(GVMPP z$v+$W&ow;M|LX_y{t^a?RjyxdBgWPIzI1K-5AO7(1KZf+OL0ejI*wuDrlZ_P%N$mN z#uR%sZmT9QmZ?HuJbmNLv*xp{cDM8k^wXOW) zcr==4sO`?^JQZ0nxxsWlMY$BjYdW9Ohmp;0Lw`uqm$C?U=5m50fAtyNm0#EdDxW#o zEDG>R>B5atEP>U1C{1>~D+kIJrZL~gck++$w3h#wT|$@g|IyLmktP2h?r-G(bv!?$ z{LgJ*D&>EtBixGezh=Voqs#vquzzs*pF8GtBmeWp)++yZG61{1?;`)J=8x6#KQ;Dp zDgc~T23y^{h34X~ z)kq#;-UwO!%QW(X#@;chy+cxU(eFx0RYufdIF~P_fXdJ)-xHLU3ZE6SYOS2Rs@TbA zumiEv;1bs)cB*XGA3*GEEC12*t)##D_@Bd*LsS0SJJ`s7Yk7V|`HzJas*?U(frnO; z{ZuF1HA#LA#I*44k_rKe-4z=;{l8>AzY?VSvnU7Np7#UFZ@L?E13868S_ly}0xTK4 zdN~44$5NlQeg0|>xP64c1c470{ zmE@wd#>c*_)S|VtRNzm$g=J!X+N~@nTe#auJiSiB zNQdwtQ_*TmBy>QPz_Eug(8= ze7tAy|HI?slMVmBj^{_@|Cy6j1^e#^!L}OrulQ1xGXJDZckI8~THC811zMxUbzkXd zIMJxMgr*P+)WTda&^*;@?qE!ewdt<7Icd^k*RlQ!-`8q({;z-gt2@enO~C$H7HM}H zwv%FkANxMTaH_0l)@g;Vc=e(&h9{L%mq0h-A=Q?aV%4n%mf_U3MmVb5^VVuBKO{S> zZ6ls^QOs5ytR|8O8&ig)_VRA#$lSEIN$x~hhYXWhPYk$_uBk_ zhes!7{P*GUaKrzt(Wo^J#Sm7 z_ne^6X<+QY+c;VPa?nQ*TwVi&0iLDgV1pqDW?2T~JX(-LhOU(e-RTNcJ^5hic+^qw zB#l1!z<|8n0e7<;jFX&ZC-m4L-j2#(Hxm@nAANvQnHRSN|7t?wKeWoA4gDum-In(M zTRr_hI6N8}^nd^8Xp{eAEssh6ugM&DLi_1zd8%}u1K%;t-^zpZI!p2-NSM9Xc7$+F z;7C1@@t*!uMA!aepsz^+)jz>YS0f+eFOvkU4 zMI$hs;rv%0E7kNhs5WnRz!s(nf;~Qdw7PTAI}`ZxKKOglqn5D06gPe<2f#`yFXXwd z;N>fbk_WTZhN%Sp&}aX@wL1SPqqh4|{A|Gp)X9HGd#3z193CHS&i{2h+W9YdaXH6b zFanq~TKsyV9Dy~8jX3y+5C;{F2aA;TCzA_X)Bh!ez*_n5#LWMGa5UWL|JL$2>3?TJ zAfuX3SrXJnun`A0;^0Oc+=zou`^eXx2Is%ve&QTvBcJd9b3Z~Mjh)(s|Nr5^(2oCi zyz&27%fl%nn_?j682m1$cqKl-Tswne=}3m4^7OAd)$;`K<{-!?elD_BVS3n$z6qJ- zgJRh%W*O-}i3g4NfXWdpA?1-HNIj+5aU^0SgKb?FBix5qQNGu+Wy32lOW>;lMxV*klXhQ55I4k!qndJn6?HHEe#>8s#X;r7x4b?3j#s>?YTktS} zv4&P282$q*R46j)(E}l)z5?v?I3PSTciR#ndtVOg-os%9JHk zfX@Jx5m*&f2WZ09L@aO$H-RHi@F)(Jj6hSmz6RD%8w zNXPC(q8#3qL$@q#&CRt!A&`o8tt0uPr>>-D08rO2JV|Cz2r`Ig5zRl1lPSz6C?10d z-9x(fS-zPs96`LRQ~3hWOwgsKlw#b16Eu$IyX$(t&x!*8&B~Tu?2S z-rV}d;s*3T9%m5a-H-gLw}s%xpE~+~aBSZH92}nPZRr0xo@!dgrhahe2lp^$F4S$T zAn-hp6i)oD(!e>)G895a0mToMR~BjhmP!ohkgm97p>`!j3enF%anF*#&Kq| zz(!l5%UI>%7LYqK?`a@Y(+WdRdLo2*>;8R6V3f!Vq#+!EH2 zO-_7P)I9F%4}393wF*Bl#bnxtzgn2F0eq) zhZQSj_v}eGZ-@oJ1A%>q`DZ~>wluz2FT!{GmSY0S=Q=e^aNW}_?SFYUhFP;YB=WUn zJT3y~8kFn)y6kPco9;Fw&b1XSldU8JzO{D>QdhMX4VGJ;c!Fl@=$1Hh7!4J5E7U?Q z=n6gm=(KYciCBY9Ak2ZRy4P!Wxfty;eS^zIRl3Pbw|70MUJjuWhZePNgh(nc!tkcx zcUBU?oh#qks?M&pSbbC`HA~1fQa&EltwDy%W=<9wc!YS0IW7$ExgUnXDJiz`+IOc= zYp|)NglrCp^Q`o;aa)0ic|GLG4fRmyY4@8P9sOqut!@CD+W!Dxx(kSrvG>g`@EqWGtg>jT z4`^^7XPDr(74FKN0H%JriVr}URE>E-%UiKbOA*1?#K`tIR~y>bN4?yjDboo*`vLP= zhopOT_#tIPMV~dJ6jzZuU~678&b}$TQSNAN2^nn%HBgyppG9x=z}9`4ccKl1?Fu=! z{UDbGtI~^q>%LfN^InxdWyO7|bEomWeG&N>Us=~YD2QDaSym;3t<^Y3(uS7@eViw0 zN_g$2qMg|bMH88aJ4g^kTf5z1gcxCvLBi$35R8(Hc{s&>1ZEhzrM{}me$y!jyX*^W zhz$=M+$zR|?bk%xsI)9_AdPjbEGW`$BeKQ1t2ZZ@nEThpkU-;Ppk%phjXqkr&V6A^ zr0Aq;ly_LR9JePvzRutXeU>4kJ=Q||V?qH@tV_Z-jal;m(Nw=wLaUctt$6(O}-uE-R6`o-EfO78qih=WT%5mtX;R(B_b9o+mNlO#0;0~owmkK6lXGn>7|EU+ zpLw~#wpO2cjCFORMluYwljuMijPqIZv z9|7(r9Bmcg)m&`{05|7v8}9tA0A~5yl-czchqCXdd|^&zb%!b2aXrr$t-%>M_(V%UrLm8zXY-FcrEaQ%uKzfiI1rRrl{fZ@?H;YZyBq`Bn`VifmdXQB9XFI^Aq<=O zuomZQ;jga@M|Df3%xQnhyFtk=XH5HubE?{)EKXKuS=;xPW@zr`uzwF1{frmur%8kY za^Rjv5B>ssE(Xmaamy|w1+|S=RCh~;9tF)YTq+>@S^%q(zU{`Bip^fxV%uA^7O*yt zz+MfZ^WyEtJthCR&$8$LB$>k0AHyc5U^Vt%`zLn%hoj*p{=-_H)?`~ueD{aHXt|P% z%R+sdy%(S4Uv37VxR;@VnXKkLpl}TB8zA?Q>V`_Rp?Zy#X|NtpsEG4YPAU^1<)By> zz!SoFuQ(s>5^DTw6cuQ&2Btu8R$8k@(bS5al3lco2vT58xM>&Q(lt;krthYzsls0r3m@V*v;!fHq z&xgaJm>2b^pgc|Hkcz>C6(LmJ4|14cn#!1`=jLJgN!z;npxWyh$lw@$eh1UY58!ze z0qd#&IkgCo5pedD|xl3$diKN9)Z zZQCBjGt#Pc&F`F9eQr)rQ9--%V0GL!JFYuz+MDBETkC*~O-~JvPj`2p<6Y_}K|9-K z&3*-WhNi_`bVHjG74^JRJP%CN8J-2^HSQNJl|w~6hbXJ<%Y z(~xV_cO~@$xJ057hxW2(%@o0-7Hp5q(%?BB;CVm;@3C=GR`kTu6y zGD{n=9+jQbW<-p_lAcS#A{Rs#qVdGqhV5Zt?Ra2&pm{7+uW4aqt%j!b({yk@yMtK_ zbBG5h*+ntV{WySU&+$&0go6l;V6X@x2v7{RQ64D1<6aFo;yTO&gOY2o6%d{#VIRvt3kA3)VOKf7)n~alu*r6=wxoZZ#rbT(n^L-&yIT$k9DqQ zy0Q11jf%Q=!kWZ6)O&MKe6Rz0yZML%9^AtP;A7^UbvEwGE2>U)piX(HwFt!+#xT+yTxSG8?BYgGuw zyFY=qB5Wzg+ctx*XN{S%bx{)dk!An3)f7=K)YsN^!_Ae*0&H4ag^|55A=U0aj16l} zN$vhMD_ASdSQiafK%?=Jfv5wWnlqJ8AaE{+(#eyho6K6iQ8L0pTo-sAULt7?P`<*69tSB)OlZwFg$}XSn_ZB-2+m zZG;rZ(E_jz3*%frgEEV?b6r#cy3Jb?hv5JvyYqcNN+0uCaN z;2n^`zK<~)vy>)tKSN~el$a_z0JC2WXv?;K7-D~S#oAUbw2FbW_p=!#+0@VT`Yj`-0fh`(l|=7K#jNMK7PAiuEF%oY zXb$5YLUma{Tzd_Zc1vf*?Dnj@c-fk~q&e$dK;_wj=DA042#^ajsw2?)x1bv(v)I8x z8`x!j?Dhh1Dq(3PJGQjtV4W&if;`s0`L&wB7Z5P#ASI1IiotXirix(8J+Aoi|E-3{!ej97-XSm%z3d1>P;Wq zy%}skGe)ZctL5sfSN7VeVr;^GsU*1(`{nGv{Si`ssVA8puJO?Cdb4DfQ)_<7464_t zZqBsvGREiWyCqvw)cRs+NtK)``=~5`lY0e6y%nz%94)r+xOafl@|vYi zeyhX8v|MemBqo#=+hbztBn7Q7Q7LfOp~I})5l+lz+atyT?0cs5YW&pS{|KRH_oE+0 z=LJ=49t5_=|8MWey8jstH~C-I^Kg&m;;f^>72(kQFeJP~0{kfA@l)|CUiMOW)|Zh7 zwt#T4uRP;Q>x*4QfSP3)jEQi;u2#vG4g8pl1rQLk9TsRE%3R3RH!!kKrpwj39e^KU z|E~J9-2bm>{>@I~Kkw}y9Gm<9;9$7f|7&^Zwqdino~_UNT58ves${QCU^E@z30t|R zpt5^4IRX8fZ(hbo1{uX=%pJqu8NpafL~6zwa}T2xwH4Dn0Gs3lkM^{o z|L`*lGkh86FdO*+Y{(7P(Er1OJv08p@xlHk{=-@x9$4umpIRX2wuUK8lkg^mK_{nz zwXUv{P-C?m*#k)b6Q0F}CbTJj_9z+R7Dk9=H7rdUpkx{#W!W#G9YgWBxUb>0(j;ti zY}JmfYcncDI=PHP_}RX0R}CFWi5*_tnM*D3BlyyUUJ+^em7@~g{XB{Y4l&Gu&vdpl zi8|@Yx^^Cz6%C!7HVj=4tbJkw(ZPBdVQ9jZWD>MEB$LQ~@?4kI;L^Nx{F2m+-(SRr zRh`qsQZ$QOb|+m7Gv@Kxs2#~&GKWl6!N(}#BsCkNItn|B+G-%zXoy&Cs;xKf7lr=F zSfS{%wLI}f5|7Y$#$ zHu~J>TvMO$Q~kZ3<5HM4b9%;_c}-1j`ko4g1;II4=_t6T{Y5^`saXI>m^A=Ja9KZW zUSE?s$~@}LGlK&@K7;{M+D%66J;XwfMh=c0brsT!7+1_Pv7@$8EPC%5Ysi-A<*zEsxJk9pDVoR*3qFB%yD*p06yH;lD z2H37Z9)2qngvjMnd*Z#uD@h|OqyEd$@${W3WYxR%T4r!{V>AZeISw9bCMWbTr$;s z$g*r?vlyV5<B0#svwYEA9@7C@P!o@XTefIjzc z0ZXFAETQTBXB0WJ0+mlooe`>A)2Q#IKQ;T%=KN2!tBdaJzlN6m$8dOfusQ$N@iegi z>hh{DHEzG!T7j7L`}C?Wintv{=EvbVIUTNMQ*fkOLHwEbc-7N#|38ZT*YL!)|2o?6 z|7&@w?Y}zS`pepWDODQ?5A9qWM95k-Wugd6D+*C%gW{3v?2f9xVl;{QtS zJm8W4_w)hKB)(CiT$jLBge)upP8O(7U%)F_(tvj@<`wk8dvOCLGDG@+g;AiZQu?uBG>+NY zk{1@S* z+X{iT^55QpssA}R+1&rG<#Eb?LcJ^|yc!+4| z+~V8Ag?V^kx;+5zCy=J`TqHBW0&v4cq4$1Bvim6UTbX&AV{0p>ic~KH<)>9h8k;IV z1zi>gl2U(5FZSh&l6->uBB{msIb_w6VpT`}PZA;ZZcy&f{TnH+!>0}XFM^b}lL71K z|Iv|2{|^pNHvT_rc~~49KE)m7Q!nt%KTzRM! z_0&%X&wy&W$jYirzN-R(m6cQ-eUu_?gvO;J`BxfL7}1OsMI}eVwj*l2RjU3vzKD>) zY7`+b$kd@E_Opc=1!I0&+|0^o80G!C^@HY+v^)^i<5ETY7K2l&tvW&%1W!z2s;B>H z67GKVXL<4_nZ-Hx5k3zB^6Pza59<$uI{JU?$p3vZ+|d7ZJevI{ndNE8EU$7P5XQTz zZKocuG@yCm-N}e{sc+{%JwF)Z&)hpHnO7`n@&qtlAFX?xgo6gWfBm4kzN?bG>0u(J zFHnqfEI{mnTcvl@WAJ#?jOt!?$<;O{sX6O#cffG1#t9p~$^QYu?EGey#JA zYE0@@4znqWnY7m$6s7WVfPDM*tPi9D$+UE4*B*4d^t+Nam8QEBI2>d!O)$!nY@xi& z{jt)(^(>06lL!SY+)Ys|l^3zThqgr!7!tRP6?b z3XE!k2io!|$pFri48>yrv;7Rt->R|9Ns``TrlEY~=s7JWR$Hv%8X^hbA`jb@KG(e>sqj)d0;H zK^lSWcl#Q(%}LR>g8#`LuKX$7QGPQut?3UTl$=4aObnM+vxR|~=u}*AN(IyD8MBXk z0bzQPqzkJFD^#9H+ttk0WHgH+!`{TQ;H16@7Pc*WN!Ifj&@#=4G+R0@L5X3dJKIQs z4J~t*F>Ysh#kk3Uph;~bc&0OQVZ(N=8PdEakps)x&h`^7686k1utD9f4WR|)w46I`2np#>Z>fXh&hJ)SPYhbb4fWd2c z{)cV+ea)xl{69L}GyVVe_J^DEe=U!u|9^3H1Gt*Yk3+y>6Rye-io)4ui6qQZ$ zC8RaY$5zpF<9l8!N{XP=E04lA;vr`jvQNTpXTsf%<^oQrzPE)1CWG#B(9haKs?fwM*Nfs1`k4MhV6F`PU zvx3~i1*X0N8T>RuS&_i~i;{bk)n<4o_+Zt)3N92BQ_dY`bC_Wdco_OwFoEPxw(+rN z$^-(RW6sWzeMs7@%aN$Y=I!&?ymEIBp5t3a1XM)x@qZv=xgB^`H&t#_x{6db$}SI6 zId9H&7K44Y#ROp}ayX~*Eh@K!~n z(%G$PR>?bZp^&~%>YiG$xA_fQU--=pG^c__6XL*)#A6j=j+aBsv4$AYQ){e0MsvQy7?pY{8*)G?){vq4-39o;n8MaECO9(|8kZbl=6(Q2t|l1~+bd zjpF+@;$W@+$MLc0|F?gziT|>eN0a~TSzcB6vs-+!vY=}yU5kc}30S+SuMLC2Sv!EN zwDfh9Uypt7k|Sx~NJc0%1S<*7si9<1 z0Id@dSGq~sJWugyasFRkUo3YASSSAtPt5#3d&kF{`@gk3_W6H#ebL3)e|dfJq|bc{ zf7fR|Z+QJe9q-tXe*`#{;+rVcf8WZKh${_~5#&gH-T!=V}f zWq)J;xu(aa|KfJJgEOG~>iFrL19A+HaTf4P`1PL!d{hoPOF*hU55yW-j~=fPz}59? z4hPc4pYw2NLI1BWU#yY;-{}9=^4RqM`tn5=wEz0@#gnG{6#mDc`2@e;h2~#hzHpFF z0!}TxCxzC=|5w6UUZ;k{ixPi65?}eWp#Q&Nm@Q=mUPu3rE&9Jd+~j{*&tubnI?bCC zfUoz*IRhAu?Nfj`Q&oDN{3@$kB$B;819>)sP0015oH7)Mo_SBxq>^!uQZ}TjYl=rY zkxIr?Rl2LeXjLEK{Axk}V}D9B|F%8?>gfN$o^}6!vZ4R$c^vv5e+s)G|IDTF3DbWz zfX5*J!j;wY8abZGDi+1(o~bPo|86-OYvxny2$^W{RN2C9jWR?M$X29kdyhb=*^)N8j&XYY8tZ{UGG@$9YXx^FG ziyK45ENlZWujR(){IvnAesZL7a~oKoBS_pdF0JQ zhe4oRi{AxF5uw>&f(Ofr;S41-H%7wX4@zU4pQIC7V7s32bF`rkw&?f=eMq>!Mom1KWyc zP!j!0yk-Ks{He+9>KS`J%E@|7BY<*n2ZLk^3E#oG*`epJ5AKpAG7nSXfG>JrkreE6 zQ~^j;N$MxE))3WKSGH7WwC%ID^z0=Ezlt=6kH0k;WYLv4`g@n^LQ%8-C|3BS{;gNV z74Wgijzy9_I(sf~YGREQjGf*j+dp+d3rfetM$#@61n*G?q%596*Ad(_kz-}4!@#8- z4Q&&AZOPzkDlK{kr^y_$upcx}XqYepl%~-FBrzbg83YCoQP;l`=UfSOTmv(Yj%`)g z{RzD1ObUQ>b6~&c#Q5@OTMbD4EiDJ zsxiXF=Cic2sV5OlPdfmaNS7zvQEH?vusfe;sio`H1dOn&217-o#273@H33wHS6Pn{ zLLq<}U8_<28ejUUSEeHQ=_S5oe3aIV$@!EHRdQig6rIP5TDanPe`DO@lH=8R%^z#L z%}2p`>0ZP8nvRCB63CS6|DFK<_-dCQ=4q(^iIY$!9_sx5|72+DfA&vKHuwK)d9?eV zt0aU#D!EtG0;x;p$!dS}L3FM4De~*DA<(Bf6#YJ^0Hb9bfL37uR_tG93$BnAXE}-n zI8V~^C{kra8dlPjaJ&~joF?%NBxlvPZ_hlc8~BWHj^eR*%9SRxZ>9^enUMP(ur;Te zqGAY6$$x9^Qm(M1{9E@T^*+@r%v%O-WAL#M0ZW{F4e39bL|r)OEdJO2;qi&3|34UR z=>J+Cjs9OJArR9H_&l$A4Af_2dKxEzHI9xC13@Va0&a9mK+(tm(|3}Ib89&r^>0ff z-?l$=wlECDLOEsku!TOb;ZV9cUX0ew6GlSGfP4e9F(e&6WGIJPfr=AoYn;x`!;sw$ zsETgoO!(#cH|4UyL_y$3@R#e~6zI4G!~|xLnH7km1h9b7A&b5nv6+=>4k0wl?hJDP z`y8saD%dV>=_}Rx+3M*68}9o9?Z7gI$?h(&W+cGJD)g7yP@9ov?U!a0lssNA2i=&MsdrD2env5`kN^b3@E zzzdUy_`%P@^Xp5GDn$RAt`05M^cFp``Lc0&8u0a+77*}DGv!VBN>&P)*I{-8CFx+? zWos>a)PYsrT#*e_(?OCIraBbgwdI{AJ9T@j76{iKYcgDWt5xh5d10^&PMciesjXO3 zO(TNac%ZB}+f0soMRk`|!c}$KR?@3$6FR6|spm#LUv3|-Z~S`*@GOHMPH4z3;N=q( zkFiICsZ$oEBvL;SVk%^x4#M^KM96)UQgN5nh7h>@zLxKu2h3^MyF2dCQoZv~>;eWk z8C$x?Y4tk!QbcfTZ>!Ke376ntE>!hwyOiE0el_B$kuhE}Du`q2puVr~Vy^P>vuT_+cn_@iyhFt@0W4!?$s?c$XykD-=Pd zXz!I4pT+0+Dv3$)UeR`xgYA;SWHErR0L6I^?Dr~*vg@y+tijSO?>t7RvSf&~^-^4I zDZHa5wQzWB{u~|8Zf~SiYrU zek@!b9sjl0bI6F>A%yA6PcuKNZHJtJzs2ZNO~GDO;t@l*{9sq7#wQbh4nYz}3owh( zrx|4NHF1>{N;8;T7*CTde@E$PLozpk5n%%?A~%NlwPsee7wvVLHM|zuY_^L8)R=_%lk_WIIK{Dptc;BNv z^mOU#{lw1!Uf>{)gaAfxo@8WBA0{vssfCoZLYBB0!!@xWzz3KE#Fk%M*Q&?~3$qlvi za~JVE$DXZF1o4WM%Aeo3xd&O4(&R(v`ZT`OmA725C~gA~dkik^mtE?D?h{8cuZ9Cw z>z5DSo%88Ddhi$61KwMD?7u;H>gU0vI;T_35E|urGD)s$EKBEpss_-cy5GJ%N=SE_wX{#-)2`yQZna7b84q76;ci63>{$g$@lHsGyAO-8d-^m+-6{dih#-d zV#m=r_;CBoRmC0-r&^>L_UCCWTjCg&wmt_A>&ChrM5^2Z6oU^O48>g5CHji4SYYjT zebG8~o$=YKN-|{R2{Q5tG04gaSIj1#273xk(y2$vS&C-Nd_*Y&04A-vJAu6YeVq0ap;s)rb=#4=~ed; zsqjN1>1)%3?so^7TZ+GebC`LWH2=y+(JXtEc(8k^fGC-!w|% zMjv(dpi1Y1aXKUKO~WCSlTiVmVR9oYjtlp zp(qi(c;f|jnW=2K^{)f3#r9~nYGZ53TCu;XJe^fgT}{_+ad!%cCDB&Y0@EPtCJR)9)GvOv zIlLi%;%0~k1-eVIm4CEb2)=pg*tVLFZ8kMhXh_dMf>slOz8;u}h93l#9#z1~XHwFv zx6O~9FCT~CeGX{HY*<6QEUnI@8G9lqJjyyvnGoq3H71HO5v0%8$!i0tJ2%P^af#lR z(!EE5;UAO`bG$<)^kDwyylKDP4^QA*Az(aK2tE^!1u47nlm<1q=3c07eUdvo3}(3u zYz?cu?-4ehUf~mh_O&$>;%!8$nj=tU$yfcx-UF3rVb*|aQ17^1`k;5vPxIPBse!-Q zJf8}UW+M3`Li*>g{(SC#RUUe~w>~97#%d9Y7X(**&c=aDfmK`cxS_i2(jGB*+2m!g z(ez<+m!I3(Dm_%#`}I~ZTBztJA6Om9 z2>&^E%Bcr>JX+1d1YPq_MU5{n7LVV?iL&~K(~i{@zdY11CmHX3=pf^_UvGheYaGv@ z-FI+6q$OVF5Ey2J7M>8Dyd7oyZFenb$UH5SHAx_*&2y?ud;4gOB*~_2uu(iPP=edti8!6Ut!+*n(~ME6aKLg zCQ|v{cOH#t7t7$1A(mx1H8mQOq%lN~4bow4V@T~5^`RFE_bRx3Ap=^Eky`16jBpLr zq<2RR+<0m8ulOF%G16(bR9K}HO&ZC(>Qiz=LKT|NV^au+%h05#Jf?6SJWL1F+%e7L zI@}f|J13Bo^eqj!+HI+UOU7s_*j~1o)ZczetShmTq8yPjOB#^zdkP(v30kF-TNpe# zyT}X7Z@5lbwOPqc2azu{1pH1+<26}AjaD>Qt{RkX*!d(uWNq_PO9Lvt_eAU}ytdVa zibVvh6PHMMV^Yu*+%mLshT+&xYm&1$!s&8rzNa4BjQ&{T&~Gr(T~CK3kc`}^jgU_h zcY?>HYxb$NLP<&w5SSfB$SKGuwi-)77ut#|=%)$1Pwx$pGJ+BJ!KF;aJe1=J((23+?4o?Gd$jlT;2K=5|>HHjJLUR=n8L%q&Ue1ScrJQOPPP4Mu&~Ecblz`wVZ1HrU80 zvmYfwj2?N_ZkbG;@l5|NH1ji%o$O^}moi`SoG!Ne=#~TFtOdI^P0tPy5)uRPd(>^R z{YhC!-(dHlJ{f(8d65!wC8%DDCC7Pki2Qy0KRO-@j)^fE2i4>utK-n5_-R@0@e=1C zKo*tDOQ6ct-%BK2FPRSUsWQ6grw}2)39jJA6F_6rkPCi}Q;EF^|AGBrhebmGJmgL` ze^^*ZZcJT#!|Nm7ft34B11@=JuI6F>WOk!yR)qG)zd=ZGGVTy!QgcqGG=<-S5fsIE zV!P_Y*fN(R8B`f&&U|Cc93T%8Ho}k-yuT#RpvZZB#6a&p-3yMOnqA<9zQWxb0q#pN zpO8$2M>|V1d;u9R!kfVV>cHDrZ9t%1A`s}bxd%KvMi9N`H3<>|j{@2InwdgfI=PH? zG~1UMNpq-;OX-#pOh?229JthzV6`2-%7>D)Cp+xc-%(c3F)!g^eOSmSAZJ7TTxo(5 zh0eBzV6p_FEMnvv!RA_hTzh?^SC!E z+#QAHMLF)`_4qh(pC3Hf5x<7b%FvO<#c^EE$JtT3Kol{H!-UE>7B}2>5~1dHWOqKS z!xa{^Vr!7!S_#qLoYnGHl$|;2G?#ih(QeCnn-+0>VZ&X$J5@NG>m7OP;rsd|t!s@^ z_7$)gi|4b``D){}j~~00*f|xYWTWTeQZ8+TO<$pm=&f%snrZI0Co}Ww^BQPNOhBW} zh>Da)8}1FJ!=2QtLml41+8G7i8X1+cuGIERPA%Egw1!!IwWfxOB)Y%lSzq)P-b59o zW!CV(6b(bK0cQhThLrf9G%~!nDo7*h%oRB@hVv@O6N=S;a-#U)HxInRv|)ZW|3T9W zhK|*u#;JrGH2)${#?#sSHdzx0!L_A1I6bs-YA(R8cp&c$?3WVZ5BILE&YF!xVd765Fx9Ry%Xt!d+Hkb!aWvAQ%8u8?6K*S=f{3Bh%R~6(P)DFNxe+xh zIit~eQZW{er!5|hyzw{%x9FQWz_{X#KfVbzjEInU%ze} zgIV#B5s)BiQ=Vg5R~)3O0DNZ0h+>>gxG09{_i{%qI;4tQa_2q~S~KTWi<>;t9%Lf* zuD9v~Tx(Ud(%He}4;2Sp%l!G51-{MEiYv(0o87kRG{^4ieP7Cvx3Mm|m zH~vXgp{M6aN;RoBAmxhK!;;?T`AJLvbQhIS%fTz27u<4+d(NkRl+G#zyX6g~lS?&9 z@DxVlbJc*cH9UlUWzw=TUF31uKV>vsUm;|h%VMx%(=1o|i|A+KVi|eVKl{xNOr~ja z@1AvxNl%-2Gqr}&t+lp7F1!p+@^Odm3U>d`1q8RRi(+G+(Rh4j{wLk+t7TvRM_R_7kq~{ZOACi%^bMHjkPwHDtZ!T zBg!B9>t2jt!;PQGBr`Z2lXw2R-pkCjyCfm4JThqk=HQgPa8rh>JmWNLHwY{7&gW$5 zb4;AW2oUu;u5=5Weg5|x7?J&iZs*PUp*-%`VsAV^@}zF|7M<@t@uFz*!%{uwc(wN^ z&|YhLR`%*2A<^(A*N@*uv$W@WcFA2fX@OQ_*5+WME%XCEH{@$>>65!B515Vc4osl% z<5}%&Yx{WL8o20kys3pFoW?bJeFv?pRWB*8el{`!0s9jojx(De@t2dp$B(Z4;B&#& zd_qyUnEihp1Dtwy?)S}3mW7xvC=wBIKiikuFFgZS{2N};r{SFiAzndu--C3K&W#G! zAFUtp8(-nhKcGkIf8cb*`{9I+@kW|uK;ne9ODTDwYgt}yCF1xz^C_BsI^4Ox!XSNA z$jyIaWKvRN9~8G5no_CXkok&3jShou+Fg^PX&Opi87-w6Yx1miyU|UzFJcfg*l`Nh zeOT&3T$72br|$NoYSk=s3_EG}TlG0ub{i{R7u z1)mU76wso{;{$Lyf7w24b`XDNdmU(-0sUQ8Y~^|uxOuc=N3VjsS09-_4GLxbPv^#Mplh}8I#6x=I2EY;6Yp>PX3UlvcjBbEkXNAmx=RO~z_+NL+iM7j zbkE(ql}ay>90CITe|7>%&pwkn{aT?Zl>d73BTjI-9Xa@xxtq4wfy+x) ziV>*p2D9?Ot+VtDapn)1ie ztdHSjPJENQ9YyiFOHpV~ex*jze7$;3j@r=ZDb?7!b$O;X(H}Tnw%cNieC2Cb`78Cc z`al^*3FItmyq2v69OnXE4(BKOI7_xpN_WU_%Y1rTv3RkKT$6v2MfQ^cBrib_Qpt4Q zehSfW&NN9$#oa4%Sg1K#gH#k-r4UM!CaMOwZ|`YGS>Ct}MO=BjlhWYAeqkv{d>+T< ze3JaL*_=y%jFY_*JRhN&JnrpDd3D?=#y_8`>yP27e2`kpv&>9(tAoLf|XPt_TV7 zXU8{ibLHsfbKZKqRQJsfG-V~EREg)5lR!izHiHdn)$%DmxA+;o1B3IGd;~2K?W2$h zed`$^Bc(OWCMU>fsmUnILRY#LkFf+y)VQOqbH2l<-YJ1^3`+HMsPBXy6^--u8E+3p zQtJ=D67nk-f~&cfw%j95>7+fiRxEu9vOMS|l#SxMp<#AmFfM*LUYhm?5GN;?U>$x7 z+rfBZv_C}4wiJ>=7z!t~TKe{E=VI6F0awD2lUGVtBy6z5)z<`F$NbThznk9HSymTv zH9Mb9-BlcFHj2itAg<$oazLj@JkC{Bi!H@M0jIIgzO=5XP#0TrC9`-IQu2(p zZZK`nZ2j?9S^h(W)FTgY0G^KeV*ww*wf_GutJi>btz(D0#J3vSMo^s`ion8sN%zgq0LkI zFDO&81QrB$;)evtuBhk3*yo{iKdEjJ;qwHH^Mob?QXwaXAl;AVlDO`KE!c5aPVwNp zzG5hNymxmJxkPjquo~+BKkF_q1kZe$_GvZT`7k`-=TUS3JS5OJ*g1FN$mhcwFW#i< zwN7?NhXrMEC6GktQAFm|m*{;{kCcA1b6fXo&!v>@ z;N#n#G3K2lv(~tz@Iy-~vPDFQ)&Ih@joL<9-rH3ea$?CleazxBY787&Xdqw6*}e2w z9HV;_bsK56A>F*N-=9do?b;>FRl@=rP)d9fW?z{s^>{16?n!TUixp38!W!1JY2P(S zTX-n=3WPm9YDSot)xEa#QieRB-ldlN%=-F$$njde!3*l0Hjl9;B9ahg0C)tfEd-bTyVhH8dxUnzJlQ~h&G`p+uz`oExliy`MV zF)@#}j;JjI|6P2uj%+a;YN%rKxL|N#4>f-I&Bjx^O10T|sHwIM$ zuagP9fdmjq14b^byqxP>!RyX!4VWW<^Na4W6AzX73O7usBSk5BqCPih`u?Va2YDGF z3`%@}07nk&MEWqG(b%t^vo`Y!xF>w$N7%$G>hw`FP1h3eiGS0TwXir-l$`cyIvGDY z%u3ZS=k<~_gpB2n)8>yXF4ywdS9V1%u=wi2c{YI{W201TEIM#+;#J!OS2_R$o?(~p z`7g$7d0ZmVCXMplHE3!ipM$1( zq#3>IP4=odEs??C%ig4^t=nwl%V?qJIsw70G+w6FR4{xpikI{%SRlYAy_+#hP=|xs zD_)*dRL9MpU1J@C+#Dl>6d=dCs3T_bV3jSTDyLtP$XbS3c!P4vN*v@C5vb-Gp(+UX znfTS}mH8{h(NHIeUA4Myk*B_iz`#hUZjzBkioY|`-9;{4F#D4OdogYKkKYu>=K``3 zi16Aw97pMyPNRTD0|N8*i&P%r$K}@EawD*|+7B4cfsX{2!&II_S2J7<+qVjSf?bew z=Vg$XnpNyb5Jc0hqcvffKk^FxgKe?`u9-yX{{6kDub!67V=wPU@*m|UeBg^*S*L%W zd7<`qX}tV^L9(A6SY$EEA-qP!>7T=Ujd#|P{>1*8v+<6I^LI}n%FpCpC*pfB#Urdd zY{0i1D`cNS6%MwD1(ndc^w{(XiqCZKCULV|Gwbow21w^J+C46YyF}W>lS1il8b4NC;$;7(1<8lYrBc=`Kwaa%uPy^9 zqdhnPmlN-odZg08NN(%FXn~`>=&{l6OX+4>%q~-#6QPc3Iu{w@#)a}$vUFJ7G$4xU z7suh;%PSi@V$sEUeJx)jy(lcewR6WxRitgsLJ7hZ!krx)R@@yCLU!Dvz=PRR`-=P5s`}V?fA0uB6TM_My7cy4Q?#K zURmUol+=I93%Oy3hg8bjM0yqbr?WM*SBB@jcx-Zx_}!%H7khHO*d4}Wp!a2$0@V;?f0nDGjnq726^xSL;&#vY`w*Dtj-HB5$Y#=;@`*g!=eU4eU8gc7F zN8+8Do%zbw5oy`0U8j~xPI$0hEj_G#>V~)8V(RjD35M&~kuAW%!VlK_#yI2f*h?YG zE%O#s%?RdYNQg78L1>TYJdc5P-pi1+Rp*ZVBByKi7l2jkD;Mtw(eu7$?|e@+k*lP= zqbp&ACXb^-=PNir-e_lxSVfKIFZ{%MKR5aI{GnspM03me8{l;Ar6=qLW1#N#Cjc7S z1NRG<#7XUl`D?tM7=TCN2peL2yg8BWbhKue`rY??%%x&Hy03veF`shr)=^ij(v+b+36WNj4flbfVdbl zPgQZ#COnLm?9$GN{>DS`$@JZtPF*6taBngpNT!srt$|DZ0twnEU@J186_dwOwDsym zHZj4ZMmhV)4cq`Fw)}*4GgI?fYD6LrwLW1usd~4ki$lW&k2>I~;q$W#M8nu=v~u%i z)HekfDOHLH6&dZ$4>Z<)9EC^-0b9%?G|YXxW{mo@O>fzI3kS6U#M0A8nD%Bk36#r~ zF0E{~e1a^tg=a^Kf7i4WYWluP!xLXV}&-AEl8 zj%FRcS|Syr(KO-VOnj2u{(L#p{1Z9V^v^LN%boE5a)cAe`&BCu9V#-6Q_+60q65i( zv3A1~&lwSna-n^heKSwa2m9LmIZ{Nl|CvL2-p|l1*~ZC9e@h~03!Wnn_P}68jAZY5 zM~}Usw>3)JlLN(HA7~#oBm1D|KFk8W{2G&h#p_R;m;6a*ceWbw%;}$dHY8+SnTByA zJI!v-ss&|h8>o~+sMI9Z_QXbcI@TWJzuByzB?S#m@WgWDLOIMd75HVYn2d_KdOs%& zlb^vqvgkmVA3v}}K$=5o8HErN6<}d7U9wKff50KgKWuCr(RScq!8*T824$_&8VblU z7{~IvV2Nv^K5v-I8qZ#R1U)!4`CV z!KxMVw4=e7(Ho5tL{@oB)!#F~K*HKK8>`O)RWT$bT|zbHJxI;&`Vjxvvl&AQ3enB# zjZLHbl9i_R<)adzlzCO7m!1~a)4WxXZaw5GrFam212>O$ia5*kDEhI*wwFLfYP+Ic05OD36rJwQpC-$RB|=V0rULV4#y1Z{tlMiNg&T4p`5bv$`g`&-A@WJ9yX+jU_p9`p$0t zL2uYeWgpU6abFn)Oq$@mV#=d^2{bYi;MmJ91-{#uE5GQ5ERcF%+&$s430Pn>NwCa`qx;SP2hDFT08Mc56-CVrWvD4 z(OJ>(D*lty>#@~>tUY+bJ742p*5h%a({XbnVh`_QWYiSkO%GBpnW@!m)OnI-;$rPW zO5-c8{-W79@2E}qej3!4p22{dyc=B@tKB4M8>=|y`FEN(g7M)u4!ajO)4Fz&+H^W` zL%{h=HU6LZvg$1agBfX{{Rt|DPGv24pt9>2lTlcM4>ks}W)Hv0eSVrtXMVaP6xBQ% zCqFarkF~ch{7i;8=}&t zIUBjddJ3wo1nt&8StZ2{I(<0uS(x3}yRk5CcBz#%8ybuTY=5bK9 zGmRRV!PJzb881VcBLoi0O^&`$kQiM=<@v+n*RxcIzLh!wN2RSF34r|50df|))1z58 z%u51o^*qAj8h9S?S>`p6@QB9!uxaNV`wEDbS-0_qgo3$F1>kL~Sn0 zXCP4T;xC~X*?$+TYptOz!}=pC>P+zeNqGl^Z)GTP{=BJkQ98>7IC zW2re{$MKJvdYUkxg0tsSKjkgL1)r*arrN_vV}Ht5rf>ru*E?b6E6UnK4PE>tn~uVW z6$isC-@|X|N)}^~^}DCw0Kxc53acf($`cJfk#+$<>%Xt8x<~f>PhA2)kB?V)b-H;3 zcQAL^jzAeR%(7k9r{${8P!~g%uae3&DEpLwK88|@xXO!b=ogw50TLvHPQ!KyB`PF6 zX9MF2{X{hf3`UwXJldk${!KKmFS7cxzB4wEKT@_%{aNLVgN!Vlw^^ySQIiT?+b7Nb z(60U~C@RzYi;#@SsIsk{vBS&%J+{VvB&iOURw6!!w2k@zk4d))XAEz5|Nd>d5FqwF zXsgpAJRPVTO&_vZ<&xHSCODYG*Ff6+Cfw$<$e)`w3Alg9Cl_p$yYU3;C=N|B#A2%j zO+0QkyUGEA3lgWBz^X&GNuZwKd{4T$=)83Bb814NzL;~2rzF4g#=i+1i4(Df`MhV{F!{E8vpBN>6M|e%oAal-JE}$#?)+8DX-?na(3rZ zB4)fy&#p~Yh>7ZN94{s}dBh>YN>5*(i+)Re)?XiIWw-uH*Z7ZYEAGTn!0)>&XZT1g zp)TsvCJ(FZ&h-95lyvvQ=057*@zQ;n?T)cPegk9qiI}SN44|e#TQeGu8p+O?yzPcX zs18p?b?0zMl2fwoZK)yl&Eod!pdYamy06e5A*}%5{>j;Cs-|;~-a?&$W+sEGE<%d8 z9^Lo%6vUr*iv7QayRIyTi+oALQh);gQt(!8liySI_~N<~;lG%`OKiJa_h-fdV7-X7 zd-g5HJ|XQ6czrE-Uz*u=-UV9Ihqi#C7*aB~HN?lCy<5k6A(_*j)Z2$KIJtPs0a{<| z)G0ug3!~bJR@Qp7<8&eo?@xomRhzj!p1$7Iv?cIc3_nzfdwJpEn}tF7pJixv5M)## zr%0_Kdu-cHn!3QvY&XwN6SUl`hS6u^vsqiX-%3EB>$kx`UVi?Sqrk!^tA zJ;>2N&hb?nT6;{j4_u~vhz!u;0~UU~RptOR5@0IfdSe8fNM=fK`KUBmX%hk{nYLE3 z1%Z1=_eun=0;(&wvM!wK>!<2G*9)z5t%7s*)4B=owO?yCneb%{dtWjwApH)9 z%q(pTAFBH=eCV8}N}c6ILOz~lOfb4cvYTOI>PMehLb#X0p=$(y$mS2vzt@2AlvxhI z9_CqU706iFF5Ke=g6LZ1F#hf1Mh0Z!^kg@9Qsw}%%DcCKAVRWk4oeE$@5PVP{zl+4 zX`cNXXz|ASP$X}6C~A0w=#m1@SxSAA#6{`3~alwwDy2fh8+=0*0?l!n0jyBfCd7p)w6E27LE zhyp%4i$Smjq=co1dQPZ&eq8E40`QST|0Pk-sd<+`#)*bXhxpToM*AJghdrXY3?kxK z)9$34CM=A@?XLH`;owXx+5JB0m5An{O|cb+P|V9$Ply)5zVU*aR5cNV1krm7DI83b z-045(|2PZ23ou)`(p%@8%5G1ZUH<<3!6CutM+84@1{%r#7)-#=y;*rvj5ek*!8}wj z*_VUoQ54tNb+iGGM&e&YsQ5*bXEs5p7<`D=%{zs6pPOPDUQU|Ije)~oicXE}Bpw`? zJfpy^yjnW&oZuWZGtgg)_HgcHI|*!WBpm}De?$Z~a=?oFiU9}iduaaKP;m8{=|+oF zfJee8yB^^ssW7~{0OP5_kAecHY)dKJHIP19SLTdb@vH5vvqL&Mn92c8|=;ED@ zWo0m>Z-e@v9fZb-*;}G{I)X8JYS}Y_Xw)_P`PW?YvBERT=+BsT3=p(g)@a`djQ8N~ zVSB~cBUcKJ+0$?dS>{z1yIIk6llkAQ8JdG?kF%R*3x>S!AtbF#w}n6v+HlG{n#5<6wu`aCX;!d^Oo*ZaHke3iJV>BT4$-z zt#DT;T#o$cQ-#7_81v7(;Y2g?`NnmqeXMVK&)&BPe(Tw)hP!lsjI8+fr>4f{Sc*FKaF$Sl4CAI@N5st|fR z5P0jReV50ST&e^hitEhXtOr1AX8GJ;(_wtWj0Yx%FRN zeGd4k(xBSlW)Sk_)0fg4Xpq-9w%*5He;yu3%f^43O|2iV$ihiShzJ*JNVCek)m#TL z%;01-DeW@)CGP%Rz>Dd~^0dG!?gxya$gM=?@sgJ!kpix+ z39l>%R_)vLLe7y0XAl|T87@nuM~cWbn8&lqnP#*q%yX#@C?2NaIsO_vs>s}K`bBh4 zGVYJ#+wBWUnSnooMZBgZtrAue&l!+z^38^cBtDB1*`g2l-L%5K5CSPmSLWcDVv{XW z$jiyZ3mg}|X(o4y6MTuJ$W^o<{5N)t6ER#X&7)3`q@^nO1(ip-)o?DzS+_$Ul_k^{ zHd^j?wu0!K+h5psr^_d>)bbT%CJ(r=3U2HL8jkhdiLmw|9I~Q)lMxQInJM`0?7XgA zTp*)u!KwKQ@r^zJ=hIV*7$r>**0g}|ZS##(g=#+-O6ksqZ-p213F{OMqZp(-gG|sv z_wLT7;st@Tq2Bk;o^qcAw@fPPAA<0w$H~=2?t}1q`H&d-_2dWMZ@dOp%Rl1UTz)wuU4Pf} zQ3w)?fd=nfAC*!ivOryB=luFZte*8hi@x8B>BUy_vgS^aoQ2G2rKBW;NQZKFgZua$ zhAr=?1Z@nzLyV-TRV{FyP1qcwtdo3DLe$vi@@vj2=fh?rU@}$M5z>&; z9?t)yKr3Lp)VubjME0iGM)+@JOcp8yB!!e}RZn;}NB(R`P(g0v07)h_c&byT%~w7* z1`}NUj=i)pDwH{Eog-TT(f>TUD7%L3pM+;{@7w3%nnBx*2V z@V1F$*%wIsad|K?W$~7$W0WunK-OLb-xswXdu}1cV0upBR-l+5$_#7O?0#s3+(U)C z$0mlr3;&_#Hq+@L(CbchD?JxI&XIb5#okjjWH@TSDMJg&B~8!^T@XP}Xu|h%+(Q9IG~LZrr# zglSQxJ>zob&}9V`4o>5n%RhVp10Wf-gB_CUMw1bbx)p=Nfeo3L*XtKP+N2BUzP^FH zDFY$Rh5TyHV2z)#`V8dZ zLZ6cV;yzZWX`HqRD%$z44Y+O14hXGA&p{Q6kFTofWb~^>DMbkj+=9PxIV5>T`UMY0 zA1YANYxowwf4^VfF51kU;F_`jP;!%N*b(T5gMPoCxlzXt-u^8Ro`=@*{R-!a0IAh%0qLqkwn_4Y zt89dTIG7v}!QpzVKtNkZusWiN4=WKWxs)p>i}Xwk$=m; zk{a=|F@Kj^T@=Yz3C0&B_aL~PbJg>k1k3Q>Ri0lgo-oa8rXthd6zz#Jm>?AR3Qk-@ zRl2`L;3hqnHO9DBptzJR&@ejm!bA}01^Q^7;KXmblQw)UH<3&_bSH-k#hQ!4wKjW1 z&L8u@E*@&&T&Q=$)Eg8BHJ+7QMVX10{>DlEg%W_CwtkMuhiGCBg|qshBaCAAN6@wu zV`}G9Ky68GR1=6YJ6(C0_%jgfEyviB4o@B3Bo4X=w=WP^SXhf=hk z(;ySQeCpI(JT-n6G|g~WVvEUlhJX0@6k)h@1Z*kI!#S)GGIaDiB)FkX--|(~dxPo? zGa{rWQu?x_2U=}cB+39aSdhR)>;oB|@& z67vd!lhMZ@6qoo0{VzwPqsy_;{|MTC*6p)G*M%hpy&{f6H0sk!O(^OwZ_k*#c9rQP z1LX$q4FeISW!xk0qlNLzQGce(wph^E6x1XW&{pjAjF*n9>f4kKv80)HU>km((ku=^ zIatZu>kJPDfK4m8H=yw!Ak$~y${mCS0M8>m(jUe$h{M42Pr%6)r&ji(cBWp0q&<-D zhj6lY^{-9b!wm6z=mA*RrWdvtu&?l4zcZ4$a# z{HT<8E!zT#$^jL~pZlL;$hAxQqaELeK8N1aQhe>6mZwlji}*Kg%z)yd&%tx^>1k^p zAtFxJGpTT%5x=bvyJowEVzD$i&2|UJtGDb-&&N3v)nQXjvYJcdq&bi%PPZEFM^q8->7zkfBa(S{k)uAN#x39)ztH zYiS2VfQ29%x|Hh&sj|b&Kh6q2&CB~0sShzDkyF)F3h`@`hq|sD#wM2N!4LlJvTx}@ z`m}w*RtVI?kq1U^%5e-1>lPq8hvbDA{ebsUolHABRr%hMk_CW-BjqTNml*G7ymTpQ zFJoKPvL-^c9hUO2zZS5Y3ggICTo{7!^JKrsHK0Ep*=VPNxfN(wAJT4Wf@*2v5{{s+ zN)Ln)*WRqr-hPh7-eUYT4KW(m-$Zkrq0$=AE!>n?(A|JbP}p|kR~(%?C~(_Bm?cwV z6?0;~HWqtL|A3>YFWq{_1#D_OK+lwNHNGkQ{BOomlQTIsAtBln> ztU=HMA=Q%jg|{8{5qlUiHVs#AqKQ*UAO8k-6HgI4RbGBf%;2Hfc}qbU+ckppDf3R? z(~mSk=s?QCV9!EAMHPOM`jL&W#P%bUJ)HBMSeJ|vftv)~0C|&;w~F>hgiR$ccesMW zvYSG8IjQ#6yRUJRL2tvBE{w-(lL&E$QtdaDjfken=fj}>4bc%YnvuA!?qXTtH}#8Z zt1YAnOcIFlH!;TVA+vBFSf>Cw(@~ zZ_b~!K5+~?o*9}$Y@EED2DuE2zuEbGJ^K2v^S1Mz{n@C?-}iZ^_;HTMDWJpWSu4<; zlT%YoaA2*6cGAjf%Q-MG&=x$^iVicy^NET1ASKp7)Gd|#AV^Jsz+bcuHBX_GwKA3= zV(qnlsPuUQrYBVyZ-0*>V~gvKlIMmo5X{awc=l`{SozwU`mbGu*Ka2To+%OQJM)nPpqGS$WTjxm z2hOyR%%p3%)z(pJO{5^al(OCowzNFzXu%RozOf{Y1LPWwKVp6hDlEgv(FZN5IPBQ7w|w08Pf{j5X?P%+Er0ke zPQjY6NbTh;h;+DPa2CH0+BbN+9@4cS`xXBqA?K`+l*fS${k+swx#E4==ldvJeu{cS zsL$uzEr_>+%`KD$M7a}P|H7A<8CuS_wAdUTEKss)Oy*Jxy@NyOW--vC?40F;e-4#J za1HGqqDFGn$mb?~iP$NRs35v`jGPqLH)M5!nqKo@tSe#Me$NHjvK**f`Mima&hxyv zq@MF?oJph#vVNL5bM=q;Hv?sVnKFDW&{{$piIcXdftrEo0uy6r&@fc=EENPp$rn<&_ZnMo<<5<;O8;AZ?|8MHSFS6yZuw!)Q9T%wvE)qW9t@X!i< zT!B))x$pV))BuHE5>c`aySuV`#wge`1R-AC3z=1YCTY)~cd~n6f8&whV2i{wCknS! zhAe_0@fqd_=L&I;T46l)Zz^*)(#P2@cb!uPf6Q))X5vWVTKAC7UZhK3;NBsw65>}lIE_x)<@~KskHc=IJX5o+ww5J z@L0GzKl%L?S^G@ND{>fCk(ZE=u=Y6`8KXA9)#Z7oI^^li*~^(e=z=7NziCBnlQ^8Qtf;A47iu8CGZwqUVPXp9+tgb^B<;@F>IwG?%_6ul2iRO*ho!M>@M@ zh!1QR9vqi!#K0OjJ%?k>M?^o%42SE1wSXR8X78i5OYawb1l8zE(BIe%Kg(KYrlB>3iDxrq%2|hY4+(u zH~%N|E?dWyF6I6rZ3g^K=eA+QMMw0hlNWlsG$PU0z_r38PP0Pmc77B=xDUL>V9hup zFO>1lcG%YPG$w-9kfir^?{pLBOXvsCIefn50$+6?_D3QU5#^|HAIb)W9w0waLMx@j z$1LcVshVLC6W8^J3oXFlRg_=vxeh-UhIRU566&fbRo}FQrt3>*pQuD zqAd;2i+R+T!8`yK+5umNT}_Va5kYn!9Xme~l8MXPwIp_Ke)ynK$GI@e6GzwGYF!F1 zA?b9(mKv5L1LC_8{d0|}Jl)?<%bIj%q%9QYADC1;SmND8!=LZ97qaAYjW|S>^mr-- zJ6oUy*EHZRLXX;C!fwz^8GbAaYTbU){8J8RJ`aMA)DWNzk0~ofLv34!WD#+ev-!J`CN@`U-`meyPc8*QHJIqH1nfm$7<-BY9;1;W+_`ibEnB5BAq z8br`twWsqHmW1C-gTh%nCm;gh*+s`MgD^*@=KP>e_j-rc1;);DyPJ>MA|vt;R6jE3 z>i)5Tpp_hX2UgC%Q)7yhMGKO`^i9N;R&(On4B}xBFkNUv4-+ZV@+yT#zA$ojq)dxc zs8XV8)5-=WD3#NotPFu{Mbs7)2^2SIR}KhAU?l$LQ9|j(X^~&g0{; zZdmKLm@!mg(3@e_euA>qS~eQD{l%|4zod8W?HX7azBL0j(f$Q_aAG|Tb|(%vFSB-T zg8X3v`fcdxer#9G22sr`4Eb>u&T{GtPYbQCzJ~l7IUF9qsW|@gwch5H@&McAXtJUI z=s;8DzPmYk8@G86rw3)+HLB)Qq}ge`w}i!*nOvu9qj5P@U@aN?<^bwkE%eCw4J3mVOrzf795lJj(` zb|amxe1mQ>#4I8Fyx>oB8;Ap6JcC-#szhc3H1e(n)@Y< zddMGRj$URZU5C;tQrZ+%Z$lZ!Y1;PY5#hu3L^5YmWnj+|va$LELrjq`9bKEakTq^}9OP%*i`I0*!;fq(lVS zx)7MEyaVq3gR|85rvcM_5js4TZ|8<11bt$O$ivc3qt1|Nc0bVGxsHIIn9v-wcfmh6LiP6 zCSB<~e<>WtfWdODjTfWmZuGlnzWPHrDvwW;`2{EXyC%y$q2u}O4C(BUt9>)edme?7 zONZV|VB6&;Kq|ZmuEMCd4Ff(CzO()f>f-L3qK$VDw{*XeI+*QvPN4ASnTT=}V^OpW zJ)q`VqP7Vk+M(9F2iH!QiA3{>GQRvj0O~*$zm|GXCB5Dnc%)ayByi>a@<)~b|8+s$ zNQR27APAqBCRk+89jfpmI-M7rWb|@hX;oh`Ty{Ae?$M*QIto8qN_TvGR|(nP-o|pPm7uL zv{XjiXUt@BlcL&qmZ_K=m;otrCZJ3gWbqb5g``Wp3|bCu@f>BqJZw}9X4sX()I4MC z?tfG~Ym^nrzk1Ve^OCQGSiVVHh2kMk-P3Cwg$KUVs#)cb59u294ZVI6y38+J#6eh* z0+N&9y~*QfAEL9TR6U$E`grw@P5C%VU;aj*#mEpn3?Xepcm1)lUIX7C_a)SNs%0UDZAV<&o}!N_4&cnr?$sBl|kY zndGOt4>HJaE`&b4(wF`lnR})8Kl{(C_P@>j&ss`t{9oqiWW80g$GYrcW#FN@5I-x@ zxy(?WUhUGD^wqq~d^9Rwy3)#YEpG!ny1J$NdrFPVU!G4&>FP`WP4N3Z44}>aw}0rz ze?K}n+~ogWOIdaN_hNs9IDmnv>}^FJg@D}e)NGXe3p@o!D4Y4>zxk!J22g_1S3f`6 z=&n!~a0XE6yzcs^Xw`WC^P{&K55E8^G5c(;fQlh?z62^Kq4pZ6`drhBrCMEHcgoK> zND*Y*nQ@i0WaLkJU5KrxVJDmNiIuMWpQ2kVL&lRFQOF7HApo@T|D%fk_tD|=jsN#r zN;^j{7TjzBo0Z{l;lNR;XDbjY3@(;w26WO|wxh-V5};Hvpn6R`5`qq5DC3}#+2U>;zZ5vJ4xv_yS(zh>$DtsrAR@VnuCO(fi4}&`umMFB;c_%`R@jajHz)G)7H2bL zs~?u)R-jzb+$_dZ1QU2;dXZ_B#hRrQ!DL|;4kbfyAti!zA?C993`iC?j-)jvZjk|H z@B2J~Tt(Vb8Dn0<+)D=%NdHrl52mi@JTYcjc)V+7cvorH063#*0p|g?!Oan6m}KST z{GdKKn)lw9GD*eI$3wx}1@DZB-q{Q8*{A@}Jr@AX-`dP?EuI6=Ul0I6nUF_@Rurw_ zh|H0dzP@NA-38>C8zG>g5uilu)QGC{B?q>v68p%1@_1LRhP%j(d4Y;HTfx`onFd`|rWQ$;SV4Ev17=SFL=lDc8{_MCFRUTc7zz!*)%!5=JFv zPcXFWGD(<*nB8!a=T#d(wc{=-lx+3M(wMI2Ux_cvNdK+*9}f?X{P+Kd&rde?zqOPe z^1s>w9w`VZ0IFgj*5Tfl;9DZ?{J@s}nKHg-NXZ8yDWTvoE^`VNa<^(=Lc`Sc43h+N zOfs0hDY|fOGm6KU)sRfuIHzQCH&B6jsp<&V0fVC5M=%{wy^W?Mn1SBh@qZ-^Lg#rd zTDw0*aY|-M205Oi-TbyKD~t7js?U6c6NoiV2`=(~EjcSSNy|DE$IL16(0Lbo8QoW$HkFn27#t^4( zvX_*4$z58^ChQk5flRZrQp1)GQr?_29Y-}y-mvuriyXX6BgH0UmL@8j)ZcF2TzTqv z@JgcCf`#?O>qX@r{u?7%AYDjRCoh)K>^TE^*G`!4WP+AKDrHJeLRA827>A8LC1Dda z1lS*?qd;Nwacw?D_Fsj9kAH)SNhT$>Fvx0+7+d36no6@pVQ1MgTfT~SlMSQTJ_R6| z;=ybYf6U8V_c$b?x5(Ek$8kY$hWekju4Efd{m9(bR`f1>i>YqOxGl998I6t&O_Q4B zt7@kSa48{ovm8Y8g9t>$!k5hoYp@s$%VCVHn5*-0@xPcy7NTbLwyh+0#i%T`SmL2_ zojYRkH{vL&!y#p3hfre9P&x*T6ROg8i(j=N%reorvhy6ni}pd6_^5fTjJLG6nX!h) zXp`2W>k7-2x3uPGcN$tKtQG6_XN}V@*16?GQNxU6yDHoK&#H`V2Z?corRqs6 zHla)l^U38`D2v?dVc^@09Z=ZMUn)?E+?7D_c) zOi)0W##w?s?0~I!+DJqq@qgPx%+WL;WpBmP&_P#A8@PY*t^p-4RuPazM^#Si9#PX- z^Wm&Jp260^gIRMlyPQZzzO6lz<@{AvsQ%b~BhNrG6Y{T+bF8KJ=pYNz!J3m;jQ4f$ z)P?fu)gQbEo~_FHil_ZfR@3R~p(?i;iv6`Kc8sF{$qC#sI~;SS=n!N|u=nj@T2kjk z$mw?9TDA&zQfOI4M=F50vbib2%d!9nST z0|2acvT_g`6NO-)oFE#t<<6t(p+Gmr)US_1pHni&38D@|QtqT`U4dR$P^_$_Ls@!~ z0rX3AZbZNTn4$z_9K-a%7?hxv#$i}_^Y}1CB)sLZDHGhR1erUuXu-wF3lPVMvDd^) z{kkRhr}(UL@~b?-ZxKx1Wa%PO|CA=Dnlv~?;^A;#7JOf^bEVV{)9`Z%_ZMwbC7FDu zEJW8GFq(02OSl$fpZ!X32BIAhxk!W&?U&icUu5-9gZo3**n!q_yE$!#qgi~1_-YZ- zK!bQ~M88k7beI1OU${XrMZID`wfTQPKl1bc9POW+Y~;UnlrG|pS@|K8OW!KZbQNZF zrJSNMRuJ?*?JEPp_L${THYiLFcL=Z}K4c-e%C@19ay(pVXPL1uwA zRU>%MqU}095AVH@PYV0STMK`Z;XNxRS_{JxO4QKlw!W?V2~N{(|2m;I9g*oW0+B`n zlRYs$-;fZV33gOJ5$tIF^T3WCaT+{>>g5>R8}nWQV6g{xK&*VFh2EjC_pGdXDjd92 zMaPYO;90jKJJa8;&H*nEi#;3iKE`fpGEP+!H`%qE^j9@0rR@6Z2FNT*N@hu<$7MR- zw!INb5Ay1)=y?h5ia3R=vIp89%bU6Maj-6XEoDVNZ!P@UrQ#rVyO7!I9MQviPv3=V z-<%F~^p>ZVfXexbU>5d_+o-F-(w+X#NjjUNn+)b`LU^AGfHwO7 zyz>6%^z>k(|E;Ci^#6z83a^$Ms9nT#A5VS*kR!@4TqK=wmtEyE`(390ku!lyoth_@6YU)U`Q1@H=Jwi>(Gna7G!I$87g@VcR z6b#E=Hu|6`J^=)2PRzekn(zr)jm4gX(D>2&_>m3KM6^@9=s><{h7+pd0Q z-;vl`ErwsuvLr?7)SAD}%(1SiTy*(6_{WTJR6X-G-OXsK>dt6d(}}3EG<*}5SJu#f zoJnCq=ovLVny|XcKinZ>s-5(5?$B7h=!*Jk-O+sP_n^2mPnB6!lB|s7o9DKdkuw9vp4*Kdz^AqW^N`U0as;qNut2S39Yf z^*p&vd{a7~1fs7@91sXnR{Tmoe=$&0%3kKSBiL%W~8^q~Lq-WUJ6G}Hfs)1zws$D@;@ z4gFt7=|ul)E;KrM_qAmG2-wc~A`jT_3&Y-z3Muym_##KY0GxrJ4a#54<-M?gJwia5 z`P{o{HX)ST?;Qh%{Vj>g*;h)Y_EFplT;hlyY#q!-~0O`K---xwzQ4qVL z^{^QIR5B+On@`Qmf0w6o^o;f4X(2JrPp&L!BtIUVCIqOH?KCRp%ih%qNI~pJz1v1rQ2;){q*OPss{NNyA2j zPad+Cc61FZxtB92FM>qfc+KiN#xlE7*Oj*ctbXNdW}toy%4YY_fk-HiKbi-eR@;=& zeT=fzn$BmP?BI-``ChvB5PHfD4znzT2p7R_9Hy|&G_6mOYR5I1EWt@k+sD|VH3Y{; zKEO14p#OMsK(_%{wxs^}myMqa{nAR+AN!*18j;_UMlW00yHGJwBM=p_;*tnNUseKv zRm^Dqh!t!j>kfTYvoeFF_NW?a+(MyzIxr2TA;^%X$Kcgn*sZzP!x{MG=U;fjA9iUvn2m_vS!bM&fpcw3bzJG1dd= zEtUEeQZ3O!T$c_SYbU#6vAnATrG7*v1KUO2ld1JQhbKOVm?boJ; zbvs#B4eaDAG?(1ua(snQf|Bn0*nzmrJ`T?Q<8NmV@72&6h7Om|+W{M|g#y}ZyJVj*2Z%|CK zgoP$Bkeu6$)@{7RM9N5?il)dHzdySW*DnkgJEfw#`D4|)5NCqh;f$XiM<5!f1d4xc zFSDt-ja?|D8NeAww}`GnDfI@{ZLXfB96ZArub-cTN1cLO`J$bw%((kYOhbn~+%Wpv zw$UH$KkD#P#F!fU(HaIHn2g^Z{Pbm0`rZE*OV-x|ti}K9@c7uz|8#JAa=f|!Uq|V3 z|L*!qj^tbgHNquOS+9qxHp4;Gez$u=B-$9161Z5l?_CnV6 zd9TONtrxtzdoV8A|FRwlUBSPHXzbQq{o;n`2B~~ZYMCpaOAkY_$DVQW6P%_EV76^v zzz`ZuTT(|KbTD$iwV>lx?u^TyNSx@v{|UWI2~76h$CPBhlF?0$;#I!?IXXP3y#GDj z#D88-(b2g`_BS#DVr3r^9@_F!hmbQT|Yjy*FB*Ak?InHihAef{$Lxm9VCRe#NL85;Vv&*#D zFebEUDOc%NG7<_a=0Nai#ELaZq;w%0z-$31f{b{0WH=paDde9d(`#z}(kW%^`X;y5 zyZ;;j@PFzJC=)0Q^sa6ac7vODcSY{5#*jE;GQXeamS;YfiIn{8SVHG-Ny=9wYW6c; zd3^^{EC2DwKuqj^%4z=XH}FjIQ^)7k%zKHXpMUw?e{NfyTfYD0sWhO2;jV&h0|)T8 z-`rpuehmx7NS)G1K&m^39=LEd3+90wQp4%<0M=KvfF4Ppb!X0p7_Mi5JKf(`Sjsh5 z0L%vXV`C#ic0Kfxth6xc?5c=yklpI0l=tT0zUq=VeH}C(}Qly~wLN4qL;;WMYoxQSV8IYnmW|(A6A`wXwDYfAk-XLyCLgHUg zNN#|VG#$bCP6AqC|mVM?*h&^;g-V#7Y-h&Pj~ z7D&the2K(-w^-?0lBPJjRdIABM-9)k$E-q?e8xAEFmKE(3!!hJUlf)o+QLwAbsxgn z!_5YPU zVCjCYE`<$b=vD@`H!uCrQlqpGk{{Ypk=5#vsM?DDgw~qXmtOoIs=L9QODJD?B8L84cdxJl^NH29%^@K9`x>pIO>h5Qnr$~kG(JY-|ijv^fO1da7S0pbtw;yamW@!RO2+&z3 zIeg$UCx;ZKDM~S$s;;K+1D?*Nfi6S91!TzOManInqfFkC1iFDS$8%IMFN+1kW2`fk zCo}aF%)Zy5D21Y_fF!f{a7g((JVk&{ATQ9F!iDq?mED*Lm-QEnqbX1eAz&an#hIXr znE!V$hv^J~>5NIQ+MF;f+iM@wA-EjN%sA>wXs5haVjx3vL`!H1NM;I0<+&oSk9evF zdOqfeexn!Z47_{yD)a+L#U@fyk>W9u*HmN-pgbpXxD&|A#YP`cJd^YFOh2f;Q2Pb} zLcuq3b8X8p$Q?JvC`|h|)2G6X+P#758{u-N}%+v}fqWO8vazIYL*2;9yfg&9YPfoEuVI~0Aw6#o-Zwym=6 zj}VxUj8Fl(GMHJWhNFACC)rF?%qFV*0&E;B8f)lsUqT6luJ4a>{YXZ`Ys;=PMNK*D!9j3=+zKU#A8iMqgaw@Bso z(%CVV9#w9G$c0nA5VUty2_eHWl&Qm8L_>S5fBZ41C6Hbxb+pR589m(hojC1mav|m; zqdbSXQrO#YWA0mJ=_CK=Bv~f>XPf;0{P?62|MTGa#{RdKB87dymsTeK=OhWp{tZI^ zax%ZHs*^X$OrJ_Nm@$+n^IDc@0qUA0z1XE3KzA-!&q@FIW1s`DoX0VlW%3=2By084 zD9%{5(NfBkAgn_A5o^~NlV!WM*iwVEAbP}8 zc#E!QX?oKy`KasW!YQ80jy-Tzm{u@!T#z4am%Yn1&KmKVm{(p4Y!@X_$7}A2O)IL?|f>cg1p_nfoM0F%$6-W<9E+a|t!s4OC z$%a)DrUtsy4^>Wbl9JoSO->O^E=a~Wg*fBOZDtGaTELGm2tk9+Qw&-2Gn_7HTc92Z z(d;3c)c{!bt(QO|X@1kyX#MT6v9!$(lk8gxV|0xuCW#3nu123D;+xR?}ez!~Nj&QRPhU5DeeTGNoaoF1KT^`R$6gE8B` za%TQa)}}u8AI2d^<5}9*1HA41-~MsM|Lf#*^ZsuwMH+i<^un&x1Kis!e?|{5YYNuk z0#=#vkH=Sh;|R7&M=)g)C{#(iy$q=FaX8fPKC;hP4k^bnDamK;G*%9?Ou?tWv>;Q| z+j!M)N=@k@|CL#Qick=;=Kp_i;=lhpJ>1{;|E;As@gK_NTxAr9AFS+AS_XUs zfzS7{5RE<83f)|_3;OrjZWNW;6&F3*jl!$lKit3%%jDP!n**xv;T`#<`m-m`h1*-M zGSyJEGS)>@zP68aM2u+L7YN*FsMW3t=*?*q%$9W$w)nt0gh91qoR&RT@v03b9QZSk z2CE2hU_+533XLQq*{%#N3Vt>Xe~AJ-TK;LBUu}kB04n#$jNt_B07k$)0-Ag)&q?WU zDYO})PI{k*|9#K%Mw0l5%aZ)Rc$C~l0%+s^`<3{QrzeMp8~(qJ;=TW0u>=sEH|+WNE0w%=qgq%U<;)$kkHcF~6g zwwYg-Tg-`KuHp1#)OM!@E>)7blNaW8;<>_Da-Qz;O`++`aXpqmU3p0SM(uqmr5OY;BDw*PCkQVkh(8{bd2;c2y4DV}X|*+$}6e_4|MYge;w7XYpL|H)BR|KITcwUmng=ZfV3 z%O~+qV*#ic^G9m}Sl=yxz0o!{fKE1mx+&Wj0XAg?Wl8>TK6Ww!wDJGrLqGn<>CyAe z{r_5uWbZ%f)dXKdhT~O>06E1|NEbFM+>!*PPfU&~4BG+fGQ%9pXl2H;$?|I2nm~4~ z+6(&aXVwuvzm!ky6ZdBW{96LZ98qA9v0+n~-6F7+!717STSX1Q)OAjr;+w@C1jgeM z9%ee)SOL1^PQ?tE8lJ)@Q`g(fytEld4)chtE9FS)d{N!(naNr>DK}X-ZU;Olok>9j;9_2ixRUO~Y-|th{GY%C z(Y^ODO_z%NrAiC`-#^;-{r~p&4>#{W*HYw>eGPF2P{!#ZCphCWC!dObI-&(RtY_46 zlMG>+MviV3mJC#7oM9e;VdwfV&(lTG;LmzkAE9(S|6=-=rT{JH|Malp|GR&@dH=JX zBG3OT0uv#wq=2bl53J*nSEtgI#D7IG2l0$?GL=c0$2di72SBDlB>-nyN*^xZG;M!? zpphD)51hhxc^Ww(8}^<4UuJAZt+2x&M^q;WXTS>c0fmSrarH!y=C{EDu7JpfzX}0* z%jx?yyhA{CuS7u6hY(+cwDZ&X>sJ6#N+@gZPS1{cu@M<%!jrRPghQ2L{58yQI5wrh8*?khs7{OR^tv`sYrbNdeN}}TVY>L z;VlB!vozJ+^qaLx@WBp)kq^Rwj?dVyJ2%>7hu+?PeSXoa2Redr2e>aka6~hhg3F8} zI)-t-O@MUsqIHKZjpop+BcoSzUznv9qyu=y35B;RFlN6lRKu?4^7@B<3!cxrthWlo zbCbcGO-R3^s3Z93roH>>KVfc%UFQvFw-oj4Nw?_${aeVr3#K%zDyHDq3{u z<~u_1KLz7VWt`yi87Gq7(thKb^(fy-{ttoKs4sh)>Xrf!Byr9QRwIscO@aQSZKn8N7A5cEA4OJ{)`R z262!RD)wO^z3dcbR{S5=@;4?eNaxqr-@kp;XE8!IrHB&ngF{YUkyzTKyHgVh z#Um=IhSD92uVH*Q%Wo7dUlxgx1fm&2e;jV~`{cgens?2?o;LdZ+DbS5A7_{^Zvbr3 z|Bp^i{rDgIha3N&^%Up&43_t2wu?E9BQrK+o9 zT(KVReF?51WeB90an%dVb3sBl3ET)ani?etAG$UxyrVO8AXU$@u zi~!Z$v>*Y-CdjJWy%4%?QHChwGCdX-GU7i{kVD4q2~C*1u|p{7V$3MmZmos7@=+FJ#D)^iP#IeYZR&9fDTc{t1$}Br-FhY2Em=*k3R0(D;}pkt6Eb6H z1s#{bI`z#+N>|XU08`iBTXc&VM-;rtMW2NB>7_UmL^mE%4bJQ32So9BAwW}g>zDx3 zM49+1m}6y1+xrsHX(%fo;uU8 z@5GsQjmVuVo{>NfN01?K4>7lm#+;}Sot<`5f^s$#5F)SzK3b`^oBStv;$z+a92^`U zR_=cejyCe&I!c>Vr=_9Rds-uzxwh+9n0346)y;E6nV|DojQTcBkV=!%uN5=dRr)p4 zM!LSuMj?g0FOYfA_V7R`4{9yVsSb#blGJTVpfuBett#xj7rMeD(f@<}=ZDq%|HDoE zkF^xbq^B|-ia(vJ?+rjU0rxj`!VxBSUPv^#HE%6cXCWLYY4XX`FGM!`GxQ~#m+>2d$ zWCG-sHT`afdH``cllp4sf#?Q0HCV%b7Npay-2C{>U+nK-mZS(!6q7lk3&1$V*{z48 z`BfePfp1g^n6E1QJCa`Tk@av|f|v>P zqwTMHu3d-q66e6&3rt-MJoLin#Ay<>fS@Q=>(s&{~$Sk zs~UN0{5u#^GW`io)A~Uc?53E@nqy;)s!K=$!>b}rXDF(?@Nec`Q^cVV#ov(^IOg3R z+S)H7G_g@vi)_za?GzwY!Uiv=skj|IZ9jjF`)lt8D%oDLU!vEXl>R6RIaLCZlUnp(-f` zL@eWo8j`P`SvtdviJ9@!5mg?zo4!3MD>64yk>J0h)8hoiEi%nZEMymeG9-D4x@A)0 z%smwHOfpi_ASMMRL-ROI-V5I$l*=t)?!}VgP7FXwW?A()CZXz7xh#6S7}2gvD=x>y zV>Cj6uA^~LOQR0LjyPE57G>Ug0sBp6wJY7(_e{vr@_<^2D9SB7^5`t2VWyw7CXk7mH;(>@wGT^ z3CcKzDbpun2i)T{1u$hqzXbp>MTxxUQHNdr)sMg@BiT&%q$ypP%PR|sQp(%1;s!3P zRuZM5tNpK#wU;mgw)+3<`~E)%$HyD{-&%@dkA((vlf!$l;>$k#54 z7y6H7I4p*3z1J^4K9L2{^xw;jSlB=sZHdL?x;CaxnrFr8XgtJ<`SMA&YlwX2St3od zig@dpBt4^}S&a`l%o0!P;VwlvKx;J|4sFfTSB@AKu-bMA zm+;7jg=<8|gib-J_$bZ_Tnfa%1kS}Co5Byu7Mr5%mQTcXJ3Kk+!Hg|x5Ky+NX6Q(D z6p3ys@i6MUDHvm4jjjuHG3i1!?g2cw5v$AL*zH@7a$i$^e|x+`X9UNQI+v8hO2K#u zovq|2ODSv(Lf7YU$=y-@t30mjBL}v~e}{*MzW>kB!O^1GWRG zdR0?WIjwhk1I-fjVMqMe49OZa{!ke)Q!HRcm1nvu(Yo@P9F}u48Wi`+o?(`Ne8vIh z0B68WA34VU{bbD@s;nCM!eP@zYC{vfX+=e~tXPuR9Qt~yDi!`A34RQOl9 zA+D>L8YjTBn?2wa zZa1{g68E8jWvBg!s9eYMKPiF$T$7{>0nm*cwEF*7;=dms9dF`4t)&PdVc__G8lyq8 z6KGpNbSLbCp&WZ(f^W?mG$FVoWp4~X7JLHanrtUIv?)%_wsZykv25lzoLDxBNe*>z zrL(UTeBT_ww9sa5yaXz5=7>_9AR$zV-$XlCW^>73(aX?jU9stvLSBhiWH<4B7;DXW z7AO$CkxQxI71EkqnzEm6Rw*S6s;0rKsg>PKZOS@INBZx*>**&3w%z}o9-Mge|M28= z6aRZHMfoXI0+vbp&kD>xl~`uIj6apukAEkKr?+K?j&;Sw<%w|?q5GAHiSy7%%K!pC>}Ro(GbKQz79x(`zs&{Ve%@c`5rW29Iq zkmz>dmMFl9l_&`KrbYQ$pOY$0@7RZSuMCpjwhKhr2;`#Aun*g(dy!~@e|~Pah+XAB z_27BAC!j6wKM#(c`|m#w4vshWzqJ${|4FXy$}ati7?%B{J=1FSQl9O%FW(Z9EM0(u zA~^;6Amc`LitAyHLTy@`uw1F9*p?{ur^k^b8)Qh;uV24LZq$q7*Vb~P{xu*U7Ecrk zAyH=5iMGKrgTc_)dzv$#ncZpGht1Ue{6&#TRd+K4@5E+R50x&=0^*D#X? zNJHp!R6NX?8ZRfHK(b{tpR9-B$D}qrP^B?DzPp;HDQ%#;rSz7d)L%o^K3Q465JZ-q zDV0|10#Sa+*bGrW@0@k)?Ng02j&3Oo=M*=|v1;neXv!uebC*hi3y~V+t+ZfvE&pXt zV?uHlq7TYkC?_9wz!p!L;f3}%c*+8(iW$@m$}|vOJr@%re%+>I1k)k@AOm_{=s=!+ zOZ%$26hwaJDJ#4CMP^=;g2f1d8B-}v-q9JlI==xo7w4~DMnRM+3E7GT5bIP31og+; zPkb@FMZA-7LjR1DC@_87=KcHM7|FJSm`el$Q9~q*U7oVtFOup@Kq2}iAHeSbXMDS1 zF#^Zazv&ZQJUxvU*v?*>dtaJotcRNe{`R z`uD~gp|Nzd|LW8rk757aKioe)t=fM#?|;`)D)Ije^=kC~>KFpBNGMb90H&*;j{aY| zx@|@^pM0M$vt?`izVy$Q@0Sh8_y6)!6add|BQ*;Lq~qwd4W4BteqNiA&EQ>RE8g0! zX4j2`idXnP8`axNp+lFv~x0>B#@} z>z`|xU9GPa(B}Vrbm;T{!=vL({P(q#ivPE>(yQ?S_fqrK3jB9L&8fvvDi%!T$c{{oh)OBB&~@`szeJl}){;l&2b5)`2%!x&U;RDFjHSTxq=gkRAPb0`i?2 zw4FFef2zn0E0ydTWjl#LU9&pLK~7vC7i@0jf#;C zVV+;>ugV+4{p~x#TnL1EHN*^pD2IIFeTRHvx13S0+wW=mBjyv){ya;Z>cJ@>8RK*o z^YAmzpsZeqn>+x%R;`nwtQlLPwZp%!h1&7B3&*YsB~?<$E_W8 z4pv%Bb06^C{bq_qtdOx_ij(egT?gls?h!$~NpO+E|DkqKAQQ~ijG-%%pv&u!->*Y= zy;BULt&Ak-J4FP zaSiNhXpHMc+sN+3W4RxduTod}pJGBWU&vIiE583bIz9E{zaAbPpKj#;bri+&^y&h+ zysL`+VfKuqyM46*x9u9Ny>^F=-Phjvu3Eo7ldp|jFXOMXu+3Iqdz>q^_c}A%&(do* z{S0lsEvwVIGJj4pulm*58=qSAl!uv$UEEGMpe;gm2`td*a4^KDoKh{zdrTyVzb;jR$+*j5UE$Rg`L>Xor zWp1#0`|}eCWhDl^M6$A3vpiI8S&A7~l>(0k+iO8p(GK3aQI;IZ8W9LzGp71!`! zTE8p<*txo#F+{6F)_d6e=;X?+Rx>}g_a1)1ESJ)Tn~*8QS*31ePnAoolR&G65f}#h z@m~XjP7k@dJ@qe9X?*G5L@Tl}Yoirc-`qTeR%B!LG_)ccvsKZG5U3?4Tct%0lA3N~ z3Y~-U_XmtH09gGL9BMTPjQ>9W`Uiizv>GJl57-y>0@y<-8Ea@9kIeep?m1U|Pb{U_ z2TWnPfi?zZ#C#k69$32>R%^UWLtLmwSOg9YeAk$@y%BO#=ieB1e z@Xahu)ouU=Js|!L^<>Zp#5|G4XJ1Y;o!3Zht>$5O@V%ThR%0V}23+s3u`<2RUP?=` z`{4rY>K#}tlJ8{Epd)qIL*=n|PzX&!qX_S`wzZndPUr}N%xGNdVTCfz)oe&rF{~s6 z*?;{KxpUNKp~CCXi;T4sG8esenpVLtM0jgSaaf^JukkU984f(c9|PirtP>T7aK3@LQ{{a1IS?y`1y3-?RP9{Ly-E4$thBy-P=bqe8 zyYZwhd%gofYhLYpLhVusbqOC+8F{Y-o9>L{VS11ae-nA>GbU3$t)-~=PhX#3tjg<4?3A7tfU3#reY})sn~Zy13T0qSXmNKTdS=6JasTBJ z=oj=~G_fx&<=?wc@n~4|+~<~3?1;weNx5cEpB74>(drmh6NcS{*sz2P6DIvL^_+SX z7pQgJQOYgZ&Dlwwv#0fOx*UTzoiUDn#0dg-XaN#}R4jgZS-ArsV?rrc&jZ5IU!F}M z`**bPCPadz0&dj#me6h#j6`19q^ot1QY8Kp@{9Vjl&YZni)rKX|dd)LyNL=_P-(VtFYD zKIQ8i^3wvhbihxAZ`W|2_5dC$n3wD$a{B5MyvsCqQsal%>MT>wr)(sO-hHEjV^jDz zlj(ngr6c{X#P#pP3flDllhfz^`>*Fm8~VSNq69rF{`;!@fc+iQ(@fHi zlkrh`8V%k;u8$&rBapWjxKXRG%=#)dd}{`K>G)Q|P2%S#f4bB=!^`@;nVk(>T@;FP zNNe&gn~c!r4(3skFV$W7HR$hsGCwyRw8oszu}^N>>@59zdMtCxCe!nhrK|j>(w{#{ z{I8?q!^-=w=O>%^uWKn5Ct988r%zBnfzQe_|F~kF_CB{IJoV*CQ88CBypK<~)tj%|MOe+L-NCEohOk{+m@?APF;S@8dt5C z)VlX2cqyv{gb=mK1)vfLMU13#BxM2_%d#;}Y`qs(`2B&rp$(!Ph#sJiv48EVym*`u zC6(*o#PpB8 z^ppS3j4_-a_T_Q_zATF02LBlUkZ4K zWhpJeEJamWFuy#d&Y*EvLUk~Etcwa^s(v(@ghpud;NZ_BEfzbrpERdw#%Cwh6$E)B z+?5CZ@{ zdx5dVqS&@%8`06(E}ypiSZh1`D1=CV%Pu2Jehj9~M-wR5YFq3m|J|d}gpj*OdjE4+ zegAW~iT}HnBDeDE8HXHaw?C>?RyQp(svP20B?#&*)KmB?T0OqNH*J~)OY+kwJ(0B6 zgk>MGPq%Lr^vvY1P`GQHlEAT^pJGGc9uMaqalj@ zFl-{F55mtT3LlBVb5oqsRsJXRE+sHoN&#q*|4;T$j(z$6=wKuNucb(;_@iFkRXzMM zyQQzJUo?A)$3Ddt@Ak;2sNU~+k7?#86z1F0XcVUVUfP3Msz&v}R9d0_P|Q^?UBR@f zid98Ca$mM;>FCkk`ZSB(8>#zIr0!y)b`ra5w?-ck+v!9|)2a)sqVSVU>`2Hp!At%13BQ8c4Tl_!XXy>wXC8=F|DTHfcYJiTztR8JQG)p&R-gjr z6cdX1Vi|{@N*waXz4sB_+3HyArFvMuMkX-mqm7C61FzNb?40W%uBLeat@@cIVKypU z0{G{53DbR^>*x6CZ)Q|nGiXQeS3zap>EkVw5UqFY0GRwbW8pA)cc@XLIXciFMn`3$KY!T0+@gWWlIEdZopDOvx17V?M!| zXA+E)wZG$mB@*WW2z6!&%c|bvQ1m25aWt=eS`vQBh>AH zt~tl7{;i>X9CA0P=Ubne@BYKY_S!}6BuRIpr)w6h72(%HzBsKyx=xt9tj{T#;{?$i zL5Ji;mHuF2b59|UCqi$Q}Gnx#GSz_h*pI6A4ue>vU6e_2aW>F)Kiu3F_Y zaF^5a%GQss*cCJ2v}Y<#h>#52XJW8rzXyO#Oot`hFfgLj@I_NBfVa=V59x_)BejYVfJ4 zimQ#L)br}6BSGEV{XFpQXTH?kPk41cvdf=3A#9_^eLAIC|C>t=xc44sxNp#ZtF-8U z2m6)$Py2@_8~txBMaBO@^j5zu1!~EGN#w1zg#JxSG0aj3-%SvRGs6c2qNcMw=E%i-R5Uk5l92y&niK%J#j7%{%twE$G z$$e_EH5GH8xDe!eyqP0vFS#D7^!ak4ZCvcE9$pbS5tAOB17Iwl#1I0F-uP648{2s@w|0T$Z! z45sM<#4rOBnCB=1aLf?}g6`n#)^Hc8ki)E?`6|=_PGmn6WkRTr38g4bZO(CCVkhPM z5dt}6Lc`|-M4bEtr)l&+PGh!u1cn8-X=65J8_WI()3l`O&lGZCxNQr#cx)z>fk@7% z_5hBIkoDObH1%UQHj*n}=QxJ8_S98$4T zkO8S42mu3gu~Wo~-=YsjeG^~hrn!eS(L1c*aWYUuVN<%0QpqmR^I|qA%rv%gTTS6Y zY!nD6VzZPBxkT^Aq1RAMdNI^9@ISNvnSn3n>c2P0OaUB`InpycwAUrXPd|Ew+KK+B zm~m!a|9CC|RSv50;;%4kQw>_>|L1=Ghm(`%oBR)JDQ%>!cFi4Hr&WD9K{QPoU(bksDpq)Nr&CaY5leT)4wd%hXPn${Do(QKwQ9zeB(X$g=)Eqr`!Hi^ zuufOw-MGW5eO6KJvb30W1EHvBD}J?bYu+oVp<8RU(GfoD(ue*hXpUplf#7?kjs71U zo>csQk2myxEv1eAmuudi;H$RvG{1x$iauet*3pvGr{MjY!x2=y9{j-R>#>VPuvm?e*S{}5(QS?HJL5<(0x;ar4RkbQ+SK6XKAX!dvs<5ZS?=(pc?<_^ms%6 z*HK#S=+!mv&j>sq^&BD4Tf6+9&(c&~(e_mXf_ObT{r7t9#{>Mv59R|NK*I~dOSU1q zpIhlg|Fc_)80)P7wAz0T_I>&P`SFJSucfr#qZVtv1l?DS8|Zxry;Z2!b$ioz8;8fI z?W(t)G+j4(I4xIz3L5TA|AuyNO11Q%|CY+wiwCsZe=7N(Pmc~Z^nV?tjsAOU-k%3p z0P6XG*Nbls%1{7KPn(c#-t#YPleTadJYNUmIAAYv1F>0Dr5F7tw7b#ADlPQ?@bIW2{~vDRf2^mp(to|?wS?dN+xnT!Gl!Hst#eSk`m3iMAb{hy@>7IS>mNSuJ9^Z|Ej`z2o3Wc z-H#W2yJiG>tYsHAaskg1gOSQQbZsHl@^ptGDrm3j&txqMc=el=kBV7|T#UB^Lc!Ba zt$(+qe+B#gTOGZ}{7Gxz!qzaNVy-xy)y1q1a$`&0D8TuGhC2zis1XF`iy6#62@Q|I zDs^3PBG_N3dCx7oVc_d8efYm746C;P9UfQWKOa6ne!k)V>nLsf-&*rdx}PDPH>zD< zmea;;wyVsV&EqQ_#LE^ae1%4L;qsJ6dy!x8MmM6DL9p>%z8;Vr%f(uRrf2wij7!Ax zs(bHOkpjC(0n8Nvn)SBIaw_?t%W77o1T%TIkih0~P)1N))l8Q9u}wm-w|Rq*U^CQ* z%LpZZ4T%V526{^fzCEGXP4$98U6T&-!ej2YkWf-X4vOj83hF7Jy=c;h|GTjwE>hU> zF0j@AW8c^RPmcCC{C_Q_jsMrId4D^w4!%-P(rbEZ_y3spz7uqCd31wrU|{_WyCDD% zHt+_38bhzUR2x0*b1uu%|L$sFtN+J|um5fGKd!6vqyK9m{huY-e-O!EIl14E`b|;g z0rbD~1JHK)->3hl`v;r+Z)+(%>HmWsfX<5|0?tc!_hzKp8Q|)VRE}C{>S{u=Gk5eNIirHW1J#3_;SeZ^TC(H5xg6G zIpkCEZ$k0y;LHDa@E7m{q?pVYxP0-F4Td=-zoM8AhB!fRPgSSn*THbkVv?Y}Pk}Oq z&i|{+iPO!x>@>+>jZS9-1-A7y<{wgTde$ zQaD8%Q8pN;9|%2jE*{@a5O_ytNJipe;98xC9f0{?86YxvybAR5R~2Q4;?ax~$}~8X zfFB9HJF5W~UFf)i-=TC0#rCWeR*uQOwf?U~+177-?uDs6)giHK53NjAIN_Kv7N@ z=7cVGKnyud$t@sM10ELG!;}#)g?9+#6we_Kr+xxpN)nYXTo6)D5JQF-fE4Y3WQH^*n1T%QnfNHiQv=Aj`a%Z&TJ|eY z`K#P9=tG|37>fbrluYmlbCjIb0NVv$&$1+yY)0KH3hW3431)c;7bdWivn%Rm1oO!= zoNWV`5k5iG>>!S^MC<_-h}gonc4|%VEtuz!qKs=GfQ-Qy#yG_s$~a#zOZEt@fs#`) zC9;~^D;O;RpJ1AR98!)E130SzF~=m;fzrn+8k(Mm;b3qvkqX)i$dPrh5BE>@clQr= z_YaC1`n;M-N4s$RwBRex|qW*op&FmojnsH$?*RO*IPlyMc_ zSxnUp8S{Iwp9Xn~AVVrLSIo~qif&>0e{(uRidPK@y&Vj$2*)uR48*pqqh!zIkP{Nm zL|;2VclEFT`d_-nzy9lgZ<`R(FavLLlnpctGg06>a*yVS?#QMN?NX8G&>Ur4ML`=O zFog*Ma1L<_M=2W2WIQ_!+CxuLBgP?DM^NJWs#qQ~297>(nGS*C+X)BH;%#uafAAc< zh7`jWUxN!mb3)ampO1FHd76T^qACM#5kqv2lHuTA|MkCW=ICGl^}odgK)@+X&=k@; zu~ovrhl9cHD$8Kd$b#M>I%R5s4F>`fMA2vgZUyOQU_oYbRn*jQBIjvG(MUmVRiNtx zNs5Z+Xdn(W6LM;TnPNytN~enQW+dD7j+%~S>n!_Fkivo~O6o0}!wiHt)Q$=pwfDD4@GwrjVZ*L0z6}e;kjFO zFc5ShCb?i2dRl~TgT+>r2SCadC~@1Vg(we@ddKg zBxWWinIb<-n*7E@Pzk+H2lm`A#QM0W1ai5yVxwe>`on{>fJ|XPOLhonoCp~p794R< zoJ`f7O$6MwMhwvBPL2nrDUgELK(8nZ(__ISEKtP(msCSeIm{NCNyr$X3!B?fkdj*h z$haiwDyvL+CK-5U#C?ciQ5-r0ONNtXgfFIwy{daJA1Fqk``Qh@# z%NO9y)!_U}NIB;>;POUr_^;1zE^mgq$(y&}yO(cYe*F`8ad~s`>iqKc4LE=G3jBEf z_U-xAyUUk1;QZz8jYzB|8qcmDO|tIKyk?SOAC-(3la z-@JJX&cXHh+jo~2-@iJ43$DL^d;R9-GsWTyoP1VuLFOov7?W|yG)E{U_d+rc{W=(2W|BDJ1X1h!S<+AaSPk8@upU(9 zKxzAzRn0JWO61}KDNc-hSj-ko(}7Z%D2j28kw(6%k8>hJH=EOB5#h7J;9v;e5iOZ4 z#N1Uy1NrIO>sR0hP2>-U`;t#)3y?yNsGCNt^ZF6C3G%>jpURS*{Idj_7t?GjjK!&Bszj1849b|fq#i3{L(niD}c zGY1=rgoLVOVJ-WrjqS*Ow!j6YFTJQ361)Gqn3iXwZGba|DA%m=0~afJMKZB=!@=Ol z-Ep>HF&qqzhv16Hqoq^|mt|>IqD=*GG5i#azE%m@f8V}5fARX|aGI>BkJkJD)91eZ z_xNDr|GSn_+=9GPd0Ga8zx)MU!Kq+&H}M2b(O|F(^fQO^I3}}y@FHpclpB`aTb{UeRs!=Bazrsj+{aaXD{90rMc@KauB^bwgNUeC_2ma?flI+<#t|LE zShT<&cDLRtJxH~aX%GKC82k?)U@1Xh_kV!DyS1d{TY>){G9iPkC+R!-5F?Z@aC#*3 s1;Ln0JymK1d_u{65t;uJBa)l4DVwq>pJDm`0{{U3|5oo@2mta70Jmwci~s-t literal 0 HcmV?d00001 diff --git a/stable/nextcloud/28.0.1/ix_values.yaml b/stable/nextcloud/28.0.1/ix_values.yaml new file mode 100644 index 0000000000..58d10e5d60 --- /dev/null +++ b/stable/nextcloud/28.0.1/ix_values.yaml @@ -0,0 +1,516 @@ +image: + repository: tccr.io/truecharts/nextcloud-fpm + pullPolicy: IfNotPresent + tag: v28.0.1@sha256:060284d5c124000da874524b7cec4aed6f889b3021d7df80b7919541acbefca2 +nginxImage: + repository: nginxinc/nginx-unprivileged + pullPolicy: IfNotPresent + tag: 1.25.3@sha256:f67dc757811b9140d83408152cf9dc9296ad4f6b7d1ffb87874ad4759842e2be +imaginaryImage: + repository: tccr.io/truecharts/nextcloud-imaginary + pullPolicy: IfNotPresent + tag: v20230401@sha256:6a227d1b0200d29f25028e07b8852f60e3d91a5814048933e70eccee749dc04c +hpbImage: + repository: tccr.io/truecharts/nextcloud-push-notify + pullPolicy: IfNotPresent + tag: v0.6.3@sha256:b9c35ab123354eeac3996e361f8c30b8e4de6d2ccd69e5179a7c2a101a67b46f +clamavImage: + repository: clamav/clamav + pullPolicy: IfNotPresent + tag: 1.2.1@sha256:d584c29eefc29e138eb14f243abef2f6712cffecac52194626a2b2f6bb3ec2c7 +collaboraImage: + repository: collabora/code + pullPolicy: IfNotPresent + tag: 23.05.6.4.1@sha256:46534fe0ed6208797c6711f29d5e85a8a3e554c9debbfe7ff0587b1f2710465e +nextcloud: + # Initial Credentials + credentials: + initialAdminUser: admin + initialAdminPassword: adminpass + # General settings + general: + # Custom Nextcloud Scripts + run_optimize: true + default_phone_region: GR + # IP used for exposing nextcloud, + # often the loadbalancer IP + accessIP: "" + # Allows Nextcloud to connect to unsecure (http) endpoints + force_enable_allow_local_remote_servers: false + # File settings + files: + shared_folder_name: Shared + max_chunk_size: 10485760 + # Expiration settings + expirations: + activity_expire_days: 90 + trash_retention_obligation: auto + versions_retention_obligation: auto + # Previews settings + previews: + enabled: true + # It will also deploy the container + imaginary: true + cron: true + schedule: "*/30 * * * *" + max_x: 2048 + max_y: 2048 + max_memory: 1024 + max_file_size_image: 50 + # Setting for Imaginary + max_allowed_resolution: 18.0 + jpeg_quality: 60 + square_sizes: 32 256 + width_sizes: 256 384 + height_sizes: 256 + # Casings are important + # https://github.com/nextcloud/server/blob/master/config/config.sample.php#L1269 + # Only the last part of the provider is needed + providers: + - PNG + - JPEG + # Logging settings + logging: + log_level: 2 + log_file: /var/www/html/data/logs/nextcloud.log + log_audit_file: /var/www/html/data/logs/audit.log + log_date_format: d/m/Y H:i:s + # ClamAV settings + clamav: + # It will also deploy the container + # Note that this runs as root + enabled: false + stream_max_length: 26214400 + file_max_size: -1 + infected_action: only_log + # Notify Push settings + notify_push: + # It will also deploy the container + enabled: true + # Collabora settings + collabora: + # It will also deploy the container + enabled: false + # default|compact|tabbed + interface_mode: default + username: admin + password: changeme + dictionaries: + - de_DE + - en_GB + - en_US + - el_GR + - es_ES + - fr_FR + - pt_BR + - pt_PT + - it + - nl + - ru + onlyoffice: + # It will not deploy the container + # Only add the OnlyOffice settings + enabled: false + url: "" + internal_url: "" + verify_ssl: true + jwt: "" + jwt_header: Authorization + # PHP settings + php: + memory_limit: 1G + upload_limit: 10G + pm_max_children: 180 + pm_start_servers: 18 + pm_min_spare_servers: 12 + pm_max_spare_servers: 30 + opcache: + interned_strings_buffer: 32 + max_accelerated_files: 10000 + memory_consumption: 128 + revalidate_freq: 60 + jit_buffer_size: 128 +# Do NOT edit below this line +workload: + # Nextcloud php-fpm + main: + type: Deployment + podSpec: + containers: + main: + enabled: true + primary: true + envFrom: + - configMapRef: + name: nextcloud-config + probes: + liveness: + enabled: true + type: exec + command: /healthcheck.sh + readiness: + enabled: true + type: exec + command: /healthcheck.sh + startup: + enabled: true + type: tcp + port: "{{ .Values.service.nextcloud.ports.nextcloud.targetPort }}" + nginx: + enabled: true + type: Deployment + strategy: RollingUpdate + replicas: 1 + podSpec: + containers: + nginx: + enabled: true + primary: true + imageSelector: nginxImage + probes: + readiness: + enabled: true + path: /robots.txt + port: "{{ .Values.service.main.ports.main.port }}" + httpHeaders: + Host: kube.internal.healthcheck + liveness: + enabled: true + path: /robots.txt + port: "{{ .Values.service.main.ports.main.port }}" + httpHeaders: + Host: kube.internal.healthcheck + startup: + enabled: true + type: tcp + port: "{{ .Values.service.main.ports.main.port }}" + notify: + enabled: true + type: Deployment + strategy: RollingUpdate + replicas: 1 + podSpec: + containers: + notify: + primary: true + enabled: true + imageSelector: hpbImage + envFrom: + - configMapRef: + name: hpb-config + probes: + readiness: + enabled: true + path: /push/test/cookie + port: 7867 + httpHeaders: + Host: kube.internal.healthcheck + liveness: + enabled: true + path: /push/test/cookie + port: 7867 + httpHeaders: + Host: kube.internal.healthcheck + startup: + enabled: true + type: tcp + port: 7867 + imaginary: + enabled: true + type: Deployment + strategy: RollingUpdate + replicas: 1 + podSpec: + containers: + imaginary: + primary: true + enabled: true + imageSelector: imaginaryImage + command: imaginary + args: + - -p + - "{{ .Values.service.imaginary.ports.imaginary.port }}" + - -concurrency + - "10" + - -max-allowed-resolution + - "{{ .Values.nextcloud.previews.max_allowed_resolution }}" + - -enable-url-source + - -return-size + probes: + readiness: + enabled: true + path: /health + port: "{{ .Values.service.imaginary.ports.imaginary.port }}" + liveness: + enabled: true + path: /health + port: "{{ .Values.service.imaginary.ports.imaginary.port }}" + startup: + enabled: true + type: tcp + port: "{{ .Values.service.imaginary.ports.imaginary.port }}" + clamav: + enabled: true + type: Deployment + strategy: RollingUpdate + replicas: 1 + podSpec: + containers: + clamav: + primary: true + enabled: true + imageSelector: clamavImage + # FIXME: https://github.com/Cisco-Talos/clamav/issues/478 + securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + envFrom: + - configMapRef: + name: clamav-config + probes: + readiness: + enabled: true + type: exec + command: clamdcheck.sh + liveness: + enabled: true + type: exec + command: clamdcheck.sh + startup: + enabled: true + type: tcp + port: "{{ .Values.service.clamav.ports.clamav.targetPort }}" + collabora: + enabled: true + type: Deployment + strategy: RollingUpdate + replicas: 1 + podSpec: + containers: + collabora: + primary: true + enabled: true + imageSelector: collaboraImage + securityContext: + runAsUser: 100 + runAsGroup: 102 + readOnlyRootFilesystem: false + allowPrivilegeEscalation: true + capabilities: + add: + - CHOWN + - FOWNER + - SYS_CHROOT + - MKNOD + envFrom: + - configMapRef: + name: collabora-config + probes: + readiness: + enabled: true + type: http + path: /collabora/ + port: "{{ .Values.service.collabora.ports.collabora.targetPort }}" + liveness: + enabled: true + type: http + path: /collabora/ + port: "{{ .Values.service.collabora.ports.collabora.targetPort }}" + startup: + enabled: true + type: tcp + port: "{{ .Values.service.collabora.ports.collabora.targetPort }}" +cronjobs: + # Don't change names, it's used in the persistence + - name: nextcloud-cron + enabled: true + schedule: "*/5 * * * *" + cmd: + - echo "Running [php -f /var/www/html/cron.php] ..." + - php -f /var/www/html/cron.php + - echo "Finished [php -f /var/www/html/cron.php]" + - name: preview-cron + enabled: "{{ .Values.nextcloud.previews.cron }}" + schedule: "{{ .Values.nextcloud.previews.schedule }}" + cmd: + - echo "Running [occ preview:pre-generate] ..." + - occ preview:pre-generate + - echo "Finished [occ preview:pre-generate]" +service: + # Main service links to ingress easier + # That's why the nginx is swapped with nextcloud + main: + targetSelector: nginx + ports: + main: + targetSelector: nginx + port: 8080 + nextcloud: + enabled: true + targetSelector: main + ports: + nextcloud: + enabled: true + targetSelector: main + port: 9000 + targetPort: 9000 + notify: + enabled: true + targetSelector: notify + ports: + notify: + enabled: true + primary: true + port: 7867 + targetPort: 7867 + targetSelector: notify + metrics: + enabled: true + port: 7868 + targetSelector: notify + imaginary: + enabled: true + targetSelector: imaginary + ports: + imaginary: + enabled: true + port: 9090 + targetSelector: imaginary + clamav: + enabled: true + targetSelector: clamav + ports: + clamav: + enabled: true + port: 3310 + targetPort: 3310 + targetSelector: clamav + collabora: + enabled: true + targetSelector: collabora + ports: + collabora: + enabled: true + port: 9980 + targetPort: 9980 + targetSelector: collabora +persistence: + php-tune: + enabled: true + type: configmap + objectName: php-tune + targetSelector: + main: + main: + mountPath: /usr/local/etc/php-fpm.d/zz-tune.conf + subPath: zz-tune.conf + readOnly: true + redis-session: + enabled: true + type: configmap + objectName: redis-session + targetSelector: + main: + main: + mountPath: /usr/local/etc/php/conf.d/redis-session.ini + subPath: redis-session.ini + readOnly: true + opcache-recommended: + enabled: true + type: configmap + objectName: opcache + targetSelector: + main: + main: + mountPath: /usr/local/etc/php/conf.d/opcache-recommended.ini + subPath: opcache-recommended.ini + readOnly: true + nginx: + enabled: true + type: configmap + objectName: nginx-config + targetSelector: + nginx: + nginx: + mountPath: /etc/nginx/nginx.conf + subPath: nginx.conf + readOnly: true + nginx-temp: + enabled: true + type: emptyDir + targetSelector: + nginx: + nginx: + mountPath: /tmp/nginx + html: + enabled: true + targetSelector: + main: + main: + mountPath: /var/www/html + nextcloud-cron: + nextcloud-cron: + mountPath: /var/www/html + preview-cron: + preview-cron: + mountPath: /var/www/html + nginx: + nginx: + mountPath: /var/www/html + readOnly: true + config: + enabled: true + targetSelector: + main: + main: + mountPath: /var/www/html/config + nextcloud-cron: + nextcloud-cron: + mountPath: /var/www/html/config + preview-cron: + preview-cron: + mountPath: /var/www/html/config + notify: + notify: + mountPath: /var/www/html/config + readOnly: true + nginx: + nginx: + mountPath: /var/www/html/config + readOnly: true + data: + enabled: true + targetSelector: + main: + main: + mountPath: /var/www/html/data + init-perms: + mountPath: /var/www/html/data + nextcloud-cron: + nextcloud-cron: + mountPath: /var/www/html/data + preview-cron: + preview-cron: + mountPath: /var/www/html/data + nginx: + nginx: + mountPath: /var/www/html/data + readOnly: true +cnpg: + main: + enabled: true + user: nextcloud + database: nextcloud +redis: + enabled: true + username: default +portal: + open: + enabled: true +updated: true + +ingress: + main: + required: true diff --git a/stable/nextcloud/28.0.1/questions.yaml b/stable/nextcloud/28.0.1/questions.yaml new file mode 100644 index 0000000000..ab42b96a7d --- /dev/null +++ b/stable/nextcloud/28.0.1/questions.yaml @@ -0,0 +1,4172 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - 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: Postgresql + description: Postgresql + - name: Documentation + description: Documentation +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + - 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..." + 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: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + - variable: TZ + label: Timezone + group: "General Settings" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + - variable: nextcloud + group: App Configuration + label: Nextcloud + schema: + additional_attrs: true + type: dict + attrs: + - variable: credentials + label: Initial Credentials + schema: + additional_attrs: true + type: dict + attrs: + - variable: initialAdminUser + label: Initial Admin User + description: Sets the initial admin username + schema: + type: string + required: true + default: "" + - variable: initialAdminPassword + label: Initial Admin Password + description: Sets the initial admin password + schema: + type: string + required: true + private: true + default: "" + - variable: general + label: General + schema: + additional_attrs: true + type: dict + attrs: + - variable: run_optimize + label: Run Optimize Scripts + description: | + Runs the following commands at startup:
+ occ db:add-missing-indices
+ occ db:add-missing-columns
+ occ db:add-missing-primary-keys
+ yes | occ db:convert-filecache-bigint
+ occ maintenance:mimetype:update-js
+ occ maintenance:mimetype:update-db
+ occ maintenance:update:htaccess
+ schema: + type: boolean + default: false + - variable: default_phone_region + label: Default Phone Region + description: | + Sets the default phone region in ISO_3166-1 format (e.g. US).
+ https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements + schema: + type: string + valid_chars: '^[A-Z]{2}$' + required: true + default: "" + - variable: accessIP + label: Access IP + description: Set to the IP-Address used to reach Nextcloud. + schema: + type: string + required: true + $ref: + - "definitions/nodeIP" + - variable: force_enable_allow_local_remote_servers + label: Force Enable Allow Local Remote Servers + description: + Enables 'allow_local_remote_servers' option + schema: + type: boolean + default: false + - variable: files + label: Files Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: shared_folder_name + label: Shared Folder Name + schema: + type: string + required: true + default: Shared + - variable: max_chunk_size + label: Max Chunk Size + schema: + type: int + required: true + default: 10485760 + - variable: expirations + label: Expirations Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: activity_expire_days + label: Activity Expire Days + schema: + type: int + required: true + default: 90 + - variable: trash_retention_obligation + label: Trash Retention Obligation + schema: + type: string + required: true + default: auto + - variable: versions_retention_obligation + label: Versions Retention Obligation + schema: + type: string + required: true + default: auto + - variable: previews + label: Previews Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Previews + schema: + type: boolean + default: true + show_subquestions_if: true + subquestions: + - variable: imaginary + label: Enable imaginary + description: | + Enable imaginary to generate previews in the background.
+ It will also deploy the needed container. + schema: + type: boolean + default: true + - variable: cron + label: Enable cron + description: | + Enable cron to generate previews in the background. + schema: + type: boolean + default: true + - variable: schedule + label: Cron Schedule + schema: + type: string + default: "*/30 * * * *" + - variable: max_x + label: Max X + schema: + type: int + required: true + default: 2048 + - variable: max_y + label: Max Y + schema: + type: int + required: true + default: 2048 + - variable: max_memory + label: Max Memory + schema: + type: int + required: true + default: 1024 + - variable: max_allowed_resolution + label: Max Allowed Resolution + schema: + type: string + valid_chars: '^[0-9]{1,5}(\.[0-9]{1,2})?$' + show_if: [["imaginary", "=", true]] + required: true + default: "18.0" + - variable: max_file_size_image + label: Max File Size Image + schema: + type: int + required: true + default: 50 + - variable: jpeg_quality + label: JPEG Quality + schema: + type: int + required: true + default: 60 + - variable: square_sizes + label: Square Sizes + schema: + type: string + required: true + default: "32 256" + - variable: width_sizes + label: Width Sizes + schema: + type: string + required: true + default: "256 384" + - variable: height_sizes + label: Height Sizes + schema: + type: string + required: true + default: "256" + - variable: providers + label: Providers + schema: + type: list + empty: false + required: true + default: + - BMP + - GIF + - JPEG + - Krita + - MarkDown + - MP3 + - OpenDocument + - PNG + - TXT + - XBitmap + items: + - variable: provider_entry + label: Provider Entry + schema: + type: string + required: true + default: "" + enum: + - value: BMP + description: BMP + - value: Font + description: Font + - value: GIF + description: GIF + - value: HEIC + description: HEIC + - value: Illustrator + description: Illustrator + - value: JPEG + description: JPEG + - value: Krita + description: Krita + - value: MarkDown + description: MarkDown + - value: Movie + description: Movie + - value: MP3 + description: MP3 + - value: MSOffice2003 + description: MSOffice2003 + - value: MSOffice2007 + description: MSOffice2007 + - value: MSOfficeDoc + description: MSOfficeDoc + - value: OpenDocument + description: OpenDocument + - value: PDF + description: PDF + - value: Photoshop + description: Photoshop + - value: PNG + description: PNG + - value: Postscript + description: Postscript + - value: StarOffice + description: StarOffice + - value: SVG + description: SVG + - value: TIFF + description: TIFF + - value: TXT + description: TXT + - value: XBitmap + description: XBitmap + - variable: logging + label: Logging Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: log_level + label: Log Level + schema: + type: int + required: true + default: 2 + enum: + - value: 0 + description: Debug + - value: 1 + description: Info + - value: 2 + description: Warning + - value: 3 + description: Error + - value: 4 + description: Fatal + - variable: log_date_format + label: Log Date Format + schema: + type: string + required: true + default: d/m/Y H:i:s + - variable: notify_push + label: Notify Push Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Notify Push + description: | + Enable and Configure Notify Push.
+ It will also deploy the needed container + schema: + type: boolean + default: true + - variable: clamav + label: ClamAV Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable ClamAV + description: | + Enable and configure ClamAV.
+ It will also deploy the needed container.
+ Keep in mind that this will run as root.
+ https://github.com/Cisco-Talos/clamav/issues/478 + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: stream_max_length + label: Stream Max Length + schema: + type: int + required: true + default: 104857600 + - variable: file_max_size + label: File Max Size + schema: + type: int + required: true + default: -1 + - variable: infected_action + label: Infected Action + schema: + type: string + required: true + default: only_log + enum: + - value: delete + description: Delete + - value: only_log + description: Only Log + - variable: collabora + label: Collabora Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Collabora + description: | + Enable and configure Collabora.
+ It will also deploy the needed container.
+ Keep in mind that this will run as root. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: interface_mode + label: Interface Mode + schema: + type: string + required: true + default: default + enum: + - value: default + description: Default + - value: compact + description: Compact + - value: tabbed + description: Tabbed + - variable: username + label: Username + schema: + type: string + default: admin + required: true + - variable: password + label: Password + schema: + type: string + default: "" + required: true + - variable: dictionaries + label: Dictionaries + schema: + type: list + empty: false + required: true + default: + - de_DE + - en_GB + - en_US + - el_GR + - es_ES + - fr_FR + - pt_BR + - pt_PT + - it + - nl + - ru + items: + - variable: dictionary + label: Dictionary + schema: + type: string + required: true + default: "" + - variable: onlyoffice + label: Only Office Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable OnlyOffice + description: | + Enable and configure OnlyOffice.
+ This will NOT deploy the needed container.
+ You need to deploy it yourself. + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: url + label: Public URL + description: | + The public FQDN and port of the OnlyOffice Document Server + schema: + type: string + required: true + default: "" + - variable: internal_url + label: Internal URL + description: | + The internal FQDN and port of the OnlyOffice Document Server + schema: + type: string + required: true + default: "" + - variable: verify_ssl + label: Verify SSL (Advanced) + description: | + Verify SSL when connecting to OnlyOffice Document Server + schema: + type: boolean + default: true + - variable: jwt + label: JWT + schema: + type: string + required: true + default: "" + - variable: jwt_header + label: JWT Header + schema: + type: string + required: true + default: Authorization + - variable: php + label: PHP Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: memory_limit + label: Memory Limit + schema: + type: string + required: true + default: 1G + - variable: upload_limit + label: Upload Limit + schema: + type: string + required: true + default: 10G + - variable: pm_max_children + label: Max Children + schema: + type: int + required: true + default: 180 + - variable: pm_start_servers + label: Start Servers + schema: + type: int + required: true + default: 18 + - variable: pm_min_spare_servers + label: Minimum Spare Servers + schema: + type: int + required: true + default: 12 + - variable: pm_max_spare_servers + label: Maximum Spare Servers + schema: + type: int + required: true + default: 30 + - variable: opcache + label: OPCache Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: interned_strings_buffer + label: Interned Strings Buffer + description: The amount of memory used to store interned strings, in megabytes. + schema: + type: int + required: true + default: 32 + - variable: max_accelerated_files + label: Max Accelerated Files + description: The maximum number of keys (and therefore scripts) in the OPcache hash table. + schema: + type: int + required: true + default: 10000 + - variable: memory_consumption + label: Memory Consumption + description: The size of the shared memory storage used by OPcache, in megabytes. + schema: + type: int + required: true + default: 128 + - variable: revalidate_freq + label: Revalidate Frequency + description: How often to check script timestamps for updates, in seconds. 0 will result in OPcache checking for updates on every request. + schema: + type: int + required: true + default: 60 + - variable: jit_buffer_size + label: JIT Buffer Size + description: The amount of shared memory (in megabytes) to reserve for compiled JIT code. A zero value disables the JIT. + schema: + type: int + required: true + default: 128 + + - 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: html + label: App HTML Storage + description: Stores the Application HTML. + 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: pvc + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - value: iscsi + description: iSCSI 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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - 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 (Do NOT REDUCE after installation) + description: This value can ONLY be INCREASED after the installation + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: disabled + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - variable: config + label: App Config Storage + description: Stores the Application Config. + 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: pvc + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - value: iscsi + description: iSCSI 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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - 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 (Do NOT REDUCE after installation) + description: This value can ONLY be INCREASED after the installation + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: disabled + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - variable: data + label: User Data Storage + description: Stores the User 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: pvc + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - value: iscsi + description: iSCSI 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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - 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 (Do NOT REDUCE after installation) + description: This value can ONLY be INCREASED after the installation + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: disabled + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - 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: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: hostPath + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - 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: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - 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: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + - 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: [{path: "/", pathType: "Prefix"}] + 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: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name (Optional) + description: Defaults to chart name + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description (Optional) + description: Defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: icon + label: Icon (Optional) + description: Defaults to chart icon + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: widget + label: Widget Settings + schema: + type: dict + additional_attrs: true + show_if: [["enabled", "=", true]] + attrs: + - variable: enabled + label: Enable Widget + description: When disabled all widget annotations are skipped. + schema: + type: boolean + default: true + - variable: custom + label: Options + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: API-key (key) + schema: + type: string + default: "" + - variable: customkv + label: Custom Options + schema: + type: list + default: [] + items: + - variable: option + label: Option + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + default: "" + required: true + - variable: value + label: Value + schema: + type: string + default: "" + required: true + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + 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: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: 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: overrideService + 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: [] + show_if: [["certificateIssuer", "=", ""]] + 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: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: namespace + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: securityContext + group: Security and Permissions + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: container + label: Container + schema: + additional_attrs: true + type: dict + attrs: + # Settings from questions.yaml get appended here on a per-app basis + - 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 of the user running the application + schema: + type: int + default: 568 + # Settings from questions.yaml get appended here on a per-app basis + - 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 + show_if: [["runAsUser", "=", 0]] + 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: "0022" + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + - variable: pod + label: Pod + schema: + additional_attrs: true + type: dict + attrs: + - 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 + # Settings from questions.yaml get appended here on a per-app basis + - variable: fsGroup + label: fsGroup + description: The group that should own ALL storage. + schema: + type: int + default: 568 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + 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/manual/SCALE/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/manual/SCALE/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 + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + 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/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + 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: device + 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" + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: scaleGPUEntry + label: GPU + schema: + additional_attrs: true + type: dict + attrs: + # Specify GPU configuration + - variable: gpu + label: Select GPU + schema: + additional_attrs: true + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] + - variable: workaround + label: "Workaround" + schema: + type: string + default: workaround + hidden: true + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 2 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 2 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: metrics + group: Metrics + label: Prometheus Metrics + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Metrics + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + description: Enable Prometheus Metrics + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: prometheusRule + label: PrometheusRule + description: Enable and configure Prometheus Rules for the App. + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + description: Enable Prometheus Metrics + schema: + type: boolean + default: false + # TODO: Rule List section +# - variable: horizontalPodAutoscaler +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# type: list +# default: [] +# items: +# - variable: hpaEntry +# label: HPA Entry +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: name +# label: Name +# schema: +# type: string +# required: true +# default: "" +# - 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: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - 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: 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: 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: ingress + label: "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: [{path: "/", pathType: "Prefix"}] + 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: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + 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: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: 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: gluetun + description: Gluetun + - value: tailscale + description: Tailscale + - value: openvpn + description: OpenVPN (Deprecated) + - value: wireguard + description: Wireguard (Deprecated) + - variable: openvpn + label: OpenVPN Settings + schema: + additional_attrs: true + 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 + show_if: [["username", "!=", ""]] + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + additional_attrs: true + 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: auth_once + label: Auth Once + description: Only attempt to log in if not already logged in. + schema: + type: boolean + default: true + - 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: The address on which to listen for SOCKS5 proxying into the tailscale net. + schema: + type: string + default: "" + - variable: outbound_http_proxy_listen + label: Outbound HTTP Proxy Listen + description: The address on which to listen for HTTP proxying into the tailscale net. + 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: string + show_if: [["type", "!=", "disabled"]] + 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 + max_length: 10240 + - 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/stable/nextcloud/28.0.1/templates/NOTES.txt b/stable/nextcloud/28.0.1/templates/NOTES.txt new file mode 100644 index 0000000000..efcb74cb77 --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/nextcloud/28.0.1/templates/_configmap.tpl b/stable/nextcloud/28.0.1/templates/_configmap.tpl new file mode 100644 index 0000000000..081cf5d71c --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/_configmap.tpl @@ -0,0 +1,443 @@ +{{- define "nextcloud.accessurl" -}} + {{- $accessUrl := .Values.chartContext.appUrl -}} + {{- if or (contains "127.0.0.1" $accessUrl) (contains "localhost" $accessUrl) -}} + {{- if .Values.nextcloud.general.accessIP -}} + {{- $prot := "http" -}} + {{- $host := .Values.nextcloud.general.accessIP -}} + {{- $port := .Values.service.main.ports.main.port -}} + {{/* + Allowing here to override protocol and port + should be enough to make it work with any rev proxy + */}} + {{- $accessUrl = printf "%v://%v:%v" $prot $host $port -}} + {{- end -}} + {{- end -}} + + {{- $accessUrl -}} +{{- end -}} + +{{- define "nextcloud.accesshost" -}} + {{- $accessUrl := (include "nextcloud.accessurl" $) -}} + {{- $accessHost := regexReplaceAll ".*://(.*)" $accessUrl "${1}" -}} + {{- $accessHost = regexReplaceAll "(.*):.*" $accessHost "${1}" -}} + + {{- $accessHost -}} +{{- end -}} + +{{/* Define the configmap */}} +{{- define "nextcloud.configmaps" -}} +{{- $fullname := (include "tc.v1.common.lib.chart.names.fullname" $) -}} +{{- $fqdn := (include "tc.v1.common.lib.chart.names.fqdn" $) -}} +{{- $accessUrl := (include "nextcloud.accessurl" $) -}} +{{- $accessHost := (include "nextcloud.accesshost" $) -}} +{{- $accessHostPort := regexReplaceAll ".*://(.*)" $accessUrl "${1}" -}} +{{- $accessProtocol := regexReplaceAll "(.*)://.*" $accessUrl "${1}" -}} +{{- $redisHost := .Values.redis.creds.plainhost | trimAll "\"" -}} +{{- $redisPass := .Values.redis.creds.redisPassword | trimAll "\"" -}} +{{- $healthHost := "kube.internal.healthcheck" -}} + +php-tune: + enabled: true + data: + zz-tune.conf: | + [www] + pm.max_children = {{ .Values.nextcloud.php.pm_max_children }} + pm.start_servers = {{ .Values.nextcloud.php.pm_start_servers }} + pm.min_spare_servers = {{ .Values.nextcloud.php.pm_min_spare_servers }} + pm.max_spare_servers = {{ .Values.nextcloud.php.pm_max_spare_servers }} + +opcache: + enabled: true + data: + opcache-recommended.ini: | + opcache.enable=1 + opcache.save_comments=1 + opcache.jit=1255 + opcache.interned_strings_buffer={{ .Values.nextcloud.opcache.interned_strings_buffer }} + opcache.max_accelerated_files={{ .Values.nextcloud.opcache.max_accelerated_files }} + opcache.memory_consumption={{ .Values.nextcloud.opcache.memory_consumption }} + opcache.revalidate_freq={{ .Values.nextcloud.opcache.revalidate_freq }} + opcache.jit_buffer_size={{ printf "%vM" .Values.nextcloud.opcache.jit_buffer_size }} + +redis-session: + enabled: true + data: + redis-session.ini: | + session.save_handler = redis + session.save_path = {{ printf "tcp://%v:6379?auth=%v" $redisHost $redisPass | quote }} + redis.session.locking_enabled = 1 + redis.session.lock_retries = -1 + redis.session.lock_wait_time = 10000 + +hpb-config: + enabled: {{ .Values.nextcloud.notify_push.enabled }} + data: + NEXTCLOUD_URL: {{ printf "http://%v:%v" $fullname .Values.service.main.ports.main.port }} + HPB_HOST: {{ $healthHost }} + CONFIG_FILE: {{ printf "%v/config.php" .Values.persistence.config.targetSelector.notify.notify.mountPath }} + METRICS_PORT: {{ .Values.service.notify.ports.metrics.port | quote }} + +clamav-config: + enabled: {{ .Values.nextcloud.clamav.enabled }} + data: + CLAMAV_NO_CLAMD: "false" + CLAMAV_NO_FRESHCLAMD: "true" + CLAMAV_NO_MILTERD: "true" + CLAMD_STARTUP_TIMEOUT: "1800" + +collabora-config: + enabled: {{ .Values.nextcloud.collabora.enabled }} + data: + aliasgroup1: {{ $accessUrl }} + server_name: {{ $accessHostPort }} + dictionaries: {{ join " " .Values.nextcloud.collabora.dictionaries }} + username: {{ .Values.nextcloud.collabora.username | quote }} + password: {{ .Values.nextcloud.collabora.password | quote }} + DONT_GEN_SSL_CERT: "true" + # mount_jail_tree is only used for local storage + # not needed for WOPI https://github.com/CollaboraOnline/online/issues/3604#issuecomment-989833814 + extra_params: | + --o:ssl.enable=false + --o:ssl.termination=true + --o:net.service_root=/collabora + --o:home_mode.enable=true + --o:welcome.enable=false + --o:logging.level=warning + --o:logging.level_startup=warning + --o:security.seccomp=true + --o:mount_jail_tree=false + --o:user_interface.mode={{ .Values.nextcloud.collabora.interface_mode }} + +nextcloud-config: + enabled: true + data: + {{/* Database */}} + POSTGRES_DB: {{ .Values.cnpg.main.database | quote }} + POSTGRES_USER: {{ .Values.cnpg.main.user | quote }} + POSTGRES_PASSWORD: {{ .Values.cnpg.main.creds.password | trimAll "\"" }} + POSTGRES_HOST: {{ .Values.cnpg.main.creds.host | trimAll "\"" }} + + {{/* Redis */}} + NX_REDIS_HOST: {{ $redisHost }} + NX_REDIS_PASS: {{ $redisPass }} + + {{/* Nextcloud INITIAL credentials */}} + NEXTCLOUD_ADMIN_USER: {{ .Values.nextcloud.credentials.initialAdminUser | quote }} + NEXTCLOUD_ADMIN_PASSWORD: {{ .Values.nextcloud.credentials.initialAdminPassword | quote }} + + {{/* PHP Variables */}} + PHP_MEMORY_LIMIT: {{ .Values.nextcloud.php.memory_limit | quote }} + PHP_UPLOAD_LIMIT: {{ .Values.nextcloud.php.upload_limit | quote }} + + {{/* Notify Push */}} + NX_NOTIFY_PUSH: {{ .Values.nextcloud.notify_push.enabled | quote }} + {{- if .Values.nextcloud.notify_push.enabled }} + NX_NOTIFY_PUSH_ENDPOINT: {{ $accessUrl }}/push + {{- end }} + + {{/* Previews */}} + NX_PREVIEWS: {{ .Values.nextcloud.previews.enabled | quote }} + NX_PREVIEW_PROVIDERS: {{ join " " .Values.nextcloud.previews.providers }} + NX_PREVIEW_MAX_X: {{ .Values.nextcloud.previews.max_x | quote }} + NX_PREVIEW_MAX_Y: {{ .Values.nextcloud.previews.max_y | quote }} + NX_PREVIEW_MAX_MEMORY: {{ .Values.nextcloud.previews.max_memory | quote }} + NX_PREVIEW_MAX_FILESIZE_IMAGE: {{ .Values.nextcloud.previews.max_file_size_image | quote }} + NX_JPEG_QUALITY: {{ .Values.nextcloud.previews.jpeg_quality | quote }} + NX_PREVIEW_SQUARE_SIZES: {{ .Values.nextcloud.previews.square_sizes | quote }} + NX_PREVIEW_WIDTH_SIZES: {{ .Values.nextcloud.previews.width_sizes | quote }} + NX_PREVIEW_HEIGHT_SIZES: {{ .Values.nextcloud.previews.height_sizes | quote }} + + {{/* Imaginary */}} + NX_IMAGINARY: {{ and .Values.nextcloud.previews.enabled .Values.nextcloud.previews.imaginary | quote }} + {{- if and .Values.nextcloud.previews.enabled .Values.nextcloud.previews.imaginary }} + NX_IMAGINARY_URL: {{ printf "http://%v-imaginary:%v" $fullname .Values.service.imaginary.ports.imaginary.port }} + {{- end }} + + {{/* Expirations */}} + NX_ACTIVITY_EXPIRE_DAYS: {{ .Values.nextcloud.expirations.activity_expire_days | quote }} + NX_TRASH_RETENTION: {{ .Values.nextcloud.expirations.trash_retention_obligation | quote }} + NX_VERSIONS_RETENTION: {{ .Values.nextcloud.expirations.versions_retention_obligation | quote }} + + {{/* General */}} + NX_RUN_OPTIMIZE: {{ .Values.nextcloud.general.run_optimize | quote }} + NX_DEFAULT_PHONE_REGION: {{ .Values.nextcloud.general.default_phone_region | quote }} + NEXTCLOUD_DATA_DIR: {{ .Values.persistence.data.targetSelector.main.main.mountPath }} + NX_FORCE_ENABLE_ALLOW_LOCAL_REMOTE_SERVERS: {{ .Values.nextcloud.general.force_enable_allow_local_remote_servers | quote }} + + {{/* Files */}} + NX_SHARED_FOLDER_NAME: {{ .Values.nextcloud.files.shared_folder_name | quote }} + NX_MAX_CHUNKSIZE: {{ .Values.nextcloud.files.max_chunk_size | mul 1 | quote }} + + {{/* Logging */}} + NX_LOG_LEVEL: {{ .Values.nextcloud.logging.log_level | quote }} + NX_LOG_FILE: {{ .Values.nextcloud.logging.log_file | quote }} + NX_LOG_FILE_AUDIT: {{ .Values.nextcloud.logging.log_audit_file | quote }} + NX_LOG_DATE_FORMAT: {{ .Values.nextcloud.logging.log_date_format | quote }} + NX_LOG_TIMEZONE: {{ .Values.TZ | quote }} + + {{/* ClamAV */}} + NX_CLAMAV: {{ .Values.nextcloud.clamav.enabled | quote }} + {{- if .Values.nextcloud.clamav.enabled }} + NX_CLAMAV_HOST: {{ printf "%v-clamav" $fullname }} + NX_CLAMAV_PORT: {{ .Values.service.clamav.ports.clamav.targetPort | quote }} + NX_CLAMAV_STREAM_MAX_LENGTH: {{ .Values.nextcloud.clamav.stream_max_length | mul 1 | quote }} + NX_CLAMAV_FILE_MAX_SIZE: {{ .Values.nextcloud.clamav.file_max_size | quote }} + NX_CLAMAV_INFECTED_ACTION: {{ .Values.nextcloud.clamav.infected_action | quote }} + {{- end }} + + {{/* Collabora */}} + NX_COLLABORA: {{ .Values.nextcloud.collabora.enabled | quote }} + {{- if .Values.nextcloud.collabora.enabled }} + NX_COLLABORA_URL: {{ printf "%v/collabora" $accessUrl | quote }} + # Ideally this would be a combo of: public ip, pod cidr, svc cidr + # But not always people have static IP. + NX_COLLABORA_ALLOWLIST: "0.0.0.0/0" + {{- end }} + + {{/* Only Office */}} + NX_ONLYOFFICE: {{ .Values.nextcloud.onlyoffice.enabled | quote }} + {{- if .Values.nextcloud.onlyoffice.enabled }} + NX_ONLYOFFICE_URL: {{ .Values.nextcloud.onlyoffice.url | quote }} + NX_ONLYOFFICE_INTERNAL_URL: {{ .Values.nextcloud.onlyoffice.internal_url | quote }} + NX_ONLYOFFICE_VERIFY_SSL: {{ .Values.nextcloud.onlyoffice.verify_ssl | quote }} + NX_ONLYOFFICE_NEXTCLOUD_INTERNAL_URL: {{ printf "http://%v.svc.cluster.local:%v" $fqdn .Values.service.main.ports.main.port }} + NX_ONLYOFFICE_JWT: {{ .Values.nextcloud.onlyoffice.jwt | quote }} + NX_ONLYOFFICE_JWT_HEADER: {{ .Values.nextcloud.onlyoffice.jwt_header | quote }} + {{- end }} + + {{/* URLs */}} + NX_OVERWRITE_HOST: {{ $accessHostPort }} + NX_OVERWRITE_CLI_URL: {{ $accessUrl }} + # Return the protocol part of the URL + NX_OVERWRITE_PROTOCOL: {{ $accessProtocol | lower }} + # IP (or range in this case) of the proxy(ies) + NX_TRUSTED_PROXIES: | + {{ .Values.chartContext.podCIDR }} + {{ .Values.chartContext.svcCIDR }} + # fullname-* will allow access from the + # other services in the same namespace + NX_TRUSTED_DOMAINS: | + 127.0.0.1 + localhost + {{ $fullname }} + {{ printf "%v-*" $fullname }} + {{ $healthHost }} + {{- if not (contains "127.0.0.1" $accessHost) }} + {{- $accessHost | nindent 6 }} + {{- end -}} + {{- with .Values.nextcloud.general.accessIP }} + {{- . | nindent 6 }} + {{- end }} + +# TODO: Replace locations with ingress +# like /push, /.well-known/carddav, /.well-known/caldav +# needs some work as nginx converts urls to pretty urls +# before matching them to locations, so ingress needs to +# take that into consideration. +nginx-config: + enabled: true + data: + nginx.conf: | + worker_processes auto; + + error_log /var/log/nginx/error.log warn; + # Set to /tmp so it can run as non-root + pid /tmp/nginx.pid; + + events { + worker_connections 1024; + } + + http { + # Set to /tmp so it can run as non-root + client_body_temp_path /tmp/nginx/client_temp; + proxy_temp_path /tmp/nginx/proxy_temp_path; + fastcgi_temp_path /tmp/nginx/fastcgi_temp; + uwsgi_temp_path /tmp/nginx/uwsgi_temp; + scgi_temp_path /tmp/nginx/scgi_temp; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + # Prevent nginx HTTP Server Detection + server_tokens off; + + keepalive_timeout 65; + + #gzip on; + + upstream php-handler { + server {{ printf "%v-nextcloud" $fullname }}:{{ .Values.service.nextcloud.ports.nextcloud.targetPort }}; + } + + server { + listen {{ .Values.service.main.ports.main.port }}; + absolute_redirect off; + + {{- if .Values.nextcloud.notify_push.enabled }} + # Forward Notify_Push "High Performance Backend" to it's own container + location ^~ /push/ { + # The trailing "/" is important! + proxy_pass http://{{ printf "%v-notify" $fullname }}:{{ .Values.service.notify.ports.notify.targetPort }}/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + {{- end }} + + # HSTS settings + # WARNING: Only add the preload option once you read about + # the consequences in https://hstspreload.org/. This option + # will add the domain to a hardcoded list that is shipped + # in all major browsers and getting removed from this list + # could take several months. + #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always; + + # Set max upload size + client_max_body_size {{ .Values.nextcloud.php.upload_limit | default "512M" }}; + fastcgi_buffers 64 4K; + + # Enable gzip but do not remove ETag headers + gzip on; + gzip_vary on; + gzip_comp_level 4; + gzip_min_length 256; + gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; + gzip_types application/atom+xml text/javascript application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; + + # Pagespeed is not supported by Nextcloud, so if your server is built + # with the `ngx_pagespeed` module, uncomment this line to disable it. + #pagespeed off; + + include mime.types; + types { + text/javascript js mjs; + } + + # HTTP response headers borrowed from Nextcloud `.htaccess` + add_header Referrer-Policy "no-referrer" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-Download-Options "noopen" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Permitted-Cross-Domain-Policies "none" always; + add_header X-Robots-Tag "noindex, nofollow" always; + add_header X-XSS-Protection "1; mode=block" always; + + # Remove X-Powered-By, which is an information leak + fastcgi_hide_header X-Powered-By; + + # Path to the root of your installation + root {{ .Values.persistence.html.targetSelector.nginx.nginx.mountPath }}; + + # Specify how to handle directories -- specifying `/index.php$request_uri` + # here as the fallback means that Nginx always exhibits the desired behaviour + # when a client requests a path that corresponds to a directory that exists + # on the server. In particular, if that directory contains an index.php file, + # that file is correctly served; if it doesn't, then the request is passed to + # the front-end controller. This consistent behaviour means that we don't need + # to specify custom rules for certain paths (e.g. images and other assets, + # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus + # `try_files $uri $uri/ /index.php$request_uri` + # always provides the desired behaviour. + index index.php index.html /index.php$request_uri; + + # Rule borrowed from `.htaccess` to handle Microsoft DAV clients + location = / { + if ( $http_user_agent ~ ^DavClnt ) { + return 302 /remote.php/webdav/$is_args$args; + } + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + # Make a regex exception for `/.well-known` so that clients can still + # access it despite the existence of the regex rule + # `location ~ /(\.|autotest|...)` which would otherwise handle requests + # for `/.well-known`. + location ^~ /.well-known { + # The rules in this block are an adaptation of the rules + # in `.htaccess` that concern `/.well-known`. + + location = /.well-known/carddav { return 301 /remote.php/dav/; } + location = /.well-known/caldav { return 301 /remote.php/dav/; } + + location /.well-known/acme-challenge { try_files $uri $uri/ =404; } + location /.well-known/pki-validation { try_files $uri $uri/ =404; } + + # Let Nextcloud's API for `/.well-known` URIs handle all other + # requests by passing them to the front-end controller. + return 301 /index.php$request_uri; + } + + # Rules borrowed from `.htaccess` to hide certain paths from clients + location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; } + location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; } + + # Ensure this block, which passes PHP files to the PHP process, is above the blocks + # which handle static assets (as seen below). If this block is not declared first, + # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php` + # to the URI, resulting in a HTTP 500 error response. + location ~ \.php(?:$|/) { + # Required for legacy support + rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri; + + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + set $path_info $fastcgi_path_info; + + try_files $fastcgi_script_name =404; + + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $path_info; + #fastcgi_param HTTPS on; + + fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice + fastcgi_param front_controller_active true; # Enable pretty urls + fastcgi_pass php-handler; + + fastcgi_intercept_errors on; + fastcgi_request_buffering off; + proxy_send_timeout 3600s; + proxy_read_timeout 3600s; + fastcgi_send_timeout 3600s; + fastcgi_read_timeout 3600s; + } + + location ~ \.(?:css|js|svg|gif)$ { + try_files $uri /index.php$request_uri; + expires 6M; # Cache-Control policy borrowed from `.htaccess` + access_log off; # Optional: Don't log access to assets + } + + location ~ \.woff2?$ { + try_files $uri /index.php$request_uri; + expires 7d; # Cache-Control policy borrowed from `.htaccess` + access_log off; # Optional: Don't log access to assets + } + + # Rule borrowed from `.htaccess` + location /remote { + return 301 /remote.php$request_uri; + } + + location / { + try_files $uri $uri/ /index.php$request_uri; + } + } + } +{{- end -}} diff --git a/stable/nextcloud/28.0.1/templates/_cronjobs.tpl b/stable/nextcloud/28.0.1/templates/_cronjobs.tpl new file mode 100644 index 0000000000..0fa050dba6 --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/_cronjobs.tpl @@ -0,0 +1,34 @@ +{{- define "nextcloud.cronjobs" -}} +{{- range $cj := .Values.cronjobs }} + {{- $name := $cj.name | required "Nextcloud - Expected non-empty name in cronjob" -}} + {{- $schedule := $cj.schedule | required "Nextcloud - Expected non-empty schedule in cronjob" }} + +{{ $name }}: + enabled: {{ $cj.enabled | quote }} + type: CronJob + schedule: {{ $schedule | quote }} + podSpec: + restartPolicy: Never + containers: + {{ $name }}: + enabled: true + primary: true + imageSelector: image + command: + - /bin/bash + - -c + - | + {{- range $cj.cmd }} + {{- . | nindent 12 }} + {{- else -}} + {{- fail "Nextcloud - Expected non-empty cmd in cronjob" -}} + {{- end }} + probes: + liveness: + enabled: false + readiness: + enabled: false + startup: + enabled: false +{{- end }} +{{- end -}} diff --git a/stable/nextcloud/28.0.1/templates/_ingressInjector.tpl b/stable/nextcloud/28.0.1/templates/_ingressInjector.tpl new file mode 100644 index 0000000000..f99f5bd504 --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/_ingressInjector.tpl @@ -0,0 +1,23 @@ +{{- define "nextcloud.ingressInjector" -}} + {{- if .Values.ingress.main.enabled -}} + {{- $injectPaths := list -}} + {{- if .Values.nextcloud.collabora.enabled -}} + {{- $injectPaths = mustAppend $injectPaths (include "nextcloud.collabora.ingress" $ | fromYaml) -}} + {{- end -}} + {{/* Append more paths here if needed */}} + + {{- range $host := .Values.ingress.main.hosts -}} + {{- $paths := $host.paths -}} + {{- $paths = concat $paths $injectPaths -}} + {{- $_ := set $host "paths" $paths -}} + {{- end -}} + {{- end -}} +{{- end -}} + +{{- define "nextcloud.collabora.ingress" -}} +path: /collabora/ +pathType: Prefix +overrideService: + name: collabora + port: {{ .Values.service.collabora.ports.collabora.port }} +{{- end -}} diff --git a/stable/nextcloud/28.0.1/templates/_initPerms.tpl b/stable/nextcloud/28.0.1/templates/_initPerms.tpl new file mode 100644 index 0000000000..ed94790ad9 --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/_initPerms.tpl @@ -0,0 +1,29 @@ +{{- define "nextcloud.init.perms" -}} +{{- $uid := .Values.securityContext.container.runAsUser -}} +{{- $gid := .Values.securityContext.container.runAsGroup -}} +{{- $path := .Values.persistence.data.targetSelector.main.main.mountPath }} +enabled: true +type: install +imageSelector: alpineImage +securityContext: + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + capabilities: + disableS6Caps: true + add: + - DAC_OVERRIDE + - FOWNER + - CHOWN +command: /bin/sh +args: + - -c + - | + echo "Setting permissions to 700 on data directory [{{ $path }}] ..." + chmod 770 {{ $path }} | echo "Failed to set permissions on data directory [{{ $path }}]" + + echo "Setting ownership to {{ $uid }}:{{ $gid }} on data directory [{{ $path }}] ..." + chown {{ $uid }}:{{ $gid }} {{ $path }} | echo "Failed to set ownership on data directory [{{ $path }}]" + + echo "Finished." +{{- end -}} diff --git a/stable/nextcloud/28.0.1/templates/_validation.tpl b/stable/nextcloud/28.0.1/templates/_validation.tpl new file mode 100644 index 0000000000..5650c0f63f --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/_validation.tpl @@ -0,0 +1,42 @@ +{{- define "nextcloud.validation" -}} + + {{- if not (mustRegexMatch "^[0-9]+(M|G){1}$" .Values.nextcloud.php.memory_limit) -}} + {{- fail (printf "Nextcloud - Expected Memory Limit to be in format [1M, 1G] but got [%v]" .Values.nextcloud.php.memory_limit) -}} + {{- end -}} + + {{- if not (mustRegexMatch "^[0-9]+(M|G){1}$" .Values.nextcloud.php.upload_limit) -}} + {{- fail (printf "Nextcloud - Expected Memory Limit to be in format [1M, 1G] but got [%v]" .Values.nextcloud.php.upload_limit) -}} + {{- end -}} + + {{- if not (deepEqual .Values.nextcloud.previews.providers (uniq .Values.nextcloud.previews.providers)) -}} + {{- fail (printf "Nextcloud - Expected preview providers to be unique but got [%v]" .Values.nextcloud.previews.providers) -}} + {{- end -}} + + {{- if and .Values.nextcloud.collabora.enabled .Values.nextcloud.onlyoffice.enabled -}} + {{- fail "Nextcloud - Expected only one of [Collabora, OnlyOffice] to be enabled" -}} + {{- end -}} + + {{- if contains "$" .Values.nextcloud.collabora.password -}} + {{- fail "Nextcloud - Collabora [Password] cannot contain [$]" -}} + {{- end -}} + + {{- if .Values.nextcloud.collabora.enabled -}} + {{- if lt (len .Values.nextcloud.collabora.password) 8 -}} + {{- fail "Nextcloud - Collabora [Password] must be at least 8 characters" -}} + {{- end -}} + + {{- $collaboraUIModes := (list "default" "compact" "tabbed") -}} + {{- if not (mustHas .Values.nextcloud.collabora.interface_mode $collaboraUIModes) -}} + {{- fail (printf "Nextcloud - Expected [Interface Mode] in Collabora to be one of [%v], but got [%v]" (join "," $collaboraUIModes) .Values.nextcloud.collabora.interface_mode) -}} + {{- end -}} + + {{- if not .Values.nextcloud.collabora.dictionaries -}} + {{- fail "Nextcloud - Expected non-empty Collabora [Dictionaries]" -}} + {{- end -}} + + {{- if not (deepEqual .Values.nextcloud.collabora.dictionaries (uniq .Values.nextcloud.collabora.dictionaries)) -}} + {{- fail "Nextcloud - Collabora [Dictionaries] must be unique" -}} + {{- end -}} + {{- end -}} + +{{- end -}} diff --git a/stable/nextcloud/28.0.1/templates/_waitNextcloud.tpl b/stable/nextcloud/28.0.1/templates/_waitNextcloud.tpl new file mode 100644 index 0000000000..24946d640e --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/_waitNextcloud.tpl @@ -0,0 +1,25 @@ +{{- define "nextcloud.wait.nextcloud" -}} +{{- $fullname := (include "tc.v1.common.lib.chart.names.fullname" $) -}} +{{- $ncURL := printf "%v-nextcloud:%v" $fullname .Values.service.nextcloud.ports.nextcloud.targetPort }} +enabled: true +type: init +imageSelector: image +securityContext: +command: /bin/sh +args: + - -c + - | + echo "Waiting Nextcloud [{{ $ncURL }}] to be ready and installed..." + until \ + REQUEST_METHOD="GET" \ + SCRIPT_NAME="status.php" \ + SCRIPT_FILENAME="status.php" \ + cgi-fcgi -bind -connect "{{ $ncURL }}" | grep -q '"installed":true'; + do + echo "Waiting Nextcloud [{{ $ncURL }}] to be ready and installed..." + sleep 3 + done + + echo "Nextcloud is ready and installed..." + echo "Starting Nginx..." +{{- end -}} diff --git a/stable/nextcloud/28.0.1/templates/common.yaml b/stable/nextcloud/28.0.1/templates/common.yaml new file mode 100644 index 0000000000..d7576a0fb5 --- /dev/null +++ b/stable/nextcloud/28.0.1/templates/common.yaml @@ -0,0 +1,92 @@ +{{- $selector := dict -}} +{{- range $name := (list "main" "nextcloud-cron" "preview-cron") -}} + {{/* creates main: {} */}} + {{- $_ := set $selector $name dict -}} + {{/* sets main: {} to main: { main: {} } */}} + {{- $_ := set (get $selector $name) $name dict -}} +{{- end -}} + +{{- range $item := .Values.persistenceList -}} + {{- $_ := set $item "targetSelector" $selector -}} +{{- end -}} + +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . -}} + +{{- include "nextcloud.validation" $ -}} + +{{/* Render configmaps for all pods */}} +{{- $configmaps := include "nextcloud.configmaps" . | fromYaml -}} +{{- if $configmaps -}} + {{- $_ := mustMergeOverwrite .Values.configmap $configmaps -}} +{{- end -}} + +{{/* Create hostAliases (resolve ingress host to Node/LB IP) */}} +{{- $hostAlias := (list (dict + "ip" .Values.nextcloud.general.accessIP + "hostnames" ( + list (include "nextcloud.accesshost" $) + ) + )) -}} + +{{/* Add [hostAliases] to nextcloud and collabora pod */}} +{{- $_ := set .Values.workload.main.podSpec "hostAliases" $hostAlias -}} +{{- $_ := set .Values.workload.collabora.podSpec "hostAliases" $hostAlias -}} + +{{/* Add [init perms] container to nextcloud */}} +{{- if not (get .Values.workload.main.podSpec "initContainers") -}} + {{- $_ := set .Values.workload.main.podSpec "initContainers" dict -}} +{{- end -}} + +{{- $initPerms := (include "nextcloud.init.perms" . | fromYaml) -}} +{{- $_ := set .Values.workload.main.podSpec.initContainers "init-perms" $initPerms -}} + +{{/* Add [wait nextcloud] container to nginx */}} +{{- if not (get .Values.workload.nginx.podSpec "initContainers") -}} + {{- $_ := set .Values.workload.nginx.podSpec "initContainers" dict -}} +{{- end -}} +{{- $waitNextcloud := (include "nextcloud.wait.nextcloud" . | fromYaml) -}} +{{- $_ := set .Values.workload.nginx.podSpec.initContainers "wait-nextcloud" $waitNextcloud -}} + +{{/* Disable [notify push] if requested */}} +{{- if not .Values.nextcloud.notify_push.enabled -}} + {{- $_ := set .Values.workload.notify "enabled" false -}} + {{- $_ := set .Values.service.notify "enabled" false -}} +{{- else -}} + {{/* Add [wait nextcloud] container to notify push */}} + {{- if not (get .Values.workload.notify.podSpec "initContainers") -}} + {{- $_ := set .Values.workload.notify.podSpec "initContainers" dict -}} + {{- end -}} + {{- $waitNextcloud := (include "nextcloud.wait.nextcloud" . | fromYaml) -}} + {{- $_ := set .Values.workload.notify.podSpec.initContainers "wait-nextcloud" $waitNextcloud -}} +{{- end -}} + +{{/* Disable [clamav] if requested */}} +{{- if not .Values.nextcloud.clamav.enabled -}} + {{- $_ := set .Values.workload.clamav "enabled" false -}} + {{- $_ := set .Values.service.clamav "enabled" false -}} +{{- end -}} + +{{/* Disable [previews] if requested */}} +{{- if or (not .Values.nextcloud.previews.imaginary) (not .Values.nextcloud.previews.enabled) -}} + {{- $_ := set .Values.workload.imaginary "enabled" false -}} + {{- $_ := set .Values.service.imaginary "enabled" false -}} +{{- end -}} + +{{/* Disable [collabora] if requested */}} +{{- if not .Values.nextcloud.collabora.enabled -}} + {{- $_ := set .Values.workload.collabora "enabled" false -}} + {{- $_ := set .Values.service.collabora "enabled" false -}} +{{- end -}} + +{{/* Create [cronjobs] defined */}} +{{- $cronjobs := include "nextcloud.cronjobs" . | fromYaml -}} +{{- if $cronjobs -}} + {{- $_ := mustMergeOverwrite .Values.workload $cronjobs -}} +{{- end -}} + +{{/* TODO: Do we have to cleanup when something (eg Collabora) is disabled? */}} +{{- include "nextcloud.ingressInjector" $ -}} + +{{/* Render the templates */}} +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/nextcloud/28.0.1/values.yaml b/stable/nextcloud/28.0.1/values.yaml new file mode 100644 index 0000000000..e69de29bb2