From fcd6e74e8033bc0a3e7ac08adec7d97a17b203d3 Mon Sep 17 00:00:00 2001 From: Kevin Broch Date: Mon, 5 Feb 2024 10:59:31 -0800 Subject: [PATCH] refactor spec to match current spec-template (no spec content changes) the following was done: * update docs-resources to point to latest which updated fonts * add pre-commit hook checks * move all doc src to src directory * create build dir for all build artifacts to land in * build html version * update readme to reflect all these changes Signed-off-by: Kevin Broch --- .github/workflows/build-pdf.yml | 82 +++++++-------- .github/workflows/pre-commit.yml | 15 +++ .gitignore | 2 +- .pre-commit-config.yaml | 27 +++++ CONTRIBUTING.md | 2 +- LICENSE | 3 +- Makefile | 37 ++++--- docs-resources | 2 +- images/risc-v_logo.png | Bin 32482 -> 0 bytes readme.adoc | 93 ++++++++++++------ .../images}/riscv-server-platform.png | Bin .../images}/riscv-server-platform.svg | 0 {images => src/images}/riscv-server-rc.svg | 0 .../riscv-server-soc-ts.adoc | 14 ++- .../riscv-server-soc.adoc | 14 ++- server_soc.bib => src/server_soc.bib | 0 .../server_soc_bibliography.adoc | 0 .../server_soc_contributors.adoc | 0 .../server_soc_index.adoc | 0 .../server_soc_intro.adoc | 0 .../server_soc_requirements.adoc | 4 +- .../server_soc_tests.adoc | 0 .../server_soc_ts_intro.adoc | 10 +- 23 files changed, 197 insertions(+), 108 deletions(-) create mode 100644 .github/workflows/pre-commit.yml create mode 100644 .pre-commit-config.yaml delete mode 100755 images/risc-v_logo.png rename {images => src/images}/riscv-server-platform.png (100%) rename {images => src/images}/riscv-server-platform.svg (100%) rename {images => src/images}/riscv-server-rc.svg (100%) rename server_soc_ts_header.adoc => src/riscv-server-soc-ts.adoc (83%) rename server_soc_header.adoc => src/riscv-server-soc.adoc (83%) rename server_soc.bib => src/server_soc.bib (100%) rename server_soc_bibliography.adoc => src/server_soc_bibliography.adoc (100%) rename server_soc_contributors.adoc => src/server_soc_contributors.adoc (100%) rename server_soc_index.adoc => src/server_soc_index.adoc (100%) rename server_soc_intro.adoc => src/server_soc_intro.adoc (100%) rename server_soc_requirements.adoc => src/server_soc_requirements.adoc (99%) rename server_soc_tests.adoc => src/server_soc_tests.adoc (100%) rename server_soc_ts_intro.adoc => src/server_soc_ts_intro.adoc (99%) diff --git a/.github/workflows/build-pdf.yml b/.github/workflows/build-pdf.yml index 57cc750..c2b75d2 100644 --- a/.github/workflows/build-pdf.yml +++ b/.github/workflows/build-pdf.yml @@ -1,3 +1,4 @@ +--- name: Create Specification Document # The workflow is triggered by pull request, push to main, and manual dispatch. @@ -8,18 +9,18 @@ on: description: 'Release version, e.g. X.Y.Z:' required: true type: string - revision_mark: - description: 'Set revision mark as Draft, Release or Stable:' - required: true - type: string - default: 'Draft' + revision_mark: + description: 'Set revision mark as Draft, Release or Stable:' + required: true + type: string + default: Draft prerelease: - description: 'Tag as a pre-release?' + description: Tag as a pre-release? required: false type: boolean default: true draft: - description: 'Create release as a draft?' + description: Create release as a draft? required: false type: boolean default: false @@ -33,40 +34,41 @@ jobs: runs-on: ubuntu-latest steps: - # Step 1: Checkout the repository - - name: Checkout repository - uses: actions/checkout@v3 - with: - submodules: 'recursive' + # Step 1: Checkout the repository + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: recursive - # Step 2: Pull the latest RISC-V Docs container image - - name: Pull Container - run: docker pull riscvintl/riscv-docs-base-container-image:latest + # Step 2: Pull the latest RISC-V Docs container image + - name: Pull Container + run: docker pull riscvintl/riscv-docs-base-container-image:latest - # Step 3: Build Files - - name: Build Files - run: make - env: - VERSION: v${{ github.event.inputs.version }} - REVMARK: ${{ github.event.inputs.revision_mark }} + # Step 3: Build Files + - name: Build Files + run: make + env: + VERSION: v${{ github.event.inputs.version }} + REVMARK: ${{ github.event.inputs.revision_mark }} - # Step 4: Upload the built PDF files as a single artifact - - name: Upload Build Artifacts - uses: actions/upload-artifact@v3 - with: - path: ${{ github.workspace }}/*.pdf - retention-days: 30 + # Step 4: Upload the built PDF files as a single artifact + - name: Upload Build Artifacts + uses: actions/upload-artifact@v4 + with: + name: Build Artifacts + path: ${{ github.workspace }}/build/*.pdf + retention-days: 30 - # Create Release - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - files: ${{ github.workspace }}/*.pdf - tag_name: v${{ github.event.inputs.version }} - name: Release ${{ github.event.inputs.version }} - draft: ${{ github.event.inputs.draft }} - prerelease: ${{ github.event.inputs.prerelease }} - env: - GITHUB_TOKEN: ${{ secrets.GHTOKEN }} - if: github.event_name == 'workflow_dispatch' - # This condition ensures this step only runs for workflow_dispatch events. + # Create Release + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: ${{ github.workspace }}/build/*.pdf + tag_name: v${{ github.event.inputs.version }} + name: Release ${{ github.event.inputs.version }} + draft: ${{ github.event.inputs.draft }} + prerelease: ${{ github.event.inputs.prerelease }} + env: + GITHUB_TOKEN: ${{ secrets.GHTOKEN }} + if: github.event_name == 'workflow_dispatch' + # This condition ensures this step only runs for workflow_dispatch events. diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml new file mode 100644 index 0000000..74b9ec3 --- /dev/null +++ b/.github/workflows/pre-commit.yml @@ -0,0 +1,15 @@ +--- +name: pre-commit + +on: + pull_request: + push: + branches: [main] + +jobs: + pre-commit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + - uses: pre-commit/action@v3.0.0 diff --git a/.gitignore b/.gitignore index 8b13789..d9b4f01 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ - +/build/* diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..dac9199 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,27 @@ +--- +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-json + - id: check-symlinks + - id: check-yaml + - id: end-of-file-fixer + exclude: \.svg$ + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + + - repo: local + hooks: + - id: forbidden-file-extensions + name: forbidden-file-extensions + entry: disallow these file extensions + language: fail + # Disallow other asciidoc extensions except .adoc + files: .*\.(asciidoc|asc)$ + + - repo: https://github.com/jumanjihouse/pre-commit-hook-yamlfmt + rev: 0.2.3 + hooks: + - id: yamlfmt + args: [--mapping, '2', --sequence, '4', --offset, '2'] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3c79557..1d98c72 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,4 +55,4 @@ You can manually add the DCO text to your commit body or include either -s or -- Note: -Ensure that the name and email address associated with your GitHub account match the name and email address in the Signed-off-by line of your commit message. \ No newline at end of file +Ensure that the name and email address associated with your GitHub account match the name and email address in the Signed-off-by line of your commit message. diff --git a/LICENSE b/LICENSE index 53883b1..2f244ac 100644 --- a/LICENSE +++ b/LICENSE @@ -49,7 +49,7 @@ exhaustive, and do not form part of our licenses. such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations - for the public: + for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= @@ -393,4 +393,3 @@ the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. - diff --git a/Makefile b/Makefile index 68bea84..12f6b2d 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,8 @@ # SPDX-License-Identifier: CC-BY-SA-4.0 # # Description: -# -# This Makefile is designed to automate the process of building and packaging +# +# This Makefile is designed to automate the process of building and packaging # the Doc Template for RISC-V Extensions. DATE ?= $(shell date +%Y-%m-%d) @@ -18,13 +18,13 @@ REVMARK ?= Draft DOCKER_RUN := docker run --rm -v ${PWD}:/build -w /build \ riscvintl/riscv-docs-base-container-image:latest -HEADER_SOURCE := server_soc_header.adoc -PDF_RESULT := riscv-server-soc.pdf - -TS_HEADER_SOURCE := server_soc_ts_header.adoc -TS_PDF_RESULT := riscv-server-soc-ts.pdf - +SRC_DIR := src +BUILD_DIR := build +HEADER_SOURCE := $(SRC_DIR)/riscv-server-soc.adoc +TS_HEADER_SOURCE := $(SRC_DIR)/riscv-server-soc-ts.adoc +XTRA_ADOC_OPTS := ASCIIDOCTOR_PDF := asciidoctor-pdf +ASCIIDOCTOR_HTML := asciidoctor OPTIONS := --trace \ -a compress \ -a mathematical-format=svg \ @@ -32,7 +32,9 @@ OPTIONS := --trace \ -a revremark=${REVMARK} \ -a revdate=${DATE} \ -a pdf-fontsdir=docs-resources/fonts \ - -a pdf-style=docs-resources/themes/riscv-pdf.yml \ + -a pdf-theme=docs-resources/themes/riscv-pdf.yml \ + $(XTRA_ADOC_OPTS) \ + -D build \ --failure-level=ERROR REQUIRES := --require=asciidoctor-bibtex \ --require=asciidoctor-diagram \ @@ -42,7 +44,7 @@ REQUIRES := --require=asciidoctor-bibtex \ all: build -build: +build: @echo "Checking if Docker is available..." @if command -v docker >/dev/null 2>&1 ; then \ echo "Docker is available, building inside Docker container..."; \ @@ -54,18 +56,21 @@ build: build-container: @echo "Starting build inside Docker container..." - $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE)" - $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(TS_PDF_RESULT) $(TS_HEADER_SOURCE)" + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) $(HEADER_SOURCE)" + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_HTML) $(OPTIONS) $(REQUIRES) $(HEADER_SOURCE)" + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) $(TS_HEADER_SOURCE)" + $(DOCKER_RUN) /bin/sh -c "$(ASCIIDOCTOR_HTML) $(OPTIONS) $(REQUIRES) $(TS_HEADER_SOURCE)" @echo "Build completed successfully inside Docker container." build-no-container: @echo "Starting build..." - $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(PDF_RESULT) $(HEADER_SOURCE) - $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) --out-file=$(TS_PDF_RESULT) $(TS_HEADER_SOURCE) + $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) $(HEADER_SOURCE) + $(ASCIIDOCTOR_HTML) $(OPTIONS) $(REQUIRES) $(HEADER_SOURCE) + $(ASCIIDOCTOR_PDF) $(OPTIONS) $(REQUIRES) $(TS_HEADER_SOURCE) + $(ASCIIDOCTOR_HTML) $(OPTIONS) $(REQUIRES) $(TS_HEADER_SOURCE) @echo "Build completed successfully." clean: @echo "Cleaning up generated files..." - rm -f $(PDF_RESULT) - rm -f $(TS_PDF_RESULT) + rm -rf $(BUILD_DIR) @echo "Cleanup completed." diff --git a/docs-resources b/docs-resources index 6a2d5b1..79e585b 160000 --- a/docs-resources +++ b/docs-resources @@ -1 +1 @@ -Subproject commit 6a2d5b1f929e0e25df0c832b522ed1fc0c78e325 +Subproject commit 79e585baa1fa201d20fd330f5563d9ab2c287f3a diff --git a/images/risc-v_logo.png b/images/risc-v_logo.png deleted file mode 100755 index 4e826b2d2ff2e5ed8a5f8e6305618684aa79470e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32482 zcmeFZ_dnJD|37{|h!p9lRA$*qL^h!!krk1Wh^#U~Mj0I`jue$uwo)nzk&<-^DH09Y zBO_%;_WIuL=cw1~_5R`e7kpeUJ)h3waUZvNy^Z_*2sPB#VqL|#3L(U*eL%wqp%tPC zG0?4KgeO^_IGo^r%x4cA^*~5M0RJQS+*k8LXbaNT*mKyYd9Y2&o$F|fMCX@v&c_X; zzlRE|jIH3<@`27}z4w+st5)%tky2Ldyn1X;s_D*CRs_}^q~975?Kj#dcz?Yfu;0>j zcZ(4nGfCYp!1D6mwq5NVs{}{;3Z~|VI+hl_5t@)r_FBW=rNG~=LysDtM^&4xq8wb% z+rx||OrxWjazwXB#4M^ttwq_+VzHRt>#LP(}Hh;FOCyShsA!<4s3?In@*zEOPM~X{f8^dyXJ#~i`4YQX$R&0( zeZT+qwExkj2=bH>0S${S58wDGJfve|%)(h2ZglM69_Gw_K$26rU-Nl0)5(1&nbDKf z6ozl`59QyD%O2D!chlh3VL);JhFU!L=~F1#5c6O=A!X0{D2mehC`8G~c(6SpLrv~7 zy?V{xof01pKP{5n&a;Av#A!rh1o_&i4smOgr_994 z16@^zTKNbsteDW`jb)A=UT12dgnTd2L5*CibgXz*>7bOD$8+04augU{9%C`NxTn;by60cUd zawwvB{S~n3Z3E>XGhLICSVrU&vrLOabbnHno9H%zl?|4`;z0(aULBxbV z{9XI`VXOsABWa}_7bd!`CnocE>Enky;Xd?e{*7O=BAM)_;dg@(&A%hMTJZ>r5>UXx zy#b|O>6KyU5VGplHKao-U;LUkms{Wb$mNJg%sN)P@vx*N0Vj4M6Y=*^PFRo^?|lZ? zTrkr$=GCDmL_%%TWOk4JF3pOVm_6 ztW9FVZ?n>x|15M6-2_-+DwsVgx*Jt3&Y@LOd!K+1UinC@dx2g7ccpdU8iexV@akHR zS12usaL+KJlnT6va+LcFXSg3ds_h12wKo{RFgi;>iy?iBl zr9;U}>tgy4s#C|?aULk}yIxToCI1=5XyY-mhoYn8Fgc>s_u2)mZ>?{Qh2b^nU`_R! z!(1hE#NV;-;Gr^ppm+Z`V`>@$O8G&ZZWC<5PsBSI(wV(Ry7V5A2@zb5uUp4Tr>eOGs?NFT|^;dQLs}=rrG7%U~`5px% z5AMQrtUfH%Yp)H~;fm?lanpVC{&GuT-6|PS2OSdxBNGw=8BiCNHqoBZWQVErc&ajw zR{8x+VD+-ph3+4B5xC1o^ahz&#Zni$5Byp2QP&ag9h2p#EC$;Vp}vZBzoS{M1{_l) z@OyGpwIILhL14Jy0cdOsKfjSg8CfBg0n9}kh^OoeBEMV@#+apvKV3W=U(9qeR~|lN zx+va{Yuf37iBV3x`23b$cMc*JCnXwh#qh^Hcwx!=$MwtnVVF}O$c<#e`iA=9HvSO(G6MeVj7=*0S-)zP z0hXFEb53EiX78VdIBNhK#A+aHS%ynTg77aaiY68rFMjCJUn)JiQ7 zlvxnoWaB}wq`M$T(#Au0qnN1bqYC}3h_V_l)p&Ui?E~J$EdE|QtQLi*T|fJk3z1@} zv}u=7KiE@0NQuP`kT+pLn@|^c7**}4aa;#~#%nYN2d)IKyh2^$AQ(Bh7U=3cg6VXs zRuKOH0I`w!L9?n?j>8=2?9|3Y=L`2rGp~jiJRMpZhI}5mxPFZwU(~)7JUjMoY3Phb ztLf5A{_F^m_~OV$5lc-*1I`O4KwnX%3v(SyF?6H+t8{$6+WKvmES;O{@9HsC$*cEk zzN1mjq>W^Zt9o6H(1|JlDyMHJC#L3lm$Y8UzY5bldER2-&XulPlbdk-Dk82xi0w`a z!-)?JLQWt2-4rtx7cY3ax$oeJvr`?qCeU?H5XDt8&_Fob*VS6eZ6^6qwTtVybsaj@ zca$X@$zRM`wH&X40GD>|VJ^DOtm9+ieJDCQH9PI?k1rp$@GnL&sOR3M#g-Ggdzh6y z*M&VB6X&>c-&g$6^_e^m9^!}~p^h5|8h~&0-Nj)Q`+L}k#J2XIDkag;4P7T|ua~U{ zhuW|%iV}7w<#Ms-W@02+!PxX!7VIF-+vLTjz8jeM_S=#lk=`m^BSVn5SXlh&=nHwy zbH4XpSf8xDriqX`BmgLG_=Oqw{o>)t{gJ1~HhTeVgpnmdVHBPyRJX?U?yKBqEnICH z<&GM<;teM&-+q6*7LmT~0?Qs6m*CK%jHGX4(|99s`!2W~h6`seHItdrwswaf)AGvF z9DqlKU?n7Sgu18 z3N-(r?CzKux6>yx@Z+I0aBS1x68wvm(meV1PjE1k`=uwI@1K0y@9lT*tG==01Ad8M^0GIX$)V4*vx z0t}9Ft`X?USfQlyMFV)QNr&A|R4>r+Xn7yi#%}J72g>1r%>g5m`*)d_9Q{NciDA#{ zyT5q2A7AJt%bjkkQQcX*{gHOf^2`>l3C-8WMiLDtkFG)L_pqcbF03Oi^-u1nKQy`y zGa(a;nP9qjEUC;`yqZAUBwG@1vQBE0VMz`lP930qFp^D2C#kbz1ybLK*YO`uZQ-hU zRs6~P&{;_UX?_U+raBe8HD7T=MX;-o5SyL`=!E*nk|+4qt&#tHP8JiJiHNFp)<^(I zNjVD0Kq*naMmCl*R9pu(k&6|hl-(9jCLbu!g}jCxWP(F-|6c9)yNy8~tXLoYJ^R48 zucl65WT8Fz5rJ)OpYQ$SAKys1f+Jw`^88~DGH2hHaR&_6VI@e>@JKGW@0Q?i)G&!% z;$en7(e2yN_4ccG{kg{(kps>R4edjSZrg&tNoztJ#HO1v>@?{j32)TtF^R&{_dvuI zbxONHl3$Zy8HZI1!> z!3?az6Pn5ciXyr}5FyQCvh-w#domP$up&bnyh`XAaAq?WoPVQ-Qb0o8VLqM-myoFH z2J*{DaEaY`E#Y`_imV-^fe%ISkW=9oUWC{HyvyE)X>l%%L)X`o*ZEM%jl|@>0@MDe<&IJHa-;clmL*fy1A}KozHM8Y`qn)%P}JU!LjHLU_Nca z`|K93;tl(D;aJ{f1lpRw`f2Xb)3{bq=Rn;q3~v|T0ZasL;vC4pQ?XO#fsa#mkK?q<$VD&l6a_q6G0b4TU!-9CCdq^(U7qH?qj^TMtFdsw2Ln0>3?tv(m zXs>i69a8tl>*aHiQ*M@!fel{FMhh$KZ!RShPL&B3W%IC}26tGh8#Wx-Ylied zF3FX9+$H7=*vFt65J-_90iU_KDQ+v3NXjBM2*29(wz;i9q*W>C5S8@tR@oH*Hc|qp zZ%6cA$Qv2SRq6sV%wc?l^w`$pc-Y_Z0cj~t;nW@E@eUEN;mY_T!ikE4l_XpPBHo6L zdu&=mkyS==4!sn@H6v2_$YAT?w}C*JOo|nYHUIl`*aD-|J^`4P-<_KwLoG6qO3ixP zUAG4bjYZW_)rKsz>?G;i#ytWM(;CI6^y#>;efc!I@;fjU*I!C?{p1|L*!NQ zAnq69C!7?+)_W)UqIXAS{IlnzC}P6x-Nfhqy2XP8Uo; zG@Bl*VxeVSrFBEs!_y3XV-!(Qt8JC7DC6>Tpk+w$*2+=o;Y5afeJrCh!lDBs#~6^L zw0^(~s*{Ag6dtV8a?ssLm9cS&KL^U8`vH+K!7;a(U8^ zw|1;9T7{pVUZa835Bg17Gx_LY#n!(JdA2yLfkqF408=-S8n6|bUBC2f(J6Jsv?2&a z8QYUt4Wvd6FWssts<}Jsv3^a*^%4 zLngd#bB_^&I+yBzk;FbJZO)f2HiQA!dBQsxp2 z2efibaG%-6m@-Udz+(p;nxves>OIV&z7A87)CaaUc>7+P`aK#^CumZP!+{_0@HdsE zIzg&HuyZTBQ-$Y1wYgo#EfS6&OihARE^s}G(_=)i&Wy@@mpX&`_3OqGmK8|mCe;jL z`H>Y9&2ZwdnPe+*854Y*!@cOQV~;U|LXFe_hVy%#z=@TSt>k^N-rSNwy@sYg8C=O( zc?z2$pB*&ArB=6@A0bW7dJRI&!1SBiUwYQweic0o1;afkl_HC|-u~*9!f%_L_HYgK zb(!~g>R=BrqWlk_&S*R=qksdPv5R%EusbSjK!fxRS0I^o!k3zr*AucURnw2FoFSQF zm1O<^p*g*$I&#Vr>fD?y={RKuDeUfT*G{2^_U+lP3n#(*1|I=2yBHmC-AKvuClZi3 zP1ki^Sge-2nv5=jm-xQ@&mqNPJMi=9_VK>=@*=wr zYoA!Gu@owz3V{pH2iZz%6%yod+hO!N^KCn+JPUPfS-h=9%>ImjdyFs zV()B1->6o;m#>%7Ub z2Q3*WG1sWRm8}R$LzRW`@1V>B!Zy~jkXUi>eX^9}sHmR{P1F}eH&JG*G7wlJI|!`K zOZa3Q-j5ZBt3X|8GTqf*dK!63FL%f)FC%?CFdj1e2|1O#xbV|{4gUv zBP=p>6X&nul_XZT5kboKzv<5ShjgAP13E5$)3oCyR|!^yK({*Aog}BHB`{RcpujAR zadZ{+;dRYAGcbCtP6v6)cI;HnHW!{X&GI9;PK93g?Tn-bY$Y6k4Rj`+Yj zuJ#glXGJm})!+uhu|!^dudfK@OJbEv_6q0kN)#k*oTho|3(RX|qNPPbLTKu5yjZ7n zZ&!ddX*ag^xPA%ow~k?fD@hww1pK_vATws|uuYg-95jlHu9Np^qgwy{G+C;F6_bQ# z-N6r}^p(xR=~Wue1FXZd+6Td$>c8pi)M&#W|ea z$-JMbuXwM)^5osRZbpz^V_9!GlZ4w zKFrcOKfu&Gp{XXi26P#m=~QK3#QVOQ0|KQv_6>mlnJi1R1J6ioyL|VtC-}8#kAu9r z9;R7oX;j5)@H$}i2)tL=i=zDS>9hlg4m z->=bOlrR|w-C?qi2y-Vh&8xp+Nj#+IDhxgAv~GIF;|<7D5A&ro|8o$ucs%TGF~EGw z*(JfzJiyafGg^r<+2pVIOI0ddpzHc3k`^su8CrrRSy_sSoPX!e-6<6-wlSFv$zr#k zyy<>x2|z{*`)21&`wDdyG(mmwnR*0?^A!0M2>UPA5F=cRFuVBZcm~Out4B0(2 zP_)AyH@8>uy$vWJVz(rtHLdc?mQ<6Aj#RPRLTB}!rgUok=`|$HA08Dc9uGZ#D!YL+ zsmAq=K+Wa#Q<@_(Quw6L2XzKYnf?B%isx*I73XSRy;&gez)e0M{F;Ahm4m=HK(Zur zTc8~pnSMt4W2+ba5gWw$r*s4dQOKYvXI_PoUxR_&5%sB}w({9-p=~tT%EU55o8x(F zhy0_2o+EGh(KZPF)Q&V@YL2J~Pi=QPmhH~n%zhpT?l}ioQ@(TmW<>cz$$(DbKXSHl zT?q80fq)DyS{q~H$qI6^?;k(@rM*IEEfH+t_jy#ujt>%AMvrK4gXkZeghm;CUJ@9@ zvA2*aWdG)i=J-B({DDXyHSWAb$I9_zu|A?(N>0c$W^>2)gxfQ7?2EE=O@IM-3Bw9vSg zC86KS_V&T;BnEJ=6NgbARf>;?BRsZ?G?Af~wwA~zM0oO}T^r#8j?zCz#2*M}X}%7= zu8CBcjBqMd=K>bhDQ0QyR-48b?$inbzDj1hMKV=3D7an4gl%QM^Psq}u>D=DuqgIA z7ZC6$E2ja=-*pNq+tuP}#P$Q%y4qLmGd)>X= zBMXQL@{451`$o-m5HA2V90+aNU;Yb&$oiuEnY?j1r{Q2ZNc~U*eybd?HmTz7?Yx`u z7Mxn;TvF=3YV_dR`_Mcluf~&?X#YT{iD}%iPn16(mLYHIP83e-Q3OD>dhYSJ)`a&x z{axi=hbKd=>6)uQxu5_n!U=C)Vy>C)!4qLY{=1UB7^#dLgBT`RgM4se+~2pT|Nf}B zj<(utqj|kG_m{}J6Es^H-31bO7$W)m$&EZKl9D28m|Myd8pMrmhgXdTQ&)Nh`@2pF zujzMC9r`2C6(pDvJ?C}&8aLfmJt)tKTe7?$-pAnftf=;S=b&cF&rmL~o=USQP7zvtQPu29f zbwsFYN1=HN8J2&O&q&GHB5%vR?QxeckLYTkC$a|$TCYO45M14P@)yu2&Pb}cW1!qk zR)}KA8!t4WYAk7>6j}@vVW(_WA@|zqOv|FGpKn6c zgIRP2mV=W$3-&r4@X^psh%Id*<{V32y#;hx0!4J+oZ6ke6^nsamg+_6f+^2~ z#bVFEv=*-G0$s&|Bt4vKj0T;ynYsfnKN?G{qrT+PEZ5RT@fb}zmFwRQYb(5Ba`wck z$5V@0C9_C7Fqmf#ii=kS%5h=wQUvq`x)L{$^l;KK%2)r^W$Nl4Uw<8_V=2#|0mvQm zfMAY0Rd8?wh}jrn;P4#kKQk6_HPQ7@w$bha0KZH*FK6kkwqusyEPV6j`%HCq-b6QX z#-yFhQ|$ESm@0>Y#|iVsfC^N@FoRy=+wc8sR@HdY4xG?f=lnqqS>sXF8dMoB?6hDj zq8{=cH0kXT=WYp-D-0zEZo)I$gMCE;k6_9iw)P4dZl*CKO#H3SLOFxE%)92!{?P9) zBQj(%q$fod>*f+eGXkTCzGkFC;5)&>JYMmdqg? z!ChnrLa*Q`g=#@D(6rC#W5`|&nj!@o>(jA81|n>21!oEUT38K*IO}rQi6`i3u+W5g zQB8`Xk1GVu(~wnMc4wcqqZ!g|jdEq^S&Vt(c5^MpT1`dAPlUC^-(tAT$5yz7KOmAJ z`yf7h=G?EyEMA~naIJ!>qP4{ITgVF+vUOXkw5{IL>?q;<2{easux>55h(c5(W$Hgx zRK`<5Ny0*sp@6P5%9k)LKU8|9iFmI=YW%7?bd4J^YjF_A%gEEl>=gR{IE0xKr1)I< z5c|G1{yj@N$cU5FQ8LxdvJJ3GWo44R+TU6iy!LfO2UYJMx1)-OQvf|1bpYFanx9?Ag)NV5m>0 zCXX>OPz!qN;2!=sWoq2VHXQ$_jD7l!0j{gC6+&=`7bGd2E$2d35r?&2833ZokSt&R zEpk4EwEDz`655v#Z?p0*Yw7czIz(LjbBYS2; zc}$VlL#5BVnWrujGX9&D4k5zV>&!YSHQZrzUSLgsY;x|K!vg&nN3j)N;3C@JqMl{v zHJyARA4euMUYW_;1&7~PcC=B(S&X28)k%yzJ0fUkyh7D~Q}apaP`xFkv%ftCP`10*!F{-DhCrMJ9L?wre=(xZr zW??ETbPN8e4)~RM-GRG#WoF!wZr4`%+{F0+hj-x2ryCj zFCqjC?c}#3p1j3=%!yigIKG@(-Izp!#Ehpr&q%Be;*kAjC=O2U57?=`+GO=v;hdND zMvBZ%)ij{#7p%P_ND>A>&m7+OT$bn%$h7)w$^LStP-HH*Y}9X}`PIuHE++L+PlM=X z8iK6HlsHzOofl=uA2P<_KE_0{Qg4LXGV>`hjxSC@dmRTDOY9+|y)|OOfxCC=790}=P|*SmxYd5Q#do&TZe$Su?i88hWVKt}sndS4f?^1d%01^E}{0nJ?C z@Kv2fJVU=P0rUhNSIR6_=wt%`8sPg;jrr|BZ@?y6T=@7VT0ng@blkExU-W|GRwy;@ zh+0kI8i2g%t@Ykti5jHcV`9Bsb98DyC-;|uj+s-gLvrl&5qwFBoqq6RkWK57BuAJl z?5(;CzWvHQaF?YSj?XDSibBcSfc;RoDdexnN{fr(F1NNe+R8kbQJ8HOp>=plUtf@r zcL$s!ca4pkx1r_wYzykOD(lb1x72y4Al6Cj?pGF6KZEH!KLY148Z6o80lnd>Q^Lpe z#DVNTj1MEmqryfQ=TpG&w92uBpesr7@&lqRA??@KBn+HCd)arbur6t~;E`%+r!pkw zesE{2F-Z-sa@gM`^*z#g-`!v9%1$`#bi>_EUN%B8tb*qUdIAvF_;l{RqNOH5Ej@~X z^C!&=Akaag8OuO{Ca+Z?7%=1#JdJ~_YEaO^Ej+=w)F_6y-v0uD`K`<(eC4IZ+tO$< zI%+Kx1L0jQX=%zrfx@pcRJ%Ksp#z2+d!3%#`^z0)3MO-0ID4+pa$%@sN6Ig1kQybs z`6x1t!d)23zziH{xBzRxcT;}-_@b{?5`8OxOmK!~`EuH(fRlSl1nihKFy-R*`}D&U;UR)z$L>FK@@-?PZ_S)4S(6VBFh=uD*P%nWMPNl-dnr*A(PX4`mkw5%5 zbboTwn3rHC)z8PSM3Zm$>Ng&3y!^$CTam%a*M;AD3uBBTh`|rGTabDrVHAQ7?`_;( zJi5hh<;z&#w?kYxtYWVQGKFNVkzqON1#g*hLl@qyxbLsTgFzq@%%q< zMlL4S1hmKXn24y#Kbqcw>>5}681Sh$0fI@nX>FChaelHAno91pIpZq-&cbQ`JtaEzS zl4Kzro9u`u-)%p}WKvzV|{mHC~RY-pRjsi-8h3Y@K7pQevEV`ghkRt01t?i80`owSp4N zQfB8$5>XStnM)@z9Ve|Q9-Q=HGKANgp=-XG?(q8=QqzvAKV}TMQ&5P-a|RxIjJ?-J0G5Cr##c1;Gy+uzcv(- zZ-cafM8HR5cJ=CiiM~uYc?x!bBYpK^p0{0hz0Az3dS#p@8Jh=auKoCoCnSYdzL<@v z)C(DGXW%X$e^;0wDW)K7HeIf1S6BX*J1d1llL0lteGm2A50Gg%@n)alLvP2~GdhCexS_#~ET9+3&jnWkKRwrxNmA+FLG7X>$4~yE^?c zr>AE+p|yk?yXw1&sW&*XnZ;sHYRn5Ur|kJ#oz>3W6GSKA+DA%(D%b@hE2t}FGqu1K z&v^RIZPf}ZeBZKW(*AiM`!}PuPv6+$ivwr5aG}0jP@xmhHcFWhu6GkM3%kYcKpO9N zv6$AM*gF*@h`gZlUgsz0n=4gsHxejF;(Yacrosl;-6NjwMV~DIj^X9Ak+@4pDE@}K zVi@_N4&B2$dt{l{R14?$q^_of1NY6{J2||!ziu{?NQdishJ49JaP0Z7L_}V2-MCJI z@3CZ8He8CM`c|U{^aX2G0}R_fEgWJ;g@E@C$^WCM!AFJt9;-@>EqpzMnMn&!!8oMT z9BZzX5q8N=UWOuV@!_A0R&1DzGp5c@Ej?{yV6@WGGY+O@gLLA;QoBIKYy5P@8#>R^su_1*{{El%woY(6!2`TzM{I=SkiJ zbUrKk>hDTS>w8|QaRpn&7g%D7!^n4T-2y5T;O?am!ReEp&*nD*Sfd&V;5ADCK|UW+ zCI2|-(7Y<&-q2z@=F?4yfwUVm(J96Uqs>^H_Ey=h#TOi%8fmSBjFK{L9XjgWjQJ0h z{lmhIm%H(W&FrmkijzYvLZH+V#yDu!VIh9v0$kx#&J($X9&Uu% zw{%RH?@uycwBZozH>kAPK4L}%4-7nyV5s@Bjmv-Yd>7-$s{c6l?7d`bR z`{;2#0I{H8Y*KOm0oxpfU%!`{3VnO>pSxIm?QU%*NYB_+rSVvt8Y^%hz2u@i(_dX) zPv>DFLpeu(_<_0As}&&&6RxCK{~ z+5e)7a)wzfPz!GT+>}0hjH+2#^;(4Qa@96l@6HO1$zFSFxR@})m` zxmsEbouR~Lx)y-*Vq))v!LBuQy5Zq z@O^gQ?of6}BVjwe)02pb?4zRe-q9wzuaoJc(a((pA>pM$I|KZ`cW zt+VZX`s^_iL^L5ZtEJAY9`D6(eRDGS(h=>%Vy0~b^IoNxT@Sx+v^6OW?fvY6E*yX{ zEifj@MX=Mv=)g>f4&~dXjb%TKHovSCA5>x-04b6{O2*jJ%+vC5d3QI-b(5zbv)7p)$!YcG2)H?!p9B&w1(}-Nw*jGkQaCpm zT*7((huPT%aq%I>pS$twNg>a+%SW`oS8Ty=XUtgQuYfd<)_*Z`;i6Zs#j``sAG^CE zi$CphyP{-pjmGAe+jqD6WkD?30}4_4IjDEW$bRIej{4+NfvyAa)(hSl-+hGJG4np_`%u}*PNStu%jaTPVmR}8yT(@*}uf9ZkwSe#M#drB-uRvn(BjgWZrWo0+fb zv6qLAc{qR9@y%Pf?tL9yH5_;4ej75^1`;3WdQLuI75lmA3TzSdf7IEi4`PfHE?)9NY6 zLl1ApQ|?|X=JWjPhUr`#^}cIiCp{jqwAye?CNeZ$fURD2S~UBvI`QPMwl;TsE~B5; zJX+sP_DN?)Ahe%Xr<8oZ+;s!XvN*e;TG(_n?5n8jU3R2_U&cr}-t+T`{@UcbR>`;Q z!S&B`L>jAtcyYTVI}=LAO0kpOsvKo@so;0{o{EOd$OZKHGcJ*Q`xlrkRa=zizn*ET zQ*?wG1qg%ThppkaPG!kU-6S^-O(`KO=VguV_DjfMK;C$f$3f2?+gGV`T|K#rHL>`l z#oLPPg2Rl%Qmg0m>CUo&MOkF^dm-ey!UR@KH>B*>eo6#3}BR#r8 z$cGGy;2zW{-)ryMe1od2V-q=>}dde-v#9G?vw9dmx`T^vEyHM%2c5LFs6UverA85^ysli1Ebin`d(fo zW1Iuy5$M89a^pdA2J(AHx9!#O$vrl zAmUKleags(17uvFOkOEpg(DCk@4`(6)y8(XA-tw}^wU<}k%1=8vo z8h+b@Yjm;ybE_O?Mkn@xAUmke^=RL3QP?7*PW`HHT5XHLHUhvqED)baHUogbCKsra z-Me2bJEXM9o1G+wUkd!y(d(F58tz1BYjBIwBWF-T-4Ujfc1%08eMkIFne#uKmvR!W zqFC6P@M)I&M#EV@$ZvMg;%L1w4H&e_k3?G?JYMwI=x;RV%4t~u8!u*uBZU)HG@Z3nSZE$9FW0M6m#QN zQXx%;vn&f~>?rdRh|oD_9dQ@f!9Hrdy5JDC*JnE3UxZ*L3rcF~*%ISx{~CigFY)4I zhTUU-&GgUaRcJeC$f|`q#$>lKW3wSkyd#K7ErAv+O-v^aX<(-`#qcGkq|dcb_BUKz zx@JKOnMdpAPCCk?Gg~l~{yMpPQ&`~?`YFq))62%1Yc~9y1#K6C_ZhB5RC{{#4zwh! z)&V*<#@2FyofrbDQUYB!+9?xrAZ}u(qmSMqa3qy$_tXKl5s2Do00VUkvzVjaDzPO) zW@#y%+>75`e~q67(94V@u_J!KjmIo`TX)1RWU`-Yt+Z|wj|%kF6|gqgjLbwp7UDdy zCOgv7HUNZUO{LshHdvjS?r;-2lIJ=@I?6>~OVf!1n;qUmoOwR8^%>&3Od&|2+(hhQ}Xkz&*U+}?Su(PycS&%BRD!=61BA-X+e zM^0CP#zjXFemelxV1UjvcBjVZ0&&}9&96|~=R zzvTRm-Q@A3Oq92H`>8e6|K(41yOtr=hLh-9g(wg3kdu|*Ff`=Axy2<}rT+pS1yg49 zN*%U}n2U1hSyor(YtPy9L6%V_#eCII+fW@d7`9K`osaE#TZiZsRwWi6Eq0S~l86qR zQ~hGyv~~?r0?S4Qx$B6lmkrO5+4QHml#?CRJq-A}42957c96MB;*DG1(r%2gMO&?S zYOQ#1W57*QIzM3d6#yWr^;lc|G=226V{nUobc*f0yl4c>9*+m`un>f^&OT*{jAIA1 zw}YvKle4z%Iru-^s&B;H+P24<>^5RNCcP%H_)~IfWQJD}9 zmGHF_@XuHJz($t$TBUoRZ!IgWGxX`+hc&xD4=%E8BdD(d0_wuc{yScsk2}=Nixy+- zCVbB_s>|U4N!`yLSJDC+#=+P0|I4TZ9`h7%a3Jj|UzAfUl(>n_}Z0lV;k_K>e88=7~5x?X%*cG3_0*h$~rfepTOhhej;N#VNuvAv~d zIRpALIsl3F4P`vP_HJgszisF9%TbWd!abD0!q0u7{^5k5E2wWFY~f6c8n!OD{$sF! z4mDv1zrd3gujBK4Syw-wxIXe#p68dfR0f-z-3!Vb@HR7@(50ph4^nfz`7Ew%e%5*~ zvwx2UHrrVZ7!vQ6nJe!s7F;9BUy`Abb?x(sdypAuzJtu*Cl?Um^fC6?W7*P_9aJnV z9$kjqTymo^BbvpA&sEYSo-z9bVzXm@8^GbmwqU=37+?WeVIKIZQ_?0ePvv@H=pQZ3=65 zU6V4?y{|nh7i01lZbJsuf-$6RToWfid$Rxw+id@)2w}avaJj@6eCOu_&Hm<9khKry zEj#9C-C0PfDftjw)#ZmY%8%0$sEEUNjsK>337=(HscAWBSm}Sz@aMJv@OWbt$`1x} zc{P-s*?)(Mn7aGyM?6dAx%MJQrl_j65GNB3H-n$O{FE{ zzKxJb?0_Im@>{M!0(CNL{^Og_SJpwUkH0xb=#k};3@{bGNNCKArlWzM+3#Co za@{*|ZWlpTGwIS?RKsQPBmNETrYiKcUvgzs>)eFfJr0_b}>O`Vw;t8NtS@)DCy?{Y!B# za1%!k(;;5!`pUS}Ph;GfY|`c0kkfi^UBJ!!#@mpys9eW#7c+px|2AQ6qWRJx;FnBN=91 zav^vGnT(mNg*=ip1X&rNEY?l)u%}C@x~v?Ol&W zLhW_o&#nDpK37T?^1x^u0zu+ra$^|z3V_0Tqs31_u{h;z-`Hx;3*|5A8(0jM@gHsm->)0ZBYn+PysMh;Mj zqn88wj@ApzJCQt?6 zX90zxsisgehI5_QXKdFSozN_QN9=~y4aD+dkm6}fLI(^vf9%`JtXoRH5lX5b4y`i& z?ivGWXg|o96vF*dDjl~hw91otc-nCwYYJGK6q|NnX*sVy2NY8IT=O43 z>ml($2LBbxyiX~>H}85LLMLqfq_z;Un!w8#`%{}~c|8D)$~(g`Eb*)fu;7W^TwZfyRQ-o zLnH@HK2-EgUqc+H`rB8E)e2bOShRRqD;QH#3V*r*VhWUpMxSwT{`y8uD4}Q1-?U_mXhnmi*GH7`eP6O)(>^8VDnZR{$X8p=WnSu+PnaTE#&DGc2viM-<$jpTS+>i z9oQ|(J3Q#m0|RbOCgQ%yxiFB2S@eIY!ZpBL;k~gQwLVHQ$MV?5104;>d>}%-98Y#F zd(XG6eBa+xnly~r&hRq)n;qE^e=9Cneit+_g8E29fsLS!dlDp11&NFcnbiJGw^?x1 z8||di9M#Suh_nVvW?<|Q73iSCxppN|r1B)7?s2vo7gE9Eo zcfv|^N)yEI^ci|4fiX4K1ie|?HEc4!82W;Y5X8p-YJBdUhEMSQl_=2|9uGlh0nJ*$R)4BgVpww! zX$S2I)hzZcVyd1IIZ(C`-rjPh*jA6fanL0)B=ri^ykyuv&ULh==_0^21rm*3(l7Q)Nf2IPMxcI+|Fjc3sFoliT?R(jrR7{ z*fjO5LXAdPrL{CsoC7n9G?RM)-vOhlv@po*V;!9m*d(oT!1=OM5Va6QZ8z*>eGTXk z5&ADEzY=s~V@uMfoiHFGENWHg2W_+io2@+l3W(Z0B{}c<(!?bP)yM+*Hh|nHE~v7d zfq+!dMY&2b69Fw^`R3oe!Tv21l3)#PNJGxzaMftabn=l{CU{&B6)!0MATf%ZvVQI> z(gy80{f{PeXqpGFH>8^O^bO@SWVXoX2F%>j1tnQs31n)}Fh`x3KGJ>7V^>$@ZK=^! z1$XO|qCNs_85m^EinS9wvv&nj!3Ak&DbHm)-qCGhJue_Ij-JBfEO{RIkCS5IFPOl2 z3NnB!4^5}T*}(T1;FWr$fRZp!o-LIGR28FF(W8+MT_75fBT<6b&-=PDE@~|O|N;5$s#+a|Us%Im920eP{N>KeG zaEBC|o*N=#!Ef;|Yo4QQhYO7~t=r-770BQc%95s3WQLbdH#lyf{)@%9s!`>lGeG_TeJB9%k(0 z;OBSI_wLwVekgd~QpP4ZW33x&O48v%n?hw~$|gDKOCqx`&bdwO5$mi_oj+IRK36?L zblXgXKN1ttIkqQgO>$6)*5$CNO4rXF53=^m>NXi~KFeD*-#Ymt-J>ObdW6X_wb(SzB>HG6!*fpHjnA@(se{P-fC^LF!F87gv9y!A1@iAvQ=NC z+D4i9Z>Y|87tRz6;+kqP9D{S1M=R@s#+$b+&g}_1dQ*J>it&S6d-vGw>nK!g<1z2o z3(@5-ZF+Zv`03G<;VL1mtfFM)1D2J<-+(#ef0WFbx37rGPGwsp`|uG*Tsyu_67B}c zkGk5-`|$ z+EzAKPv*W)6>r(Pt+kSt{q@C}n)jar*1lp09iS`>wGOr2_N}#ZoT2 zSgb6X)nmDh~v4Yv>Bj1g0eLolfrS0Qzs@4*gwREv$lS6j$ z(;z#p$8F9Jq@dRQ(`xs6DVERoXF`kogzbfX!uF-L+cPc@tA!4{(caSF(FA2ET&+s} zqqr@BK~7?YU%_ynf(Jv>Wms4KX5ZlZ+KTKZvxv|rzImVTyW6JzO#DvIa{X0mp*G&p z3>ST(O%^h392kYpHRy}S21J0Z-&wPL8u_lP7V+adO#g2BxZKLz(!e!v%q3XESUvRm z{dX{fLmOigrQ0UlWMGQ85*6dKPZc`v3j&^| z!3};SJ)43Aa|PxepEX>KF?8?r;;u~ZE=wH&5$kjB`6gPqgZLEmc+*WyAYq<^xD?># zC4Ip~;d}#ZVhP?7Np6fF*BVT3XUbs_>rnXvIp&Sn7Wv5oVm_}!8Ul{it96|>ULw3Y zw{C%!l zD|S0*$&x;Nw1o3%Nt=R=(H@)Xm?C`wv|9CBeOnWTn@?Yj*1n$Ro}imEsY-Mld!Meg z*mz!pCFyel94X25!dcyMRUe6&wyTB&p`IbH_b2c~61Ar0b5?KP|^+xwpGc{R$ROILiDCB6xys4y14!^_9xm2VX1qI$gW%?_Q= zj7HsuO6Pkxe{D-ztN&o&iTT{G0abv?Eb>dgx4bd1h5SsRN9#~NQA=$}iy-u;On;@= z%mlqX2lz>;M}uHYbpc`4g}eG_SHYe3gkg!#x`sZ_!Aln2<%ag1Y8wfX85qqu#?!V@ z|AB4&Js-_`ub(~660qhaj)zP>2dJOf?q8}ouj&&JI~GVA|Y= zB@5Gu-o&G~OAmD4R_&WuDVl0|Im%_serp25n35|if7i1sVRod}YXY^wirq2;tS5TG zId1&wTN38%9#nHrelaZ6=S%#ZrM0(8o3mkrdvShhMO2;I-m0PE_sLhzvcDTB@+>Sr z6yjnvkk*^3D96|oT50e8+8Dl!GTva_=wxmFymIfS_rh^q8s#do!!tuKd1vPCwO9fn z$&kiRz6-sy*w(XJBrxHlIecLujh!Ngaez1JmL18X-rl^N=9~@t`d;2^Y26#i{WB}b%thynuwCR$?va47qsPMi zJEqzVmKMJY^ks+G1sU+Yv~1JvyIHU~s?L?kF?iKN@u!Pi=OtL_^2ZY9KY$e*(GFYEv|QQs~ZRK^yX|d+m$X!HOS~Jpx~R zzkr$St~u8p6*4^YP4;Q^k;R3Ow*^N`C*TanDJ1b-?mo`a(k8X5_!7{mvnA~MbSgD6 zF?tH_? zk}i|3v0n7&7W{+~7<}%2^%H1lB2Q|hXQ_$sePQW)dTgfg^Fm)wpqliVlL>QlI*k&1 z;uFJH?!^1241h3ekFdla?P=QC*9M+SA@+Dfk|UDS%DzRUA!o*L;`LNLNYc8Z!DH^% zg<TnY9NF%=PJtTH!ku(ZBqI->;qD zcRDSqd$7|juBp{K$k)`oM7!YizBx;1N`9(n(%vpB9mJkroBFia3O^dZ(I$COee8>j`5J!yt{>;7oHe-ZXL);)OEk+%A!c1`iBmiehg2<& zwaoH`@r&}|o9lj$e+^g(-@LvV6aC|*yIrO1cJH2Pk9paeQ$Ld1HOs{* z!}dgFwVqm?$*=KK!zwH4lAw`oT~KN6q6#29tb8d=Xes0l>zoqruvyL6?L~(|LKcZV zzd>K)TGZBfu8RhD10|C0ar_=t)kHS9piN?X(p?vsQa$ABYR11%ujf!s-|v0E2U=_gEjnM#{~|bMPME}5Re1Q& zd|(Gx<``GHejD49S1LZ%WeLkz(*r%eLiV_3#zkD4-|K$9zyCZu-uL}Juh%)R^E%^s z&auiRel(uz6JSq8_+4(qPz>AM&$*@Cod|3-W~GcGz6Pdz0hS{aswQo88dE;+w$ts3 z@s(*}9%Kh9$!uMfREi$bD29aX-rXvtKc7NJ4Y-x zuBjBAt=N7$RHRhB8g)jaqV4IEx&*1^77>OusKA*FKmYUa9@*tzTkPC}+RN@rk2A|! zMYq>~QUS;*H+X||=o!OGQ;X!xma+94eYTOzfsHkfuU_CT=P5cl`G9EG0dbouCWPL~ z?rBPSRR27ayzZrP05UeOD0m09>m4NP^#H{3um#*4F6bUS6-Ouu$X(i=In{_&rD2il3HqZdOKpx9pQ(~ zg}1-?H0MXvLdiqj-ZH;ijUdOJkY4+I86T^FP&?P23%;XKj4BX$hd!<#R*H2yg2| zrccNUJB3G)y^Y`?D+!XKM8Yl{q@6ySuJ-k*X0><4tm;1+@$eRq6>@<$G_q2$3i$|F zE&#eKivI?&XiaY)N|`PkwuH_N1Tszg_Tz5{fa61>@;%Af zWbzyU7{mIy&i6^JmSuX8t zIpwA*9rKHu9W+jB+4~ba*#!bvJEgPJ&WR8>U35YfR1~d7g{d;QE9(SgCs@XSDiY4< zX#C^&I7VJfV`2VPQn@!9Vs897cd{nykvKmH=jPg>#dnW>roFb(eqy*tUL@somN1+C zuiMVyXKgl2Hz`t?;(fbXWkgnsm8|#E*B156p9W;utaE~o46H0>LoB-=Iv;s)peN#3 zg}3j^t6?)glgwIF0yA5_%)SvgyeM2M|2g6#_t}uAOw-=VNi!TtAOD?wy&rMQvp?5+ zqx+qy*J4#t@27G{YA+u-2IY&V^S*8@RF_V`$_Bc=UZeMUi>1UqCT--^A+xL_SXbm( z4YEE|MsYOwNZOiCb`K4(Q!(3o<6f*U^$#{l$0HBrIBB1?{nchsDffOH{qaN27-_x9 zcb`g5>Jz?KzqP#foIy5s0BEOL_aqvEH}BKe>k24d%?|6HGnLVB*|Lt?=OMnM6TMhF zoF@*9w;znSV%UA>I#yQ^-H5qMLUqIQ9*j^9P3^f^18nZf!@-!tBU4IK^kJ~aX=4}+ znVx4^h}TVcA&%ilu2x$bSGzy}e31{&1&|sEmP`c{=-_Fjf1r+?8pgRL?H<`r{_`-y z6(Fg{;CtPcG#f-JMKm~JI*dUtM|O*@MY^0!z)>>8yu@n)pG3R%^lyQZo(+;SGobT3 zJq5~v2Kr>T>cO%caLzC_Ay3oB!)(u)C9s@zmd5|sdjkgc*5&Mt)dN-g<_PY_EKA-l@Js7LU6`XlyU7={5Cvi8GK&-) zD7*RY;M=&WmZd4fz-*P>ri7%`-2g`+fOFZ9bAp1h=eN<45l&fiT=Y@rJ$HUUWI>J4 zWuJYY^g7&nX~)tcaUr>&UcAe*`<*owxHKG#?ZUGN^!g3$1khWY#SuRvfbVBvGb*y- zWkK!ko|^ug`SIY9T6Jv)ZSZ-@K*kwEo0?fz-f|J%Y;a0VP(cIFaOKY< zY$2Uk+&c+5Tf4N&;3TXX;-+ojvi55MQoJjN7q6UElO$3e7>Zb0rqdUVc3;1#;IQmP zaCrdCUe0vlV5jRO-WP*~zXy5H7?H_*Oni+Uf{}_<+=U-p%?{6V=B=rowRzP$E%M^x zA%?Y8Era;T5YYZY&cp;2?~~!lxWU{;sX6ThmN|fM{Zm8a>g2X(koxpkY)ri91Oa8d z70EI=uy+@TEH{@m(vla_sAWa(aswU$96X3ls&e*4vmT6Y7IU+`Z z44lqVHLAl?>JEWp6i5XF`>;j1qp>gW0&l8v8UBp~!jls@mo~jBwMV9Bz+dwB%;{z3 zZ?@glvc?N_zl$=xvTL`&PNgWQv0j_Z_Ir{t9UpA2U*3irp-3PO$E{oQBW1lMD!}QhPB5wuzx-;t&GS%PUOZzwBtH3S4%hgDS%1v zS;?1NW&i+$;rn|WSplMRFDwP0Xs3GgX&F;o-&fSauF8w16L}<>Fs>M8G{U~Yh9ugv zqnJ@LfcZ~{XDLWtu@*44Xc->OlQd;sE=&P+&8UyGR_!%`H@%m}+Z>YqjG_@|H6%wM zR`y9T2_)v~2m+EMp!iCV=vot&j85k{HSt1-0KmC=Lem6StWvFZ%dKof&Yi5!dzs5yV3U%#z87}cg9W!3Jm~uTGPsdB*yXGx_9=mUoJP){NTn& zWyqxDn!gR)Lnd@T444D~#_DkQYOWZSxqwWcF}ebI;`qUes?{a-z3bc@P^_Dbaf3&A zFi7&e2H`-l9BQdkql0`*=5s4;!eUimFjMV5XwTLjW(lc+KFF5;W&dY9W;OB3Syu}$ zL6uj#c*rtM&u6lr7DwVn%>V3;f87FW&DD3PGR^DdmpxC8PxyS!|2V!oFIMcBii~o2 zkK=4rkFb!8lPfq){A_qt*GjiW03GBXS5vm9FcsUN(Cq}!Sp}fTS z>|!%ZqYPx+_{lK$+4-gSgllZ&&FM{Qm&?K`X-?PW-VYw6Q3PExa}9;TJ%MJ92&POS zKR*W-*YAp19Pl?Hg_>3+v`@bca}cU~e8A^@B~O=le74?P#L`B-F4M+A9E9Fj9+$oYs{=_-$&BL&5d7IwH#zL7EgVwa~ zC|%{U0G6QA%1^+KCUwlCL_*dVjr&A%8*AR>yzN+K22IXXY zcgj&3A&pGWPBaM(KLSHLfnneb+ZX7I4*}}S^rYn2c4u% zba$T;Nkm8zZu$OVDku}M&HQZyZU5QZ+;a4rt)MrvQZ9}S4#YfcZ5?`k8;_>%X=t$p zAPDfkIbj*o=b3lPd^5LId^OI>+BbVQz#oy9&-D*LRaQ<$%WSCt zwuYG14CPGbjl=u86f;FjbyZUrIkF(TY0p0mvlSaRNI+J5-l4i|EdJXI(6gXd(%h!I zhds+rNU_mFdtarFRp72^A$ayQ!S_G9^vA{V9hQRZbHEnvDThC_FCH@XULdjZz5u}0 z?L)s#V|V`0`tC!-%&B{qD6g4k){A(2SfO1|G47` z960;mT2RKnXCQ+ZeQdY>*Zvvss;}lj)@0hV(_D6yY}LFY4{tMI>KCJtFsQKOH!;BjT0Zm8dL8 z!-9_z_>L6X(()DRq0>Kt?=TS6RLUS{C}3ET*~Eu_U$rbPN%dt+Gk~~*mewA>x7;b7flUS;Muqj*7Jz=ZIX|Irr?6D_2=obt;+sXhpjwSileDSY5Y&O-i)ic(T?A zz%~QIMtd_8^qE#TA{S5}$Img~!;H2~WOD}xfr5QeuoCwAc6-;wmzMxXJGG1tUVR}u zZor57pa+5cUU%@}`WtZYx2PH=2VF&Z|0PIsp1U(ssr($22YLe(!xU2w8oicc&~=Mp zq(V}tE9gXyr^SgN9PNP7(;N|uA;Z1`y9dAnYb_kF8c#RCE-+E8f=Vt>u=AEOgk=?e zJ*yFfV8~lqEs#o47bT&9RS?q2O&sw+AYpy2@WSOc*E4jJN;o@9HuYOM~^Hm z#GMwTIM%}c1=HnP@!rJq=R5a3mx*cL_?ABggh-j(N9%YgQ_4Wt$e}sgA4Z{a>h5I) zoRMI;zQA+98r;eXxXQby zYHw=oA#dpd9%Bm$KL0B%{_E<{?=&%L4)82k6+$*jUc;ZeCl&7G@ZsSDwLnEyPwrg+ z;aJ+(08UMeV=NlvJI{atDijePWZT4&kB4SlQKwi4koStk8#3D7Jt5(l-pMgnIeo@P_1y*`(C&ie>8Q=`) zAJ8YhY)@~mO0szG`m5yOFA-OtAW-|)X7viar-s3=d9%PwRZxu^{AH4l(mn(ksxG18 z-!Dk??WzK?L(7Z-C{QcVOVIrcZ>u#2SDIW+P0aP{E^anRxiI-|b(v56J%(lYy5IlkbZgr`<-;lbUSk3(Ng+A?_w*jd^kVkHGx)wPMD(u`AAh^e;mJVF z$gIimr)>0gVWC#ItnZVsQ}($l9->&9c*~gc4k1ywWRq^(?%-)f_gc~w2>S9fY~9y$ z;1!>Lw!K(v(%aH6FAmtZrZKye5uk%1QXRTZX))lvRmg)Xg3M|m6epw~2;rRg7X&=(&TNO5`XAP)sNWqT~op>qg1W~Y?G5fJMvuoHKN3EkRmUivf4tp7>KY6Gz%jv{YB}@dG4T=3%Ny zO>DgDp?C%jCn19n5wSV4Rh8tm2d)2M8Fjpbc>oA5Xmz@q=A)j`aIG!Clo2wI zHI36~5Z$YD<>s-zx-y^ca~sm9K`!@iP)~p*Li(*Q%zk!TYUpj33X6jR_~w zVq4=gdJpt%BaMev-M*`^J{CrMAI!qiFpP+hbu&O~7aPkcw`wRi;TOr1h_d=Q@bp?f zq*c4LMD^{wj=jJ(TZe9G3rF`RWXGC7kWt!!W$=QjToP>XJL z;yv}@(^8&;LUugMdMvX-g|5X_ruqdW%=Q2oGTH690@(9O^4kv;`6FS60u;?ek<#?d z%S9CU^?0ijI|2>KXyi&Jgp?Vn{`x$6h8-X)G4MqOJOHyXwyjo4ETVh>Ulxfj`(g@5 zh!V+OQ8Rc5Q^)U|XlMc?Q?zm;olQotZgQKeH4Vfz5>Ys)Vg=E zoW2N>c7C^;?DCVF@$`{DHLXATbp$1b{TfYk6+x>uJipaMZ_)K8*EIEYh?~(F1?&3) zRHc+(tJ`FwZvUO7QM1k1U#*QXSpkPX*%?LIkY~37dXS@_jk*mxLcGYAw2jkh9W=6Y zANgl(5jCS1F&eRbt-ktiPlP>J+5#_i{P)G5W;^>PECD^F8lW;a#q+|u8q2tyT-!Mt znZu@e;vGQH${BWN#RPm;;prvr*{F{5bGvRJxZKq7f^UWp=sd};w?S$rV$u7*qnUfsS^w_fT zV)NMBVP{B9mk_D5y<%-w()6o#WVRVo|9i_i(XomVq2fs!H7%>TCvEqFio&n6nw0GYfHaDHYhMUyZ7l z_)U2~3@YB#BFDvBcJzh_$^6--I$A`mZgrEdJe45={Qj zf{19qV{PSM;$ePi?woBNA!LQj5_@HWdt7?2e_Chvh6SeCwe~v^o=mO;WwBTnYi~Mn zg=8|rrw|E-!mVcU*sbT+WA|U)~452p0uqe?#trj(-zk>sCkM1|<4UNx}9Iy{Vbd28RKn5232EjWy0 zAHV)N5?oUug{Yj|dnxw5&xC2gS}Z$Mw=lB*!8-V$m0|dnTjcWe(2jOjmnZi9E0VX0 z{?z$^(zyMJBSC(!%nGnfI-rYtewAdCl)bQdb~|ssL|{4iEhssE$!*;KrYvH7-EDH} z!2Nm{0=j$uEm-PGf^wpIgScF{08my&V5z|-Vujp!m>19Fu4<=UEjfhzP%>|D}L@O)4@Jhg;+qS;>qIJY}poD<~}F zwJr^%1w%aC6|1UgoM)JEns%dcj5@L*M0XWJo`743_w<}+ptHmV@+^%_(_HN}ne5(K zH)2B-r_FQr`G%SwF)TI?;AjPmngmz74ideG+$O_b^;y4tU@}bil^J~giP0MxH4998 z-NF$)WHVDk>%wZY{0@tZVq6hd>A?dX$@xoa(9N}xS4#9~?O5aT2QxvfzU*<<%6@Jj z0VmIph~fld3OCdBM41G#sdAHxTOoO=A}KvyM)g@k?^+l6WwMFJ2}3{+`?a`aH$I4? z_jcD>eL1?>QI_j<=<~*|E@77*^LaMaXJ2$o2A~_agI}GuPl2YB8+D=kp9+cNm4#mu z-V)ttOHWEKQh#&#`X*N#n`U5>ATcrrD?jFa2VI{tml+-bvJv_;a{dyW)bTdy72UKI z{4j1Pe(tU*@^NFPF1`da#HeNs&Y+u0a|=Tn&WYQ&)BD8HMqc=e&3C?!X%ld; z=#x^fD_gq>yb$97w1u7%5pL8+($$YY`8u7b!GSKxPO8RUUSZ*6$y#B930EQtC^v8` z$AIRa5u?!@wgq2UK@sgxIJnUu-)Ksn#BN8(;tqhh(qmeb5+CN|2nEcvv5a~8rp%!S z4la|MHwhmh!hK589lD#Z14U-8Hy2U9>f_jBHqQgNMXo!6z~H8X)07CZM4OsLE1?xI zBAgxsc^90}I2W|$@B3EQ9W}vAJ+vcp-;q(~Y#>?z@H~vfAaAYl!!Dr1Y#;%zZ7i&P_GyF^jVB9Ri} zcnvHmM#P#6XTBEO+&UDKrL++bw8r_{s9rWr5BN1mKdjViZ(^1qEDa1s3{r&d`vU#@ zGv(@$Kk+@|9zBF1W$rLwU@;dYxi;oJY&!SvFjH(i1Ucynq^*k1(_Negu*kouy<~Z#H-`goN*|+<-t4 z&pxJ(#N`r0m_j!`t3s<9BP7@6WP>_`sFXssLm? z_}t2xgTL!Tl@ zU&ma7tD4DwZ*RG(tuf(O>2iOTg%BCFJ-Romyf?|Tc!+u;9Gykn zOqsz|;YYS5^}pR}x=wNR-J0}qsE?SzXj1I`JCIh>dX}(#*^43=w{Zzza3mn5EvasE zPAZiI=G>)A2*e}ZyX#UtV zOZi0r)Pecw;%-Ms<84s_eL(qzqzyyQ#crkc|6jN~v2l%CwZdxFvD?YykXA%}M%cSj zmL+qhWN_&nmGe#bohAZ`!MSMt;ZGPFC+)1#T*i6MUT6w|V3)iEW@}xJINX0T3w{JE z3`MHx#ST|ISCa%>uWr24({s4pNTc(V6!IrZOkYP%m7#q9dmwnQ!OWKHG$K*pqhJWQ z3cvQ7aB?43W99Up`#OH01=D-svUKPNjJQE&ClXEk66FjTeqK<0(D@(VaoaV}iVsB% z=nLFzN^WyuTC*gM9O4mHrHtrqqAB5mN4$s%^U5ldU)$2jSElWU)o0C||E@wYJ}VH3@jDAuvS9b|c4FOoPLq*K~1oOJ75HrbKP!iDc zFAfTp*qK2ghG>0*Bgg3{5gSSB_|~b8ip#6-ssCq0N_!Tka$b|DsOYxZX8-ILmNN%I zvO1#Z(~Li4IzOZ+1_oBs10LfdbzS4JgpP70(5`_*jrD8lzO%Nk%*nZcUedbbhB%m} z;6#Mp2WDf{j=v`mp;{6p;XBui+^7ObBjO3>S$)@&_RFCa!iOkIzr$r$qc^rjZ>(c| zsn9K;yteKJ{5_*sadLt(4G@vpJ7jr4?Neg@|Cn7Yn$A(jNshqY`(@N&<}PFR%Lx#o zc*)X}WlWndr75w3@}?pITYU}4|I9n%&ze}F7rie}Sh2SGu$+NjN|N%}c8;MLmP`3Yj*UkgfM6WWzNWt*y+(tWOgJ!atSn=koG6g_ zjY%SL9qy)$hubNqOsXfsunBj+UrNJZEGmD({^(kzyy~JklgM>abu+)f!a_kU@~FF% zZMg&F)er{r?TZXGV|8QaA#&3_85pk`F!sKw>*MZymN`CE8eIpoqIH0>2ab$>n5M4# z3uc?}%zF