From bc96a6b4de1979b342a323ea30d28d6aa4f2763b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 11 Jun 2024 13:46:03 +0200 Subject: [PATCH] :baby: initial code --- .gitignore | 14 + LICENSE | 373 +++++++++++++ README.md | 36 ++ SECURITY.md | 5 + charts/penpot/.helmignore | 23 + charts/penpot/Chart.lock | 9 + charts/penpot/Chart.yaml | 32 ++ charts/penpot/charts/postgresql-15.5.10.tgz | Bin 0 -> 75757 bytes charts/penpot/charts/redis-19.5.5.tgz | Bin 0 -> 90840 bytes charts/penpot/templates/NOTES.txt | 8 + charts/penpot/templates/_helpers.tpl | 75 +++ .../assets-persistentvolumeclaim.yml | 24 + .../penpot/templates/backend-deployment.yml | 403 ++++++++++++++ charts/penpot/templates/backend-service.yml | 37 ++ .../penpot/templates/exporter-deployment.yml | 75 +++ .../exporter-persistentvolumeclaim.yml | 24 + charts/penpot/templates/exporter-service.yml | 17 + .../penpot/templates/frontend-deployment.yml | 74 +++ charts/penpot/templates/frontend-service.yml | 16 + charts/penpot/templates/ingress.yml | 53 ++ charts/penpot/templates/serviceaccount.yml | 13 + charts/penpot/values.yaml | 516 ++++++++++++++++++ devel/kind.config.yml | 23 + devel/penpot-namespace.yml | 4 + devel/penpot.values.yaml | 27 + scripts/cluster_create.sh | 12 + scripts/cluster_delete.sh | 3 + 27 files changed, 1896 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 SECURITY.md create mode 100644 charts/penpot/.helmignore create mode 100644 charts/penpot/Chart.lock create mode 100644 charts/penpot/Chart.yaml create mode 100644 charts/penpot/charts/postgresql-15.5.10.tgz create mode 100644 charts/penpot/charts/redis-19.5.5.tgz create mode 100644 charts/penpot/templates/NOTES.txt create mode 100644 charts/penpot/templates/_helpers.tpl create mode 100644 charts/penpot/templates/assets-persistentvolumeclaim.yml create mode 100644 charts/penpot/templates/backend-deployment.yml create mode 100644 charts/penpot/templates/backend-service.yml create mode 100644 charts/penpot/templates/exporter-deployment.yml create mode 100644 charts/penpot/templates/exporter-persistentvolumeclaim.yml create mode 100644 charts/penpot/templates/exporter-service.yml create mode 100644 charts/penpot/templates/frontend-deployment.yml create mode 100644 charts/penpot/templates/frontend-service.yml create mode 100644 charts/penpot/templates/ingress.yml create mode 100644 charts/penpot/templates/serviceaccount.yml create mode 100644 charts/penpot/values.yaml create mode 100644 devel/kind.config.yml create mode 100644 devel/penpot-namespace.yml create mode 100644 devel/penpot.values.yaml create mode 100755 scripts/cluster_create.sh create mode 100755 scripts/cluster_delete.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6383441 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.DS_Store +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# Dependencies +charts/*.tgz diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b536f7b --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# Penpot Helm Chart + +This repository contains the Penpot Helm Chart curated by Penpot. + +## Local Development + +### Requirements: + +- [docker](https://docs.docker.com/engine/install/) +- [kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) +- [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) +- [helm](https://helm.sh/docs/intro/install/) + +### Usage: + +- Create the cluster `penpot-cluster` with a namespace `penpot`: + ```shell + ./scripts/cluster_create.sh + ``` + +- Download dependencies + ```shell + helm repo add bitnami https://charts.bitnami.com/bitnami + helm dependency build ./charts/penpot + ``` + +- Install the chart + ```shell + helm install penpot ./charts/penpot -f devel/penpot.values.yaml + ``` + +- Access to http://localhost/ + > :bulb: if you disable ingress, you can exposing the app in the port 8888 with: + > ```shell + > kubectl port-forward service/penpot 8888:80 + > ``` diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..e1a6e30 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +## Reporting a Vulnerability + +Please report security issues to `support@penpot.app` diff --git a/charts/penpot/.helmignore b/charts/penpot/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/charts/penpot/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/penpot/Chart.lock b/charts/penpot/Chart.lock new file mode 100644 index 0000000..fa27b3d --- /dev/null +++ b/charts/penpot/Chart.lock @@ -0,0 +1,9 @@ +dependencies: +- name: postgresql + repository: https://charts.bitnami.com/bitnami + version: 15.5.10 +- name: redis + repository: https://charts.bitnami.com/bitnami + version: 19.5.5 +digest: sha256:1987422035eb83d10647c04826d9ee984e5675678a683013864a557301b70a2c +generated: "2024-06-25T17:19:37.004734089+02:00" diff --git a/charts/penpot/Chart.yaml b/charts/penpot/Chart.yaml new file mode 100644 index 0000000..a122561 --- /dev/null +++ b/charts/penpot/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +version: 0.1.0 # Chart version +appVersion: "2.0.3" # Penpot version +type: application +name: penpot +description: Helm chart for Penpot, the Open Source design and prototyping platform. +maintainers: +- name: Kaleidos INC + url: https://kaleidos.net +home: https://penpot.app +icon: https://avatars.githubusercontent.com/u/30179644?s=200&v=4 +sources: +- https://github.com/penpot/penpot/tree/main +- https://github.com/penpot/penpot-helm/tree/main +keywords: +- kubernetes +- penpot +- penpotapp +- design +- designsystem +- opensource +- ux +- ui +dependencies: +- name: postgresql + version: 15.x.x # appVersion >= 16.2.0 + repository: https://charts.bitnami.com/bitnami + condition: global.postgresqlEnabled +- name: redis + version: 19.x.x # appVersion >= 7.2.4 + repository: https://charts.bitnami.com/bitnami + condition: global.redisEnabled diff --git a/charts/penpot/charts/postgresql-15.5.10.tgz b/charts/penpot/charts/postgresql-15.5.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e099aabb5a9e6c9ff12671983b36c84a9f0920ae GIT binary patch literal 75757 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 literal 0 HcmV?d00001 diff --git a/charts/penpot/charts/redis-19.5.5.tgz b/charts/penpot/charts/redis-19.5.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2c2a24b8b934717509eb4151af82cd7b37a1f198 GIT binary patch literal 90840 zcmV)TK(W6ciwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ{TiiIZKfFKlSLk%IC$L}Kbd$@>^x5q9Wq?e0CIMa`GiTq~ zd4jOj-Co?5*ODQ&ll1_Srs-QC@1e;Ph}@$}i#;j^btcmFgP?mivt{s|23LKyd_AQa|* z8m!FAt=w1g1Je{!NMoFm(FOn^q-cWk`3M|93a=nR8vw*JI6-6t{@4HjfB>X$hDPAJ zxI!UK_%m5%1R@+>qr4yEovWCpa2D^#VxwXI>7c(GMCdApX)xRk@_|JTlYmT7(n?R2 z8x1XDySo-OZq{w2c%jjE{oVfadbxO^0DZ`CPEp>8q%J)g_FoM9gEry>r8G`aYt`-2 ze!-JCL@8mdwU@zgih|w#U;}3HFDNH5PDkKocLQdb{*x2gh){;o2&G|+$Y?`J7vk9r zryBs|D8nSC+%9k!k9Kx)G>Hk#=fSXFkuzk@gejlG2{)<$$Txwec%%65_CNGLY($8J zd7M%H=!{i!^K1*m1i%#F45fhJA`j6vfYA+1Lll8)G!JfIQXoJm&QTv6QC1$0DM~?( z#wgEG#ALt#5&%I2DFlS(MM#Sr0fO=ylmil{A!4)$2w@6BoKhI4tX!N<$TpZlGDTz? zBr&068xX|n1=9!+*1!>e(%+b3rmiWa85!*;HS|L~+lWI}BhQ;1NZ7YKgu?Keh^F0% zXA{-P>~XNWJNU5s^jSYkCmYvjev9*nH;=IHfC9n}wqAL574Quu=(Jq`*>xVluM`(x1 zXIu1!HiqF3{pbDX8=u=J{wMvI<9~v~>$~95GX4*qJ{!8@|L%(y599xR{M?P_H{AQ~ zp#O9uiYJKB5g=2z`~1b|`HLUWF#I9``={T1|Kj=X zchTDr(lKs} zKTnG!IY(iRC=mf8#W|dy{R9$LJ)t5_M3V1YRJ;mOzPILElcoK+`VbKQntOS|1LG9H zJck~Nro4*Ux%q62b8yQ1JfTcmzu=^pp-r+?CB=PAKZAs@2v!l}Vg7&TX!1WmzuHs{ zOTZ;8=v04n$;fU9dLuO@Rk|91UT*_{M~}c^f6^Dfxe6JH$80h(o2w6hMsxA{7|swc zph%lvg5Q4M09N}+hGPE6XKhN(Qj~o>%OH)f;v}YX03(>mX*O5f&&3tWQ$!H~Spw-8 z=QE-N2+c1A`Br)-8A{1C9#dJI|AW=Tk(^mpTE=44*X8@1{5cAXJf`z~oKp0Gf<5+- z_ZZ^5kv*MFzxewIWeJ|om|0K^X7HMKw3)71g1~J|r=`>&M{Ld&QWOO@yWo6(pG`1k z_y&QzNcYG)g7R(g>rXi@GTx)c#_tIdk||}X&K>6fCJDYp5s1(j76}DM2c!>9F(F(I zG4hQ7EGPz>Fw2rTh*d2pViGaFDRU-aQV_~IBPk`{+GhF>5!lR7&N;JB%jN+vxrKAG zwGE<}FlQ2h%?LB62Gj>-;Vs=x@)ut_2w5!;yU)Wl+kcu4=DN5-a>fr%lKR@(sK~2?6pSiUExHhy#;E_6-yPeDzNhQr=YNS0nK8Q-$DO zxk?Aj-@B4FzH#V_0im6~D90#PzHlWLz2pG1nZ9Xds{2IZjcPWl{798zlTnx$WYGtj z!vkJJu*Zfh=4|*wRb3{gP=W9+tRv=#M-hyVL4dpTl5|1PYfPvZ6yFg9ruwfqr6^Ci zdEZV^3SgSzA`O|@cdN6Be#8uIhUctXwfM2u^N9*a1^;bjsA4BM}Lh z>_>p+A__6A_Kba9Fh&>C9FZwbBJc{vNs%)jr=GB3K#6PAAlDx&`}L3;f#>x+;~ByQ z1?pddLYzhfTp@akPztgfUm>y-dqGh$KTLV76~%CpVnX8(%y5K2oH|1aqf-`oiz6h* zb}7C6u8&gTb!*6PvW_FGpju0NYBsVk=ByL3-&FzWC?do?Huu(&%}AI*lR%2tzWkTs z((y21iKp&mh`_!b$;D)nAe1%ng!zPkJ@%hvxUsJlt2iCUX-wzV_+x}}N7YE4 zk3>I;6#}y;547039F5C$$7yk;78XK0+sW;$vs0%5=3@5>35noq@~Y^7}$@(@I~J+mtc zClv{@B1ukh5{L7u6zmXUXOkh2)yoPE6W^3`c>k>kg}ls9ccc@eQOXP;I{>=%fBb4h`8d6Tz%9 z2Q)^h()eU){zSR|8s{j2F}(~SCJ6SbN7F7!*~~RNDUU45&LjZl;WTD58WuJfLYdF` zq7R=fsd>>Qp)ieLf>U$}a1Jhwu;-F-Fh3ueK@nqZu-Pl<6s1(YbZTu`!g5t7h|)Nn z1ayi5vAY+jNqKxU!26@4?0t-5|g9g6X;Dic#RRUU~S4Mmuu~mqvZQ2%U0H;6| zWsUgCLy39EL0sheH!&_M3qz$PG4C2rQY~)?Ml6ya=XmB; z&#Z!!1Qcn4h?3go<;ZTRyjCWE6$*k>nOAXw2zZN&l$y!~kbp6N6{mzE7_sos&P zQhF2TIOPjAH!zQx!75Q)+P(%l1EqY=g2qy&MtFsryAv0@qH9g4F!RAW#%pSDZBdYiK`9sro+2u5?|m)ICf z;0?0ZCzN4{3d~?u+hMhGM4z4GA_rkXD4sd0WfMQ6N2fSKM9jAxR(h$#GcwK~Um9o_ z88<``+iiIjcvNFtd7?hR9qb*hC*Pl*i2KVX_T!^sge$5n)ymi!jKR zXRDlj6)7Eopn0T+tX?zKNNdBX zM?6hO&4WWc%MwIUGB4-MS96dfHZG?VfM7V4OCD&J(YYLBeBqy4TeZaeNDyWtJ01rj zD2>BF$*iL&$TUgfxyBReqi*M#`4u=?w~3?NyjTC#ae}YpgDY%z=_o-V1+$M;uL`~FX-*P?nI*`tmYX3=mo(Hewd*d z&gX%c8G{>~KpH0~pfu^3C0PI+T*2@Xo5^=Fn8R!}R7Cm|N8o zi>1DHGZ%Ur9h6g1$;6maiS&_ICnxF=5HpDp=v~3wu7vu!LpAo_f@3*Gc?KxiWw^&t zb!2s`X)~ijjwt(Y>pZDhN=7vmf#mbGNmCQFmIICO6Q?+*MC`FLok-`A;hZll@a#$N zSZndMsR{Qfwl~3xr{Ddc{J)%ut9AFR+<>&k6E#_T0+RR!r7Zqsor%RKG5<>}xUORr zpnR@a1)5DD*z7zqJ~kNJ`s9A4$WB=ScP41QYg1+u**J|^G=6{*I6s%m=ttrih}c8D zxXx5+e%eZ!MKU;2L{Ir&%TuFbWnPhUm;M)~Hx|1UZQB|3 zJ`=WHS-uCr(^w<0EAqE3ZI8fn{?JyMdg_WP;zj^mm5B0{Dl4n@+NJe!LBq5OFJ_t6 zx9!ARZF50-9jtRfiXH89L8=`sv`Urd@f!~v8w`^IwFlCSN@7h!CXYvz1rcSOnB>7I-5wh5NZtNlAi;+zOyV?jh_ zL?-bprX7PobFZsh_t=@i6i!eO;#pSk{U3QA#Rw4nmM_ck%`XbhkvZ?yZvhNLoJTT8 z2&XDBh|MtBXPeO3EJ<;Swm}M0ybWe?nB#3gW-v*%!3;%lG1~?S%qM6Ye31X{ieI++ z;9?pRV*wk)7v01+S%v4?3tIEmODUO()#QGSJS%K@AOQ|(C{s?`bJC6vWazo92 z6O3^lK=!$JNr(G!GiT8W3L=k>$Z$lS)KsgLyi5h%pTcy4WM%@hB);V_Clt-Vgy)Ke zyoAb6=ti8(Nk|i6n%7LD36PtOM6Ss3oLF8;q(F^f=wIvd5HGSUL1GP>*MYc#i@7!z z-y0*)fj*sQXc^VpWEPSjgc;=LBVt7QQI40gIFkt9X3KF_S$gg0Ztc!30|ZcZ zB<(zbVd(BdX@&;bIwLce#Qe5k$!6+V9XnyIHUeiw%BFKND}}!@)uIYB)r`Pzy}dVY zdft73>o|>gmNts{4%UIrSKS8Z6jC%U64peUa^kYZ0>T4`W;i`Z9ft}%-OzC&PeICY zlAxR)+UINtqC2V?nOGxJ0Pg~3I7LyBpqy_W>?J&1nj)Z|*X$9n;AoLS4o0&$joGJx z%%?ZTy;+gaI7?8Vxe{FqOTfCVha!t0Mdvh!6iw!$Q&wd*lmv(@%S}O&Ya5&) zkrBykQyJ}+d16cUlxp?u2AIVun|$jvu-Et&%wSqBe?ew3AVo-Qpk9e(xH-5&V>S!C zjyVI7l!-pjZ4eba`Ku^dZUEr08G(U+12@LpZ6%NpZr63eeWhf%W9z)AvpiT(Ji|pw z<=*mM$a66+@HI+hnvr}1yC8c1Hc0~<2dZLDTEk|&c6 z`P3p2f2`_xbZzhrs}8!|kyR1W%0oIkg4>QU%`nbA`K7HpopetU8xTpR*zO4^pSz#J z9G&JkM8d3j@-sMRPXPpM>X;yqiT7o8v_4q_lSG}Uw2x`5K0wsYf|zW96e-XmmE(i2 zMh#tt>1ixZjL5aNQyc*(AIXKZJ~%2@y)IQ(mt`*HvX?J48IP$*N}j?zx?Hf)HaDlN3j2=MkUI^S_lm0ZgL+rZm=1Oq;OkTIa>M@zB_(7?bX|r=3cr zM}SEwL_5Y20#5a$3hqL7_TP$-?4cv!hJA2a3Ro>D!XRD=M|wW0udfxIV1b)hHwmxN zTnNa0u*zzlK^jgwiDxpu*15>tc#8^|?B$bXBv9x4`R`Iy>Q4XyfOb&;|2?ce+BK`7 zbX=32ry5aJq+z%L!n*XCxn;LADn{DUtz@eCWu3FV+_v6Ty5HqCUs%7aZMI9D>Z$f6 zZq3Ym9Z$)R>c&Av_#7oDq&PQBplJkOUZq`nzuDiFV0FS%oSMUQIaw^8O!u}H|kpjXcV3CKC zKwT9JNMkbQnU5oIfR8afm($)- zxpk~-R2`*6ZaW+tp9A@8tx6ZQXwUQ@N(nb-`L3coEzk(;ixq%ZaZYrPHD1@Gj;BPd zyz>fm$z#8_dI@2)5y^`eAV)Yusi7#zuf{zj@fd~k zFhQ>|z82kx1?&wAgqviG=i9PLD5S_a^dP6`I0tYnmr-(BZp+y0>V)EZMgozC_zrc7 zJ*6Zjlpp&j^PX?yH}%yJtI0|nlTl+LuPDQ(=*vhXKkTMmk8tAqItfV}p^#@wN0G@} zJ~wAy^5{^bUW_zpMY&>~b6n)|^lGYBLQM46^1buw)HuMaH`!!?OeOEize{%Pjm?Lz zznWRUBQV^3`b62~nBna7mQ8>k*H$_Q;!7a{{sQ2V|rENz3wpmyn+}8_7fP-h#8ny_dFWK5xF(sG{-j_)j}rQaA$GJ z&mA4a`K5AgeUpZyVfB z<8Z2u;t>$dIVLQ~SjQwWPUCc9&?{0Y1=uvw4Eb)IWR(_4vJFyPVaKBexg@X+!YRf& z4M$}wYNisiT`9PV;@6^K$a78Kau-%ruz1UXAgqQozET^T0XRc2`ZbR!I!VJ0evNw+ zPn*X7My@Lvf$x8cJJiKoNH-3uG_Y6N=`p+#ioHP1yx ztW3i_{bgT5)bqzC>9TM);`-b*8&~;8IV{hpF+QT3DzFxX(V{_HMpgJPj7mNvr z$9!dNif@_91*lWR_k<(0*UIcs&*u1~r!9M+lPGK`KMx_3Mmh{#J#dAl@FvE&81Dr> z9>;4DN7~f@W@b_F)Z(ZJkw4S3t3(H~?)4(^%yXD!NsLG-pCgJ?VI^#BU|)N_t5nno zoFO(C>&H@BGj%00g$eJN3C5z2srg9u2dA|6Vh6n*6)*cGg zr&8-vk65elMP;Kd(qHnxL`tIebpQHvFc=Jir@P<1`0j6J)paFYjkhQoeGr(77dae{ zt>C6W-(u1@3(sxRBS1~a`MrR6npdV^sERLPRxnmmNklid}paMu!a zv5JYQUt@*%>`y>EmLm%rPA}gWgf77*mg}BJhY!XOi?Qh6|rb94)nWap8>Iu9h7G0rV*sJ#zkrlL2y z>#AyPe-8(J@xQ^&?z1}GT3@%iGv$kqPMfrPsK%C~(=N*FW-WRoi8JC;i6NR_3sxS$ z?tuBu{?qcYHP$d9t;$$z8eOZdg(udEKS6}VIMs;>=i+ZWQ^6Q6u_uJRK&DN>ojiSoEE|g z_?EaDpt2l)i0#D}M?WKQEY7ZWSE=0kG#Xc*_)<#=&KKoUf`^b{m!Z_HwW#18bACD) zG}NbgKa!$+7N^{le#&8pPOU@jM=3=UZi2iz0^zs(0!-K^@+`Kls<@KQ%{1Hqpph4= zh7i!svbFa+of(rX(>!sKh59m?TA=dEX(K-p09}?Pl$BiWup$cnsA;#s;mhIjOx!#^ zQ?)sY`(^q@x00xud|g0F9uv-V8$dxSCP3e8WgIQ^-gp4i5nO8$QRYs!SEDhRTH%Aq zjcU1+Eeu~cduS$DFE)K>2lG+ATQb>sR1m}`403(fEf7$whErAwX0Zf;wVZ6HwC@gz zTX-4OX4vfbA3fr!pa(I@3m%VwAB$*$eEp`Qy7MA6V--{V(Uo^uC%RIdOYHIOC|p2T zCmSnWw}KX3^=EOqr>|3z=MjGgZ{swc6*G`>#TPB!$~;TC3CYK3wGty|ZH)C5#+1+;W|>IDXeG!GGafpW_(O_IY8=YF z3pu_Ia%yeMRCgr|E`~-7GPV18>=PXrWjvv=gf6WP-AjU}`Wx*(7(P|0bV>YFpQmY} zye0@$FYVsIgQe=H zz5Rhoe(QLu<-~PqK-CV$dRLgLHS|{jRjnbp8mejy(bZv9YY2b) zxT-p;x@TZjoA13MtJ0b=EYH9yp1G;KOS`Dx2ee;##t5)ms0I>QM1FY%= zw1p5>wX5iWvD(044Irxx)YpKr+C+VMnALWTxQKwJz8{cQ@2(dt1GQ@IgLMO2ZRNIJ zwAEI2wQ#GQs#XKI+Kp?owJ(FY+Kq1w=;{KTeXy&oylZh+7wqqKbQaXaodU6Tu<}+U z)^6?5fW_J>L@O9;HxVA-Sl0l@s#g;i#Wc0TkwpfSJ3=*86={Jr)na!7HmxE0fNWZW zY^wD2Wk8#j8`TZircPMB0=lUYV!q{*Zl*pNVf&u(bFJ(dV19ws4rdY!3g9vL^Pk`D z9UZ^lKRLeGJ32l*dw;z5_VCYtUIrPn%b7|X1v4$7*ylDZ&m(_r{XY}Dt72b+?`pO4 zmyPgh7*Yp_*CibBxz9l3sx-eM(CbPK2wIR{8)WPZ^;##O$=;9k+Q5B5u-6tD?iB6S zsxPC%vY0g7tq%=DRynJuS))oxUY9&7fU0*mclO& z{c6_e0sOTI{8eY(cR+ttNGnT(t@n!mYSgJK0POu&?F)f`Ez^|RFknlZoqGU*wUU4*(ttkE*MQ(K!(~6v0QOviFo$4{2dj_|4CGf(xR@!B8 z09Th!J%Ve6*%y!D+Eh0&J!`4cHwWX|q>(xt*A^W;Ai1{o-KEh>UDYo>>3aY$T_1pH zi%!2r1XI0veOC~s)f~F+Af|f-#VXs@i(m@N0(FtRQKWjRU(BwIBD%%A>)<}PN*^Dd z=`5?Q@D{ZmlzRA1fBBKM8eV>{&V#owgda+V5^`}NhUNDoFzmvS!hC}0{^>h#YGFFE zCvt6;Ic_mitl_F@G>lVKo^Qo5SevbUxESZR@|dbx_E;S=*KrW{2bx>M_^U(Bt*OTY zY;G%TZk^`7S=?N`#cT$9|LBj;Mo?i)I{uBMlEmf~jy&pk&ejZ>5~g6D1!S;~gb zRZlH=J|AtHB~z-*cRG4|dUAHLcYHAt`^!9RRd&UCiNwqk7;$!t&Vd~S8EKdLID)~f zTw%(@Mj3A$oua`hYdQI1gU+jQ!;wdiz>fmT!dpqcT?}qePW*jwT3q!b9A2ZG!)4?e z7efSaN|`$pPRNd5&zwa+N0XS)d=7q-u5Sd+4u3j2zc~9lKMwVKgLvxOX8KH3d}G(- zaC&lnba5hiI6^nGROHM(0hz+x=PyPO_WS)lI86{Fh>h4t7^?0c+hWy%ZVTI0AUGm)hm$6$GM!e_AQ>y< zgPZWs5|EmtjTjNd8uf*)iirx}rH1&UnaVodP)S1@VqsWV)d)xfkFk8NntlZQ)-J=u z$q0Pc-|asSB6JnQG#Ks%xtL{%mN7$^bD2#C-Q*-y!1TyZM847!)=H%<#RNRz5H$43 zHb4o{M?#+*jgK+q$>J$}vhXC?NX!z+BYbH&U}{HE;K?U3601zkim@k$5T*cf^jkbG z>n~eg2banc)CQ;C*i<{6($MwEsQ!AQHC7*)UzX+Z4dl>D!Zdb#+s=m7T5ChI`I-Fe zXEYZDj@?`Qj8Bb)A!)OgwU+zH?5XdVmp1>U7m##EQ|LQ->fCU|PO}xG+&QA)t-3}> z-&-io^r`|QFq`YE{ydcaRp7jsmE!!r{BK1@yw%7Z=7gD{C(=p!M;^hgz1=SIZOMC==7}PX^OdOVL>}M!sUUklwDMUiCTzt>f zn>Ym_KiYabMY-_32_#gnJj8@gw$z*zMF4^c#!cw%kQO;A zlO7=GMff(|8&j0OjgusnC)ayo(*-1m5P)-l{#C$)$+bHe4EomDf%dE^&% zvqNdCYq;9s+-doys~t+Utn2OrpP}B%-3Q*Ptm*OtPo>%~Kky2)uGR%4G5iHU0kMb>r`oFEB&+I{$zysU&HlJRdMzGPySb5=><@p$~@cv z)p`Te7k&XwbrpYs8*r*S^=&ucw6k096*%quYVW}5RJocva5}Q}UV^g#-|8he9U0f$ zg0lc?-z_*DnBVEeGwuAlUc=K(5uGmM>0Bat$vPjF6=LSC6ds%xu`58O`Ugnbd_ z{OTj2DM-N;BvlZl78oJZPV3juIztOp`u{fyE#%Y8JtOB-MDRlAR2pP)=$tAeu5)=- zLhd}-!w<-CEDclSbB9IFXZ*6*Ci3hrDU81>7^IqkHWEj{^cpB}dIUUWM6FpK+7p2f9y`L>Ch(|^AD zY1;yd`CRihTM+N;&1sbt=598#`WcYJ@#~rY)K^fwk&4kS)ip_%gYruZ>V zBc|vwVNpy%1lW=|S10}1l_=__xbtb3VS2K-EX~Z%up#cJc9j?XJ9%91`H9{tOyz*LRH^ka+HWB zmbw;G?%^b7)#KNHYbabX9}(x9=OAZ;m_Sy{1@b9O5>p!D7etV56^F;YN2!z}isVLn zET80sghpV(S?1-%LXdl=qi=UNR1r@G4(HDcMb^ z@HFh9+pcJ-W<6ZCRVjXG(@t%A*riEjr#wD?Tj~kCaSozr$T77H!2KKMW3ooCBVD+h z;>culilfS@mj#&ddrYhH%kZX#seC&_Y)(PkwNhJdS!n6ei~lW&0F*|2QB`rg!$D24 zbk~pk!%BPo*JvfYe2qrB$*?vXY7mA0(_mZ8)+LalRX*d&@t(ZiM_gGh^S9NNKaU=5 zWG*W^(yP2yOY;VlxQ6bnh}{Rj?wuVU9se})REZx~$#N7bI7{amq#>IxCXfTP8gR|5 zBzyf_zt*{+5?8s3MOUqb6SG#NdqTk3k9+%KT&jetIx6R7+_u@suV84a(cILiV%rN& z`W%A~*}kQMoW2-C<=MJYdX8hI4o#KgD1T>+pfHPhva36a_Il;t)ngHQpffMBNBNao zVxk044_JV#4?A#C*ih4UwLm#rGOiV<%;eT{nSiBo52V-%*9YAB6kpPaV755wM;c0(OiQkSw|a2ZyI;hx>aMhX)EOyC4W$ z&LlWkbX5htzf>D?aY`tH5g$*YD^;zFH|N#vOLZhIdDDcr-k5zT$KD#(>k@zkor*<7 z0?w?^ib(67qLeZ{Aj2HgC!X#tiQ=Dh?~}5zhh>)xQBLDAr%Oyb)1TD|tbpkxE}iQ+ zG;W<-d=e0vqL+w#Y_41ncbjmf`!n9=XOe%}_NlHucf)aSCZUo6|pSsB^XWl5+l(h*)JyK;K6H=d_g!| zEzTq1TS<}erIdr$eBU+#VVq4-ULFc?30E$Icq`*jdx_JSq?CfHfLL`oj?%)9t@E8o zkmY#BynewG`*AMOi{(b9xy2v|HFZ$WRSSoTCI=Puj2JCfEGU^gS1jmIfAJd@Y^nS= zEV$%5U$CG=ZszE_V8LeT+^^tJSonSgn|Sql1&99qT(4jY<-c9Q5v=ZZg(@k}m>;f*9xrhT7jxjIQXKhTH1-ezPLCwPN2(GkXj5; z_U#D#Fx(xw$FvuQ58XDfL;qVHqq{E@QOQoBiF(zxBzCAq0}16);2n1XqF#^^;r~G1O1? z^8ki^23uVLFSLWT-W6PE4gFQnLTgB_1{PXFbakxI8p59oD)jjRcDpE4=u>~_bk9hk zHs5;%3bk3^8%}5?R;{@*MD0G6u_`l>_1zy*ntBwI3w{sqYfLEE);yA$q3BY3}kyY=gDP1qq((v z&cCW_(6!wKV$3e@{1%X}27RhB#ajS;O0Rfz2A^u>wqES1R(7?}Q=O_-13lG^s~34{ z0k&1-scw90fTtGV>;s-^<=qwcshb>~aG%=sai>^V9c;Z7b*h^-8c?TNg=htx>L$Vi z=+qiOr>qfg&CpIN`jHzK*63A-@Z^!_4gj9oC2N3o($@LKK&O^r;MahhT9H-*r+VLf zrMRipx;((9*1)DZ8q07bQ~$&y!GLA=^};f zt3ip=B(Mn!AOpzXD_8;dBE6BkVphSBMGOk%E;2v$66TPNCp|Xm^gIPbrgra#;qI_k z?-A<(3~G?(^jf%sSs)MgC=5GgG@E2gEQ2#~`SEb+$mK;BTI3U%bFC=6#c51&u8+IP zt05wD>dmtwWkD~1fhV2TmEQ#}sAy&}!~&OmR_=v0s^3WqwlE5;-LS^CXgf?^;rrDe zC-JN5T+T@Er+TBz)ai+VaPT$V>r|UX*s;P=5B<_A~7*P+*%H4&U;uPm{et9m}k<4d$>Y_JvN^|iYA~U{SsFRkfRc|Wy zk*VWuJf&PrSa={waFdTIr#2y*A_|YaPs?#}6ZIz=BV@~OD4JT?9-v6Y(i~4Z zE|cX2QH`1=1>F{K_7s#4%dFZU(dL zrGR3~T0&+HP?=?L`XT8Z&oER9In%; zj%J2zVgaiq5-dxUQ6O_b3q^p8EmhjZz?sTYxZ`ld7OqoB;z+t`SYk`i!MCc+5c|tz{iMy_g8DEbZv|HZ z-1BrA?L)6}!vwL;!zV!p_%f;FuaZ@Q;V-q{@-j_ zWMhb|hxcr#et$Kmh^*8$e*we6z~Qsg#CHZitj^Y9@Hg;-ErZ8G{3g<5BMnBfl9j~D zsZorvan3&59cLViLoljH+kjTKl3xclz53Ux>$rEH*0hW5+VNT%-(ca9s+h3@mE= z7X#r-Cgbk>r7lg^7ImXiH5)La^4dMB=jcI9sod)CSXDp$#jWdQrLvbz$Qmc-;Czab z1pFWHj>bt$=ZgbsU=k2U!vm#Jt#emUjXJ^nm>TtbI-qMP`5T$~U^VKvQaGt6wJ^R$ z9Ty3tQOoFlfHvx+Gaxr=C9Ff-XrifbCz^?_2YN#phMe?HMqs#W0&eW?@;48N8+VGh zab&s0C*;dXXs_Do*OA)ZAh%9(Zz=PYrn@)Q>LKyHCh^_wfM43NP5=4EYD3@C!O8^~ z+ea*8*Uhz^sT5b6@yzg&lI*_fOf^h|3jsY?P~6*gV@y82vp9@m5Ki$eA3>CfM36!- z#z|BncLos>H)e1YQI!8Tk4CrEsc>=rn~cC^9D$&?9PxjD0)K$8pdg5Ppa+8S?xo@& zq~cp&Qe2UYtPXddWGFqK#$&Zn$0jc%48`VoG-nIxnc7i>_bVd4bdf8PlPVtbdJkyQM|#pOR_@_BakfoBTzS8wrDJcsWO!|}zMq)e7Q~3OZDH!d>+0t!v{c`(F@~1R zj1ap2bkN^z#jRrjuZoV#nE2E>sUgpk@-3q$d&w=FlP64#r5VHoJmGNzeXN-yMO0!H;zWOm8R>!7_0J+lM*9+EMtFB`c&7`L{+c;b&b?Sd?JB zB}7SY2WM0}NU_XDl(`1#Z{flNkp~oT=iMjM-q(g@Q7Wn%2(T$ghQ_-E951XQuUn4d}C*Ga#DBA0Nr+5?{Y}b!R(Mbah z7!<9H{TLLT*goJ+tb#k?M&4h{nv*h_av4M}PFzfpwIrceEZF#8wU`#7x|)J4{{uw^ zgBHpg&K)0mJwn@#TGrq<%|Cj?XQly}6N{L$8N?@96oU-qW1P=`EG{xwm|Nm^OGGSu z`kCq9xb$)}MJVEVX*0xZLS+8k;5Y)eFi%;TEq*HqC+XYxrLo+2xx=0_q4Wl}`Mu>vzuYY%S@W-BU&s|!ZwC2Ze5E@;m8v{! z`&74m%#@yjAazya!ST71(o^cyF6PEcH!zQJK>(Sj6n+q?Ew?69`EHzZy>@IW}DWTOsl| z9QhF*UhgJ;n&!`F&co~S3Aje{&McVa%KOj7sliL`5idoAA)$lJDl`a1it#x9z@=f0 zEdT5*iE1a-s)#wO45jiUilC&iWyUPPFfXXe5s#UeY#X*vp6knjq$k4#OO+$bhWaqc zrm$~2_6;*rde6bU_|wDBH~hoXO?Skw*(c!?&0znZ1gGodF&GR6FP=T){|*KN=ilLQ zcewkf;jKy z0zD2dwzI=bAdu#O^U03*^-*t|6{qtIv9e;NT0F~goS~e?i1bF_Bagd#Fb}6OMIkM6 zq@Nn!6Pm~Agnuud$28$D#JO?nb6toSgG~uGe09OClT8tO&Zfh931wnfW+i zJv1b_!Z<;&q+Lhf7V{lJAcKV5;yf~Mc4SiO4?dOO_Eh0IF`S0>HMS~lm#?>&HMhEw*Z%})2<@_W{Qjqll?`fJ&lfosbuX+A`C`f!@W z*2ii2y|`Z9Zl-P;s%a%q-{nDDw{PNS*Fa89Ohr@*J55;qM4e15k01zOX0V^Yct&~_ z!B0+aBJsan<%1T3tZ4+z_MDMiNFOo4fMJPOf@utx2TiXNxh4z5rxR_m`oXu?QX0M4R z*6e{Do(~TA!2yH&bHLK>?$!fWlB>J;;(MJ_NCUOcK{}n$v1v99fvIOZnINi`JtMU- zl9hE=NyI!&TONFr$TfVUgvb7RvvM4#{E9w8N^;(1R4gxkT-Xi0`UAgWC{nfzL zw|Z@@N(UB_VnA~kUf05WXpW0{)U^bZLZmhNunqSA59`dI=SQsnmYayjCl`n3efoi} zkw^3T@6*Ba;oxEY_cQ(Mzur5$0LOc84@cnRN6_D&!kqSx;Q*XKW4{c6PoFl#+g}dP z&W}!x%>uuOV<4=|-s!2Y#9o#eg*N{37nKBbg+K;r%tFK4X`F~uAHK^CVgjxZ^K=nk z!9fxD%U?D&K7I^9JO=$=#3n@)!%2z>jl;J%Dq)m9ecHItgr<;DLTO1TPC@x0n6WRx zUXsYW-@z2#Ao+#5S_I0SI+g69Y2q7{-{vu;DCPTiqYX2|gG-x+NfDLk95hSh4vUOw z!DbYPR5{(cswvJrnZw=#kGH@dAdS zYA(+d#OZ{qL}fru5EUhYpahco_^~3cz%bE81c(U;5&*Nz*|1dL9WR-^oynb2WwaZ6 z>SADlAv(texP<}*B0^Wi#1hq%ls#NhN*aT|vR(vEUV)3(hv4+&;BO!Zz!fCZjg2D% zUsvrXNW<5$lf2v)$P*UofQHz`R_3*_@k-5TxsCzwp4Jdv9i=p%a{!D!nKl*7i?q+g zbb6YCSTp-r$zPx7YZW9=ggQ%9eqoA+QZ54jH6fy{rN~l^M9VJLz3hv9dgg^9Jw-}x z1E>#SL8oSgnF)-!GuSkX$(ut&N}eje1vdTfd3uuC!r$V82kZUW0Ke{?9UmS4BpTyK zod(Fn$Df= zBtaB~Q<%nN))%rf3sc8;K#m~6DcJ_M2oRd%bdt;gDJDGMlqXg&0m*Gl!zt@sJ$)Bb z4@jh<-Z75QDb8uH5B7+8k@7bGIOMl06KqnkG+|w;brVP8wy7JK#8J6VhEro7tjuri zufL_;u2A_^nKf%u%d886PNj(a$bfCqz9O%3JQKN-TVNCCU=z(UI(K_nY##b0TW%@o z@!Vpcp&vAAL$tH#3Egxe`v~VGd}7Qe(I}MpM^GYJD+Y>Kig0SR@q@F5HdC(k~kW#G)@=VLEMY zUCXNcEz2pHkn$PMio_i8_?_WA(J3Ze33uB~REI$SDvjOP53u+6jd7uIAT)fQMD7*W zC7}r1#Ntvh9uB)S?91Q;nEj_uYSC(p*-*i(=ivBUB!qF8TjoRKlr?Cs?h2CQZdW+C ze%D~8Pj14#A-QCCfI0g9r%!xQJx7rFykuS;G9e;3U~hIPtU+wz?Zs(Vo$9L#K7BGyuoI@sNK}IB6<*;RW_VUS(a@^3EkrsrQI^Lk9fRJV zi99pg|1;r={xj);O@F%>?YC7|#%jB*_BN}u4A^wF>I4h6oo;z5q_$Q*Q&e-{%g3AMBvA}&%T2&69dVWSi9QXYCTSS_li)Oibo#RQu^&MS`}Pp}sR#bx zxQ8#EfgrLCgViv^X^KKVljIe3;$Gfj!#+4GQUJ}D98O&g$jp)ofdlrNtgqZ^bz0gWvPf&isAl?Jl^W+a3sH|HQkIgQ7B@=O#MeTE}jdttVm@^+YA>`=TT z^w($1ERBwK=qxke-UZidG_PlRjpl3RxxZIeOZmp`008itDr_faKuSPLp_o5;8%D0K zP&x-eY}@KTHn^M9vzD4^bUDqgpNdze+JQi)APWHJ3aR9L;2(wx09bN)NG$~I_QAgN zA!TG@IEwu@N2A5V)lzv)5vv$U>OBDO>ichw-tWD;c>S{Hbp2l0_jS{OVA^?b0ztMw zIBW}QI|gP$31Oav*{<6uK@hM$249{y{qV6G@w(PzGNME1MJV+zohBhw>oN8>ee~tZEPH4ibmi(PD2Ea z&BDg{v~A(<_}+|h?cQ?3q`Lh>zzbNRvWN>@<9CH4d5X?n1egT zFSGS^md>w`s*CuzQHi~7@Wh(2-z>XddfV9qo>)EU{P66TqkT_jT3VFu(O6KHlQ%@< zFr6Sa>PF}TP@T`b#J(S=6V~~_Kn}cp@sDVI7QFZF&csVyEf#!#F}=Xp%j@QDl|iuj z1Y?}v!aQ2eD#%T^)7dh*t9GE(y%rH%6&8oHaen7))=;TgD_9P-+S?d2_{tExwx+vMJd@h{Ru z{7WDHG$!3rV&Nd1qVW0*^INVj;Dm^#-tc9-D#Xfuu8WrzSaW;QQnXA2!5Xo7ei)=k zd?AHi>jH&Iz#kWvfstB2QpvJMtHz{LqTJv@7L za`qPN9fNnLKb`Fz9D-LTXFLm6y3up6cYFYTJvsaN&B-4B=Ep;@e|ETcad^;RhmRHb z*SUcFB4G4VJ&~!T$zt;t-_-1xFFs`@y z;cdUQaxEM;xN3Du`N5`|nW{6X!VlKf%W}LcSIc(ecTp?nl(`ro0`pXPbA4-ul$C2< zH&iX9gKP5|q`I0|gWt;X+e7J6QcL*dMxo8IdG$_Y2KTEP+W`jz2Rx(!3aeVeZi8bs z2W|9g24;5|rqxtTobt22_*@ZGL#!0EDGp{#b$QH>#%HlQMap`r-1Zib?)|FboNaOa zv7x##AZT`j@_jtZAPceo_Hx*N77Vt*Ux)qgfielD(%q|*N>rb-$`kFPX< z9{NC0$`!G5GrU3+4vnCi&2F6XQqVY^^sm3?M;dR2y^3lUQIoi6hbif_ys7)NPElE< zj3Uvds^PO`btGD?Sudp?7tuyu@bxFilSE|}v4DmEWXjQ$uaE+?uj_5%^+iHN-?7wS z9(gerOw4Dnp!g@0qMW1VZ&nTr^6x&xgvRMapQv&Rm3snjcdDM#E<1)FLO^QPd6GTGPP}`Pzn(8)*2S)A7RlOeAq*-DWG(C$l ztm=nBnA2`+feUFlgH-3e@})3wrm0@1`zW_fY|~xza?P<1w!C%n91mj>kR7I_9#^)> zs-hbWq|@6k8->fy1EdmRT%uhw!--RsLe#4?>nru;AKgS;P0!b8-bvR#qxpTQ`x^Ot zT(i1=mep8JPf64b(f5SxhGS|w60E#!!Q)rpI}gshDkFoy(bFWBa@W` zZx)mGW|)RPW!q&us3Dq4&$e5EOUANd-yLS!vXSJ40q>P5a& zj%XgE8x)BxW9ztW2Q4Yo4mbL*0Hf4QRXy(vl1u5;{Ju@a_Sxi?7}D$p0$`zpPT*VZ zd~Jw@b1)Y7Da9#(DNy36m4eN93}PxCldbIyOs6QnjR|5;Cvt&n0U1XqlGwgw$o;V!q zOd_zInO##^Y;OPgpL-T&NK134id6XIY#e0Fy-D zXUx0{<^aa&Btc+?2!Ru{&4-1M6&%AjsU2F}ye_>YD(RG2Lf$tj8Am^J&BUhPr#Qn2 zp3Kj)9KmQGr-bG(PARcQ*OgdUcO$HgYITc21Xk*0c40YjG>iv*saxVui-XyifS?%jcZ!A8j9J8 zk4AHv#klH^Qco2KN>E5q)EDYdx`2)ZOjdyrY4X$el@mn$8rlp3{?2&zviIS`hY!82 zO6xfDjcOLJ2#z{sfbvkRP7&`opomEH)=9cJ1!a9X?lFjoxc98cINE)m)Tf1n!(^*(Y(Be`QpvFN7vGg@{c@oX=B%&b(;!=l?14jELbIj ziB2IfOZHdw`Su>cVy$LJMy{hbW}>=#Te}ODxoPEWfyqF^%$n_&U%^n8aavZz0Zelo zSJhtCzQETgbw2Sf4_khr2Z z-a43bKl8@&m1<%Ts`X_xcfQxWwl6*x3hG#NiV0;J8d)dg>ea6gPKncxkFU{u8$7;& z37fLi@$}vUFT{M@QBGF$n*YWnxR)Q+$?o(7NJHw6vBky@-)@u%yCZNj+_;X@Xaq#5w=mn7 zAqpc%;b;Q@?e$jMSmaBudbxMh@u0Ecx_|)9s=0whyz7e@SRVDjCJ<}TVL>RKz2UFR z^-S@Vcxon11JAWD&c2`c)bY^39QHcj5d*xJ#8eq{5Ky{r)oA68^a%VB@L1&$ct=nk zu*ql=v#6J|v3I&hzI}dCaNpVyH}^MItEWx3rKVP0MWqhYhy~%k+H3$B721l3;@oqH z+qgBd&$Gfb2U~42&TLnk!Fs)V^AcWEaeiUtl}!5*=FKcD;+SsbbDpZE@rWg&1L*bY zB=NPVPthA?$lcVWs!Z25mE}7$s>yx5t?H+|VzVluo!hnLgS9lQSKC!T>j&1=Pb=-; z+o7{eULI3-dx1W7cIpDU^6&KDGkHCvkA|A8(nTQ6f)qz681y@rpCT9~h>-Q&C9x3v zRJG{83Y-_Sil!obn+9-9Q69|VB#8+MF*BGhnyVCG#P%4iw;}r26iBJ8b5v75I1!#es!rA zSmwc%E&Sv5e-+^cEO1+s2WaX4Pltm_|9>%j@zDS8D;B18 zLkR$Y!hC}0DHp61wUc`6da5#RRar`}dilTJYuHoHo<9%EZ>B#{iK1igH`sRm%V4j&LOd=4HD#Z8p}l-F14 zCjbOf!1XZ2go1zg5ICHefq#@KrChu@7k3*N6geEX`L~4H_MBliKv($o*FWroabq{3 zcDm13;)y8?P|)8s^nKKUgaxnvL>zUi%H+Qg&e4k0h!ZLEuqsX`{0{-cACJLrp!fLy z_CSFC1$x8XXFc%y{{T8gsr&?mQw(|+@eD-(7qq7ye~2j<@;}D0NlKYR5B%3l&^tXj z{>e|VELcO4ca|i+K@WZ9p|5;neMQ;9t2ih0SDZ&LA8+!Hb*}(_05%^7K{^C~0C;;1 zo_rK=e~*X%^XbV}YnNk|X};8~M5#9?dk05d3clStzc@TQIQjK>seasTp3J&>Ilrsv z}+aDI4vaddq6MmvW0$M4?$czD*uKlFSw_V>8TdaJnxKk37> ziwbe&8N6ToeE4^-G@YD+ru0pWq%bE)_b<|ix7WId?Znv*`1tDN-SNTuqtll|QNJB# z%=$UMTT8vki!_e(tFw2C4B%{{i~# z;D6*RrD%nQuxZF*lMq*b4gW_!FiMu>TtY%}n^Jk0So@Xh6yK(L0jWLX;?G3{pEZ#~vC{`kZC`tkp5{ank}@I9~WW8;N? zS>rD2TUkI^sJc}*x=?LD_d5Mu{kZ!-LOVM!)2I!r?*KLL|GfC_yTMau|L42G^N0Mu zd-=Ja^M4bLu}oh)s~#6BQo02O4z}H5m?+Kxf6v``<~EdPUnn%ehggS4<02u5S~rOB zv(sV&tD0cIp0oFD8(NFqM*6jGXaNATtZzdeg?N_X6s2?|&rp438(%7;=A#Lo_%E*= z^bR1J;q)BQo@_;h)$B7J0ov@clZjFpj-<-hkS3+h6l$8@w)G}M>EsgLx<(ess@Wz+ z4eQ$CMHzlBWLCA!b1r+h(Lgd0=XgC?h?RD%o@p$y2vT%Tb4bx-Zk4PzE1oqyLuo0t z{9d#I#eavhq=l2;#`Wrug7+V0a};L*S3x35dk zI03B589U^C9nh7)FTMUl#Y(a(7!IHPtij`U=n~(XGqP@-!kTYd?I1xk-Gg1~c_~dD z*6PAXg)5Xh)w41gtt71)HSCBupuXa0sHB*c_!q(r#NjpA)HU6dlg<8xw1NJQkf2jY zr=aH`XY{uCSUk@0jCYRg>qyhxo7bL4oo5U{QuM8Vu zAdUIpJC_x5D4W-V>qo8fEK}F&?HwcEl4t#$H+^GFX~0bL1rJT-TU#TKF|T?82{|?{ z2jSay_A4Ln>i5>YDRO?pD? zJ}U=${OY{+!aPqx&2ig{i;{KK>)1mW-E%n!F3Xxv*V0ogHfwYH6elQmM{DEZT0}RQ ztWokhgm0rBHAU7`t2zPJR!4pX-f50QB)qt|$fO+Ie6M}OK?|L((u7kK6$#4i0m*vo z_8NyL}EDWg8GqOsH}iZS`{8l6Hx`q3u=nj9ZXK6<8l1oD zXZmH;#Om8RiN`3MhY5O(@wKz7uHUVt(H%~8!|QHUYG+#30Nf_j-x|k*dyeJnBwMEv zq8Lt6OlTaw#S!w?S;By=)|?I_1ueEnRb-A{MN5Lx`bBmaEGnv3Amb71dZl*aqBxBdgl?;~BWH=fbR5yvyePeKxrzbc$D@nmy|+j2 z4-S8P_mfou2xxja800C;=b*>0e*nEPObF^(Q1ZgtN9d}Uv{=!We;_Dj5}96Sho^6j z_W5Nx@86yr9QuWGR?AH?dvD&H{QCaz?diqeb+%f24O83$y}3D0v94>Y5#4t@z}sp3 zMGJz|En~0Z1d(RVSebqP8u>1U7R#n&$GN1iB3#vI>jd!eewE|d$aw+e^$I_u`578l z-x@pb)q7rzJKJ2T#LqRFH+*W}-sWqJN@uBkY-{1-&H4Mo9Ck1(Zc*I0d|8U! ztg0rj(J$HQ$=OA%SapHGse!i8(n$?gd+#n@zu$jzba;GmzN{w99LnyT^}&n=whf7w zZRFJ{jzy{aZOteD-s1H4YUKAAOXbq{c8LyNzdzkO+k1Pyuwdn7_6zm0c4u=(hTI@j zHKyPgXou;|FEFn-=QYF?7Wt0xMROo$jLaS$`)`}x$~$%40HW&I+jX`7w%WL%0u%6# z1!>J{MKjf<8`D=;CZrfVmX^>@wzk144-Gh;QYQbD9hg)6Qx~|Vsbl!;#!SrXG6|@e z^YYc}a~7i(*=dfioZd%_H|v>0RT-{6kuasKnXRu}k4-#_EBRi;s)yv<+v@HaXqcVj z@ETFqdNT(qsl_hqTK0`h&Gs~HV!m2q+uAHwZ(K`Gf9u*+u{6o|PGE9?64;ceWHa%6 z&^bs9-&wiGp8>U2gp;?SmfXCq9 zcy<*dkcm}lMEbU&2@E*fgZjIgCVY+%h zwKI=Z?;vazps?1v7?)jOg?a2-9-A^Bx=#p=necFC9Oj2(MujtDOD z&|N9gkDJnf%Wu1NsI+oji>9Db7*c*UZ<8plbI`B*8K=>lf8a1&cvIpAC&diC#YI{d zRa>j8jy3RXp;JhwqYf*xUh2Y>8pwJItg=pMFY$G(j=f5_$aitx{XyaS^eZz?2`Tp=jmec8Erw><%F2a(|vO4;7mQ_ApeEC$KO*iiGT}T1!L-z|dD4e9pT*L0# z@-4P#@r&WdmRyEv%uuc}smtZN5s#K}@NN~#8sMGV4aMuL+Ptf(!Xm|%UmaDsyT z_)FZ@ZxQWbU*A#Foo(zp9PVpp-@BRohvSgqu>>7?QnMrY1pIEJDX1SmeA(m85K>S> zYs(=afg{QvUi`hFjPj43i;fFqUUjT}2=i2XVy7PjL3v&AOL<#yA#lZ)470zE{D;oF z{G!SB-W=^UZP0bNPp*Ob;s2hVoLwBAz5n&_$MBGrv?38p9%?J~q~=b#FYr^{{W=A)@KLkIl@--%4CkGTPbk z4D0;e1;^okjR^&xK8=>y5UCNo7VM|CKk$uSzB_(L8_MR6YX}QJ!>*r)^IdHFRSl`r zile3Nd)oPH;JJn-UU=_sjg6exmH9GT`QEmEnz*i^p_kbFSz}Y@PJNbWYv#0n^0c&A zfm*fwyBfuEyA73(7vFAhN!=Aq;i?C+IcXz9> zwOm$ShHY7ym3c>TghD4)Uc=75Cfk0juI4b{;}oHY2#uVgd=?X;ZXz^cFmBueRX~jD z)=OQHdf>0ofb$~V zBku^x!PXY&!GhvmbyXmo;@cDiXW%l9Ku}zc_`g4aKR{Se5JaE{dLS6@UM{@_?8^~1 z_%pmLDyYFNLtKGSQo@Qs^D=oI2;gx6!VY&*? z65>`lE*0!Hky$wGZ6J2%0dOntFE14Kg~1P*DW5Adr9IfJi(blBW5Gipigg*iCBg1P zw%p?Zy`C#nw;|j0VU||1Jidt&G(nMPwxK=f2n_0-k`(6dHmDs2Ys?Ffl$Ua%m2VgJ zoGyhscb9&KYf>WjQLizf=X3G}`P3;UymvNG_7v&jDk={|Jw3Q3bt#wnY?-YUAF#Ll zcma^$@<%$5w>Uy0F!=8I^NN6#gw6#dTlfy$E`lw(Fx0vzWM2gDqxUMuGv7ft3HxaY zUhY>fzMUQa|Lnc{ciT3y0NkJTS6~%)YxPF*BahzCyY61cb{n6y6MvS|y?feT2PPp2 zYl>hA(2kn;``f>R7YUHyOQId8wa%Vx3<5I)U}i9w82}8;3u3TJbXz-EEBfv-ZH3Go zV7{c*NW7z{G@G-Iaq`#Z>N{E;gVj#WRLDCo5~AKK4%&uUwW6ag4OQwOF)flg@^Lb+ zv{~@)=os@|j(dJ8J$&z$Bwu>{!4SEPb`k~gYOChwOtqaC)@KRF~PjCY* zk`oOUsB^g`dc;zm+b>?Wcc2=M+s_4@TFB1b%uslM0>qH>tYRb7 z1`IvkylCvfU`41BgfUW@v9Ggs`T~7rAP<50veNaInnL+X(y0q^PpcOD*$hz5E+S$l z*rEHEa10p;+CGURe+}OIXz~h<*}u~0?53@gmU#E0qW{o+qkrM?CHE=NGDv0A7gVo# zV?O{;9Q@^`Q!ef()A_5AXD#i~8Vb>HEd`EcAamzfKAztaMDs2Z%1Ep|i8YH+8S|14O+{d-L+Vg!q>rdk7MSzG$r;ZvyMJ&qxl$C8Axv9@+Z& z$VeJgB`-&w68`|xIEgs+SBXDG?D5S=rD*@~Z$=7Up5t)u8sdPnmuz5`h#4!XSK`Nz zwc&?%Ax!HFo-TkHNOV?J1ECG#QySOYa-hGn_aIxbPRo}eyIM2k=`z zm94jS~R#6xP z86ivr-4~Rhx%vIK1joofh)J|>$eVWG?HwQY%sisiN3Kz}Y~2Vp1wzp=4wDZS*@EP~ zaKWkO8YMt;6fziy37}tE53QV)A^0YZ-+!Y^WRx=fQ%5S&0;m7?n@3~l@%L4Q{deu% zpZ&MB{j6aBZ9m$7_wu_(`>)g?BMqE@gs5K?Z8sy0>x}~UbrF6u>^U%;G|s?PF49$L zN3IyBT+O5uPPgDe#mc&P6+gI3H&T;;SZATI3KQ3kdo3IBa>cqV_f0Oom5*#K9n)$X z&H8L{tl|_b6T14WL95a(+;^O6yUTdgqGFo2p>$ul$W|4aV7^!pKy8S*K`zjpBVWk09UeeZRXk+TI>+I>gY52yh0@Lg)iU zH4a-+?QBp^ZGNZPXy|3W!8~G%vUY*d;^**?R(Y9ut%rVR?$bN-8?w$LezqK z<5tmO>AQs*2e14_7)ZI>aHEn(1UYL}8hADPImBlzB7XM=0aBRFeVWz2 zs}{Nc8S+jH`*xm~>is|T#O7;7H$ct)f2+9v|L(<$$Nm4k{O)i6@74u-io%h@SH3(o60#yej`*GKXOvc>YyWU&ZmjeEU9+kKNm@OJMwjO? zS+~A0Vs{|NuG#sn&%?G`ZmX(>J>?sd23xLpD`PqIT6aZZQ<46GLqila58|-Ef`1@p z`&fKDvqGc`T!cQjzdp8RJ#NEEKX4W%McFWymQkYTg7j0#wQsWbyZJ^ zZ`QV0Bef5fn2HM7b&_cyHi1+>d%i4O`6_y5@yN?VB>0j$Hl5sVKy<&x1MF)yOMx^S zukyKam>~^kX{iCOB4mXTE*+YdH{_SN5pwEJE9599bHrvSp@4cZj1UDA5?g+WM!LDl z`@*&AQA25@ChPQp2G&9^6qISDZ%@x7h@f4TLn5dVMveDl%&cOSop7ypllf1)_BBn3b* zC=RD1kHm1UFpD^rn#sn1+3~{qc@!t1u1&L8m(*b@wk&gCQ~;5i zgmXMcBr)i=it7j|fw2TNGZKUJL$N=Yz90Mda#({VgQVh5OW+(X@hFA zUW&(PYzM{Nmt`(7Ub5)SATn)S_*5B}uY}oz+Kd^(O~u6TXjZBwgUO*A|=ISzFc8bWsrwee~?ZvbJb!2=TV?u02<1a zldMF}`I3-j9*zmwC@FJO+v^@sNfOpRNLhmL1? zt63GOyNy@vNy&5w(AAG_KCb;=)-S*QtIRUG0i!g z`Q6|8-|$3t-92$FpJSp7GBim7idfm3OopRRQ6g^~E=wgg&K7EE`I8?mRKxIvF1a6b zcNCh8YB7ZQ;B$^obv>9cLOmF8yVPV^pvQqp{r97M==m&_lk@zZ`RFjfKK4fUjV#v@`opZFyoPM;D z=B@7^({ScEJVVf5jFCq|pE~aD16!l*XUksRmjmwJojOq7j=Aa zVs-&2zui!qOiBuJ?-_S-;d#9@SkK%yln2X+-7+p;%sc94m(i}H1xL2IoaB3$v8lXc zMcy+bZ*H5zD3en8^Jd7qqRD*2(>0_5z}^*DPkXv96arWq>F2OVuOLOIkj+3pYbng; z{y;3@lbFnf7r*@sipP@H;&CDRDCd0~JYXLz!$g?1;dW8tTP3 zVzf0ms$KW=hzD`nlOvj~K51^%RIq_Mke?Fp%L&o4I^ixlRsw#Rj+yU@TQo^^fah?E zPLm)Qi`l3Bs?ermW@m)5y#PastN?9VxZ1UiE-WP;u>Woz-8a}K|M*nlqzknxxVyvG z8OX3${1>WAIml@bDe}^ydV-eeEiK%i<-BZ5A+5M=ODru-uLUzV096-(RnJI_iRgU* zDdn^n(dGOnw+T}KP>2pU`BU>k!7Tt~YJP!g`L z5xGK(MzycdBHQvds4uIQ^{}a^aKK~hT^l_*<4)eUapLK29bhCtaef6i3cDfR#L^}0 z5edk2F^*yc{e2Qr7DF@Ji}$3YN>}|VqoBK9(ix1=X-qsMwYrQMW-FfSvvYl@0o0ft zZ-)FNK(W0>S;cPrR>P&&CO@R+2A}`ZA}3x)gBG~VOU4zhE-n`@VpxJ>q{XI;jbj{M zxxFgIYKDNIc#cCMnm@+SL#HUl!V)X>(Nwm`0H;U#tP_CJk8WP#&40oWcN%Kqi)ECh z^||5hn04`O6r~@_Q{-}I3VjTxA)yR=C&WjtbKj+G65t8)7G8i}6LOV1nw5U*hF@~1 z%9iTw+Kj+vhvYQc(idx;!*s73hcePu9vfpAn(zki7L*~S<)=A^NWpB?6?JobahN2i z?rF|rXiKb|)9UoQ_GgV6QY&f|lGg4ZZxl zk%(ITNTg! zI>K^gv)SbC5(#^_IcnTONBTz1!t}SdBYN$Pj1g4#A{~%9#9`@Jb=0#vq_TJt-^r4v zZ_myz-n=_`b$Iq!I8&VEspHHB;HxeRssdj=Onb-2Z~t|1cyfCF?~BvD@%UeF&kpL9 zQ%L%tzc3vcFk!QFpejf)M%!xAplU+VDWvp<#QqOBK!rO7?3ve{x%lDexJ0A%E%h(6 z&19s7%D;w@!q;!WVt0qHj6>WVcH#cPx?@EDB<_Er#Tl9uzg9d3AsZGP(&q09Eh?Jo zdHkpFoi!8TKTP*ZB(jk{J3k&@9KP9mb$r-BN`-(5S=DmH0@_kY%@(zkaW&gmMYd65 z8kK=-@7?+9i~ZxH!#C&SWru>Rm3?t>SR2gyhiB&%Qtsdi7SMeZvkF!>!2k2`-%CNS zmL-$^z4q|;O6YfRi$6ORM+mu&4lN&CDMbgbFHZN)_D;sF2|IW#k+l@FdS!Z7oLoVb z+YpK2VR-!$j0?+M7uzfge#7ln_0HDVr?`;ppHzO9k?z8Vs;J)^jMx52af)R+#|ey_ zOG4qHB$yYCiFbuqo`<8tLz$J# zSvtGN_!@K4pgf0mNW9G*@@GY7L1+04Q0Ksa*{JCV*D%!eVKDN#-3v&C4i z95{^;74HtwJZr1s%99;g<7Pq@qH+*A7c3+p>Q@qzR~hN&Q6ym00mE&_+ z)+&lArVNE1S235T*40+}r#`r|R+|8*T1gxL4nIV3DHZ%_2aqZ^3o{+b~${02U``RX4*=hOS!DeN=tAqll&S)q^Hpq>qg*c{iuPe)0}j$y&MN z6zPrCt#h`lmQ8cF@{J#0ic%eEk10yIVY;gnr96iFN>Os=#C*!BBs>8>{|tr`@J&gu z@*D8$uYUtfdv<XNTi*ocgf)&ezu!YRvUYhjZ4dG7xNH-;HybBPmtt&Mg-j>lOy5(OpO$ z`lE*Q+r_+>jX`tvanF*Vl2I-KOd?##oS<@<{JRATL5qL+yK zbU4*o|qbLT00qDbok$%xL;LXTQ2!?0iJ@&ycdA}q6`y==Syo712jdxWBZY+(H*c^u9*}ucNebCA?Pqm zKtWzglNQ>xR-btYcdj$t2s;`?p{QOH%Ek-&fE4SDP$8WakR4T;sER^??5E>`r?M=| z^mv#(Dz4WRRO1#`t!F=_Ku(B{cEIL$FJ2S~EaY&upiH*yn6S2(<`ZioUz-TOo4?n6Ifd67MJ~P428?octB!`o3$& zV6{^-74puDgsAt5gSKH-t>~yrLzO#AOp|1ee4Naytrq;ddYjWdLsibd3Y0lMk)^dJ zlxp0`dEy401R(uTZ{4LJ+ECX8``0^(8##y@=#rd(ut1%zEzu^H3f+G3atXhx;n3~= zK6VTEinp;>c%r+%Z+%6=Gu_~P8^__`9n`(JW8DHZDCfQ0Ch}2BwIS*Y)KX11+2{kN z42RSG0OEOL_DLZyDGZ{uJ=Y#Day$^!2kR^<9^)#f$$BLy9gDhIGYLCGya1C>ZisC~ z-K2%=+06`v2Pi-cxexv|!fgQ2qs@!P9t>6mD`6OerFr2xYp37!NFUHNpNhNQQZuNY zh;raN|*dKc!#LT!(3+nN+X|}wiqw-9#NIp zK=(rm+XJ#MbDUg63ACiGvIISd6gQFe~l8R|dwF`jsO| z&Hl&>Ak7|NFc4Q#1^Ux~T*4r$B>#3;ga$nyA726fLVl(1|IQ-V&FlZQ@Bcsh?%8JU z{ofZax1K+~|9c<5kN5ume|r6N@u}2~-~Qz+Y`*!M8aJi^lRg9dn#A~b5;7Q^5`Rw- zhvLUKfd33{0E@Yn=abS?U2Ry+M^Qi)a}+vWna;KxhBu=JNZ-=laU{p9#Hca>FfqdWr|H036P+#$Li##Mb2&t2z}X&l)xR{j1lf&MEP zz|cc+f6$=88{(r=5~nY#>8G^LV>p>$ui_d9t^5@+YY#W4i^yQ0mK-Bsb(m{Ms?uB+#Jt!~3GD}uL|C68-pRf6=i~l}<@gnE{ zeZIZ<@=^ca$M1ghe=2L2&|5MHE1H&sV9!WU;`nWPf%=!MVZVr=X`BS|sDg~WQ*dTc z`|TU2V<&HH+eXKB$LiR&ZQHgxwrzB5+fF)pPrh&e_c?W{_QkH67wdY}T5HbrjPV=^7tYK(lQUiy@`&f2O#U-Gt6;$iS>!fm7+&m0N5o;cooAoRkl~M> zi14}_OcV=HfRg4L&TyLPa4-ojtp5BN;_Dis#8{DlTo6hxhds_w4Dp|4M(7%E&3((H21}52^pOn0lyIMd-htmW5^$cvqR-o4(%`u?gpU&2m+Q zeOo^bf=ZNPP^TV;PgKV7n-#Tcb9H{nZxMxpKZlDEzH9kGDrpi(q|os>BqOW`tl~`zJtJqwuLetb_p^Ffdv+xTo*cQwy$OB`LPnoA&I4B$ABmPpF6%oW z&*l9$8bOn1S|oK<&VD2ZLi-(U@vr8hX1wR;hm?Nf4BD8Gq%ToDpgm;H#kR%_b!hPx zJ|$KF1O3%VoI(?1~m=zG%3ho%MtgYJ7vg8)5^L)ytE?B?dXKFRx$Ecml~4_(2G<)u7< z0eblgYVF3(kG2r=MwNZ2s&>@;St}ilypXB08W-|!518sMT2VS?6(_14tM6{*iSVou zq*3w~cf6u=xnnuvcC>D*l_tOyp|%}gbAd4i!x*G!+&EBB(x^nAZ^$@o2<|&_wcHOo zabl?^Dc=;ZEYKsc$;%~x7uP&>_*)9$7xR7{22+$mlcH9+)mSu26c*M1!{&5tgq(0F z_zb>|i=*UUP%Lk-+hbVoB21q8mM2bs0Rt%8UeLTgHgOcdC&KHHq12nuX=VT>Jh&+= zB(!fR6%1-^=hVyVWG*74KhzH~457oSSC0&uu_&r&Bh;X;d20V2LQ?7e;31+NkGtx% zV6uW8M&VtfdJ~KjJqlfY&Uc_bkbSHvL_t{9RY0COSdmF*^t!gj$_Me?s%|HCcIPq& z@0k^Ytnx(Drgg`8gZaN>#|0%;@WW?U(Yo#gW;hz?3;!u%#E_v!p~~IwapPj#dk$f4 z_Zn{x*BWjfVXp3NE&5VVb=GrXrA-}EXZwg;SpHxxEeA4iX)>wVSZh%;a;3CRU*r65 zWgLUAjAZr{y-zG9$YPX?Fc`#O6lCEUd^TYmBjV0w_jk|8DX*yPKu6zRuugeY_8S0` zuVopnLapFWB5d@>s05bR&5Zudv!7;T9^;i0bE;0Atr0vEV5TpVJ;VSIz<$CMxEBwJ z4nIsEYj9<>-2YfJrp<(>R}k`~)SENj>rubzs^BBXOR{2HhEbrqFr`HXyM7#nvvl-f zb1Ja?Yc4EJ2a6SKpX{(Jb&Iv<7=UU7Qulkex==l952-gmp!;@QZk3arBI?dLazBb2 z9u1%)ON2Pa9@&|IfN-^^u*VM*N)Z1`^k5SE@2`%Uv>@@q1j58Fox|RfX>Ym7kYceP zikztN!aa6!BgvX4ICs>BEMsYFzPmr8rqP)(MDQI4o!r|2_b$E|)bBwGvSA`C(x^Fu z>$6wowx(P{`HUuuTVU2fSf$Bo#Q+ZXObh%^sO2>C7nt36gg#Tx8%bd$c%PlII)%Lc z#M}r>#fRIITG0;!*nF0_zZFg;=8TWGuUG^ylz1}zcZS!ys&T4bd&Ewl zel(V!@ybO4;ZLUE8v)`m7#SMqah-DIl@pE!eSH$ z_4QI!sK_e{$1&MZ^bqcDks}pf?`J9g@=w9ITIa_J`yLI@GF5!Rc(TWz=tWktsFeuE z&2c8+_MJ(-PAXn-_N%d_(PV_W6e@H2+Al;_+(8qSYNTxSt@RazlqLYC?_g@Wna=7p zecB6O!prMG&jfp3zg&MGNtD%fP`e-g1cNJ7+E{HA!@oJuTwiRF+x846Q#vz?_HMn1 zj>exgBP>$-b4B@zMmK_oBtXvJnzw{f6S;Z$_yyK?cm+K_j`t6*`uA)FcZ%yBt88uR z=4#@Z8nq+CF+Y_%x_^yk+tBe3n>n`%V@_z};Mlgx8{B6pSo!Dq6CyvDhJ!Ii7@?m# zyobW7mjU!A&1w-)O@i^d-}bJqJwq7q577sDLQKmbwk0I)X0v*?1zh~r-k+A|_-dIM z0#0m=;%s3C^nRAZxp&4NoADaV_CG{sF(1&rSxmR zgbM=rVeX6(uWYAs;_dn0^cQmT(zlR^V(U;WJex8K{? z^R88WGdmzzl#C^E<{%`UAFLQitx?<)NaAb2BWNg^MH7%PuMU+pL^hr0-Z z#8_wA`tF2&kZxtD8nd9a3qSZZM(8Lqxta$fvt~%lXt}hh#Hnv4h4X}~FQb&s!BC>G zQeU3LJSFh@^)Z5ev@okXkp zJR*fP$0Jy@u(;FJ^L9>e&#IsRkGGS6D<{XIi;!PHdF2tn#?KYjh^tI+7bK#cEtDVp zbT%}h{P=vd|KfW#+t{7-X9<60t5p1yU$CaaZZN&M>tU#+{r@bZ2MNsqJ^xxY-I zIi;Cjv1zzryNbtnfw4`DYjy`S3Sp^&x6tIH=s;Hzy3=Z^mz+yH!Tq9O_k&u#OUH^! z7Fw=dt#&P5u`r$K(1D(VQXuavzKxR2s&K!_XU>l38L|PlY1wmOdU#peMi9c@a%+Cq zcc?@|9VOYTr6fBAp@pu1GID+o`tWMjCn~?vatTX7m3We0KU#oj_S3Ytc0@DyabTwPv6C)wr=6FH!KAfj6hUN9EZ?LHp=^d zujJm*rm@YN{xUJg)QYLdDeB&1i{#yFmS>2|zhP4`U2u_?CR9WO@O?~B>gN4NCRQhe zPO{X9WnDuCMw&`^@w-ngZlSHAuAX2cOhfR%8TC-AZ^ctVJKWFO`rrNJ2xITR`zTOu z{ewE(@2i!_o8Es$2Wk3Wzg3ZWQCysj(r&IzsMMN2#C$$V?B*urI8F=T@bqLw$+{U_ zG48sBqeETs;2(iE>MTIf@(F9bVRu8Mm%%iGSJduM@}Z-TS}GD{@v21(m6+5Xu^|KnG7N!jHfj*~SlBJCGhtBDi8Dm($j( zW-ckmwc9~ZPMuu|v}}_!*toRGwMfj2Z`}RjUte7@dYG46tidDk!BYB7l-&SaX`L-i50iV&hBH^iwM#K%IMIJN|VKG`Dz{*xSyra$BmMi zL<@uGX-ohaes`o;O8uj?cn&K*(nXoaMp+@&(*|$ebzN~U6n!(F$Q?GBpPrRuE=G73 zK{inSa3P~J@~wocKuxm`OJ(PO=v#w5clwQ3FcDc!&F&(G(NR1HUfvi#H(mlsAM5;a;cFFAEOUJApgth;#cFd524! zU{Z>abQd)s3&0vWq(6KImLW1G{fN9AnCu3M{Dz%s06L_2<^x8o*p;JQF1mXkSry=9i#BmKG0*`ehhB7Lcqks2CB9gWz z`?B$UpR7HaaOC*`r-x|t7h;&&X!$x@x`9O56RPk2kBKu*50ink@^V8xb>}of6^pPM z-jXxC6;EO4GIg>{%pVdUVwgrdGd}p*q-^1(F8|pwMS+&i+P6LJb%J(m$s-K?ANy6- zBbj5BRJsBegw+N5Clp8j`g;fIkE*Xu#_Y}3*1?*71B180#x*Ov+{5%RtA9YJ#qM0E zWvkVqX7B3$y;kVf9l)Skvawe-Hxf6^1&r$oM(h@wuiLwepYOlcW$h`Plq9A zszQr)p&bKlXO%VI7T;=Qx?HwPd+@e!w@y6i=cg|9c;|)&9i>A4bhwqlzttM4g z*?o#YPLg8=E3l$NYb%HoWU4OB=!LvxWB6a0E8>*&?*_+;X!*e3unnV}df_anHR&o# zH2RTq(3$ipP%i`z%KvLM420#Tp;E4e{)GPEK^)P(Tj;@Ox(fPz2xZ>RQtjW`=xOQt z_^WS2Q$`!>lWzAaw56;P+p7Xt5w6>MQ`qFQwM(xq%)@7oI~uCDJ^VUJ5C=X zxZ4uk)SEmMt<38g?+H7Ndt7Z&CuOR#5`_=VN$r4)loHL)3=qLr zQ_b~>3ufDcU5QF)Tfu@-4W(a$2c>lb)fogl{HiYto&ParjCgD~$3N*arY;XE2kVc% zp)Oq2`yGoU`7Q%VdNLSbxW^4 z3~)Cz<4RQ~;b~;ysF@5My5Anz_YWX~lv4RjF^L4n)^RB&Xsn0rO&&>?ao{ z&X4%PC5P&Aj`}8)9bpV1w0kfP5#jD8`cLVLj^5OuQHNObbfGhk3>Lb$rt5lqSX0G# zzmdax>FVmm;>j_FVy;D}YMo9=dt)btLn5n)Ud7>pyuz5iQYX+-jlink;?E4%Su$HH zBV~H!CY;r-YTNtO-CnH@do?o@GYs-8#A^>Id@IYx0N=n7^ zdn8Bb*Dj^?vY0XFb7Bw#(m(@xvbRtucyNZfKyhQed2Bj*s%8EzVdQnvoRfmbnz5@i zs&9kk%QLB8ZrKGWeFtle3mM?(6 zJ$^#F_a=%c2UJZNSD;nRbAaHpRt;?+*$?`U-D zg}#}wb(@|9pL+WU;>!U2x<$(N5Ay@s@uCve0e!l@UM5##fb(_VDGNK}A7$N9ZXOE$ z2LwCN&RBMk+)La3&zyH^`R|ulcbK{l_j!YR^=@tn@PNI%wh*BKeEaUD&Vhnn@WTy! zN~ZH^lpq0P`!Z+{byi+)*~exu{l&dsjuCvA@V}(>2&-2@V^Y|Y)|0`E!8=)v$_e6M z^5*b&*N4XKNGA+V2Ul-`Ty~A(0(#OE#g9k#om|HhS`tg}LhA?K4G`cXr;-ow*PI#Q zVUl2?8Zf6|H_;oY+Lo;`-l=9JRn-wvNzH}w_i_1cqz*+wGe;_o>EecA8d{tiUd?W? zP{7@W@`FDpTA@`H65BZW7nEVi5xX4zhFaxf$^DOt_%eiyZ@Z-z(HrOIB z2)0CVcxT=9SVU~$yPYlJkKfMk-0TF~`sl%kOE}4% zYxa^|yS|D?<}E^ELI~`$4CG8Dtl}k%F0NzfTf*mJdt7dmC)6^xlQIpJWNZJ-mZ)ma z=hwMf`P{z2L&NbmFI>11iS8) zIz`J9iT+VZQq;r7kFV5x=Y%vwL96*{rY{|kpt{hvGfx4Q|^gHmf zv*zl1g1>*%Xcl(?^!az~_qoy!|6f1c?XL)4-aqUVZOXU_sCW3%**m?4l`ClF;LAZr7=2N+_M6eQ1T#nxkQ6#<4|Mh zYPQk6j1FbjQ4A_JlgaWboI#{%Tr-znMni^|)Uv%aE3pO8ETtufIe1DpVn<>01>MZE>g1xa9+3 z=IlZ@c<5KRevM|M!}CH~k}TpiW)coZDtPY^&Q)e+8`52|zHebDHCv2Pn&2HBC+B18 z;iPbg+k=)jO8QFBfwSqJdSQvKALrv{_~9z;+fLt^Hmk??UqMIk!>)T?GwEkLLfbY8 zg8o~~jG{l0SP|(vL*~ew#1V+_l4_W0u;G~rjHDId^0G4f$%U2apd(+GGgUyJCk(}| zivZa%MKs^9dkOlJZMMXDi!-{v8B~LFDx{9OHR`+?(iZ9o5>&(^>=94=v)_PhX3`4m zN$Avnxpa=kKrT8^w|w)wL!z<}(g4f8=psnTir?%Ap8c))FH#>5sS)OZJ?!!=5%0kk zp+8uHTcpMae*;&(7CQWq_P$c`4H5l`vW|@1=?VX^%oXu6&yGm-RzF3c+rqs_Z3^z2 zRS6jUgBJn{6uS(5z>#$)v&0?xkt?q71emO*NE3!LQe@UFgR6)d5FUQ|S#ZI1URnk6 zIM_x|HClSw?7RueJYQr{#3mE;k+Q#ae>+CaV3}!ETCTgCl*bdc2Z;_)30-P9KpPqIOStU2M1v7>)ng-V78QhFhSo z_v6kyuxIr7l;b^GL~TEAzi7YS+sz_S!u55>GOe44h)xAd|9L*jd5#0H0p$6|Q82*( zRvmX+u{OAkw=dgrZK6GM>}MvYHZ*5>{U%)AYkiL{dapROhB3?azTNGuJ(I)0R?gO* z4Nsl#7?_vQCm_!(q^hUakp_qft|h%Rhm^gCD>F`+eH zgXt`kNMTJGE+6jXsjRL$`d1WYm@HWkc(CnFtV%f!Y2rIaEWAZ({P)vAmHN{6Uym%b zgvR=to|}ZxOd?K$f)stxukRGIXoui|p4peqY(WjW^@v5`RYpZjHXQcXQ(ImP>^%HE z2Kn(yeWvl_+GTwRrmVN3I^?uz9(SS*ZTu-@bkgbGuHHXUcZ(*C-_aFGzU~cvfQeS@ z3Pp15L{zD*!cTh%_NQAi!P2(%{{&$`U?cmD$z~VYMY|0#DwGcJpJsyOv}Zm)%i=Jj zN{>6W9;77Lx;14o#Yzirh@uK57$ji9xJKLBAzrB;e5|wL`J1vZpvNe_&+RJj&~YFK z9sR;Ar08?9+h7;%j}1%0%@=BK>kT*J?dt*8{~PgogB|z^K^3v4hdeC`zbExPY->#9 zE@#_^7YY|NN{W5~4%bJilWA)}6)Y#cqv9{%PG#uX;NP|-*4mcw+YX8elBq2K4t5n` z{1h?ijXZK(H2j4+vRxivw*SXQd8DAo3f-*OLOD0kKmJEOwp1zW+d6-mvJ^k5K_tMR zSaP5VP|Qm}o&_9-j1G>o*4^aQAr!1U9|5sOg36$>@rKL&XO`ynDY*NrmRNAec7?G5 zHz4*xcpJ^AApX#l*k%#Ff=OT-?;g0tOc&Wj8uTFY5T3$E>D^$kgEkbRW^Qx+r zWe#ielZ=bci8V7O7Ua}FZ&8?kI{u=?%%e^-m@lhrK8RT3uv6RGc03&1v#-D<%hZ)k z-2i%5%%nftrpmtf_C%5LOl1S;len2H$FuEEgvYjmYV*!v910@@j$C8^h9x^x5z4nq zJzRx)rp#(sa3d)6XErgs69d$8HSShR;*WI+TE8ElQNzy{j1o2QTqS`-z}9|e5dR4IbXl@uw& zdrvgB$YN`jxs0zR_yeD~?;7P9=CSd!Q0tV^!Kuw{7gzA8uRe4{q>tiN?d}PD+>kES z&w-1%iHL^&OJBWLHDp13llD1EAB1VQm=3TRLQzo{|1`{Q*efJuRQH z*WorRcNT?mZG7VzK+MPWShv{Bcbu|kb2 zo}dX@kJ@kMV=0O=Z9@AvPCg5Ms;9OZlFCMxUkp1@nM7toS@i9`g)?IpxiLikx*oRb z4=-`Ga1dKmcJi1)%#-!_G-1pfr`nMCvsWtXB;QkZmyc3-e7x!T3cOTnN(H94-T5E+ z2e_^OG@edM@+SesjA(?U;qN3@Yp?8wfwwm%1{zn26UL(4*@{?y9yfO|LN zpVX_aknGdCNkZ3#KKcv8{ylSd=)hdSyTDMXj3IE@-AxE%t;WJj9`9;|gXkQIjmiGi z>%5=YgP!2Dlv?KN`tLP3J$>O{fa9pagWL4qrv*Puq=Kk8fiyS!?%4ExtP5P{=jtg& z4ZXD^wCeJ$O~O-%hC;@AF-~}-#G#O*}ay*{VJJP)ue&^PY`yH23i zD^M%Y_WHBxtmbUF>c;YXO6J4V3$zNC`-cnnL$;7KzK8olc|ZQ!)#l)#C{vqPoi3}( zN+j?*KxL}k6pF!5Gsv|hYluSE;;hI@djG^>jz7G;(XOJc=uO)-XeX9jt7Bha)Ky$i zq#68BTa%pIB<{?_#_#A&f213i_SpZ|v7e2N;Er!gMlbN@?fKyI8@T*%yzdpT0@KLS zCY2qhZs!^3LVdlP2!Fl~z5n$3je7IlekX0MpPocq+kv*um;IWrTdk{aG~Xv_;o<=~ z7pAepCF&EJPe`97( zKwh-d=JoDC%ILmZ>jmWoxH;P92Cp|^1|cXI{3tVz6)w$IvmDfX-5t6FQ@nm!ph(|0 zFjCs>Ww5=jJ~;%=aJ6GIVzroi!vAHzgRJXfm^Ei+s&ziC{?V?)2$%J1R7HI4cgdzU z4@+@0W4g}3=E|ulLbrm&`j`5uA{2%n=rDQ!R ziNC0Ip}74i@xi1LK~rsnNPB%^cYhXzn02k6fUT0J%ho%M}Y6 zs`&9{vNB>O|LlQZP7_-IN% zTn|-dg(=M9dcs)6Qr-UB$*vp!`?n&UYMNvGB7yQ@iP#ea{i3#|+(FiU0ou6Yu;s`B z%aIYL5y>eWQHk9l_a2)j*~_?18#;)FsZ7>ekQ%b^Z4XMXM$U!uD*|Qzy-ith@%@a8 zD7jB%L>Jyd8MTM?cU6TlRgd>*0-qp>YQ2H(b8e&UOTgq zf<`_>wJ5D3+)<=5Sj0&Rl}0(Blb+rr#Ww)<<2CuID;9qBPEeiJra40yIpd%qN%=5% z`;Ay0zF+EKTY|8cj%E=H!YEqT$*cXr?On1z`!$YK(Oz)U+cXxjGM^90z?xrc@8SSb z8vYw5HeorLg*MK?{g-2OwZ?2bGWx6omGQ$U!1EM+SR-8uvP>4Xwm}Mt8vy~=>u#U* z$311WT^Tlck4CDBR-X1ntOwSPxYGNdG0TzYEG)TqfV_w>_Vc%qGqS}JvIxRGuqy;B zeQR z{s46$uIZ9S1 zZ6*iqmwJQegbZBp$+x@r@bLIGx;Z*K*uS1{#c?ChgbL9Y-=q6awS)RNWEkvBjHJ<) zw5`^KMnPSRu@#+N-tL-vJ2Y?#2=aCQ*BSFaV!HA@4te4d(H5_O??+wKVAA4)pMLgr z%qY;)%T-a3fcPxvYhaUXAb48YgStNhjiX8`s1io3?ELPF(B9wtiR*ku=byc^_vy9L zjv;3T3>p54>KA)7dXH}qOee3m?YBX*9_|H+IRmQ(F5)B4JVD^g8i<$HZ{CY%r*S)) z(M#J@ZeDqEmp8yTFH7{rwB=-3xnStUG!r+96=wIWhfl~6uS}dTtk#V8$G-(#xlxSX zM8{&QqJ_o&s+;#)bMfU4pZXh&p`04KSe+_ShFlVdO7Ku#uDoM}(Z(-EI zY5-AB#+ZJ%S}$W8gOW4x{%$Ypp@=hV6iH)~9(4mi+YB9^1ydLTd^iP*3g%UX#mwbh zLUfHINY1R6^m2bEA+Jl=*HDAPp^gjce&~)0DmvZ>{V|NL5-N-oLo#N{o>Z1~W)yR8 zAe^(TIE4Ro^9}7}bsO0%b^G$#)|xp1z9F;F!c2(`>F$%c$Ry$`igIrVBX@val$(Z* zoZ7U>ALL|m@59!crCd~_i;IB0nGo$T9>5;5ibo#(#aL45kuK*(lPuxr;~A zV!czuqVc&dWqD-y4rpJDbEX`ahqJZ#mC8R#M&+Yu1~5jcVhrH}NZt3~b>Rahsy4&z zxw?Pcvcsa3V1eElFcq?5y_`uq0?!VBXwW*{8woMwq}*?3@Tb1EfbXQM-hs_U|nX8$MoqyZPf!qMa0 zx=P@$Ap@jhvn4kOo^SZRGR^B~X>uFrl5D`{L2IVP9md-r-+@K^K0#4I+<}_n!(4QP zzY>|eA%;Oq|Jbn-wl_x{Y|Mt&Jvplvm8p9m|CpkR9O=g_?y>f*%ZUwu&UL6Wv5H68 zm*w$ri+hZYj@D!Ro@b$4KQ|}id&4ZVSeLt@)@K#-M1sjOY5Us5&RT;c$|1ACEJ8t| zv}#Ok8Eu;W$F=oq+Z1%zX#Y4eB5SRN+AY4_0^CoiB8$FhWvk5YSZyxlo(o8I7US3A zJV*`>oMtr>8+0x;@F_qup;6pSLkP z=T;qv8j)Ra^)hDFsDxJk>WC%9E+yW?C~b*K&cXEWoLn34{ZZ<7G|oG%4-K}}8GFqb zR0eB;rQP~5yXR2o+b6|0;yXL;w^fRGc>Lju>Q0m3+Hc~PHJ}n`S~3)Xnm$Q^NY_u# z9sy2{tS*g574XJ{3Vr<(aWc4Z!{ngnKA>{mm3Y}L2Sqis9C!Shin1JD536CzL`@NU zj!~rJhLm_rs6|vfzR2YwIiDn&cNT_5!~y=1&F+?JuNq)VuCHIq`9@oc-!4@d z3EIZTE)`^zmtov&otd6&_YdSj>0I)IwXBFPYiCcE@--RF`Tv7<;6MIfXeY2@%ElfA zuAX$|+YL!zoDZ>01Z^4!S2;TRC@d__Oc(+PRe@Npo!h6@Kr@1Ob&YBmXYb3MdIcHW z8;vW3Z0p`S0wzz}+NE&}^hV33k7N)yPCUoPJy#lbAm|m>`uo22{s;d%;N@D-}fh5|&#E21Qtj9*NjbZraA}r9OV_Zz(8qdG}f(BhZu-1>>8Vlyi zH6E~)5yn0Ff`MH*wB9euh=O%)UwQCNoTXdUHu*VEH922Z^8n>C3@eyK|2SMwiGmL0 zKod(d`C>DNdpVf2I_LnI`Lg~)^~6s9hw5S9s-1}i7iPe+uwX0SRH@9Q+oNvQTK1Ht z_tTemvXET&Q>XucDl=y=lpH5rlSj zWV9-wXKU3N$*$(F4TO&m($TBOBso;67?xM!8%;jPT9^*wt9!tJr5VNOrL9r<8ZxRl zDN_@Qnou6>`wt(~C|sf|pK=oDSV~1y-;b^bTid^W_Z^MM$PT1FGa=pApdurMFRD&; z`ZLC#q-C7B{3ff zP5fQ#rjC=8lNgX2@UjX$c=#FndK0&cc8dxXDsUPk0FZClVa!w7*aM0!ouRE$ttiB%@VAK!Nl%%6iT~7NxZ&Dq@mY329N0R+<3(|0 z3l~=Erbv##dIY6j#x4-%p(Wz2WK+Tj0b5fTO{y}FyI$_ z2`NqymJU@W`o@lV4IVnN7-1nW@5{9nDK=bXS98o9Ry-{szW3UmL)9iN6KN-*YXgWX z^%ku#kDA78M%({Eh(a|xmadp5P~F#0UJOEyA-5W&JK_*|em!nATi83wsZ18JU3A1& zIAVrY3xp*Y)vupj!;()#1%F*)K-&yfYt4k4Qi#*EGOVNp6*d&1U_=fE^GOKEA1}F3 zec|I9^+38P{8_qdc(jLJz$+V9eo0`KxUju0F`rWaSwMOkGGSVua|>fRY@j0WI8YeD zU3wX0IFPsXrnmOMYb@YxCsAC--;>|PN4e(dSinEBJ;hJZLv6Q1Z?-e|E~Bu*EVt5= zw#Jwv*g_f2)WVRXxl+6GJP*uN$&jC&g2ibBGwB|vHs2h#vZgJcv_yU>qR;9$ zor9LeMlAaP9eNnKOcFLw78SGds^!;vENv4!4|2i8AoQgwle&q${8O%bBs=lH0<^x^ zw6!vu;&nSS3T{Cl!wV9tKyZjT^H1-N#f*@kXa`e-qVEu|un(Q<6KRH^HWI@^V4Hk?h=^%QA`9q`Ry)nn}9*stKH`We{5sj6qNKw{Q zGLwsu95xvNN@U77`^e0q66x0N#smq-A=c2}zD*a*(D8gGc$gqMLTHXiT0(AW@L%FS zKiTKTxI~%o`p`Fkblx$&x<$o~MIM7Mz?yI4jcHIBaAZWGy zo3u2@t1dJ1#aNMM`FpFz(6PwxM`nfd&V~?s`^I*TZRJR7qGRP5dfL+;fN7(N+WLI6 zHaV4G(z;8+lGe@oa>u{H&)GVH?_op|%qvfW5T|Mzj3_iK6jx7K)7$I+^1+w1;}v3gk?#@-vu0`O~YXQ}l*>4_)A zYLBt=`XJL9a_2GH{Uw`!lklcukM2oYj|H(C?U%m`?{F;i|CeaPqquVo&~N;^7rQ@K z!UnJAO>Z`0Ha7GWDpXj#G#plQ_nEL)oL>i7(CAwAlX#o|K$b$IiHkmtG6+(tQ%%u3 zV7^zn;7?zk>E1Rpu_oG*|B`6q$Fg%q`f>;L@rug@9TKl zAs2KbiDXzRX-MbqscOE+TD@$>X+=2i0>|fwP_VUYp2KKIF6EUN)x627-~2=qL^7#) z{S1v|Gbw0@uc&>d0hemoApT46VW_mut;x~j(kvMwc4S?_-EshfMc|*+^$aZy1*j)O zK!KA7dEK5ib5s_xDwvs6r70QNpXogiK!_ZbhI+oM;z58bs>q&GUsiS%U5Qb^eBvj-@Qlv6_}uR(ePUgQ>jqzX_lD` zcV;W^?<3(ZaTt@>-dCgx$~L--10q!7z2xiE(`Y_)lurLda?`xh-KQxy^fiT|_NEtB=n4V{@mb zZ?)Cmohcn5tYrijDpTSRuW0I6t2ei${wbb=>|A1CM z*eH^o#6^*bwMawA%hOV$Z;9IpvA4t77X3dG?y;D<@L5*UTCZ@Fz$vY{&z!pNa-M2( zNaLzxeaaD7a;cq=#Cx<3C)t=^yW}gS78lj6L6{Ly0QarP3rMwbzx0P4n@B&Nf(U96 zZ#}c+W$!fBj?M99?-iD|cHHxh&%a!Ml`%l12rK|J5mMBXqfOR+_gmd1Io0i_E-czc zvlkddpCdzk(F5lZ`3X`A+Mc|@k0+l83ym?f*?T;0tqw!i;Ex4I1)Wn{sM6c*AFIm6&Da^w2mvsynzg49KVTS z@QdRd0$v2JIR^przLNC9aIy1cPIbvq(sx1Tx4-i-(4KnmbqA`xFFE2ocfS0(DR(IW zMv02{&i0aCMN|~Pp9B{%^>MqQ)mTZu$6OG;yg(QjZ}gX2Z<_ci11>SpjOS`;?ea zr(jr-2bDT)4~5IHOCW;@JrE$Lh)0@tK`04|9+B+dz;&mAN=n3$!<^6ch#V#w04?GZ zCr}qQNbLh_8b5>VL(_uzNSz<9gyLFCW;%xD7w6fXx1;BT3)li-VSazVc#r;LZYHuV z!8>3)cY$v}gPQ%;qxKhF7lJv{(3adO(CD;?JGxHUU^o5k`&-T+ME5df9cmaX0%8PV z*z9+VKfNSR1(p`&T+WP9L?<3w-na8MiU^y2>n23J%HaL?G2u?zL zV)~5zW3o0RS?Txq`58SP&^HbNt#Q61Gh~Yliy-aUO{viLcDI8#x^r5J`dp2!Qy@Roj?A2`~T>F|h5PsUw zZ_NdvB>QjZVCWM(dlc^WL4lIfdvoUZs~6ZaNy0Ou`A!%-lrfE2%(b<7FbOnB2>h^8 zG&K(2(E(Ben7^@c*lZes6|@dFssynN%=y#M03{Cu1I+K_VW#g47pL3^E^d`6)A5pg z@g0*)y()1|jp#Y39mBO&A|(H~LVvnfYfx0jRiJFmHGGRn1d{)HV?c1ELk{ungBAKz zRxDp~SBlg>=rx8)x-~7zR5(q|K zX3%WR9tg)*uD^eknFqXW$by}E#v>E)8(hK4?@aVvxT@waKC{S_sU_WY5XVH}p*o2n z>nl64ue=ZQHRTex&!1YvkKu78t0=Wue9uI8c8L_*Kp_^Km{d=+*zU_55r?7^!&&!W zsq$9sa1f8Cair*0eW?b7!)GV`6dKKCQDYx_h9F%9Lx8sT?>U#Pd>9*=-+vsE zR7~Hf+$`FU?<^p|`FrN|Y2ZFSkQs2n#%lyI66@R1eB^PEtvjzENbF+li}UrN)f2&_ z_kZ_rwhgH$g^-xWfddZgafs~Ej6(gxJAzzjCX4;yrOmnK*>L5kH558Yv{l@kvO;^) z`Fv{KFIHS^$7N>z{^N)oI0HGvF-Np#SEb8=Cc?~I1Pq_HLa0n3Up<8qseBlGyL2vl zJw>QBX2pU0>xX_hUqe`vRxX^4U|#7uaOH{eSXn5c-ltfMK8*hpb`_q*hS|J) z4B8h}rUy-yX#N)a^LfJw&*$R`k!vIwbcQgJyIjj;8}4|od>f8qi<26o$anxkzz`W) zH50|`d`{bQPVO(#Egq{@y(5wOt2b{S*LquFMLjZCMaI=gM4teQF(AL|SU$wieeS3@->sQ{X ziaqP#HhlO2di-xBsD5GFf%~BRHCRsqlu35Vg;BKj70~;A2_CQy!(`)8RbsP~JnpWk zN=yR0x{6^3?0A`t{dnYPkXJERX!58)%291bDAL=^&3r2Xx@C^xbnxM!jv4|y*?_nT zi9~>W!fb16dH}ahxX%XJo)MX8C6~fJ>NCnKs8dqrkJQX~cZT-7U~C0bI%|z>=}SL~ zB$#Ke2S8;%rQQJT&yCV1{(k~@R6C8|&W(M-3?^GizCq{g(2;G^e7cXk*>D{rU!0(# zH$D_PL_ju<7fh^?GyjPfU$etTJa13I>K#H%&YI%Y)Z-mQM?b2#Av}1;-9cwjP=UsS zXt^msW=bS>ipVBhgwO{ty~+o8^jrY_sVO^PQ4hkr@9i%vxVXJqm>EaKRz?uA!bMSl z>CI3n!--iq25*ki znYn!IsB{4DxH_%4_6Y=gXer@Z+$*m0`9C(G~VoB(7}GCqJ=4ZMoY#JqT?q16_-ay zz?*(tYPz{BsUW_`2K)pz#kQs{pqHpOiqfm^qg%7^nc!zUq6JIFF49gf;S=Iht@IEc z>r$4KMusdoI(G3yBP++E3>~lG8iBgDz^kZX^pew^6J4l+V^!TLs;?@(f#Ov;&#c2by2>nN z5-z+*itK?-R*HT zJ|uZ?NIZn6WaT!S=w=svG^qpzb}e>K94$8q!fa+*nG;Ha@GG^5BHn0zB3?Nhm+ z05$TToXbGw#9Fti*g)}Vtwi=kMzEf_|A(w|jE}78_V#4riEZ1qZD(TJwr$(CopkJp zZQI7g$(#GRpL0IE=Tq0(yL)%{Z&%e`*ZQwoWjBLYQe2)-@qV`R9`eI_tdwRZG)(>g z%7@Xe!u8khM;tp!9Iq&J_*}|WWbtCWIAL-XlK=-LVe%u)UoWg)JaxwCPIx&bMXav^ahcKr#og5iH{< zb@OY{-i@#DLSk%x<)LR4>Ergv8paQ!#=$om;b*Wq-OBx4j6h1;s4uPNV(HG+?>>Y- z0FiJ}IR~H&O1|FQp{ZWniIjDXRF~#BJu28Q=9Saqp7J0Si8rVXUOEW`!e&54CJ)Wr z5Qg!#3-TyJW}*P^MrL3^6{1K@TM10HmYa$@9&c<^c0RP9EEeIfJD=4eTsLF?~<8HA;4;R3w(@g*vlRZ|=6XFTV_ zo#O?h<(s<=E=?j`%WOR;apBPg@W1|{JvW&n=S zT<`+eTh55U(@^2{sjAD=!5oNJN2-=-S zlx2)F1ltm)Xn#LwXTu<5#%+>puhI!F9KN+s%tqTKZ&^3^~z1FlAhOy$II5=xD5p zb%-e}-UbrXuE^QdwhT%7T~wP)6wY*DVebx0ww)GAXT2O5reGqQ$qka5D=CI!S zu=)dKGV#C6(ir*=BfotF5GAUe>VKL03KeN`ILVb!0n;OW!C*@cw!aa0gLEFI+>(zmwl2* za}bgN&w5}!HT7=#I^+)VA|tG2-Qpp|h2Dxxj-Q}=j3~wK#{{v3H)uf@8Qg}#*i!QC zLA#$YWfmrMj5%KoawW#0ALzD&hEGMV@pRC!XJ8!*&pu|wI5_6wvKw$Mc&D2(;zf8t zcO}QUE|cD#m0J(v*4fpU4I)~joUZg`GRkb|nHX7asBJd>B?hn(w4OC~DNw17qd?bc zgffkaGO*ugOt}T7OmovMNU{v%&)`gA=FFxFKlbYKTdSs8a@@)n3{vIk82UXEuj~;4Qlia z>2eVs7!1sSFEQcjBRX!4ca0H4HDAl*V68bLW^+oH4+(c|7z;PZJMmj(3`Pci@p<}g zZ?;4~M)xmozapzmdGpjeN;T|DuVZYhzF{v*Xw;I%#2z*=m71!6#K#3OfZF|-X)#&2 z_CaO+fmlQinWSrA9>rpL7Df#54sqdnQT@l#r4;AmFjS|~`6WLUTt}^7Ul9fH0|<$R z-PtE{qcRV1_3|wxHM9ORDI}ubpyh~|D0B(a@|SAuu{YbEm83AE^Ah)mpl_LtRR|g8 zdbBEOfp5@OI(S!T`xH8mhMI2}lEmvvAj!j<*vUj=^s4Q}25Krb7;w0%apCxf+pW#;>vJ?cB<7@I1J@=+9%vT?=>w@g1 z_p@go)4saN$xkx2*0WpW<<43QI^B44d%&~V_H|nM1+wN#A1XZAaN%f)BaXVr?e?VW^vMi9Yo$MV+AA);?%vNH)AMQ@yiNvw zSh++bq=k{m#*YaU*P2pc#GQDbj0x?eMWTF3@p*xJJUv{em)v-b-eRkq>XsMON2g!r zh7=EWf2F|Yz29iRu42%1=(CAE^WHeC@X-^eW!Bwky4+hU!D{#Km1OR0O5GnC3LrmH zor93i65g;inr?q0;tVYf)<~Cm7nq^g#hLf29|p`-@oDf`qbk`HS5)QGIuML8ur1tV zSO`qfX*yAhHt24!7cH?cx8ln2W)`M3^t`*$kS_ah=FC_U!oqg50J-RDkGT5N9lp$4uYwH`sl1e8t95A!n zqi1Z0CtDCcL6??`>~PkKTtG}l^sC}L?A|k+Wou>S=oTc(*>30OZfkd163yW_uj`mY z(vN?<6~kn|Gxn(p`zRRR8S@vt8VFMBw#<$%(|wVL9ZzdfK13cZheO#V|6R#zT$9U= zMFYV^vp+gHOLkvMXsW-mF(7njrUC5kNlNh?um-C^A{B%O7bui~5?YQ;In#}jJ+tmb z0nD@@%1h>O-4%W^r5n^i$27*1mJ?OyYdK5;NZ1s%@M#f)8;}EjY9G2Ultxt`iOs$S zS8cOBn#+;73BS4s9mY2fATB#wj(Zl+w)E9HWqzGhENBMQ@#R_R#$5Jr#(x+tjWQtx zG@eIt?Z7beIg9+5{2_k~#!!GiYQqM8{k9Aa4qlVQ8$LX>@F1iR4g44h z_S>-Cmdprs%>JheJyNg9T%2Ce?kj{fprR^5ha(XV1xrP+4zwyh#-3OF zAB(}i-p!`UGaDi8;=YT;1_E-A1%ZmcQ$cz&hvz!Ir=ExGDF1NBlK2m_$@VkY4+E%S z^Y8RV9O+8N2JZ#PEpX?I*!(~1_2#;*tBf$1KEnz(Y-JQ5UPolM$k}Xk^n|Di2sp+` z@a%XpgBS4sX z9s8fEyHftX$E!{;-QM?`x;{VhQMie9tEl!O5&9%q+W9^d->L?e2YYN}Y{QfZqujD$PW*EP>Zv}ry;__S(Lp$~5c$`qRW^8ptCXeYXRizsDI zc+=s@Lo+$q0b$`xx-3gWH0V6}s4n(Iv-K6$VY7D2)ioWN9A%8IITySJZfaDb=Kc5s zce1EXk=3L-Q4kv?CDg}iTF6}!1jSh(QkU{Vyo1wl6_wgALPo5#zf@PsRdv9x-PG_H z*NYg80r#L7nT56NzK@b#q_xv;X}KM*>5uZXOi#V5>Ot|>A>c@9)d25=>bNIogjRTO zn#)59Vf?Wv&nYf89t$ZsOx`rC(>bzT!)0N7$z9FcQ{oY`ZVid1+3Rb#RNb`h{33OZ z>p6rSxrvz!MeebmRiQ1V69ALF24fu_p~+BBfCG#+7E9o@@w~BbgJT>D`A5F6Db2Q0 z@Gnd0iIde2GPLc;C}&07Yuz4EoCr=F27&AtMI{+!MchK!P+cSfGwFjTQR**OTIp-# zjQ%NvHGof-62uyphVe{K&i%^QsyPgon2wko=)o6J=Kf5lH(AdP&D;KU^&Q_h&!yQ?XfPwL-sW;T zYB|+)?{kUwmoC86=$y7BcL>iQDr*Jl`*Xs3g zx25xwh&h3i+xa^LH1L(=Ax1~xqY1O?ThMU;a)JIXtWb!5Cnt~R*XhY3Rh<#d&d8K< zY$yn!pnwBKjMlKQ;)iWs+Gee^X|uG8Xwp*3=>ia_xq9G}wES**1gmU{ zX-;6q0;_3qk~~7juSI|_5_cM{&kkF4MpCHRb>prHtJ54My~ss(GnY`r2zSn6ncW6o zE-1YQAkWKD+Bjp!d^dkLU6LvI2Hr`Dm?;i@BAu*vJGzyTVN5hY+?!qA_^S`?y1%-21i#z~0{(|1Gr^5E|nnHbk`Rimc2~_V&FBcg9%x=dIwG zC+l}@D;j<^8n0o@+w4*x1441cw=H{#q|(_`QZ-YRa-sP&rJdj*Aj+>TM&7MU7q1pq zIj)92{$p+*iulNVitJPWI$d_@UoOrC&7qyya;M;VE z^^toGVk7HApmc*&JtM(@8dD{}$-0JgPP|~gMYGQY9L2Nghrot^lZps|mr+qr-L(zW z7^-CcnOeB9@3g==xTYXp=kH;28yo*XPtmK^bIu$=OlVi0Y4^Q=QicpH(x2uf^60kK zob2bFMHT`PzZ`p~aQC=s6XWnPlF;gZca=N0Jv5x|%Pf=VQOLuM^Q?>?% zeD?5tJ%T8PaUW{|9H&sa4DWD^P)FqCH&@oxs+T4PxmawN9#YV!V@d|6FZI`;1@4Rz zH_fXb)XXN2b2JlE3Zd~TY%9WC1(-VPG~0S!HPi35gR9Hb%vZoOwa|KaeILbaUV}rqm54xL zAtUbKCXtRgm3JnnR;|V6pAlnnvYPWwceDE{7>`WBbGc`FIY?g{0RgbJ58&l)aP@&u zm=%d{0CMP7L^gzkHte@E?r9>P8 zOC4%22}ul^u!QE&T}ReC+~s`9c@nxuYtxTk;851_w7=I3FYKin@0}G!7Twb^Ywl2D z!JiMFsggd7&S7t(UMM>AKm@p0rodlVO7uq;d7(Te)yb+rpaR#{5G9qd_FfTyoxJ8? z74h*WjvN4iw;K5Y4x2gqXMj*k)k$no9-g)Pi|_J@Jr zpYS5VPK+@q;UAzFdHTuGpl8H4VZh9W9^Pyt;UC5m9;Kd^jXI-c`no(9q3^U}4m)6HAU=lZJp9s$`PPk;7iI3$QNt^U9ZKU9 z%Q-wOk(km4f4C1L)phk#^hy>~5?>Hkk5bU#(>5f z<_v1+dBmD02neTrARxoD$=hBK`hLbh_$a-Eu>dnCw+NsL*Icv^Be2~DmShM}KKqS$ z;#~#+4I{^*r$&h4xl8|YCCdPy*X+SE?=lE~rwan*~^#bszicR$u?rHI|%6ouoEx{~cHGsaKy%8iov zLK}*3B1DxR8FZJXfJ#lc;@_v+(8c|Iq6bw1-gM6RAe2c7N0X15-Bw_U<@ID^3(&(g zeS{oRr^Gj}x#iTwsDYzM=`{@ByN7!XYh>)W;!Ysm-&8Fjdp)TXH*A?w9s^PEIh`I( zJUXVlaWK5oP>Wkt=v0;QA+w^VG9IBZE*dRMcQYNC5coe6z}_~+&e&iVP9(f$@zJse|-Hh*6z5}3dVEH%Tt?? zCBu3#5!8_$#679Q06q>QAmz0tKp5$~gXj{hUnejvRX6|fy>5GV1w*^WG$F@3@4|v5 zf$3pAtrsKZr4Y&;(tocL-1v+B77QP!#IA)v-t1GudW%d^>#j};)ZJC8AW;Innu!PR z?Y$n~fzXf~B`K2IT#2N)nZ#SJJGiDpljPtqT_$8CoGRuCO*(|xYA{~++%S?WcGtzVNG`gwMU+1 zF=J~uk8?d!CDy9Jnp8mNf@Y+4*d!J0VS-xDj_?c+pcUAsloxfbL`nTeC zLFxbZa$D{HHdXY|kjH^PUvo-_!JnyQqY`_H-i5{n2+adkuQ3=mY?U+l=G3(^2Cf3> zGODNC_3NpioHRjnh%RU)*R7jt|LCc%7Oey8;JXB*WuVR-N<*Il#NKbRJE4LK!y;F5 z!k67v6UkW>4ryz$V)e4(Sq;)|SuaPA!t=k(Nn)HVz-feyVy{FNzaXLf!pD0B21}NMwE|K z5w(CgPhbSCjN1;`MR;=X&Xg2GibPvtmMU&ua72~pSHTbY=eF>V3}{UUGV!h=Xy$K^ z^!d>}Ocd(FdarP;*b(ET)jCv6aF*C?83V_k$!K@?-agYFn|Y9&u9O5FX#wY*1BX+r+#hqIa~pZLaQ(d*pXc8v{N& zc{RyWPeSu?aS=VT-5Yj9n>y}S$@dZ;wCs59YcfiRhNb?oD>yg~sBgO#@D#&ZVC3TWa8+$uB@jJ%X(SGl zXIK2oI=!+e$`g!&VG zf!l8G@h35;Vb;{IG{bnnfGz(bV8?AV-Y+A^_lV6bKpjEWKfeZvXb{^BJ54Q_f)QnR z21N$ZG~eJrrCECw@BR=MF{JtX$Djo%D^K|;!cr4{OVF3=?arnbLyp;-Uro5hpjYZy z6tIug7q|QS5R9r?cT^4Jj{)OhhPnKI5sDs|!Wh*8u{M7i?=z&HvFEFWczU8%bB*{% z)SX^*m)@7rZ2VPE%<&MJzV4N`vZS&>3T&p?kW)!a`#$8ebVd_Ii_FC_9FPTtiy*W~ z0QFXJkHYf--!J~XSA5y4Jt14>`!ec z4Yw0V(Im7}X4=>GiEytn>8U{m9qrG;P~Dmeu@Uz?kGgradg0@JL*_+ z(;#F@GFjTXDcr|OsuxPjm1RXc{?K@z+NFfCaS{yjcT`}UXW7e^sU{v*BPQyAYX8(m zr}0hjQQ+9|VxB4ZUq+xIWtnbI&X?NRpT@{tS02O!@q71MgCaa==QibDt@Ssc2BmI- z!oYniSqS8~YbqClf2;N=P~F`zxV;{_bX` zTWvkbs2Q=)z;jjO9Z;+WSmzpFIN_}WYXN6=RLbE5m)PBpxgt-~a^2Vv?i~NpFH8iP zA5E-xeWiKu3J%TY2t&4uxz)O{B#$zgrUk+|Pn4)Au`NI0`ke7jOXu-|YWDV6k$9!M z^Orr5TsMUqqg7hTHmMH)`qUl74qtO4U+$$HvcTrQmDYy!W{P78l-8+)&*~x;Ra?9^ zjHTsWWfl7PK&R>))7`D@u(HGbk=rM05}5X@u17kX?@xbOn}D5RpQhfwEdw(&I0*Mqqw#wb~zY55wrg%1ru?tJRutH$Lu^M%1 z-B(BTOtFH8U6Y|xgWfvu*k7b>=pJ-7tIsvGNdY&=Z74`{}8WLyi<*zKiWTDphQ`s(ms7hk|H^PLR zL4&x4K7~L@5KsXI3GmUGFn^Y?*x4=uwVRw^_a$0p&>P?{Y=(m#39WWBIr@a#)@S^p zZdnfdl|$z2Rv7^!L4=x@{opWn9fRt^IXj$L`JbS(lv5GhDETX0EaT-p*jyu)LG#S{ z!l?Wz^o~^bqb>XwRti;lLKN=PET&3U6K}(~Viey_PcCtK&dRAfXcFgzA}#XZL=A0r z12k7zVL$7WQLs7Ff~vw=xsU;Zi#~~|iec+5P18}-P|R%_NXkXMz5I{)5LA54f5u`c z4j{NNe6+ZCfFL?$sEk_EwFaw5nlCdQw<6C~YI@pZ1ri#Hjz9PNyY(^y$M;wd6Y{i& zhd_vTr4v??eCD-UY(HAPk%-%Qctt~TjJn(3+8sBQmp5&6&Yx4Q_(6yw#GO9cJ>A0E z_=)6&f_Q$W3!JXiLfQ{FqtWb)HuKO8Pjw?^=kP6b;uf+Lxqd&pW7+$tH6V8wFL>>+ ziI%5_3EjXiRM@Fa#(|h$CV2{!LM<=o5robeM}L^X#*@&;lf%u_-nuHdLeB+ z)(U5>pjxifL&tdyA)Vcz$oYG&(c$Z?C+04_NwpPC=qg zBt~ap2YCUxEAGC;;rs9Khpph5U&@@4Q*@!eF?4!7X_PyXB9^}Ll;iH=h--HwjD>%F zB+7*ve+V)X_>k46SshfWy^@w?QznuP+j7RJD{M!c69v;lrndFpAHmVqj0;nCN?K#- z4dygWSN5PCKNLuqO9~n=*~)@nP4@-hyAzYBSgCUHtk&;m8P6#t05ur;zmc4~T&3YHzM!|=u zbvTWvAp&-8Ja^@#>Mgt6Zu^%rtH?A|VkU~!b|4jmM^r3Bt`gL&LbebwATw+ZaA7T( z9;jp+G{PP%E~~a@vU9egT8v^$8rNAoo}}~L5#?!7i+*hmwos~;1x|lH36JCNhGY7P zTa2lRF(ZpH6zO{BmGg+sQ*IV)`15*^{KN>^wt7jw#vYEQ?y*>>oE+>k9qL5lP2br` z%Ksy{Q+_Mt(I(OYr{<&LabU%?8>IL0gva~joR7eD#FhlWb?~(aa1LQ@@y--n) zM-DZzDZhe3j^)6>fD8{O?W}ns?(vs;>{EbH#6UQGuZ168e_7cs(eDrw>KE1rMe}dW zoIpC1gH4)nSyFu`xXE->?f^1IlZMYTUw%@kuB)@Qu|(Ux%4-$Kciujj7Q1lg9S&jz zK@0(*%|pSG_XAC$=dJp4-GM~*q#Y&+x-(WHYH{oVim~WK%O(Ho14BL7P$tXBDLFiJ zfg2)O9Hd#kqY(>XwAw*3NW-#?#{ zYCRcXX1#y}$sOiJ2pb1Y<9Xd5+iBy;wrB_FEjGz5ah3NTg#g6q{tu7 zQ&PJV_W}Ukip*6Nkswb};6gf(;lN|D+NcB|``rkl97L5-mYajq^#;^mxw;B`^q}%N zKxN9&zL9m7dCo~Yg;A6diLJzaQWY%|Gvxrdq1WL~#mKEm5@EJB0my+LYpMZs+Bok4 zRz5$+_NxacTbg&2oCMuURCd^eQjfZ6hHXP$w}aF&rEXvtWEcf#{{)OM$f3gbVR+bH z35{*GIscfF|GKF=JxjzmP*sQ2o!)5OyjfhbsqRmmvFr~^f>E=ba+jL6K|6;z>@|77Xw9fypb=Jx$WR$_|u%S96xDrd=aV(%;|z zSdUq*9XFbZe}n7(dpXC)f1BewP#WH(PNm1@Z$L4UnYpz_M1CjsHin_Z*gx!ngtM%% z(<%vX$8WrEL|PVW2%&VX1$U7KP4FOS9wV&gJ_(EH zu7AdKgrmpQI`~oVB|@6kP#@FQAg>$!AI#Gf&yPl=7A=alx%7pb#Pig4;wV8p{X%I* zJuW%0pt)MoK@g6OsY^qj%l?IH8efog>CEEgp$25oc*(#m>VVt*59ozUyDbK-39>Wb zz=q>XyZ<12h{#L4pALg!Cis{1B+$cl57qOqXloE-_G{r~G1^}h;S-qjV^XLbDpe?L zWX&Tjotc$3wjaZ-O5r#bL(TejkqXNe6CyFswH88L zZBIDqI)2Z{e@0<)meeCvd&x=}6{Qe0v7T$f^aiCI^aRs(cj&ln@6=&#Lk{N4nr5E6 zIiDMtWk!PNgOSuiQHYOKav?*Q{Hr zhv1E`H+)fFD*mC>=AK&9**Wkh?NfU_n~iRwB?V#&v|ENC;0bse!xSy6l5?s9*Q;ef zEKq;b#dHn)^%Rh|%uGOZCo9TcAF6`oxFw?P4XP%nX=e7kwc%Q=MWyOuzf^nv6Bs~jRZ!Y)? ze_$ulE&`l6KLT+z8kCNGB;)1Lk>Iu`21AWB+ zTfxx=GhSdR#ZN9;Mnv`>vJoP}fNF-Y=2S}KV>l06*m^I8qFBUK3;&sU#leeq>MiVo3z}q zV8Wa5{qVAgslLlp0W#+U^0|mR`Au@QyqPat%u{+`>N54?Xf}cn?I%q)PiRpT(-$__ z-|(je$$TQktL!}pdKO!6mH~C$rvcn|m`1S%A_#@2)YRCFKDCi%LHlyUfSbtZLWRPn zsaN$AhulmvQ1|4l(*HVwIyH;NtJiH7CH*Kka-i3<3}f4}1K7(%f?Bi=Bp2X*4i7EM zk0#$@SaYuU7!xdw{H>jlGJLbSe4j{dw~kuhZNa(0V|CmcD{7zoGqPNj!8X5n2Q}`R z&T{~3?f)S@$;f|+Z(M#u7+z>MG98*p=|#JT=bXT@v?BCU!W{m*X=ef;O-rSwyxkl^ zNBnYgRDdq|b~pFH=ZG8Ey5Mw4>ALVErLv{NVR}(I{hRnO9;#7tzll#ieF7Wdd(HNe zP5zC5Ss}$ZZVt~~B27}7v~~1gIZV8CS&+w*j^vc({1f7cKmQePwNra^gBa#>ZwR*E zF6T{pcdCJ!MyqZ|aK9-O9NXw7bh@K=kQH9HjN~nhh6M`^GH*4{!OKCwWU=w{H}nN* zBN_4_BuI*=A!qp3ut#0&wo)0DfpSXFXLCy|VSCjK1WsoK{bE;er+sFL zhV1`)gFMs3tNh1ZN@Tk}lBVWR1w6OtixBT5sD?T9ZvpoQrLgatO>aHgF+tPEm#NXh%}b!}Cs)@HGi|BHQd%e%GR-`MAu=P&mk>|2n| z<{BYPM?>4tdS6=W1nYKfJyl#sIj|1VIzw22ZWvL~XO6W6t+VVaZR;g!C>ZXL5LVpH z|Er+6>wUk@d803WbE7bhIj*|R?RBKUygC>q;0#kBMF$b%i=-ScM@{ISb*eapHOOh9 zl55hTx$rIQ9p{>P|EdkHq@&g#YDzeJsU?GB>jAgvW1z+Ll2EIX$MMS9H=K_TY=QM+ zoG?}nnBF_WPG0}H!+B%QQ4h|6rP4NPO^65+?*o=D3&9L7Cp#@?ptBG*K z+KhkrIm1E!*Sh)OuWfL0jF#c3IkczzGrD*tR%oSL^U?7rMw8ex_7F^o%0`7h)t3uoo1>Xir6!O)^M{^TvgYrLgt z(})U={bsqP^?Cw9^K!k}l4KyQSwW84!0BZ3c4Rm9qS=Pt=)+37+NUCExy*2UN3S5biUrlR!-WmL97wtY<4(R&50bbz)&F!blc55@Cc$96IbML$~5pN6GkA=tj1_pq8-8TkTN1R zYtPT*sG6LqWgkr`C|b5ThK1R@yoE6bYGhXCUrWZasHO0&o=#Y>3A_Wq$-uFyMrjd( z9JVIK6@4R{wt%Q|Me%FyR}3d|KG6YZ`yUGL;_nbyq$^+cUs}3Puu)C4@MK5v5-r7M ztyJ2rdT5E|*+A)Q1T1{_&vI9fmr({yAMqQ0}cX)a4k5>I z=(d+)zoPsr!scl;Yp6{nbr zfP-+Xs!ocNfE!9ZgUN||R4!fKu?43>9>63=RM6dq=Eacv2xTnP-2wh2HOTaMkerKg z_GPS44ectGF1to;$Vz`7Agqy~iBRI0RZ7~po7K+?b_h#w{5hEhK?F^zR>4i~CrKl9 zWW#_+6eXJVM`YngWF(32z^c?CV*V^dfNf|R>8tkZ+bsAyel!Q{$Yqy(iGk06&wz4Q zE0H#8by^4RSbFTl-94q)mfl(M?ij<5ff9G3wPI?yTIEFP(N?Q;*(Y3c7CMHnqwhYj zFwcQYNys}#oX=Q+0Bti(W+s6wcEhVB%=x2%aeH(gs*xA)u`o_iEgArv( zsl-c!p#f>=Im*qdQf zh{m$WtYU&F)Qt89dtTR!l3|0*LjQt$izMVLAus161v#2v%!52yOd;ktH_XbJFK!4W zI!J~zfvMra#~~zR#m$DBSpSi~DV?C7l9q;&C^}UklxN8MA?+3YXhSV3qbN}DTm0;k z6>r!%j(H3G{NjsWo!?|b@Ymd4OIjLF40s0ksvpQ{@R$5wI7EuPw21ZBh9GUFKADtr zOKNg-;T#o9YS7|<&JL2_xQDcLVzMzHfmH8DZ9JQm%=R>>XL zi`V6wpjsv;YLJ`^B_C2Tn@vn$JA3HSMbIRBDYRZ;%h{Jb`fw@60B@Wvl!ze)OKj|ve_-RZJTN|NC9rjT5 z3)rT?nJ$nCjDbbdRPh(-Z!I{ZCam{CI!K~LR=u5$TiPBj>uIirTiT+GVeWMMo5pr* zfYZ&*u>GWXXoIchPESw#rfP<3S|W_W&U5#t7J=0?*VKPbMY=t?=$AiUap8ZTLA$-G z7HYt_Mg{rPgmM4Zq5OH;2IJmlqJv62g#OyNv*YI#SnF_SM}QH;ea+$KI&i*qG>0tc zDEyK3bVn=9SjXIVvn$Ni7A@s_GWqBDKL$<$jNu}_PU$fQ-p|ga7Bh)aBOra>tEjA? z5neQw!Bw!mwP)mTfxAGuUp0Tj)QQJ`9;65WNE6VCqXBcVhVfNa$Cm*O3<+>bA*v}u zcPPeguG^ayr0>e~xwDjG8M7~f`i(YB~D*U8~}RnfJX z*{XMv=AP4{Udm!013(IwuYwL7Sww5UyWMerluidy0uti9U*i^&)4$&I2zLW$^2703 zb`k!hAKwh5Hi7_$5Kn=04CYWg!Z8Bt1=s999_~5Oi`H|)#?rEVj-_78dIDq23(Yyf zOYU!2M;K!5GYm*T#?NWj@5Di6hU=dR*pcXenZe)WzK7_P{4ei9?U57#1EnKrT!LW? zbD|Io+d{}_5L+USK8d-Otg8PnK2ko~^tl~o&;HIWeD5d-4^lg0^Fbo;@C*?d&hWc5 z;15QY-1fNz@ndhsGphBnOv8q9{JW`WQ35}s{~l=b& zU*E}HDkH1~8U@eOS{`WXR}sdf!ik{5Hc5K4O8tTxbs&q(;J9qYz}Q zzT+8|4ho^MVX}!!YMNU89fe_XbB=wF5qFkrwc$p90Wl$?%@XIVC<;!37AJn0UT^dS z1le0ZQe_3gj`|(YeRU*>9-(UBQ(io*955JegFkq@6EA(8nv@J(OVamD$3X7t6I@yP zol^tZg#fB2tw-!cw7R64QBt)7+Ti5qD1a*c)dJ>tVw`cG8gV~UgjWMfaAG+PDR=WK zCL(3uO(4`$5R2?m{#TJwb5*LsApT3dDK)jLlOwUrw$v^)%~9<(CebP7um`sBBiET9 z`S0PafbWSX5#{mxJYJgM@W;WU77m(nK`dBrQ_@VI*80g3yQdJwXxstJt~jqbXIll! z^p;+{5jW|v{<%ZQlv`(TW!(m*=ipJi7J#-=+~#3Ub7e_%&bSQlulw(SInE)Qb0(Ue z!`hr9+Gqch#1T%yUta-C7`78Q9$cKNt z3bjMzNIP(it(OU8=)hfVEG?iM#7Hswc=iG6O%D3Bx{3e#{(-7TYnF3j4kCFkRrIP0 z1Ev9!eZZHeJpWO3XuegQ>ZMgth5p8siX3K-UsQi};+W%o(bA$Vsxf7jitZh4bu=^g znakLlY>Ej&A5EHuRaioch!qv5VnT(+$}|)ri%e}quWWu?|EoS7m?N*#o_PlG z`~Q!S19&RmcKk=kadzzL2q=>1>=0*sS}G!zyg%>PQ#n29GkKk{zGUGbWtR<00$TS9 ziLsRBY=hkh*r;loe`#^SVW>Q19@BrMmZKGA9NE&G?x3o(>FjH*FK&%8itBn>ojbQt z4={>LzFXxzwNV!(6SA^w%vjT3H&N<rc%`q-451?{zHfb!up24_gdM}~L__8IM(vTB-4{7gW_r=p%xKeZ^kguHZ7!@}R3 zMjq;Hs1+<(^-1Cgz+gR$R>=`BF{7rkqFi0)7H%6#!&L!b!8^7c5Le5SeCSv&pZmyb zfD+9&VXB{z50`wv?~$BtY-(*LKNkZ`XXqwq6oD57i>x@-0LZ#;bKzuin%V~#iRoJM zN*yy2NY04UekT*0tiZ!A3B`uhp>vBq@uUuUZciHTYG`^!pT1ptYY1$A8y)kQ9ZxUH zM+pIbu*aPjUees_f|{9?BGqlXA0YZXJ(6T6t^1LU^NqPNN44ozMCJGhtiLO~VIE$c zpKh8}*paHj%nGA+Ev1p*S;zy&w+~V)87JPgQpOkn&`fNDsfgO|Ze9iw5Bp7HT7y5t z#`#1JPjl+)(~;?Jf+vt2D5}cfZQ8wiwdkB3fvAC}7gjIKx7g&d6|=p9Rd$nA^!Q@% zac0Npl%KTe&yqRaJL#12N0R|&6^$E)_8g@AnRnFEhwkJtj4x{bSivZ*HnetgieJBR z_egpOt8|MEUrm@9lzzNL&yL#hR#V;8c{myOC?7ZUOJin8HQhDi+R&1GBEt1Ef%!w< zU%l^bj@}-2w4QJis3CTh$om>lfu3JA?aj5C_f61|9wHVw~*vx za*!i{fDi$z&lqbiU-d#;i+N4iwYd)yTAW1ZYf)o~@pe96h<=q16_!2BFRHBqKPG|J``?yh$ zmh6v!u1Sb&Ozu=^dAbxg*nSUm+9dR8=El~N=I7-!d2s10t?_qa+z1<^RNv0iUsL8@ z#YE1GnDDl3!}m|E-sIcaifUI!lO)~SBy23W`CqQ1dzu+<3TIvD>+3&{%v!RTwwU41 zBj`Y#WAQ^72ix+MZ^Bh586oxU1=BB0g$~~FK|5G-yr5vZrmXe;i?5XR-zDUpe!-== z!m^$~0AjA}MRkk6b1U{Xk7laH1P>5;BrMUjIUu5ev(BA7yikI6%kqxxYjh-n3~wU-&(Y!r;E7 z^yg)b)J(Q{7DgtavmhzlxwkNM*xDvW|JK$ReV$q(#hA9N(|{qWy>Jqyf%Y36|3k4B z<|-Y%sJ&(j>3Pz!RC>&uTVV7FLp01GGks~L`HaV8!;+IE%Gtibi6Xw;o!n1~9|6jp zIN$2b_ZrqV&aR5U+1hS&@{a?TM8(5l2YWWlDTSyS}!F{KrhZ~Y3yP`uo@DR1S@WfxtesU3AVj&s~hzxdGl=bbEl2(r2;)Ht;* zMwEa^3Qkn<|0C<1f-~!ay+6ssn%K5&+qRR5ZQHhO8xz~MZENBQo;+XPs;|z)Is0bs zTGeY`>|M21cdvi{`mz^(E;OCyr#)IV!px4|FJr`N{n5&)aXUNfNuxD1-pk5D_y=~VXg%hq&N zk=F}k3Q=P?T1GSBXl2`3M#B`*bfqibMgO$1o~)!{3~RXblJC*u+)ZTveiX~`$`1H% zwdU!^9IV1{yrc_mT(DwQYT}!#LQEi<7B5Y=K|<6!`}8F5re`9K01PdRNs@E;Y$sU%dK%T)CbMSWTbB{odk*(qZ-SQ*K z=FEa4*(8IkEY69X3a2B%+hK}7a*^|7b$I}W2rXSRCgMFa99({So@rQwGH(rM5bgkM zmXg{_55^DMxw6-c@jC1KUqQz^Fzd%iaTQ&wL;KK*$HI_jA6se0G(kH)XYiiu=E&gC zC+P4>p*XqtJNtyJx~OC)uUx-t&<@f>;=u-%lSAk7InC5n?#l*8)ioAqpRh|{8gY^s z1m6Q>Ukf)kl~CMixpRw~@x;orv&i#k|4jFD&Y>vy3Oy)(quC;m}FAqGI4yhlBucRZ?()S>b zLX4FDXL7h$SXwHhJ*`m{ehr6xo3e;vCD)QsuMhWTX|%CDXzV=LzYr=2s}MQjVQK1s z>WH*uM3RHlkm4Aoe2#Mi+DzUkx8M+hX{MTLj`T(M!ghBhJW48HB(7&v_|cITXm+j#} zmC*ZqtVC&H>F5yo3O%>)^HS&(8>+DHSRhD#R)A!Do9)0T$}KYFxSF$a8e+%6G1URr zAKcqS#gy^HQ7)+it)4NAIa|d#Fx7@cd5GS|y59p=|MyI9k#>aTm7)z?v5m6-M9<)< zYYVj7178=-tL&2#sY4Z2i7~;by+a-W##ah*AR4NC7(Ty~I2wj0{%wY|apYq+LW1ke zu7|w^U8XV1{YTx%%i~HLTT6ODD7s|KOD_uWm1^^ZmGYe71UW&JW6|XjjsctZNsHyPUCQSzcpy8Iw0R zos5Ht`3=cEIa#nYzq$sUuWy}0S_o&Hx8q}J$CJK>d@Gt#n9USB>PM^tNq4;L8S`iL zb^Erxl1fEXcP*WjO26>8i#u@*ZBz#y&m6BU`}=8t1}kOVpPUW);04)j{B=#ACnwni zzW2btiYzHcT-w-DL?S?O;fUK_Y;X``T2mQN{AgZYj8i)my&15>QcELHNumm+A`mPm zAt&w*s+0Y-ly5lW=~;BCVck!Xm7;ER8V;~Ao z68XvCRvxFzL6%O;sU-BHs2ssrOXDtxkGSKh_qiL^K;qq!voYOgUlTggpG?!qajh#}YE zaEodCd9Y?nd6=_My#6d*6sAyQKAgqx50k1D75kfY&Nh5H;x?JRx7nufR92fZKDC{1v#Eb{ZedEaKumc)Ig zATdN{&`&m5;s1RNnXRtP{~tw; z;j--;Pn!RXrKp2yjoqhm52B|P*)Y86ytkqq@-TPz2Vam|sm8HpGR0hb9%)yxK|}ps z&Cxw38N*VD=8~;F2X~Frg8XC9MR5w_j;M-Z0fDdFyVEIv|d@Z}?Ab z$D_HZeB_5iq@}p56@{7S-fU2&I&w`_mzYHLeomZn#6$p)O7t36a_9V8LN8-m>p3sa zsO;jxp1BP2q+t_C)L)h2eI0ftu-=zNdYGh;pZXTe#ZaosbkuE{TESHdba%#_t~JoB zb)x`osueZ1Y^F3F*OKs}f6X-Mjj>)pOqtRR`{-I2t#t$g zr&oMy2K~h7X4Ka0g+OM$jdtsAi}649uZa}c%*T_cPBui;x1HB`iQPy2THJjL#<)h(JgAho=;!Qw9q!#{kHN?nLMT#{eFOXmqIydJu0!<))ZmvuSC+6| z7srkj*-N!FBUtTQt#Uo+C3MX#3GN4(E6!l!UWzt+^(KjNU&*=%=S#No{%}hx6h@&GrPZJmzhziHI`35HjY%Db|NLAQ?oe6xFn#{=+}tDQ?6MzHP->c3%&m zj&_aHUYlnOdWVgoIoO-Hb;(8km)>{!_ujbeGcJmUM&AnV%Ya?=Sw?@?)4}h)u&t`P z{oXVW?lKvLzZ=_LA1yb%jo~7M0?w6QOZ%N#EMTEG0jTjEsug_<&r2eC!{W==cUOBn z%-wTx7O!;1bxQnq6QhIb+6o^+d0;Z&`W zo9U-@#qKY?kXa`>p*vn`)`ei}taBxDH2IqHuwP1hcO~{JQznXEbvTj}SEuSZc?@V$ zE+>_rO*Aj5+Vr34G#wgPXvZo)8*UlQ)z#K zSN-^tx8X})+oJ$*SK>b(s?pqUj5M>ocImF@RhQ5Swj*S-R=sa8o->)3hz`iln(20p zIuG0u9`A-Xx7wC#OySTS-osfL1EAQ6L`XbY`1hGmZ`NZofJIg=+uODH{fLO4-}4B= zWSS^2VNZyvlEo4c%-WBL5xP!s7N?v^tsYJ6eWS&M2BqaD?p&jq1AEs}V8S*ogt5-O zEn*}{y>}Fkl|1SXKbJs}SY7QoIhrA@jJfh&^E`9qI9)(P(wn@3{OEy~3l^I2Yg-A5 z<=kH*)vzv6XQUY^B|};hEx`2!6iyL{zCQot{&0D_h4KYOe7a>#E=L|AmHU@6Y%6-O z7ekZcL{+(49ktbb@>e^j3_8~Esuv6^MKY3D$cSWPoIOd4Rb11G5{%Srfj9vt!e-00 zdf~1}rq5pMa_4Tjtekad*}5b4Ten>bJ%L&(DoLHHe^{6GcKcTEG*@DYBRiuJ+>v#+ z#e_#xwdrN^o;{;ro3J42N-4sbr&!iUsQ#oqG=Ng^6jsk97tr%Zdki`O-dBX#mL%rO z?eqSpM+^K&gWB%(y$?wu2DG|U;kap>40vA|6CxQ*neTeIUDuH6>Uvjhp|7)h6vf2j zZTHpfCrFQ%tJIQ4JsjoxR!8ZvENY*30MOUHMwL4L%(PkjQDem85$aXB4zN+`hUB zsjx#~Xf@aa5!J1tHx=I}k@SQ6(Cn1GSaHl~NruKW$wtf1@Qqj~5>Sc{W4|ROpFRKX zVhu}3{rN&=Gtpbu-)8wsiTzB|7npK?1=<^?_OL^nC$t0-VuDF+cgO}2P#6m&87O_KY}tuZmcb3O_$`ba1i{(aIY3O`2LaC< zin*3MYfxhoaCO%S*#Ol-URe$s+}cqGq2dCteMM|3lo&@!8Wbmv+oefNw7cS<1Gn7Q zpY-8riA5ZO2WLK5_*(>Z^-K?yAcy#Z`i;df6iTK_iYnJWjvozTd1nCB5Sd%amVFES zMMpC#C3FAc5I=kahBAmy{C8|qPb<=0TuFU#Dt!&xYVj1#8h$Y_xsO;#hN_bD6nXz5 zEaD`5^^bzA#_PE)#+lWpmdk8BiBJaNVQR|DE7{Q8)r1)CPo7h!rUU8X8tQtsCa&p9 z)3Q=tj+d#fVATcq{+7#5&-mqT{Liw@)RvW*BraOEqKM@6*)&U$BEwqoi9DEg6Sop4 zV=iKxq=Ce;w?s?g>-RGw(~%cVX0%O~f1Wzz^HcLV+vW_xK3sbNYu8;VemTw`qJMCK z7cdkSvJ%G0gJFezpQd*erlP7G{f6YGrOG_Cj|<*e=E)0xtTm?1|FvWr6$+Mrd@=Z6 zoE-^>c4f$|Xo`p;TVl2C;A+8uq0)?5{CNV)2_r*@ejeN95Is#QUh`iNtuf^G<`~)yGBspnJl!4n6__4A+JUTc7TlBAnOJNU|$@X+N z3gA@dK8khGMOvqAlVyTJdeIkA-bymFiUp)dS%#%&4N4tVMnwfoZk+ zYU9m0T6tnhD1MGtA+W5kpQJ90)miioA(caAC+g}; zqRFOQ7qg!w3!fc`XWaek$zaupNOm}k&(+98ZF0H-R;VpnKHRKBDWA|Av;&2$M$xiS z0lWhu8`gZ7iK(aei?^*8*Of`fOumg#IPux(wqIKt3(3km!DP9a7UD zWaJBm2~C#Q18_NxL@FWe>>E5w9C^2o95TAHM5eXwkslT&jRMI2`wNtpZtr;uoX8buToa5nhf z1CbRBoabaaf!}IqsbGwxn!hWdvuT>TJ?AN2U1(ibSfJ=n*H>=@r>4$ zU4q__d?yP_%&C~q)Iyxg9wbHM9J?jKuZ;AkNT){*t3P?9<> zATAk)7hGMJ7pPT4`{kW>n4wbA$gNljW^4@9P>_>x+mwTH7F58F5T6Vq zpZ7|v8R{)f5QXX?E1717JKQ}R#yg1xeK8r*@C}^I^>sz4;#f*Ckx`KT1eigxhD8h+ zHsYWl(ty(MDHit)@W;sqni=TLuXSaiu&12}QD5cI(@AUK#P37}(uL-i$@J@jG*ToW;aWuOOH&AXdt_yFGM=lu)eeOeb zFVK-SC3;tHd8S#f`%;IgHF$PBb}zQp+~}uwO>B28R99IL%U>^DV5rYc*!LW2CF~+#o{zDXWHNlLg;#b4SXvAr&$6}dj8CAd{(B@W5 z6eR-3pSC(SuzyZC5NAIZd#cXB6nJsTpG#K1iDNCc2h_lNsn&s?;J5ePPiI^rAko{r zoI)W;BnAIXH9sZTKd+K3tmYvIcsGSxP!8-+!zvP&CK**m*%f7|&)NL?D!!QYe!uHt znC9Wm7{U8E%2U5CtW&BErjIcG@r_)<)Y5lkJ&nBQ)2@b@&TbZK?)}qjeFkAQ*6F+_ zCE9tMCM~vcPCDRnh{8fR6S^^=ee@>;b{5^-oDR%~7o^!}FM?bmx(8*{Woda_#f|UF z&u{w*@N#i@vp22$eqm z7<^RgwrI)Pd9M0br7zJD-fTjbsdE>4{c!rlW?_B%?}dLFk5TQYkP*!yCpA;9`U~14 zff_MYD7G9KzM%w3Gm|kX%iKztkfrA@^mzfJZgWCaT_L-4E;ldhU~_$)zqiKLWE)#6 z+Fci}+urfsNMQ`h1d=I?jgM%NAH8XCa_OEpCLnJW3PL+V28A%U`28qQu3wrV1v%Ah*rMcPD;8(Np z*GA({cKJp=clDxJ@_$i;nb6irdEDryyf`CHlV@Vl)Sl#RzuL9dmzj1J%LC{hJ}AOw z|FLDlMF`gK{aH8|I1t*Jue=)C7AQ1D&=m1nfu|~Vl0DQ$WZgywp->ozw+XmOMG`J zdrI~hzKJUlLKHTFzJZWJ$RS;2pdyJB%L*pWmb9+x=pC`=<7uG(6BKYtaSo}(Y;YF3 zs4;i|tUpO`mRNVnCT<%wv>z0Fa+LOO=|t`H+mYy^=SJYoRbkz?vcYGTFXuq;sV4zg zK9Y^l_~OsLLdW-l{2JHSkQw;0tJq4gBe`S?P_d#|!BS2d_HL*lnSLtLJ|AbVQs=MZ z4>E7baMAi|e>b-zF4XeFzCfEs2|3pwXD3->94L@50=qZ;SwyQ<3iq4!6s2y&06=8- zm(@M~&8!Dh+)|(eJ=U_u)a;+bDQZx&N|vk6JU^gOA^gVxJbR*co{KIs^bedtvX9>6 zvK(e>jHX0*m|o`L!~@#V9sI9JVnawhf=$npyHcz zHGFNLb=DrCb(v!rio(CymL}a%&pZM?61fe$c)ZZ5)&F~(74YH)1q7BQJ5_Rztj{c- zE21ZF-D=7u5qu7W{80Mn7yLDKX^96P6#3Q8e@$rz^l1i)3?%F0od0W^?!4d2QT#}F%Tq83<+uUjcw3h^we*H0=mEV z2Kx7nh*$N&(6zujWE!0q*?8?G7{g&lBqhQ>K^X4U+4oTi%iKR32hA9=^=nDDy9_vw;D0fH`6H@?xuihTti`{RO)&w8$vEpT z^Y|zVR5d0WY|tGdwB(h|MHpPc zY&Bo|>dtR#ZM%n2k>BXNL*-A&aNb!Ib7c9?b;I;GzP}3&2YIH8d_`=AwJF%blpROZ zh+GCyGt6W0tl_-}hcK2*GnZLE{kFu$5E(ADBDM%Ewsd%nE@VNO%)uf~#T=LK$7$}f zJmTl(1f$`)ME17L$1_$~ZY+hHbvdhnxTI+&+y|NK3iZWt)s;PvYqXcz0}pK6Ud_o~)d zqqrDbNkYG&gn|dFyYal&MsqUmTvim4MaWdROnmas&IIko6qjL`=E=ocGj`~8$r{)S zzBVqyqmy#%Cw!_4>(D7fzmC+gn6EKyWPeJA(a*E9B{+Be->@}uv#n5OG!da}C6((_ zo~(gsEhVL0s_GVWamI8>S*2_jMaDRavJ_di7Io+6-OrRvXZsMp^P8BERJn+Ts14t% z2XxL3f`2epBS}iCOJOBGd}C}b%0w0a+Bu_7@t5QgC9Bflad;AW-~g<8q-1y+m_g)K z1{_(%q2ubFI2J`YN4%(HYbS(*QlrEPo&V}?UKG80scX;9=S*d$$2?t9F(=DXTW5kL z<`16}yi?GrWhd)y$BVHTulcl&QM`4KFyiwh!ppdbB$c4LmPQX17Olx}ek+IAuz|QC9S+>-JV^ zWlthmBkep-$=uOuDwsfCxIPhw^+oaFamprVEuzjG1f^LX=M^Q@c!0SWA7u`+QLO%A zOvWuuL72^!(^i#q@?B4Mp4APyQ7&>z6Yr|?OU!^l1`%l@6-<<>Qo}eG6p_TFJQM#j zT19-4F(gTf*LQaVQlv&AW*N5nbWTOMSox*Hem+Q;6r= z>xV=8vwZnE`Yrv4VyW9Dr$3XqzA?ER$750EOB8&XF(#2P>jeFxh9a;0GR&{+wd-3H z5BX1Hq@48MWeJN>nNo;l!>Con!JhrkvUaKccPPBf6JW};0~*Is$G@IagMNI2mpvBg zCsAmCPq{EsnZ(3s!&wt8VMJhgmt<6_KUmUnSO~Q9>2WUle#>{z4T!;fBxd#6d%&;CNJTDH&3EnhjB zAZ6iqlxm5Xe@$i0DRTn8KL=3ytlt%>sA(!t4&AdMMKPwz>g;D*2a})UW@t;iAQhV1>%TeZt4GY-BZnsM=8Iyx9H@H`3p0Rs?ikKQ|w z7aI2YLbJaK1Ld(seUekLL@^ND4oNcy7p~2UKOYCO30U<)>|xNMKcsAAaZKG1`#@bm z<*pZz|JFq_Uu9)~h*vG4A|AuBpm@K(EpHjRMZJOCMByJW1Y14%amkOD#07??S*{IEzfY9PGjX68vhuh6(=pTx;^KW)a*i(FuP&XMrR%Nocm~f4wf0{ zzPnF)Q_A3Q;kL?3x&sn%iR3Ob&7_umh}-vvnq|G>BpE>#v3Hwpv46CF#yV1!=?zz{!F+%cqlm*^jR zc&}S=N~r<79eeXs(Vba8ubl%ck{XUIW#QeeTCT4?&$o_HC5#Ut7R6WjVi39@Ej0ET zj2UjO0r}_=MjlpbSlQ4Z-2=z$#Ffl!zsW6y8_9LKDBAQ~bo`s~{sx-W7l4+lP^hnW zA*$D+UoRB{0NL5u^kGD99hf&1r|2EPgYOR6T6cP94c>o6s-H8-MA6mFdmL?rL7PqO zS)B(-ey0jd&c_x+H6^OIhh0LzE=ILHNI+&%4;+n}43~aF%(6mma@`g#?IOJ2x4Umz zxB2n(e7-H6$vkb{kBr=JoLqF_zqo6i;tT73Jv7vc3Y7O3kDOn zRL>io=TDIhpZToSTo~L()o9>FDFSo@iCB01`9iDner1zj!RG(h(x2sy#(1bUX1;Q2*G##1|@Vmt#hH# zHFi>BwKYs&piSbm@pyLCA!DVIkQXkGqrUx`Fsz>h`qf8e^OL#Kp!nvR@pDW$tp}WA zQbF{ruSw@Y0jva9T;{}75Z#QU^`@PFj+)97pQ~5n5o|2&zDpGq4X-*MLi=8j{p{Q= zT%Y!$724C?YYKpn_WJ%Rr9gZAKF=~>{DOXgusQ;f2!rC?=Zyi6`ol%e;Km;!vO_4m ze1iN>IA&6)BQ)%X!_d__ORXASt{nkS>qkw?kuiL|wZ-RXjB{X;2CFMM_qf}J*L~3m zaBG1JrQ%aIGOMi%U?p4k`@QUkwoWvS@KRJI|7j>mMp$)0zLEz<#uljZ<{gxeBU~wZK!aPC(Rlw^`j? zjxMnPeC*vGGj1|fw_MRFL5*KsBDl@l$&!S+)s4GA-gE<>EFo_&ds~CuP^i&1-|qhz zNdSSs=H|9=ZvW5U5P&;>_i0#-ULk>`pcTP{f41b5IM3g^K=U_1s&YcX*3ZuzfxrD| z#PT+k&nj~{%W&1h+(m;TDtlE(!^A7(3t+$8L#*;NMo>#kM4>PvBuQ7}Ezq?M?{_QD zM*||CUiU1K>a}>cP%p^xG#5jo+*3tBLF*>4huA|NH-DAZHJ=HLGp0S{@s-#a81j>N zgaAYsOCRJbz0NnARmu>PqyL>H_njg$xI-YI2by^`-xcHn<9qD&>~SQ}xA(kYXm9uv z7tzVyHpf`(K1e?beQN0<-;)0!?gj(tO@X{R^|qI;pulWeln|~_DBRE`${A1=hz?~L!&5v^Cfl|0~aKw zIZRfQ{ll5`a<7R`&(?d#%8+2CFeymO=}&2v8iTjnq{kw^bv8th@*DbPFDHK#zhtnC zTmj84oc*XyvBv^3f(JjggtBAHN3m-M{+coCyLhC?#{_RbiD<75hUnoct_j(ldMj54 zgd}B!GH+~#E^Nt3${S`;qISQjXWLFNDsxIPZ}XhgtzHZg(XP7Xoi8J$_%5CourIQv z7dFslEqS^<8&oU_bZ0;kN$T?CNpo-;$-9vG4MmZr(Buj^% zY;^QR18a2Y^Xdm%Fof0K zx^)(q?7Ost@9Zm;sa1Gxdnx6f0m@|if0qW~$1&;#_0B*G#sd6--`&EufbIl0z}H7! z)(?U9TVsB5rgyI2XHpJH)T;?ZDjo0^3@NINvSh4)aBrivH?G$6fDb@P`4+Cx-&WAa%R>Jr{ZU+RBwKBi$T{<21G8xd+{rX03&$PsjZkMYyY zbyhN*lfUJP2=@FOd0g%|07ia=O*`{>-$>J%8nd^*0|1 zi{L0FK%K;y|EDM&Ju`0`RrhOzpIik!YSf364p=bHyROG$dF4%DE$W&@QA|{~1QS25 zkF>E09}~9TYVBit-g-;9!%<|(c`6zaCdpoUhd2=VRQhqLnM-!!WI7pz34S+K6QAw+ zdDnuMZo6*1ab_obQf5=f++vPKUWlhL*=UHw< z!6~wlaTJ8xn4dduMAn0ou=`+Imbm+tib?%`>w<)5g+)YSJk)v?+~;ax$zeO&UL-LK znp(9YD{FJ|DtoalM5JOnTkibRQTWbV7(ApmxtLQXxr?$3#>9tJ$p=TfU-Xzb6ng+i4m}5AS6dXz~2o~n%?iqW*3H*XT2s0CxjC# zIes7cHzeHqqXMErm7!q100lI7GH)$8?GTz$+mM_Vc2VDLI}i7-Z$bbfE|ejdCm5+X zA$(Nv;z4I^xdKCGlzE*KmVUMD1DGc@EdZquML68F`TogLB)MplH59zsxLyF3Wj6oj zjREkDh$w!1N(a7w#+T;{*mGCp3jKNyF>)*XPNdc0wBYR8&iP->0$JWF?azNGIs@I! z`#iq-`rQ9|eEAd1iEsfWCd6%+Wb=oq@ft}bB$))ky=;?8+IFFM$-}LBPF~01c9auU znX^q!kn8I#X!NmW-F)1tumT+X2SK?e@RP`0=4^3e!L=gTf|Gr~K!iHx!?~A`Ma^O5 z{%8uOMK3laajU1HEp88AgcycXe^pji1oKjeXhgOU@z-10kwe{8io%g^eSnRPo2vzW zw@#=e63W=i{WU)_A@%5a91y3QH8*@Di^$+<8uz2hDVY70!wyV{xbuQEqbz-h!!64>6lNNS|*3fvkT_PtAMxeD-{hrpWX+cfB z{FX!Ml_YrbB;12b$r=@c8lvHFSRV?*Zj(A;?9#t*X;S6i z&Zs`(RYi@^+5%%B&#^s%lB7Ep+gc6H#jL#5n==b}!nsH?rHH3sZ{K<;Q*q^^W=7e^ z22vz-5vtNTOTp1$36)cn6k09r$)DHSrYiGU2&-w2IS-9z656{7al2;$F0byq@T>HF zJ1>=qK*6G3x$AJ?s^Hfa|N6J;oNIlrx@`uOq8V*>SAia=ksta~~cO|VcpdrCsK@JVyH?Toa$}E-)+PsNBs6>t7sqKLD zX-OpT+?ot>smpEAU((82Lb6_kbzCRjB6=mRm-NhRdQU-B`&+B47D4!9n+}9(ND(9T zFW-nw*42*1Lum80(M`e+IRtM-;!7<+?r%wOOVTQ7rDlZERdIF9^8=*!+y%tCPP9hD z=vd`JnpK749_QSSf2!RJLa{fsekg{^oP4~(vmf&&61{?Rb8`my)uQMP_$0HZ%M{dk z9UMmip)P<^6s0mQPTlg(B@)}3scx6ua7tjeQKP(y%qgj;2P#S&XX81hjNk4I-GPJ*KwAPEfl2?@dtTJHIqtA% z&gi5RccQ!`=6ewo@=uDMU>JcptY%t4@vle<(NyucCesqJWqVV%`pxWS0GV?3gcB(l z;!mnFFN(tazq3T?$i$h4pdO!umX)ZmB0;c{<&u7M)D zFt;bmHX1xYB`}97Zc(QL`hK$qj|f-H34z64Zz7^eogq6St4*aL2MsJ|8j~%Lx#bC? zYl9YdYSeoODLw8DqIgyZE?o;zC70}o#gMJ0cKB^WV7id{=M)7i>;)tWl#tj|n1|=o zsj2VxCb6S?V#vXDB8tqSORLovD%SU+mb27it!@X+`+TM0|6KEk^yu#BYOkIXzx`&! zfU7yIR4_wlwX7u)UAz_*+TWxSlid`vQfT>Oq6z%9lxt3}0O6751e0sTd3RmcVv7 ze6@N1%>bV1=Rq0*mA1y?4cp?NlXwDj%@g2MDBe+8f2K&=;(@sZWE?dwkz&;PK51+- zu?k)3)1DEvTb3&fK4}1C{CSL>+8Fnq>ObF>GhMMwTQYG)I|?8Km1ht$ryt8ou)6eg zUXqt@bHf^=_t7GFZAX0Fz3+q;GMLD-}i}>Hu8T;u3@oAe#q|Angx~zo(QDj zx|hE3cS!H!Br{Rry7DDQG|zR=w+w}S+H`v+vv!N$X`QkdWaKQ@Q@f4{@KQTcR&|Bt zwWFcYm-~#f>btpjsnDwVE@-(Ks%o@{N>$+%P9B|;_&jH+Vfh^I!{+mqNh&=treo~7WvX;w^vDYe7zGV ze{lGd6i3gmScvG%Yz^&cULKSd%pqIn;E{E0Gs=Tbz3p!o`qM6#8_G8(V{C^C;T}`I zq(vk+HS$;c*-11k={YBJg+?ntnT@Uug!oVuvRS)oeh@Cd6{1%cT4%BPURkNeDrjWRB#>E- z$5ZrN^!<`DM}~c`LR;?M262%SQSVwVa;b4+D|heG;%j*v$i07+n+Lo_Kxl+|-G ze*pUO{u2Lc3-LrcnjhO<+ZdR_Oem94VTO0t$KKXeqaG#JzkM?}FV61LwOsYD+mb(x zzMbYiW-}iSmk3iqH^QjKt84I`SQ}jFGACZ(MnRUxp2i@D`d~1&dFt8y)_O`pCaFaU?v9Am}SB>(- zriWf+D{q{P%QNm=%{ARsCQB6{%beuOOv3!&9L09^GOJ?yV1}y?&L!5Is=!mayM!ob zWs`#CK1a#81b!=Xsrpo5J+Me_GU)B6jy23zbDvfxxVcuUbkC-y+T#_TRY-u<8-2O| z3}}D^*H4cRK*I(gC2()-@yD_MkAt@{Njp%dDd?6!+*@Gav{Fay`gCPB`U1#qA$ITdvXBj2LnFE-I1H+D zD~?*60Q5`dRkFY0*M1~9*MiG?;-DWPoROf{NXI@`gl8IOr@@2JhvLnIngzdDaK}BL zOLIVjT}v%~){4Aoz7P>%Ow_6jlnwKzO4Wu<+Mvx-t%M`qhrleaR(QQ!3a5o8Cq#JQ zwYhRLy9=q3Nc};EeP!j_|IsbNiwxZz=EgN^IuJy(FdzArF&{;xqE&#jYm0Jdmf?<7 zSF8a$3x-#fdYzZupXJ%b9NAcekG>avSz}voj(bs>crT@@p9n~AF|NV za_puSW3}&1Soqx?0Qy)O4(15=QhVIZHIV!WR57`>_$J5GvM%8vnY9!hWa8og z(Y9t}>a0nBwg-Rg_78M!!5siFxTnYGv;6A_0Q~U85BSWN5i^%WkQa}P@NQ7KlBBeV zXi-BfX39-Q6w49Bj+lZ*5(O&rbRS!a&{l*S6>Zy;{K0R+l#65!%)G%4ie~gbRWt37 zSqr=*%0HzaCaRXI)3+hMhv~_&@Dv59^I(V5chZkXsd*6` zBsRm1Pi1~!>i3cL+PdtMoEL~VCndDS{>*3&M_+8Xy0^G98FR^pAzGLgnl0GN=N`{Y zqB??o^Zw{cUlx)FL5Jk>2Ba@vWI(L^eVDm9$@+M`nLLF6+~_S8e2!%*$8&^w^Q+#*g3b4ph60Xw7)w2+r?2OsQ}rA$&Z<$XS-th}le(!1{adc-8p#lV>Nq!#D{V>>6LBXD5ZxdM83mk3hBR&4u zIEC2S+G8VsR8^QaM}Qtv^%VTZ&^%3yeU2F=lrxhFN=$GDS0Ua!O>i7S7ZHUB2Jofp zp$K%~jY1#StLgnwONgg~Y^fg?CPfrv-XS#{gdu;$ep46;?@;+}?L9C%Ain_oxc>t7 z@ct6~n(FkYiCQvCCUZj($;48Lbgbx|zmJ{Vo^3KsC~i@%jHdRLW{wwoIAeyq(^b)X z;(aViAI4WMJaQ=TDIsG$ZC`T&;o#^v=;3bz`(;aZZuNnRJ5DT#Ya3ZFb!>{pu6D6O zOPZBS882*QqF>e>EN4^la>s&nHFO5{hDRsht+AHzQTeksY6A+)irw10b!?W>mYIudPt^pS^jt>A~t^> zxjjAaW^<}PhW%9>uqHmMDAhX9LCkUlCpW(~=hbT3iY!O|1s+%O@30*B84cWZCp!b7 zZDF$mJEp_Sm!CAWmLXV20&ArZDqPMrz=C8r<6}Tgj@)QAk?b?V8wN(zl)WOye0GQ8TZ~ zRsm+vQ;FzW>C2n40d>6zx?StCD9_e((EDSYhos+rTVx6CUq~3vfiF-`!^vly+6h+O zya%i1BjK$9gqcJsH+W(RiR#BavriD%dlX1ACbYI(1SimM{Apw`gl~oj`5EFZqKSe7 zvp+)*Z&|uuppg=XNRz^{EWZ@I`5H=5tt50@rJ(XzVufxKx)WVGErb?VH05%rN0h%> zEP!rHJC7=p(w_XE7_`c!@Gu^MG?J_j6fztSy_ZDrkHGx32q&cK_IOfqT?44)D-{}f z7*#fk3fR|ZWjm_h>IP4eV_EFJ!;a_8mO-2=FA)&d)JmA& zxP8Rxs>1-X_7F}vKH|DA+@MSXW>ME|3GGFRQAt$Oi87LPNR)LMgNF!!kaSr^JIswXHmAD5wgGy?*+at{app{(*7KQHG&vF0BH#BG}A?SGxk2UbJWm6le zD&(J55)Z+M&VA6D za_@Jvc?~>{5#^|9gR1^4h}Y%&d=eB}2q>({PyI~CP&Q+N58)xdpEJ4t`Q4+=lpHjw zgbuQ!!*?YK0Y(D>W=A-;6i)0yFKUuIvmej)}4f#8{&lip!Y_2aBy@ zAkuBIF7GbxYKpuzB0ycDwcEy~dDT2Y@1}tm+7ol4P4OKC`}XdAxY=m?d~23^b{6uu zESs&UlMT)JSP1 zUP=jHvz_0F?Ucrz8)ln4!(PxrX=%L=*2~tM%-Bkb+^)x;*@HahWV!< zH~TX>gM!2o@;b|5IgMw<5mAm2+lBk`ta>BG;j&N&vc+6UmG)UGTne~Ssm-FO?~#J; z7E}deBFmpgBd~o$=pkgxD8PNU*VpU-f}|oK)uB6#d&6eC9VdH9njtBpd3A+?oV;Oy znt&^!!!940uF-7C#fl~k%y%=&R@I)f&+kW3W(?0%?r7DO0cGG++K{YqtaoPC^BZSv zzxLucnUor#g_=u^og?-fNSjP{l>^`I$A}o^h7C!%s+=FxnK>Zia9{t<9z>QV7i z;Lk@rp7@J!SBvm;x$#G$YqT zGZ-zUtDD!%ahDA<7V}Ws2M~mFj_A}S5`pHA4O3Od&evJ*v574->{T^vNiLIAiTn8N z7a;+*Pl4D12lrQjR+$I?*EV;8xBo(wa9}w9!9-y=w~DlU0&-t<#9!#R5aq>?u_99K z!Y`s_v;;m`%3D!!td$yZ!{+Kas^2o`&5<;bN&x`})ir*ysmD zr?8JjxqgP!w^9>3QfG4lc*}7cKvddgG#)J2p6W7^=Eh;AfKB{3Q`;NZ){DI4A7d`^ z^aVbzk7uHK&dQI;OG37I=VAv;DpLzRu1$rRlXQm2P& zUeJn0rsb+s@ zA`P5oUh1qA8rPYkMJxMCnHv%kN!FqvwKOmg`lN#pL5C%g$l!e;6wd<@i)!|Nb$ocY z@n81(#r)5My@SX7|303Fvj3}K&NLJ;SGO?1MQBXo)C)#iVyl^#B35lw9+OzF=;ih{ zlk`}>g*sjHvSGZ0ijJ*Km>aL}a+smNOZGgRzs1}HG$bD*#$zNoh-u*S=cCQ`)oe(- zH~{1ri=cIFe`yS_oF&bQ&!>ZOYa1HsGW5G(q2%I6&Yxf_c4Y|_1NyVvr#~5QsxIW6 z%Ws9>&uHKy63)>abLI4-{Ee{+!%;htIi#prG&3_@bQ5cS{nX@|vh2?A1$^S8fWp=y z7$8>f;u9ERy#UCm(a%q?{{NxWy(ua%Zqq2biJEJvfAZ>$+~o$NV8`4J0jcJb@s z@AAWD&K)5qW~4n8T)3@vx+RVxk&42>$(#}um_xEouFtgCNZkWec5_5SWJIpb3XhPC zb9Qoo(l$piDKJ?Iu|6CvI~qw&Q08*}Qje)kE$(+ee@08rP}H%S!J*}=mN{5MjO&v6 z3CJW|2eg_JCXADO5%<);)kS3OSh&?@G+32wR$vo*u_& zNf539Jyi}cPt$X(_6Z9|bo>%WTjpNGh;hh~N<$Q}OdS0!L_SJ9nP4v_YAI?9LeR$G zyPbpmPQ66oX@D;^vK3EDe4S7$yCgJ zbULtCygNRBb^7YZLv)^w9{D6DUQB${mO7Y~2>$cuL-|IQ`TV)Fg|v(rs#x7BQaJc| za2Ae(1>!^wlZ5(~2c9$P7qJcEC$>T&Ni~jg7OIQWa6L1*o#``Axbx{X<^-;2lCbyo zrTo>s#Ni*a?r{_a)PoJVdxB#euyM}>DeuLzm~n~&(fjeu>9a0eNP$S?T@6lGg45OL zCR}tux&^c5a!YKMpmdm2AL*pFpwz^05r>Xxh=WE1Hf26sc{nxsmRCx@EGe(Km|59r zA{^k+2#7*`$mpNS5mO2aFNu)j0+AGFZd03)r`7X`8B#&Y&ISBuMTTIdPR|0>pt)+H zg~E0whyNi2G%+dsGXyP3xl?jGHVxaD?IJgfjE8<6L#a-k`*0)Zj7P1F<)hT=Xt}Jc zoa?Qcl5YRs|M|b@;`zy&^V7?}ql6E<)&oT8B2aM-hJ=L5pP0t8ScNR00{ujSslF9> z4M`GI5~(eSf+qh9F^iS!qza`5fghuQAi3+07@rEw60o`D;{gL_BlNxEcF+baZ)7cR zq?fk^sf#WQfRIlR-0G}>P?6*{U`PdS^$GZ!gQMMy(|7@$MTASpaOjaOH011xgnE!8 zg5wz{LJe$61%PfbEHuZQ;$c99+iG2;_%gh}FxNv{|H@H_&Xa61BroxdUdDwaB?}VA zMjuJE8XeqDa@`=X18+9l_e^9t+t#TQZ&|9Z(Rrn^YxD!fgPwoH(jawc$D9STDLEq?rU_~~C93yjVh9LzECYZKVIgKybDRbj;aCu`Yb%#N zSWlF*WEm{!7?Kp5g_i{wbKlcn^&&)yv8(|q%WiXarlpKKrOXSB`~u_G%-Kv%mYI?d z$VG_HicX}=ka~zFU?bfITwhce=TdxXvyh-ErlCcuX0BjSc9djiMJoU%t}Rm< z1x|{d98WC_vB^d`X(HEv%pqe=7}Ee@&gmRj49jvE4XcaHdPmqDx?W1AIk?R1 zA08!hW+PB@%EZKFMVv4-ZNG4M;Z{sRDV>-~rG%nUb852Qs-hDtkiI^4q?Qdtmw+wm zgw4YEsK14L2HhA&N8@zd2^@AtniLS-bOwy1N*-!cI8#=GZD0hdw0ghM60pP;3fI~ujgpr5UjhdK2Oa>FJU1f$veaUI$+{7yI2gEW6 zRmnx-TbaR^af=+6(v1a|$}-zQ{UTZ*F@IVV{SEcMnn@|(+QcgGupnCykwS&%0VbxQ zOxacemv=D8216|42F2(zjV0+sc)kSw4Ow9=_>$4vT-iuxE_wqJWLn`&$LrO!Y3tA< z#w|73ML%SIXQGRXL_3GT5oOW~_B_UYy*w6d#?dw7R{_I5EFV!Sp(c}2Eu&@?_H6Pd zNC)e&&?6C80K*X-&p1G=)5CQWL|A%w@9|p2KgF}${%c)H?)~avA#mt(ys9y{&i`ky zmy7?oy}iBv=>Kys&qJ~Q>Z{^JirtFJ(#+V&&2wPnk_E#J^rbg!OD@x=^qVwT}y^;63BnT>k@k~QP%;9xT!`>#zt6maOkU7n8l zs1c%)(&rTFeCP*}_f}dZY(`?Wp1@g#l%Bj!mhpm+o%P*o4rDi zfM`)nK2}WHrdnJ1IGc79h*C>WvB|~_t!v`-%1wu|+T0uNRzB&?CnIaFSUL-~Z&>w= zn1L<9ea6WQB8rs90xENHye-~MFbXx_E8*PU3XBAi$O?)BKm65a529wy^Q)|EI|F0mn4^z|A){J6&as zWrVsrG~V3da?1?iHtWpZkycq)74_C^n3L;wg_%vo?5}cGQ}AnM)aH_9GiJZ9HN&l9 z|6$>nt>6AL=_3vqo_+ssoQ(gnej|`3;fG@cvPWBO2~uF+ z(iUWQbw>uFB6?Rd2u zyMn~sB(3ZkEpQr;N84LdVPk!^HxRytYf&2;z&fNu8dw!P^=tT694wY^oea$DP* zZuWuO-WpqIswC*Uw9u?s?koteg3P&Y8s+^I=)nM(5YPR;G@qGrnO-Y)v3?LOvN z#r_95v~Caxs?Psw|DfRiwb$Q!wEx}5^YH9{i;Mq!v3|o}CjZ-)H~YaL@6_`PdblGq zUmlsO8Tp|0T1iR$^dg?e=ob0M{lo3Z?B?;4=eg#z^L`5eZ4ZA^FdjazObj4 zBEUyKuP_2CU%I?AlWD)R#u>_?sRhxs-GPkn{S$*A&VW=FzD_MuECT}K-?ttrJ~rI@W&^NYo+_1coP zv8E6+MJTf76^$WlB3Gh9dlsEsTvTI6DCr_UA4`zEszG5XaW+NCbo>wHcnINvoaGy!Sc10FlHtL#h%l0)$3 z`H&>g`jF;}h8k+Kh2@xd<)*TH1X*!9r^IM9<@Pkd?)n|v*nty2^!qa/Vxeck49nKPcy0VW| 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 literal 0 HcmV?d00001 diff --git a/charts/penpot/templates/NOTES.txt b/charts/penpot/templates/NOTES.txt new file mode 100644 index 0000000..960a5ad --- /dev/null +++ b/charts/penpot/templates/NOTES.txt @@ -0,0 +1,8 @@ +Thank you for installing {{ .Chart.Name }}. + +Your release is named '{{ .Release.Name }}'. + +To learn more about the release, try: + + $ helm status {{ .Release.Name }} + $ helm get all {{ .Release.Name }} diff --git a/charts/penpot/templates/_helpers.tpl b/charts/penpot/templates/_helpers.tpl new file mode 100644 index 0000000..a2e57ab --- /dev/null +++ b/charts/penpot/templates/_helpers.tpl @@ -0,0 +1,75 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "penpot.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "penpot.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "penpot.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "penpot.labels" -}} +helm.sh/chart: {{ include "penpot.chart" . }} +{{ include "penpot.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "penpot.selectorLabels" -}} +app.kubernetes.io/name: {{ include "penpot.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} +{{- define "penpot.frontendSelectorLabels" -}} +app.kubernetes.io/name: {{ include "penpot.name" . }}-frontend +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} +{{- define "penpot.backendSelectorLabels" -}} +app.kubernetes.io/name: {{ include "penpot.name" . }}-backend +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} +{{- define "penpot.exporterSelectorLabels" -}} +app.kubernetes.io/name: {{ include "penpot.name" . }}-exporter +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "penpot.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "penpot.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} + diff --git a/charts/penpot/templates/assets-persistentvolumeclaim.yml b/charts/penpot/templates/assets-persistentvolumeclaim.yml new file mode 100644 index 0000000..d093f36 --- /dev/null +++ b/charts/penpot/templates/assets-persistentvolumeclaim.yml @@ -0,0 +1,24 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) -}} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "penpot.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: +{{- include "penpot.labels" . | nindent 4 }} +{{- if .Values.persistence.annotations }} + annotations: +{{ toYaml .Values.persistence.annotations | indent 4 }} +{{- end }} +spec: + accessModes: + {{- range .Values.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- if .Values.persistence.storageClass }} + storageClassName: "{{ .Values.persistence.storageClass }}" +{{- end }} +{{- end -}} diff --git a/charts/penpot/templates/backend-deployment.yml b/charts/penpot/templates/backend-deployment.yml new file mode 100644 index 0000000..944d501 --- /dev/null +++ b/charts/penpot/templates/backend-deployment.yml @@ -0,0 +1,403 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "penpot.fullname" . }}-backend + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "penpot.backendSelectorLabels" . | nindent 6 }} + replicas: {{ .Values.backend.replicaCount }} + template: + metadata: + labels: + app: penpot-backend + {{- include "penpot.backendSelectorLabels" . | nindent 8 }} + spec: + {{- with .Values.global.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "penpot.serviceAccountName" . }} + {{- if .Values.backend.podSecurityContext.enabled }} + securityContext: + {{- omit .Values.backend.podSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + containers: + - name: {{ .Chart.Name }}-backend + image: "{{ .Values.backend.image.repository }}:{{ .Values.backend.image.tag }}" + imagePullPolicy: {{ .Values.backend.image.pullPolicy }} + {{- if .Values.backend.containerSecurityContext.enabled }} + securityContext: + {{- omit .Values.backend.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + env: + {{/* General settings */}} + - name: PENPOT_PUBLIC_URI + value: {{ .Values.config.publicUri | quote }} + - name: PENPOT_FLAGS + value: "$PENPOT_FLAGS {{ .Values.config.flags }}" + - name: PENPOT_SECRET_KEY + value: {{ .Values.config.apiSecretKey | quote }} + {{- if .Values.config.registrationDomainWhitelist }} + - name: PENPOT_REGISTRATION_DOMAIN_WHITELIST + value: {{ .Values.config.registrationDomainWhitelist | quote }} + {{- end }} + - name: PENPOT_TELEMETRY_ENABLED + value: {{ .Values.config.telemetryEnabled | quote }} + {{- if .Values.backend.service.prepl.enabled }} + - name: PENPOT_PREPL_HOST + value: "0.0.0.0" + {{- end }} + {{/* PosgreSQL connection settings */}} + - name: PENPOT_DATABASE_URI + {{- if .Values.config.postgresql.host }} + value: "postgresql://{{ .Values.config.postgresql.host }}:{{ .Values.config.postgresql.port }}/{{ .Values.config.postgresql.database }}" + {{- else }} + value: {{ print "postgresql://" (include "penpot.fullname" .) "-postgresql:" .Values.config.postgresql.port "/" .Values.config.postgresql.database }} + {{- end }} + - name: PENPOT_DATABASE_USERNAME + {{- if not .Values.config.postgresql.secretKeys.usernameKey }} + value: {{ .Values.config.postgresql.username | quote }} + {{- else }} + valueFrom: + secretKeyRef: + name: {{ .Values.config.postgresql.existingSecret }} + key: {{ .Values.config.postgresql.secretKeys.usernameKey }} + {{- end }} + - name: PENPOT_DATABASE_PASSWORD + {{- if not .Values.config.postgresql.secretKeys.passwordKey }} + value: {{ .Values.config.postgresql.password | quote }} + {{- else }} + valueFrom: + secretKeyRef: + name: {{ .Values.config.postgresql.existingSecret }} + key: {{ .Values.config.postgresql.secretKeys.passwordKey }} + {{- end }} + {{/* Redis connection settings */}} + - name: PENPOT_REDIS_URI + {{- if .Values.config.redis.host }} + value: "redis://{{ .Values.config.redis.host }}:{{ .Values.config.redis.port }}/{{ .Values.config.redis.database }}" + {{- else }} + value: {{ print "redis://" (include "penpot.fullname" .) "-redis-master:" .Values.config.redis.port "/" .Values.config.redis.database }} + {{- end }} + {{/* Assets storage settings */}} + - name: PENPOT_ASSETS_STORAGE_BACKEND + value: {{ .Values.config.assets.storageBackend | quote }} + {{- if eq .Values.config.assets.storageBackend "assets-fs" }} + - name: PENPOT_STORAGE_ASSETS_FS_DIRECTORY + value: {{ .Values.config.assets.filesystem.directory | quote }} + {{- else if eq .Values.config.assets.storageBackend "assets-s3" }} + - name: PENPOT_STORAGE_ASSETS_S3_REGION + value: {{ .Values.config.assets.s3.region | quote }} + - name: PENPOT_STORAGE_ASSETS_S3_BUCKET + value: {{ .Values.config.assets.s3.bucket | quote }} + - name: AWS_ACCESS_KEY_ID + {{- if not .Values.config.assets.s3.secretKeys.accessKeyIDKey }} + value: {{ .Values.config.assets.s3.accessKeyID | quote }} + {{- else }} + valueFrom: + secretKeyRef: + name: {{ .Values.config.assets.s3.existingSecret }} + key: {{ .Values.config.assets.s3.secretKeys.accessKeyIDKey }} + {{- end }} + - name: AWS_SECRET_ACCESS_KEY + {{- if not .Values.config.assets.s3.secretKeys.secretAccessKey }} + value: {{ .Values.config.assets.s3.secretAccessKey | quote }} + {{- else }} + valueFrom: + secretKeyRef: + name: {{ .Values.config.assets.s3.existingSecret }} + key: {{ .Values.config.assets.s3.secretKeys.secretAccessKey }} + {{- end }} + - name: PENPOT_STORAGE_ASSETS_S3_ENDPOINT + {{- if not .Values.config.assets.s3.secretKeys.endpointURIKey }} + value: {{ .Values.config.assets.s3.endpointURI | quote }} + {{- else }} + valueFrom: + secretKeyRef: + name: {{ .Values.config.assets.s3.existingSecret }} + key: {{ .Values.config.assets.s3.secretKeys.endpointURIKey }} + {{- end }} + {{- end }} + {{/* SMTP settings */}} + {{- if .Values.config.smtp.enabled }} + {{- if .Values.config.smtp.defaultFrom }} + - name: PENPOT_SMTP_DEFAULT_FROM + value: {{ .Values.config.smtp.defaultFrom | quote }} + {{- end }} + {{- if .Values.config.smtp.defaultReplyTo }} + - name: PENPOT_SMTP_DEFAULT_REPLY_TO + value: {{ .Values.config.smtp.defaultReplyTo | quote }} + {{- end }} + {{- if .Values.config.smtp.host }} + - name: PENPOT_SMTP_HOST + value: {{ .Values.config.smtp.host | quote }} + {{- end }} + {{- if .Values.config.smtp.port }} + - name: PENPOT_SMTP_PORT + value: {{ .Values.config.smtp.port | quote }} + {{- end }} + {{- if not .Values.config.smtp.secretKeys.usernameKey }} + - name: PENPOT_SMTP_USERNAME + value: {{ .Values.config.smtp.username | quote }} + {{- else }} + - name: PENPOT_SMTP_USERNAME + valueFrom: + secretKeyRef: + name: {{ .Values.config.smtp.existingSecret }} + key: {{ .Values.config.smtp.secretKeys.usernameKey }} + {{- end }} + {{- if not .Values.config.smtp.secretKeys.passwordKey }} + - name: PENPOT_SMTP_PASSWORD + value: {{ .Values.config.smtp.password | quote }} + {{- else }} + - name: PENPOT_SMTP_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.config.smtp.existingSecret }} + key: {{ .Values.config.smtp.secretKeys.passwordKey }} + {{- end }} + {{- if .Values.config.smtp.tls }} + - name: PENPOT_SMTP_TLS + value: {{ .Values.config.smtp.tls | quote }} + {{- end }} + {{- if .Values.config.smtp.ssl }} + - name: PENPOT_SMTP_SSL + value: {{ .Values.config.smtp.ssl | quote }} + {{- end }} + {{- end }} + {{/* Google Auth provider settings */}} + {{- if .Values.config.providers.google.enabled }} + {{- if not .Values.config.providers.secretKeys.googleClientIDKey }} + - name: PENPOT_GOOGLE_CLIENT_ID + value: {{ .Values.config.providers.google.clientID | quote }} + {{- else }} + - name: PENPOT_GOOGLE_CLIENT_ID + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.googleClientIDKey }} + {{- end }} + {{- if not .Values.config.providers.secretKeys.googleClientSecretKey}} + - name: PENPOT_GOOGLE_CLIENT_SECRET + value: {{ .Values.config.providers.google.clientSecret | quote }} + {{- else }} + - name: PENPOT_GOOGLE_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.googleClientSecretKey }} + {{- end }} + {{- end }} + {{/* Github Auth provider settings */}} + {{- if .Values.config.providers.github.enabled }} + {{- if not .Values.config.providers.secretKeys.githubClientIDKey }} + - name: PENPOT_GITHUB_CLIENT_ID + value: {{ .Values.config.providers.github.clientID | quote }} + {{- else }} + - name: PENPOT_GITHUB_CLIENT_ID + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.githubClientIDKey }} + {{- end }} + {{- if not .Values.config.providers.secretKeys.githubClientSecretKey }} + - name: PENPOT_GITHUB_CLIENT_SECRET + value: {{ .Values.config.providers.github.clientSecret | quote }} + {{- else }} + - name: PENPOT_GITHUB_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.githubClientSecretKey }} + {{- end }} + {{- end }} + {{/* Gitlab Auth provider settings */}} + {{- if .Values.config.providers.gitlab.enabled }} + {{- if .Values.config.providers.gitlab.baseURI }} + - name: PENPOT_GITLAB_BASE_URI + value: {{ .Values.config.providers.gitlab.baseURI | quote }} + {{- end }} + {{- if not .Values.config.providers.secretKeys.gitlabClientIDKey }} + - name: PENPOT_GITLAB_CLIENT_ID + value: {{ .Values.config.providers.gitlab.clientID | quote }} + {{- else }} + - name: PENPOT_GITLAB_CLIENT_ID + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.gitlabClientIDKey }} + {{- end }} + {{- if not .Values.config.providers.secretKeys.gitlabClientSecretKey }} + - name: PENPOT_GITLAB_CLIENT_SECRET + value: {{ .Values.config.providers.gitlab.clientSecret | quote }} + {{- else }} + - name: PENPOT_GITLAB_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.gitlabClientSecretKey }} + {{- end }} + {{- end }} + {{/* OIDC provider settings */}} + {{- if .Values.config.providers.oidc.enabled }} + {{- if .Values.config.providers.oidc.baseURI }} + - name: PENPOT_OIDC_BASE_URI + value: {{ .Values.config.providers.oidc.baseURI | quote }} + {{- end }} + {{- if not .Values.config.providers.secretKeys.oidcClientIDKey }} + - name: PENPOT_OIDC_CLIENT_ID + value: {{ .Values.config.providers.oidc.clientID | quote}} + {{- else }} + - name: PENPOT_OIDC_CLIENT_ID + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.oidcClientIDKey }} + {{- end }} + {{- if not .Values.config.providers.secretKeys.oidcClientSecretKey}} + - name: PENPOT_OIDC_CLIENT_SECRET + value: {{ .Values.config.providers.oidc.clientSecret | quote }} + {{- else }} + - name: PENPOT_OIDC_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: {{ .Values.config.providers.existingSecret }} + key: {{ .Values.config.providers.secretKeys.oidcClientSecretKey }} + {{- end }} + {{- if .Values.config.providers.oidc.authURI }} + - name: PENPOT_OIDC_AUTH_URI + value: {{ .Values.config.providers.oidc.authURI | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.tokenURI }} + - name: PENPOT_OIDC_TOKEN_URI + value: {{ .Values.config.providers.oidc.tokenURI | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.userURI }} + - name: PENPOT_OIDC_USER_URI + value: {{ .Values.config.providers.oidc.userURI | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.roles }} + - name: PENPOT_OIDC_ROLES + value: {{ .Values.config.providers.oidc.roles | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.rolesAttribute }} + - name: PENPOT_OIDC_ROLES_ATTR + value: {{ .Values.config.providers.oidc.rolesAttribute | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.scopes }} + - name: PENPOT_OIDC_SCOPES + value: {{ .Values.config.providers.oidc.scopes | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.nameAttribute }} + - name: PENPOT_OIDC_NAME_ATTR + value: {{ .Values.config.providers.oidc.nameAttribute | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.emailAttribute }} + - name: PENPOT_OIDC_EMAIL_ATTR + value: {{ .Values.config.providers.oidc.emailAttribute | quote }} + {{- end }} + {{- if .Values.config.providers.oidc.userInfoSource }} + - name: PENPOT_OIDC_USER_INFO_SOURCE + value: {{ .Values.config.providers.oidc.userInfoSource | quote }} + {{- end }} + {{- end }} + {{/* LDAP provider settings */}} + {{- if .Values.config.providers.ldap.enabled }} + {{- if .Values.config.providers.ldap.host }} + - name: PENPOT_LDAP_HOST + value: {{ .Values.config.providers.ldap.host | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.port }} + - name: PENPOT_LDAP_PORT + value: {{ .Values.config.providers.ldap.port | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.ssl }} + - name: PENPOT_LDAP_SSL + value: {{ .Values.config.providers.ldap.ssl | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.startTLS }} + - name: PENPOT_LDAP_STARTTLS + value: {{ .Values.config.providers.ldap.startTLS | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.baseDN }} + - name: PENPOT_LDAP_BASE_DN + value: {{ .Values.config.providers.ldap.baseDN | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.bindDN }} + - name: PENPOT_LDAP_BIND_DN + value: {{ .Values.config.providers.ldap.bindDN | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.bindPassword }} + - name: PENPOT_LDAP_BIND_PASSWORD + value: {{ .Values.config.providers.ldap.bindPassword | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.userQuery }} + - name: PENPOT_LDAP_USER_QUERY + value: {{ .Values.config.providers.ldap.userQuery | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.attributesUsername }} + - name: PENPOT_LDAP_ATTRS_USERNAME + value: {{ .Values.config.providers.ldap.attributesUsername | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.attributesEmail }} + - name: PENPOT_LDAP_ATTRS_EMAIL + value: {{ .Values.config.providers.ldap.attributesEmail | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.attributesFullname }} + - name: PENPOT_LDAP_ATTRS_FULLNAME + value: {{ .Values.config.providers.ldap.attributesFullname | quote }} + {{- end }} + {{- if .Values.config.providers.ldap.attributesPhoto }} + - name: PENPOT_LDAP_ATTRS_PHOTO + value: {{ .Values.config.providers.ldap.attributesPhoto | quote }} + {{- end }} + {{- end }} + volumeMounts: + - mountPath: /opt/data/assets + name: app-data + readOnly: false + ports: + - name: http + containerPort: {{ .Values.backend.service.http.port }} + protocol: TCP + {{- if .Values.backend.service.prepl.enabled }} + - name: prepl + containerPort: {{ .Values.backend.service.prepl.port }} + protocol: TCP + {{- end }} + resources: + {{- toYaml .Values.backend.resources | nindent 12 }} + {{- with .Values.backend.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.backend.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.backend.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + - name: app-data + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim | default ( include "penpot.fullname" . ) }} + {{- else }} + emptyDir: {} + {{- end }} diff --git a/charts/penpot/templates/backend-service.yml b/charts/penpot/templates/backend-service.yml new file mode 100644 index 0000000..a245c47 --- /dev/null +++ b/charts/penpot/templates/backend-service.yml @@ -0,0 +1,37 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "penpot.fullname" . }}-backend + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + selector: + {{- include "penpot.backendSelectorLabels" . | nindent 4 }} + type: {{ .Values.backend.service.http.type }} + ports: + - port: {{ .Values.backend.service.http.port }} + targetPort: {{ .Values.backend.service.http.port }} + protocol: TCP + name: http + +--- + +{{- if .Values.backend.service.prepl.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "penpot.fullname" . }}-backend-prepl + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + selector: + {{- include "penpot.backendSelectorLabels" . | nindent 4 }} + type: {{ .Values.backend.service.prepl.type }} + ports: + - port: {{ .Values.backend.service.prepl.port }} + targetPort: {{ .Values.backend.service.prepl.port }} + protocol: TCP + name: prepl +{{- end }} diff --git a/charts/penpot/templates/exporter-deployment.yml b/charts/penpot/templates/exporter-deployment.yml new file mode 100644 index 0000000..bc8b037 --- /dev/null +++ b/charts/penpot/templates/exporter-deployment.yml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "penpot.fullname" . }}-exporter + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.exporter.replicaCount }} + selector: + matchLabels: + {{- include "penpot.exporterSelectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "penpot.exporterSelectorLabels" . | nindent 8 }} + spec: + {{- with .Values.global.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "penpot.serviceAccountName" . }} + {{ if .Values.exporter.podSecurityContext.enabled }} + securityContext: + {{- omit .Values.exporter.podSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + containers: + - name: {{ .Chart.Name }}-exporter + image: "{{ .Values.exporter.image.repository }}:{{ .Values.exporter.image.tag }}" + imagePullPolicy: {{ .Values.exporter.image.imagePullPolicy }} + {{ if .Values.exporter.containerSecurityContext.enabled }} + securityContext: + {{- omit .Values.exporter.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + env: + - name: PENPOT_PUBLIC_URI + value: {{ .Values.config.publicURI | quote }} + - name: PENPOT_REDIS_URI + {{- if .Values.config.redis.host }} + value: "redis://{{ .Values.config.redis.host }}:{{ .Values.config.redis.port }}/{{ .Values.config.redis.database }}" + {{- else }} + value: {{ print "redis://" (include "penpot.fullname" .) "-redis-master:" .Values.config.redis.port "/" .Values.config.redis.database }} + {{- end }} + - name: PENPOT_TEMPDIR + value: "/tmp/penpot-exporter" + volumeMounts: + - mountPath: /tmp/penpot-exporter + name: app-data + readOnly: false + ports: + - name: http + containerPort: {{ .Values.exporter.service.port }} + protocol: TCP + resources: + {{- toYaml .Values.exporter.resources | nindent 12 }} + {{- with .Values.exporter.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.exporter.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.exporter.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + - name: app-data + {{- if .Values.exporter.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.exporter.persistence.existingClaim | default ( printf "%s-%s" ( include "penpot.fullname" . ) "exporter" ) }} + {{- else }} + emptyDir: {} + {{- end }} diff --git a/charts/penpot/templates/exporter-persistentvolumeclaim.yml b/charts/penpot/templates/exporter-persistentvolumeclaim.yml new file mode 100644 index 0000000..fe33192 --- /dev/null +++ b/charts/penpot/templates/exporter-persistentvolumeclaim.yml @@ -0,0 +1,24 @@ +{{- if and .Values.exporter.persistence.enabled (not .Values.exporter.persistence.existingClaim) -}} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "penpot.fullname" . }}-exporter + namespace: {{ .Release.Namespace }} + labels: +{{- include "penpot.labels" . | nindent 4 }} +{{- if .Values.exporter.persistence.annotations }} + annotations: +{{ toYaml .Values.exporter.persistence.annotations | indent 4 }} +{{- end }} +spec: + accessModes: + {{- range .Values.exporter.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.exporter.persistence.size | quote }} +{{- if .Values.exporter.persistence.storageClass }} + storageClassName: "{{ .Values.exporter.persistence.storageClass }}" +{{- end }} +{{- end -}} diff --git a/charts/penpot/templates/exporter-service.yml b/charts/penpot/templates/exporter-service.yml new file mode 100644 index 0000000..e73341a --- /dev/null +++ b/charts/penpot/templates/exporter-service.yml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "penpot.fullname" . }}-exporter + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + type: {{ .Values.exporter.service.type }} + ports: + - port: {{ .Values.exporter.service.port }} + targetPort: {{ .Values.exporter.service.port }} + protocol: TCP + name: http + selector: + {{- include "penpot.exporterSelectorLabels" . | nindent 4 }} + diff --git a/charts/penpot/templates/frontend-deployment.yml b/charts/penpot/templates/frontend-deployment.yml new file mode 100644 index 0000000..d968f56 --- /dev/null +++ b/charts/penpot/templates/frontend-deployment.yml @@ -0,0 +1,74 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "penpot.fullname" . }}-frontend + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "penpot.frontendSelectorLabels" . | nindent 6 }} + replicas: {{ .Values.frontend.replicaCount }} + template: + metadata: + labels: + app: penpot-frontend + {{- include "penpot.frontendSelectorLabels" . | nindent 8 }} + spec: + {{- with .Values.global.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "penpot.serviceAccountName" . }} + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - {{ .Release.Name }} + topologyKey: "kubernetes.io/hostname" + containers: + - name: {{ .Chart.Name }}-frontend + image: "{{ .Values.frontend.image.repository }}:{{ .Values.frontend.image.tag }}" + imagePullPolicy: {{ .Values.frontend.image.pullPolicy }} + env: + - name: PENPOT_FLAGS + value: "$PENPOT_FLAGS {{ .Values.config.flags }}" + - name: PENPOT_BACKEND_URI + value: {{ print "http://" (include "penpot.fullname" .) "-backend:" .Values.backend.service.http.port }} + - name: PENPOT_EXPORTER_URI + value: {{ print "http://" (include "penpot.fullname" .) "-exporter:" .Values.exporter.service.port }} + volumeMounts: + - mountPath: /opt/data/assets + name: app-data + readOnly: false + ports: + - name: http + containerPort: {{ .Values.frontend.service.port }} + protocol: TCP + resources: + {{- toYaml .Values.frontend.resources | nindent 12 }} + {{- with .Values.frontend.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.frontend.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.frontend.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + volumes: + - name: app-data + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ .Values.persistence.existingClaim | default ( include "penpot.fullname" . ) }} + {{- else }} + emptyDir: {} + {{- end }} diff --git a/charts/penpot/templates/frontend-service.yml b/charts/penpot/templates/frontend-service.yml new file mode 100644 index 0000000..2ceb04f --- /dev/null +++ b/charts/penpot/templates/frontend-service.yml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "penpot.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} +spec: + type: {{ .Values.frontend.service.type }} + ports: + - port: {{ .Values.frontend.service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "penpot.frontendSelectorLabels" . | nindent 4 }} diff --git a/charts/penpot/templates/ingress.yml b/charts/penpot/templates/ingress.yml new file mode 100644 index 0000000..4c29dd4 --- /dev/null +++ b/charts/penpot/templates/ingress.yml @@ -0,0 +1,53 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "penpot.fullname" . -}} +{{- $svcPort := .Values.frontend.service.port -}} +{{- $path := .Values.ingress.path }} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "penpot.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- .Values.ingress.tls | toYaml | nindent 4 }} + {{ end }} + rules: + {{- range $host := .Values.ingress.hosts }} + - host: {{ $host | quote }} + http: + paths: + - path: {{ $path }} + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + pathType: Prefix + backend: + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + backend: + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} +{{- end }} diff --git a/charts/penpot/templates/serviceaccount.yml b/charts/penpot/templates/serviceaccount.yml new file mode 100644 index 0000000..8c317c4 --- /dev/null +++ b/charts/penpot/templates/serviceaccount.yml @@ -0,0 +1,13 @@ +{{- if .Values.serviceAccount.enabled -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "penpot.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "penpot.labels" . | nindent 4 }} + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end -}} diff --git a/charts/penpot/values.yaml b/charts/penpot/values.yaml new file mode 100644 index 0000000..fb495c9 --- /dev/null +++ b/charts/penpot/values.yaml @@ -0,0 +1,516 @@ +## Default values for Penpot + +######################################## +## @section Global parameters +######################################## + +## @param global.postgresqlEnabled Whether to deploy the Bitnami PostgreSQL chart as subchart. Check [the official chart](https://artifacthub.io/packages/helm/bitnami/postgresql) for configuration. +## @param global.redisEnabled Whether to deploy the Bitnami Redis chart as subchart. Check [the official chart](https://artifacthub.io/packages/helm/bitnami/redis) for configuration. +## @param global.imagePullSecrets Global Docker registry secret names as an array. +## +global: + postgresqlEnabled: false + redisEnabled: false + ## E.g. + ## imagePullSecrets: + ## - myRegistryKeySecretName + ## + imagePullSecrets: [] + +######################################## +## @section Common parameters +######################################## + +## @param nameOverride String to partially override common.names.fullname +## +nameOverride: "" +## @param fullnameOverride String to fully override common.names.fullname +## +fullnameOverride: "" +## @param serviceAccount.enabled Specifies whether a ServiceAccount should be created. +## @param serviceAccount.annotations Annotations for service account. Evaluated as a template. Only used if `create` is `true`. +## @param serviceAccount.name The name of the ServiceAccount to use. If not set and enabled is true, a name is generated using the fullname template. +## +serviceAccount: + enabled: true + annotations: {} + name: "penpot" + +######################################## +## @section Configuration parameters +######################################## + +config: + ## @param config.publicUri The public domain to serve Penpot on. Set `disable-secure-session-cookies` in the flags if you plan on serving it on a non HTTPS domain. + ## @param config.flags The feature flags to enable. Check [the official docs](https://help.penpot.app/technical-guide/configuration/) for more info. + ## @param config.apiSecretKey A random secret key needed for persistent user sessions. Generate with `python3 -c "import secrets; print(secrets.token_urlsafe(64))"` for example. + ## + publicUri: "http://penpot.example.com" + flags: "enable-registration enable-login-with-password disable-email-verification enable-smtp enable-prepl-server" + apiSecretKey: "kmZ96pAxhTgk3HZvvBkPeVTspGBneKVLEpO_3ecORs_gwACENZ77z05zCe7skvPsQ3jI3QgkULQOWCuLjmjQsg" + ## @param config.postgresql.host The PostgreSQL host to connect to. Empty to use dependencies. + ## @param config.postgresql.port The PostgreSQL host port to use. + ## @param config.postgresql.username The database username to use. + ## @param config.postgresql.password The database password to use. + ## @param config.postgresql.database The PostgreSQL database to use. + ## @param config.postgresql.existingSecret The name of an existing secret. + ## @param config.postgresql.secretKeys.usernameKey The username key to use from an existing secret. + ## @param config.postgresql.secretKeys.passwordKey The password key to use from an existing secret. + ## + postgresql: + host: "" # Ex.: "postgresql.penpot.svc.cluster.local" + port: 5432 + username: "penpot" + password: "penpot" + database: "penpot" + existingSecret: "" + secretKeys: + usernameKey: "" + passwordKey: "" + ## @param config.redis.host The Redis host to connect to. Empty to use dependencies + ## @param config.redis.port The Redis host port to use. + ## @param config.redis.database The Redis database to connect to. + ## + redis: + host: "" # Ex.: "redis-headless.penpot.svc.cluster.local" + port: 6379 + database: "0" + ## @param config.assets.storageBackend The storage backend for assets to use. Use `assets-fs` for filesystem, and `assets-s3` for S3. + ## @param config.assets.filesystem.directory The storage directory to use if you chose the filesystem storage backend. + ## @param config.assets.s3.accessKeyID The S3 access key ID to use if you chose the S3 storage backend. + ## @param config.assets.s3.secretAccessKey The S3 secret access key to use if you chose the S3 storage backend. + ## @param config.assets.s3.region The S3 region to use if you chose the S3 storage backend. + ## @param config.assets.s3.bucket The name of the S3 bucket to use if you chose the S3 storage backend. + ## @param config.assets.s3.endpointURI The S3 endpoint URI to use if you chose the S3 storage backend. + ## @param config.assets.s3.existingSecret The name of an existing secret. + ## @param config.assets.s3.secretKeys.accessKeyIDKey The S3 access key ID to use from an existing secret. + ## @param config.assets.s3.secretKeys.secretAccessKey The S3 secret access key to use from an existing secret. + ## @param config.assets.s3.secretKeys.endpointURIKey The S3 endpoint URI to use from an existing secret. + ## + assets: + storageBackend: "assets-fs" + filesystem: + directory: "/opt/data/assets" + s3: + accessKeyID: "" + secretAccessKey: "" + region: "" + bucket: "" + endpointURI: "" + existingSecret: "" + secretKeys: + accessKeyIDKey: "" + secretAccessKey: "" + endpointURIKey: "" + ## @param config.telemetryEnabled Whether to enable sending of anonymous telemetry data. + ## + telemetryEnabled: true + ## @param config.smtp.enabled Whether to enable SMTP configuration. You also need to add the 'enable-smtp' flag to the PENPOT_FLAGS variable. + ## @param config.smtp.defaultFrom The SMTP default email to send from. + ## @param config.smtp.defaultReplyTo The SMTP default email to reply to. + ## @param config.smtp.host The SMTP host to use. + ## @param config.smtp.port The SMTP host port to use. + ## @param config.smtp.username The SMTP username to use. + ## @param config.smtp.password The SMTP password to use. + ## @param config.smtp.tls Whether to use TLS for the SMTP connection. + ## @param config.smtp.ssl Whether to use SSL for the SMTP connection. + ## @param config.smtp.existingSecret The name of an existing secret. + ## @param config.smtp.secretKeys.usernameKey The SMTP username to use from an existing secret. + ## @param config.smtp.secretKeys.passwordKey The SMTP password to use from an existing secret. + ## + smtp: + enabled: false + defaultFrom: "" + defaultReplyTo: "" + host: "" + port: "" + username: "" + password: "" + tls: true + ssl: false + existingSecret: "" + secretKeys: + usernameKey: "" + passwordKey: "" + ## @param config.registrationDomainWhitelist Comma separated list of allowed domains to register. Empty to allow all domains. + ## + registrationDomainWhitelist: "" + ## Penpot Authentication providers parameters + ## + providers: + ## @param config.providers.google.enabled Whether to enable Google configuration. To enable Google auth, add `enable-login-with-google` to the flags. + ## @param config.providers.google.clientID The Google client ID to use. To enable Google auth, add `enable-login-with-google` to the flags. + ## @param config.providers.google.clientSecret The Google client secret to use. To enable Google auth, add `enable-login-with-google` to the flags. + ## + google: + enabled: false + clientID: "" + clientSecret: "" + ## @param config.providers.github.enabled Whether to enable GitHub configuration. To enable GitHub auth, also add `enable-login-with-github` to the flags. + ## @param config.providers.github.clientID The GitHub client ID to use. + ## @param config.providers.github.clientSecret The GitHub client secret to use. + ## + github: + enabled: false + clientID: "" + clientSecret: "" + ## @param config.providers.gitlab.enabled Whether to enable GitLab configuration. To enable GitLab auth, also add `enable-login-with-gitlab` to the flags. + ## @param config.providers.gitlab.baseURI The GitLab base URI to use. + ## @param config.providers.gitlab.clientID The GitLab client ID to use. + ## @param config.providers.gitlab.clientSecret The GitLab client secret to use. + ## + gitlab: + enabled: false + baseURI: "https://gitlab.com" + clientID: "" + clientSecret: "" + ## @param config.providers.oidc.enabled Whether to enable OIDC configuration. To enable OpenID Connect auth, also add `enable-login-with-oidc` to the flags. + ## @param config.providers.oidc.baseURI The OpenID Connect base URI to use. + ## @param config.providers.oidc.clientID The OpenID Connect client ID to use. + ## @param config.providers.oidc.clientSecret The OpenID Connect client secret to use. + ## @param config.providers.oidc.authURI Optional OpenID Connect auth URI to use. Auto discovered if not provided. + ## @param config.providers.oidc.tokenURI Optional OpenID Connect token URI to use. Auto discovered if not provided. + ## @param config.providers.oidc.userURI Optional OpenID Connect user URI to use. Auto discovered if not provided. + ## @param config.providers.oidc.roles Optional OpenID Connect roles to use. If no role is provided, roles checking disabled. + ## @param config.providers.oidc.rolesAttribute Optional OpenID Connect roles attribute to use. If not provided, the roles checking will be disabled. + ## @param config.providers.oidc.scopes Optional OpenID Connect scopes to use. This settings allow overwrite the required scopes, use with caution because penpot requres at least `name` and `email` attrs found on the user info. Optional, defaults to `openid profile`. + ## @param config.providers.oidc.nameAttribute Optional OpenID Connect name attribute to use. If not provided, the `name` prop will be used. + ## @param config.providers.oidc.emailAttribute Optional OpenID Connect email attribute to use. If not provided, the `email` prop will be used. + ## + oidc: + enabled: false + baseURI: "" + clientID: "" + clientSecret: "" + authURI: "" + tokenURI: "" + userURI: "" + roles: "role1 role2" + rolesAttribute: "" + scopes: "scope1 scope2" + nameAttribute: "" + emailAttribute: "" + ## @param config.providers.ldap.enabled Whether to enable LDAP configuration. To enable LDAP, also add `enable-login-with-ldap` to the flags. + ## @param config.providers.ldap.host The LDAP host to use. + ## @param config.providers.ldap.port The LDAP port to use. + ## @param config.providers.ldap.ssl Whether to use SSL for the LDAP connection. + ## @param config.providers.ldap.startTLS Whether to utilize StartTLS for the LDAP connection. + ## @param config.providers.ldap.baseDN The LDAP base DN to use. + ## @param config.providers.ldap.bindDN The LDAP bind DN to use. + ## @param config.providers.ldap.bindPassword The LDAP bind password to use. + ## @param config.providers.ldap.userQuery The LDAP user query to use. + ## @param config.providers.ldap.attributesUsername The LDAP attributes username to use. + ## @param config.providers.ldap.attributesEmail The LDAP attributes email to use. + ## @param config.providers.ldap.attributesFullname The LDAP attributes fullname to use. + ## @param config.providers.ldap.attributesPhoto The LDAP attributes photo format to use. + ## + ldap: + enabled: false + host: "ldap" + port: 10389 + ssl: false + startTLS: false + baseDN: "ou=people,dc=planetexpress,dc=com" + bindDN: "cn=admin,dc=planetexpress,dc=com" + bindPassword: "GoodNewsEveryone" + userQuery: "(&(|(uid=:username)(mail=:username))(memberOf=cn=penpot,ou=groups,dc=my-domain,dc=com))" + attributesUsername: "uid" + attributesEmail: "mail" + attributesFullname: "cn" + attributesPhoto: "jpegPhoto" + ## @param config.providers.existingSecret The name of an existing secret to use. + ## @param config.providers.secretKeys.googleClientIDKey The Google client ID key to use from an existing secret. + ## @param config.providers.secretKeys.googleClientSecretKey The Google client secret key to use from an existing secret. + ## @param config.providers.secretKeys.githubClientIDKey The GitHub client ID key to use from an existing secret. + ## @param config.providers.secretKeys.githubClientSecretKey The GitHub client secret key to use from an existing secret. + ## @param config.providers.secretKeys.gitlabClientIDKey The GitLab client ID key to use from an existing secret. + ## @param config.providers.secretKeys.gitlabClientSecretKey The GitLab client secret key to use from an existing secret. + ## @param config.providers.secretKeys.oidcClientIDKey The OpenID Connect client ID key to use from an existing secret. + ## @param config.providers.secretKeys.oidcClientSecretKey The OpenID Connect client secret key to use from an existing secret. + ## + existingSecret: "" + secretKeys: + googleClientIDKey: "" + googleClientSecretKey: "" + githubClientIDKey: "" + githubClientSecretKey: "" + gitlabClientIDKey: "" + gitlabClientSecretKey: "" + oidcClientIDKey: "" + oidcClientSecretKey: "" + +######################################## +## @section Backend parameters +######################################## + +backend: + ## @param backend.image.repository The Docker repository to pull the image from. + ## @param backend.image.tag The image tag to use. + ## @param backend.image.pullPolicy The image pull policy to use. + ## + image: + repository: penpotapp/backend + tag: 2.0.3 + pullPolicy: IfNotPresent + ## @param backend.replicaCount The number of replicas to deploy. + ## + replicaCount: 1 + ## @param backend.service.http.type The http service type to create. + ## @param backend.service.http.port The http service port to use. + ## @param backend.service.prepl.enabled Whether to enable the prepl service in the backend. + ## @param backend.service.prepl.type The prepl service type to create. + ## @param backend.service.prepl.port The prepl service port to use. + service: + http: + type: ClusterIP + port: 6060 + prepl: + enabled: false + type: ClusterIP + port: 6063 + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param backend.podSecurityContext.enabled Enabled Penpot pods' security context + ## @param backend.podSecurityContext.fsGroup Set Penpot pod's security context fsGroup + ## + podSecurityContext: + enabled: true + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param backend.containerSecurityContext.enabled Enabled Penpot containers' security context + ## @param backend.containerSecurityContext.runAsUser Set Penpot containers' security context runAsUser + ## @param backend.containerSecurityContext.allowPrivilegeEscalation Set Penpot containers' security context allowPrivilegeEscalation + ## @param backend.containerSecurityContext.capabilities.drop Set Penpot containers' security context capabilities to be dropped + ## @param backend.containerSecurityContext.readOnlyRootFilesystem Set Penpot containers' security context readOnlyRootFilesystem + ## @param backend.containerSecurityContext.runAsNonRoot Set Penpot container's security context runAsNonRoot + ## + containerSecurityContext: + enabled: true + runAsUser: 1001 + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: false + runAsNonRoot: true + ## @param backend.affinity Affinity for Penpot pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## + affinity: {} + ## @param backend.nodeSelector Node labels for Penpot pods assignment + ## ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## @param backend.tolerations Tolerations for Penpot pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## Penpot backend resource requests and limits + ## ref: https://kubernetes.io/docs/user-guide/compute-resources/ + ## @param backend.resources.limits The resources limits for the Penpot backend containers + ## @param backend.resources.requests The requested resources for the Penpot backend containers + ## + resources: + limits: {} + requests: {} + +######################################## +## @section Frontend parameters +######################################## + +frontend: + ## @param frontend.image.repository The Docker repository to pull the image from. + ## @param frontend.image.tag The image tag to use. + ## @param frontend.image.imagePullPolicy The image pull policy to use. + ## + image: + repository: penpotapp/frontend + tag: 2.0.3 + pullPolicy: IfNotPresent + ## @param frontend.replicaCount The number of replicas to deploy. + ## + replicaCount: 1 + ## @param frontend.service.type The service type to create. + ## @param frontend.service.port The service port to use. + ## + service: + type: ClusterIP + port: 80 + ## @param frontend.affinity Affinity for Penpot pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## + affinity: {} + ## @param frontend.nodeSelector Node labels for Penpot pods assignment + ## ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## @param frontend.tolerations Tolerations for Penpot pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## Penpot frontend resource requests and limits + ## ref: https://kubernetes.io/docs/user-guide/compute-resources/ + ## @param frontend.resources.limits The resources limits for the Penpot frontend containers + ## @param frontend.resources.requests The requested resources for the Penpot frontend containers + ## + resources: + limits: {} + requests: {} + +######################################## +## @section Exporter parameters +######################################## + +exporter: + ## @param exporter.image.repository The Docker repository to pull the image from. + ## @param exporter.image.tag The image tag to use. + ## @param exporter.image.imagePullPolicy The image pull policy to use. + ## + image: + repository: penpotapp/exporter + tag: 2.0.3 + imagePullPolicy: IfNotPresent + ## @param exporter.replicaCount The number of replicas to deploy. Enable exporter.persistence if you use more than 1 replicaCount + ## + replicaCount: 1 + ## @param exporter.service.type The service type to create. + ## @param exporter.service.port The service port to use. + ## + service: + type: ClusterIP + port: 6061 + + ## @param exporter.persistence.enabled Enable persistence using Persistent Volume Claims. If exporter.replicaCount you have to enable it. + ## @param exporter.persistence.storageClass Persistent Volume storage class. Empty is choosing the default provisioner by the provider. + ## @param exporter.persistence.size Persistent Volume size. + ## @param exporter.persistence.existingClaim The name of an existing PVC to use for persistence. + ## @param exporter.persistence.accessModes Persistent Volume access modes. + ## @param exporter.persistence.annotations Persistent Volume Claim annotations. + ## + persistence: + enabled: false + storageClass: "" + size: 10Gi + existingClaim: "" + accessModes: + - ReadWriteOnce + annotations: {} + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param exporter.podSecurityContext.enabled Enabled Penpot pods' security context + ## @param exporter.podSecurityContext.fsGroup Set Penpot pod's security context fsGroup + ## + podSecurityContext: + enabled: true + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param exporter.containerSecurityContext.enabled Enabled Penpot containers' security context + ## @param exporter.containerSecurityContext.runAsUser Set Penpot containers' security context runAsUser + ## @param exporter.containerSecurityContext.allowPrivilegeEscalation Set Penpot containers' security context allowPrivilegeEscalation + ## @param exporter.containerSecurityContext.capabilities.drop Set Penpot containers' security context capabilities to be dropped + ## @param exporter.containerSecurityContext.readOnlyRootFilesystem Set Penpot containers' security context readOnlyRootFilesystem + ## @param exporter.containerSecurityContext.runAsNonRoot Set Penpot container's security context runAsNonRoot + ## + containerSecurityContext: + enabled: true + runAsUser: 1001 + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: false + runAsNonRoot: true + ## @param exporter.affinity Affinity for Penpot pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## + affinity: {} + ## @param exporter.nodeSelector Node labels for Penpot pods assignment + ## ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## @param exporter.tolerations Tolerations for Penpot pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## Penpot exporter resource requests and limits + ## ref: https://kubernetes.io/docs/user-guide/compute-resources/ + ## @param exporter.resources.limits The resources limits for the Penpot exporter containers + ## @param exporter.resources.requests The requested resources for the Penpot exporter containers + ## + resources: + limits: {} + requests: {} + + +######################################## +## @section Assets Persistence parameters +######################################## + +persistence: + ## @param persistence.enabled Enable persistence using Persistent Volume Claims. + ## + enabled: fals + ## @param persistence.storageClass Persistent Volume storage class. + ## If defined, storageClassName: . + ## If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. + ## + storageClass: "" + ## @param persistence.size Persistent Volume size. + ## + size: 20Gi + ## @param persistence.existingClaim The name of an existing PVC to use for persistence. + ## + existingClaim: "" + ## @param persistence.accessModes Persistent Volume access modes. + ## + accessModes: + - ReadWriteOnce + ## @param persistence.annotations Persistent Volume Claim annotations. + ## + annotations: {} + + +######################################## +## @section Ingress parameters +######################################## + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + path: "/" + hosts: + - host: penpot.example.com + tls: [] + # - secretName: penpot.example.com-tls + # hosts: + # - penpot.example.com + + +######################################## +## @section PostgreSQL configuration (Check for [more parameters here](https://artifacthub.io/packages/helm/bitnami/postgresql)) +######################################## + +## @param postgresql.auth.username Name for a custom user to create. +## @param postgresql.auth.password Password for the custom user to create. +## @param postgresql.auth.database Name for a custom database to create. +## +postgresql: + auth: + username: "penpot" + password: "penpot" + database: "penpot" + +######################################## +## @section Redis configuration (Check for [more parameters here](https://artifacthub.io/packages/helm/bitnami/redis)) +######################################## + +## @param redis.auth.enabled Whether to enable password authentication. +## +redis: + auth: + enabled: false diff --git a/devel/kind.config.yml b/devel/kind.config.yml new file mode 100644 index 0000000..54d1d07 --- /dev/null +++ b/devel/kind.config.yml @@ -0,0 +1,23 @@ +apiVersion: kind.x-k8s.io/v1alpha4 +kind: Cluster +name: penpot-cluster +nodes: +- role: control-plane + kubeadmConfigPatches: + - | + kind: InitConfiguration + nodeRegistration: + kubeletExtraArgs: + node-labels: "ingress-ready=true" + extraPortMappings: + - containerPort: 80 + hostPort: 80 + protocol: TCP + - containerPort: 443 + hostPort: 443 + protocol: TCP +- role: worker +- role: worker +- role: worker +- role: worker +- role: worker diff --git a/devel/penpot-namespace.yml b/devel/penpot-namespace.yml new file mode 100644 index 0000000..1ed7746 --- /dev/null +++ b/devel/penpot-namespace.yml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: penpot diff --git a/devel/penpot.values.yaml b/devel/penpot.values.yaml new file mode 100644 index 0000000..76cdd26 --- /dev/null +++ b/devel/penpot.values.yaml @@ -0,0 +1,27 @@ +## Default values for Penpot (local setup for development purpose) +global: + postgresqlEnabled: true + redisEnabled: true + +config: + publicUri: "http://localhost" + apiSecretKey: "my-secret-key" + +# backend: +# replicaCount: 2 + +# frontend: +# replicaCount: 2 + +# exporter: +# replicaCount: 2 +# persistence: +# enabled: true + +persistence: + enabled: true + +ingress: + enabled: true + hosts: + - "localhost" diff --git a/scripts/cluster_create.sh b/scripts/cluster_create.sh new file mode 100755 index 0000000..a5120f8 --- /dev/null +++ b/scripts/cluster_create.sh @@ -0,0 +1,12 @@ +#!/usr/bin/bash + +# Create a kind cluster +kind create cluster --name penpot-cluster --config devel/kind.config.yml + +# Create a namespace for Penpot +kubectl apply -f devel/penpot-namespace.yml +kubectl config set-context penpot --namespace=penpot --cluster=kind-penpot-cluster --user=kind-penpot-cluster +kubectl config use-context penpot + +# Setup ingress +kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml diff --git a/scripts/cluster_delete.sh b/scripts/cluster_delete.sh new file mode 100755 index 0000000..326ca22 --- /dev/null +++ b/scripts/cluster_delete.sh @@ -0,0 +1,3 @@ +#!/usr/bin/bash + +kind delete clusters penpot-cluster