From 0643a146c2be9c6ff4b8fce55416a676118c1358 Mon Sep 17 00:00:00 2001 From: Jon Harmon Date: Tue, 30 Apr 2024 06:12:42 -0500 Subject: [PATCH] Update Chapter 19: Website (#72) * Update Chapter 19: Website * Link all the things! --- 19-website.Rmd | 253 +++++++++----------- images/19-website/jon_discovers_pkgdown.png | Bin 0 -> 31906 bytes 2 files changed, 118 insertions(+), 135 deletions(-) create mode 100644 images/19-website/jon_discovers_pkgdown.png diff --git a/19-website.Rmd b/19-website.Rmd index def87c4..6c33d58 100644 --- a/19-website.Rmd +++ b/19-website.Rmd @@ -2,166 +2,149 @@ **Learning objectives:** -- Why a website benefits your package -- Some handy `usethis::` and `pkgdown::` functions to automatically generate the website -- A workflow to publish to the internet using Git, GitHub Actions & GitHub Pages -- Optional extras to customise your pkgdown site - -## A website to call home - -- Our package has many different documents: - - Function documentation (or help topics) - - Documentation of data sets - - Vignettes (and/or articles) - - `README` and `NEWS` - -- We can bring together all of our documentation into an easy to navigate website -- The pkgdown package contains some easy to use functions to create a website automagically if your package has a valid structure - -## `usethis::use_pkgdown` - Initiate a site - -- `usethis::use_pkgdown()` is run once and will create a minimal setup where we can then start to use pkgdown -- This will: - - Create a `_pkgdown.yml` file (the main config file for pkgdown) - - Adds things to `.Rbuildignore` (stops pkgdown things being included in your package bundle) - - Adds `docs/` to `.gitignore`. This co-opts you into building and deploying your website elsewhere (GitHub Actions & Pages). `docs/` would just be used to render as a local preview - -## `pkgdown::build_site()` - render your site -- You will repeatedly use `pkgdown::build_site()` to render your website locally -- This should render and open your website in your default browser -- You can look in the `docs/` directory to see the files that make up your package -- Congrats! You now have a barebones, locally rendered website... but how to deploy to the internet? - -## Deployment - -- The easiest way to show your website on the internet is to: - - Use Git & host the package on GitHub - - Use GitHub Actions to run `pkgdown::build_site()` every time you push a change to GitHub - - Use GitHub Pages to serve your static website - -## `usethis::use_pkgdown_github_pages()` - -- `usethis::use_pkgdown_github_pages()` is called once and will run through several steps: - - Initialises an empty orphan branch in your GitHub repo (`gh-pages`) - - This branch only exists on GitHub and only tracks the files that make up the website (i.e. what we see in `docs/`) - - Turns on GitHub Pages for your repo and points it to the `gh-pages` branch - - Copies the config file for a GHA workflow (shows up in `.github/workflows/pkgdown.yaml`) - - Adds the URL for your site as the homepage for your GitHub repo - - Adds the URL for your site to `DESCRIPTION` and `_pkgdown.yml` - -- It may take a couple of minutes, but you should now be able to visit the website URL (you will see it listed in the console output). - - the default URL is in this form: - `https://USERNAME.github.io/REPONAME/` -- You have a website! Sweet as! - -## C'est fini? - -- You could stop here if you wanted, you have a basic website that is helpful to users -- Or you could make it look even more sweet by customising stuff (`vignette("pkgdown", package = "pkgdown")` is a good place to start) - -## Hex logos - -- The six sided logos and stickers that everyone loves -- Design specs and sticker printing businesses can be found [here](http://hexb.in/sticker.html) -- There's an [R package](https://github.com/GuangchuangYu/hexSticker) for that -- When you have your logo, `usethis::use_logo()` will scale and add your logo to your `man/figures/` folder. pkgdown will also discover this and add to your site - -## Functions Reference Index - -- the `reference/` contains a page for each function that has a `.Rd` help topic in `man/` -- pkgdown will execute and render all of your examples - - This is a good opportunity to make sure they look the way they are supposed to -- The help topics will be linked to locations within/outside of your site - - hark back to chapter 17 and recall enclosing functions in `[]` when mentioned in roxygen comments - - pkgdown will automatically hyperlink to the relevant pages for your function. - - Inbound links from other people's packages require extra work: - - Published to CRAN - - the `URL` field in the `DESCRIPTION` file must be populated with the URL of your pkgdown site and GitHub repo - - your `_pkgdown.yml` file must include the URL for your site. - - devtools generally does this configuration for you - -## Functions Index Organisation - -- The reference index is an alphabetically ordered list of functions -- You might like to curate this if you have lots of functions [(e.g. dplyr)](https://dplyr.tidyverse.org/reference/) -- This can be done by providing a `reference` field in `_pkgdown.yml` e.g. for dplyr: - - ``` +- Create a package website with {pkgdown}. +- Deploy a package website with GitHub Actions. +- Customize your package website. + +## This is super easy! {-} + +> We hear that some folks put off “learning pkgdown”, because they think it’s going to be a lot of work. But then they eventually execute the two commands we show next and have a decent website in less than five minutes! + +[![A tweet from Jon Harmon: I put of creating a pkgdown site for my various #RStats projects because I thought I didn't have time to learn how. Then Monday I typed usethis::use_pkgdown_github_pages() and voila this exists: r4ds.github.io/cookies Sometimes just try the thing!](images/19-website/jon_discovers_pkgdown.png)](https://cookies.shinyworks.org/) + +(now at [cookies.shinyworks.org](https://cookies.shinyworks.org/)) + +## We're so close already! {-} + +We already have: + +- Function help +- Dataset documentation +- Vignettes/articles +- `README` and `NEWS` + +[{pkgdown}](https://pkgdown.r-lib.org/index.html) wraps all of that into a website + +## It's so easy! {-} + +- [`usethis::use_pkgdown()`](https://usethis.r-lib.org/reference/use_pkgdown.html): + - Creates `_pkgdown.yml` ([{pkgdown}](https://pkgdown.r-lib.org/index.html) config) + - Adds [{pkgdown}](https://pkgdown.r-lib.org/index.html) things to `.Rbuildignore` + - Adds `docs/` (local render) to `.gitignore` + - We'll use GitHub Actions to build the real site +- [`pkgdown::build_site()`](https://pkgdown.r-lib.org/reference/build_site.html): render locally & open in browser + +## It's even easier! {-} + +[`usethis::use_pkgdown_github_pages()`](https://usethis.r-lib.org/reference/use_pkgdown.html): + +- (runs [`usethis::use_pkgdown()`](https://usethis.r-lib.org/reference/use_pkgdown.html)) +- Initializes `gh-pages` in pkg GitHub +- Turns on GitHub Pages & points to `gh-pages` branch + - Free for public repos! +- Copies GHA workflow config to `.github/workflows/pkgdown.yaml` +- Adds URL as homepage for GitHub repo +- Adds URL to `DESCRIPTION` & `_pkgdown.yml` + +## Is that it? {-} + +- You can be done if you want! +- Lots more customization options! +- [`vignette("pkgdown", package = "pkgdown")`](https://pkgdown.r-lib.org/articles/pkgdown.html) = good place to start + +## Hex logos {-} + +- #RStats 💗 hexagons! +- Design specs and sticker printing businesses @ [hexb.in/sticker.html](http://hexb.in/sticker.html) +- [{hexSticker}](https://github.com/GuangchuangYu/hexSticker) 📦 for that +- [`usethis::use_logo()`](https://usethis.r-lib.org/reference/use_logo.html) to scale & add logo to site + +## Functions reference {-} + +- `reference/` = list of all function help pages +- [{pkgdown}](https://pkgdown.r-lib.org/index.html) automatically lists all exported docs +- `[function()]` and `[pkg::function()]` auto-link + - Be sure to use steps above to set up properly + +## Functions reference organisation {-} + +- `reference/` alphabetical by default +- Can curate with `reference` field in `_pkgdown.yml` +- Example: [{dplyr}](https://dplyr.tidyverse.org/reference/) + - (we'll see how on next slide) + +## Functions reference example {-} + +``` reference: - title: Data Frame Verbs - + - subtitle: Rows - desc: > - Verbs that principally operate on rows. - contents: - - arrange - - distinct + desc: > + Verbs that principally operate on rows. + contents: + - arrange + - distinct ... - subtitle: Columns - desc: > - Verbs that principally operate on columns. - contents: - - glimpse - - mutate + desc: > + Verbs that principally operate on columns. + contents: + - glimpse + - mutate ... - ``` - -## Vignettes and articles +``` -- A packages vignettes will appear (rendered) in the _Articles_ drop down menu -- Vignettes can also be linked to automatically (recall using `vignette("some-topic")` inline from Chapter 17) -- pkgdown will detect that format and automatically link to it on your website. Use this format in your roxygen comments: - - for your own vignette `vignette("some-topic")` - - for an external package vignette `vignette("some-topic", package = "somepackage")` - - this will not work for non-vignette articles (use a normal URL for these e.g. `[]()`) - - make sure to use backticks and parentheses when you refer to a function in vignettes e.g.: - ``` - `thisfunction()` or `otherpkg::otherfunction()` - ``` - -## Vignettes and articles Index organisation +## Vignettes & articles {-} -- The default is to have your vignettes/articles appear alphabetically -- You can customise this -- `?pkgdown::build_articles` has more info on this +- Vignettes in *Articles* drop-down +- Link between vignettes with `vignette("some-topic")` or `vignette("some-topic", package = "somepackage")` + - Reference functions with backticks and () + +``` +`thisfunction()` or `otherpkg::otherfunction()` +``` -## Non-vignette articles +## Vignettes & articles organisation {-} -- Non-vignette articles are not shipped with the package bundle -- The main reason to have a non-vignette article is to avoid executing gnarly code -- This might be due to: - - The code requiring authentication (e.g. googledrive package) - - You use a package but don't want to formally depend on it - - Content with lots of figures that causes size issues (e.g. larger than CRAN's size constraints) +- *Articles* alphabetical by default +- [`?pkgdown::build_articles`](https://pkgdown.r-lib.org/reference/build_articles.html) to customize -## Development Mode +## Non-vignette articles {-} -> The development field allows you to generate different sites for the development and released versions of your package. ~ [pkgdown](https://pkgdown.r-lib.org/reference/build_site.html#development-mode) +- Articles = vignette-like things but not shipped with 📦 +- Allow you to avoid executing gnarly code + - Code requiring authentication (e.g. [{googledrive}](https://googledrive.tidyverse.org/articles/index.html)) + - Use 📦 but don't want to formally depend on it + - Lots of figures/videos > CRAN's size constraints -- In the `_pkgdown.yml` file there is a `mode:` field. This can be set to `release`, `development`, `auto` and more. -- `release` is default and site gets written to `docs/` (just use this if you have a small user base). This will generate a single site, but a user downloading from CRAN may get documentation from your in development documents (e.g. functions that may not exist in the CRAN package yet) -- `devel` site is writen to `docs/dev/` and gets a danger class, and a tool tip warning these documents are in development. A `noindex` tag stops search engines indexing this site. You would have two sites the CRAN release in `docs/` and the development release in `docs/dev/` +## Development Mode {-} - - Example of this: - - readr.tidyverse.org documents the released version, i.e. what install.packages("readr") delivers. - - readr.tidyverse.org/dev/ documents the dev version, i.e. what install_github("tidyverse/readr") delivers. +Different site for release vs development! -- `auto` will automatically determine the mode based on the version number (use if your package has a broad user base) +- `_pkgdown.yml` `mode:` field = `release`, `development`, `auto` (& `unreleased`) +- `release` (default) = single site w/ everything + - Fine for most packages + - [readr.tidyverse.org = release (CRAN)](https://readr.tidyverse.org) +- `devel` = separate site in `docs/dev` + - [readr.tidyverse.org/dev = devel (`pak::pak("tidyverse/readr")`)](https://readr.tidyverse.org/dev) +- `auto` = automatically switch based on vnum +- FYI `unreleased` basically puts `devel` in `docs` -## Meeting Videos +## Meeting Videos {-} -### Cohort 1 +### Cohort 1 {-} `r knitr::include_url("https://www.youtube.com/embed/isKbovi62k4")` -### Cohort 2 +### Cohort 2 {-} `r knitr::include_url("https://www.youtube.com/embed/5VAvPvL18I0")` -### Cohort 3 +### Cohort 3 {-} `r knitr::include_url("https://www.youtube.com/embed/LkSKXeZTD-0")` @@ -177,7 +160,7 @@ -### Cohort 4 +### Cohort 4 {-} `r knitr::include_url("https://www.youtube.com/embed/9Xux7LQXPWg")` diff --git a/images/19-website/jon_discovers_pkgdown.png b/images/19-website/jon_discovers_pkgdown.png new file mode 100644 index 0000000000000000000000000000000000000000..1b04aeb04bf926509a50013576687644a96630cd GIT binary patch literal 31906 zcmc$_^;28l7dDE!7Asz$g%+o{Yw<#HiUloD+${umEneK);!p_g?(XgqTmwOF`uV5ygon+3*S$i*i*0UnMsL0`BQD7k;AmA#<%cvtDAhjVNAmU@7!M`cI?-zi- zA-br`Ng-5>Q60iRpjb+NmPA0Pj>CR5L4|+Dbd>+i zX>`(xnW@$L^X}z(P2%rh8wdR-wG5p^ghjr6>uBa~5lv9JBA z(Eg13(c_p)c1Z>UeK{k66b4-|fwOudB~0nxN@_p>H-zKg0%H*CJrMKXN?u!H^M60q zAYlRiyC8w&3-r~$ReYI$SL%N^F-IkC`*#`LTbA7OcmJ)vBL089l^|m+*zOjGK`u54 zTl~>P@UD#8VktP{qy5Mi@`d&s;+-8u8?(QfI$Fa&rp%n73tWpXJ5{!;)zU_=ZA$0! ziOmJV|D?fCP>#b`mqbP%-YQ;vYBXn#WjAp-P+u zG6Y9O73MX5#iJ2tyxF^|oh}~U$osX>@GkC2A_aIhxj_EkA!7(irmETtn?1PRAL6%h z09sD?2KkY|vj;jX-Z5*k??qiD@J`k~l-KbltS`Lj6>Lmco?#VaBu;z6c8*!#&95)~ zEssV_s@O)@_YO7WqtmsOb;X|)kF}MzxO)yJM%lo_GyBBdxEGl*F~|rwF|ll~h}Xva zF1z(I+2_>y1!w&{CSxsrm_5U8`{U?V7%g~z;kMKLYn8Di%#xpWH6okV5B{9-w!f4@ z&H$iCv&$V-zxUi@!t>#4A`C7u3!~h>g0mKbQ$o=Mt6Wmu+^otg$*jMBoMcNd3wA0c zY#4=W6nLqY6H2;AqC1byb>TJ2=DgISFr}`~R9RujQa&2P*rf0+)34%j%W`<9vLbys zB?1R&6A2NSt{T`oq-%SJkcZYus@m|UN@Fs4RN~-s4ycJZJ*k3#-Qi>|vqO0f_4D|Z}oL)dSO zUCg$~mhWXpY1TX>N`_)732l1HF&kx9!D(k3K8VAdK>rMV{le-$lfjHIY81!VdyZd? zUn7;9tYshPs5nxC&~KI6x9ELgg7 zF=6*(0c%ct*UI*1Jyt%UdEZO#4<9~MoBE!vT+^<+Y5A2Uqy@HLojSosfNP(;L!nYI zhs>F%$GSB*S|a4jXb5%vr?>cB;7^xjFsZhrQ{lJwqm2nRQrY*muhOp@Wv}ULBQ}at zz7gqF^W#}g@1%c8%itL0t^1gpE5R5|%_4_SomAW>%M$6N9uBGWyFc4?5W6BjR;a-s ziPzH7y1dE}C5bxmX8*}MoLygAt2x)&!cIy_9c~f+Em*5myVrCYy}ygAKbo9jeyo{~ z^q*5QrzIzAb98`4lC+{>Xgvm;hrp0_DhX@u8@<#4hAeI*bsv8>$T;i8oR6}^uLMdB z_O54&*j(~1kr?5s#{=G@dhH1_#JVggchZlJs$0G4!1vs0sIIZ;SNT&>kz&A5LI*Mt zwdW1IFZEb|=eLS#k6-A46t!1tJ$>xXe2R9MYmc`Kwo@AHdMrn$iH{)aTlPOuMkK`J z!sChiw}*TQYMW6Jw(HP+KU?k*ip@WMC&6HY0&TlsOxY@$B@c7;Fx6QWH|IVw(-o(DlPp!PoSO*OsTiSKoZIRJ0 z5MOk{+UfQ)-BM!Cm~+Lrs->ZjQYbFvxB9!|MZ1>=0od_hVJiLwZG?TN z={LDFz*8i(RjQRs^x>^rx~%A8CyW>ObzkZwwX0XQ>&9Q_DEI%D{oQ*qqho?Noo4{-q4k7b zsrM^q+ybrJJ_~pl))+w=f? znlBvqY@h~d3V&}IU$k-B-ciJxofO)`RUt(bpzEr8&#iP6*>FOUl5h|DFw!+0f(0%2 zx7yWzfyNs-2o0a>ZgP0{*kvrPH`BN)Sb>km+F{{Jz@B>{L7L=`_&!yrPy>4M&LAb~UIW3(7x?Ls(QvH9 z@fc$fsr-&+{@gZ%_nR{#470FSZA1Yc)SCsSotv#K$1)ccf*Jghlao)}N~{URdowv` z-k-&uESu#B1wMYiuVqItc>6|*@Xbdj8sM*8=VjuXqlAG`x-wRK>fY{ET0~#m+;V0X z7OCO<4LSs`ICYPIChOt6dc!~TF4c&g78X@nHlg+AJDI_YHDw$RJ1xIclj_GUeugfx z_5n0C@+(;ZL=?_oN23ZJUVbGdr6^)zVz^Pkipt8A`5Zv{e72s3b8Ri!bFDQh&sB$U zH5TJ|e+I1+nlisFegoH^tkFSU&YK=@i`ECP#>L@*$mbJZd+XOVZ`kJ#m8_{tq23yi z1`H1RMS0bo*#)Ee`F5YesjjHOgdY85VjO1F!@7)LlxTHZAL>u?(Z$k*Jx;5ZJyB_D z38WfCS}(1ePl{tMnU_cw?7wjBUS^O1YS$Y<1?cBNbh0ub0o#6e!s`*fM;MoX`X>i< zJ8pihR+$7nmF9{Zc|cMq4|-TIYNFVi1W0|5>Qz>2tB#8!g%5GPWY+@pqzyeHEVJ(| zd>Rb^U+)l6?I?Rk=~inFo-vM^{LKzz1a@3ro_*aj;Q8Poc89aD)dZ$Zh0P*0kCme> z_A)hF+ctH82&k)PLEH2rJ!6nBJy`~zhoZF2UmPKeaOIz3pT}Sm zsLo5|zlJ9Wy9?Jlo}CMi!;jbM^&gUPsF{nSqeTj+C z8hhPl57hO{O!=j88PB!yK4|b8lmr~Hw+CBSeUWkpRvF@DWSliSwA*!k^D^6JEI8sH zeny6w_iSkF~eD?Ybc@(6DC#^*C;B+r3^jXR1PWG7$uZ1uce*{gELm@hb|(` zKALO^Slj+i_4T;}S3di5FY^X$?ip)xr0_}85LDdvFqv8>AU{_zPidaF)z}+019me7 zX|2iJ&ULaxydqcoAp55V+DcA_I0j^>cUmA11g_tednR0N^9i#;Ars2Ga0eCtRo_#Yu8>>g4xkLCMTGr1L^)h&+_ptgJ*JW$XUPG!+v!+UsMTh^*Gj} zZRbzROgg`d>NusBE>m(otMF(VF#}m#S~_VoyaWXz#({-Nvz^*%B8zxpMf=YMnculQiqjd^4mF(0q3s$*ZD8kK5$kSX;m7dBbwJEfQIJuO4( zct1m4$yKU&aD5ZOL6FM-5#1v`<-E5Lj6EjIfBS*z(FzsCnl6Q%oBrC<`VS75sR^_r zZ%VvUqF6PH`B#p2dh}}{<*_v9bYk$H0>~vcQ|w-oT-|_vnn^X$Wn4i2GTOeJl_hnn zMT%Vfdu=o|uR4VdWV9M>*ni8E{EP0}emvSbrS#2Ij&p1$#|JyUeFrZ3hS?svOqaQz zvgW^TDX6wi_A=~`j5}K)W5U8CzjZhlam2}&iRO&_ujnf!>(R>ka)~z8Nx}w^xG?V! z3^AnwUI$_K1>Rqoavc_Ed#)d0s|8>HJiBqTj_~?F>Dz#2OI9?rpWgr0TCIB^g6H{* z;Wsi?%gWh}eiu&ncYaTnknYk2J0e@(T2$%HnvoF z1xJxiQPk9?U7X`ptV}MVEsIO}K{^aKxnzl1&=VS;luY|~IB}P3cbV5WDl+OVziMGc zULV%7hH3^o?eQW*|92bn1E`bp#qQst;yks>5wDC4y~4)E!AJ+)f@S9!=DX+N_CXH6 z8}Wg6f|vnCG$~&(AVo^4t`QsE$jEcVp&g+doHYL4l&fm^{}dKL#};+AXqiR69Eo36 zW;dtvV=0}2T*NpRhf+jS7N3$X=plKaDnMHKH7jxyEMjM0(Wo8Cnrje3adc9;`Md2EJKDxH{Zk05@`^MX%=nPUk7lgA>pR> zr?|!rOeuBX9XE%f)rB3`%l`hZQZ`|pL(4+;TUfI+$!H$ zC<{;J8>tqn<%aI4f25Q!TJxA(hhKbj9gttFHp^+bA0thCZkX9jU8DG3R8c3%obkO# zFTJp&NG&oHhxo%tY6{iB38}T6`Xsg~i!e|9KpL^{|G{(C-?D8+<*ddafi&|MF(yNc zz2Um$uQ{(dRI$2jakrM`+|neaLe8zud{nyIN_{r$0|O5(3$G`8csTsfS<~ehuLP;Y zCQ&C`jfu;BGjOa(qFLd{c!4$@uT_tRFQ9$kq@QQE(e^Sx!>49N?F~stw2VZx`HR`u zRQPigQ!K-{EiT>TA9_UK>5VTyj))PdQ2MGU;_5N+ML(nRufmIIGUnq8q9r^l6A<*!&92 zUo;fHy43U?o>qj6@k%vdS|%13GeYL0{@4<Eq8$Db%Z&*Chjs}H$}2%- z`{1C-3aRxd_twng@Ze~5`&?)aIs38B+hjK_bv2z2xPqS();ZQ~brjsp>S~F1>z{?wFT-T3yy>8bFWZYdSF(+zIj)QkZKFRzyNH5kXn0KP+PcAxOUL+HZbuYeWF(cX`3 z2gKwWoH8XIw8_N`v(C2jl7dYze_++UsP&)n#EXLdg$VnQ-Vp5rn#$ktOL|n?^Wn>L zx3nWwTlKv2&;FnEWtM4`9ZLK4+Tpeh2kLC#BGU-Fvw|%O-vV(7Ocw<0n0ZFgKr;<> zjao-GkX@+LVX^FY7S zanaSDyG^Y9-xCSLpXhYGT^vlJ(a5+EVZKniHwzvY{KnmnF^R+=54+>|k>2F}hm)SS zy-FSnD{`mBWjs|d)lX(^{V_X59WNQvjBy}XjmX0B!q~dxdxBspP)5w_hG{ox zOQW!EiHfCO7cZGQG0W#p!QylIHLZaBqci zU^l5q1xn-MPqu<~Q^eL~<*A`&TDSe|4?oWo710z1b34_)OsP6^9hO(?X^XyytFL~s zOZ{L|X2ZEZlI+3(ty0bwGt|Szw%D@%r5JF}BKx?vzq1H%wdvatD)4mMqBNj+KBQbv zvQ&Q@Gz~BPn)+;gJdK%szl-JN2l1&^%_8UimN}wd_2s#0Q_IU@HC@;CoBu@frUw7; z8x6q4LcK$rNbA;z`|}X8VZnW)H>zS641Y=jAqso%Sy>Zo_5mE*eV@a7YpYLp*DYIC zBq#U`wb=g|)V1BztF{8!*d(&-CkGawFwIf$2C8oVJjn7HRQ2TR<-E9E0|~-6Pa_0N zW5EU&@)&kT2B!-P8*;8`zr1&=<5k!E!ixNWo0Q*WI>;{tUI1YnnRXkIl?uh(QC>ygu~S_sy3|wJm?_kd=scT z^o)#d_ne>Kb#pM;tu4aGlbN>i%hX|`LozSFlqJN0fTRok_AF6rT#PzOR8j}CXSz6t zP6xoH%?$;`skd$-SZvblVUzS)9O?MNS3xdQ72){m#nWh}CJczM&W zs1us{ysbZ4{`pgxT5=>LsOPSXM=eOtE6Zy3v<6f*<;D{3&wOo<3w`11 zP)*HgZVvyStMyK)4d(EC?p^PZ;gDKx|E8;Rvj2@i=tBC{9zf~u&hFmehalA-lMH=| z*~DoLRDT>eP3s#aODIYT!FAe^iVsS4gmwL;Hpd)QxD+4dFQc%E@{1K?wUd^Sdz-5;7`J6pWQn#yv!ZFDw%Ff=mtDNv!!=!y%KM>*?_% zRil@m6SWAYPb*jKRrEl}oQGL8QyQm9LNpcc63Al|z)_W=M+M1r8Rx$T&0|c5>JIT4 zkG9^s)DIpHi3|v%lags-imVtEh1kfJ zq=s|7+CBG*s4tb_Rvv#$Z?~xr0B}g7;U~C^i%nyVQH77bw$tD9E0B!Itb49YGY%cJ z@VPs!vpI~V=9ay@!YcG@fAxX+lw-F)PNDtzsjvg1{wQ5GwDY1NN{Xae^5uc@QpwpP2q(%uT{OypJU$z|Xc*(&H_g!z8-4CLTKN`moO zxxwddwZ0tsa1{qK0M$RB3VP<+3G!nc9sbIB=g`_X8CgZ2csD&RFpM$aA%r2Ha~|?u z-*ek?bl>oDn^ue&UMdgLpzr%HXit_%kyao*!SJnAu{ZA~S)OYW5u%xaaxqkFHuH}v z*?y-wbLu`vwbRO9$By4DZPp9FG^q~SKmaK@FUL+kMrBctsV*-iPc7Y{F`WAubYb|^ zwKv2hfO{upC}wk@*!QN~^Ip(V>JwD;IfshhH{ze_E-EZl;B7FeidZwnc1|sSv$Ml4 z-}^h69?ti&n`Q?jAphw4d*u1=aM2*p^X|#cxvWI*mYOZu5QeY6zFM%`Z@&NRTQeJ; z>EUjl>Z|)u)~3P?p)9Nx?8l(^an!^(cqaZOmZ~(Ver=VWME31`+F8bk;F~J_<8fj* zV3tVO3QgwQ={$#Oh}$g7BZW6jO){nDvLym1xkLCL&p=smIw6wNAXCv9Tf`CB}TiUhZK#0 zkfRYWj3;s~5ed@J6l~>~N_mw`%VM?xOe;*W6(Z~D%y|t%Wn%c((0mIU2tOC~Jg5Sm z!Covru^CXnv6K2IJ1#%M^z@}iUzbZ~^C4@E!s2QbcoLB;-9NNr{Pkx`yG_0Aa^0|= z`yFMqy0!*e(X5s;ybgnRCBqeT?0x-8Aryt3R*O@S-xvKFG^5c{PMUAiwn@VUV~h{i ziqoKWV5EgiZYH_sbyW~E44;wz4;xn14pKOvsAkI(-KG*BgB!!TK@Q~;d9YiEpzN0k zv}seyK+3=cl3cZp3qwSF&6aIX1fjs8VV|7Z-r`4jE4%-WJ|kD5wF?Gg!z^AclD=ah|# zhW@-&uyuAV1!9xS8T;3k9TV#j>x7a%JwZ()M!A@crE0%+Dp4c4<-5~lZxmSk#val`h zD@DwLZ1$R`&tHF&|kdUw*O1m%HPca=?lx3Z#5*4gE% zJWBfSJ^u17k1UWzz*Qm}bZfm>>s4Ub#`;U5u)0yL#OC|)9f_8fx=3yg6&pwD>qebG#4QL$EJswKz0HwVL+y6Z`8K4Pc}4JU{Q0Ltg}l(C*f9dWcUkqzPtHLw^o!3($m#v~U^}}z zozR!dm&c>_6Yq}mayMkgn!1QbG)SU|`wGfp<2Ldc%Ez6e~E>r$}$mx>Q&_LA8yKD0eJP4 zlK0;wufO{)gvw3@chrOS-DKoqZMw1SL;o=u1ic1-!*>C;fxK9Ii2Jqf$ZvOkT$BS2 zvZpY}4VhmxpUJ!V#$>wB@sJBShw~_8&G64H&XQtbVV#&aG(DhM^L-8U>8ai(ab5}E zZ}quV(sHZQ>}1YNwVc0a0Nx0~ZM%DDd4@S-%~MJH z>5TjGf%XwHB#Wx8S!RT&#LgNMSuPN!H#3_v(DwFG}q!&)a6k)}_Z$YCXgvAh_(0 zOh}_qjcwX^$+8X zKSmy2lH&iCY04mmjxW}WHOa^zg^h(>lvk&>H`c7KcL^!VD_RPl)gzy%lqq33dRzGp z5Sy&67@d=xT8o%LUje*WxiwN7`a zGX)5ZA*Y|6<(;Z@^dFQ6(4?tMp{6}fdRX$d8Ko9K11U%{Ga2_~rFHhO|2l z`b#FHW-#@~Y7RmmeB?itt!_(s`UU9S_Wnn8q7!TS3=J%XgL}7Q=$B)(VENA$<-}w+ zMAiY}qU@CXwn=bYVe!T>?)4-#Z8W0n+xl9*Vd%wnQE`QKC=LaEZ!crTC-dcH;hl2v zHae~3qN#;1Hhwfe{{^7nc+RGketyDx)O$W;w$V{IPslQGP#sjNoF*d6o_=HUUsp>* z!z{#kx0*t*0TzF}2G$vhO{$~z|KIf(*A4%NP*o^=a5?y&e}V3t)pXA58pFN%b8h0W!9@i{Zs|LG@9ylC$?CcaK(|LPZkEYKBh2bsx+ub$y;)}05 zuY&Qx_32T?-FHk%6G96OhcVjR0-n>?$yLB!Mg5djpIb0!H`}Mh`V}e_L)Mc9rl`}H zCh`NugQCvO&+MbPMd#K#R|#4Ad4k9%~`z4Z>Yq@-jg*$rZv^MHoh8?-|dr9GTU zNgLN&%XQz{bF}hIm`3vCm zGh*d)`Mn|A;jV+&$z!*~Bj~u{5AQ4=>e`Oy1sUmxHQexcRxLETghf*evzu8QA3eX8 z1sj~TB3@I9q}}$0MFr-+BIh&@JofxsfM_!0b+xn5IjRnVw(5>xQXIt&|BV|-d3k{4 zzC_=y!9^O*xE{R~}cA4vbR2OR0wYUj^3$*$AgD7(GfH_1o$G zIajDk{dS#Gi_rWf`uGVr1Z=h-Sljjk&D!wQNvYd*_P7o{G}<%O^CovcCY9+9+Sc}~ z|JwJL#cdt_RCE9Bt|-m6O1qTaX#3H&j~UmLJ*t@d!K$t@&zl6g6znMUjHmuy(@&wX zLeqK?hE69nS24+#*Y#tmm(q4~7H+@%UxymEJ=3}`j7yeQjk|T#@s&n(|2h+coq zsxdO{Y|noDVGZ5$EJ~+NGh@obY{Q#Ul|+xK7y*9OHUSh{2KLu+&S+Nw@wQLR_cDS! zMseGHjTiPmyQUrjE3;~&)o$m#u}U?9J=T0HrCXs(aJ2~2lk04OZt=3~&g;?KEexzb z%p29;P>C=h#ZpG!&62dqHEjs;+EwL1rZ99?Q4C87-OFV+K4HlcgU_N) z;Lc-3$aJfhI`$A0=gXLLH}ABak8&Iaq;GFK3+$K4j^}6iE?mfq)G&)-Oj&gT8xxJ| z>t$gI1d~4qJ;)@vOHi89UKbea!uTv7(yBhX>?xlm8ZlxB z-_5r@@IqXKEXU-8L`1tTz4v}v4n3_mRCe!Vaexk$+-oMx;zXC8y{Xp4?{_{nkDqv~ zm~3~r<+QBLy>O2|)^wL%!(ovR)>c;WjV}9rrt0YXRN|l(wy?m<&Ptcdoe$JUSNT!w z;C;8@;9AIh(JTeCkv;x&jJpdbkZ*uX&=A|LE(zIt(eSt(|!g zv;lMjfNOO&sZSynN18CQ->Q&o(PlF)ySLMO8xwim)#cDP91VCI8gXJJ2cBw1AQ5}Y z9_0Q|CEOv}5&j2&kQw1+@N>X}d%qwR00(v|urP%Bn+AL#jM+k#WTcmuqyfF&)prHGE-|3xScd=C!n8JK)XB!^a zsVMVt9yi4S5N164Py=2<<9=uis!-^sR@FS9Aus7Smetd3NCwX31Eg|M1xIbd zaKpd^xn)h}%~(@lmCH6#*RhAej3j6GOsnn<PmF#T&isF!|_(k_#LbQX7)Qv=h>=r+JxIc}n;PX%P&;mqu>O`gg9_J zQ#F{`#Envx^Gq1*P=AjXi{9ow_Z%c7VfbE;qhbL&&@=i|CuXFcJwG6gYUgTpzU86M z|Mv|+C9YGOvTDBOm*<~kfEjD58^XOQPV zQPCfUW&8V8p9;4EejSIAirbd2pC&da>B6k;f%h`LekYK-rOq)Xnyoses>)s)072Ql z<^vC!xkpt$pmuN>P9kz(W}YB$v|}tud@sSd;ya&pyJ_r2^}>_%)j@Xs@echXv+m>SHnq*tj1tu^zb zRfEtOQ3h6BykmZd4-~|^c(4|EgGcvj7{8SWo|=g@&hGjYR<|*eP7^}Un~=1-!w3E7 zRiBoLg-zJPBem+7yY(OsXK23m1xTAXh~-`#Lxh7>4iJa3SxQ(@dRUcMx!p0hGYafe z{sr+o%Y#D;Ott22#nTM2Lre{YWy)<Y`TRz7(>S-=e}4IZosK4?3X!JL;wE$p zt*5yGiLg?-IuL=i<7$8OFEY@hfSvTTlo><4B{r;%ak5l}|@`|lBG18>4Jgzrjj!@@ar$bCm4ZLc)QLOfHz%A2>=x^u=R)15TPb$Z-y>|F`w z5!WpZl}M9Fx|r6a!;pReVfh>jc3EE{&!^I_FLMvxzT)p8viRA>G|=^+uaig0JpX`G zefIYo>Le)W8L3MALCX=al3VXP!B>rIFJh%+Pymg3@-?ra>5@?+jz@1%>nb(R+K8$W zHm^y<_l?Opj>PNS9jRhQ7O1(J#YbxV@Ti(|`9OP<@)jjFgT=n4HRiO9 zya?$rO!FEwsF{Zp#DkDuR{yAre2JPDCL-CgMc=3R>b%<3?{yEly~vR?_Gb3`R{YHM zy6|3>Ps2z)`) zz0nkTTZ1BtNH6?z{=tgr+U#WdH`9zEBN~uuxYcMSUNI+9F%2>Fb#5pIi!U3l<|AvNC^(vwhc+lRD zXk?YuHz6TuYj#)`_KICBw0w&osXTA~JQqgR<#MGIw_sOBO@)eK9OrnCpHtJ}pv;p@B@9|L{LqXDSl&kDOU)2qQZYX=ngmQg1q~pYA z7lTJ!jXls@!S(d_0n6fhZR@%LD2kk_sB6d6kzN3g451&hm@ogKGH$5JNkRYJS4vKT z%|R-}AO^Iejkh0g)UB{rWLBNcXj5fQC|NC;eJR|+gnGmX8VES_*y}L1L>`7Je)UpJ zG-*vHW9juN-;j{$4t4hlw&Eqa*&Hxmmt(J>&5XV~>W+b&`ad~QdDu=m^;$~KwWZ+= zFpZJVg%T*K!E6`0Z3zrG(t1z~$bP&@Yanqmr7X)cNdbK7Ws$k=)e)bNd|%4al_?

%S9~KtbPt&q6FVY+zBp zQO<0#f^|hklkc&c%uB%cDrXXp*}l%e#w;It{C6Bq@s!h5ixF`nI~sZgbR0mrVEoyc zaQBGK(I@r}|7hF|*>N%%DPLEs8QE7?O4Pvn(8A~kMQ92U%;d%VAuRUpFjtDP442Dn zZ8WiM6(f?=cALUYlB&-nc%zyKQ4QTASXtG!`z>djXeK|YTt+eN{Vye|4z6O!IYAJj(i1Qvt6(ZeOuov%oy*Djl zvaQ9~CpGoMz8+d((Af1nn;~jHl_s%q^+!5$ZQuuKTkbi7{@=YK-N@L6z*mPv_iYL064Lyl=eQAN)?M z*%>>3=^lqkq6T5dW{niazR$HYF2`)Ulsh-vVQ(04Xgg%I>6~;faM8m|G+&krDHYo=<_sdiL>Vr74m$NO*_CO5`6K)wWRyufnHC6(Jjk_)!|Q37 z`~_k8BlA-vKbN&Lj3EhoH_F+!iJxX!Jd^)}Cqf5`oB@ls?e)7E)Fp;22<;Q{e2$Op z4d9Ngb3U=bF7ud@{Um6CwjVR_wtM09_LITY%XQp~ab=||U@{-K`YrK<7t&Iw7(l7k z+OdY>;qi{vhbLtVrR_Pu1;HS((+pj~%~W5+mD(_TRxk&YZRL=oSyWiH&XW!S53|G;h8xqgpe;u!65jdze{xB!9 znYKZ;{`{qI(7Qq0gtadcZ3)lQCiE6lY@lEIEVYyC(^;xopPQ&`k`McN3~B=nFr8`5 zGx=0kUTFKtB1#$ksxarA%;9wn!)wCV57@jI2Mh-+2i$FE+$4^V#$wR|b?se2{&xJn zO>~pI@xP58yg7p!p4&Sy?#XCV#Cr$}=;dm!d~fsmj`ti(HFfjQuJYk8 z`L*Pe!tC!;;b3!QMsZFIOY7!{|uZrBHt1JgJ?$eyz;jGd|BiO7q9OA<3ccp3l zAi~)4WwC{|hpBYlwKE^-^V!NiY7tif=QT3%$Ewe9@WP)6)xf3UcIr>5>(vAq(h<7F zan!tY)22B^4yIFmqO`Pr89qD*Np5c*holim zHQ{3crV2KS@h2%h9o&6;^ZOq-8coBie%f?3rptP0J;DADm|SMZ-W!kVg*OKVwci63 z;t;VDgLW_4j}u+pg_0Zb}`!sk2gh1=xlL&i1%=Ao9pp%Y%b8`1_DNuO4ARWV~Zsb z@u)ID$D>Lb8d6;RYgzwPwjaL45r{HQ2F|I>K^ZRZzciGSxH_5(N?8@HsHAN?@H%aR z*nePUOBC4bb>JOiSa|CsmZ(fD`_KKZalbEJ^ITib@ zde?011?*Rp;Z(gi5>|Y&rp4^DdFg6&R3S@xm)t@Gr(Z>5u6teW4gZ^01$>}q)xQmH z#Y9DS@^ARbZ8@~ni(mI^z1=TIq!zlV5`-bfK(lV6cg*i~nWPd#h{hJ4!@CDfzrFng zh_5#5_qzIl(&%t^wc{KD zo_+Mbwt`8J9QQAU{kVJo6iqPY1Lvyrc6`5y)d-%4r%XHUFI&?1w z7;gJQGFtIup;6-mGyvGqye(A+Xu)qJjm!C@#m0^bEg!C|3mJzV?N`*4=x_Wv4>lQT z+>CJppQ`*ELa&Yplrs1Rk3@Hubl zZ2S@SZ|p2AED8?o{ZX-tKxa?F-|F0jgD}Tjt~Fm!0-@$uJGhG7yz*0?Ey45aUsXAQ=$f^{Lr1sUA2fa~wGn0NDqa)uZ>6ci;y z1Q7ux29S=Sq(z#c8|h|<8RFUa`>%7>^X{zmoM&FSSPO@J?|a|-itqPx5rY!twrA?m zDWlt+Ocp+67i@+)${M@304pTn4Dh7cW$9!~(Qyon97HP-5jrN#H;1EyV%fqHnU1vexah_Ztt99!z9OwjKl)FXL31~Y~5p7amEalSjFQ@ zoY^+vyQ#!M@Y085;F;=9+rv=fG0%$+5VwTJhUt^)QSaevlX9eaxl+B{82$#yUdQV# z!2T-3AUS(Kk4#!@+`>nx z$E5I-A|ITX_(5Ogu+3-1UIau}#Z~2Na5pJ*s+jCAC|fLrxo}hb>1T#?Ze6`4J`H=FD>@ zDhn@p$GFc8v-*`X>V4kj+cRj-P2J+=mlKhAhF*ov10k4&zEx$V>n*Q!iY*G0QCus$ zQ;GKoE}xnZ0{)ZeeJ1?4`;@dJ=z^0dS!p^WuzY1xgzv|yz2&B}Y|T7Bf(5&V#?}^QD?Cich-tmOYW=-f9DpV(UA0uz^otw@*gskLOQb7rpRpxCMX-No7 z>f}dZQGf0m(kBhErfVTJ?t#4SINx>*XGKcA6ZlAet&>+j;0=1VG16dz7B|m*HKZx_ zGi#>XWvv?2wwB*Q?#s;UnW*8Tz!PyK$3lmyakg<&JIRR_k8EO|#-Ca(xWG{-M<1(V^9@cPYVl=|4OfyGE@;fvnsEQ-on!uagF0=%HJ+~ssL&dk{V?ktW-Vu!dOe`hBoB5Aoh zW-n5x?RUIbIioy-1Xkq+WKQmv4P573Iy4X6J`#>>TF{SD!-VN{GzS|yv{=+p;ih53 z+P1uQ@rFVwDX>RoyCQ>SS<8st|wQZT?A9xBxD0ZE}43h6y$*fUR z6s%$D`i7&2g6(oq#M^8sGiCF*8_-8$F7T54~|yt{c&? zFkZtw@u0t%)*WvI`B!(7NR-VO%>;)~tYxj`I|-nhSe%-E-%sCSQX1IVJMo#~;31=Z zP(VMz@S?3g8$OVzIMAo0bk$b53}JV^Qc>_i+hD#dva}N6psQjpzXdgRx`@H@75Kh( zb_94r=7wJD#eQ5hn5>t2>w2*uvBRQhadZ=2L(np+cqF1e07Za?a9wx5RJtW6{U+4B zQ`Ch=%Yb5&bU&)OyYS+p2H!tvN$!&l7>xWeG1-y<|N6h5@KHvJtv@>&<(>w?cBtyi zZ=5^B$E^QF)LKeLq(dUjbFT(-riy9vDEZSOY8C(elKqYUg#{WI{ilbI`2R)&dPkxl z*=XH@7#C0ul&YRNJ{xCTFSPzW0i-b|DBEur3Hy#yq*D(2ZM0MUe2@aM5pHKf1?xeP z7K6aT^_mCPQ>jthjmSOD`?-!PR#l9^-ZjWe3UO{Uw16jS5@Ki?0}(aHX+Hy;%agep5wubRL?yb_y4~1 z#>{A9ns&JS^rQMs{q(oWRsn*;_tI%>LtaR6cIWmnKBX<79nt1VBGKKdVE3i1A(4QK zxL>D4Y8tz3(*xg1N@m?XrmBkDbiaC^uglJ(?gbp&G-(QMG_STsxpl7eruJ5Y&r|N- zzuz@o>uq-@HW5&7Oa%&xh-R$h&hwb^*Z*a0E(2V==OMU`G=tSX8d#o56kG? z>y&BS5+2^#s$9F46Au6pzB2J}Pms9FNQg=|=~|)%2(g~sq&t6zHc8-^9wEp}+{U%L z^}9x$j~_UqG_vaStp9Uddjy$zSwTR)QoU4#+ej+id4fJ zn(w|mibU2?@V#PcF1+3FZm5E6V}1u=R1?S!+s#Wn*qB)Xidy$v$Hmj3>qUTM#B)LA z=2B$~;9R#W%Z&Z#p&h-ONvqy#nC;$+-)rO5nS(|%?w*^(E3J21Czbo7 z?`vcTPVNlnX92dUTjloaAr-5)1|L>fRC4OO9a_(DN7UjuH9FOmV#x{5_A0+}qK(F^ zO%^ltH}zHa{3my=B^|*XRxp}PvzFi-=r%&y>N5kZJW{WI1aVi=_QHR)#C&S;&s%Y zzWDQrWfJt$(Mt5It+S;3XXa$*8YWBsS%?~Tnu9BfJ8nV3(8!1>ew$2&hQvVb8_6NZ z0}vIb+&JX%9MEEWAU~}J_(fJSt}Yexxv07TE}A)R>Y=>2x-Qq5x^`3aTUwa9ToLISB`TU`goRVO zRCn(Kx*_1O(QT*DrC9bf-Wdz1v`R7b?DwDUDq!~$-GV)}axH*t?-k z;Sr-k$9_op#@HGMd<}YEH&yN;h$poTl~-qqLB|JiAc5q&IzV3WC(0i?;mTm!3?v8l zLM{n#DdccX5vPxjmaULp%XIMlOOIKP;oIMj^p{0?m@z$d(BqG7n3e1NPL`7h`Fxq! zEmVfglu+XCgK+x|evO8G0gVxyf#6LBhHksLtKj^lN83`O^a48XGdwO`^Mf9h&V}DT zA-I(u_(p~kU*3HWd-!@{O{^w=dmJUtIGnDcp7updCtXI8ajDaYlW4ikFN?T)IaOjmA?E9@>FhDomECC$mlxWEg3&3hMLkwd(#en7H#aM0@_drDejTG?|6 zwKB?H7+B!iK^>1G+ilw)$hnvJ+tSj2*3OqY6L;Tpa*!}RAHjE7eZz5VyH_jA7f7I% z-v~%1Tvz=rdXi`xIF-+u{v}`9mDqA*QC9skm@_u$1vC>f$r<1$>MEvRLuWHM4Cnlp( zZV~0uJ~)(P?7>=mOk4KCG2Mvl1{lCb0q*Q%!9Q|`TDXVF^V3d=*-nZRNlm~}(rNoE zg%X3`vU1FF#68maPe+o2fRoU2jws=+Stnf5vnNxb-uHe4@6B$!N-19u{jXW*V$B{mx_l;ziV#LemX=qUC!xjM|$TV+Y6;& zen0>>$yOgELU?p#-SGFWbjqzM-L?|KEw%>tr>Ql65mNSYTwfBpzK)56o+{#$6Kc3b z>Fp#m^4y;hLqRK$4}$rhUd3%o?d*R&&fx0WObkA1)4AY;MxaX2EN@samU!>JuiAI; z7Aq9%X2X%?<;s5`I9Il4*iy@loPD5B_TWz^pgY-qI32vE(jPD99DsKab}@r1x`9D$ zjTKLI4x;M)cB|ZO(y}vk++XIsJwHej)7ePJ=Y7GiQvTnjKnr{p9|lSB_`GV=u;~3U z^%!4OK(vdTp1;FZXI>L&D>xXrfPfE#O|#uS$aAN$`N=B=AiXSaPCm9U&^RTk+)abH z#E-=Xg&Q56ifRyUe(o=mm$r5y?cBEz(rNI1@v&6q8TS@VN*uBe&I7TWBErQ~Ngg2N zYMtbvOt;yH)*T@i&bWt`3P%>2dgNo2f7l){KO!bP95w2zgywY;*0d~03{(UM*eKFUB%vzqKobL~6-c)~;hd9yHQL-o;y| z|AJ1iR8ia<+ZOA#Y|?vN6>{`EQ1z5QFi`*KPN!5_`({Bp>v@HDeRyC)MjqnGM#^(5 zJf4}!djKpo*k1grkV!t6xdybys(RtO_k=fQcQM{iqWAu7!VNS>=@NBOvk}vp-I|NL zMW;)~{QP$}jxo{n4M$PtBpdwj(Yv!Q-~0pGR!bp_iKT(D1b@C8CY2gRQACJaX4R%R zaCi=<3x6dH=0PVIbbb(T?U0ZU9`9pD#_d~kRO|@ZAU(nXR8$tftU7Tgk^Cxd*P{~s z!-ZOXW?>v_9Y;QN_!dIu9BBQRZ&Yx9cVGd1YqsbiwqDbrCwE^+osh zPWGEHFo)=x-A7?mORi8$q1gxV?d&S&2OR+AnX`=^A<|7$yO0_DU>^IIo8 zGDKZ8*rHUIn`RDk9~9xl6k{b7fK_hS1lu@y7z@su;_nx( z(q@Ri|L%2bt0M*yi((=2O0^6$31VA7BHf@>b+{j_E1|MFX~uu}c9_4}At0bNX|knI z%R-HKuNzAa0~~jTk9=nA5%xH3Ij*PhQ_lPEYMJ=V`t>?_w@AT0M|b>$X%4mfA|g4m zLpJQi8-|Rm?9X4@zTJK~00u+~auxHYM<#wtZ+~=XRIjo4F*bXg${cahwn7?|+n z{Z&Y8?hgu2XCAqm_RD*$pO3k~=YWd+kbcx;Z*e#yUDwB#L23Urwli|;r!+6*cTO0- z1la~>G9K)LyakiKafgd%My@55Qd#775@I)F}LLq2VJb!`{rpJIW$GWNW)? zk08Cz@;W}0W|YsCBDiRRPeE&I(QAn%O+OKJ5g7zUtu^EeFNogaUGMe!FXu)sXr`9P?6to=@hT!6y+47@3Wczq@ zRQuncTS0`$kAVk4mmZmwH{{Vu<`Psvj*Y5%RDOcc!nE98tDHBLefvnxGjj9;qM?4} z=*v>^E+mK6bse-j`|h{#E-T!<5%T~!_`UGH`oH71Fw#R#z)db)?y5DuOxGfsW@8No zzF1>8UVKJ+C=Nrl#Ql-e?F{^ZLEzuH&3|;Nr;T$MDZYZ%yk0LwLf=Jq??s%Ov4#aG8s294p$=H4K`CWXY0)={sK0Dt=6YY@ zLw@o&tag$C)>+W*y=5XZZ77Z_f$eUI-uv46j=0;;@8-p> zTFNP>eTk*P8_gDj1S_rD)M!MNkfMAxti{erVUPOvdQQrWwfvV)U6k%|1wo&fFrno& zX9GSZ{$_0T_*{P~qjF%UVJz>}luYN0zpSc&ADJOaE55%Ga&T~{5_YfkGGAtci){FZ zxwKdukQ+)GH=Bbsq;iLKXEwPun7I}s?9yBYqHbr?idodOenKtUY1s}LlY_{Gp^y34?4DX^KE z9_5RTGf~;&=KT;H*KkWhJ+hL+v$M4ay~iY>NTTasYWVpyRF=`<(x` z9Z8gfX!!iNlfX&CZSW*M+H3q_PR>dzw5YSQCbX($|LdZqu2aT*CE2^i;IB!pS8Kf$ z_ry;T0YleaW58T<8ql=+#+qdGUmZm>_|#_iBu0wKaqWbP%7WnttJqv6ru~CkuW4+v zHO7ATM8Mm6<`bEEZskYPaZ#49LHhEWwTP9io&$+b4PSJNHWUL%FbseVdW&LDQ?`_# zl}CfjSw-NBPc*a=*>YVX`1#qUGU}GZX|D~0NnH7c(t>8gJT&o=&$b*nbFY0dZO*a$ z(mf)V(sF-M(#p7*uMQx4N~Opg7HmfEevpS0g00Fm*)cD~|E{qX+Tgo$O+1y-+sqMK zcf%AxetB|)&fPh{Kd&>Ko+-5mW`RlkutKXL2{?M_T#0fO>=-a55X zNNbr;$d3vnF|VR2vfj^Z6EF&$1ka7y90Y{SU~4_l)wBL{3uAQjV#j&pBr~KT@VR`p zdtR{j#11_^kUnlo0F=?rT}Ac6=sMYUQ&poAp|}u=!gmtROug9 zd?%HMEf=F4&SOxJ!B3x3kK ze^EA$>U|?+)KOKJcxSaQSw$AzjVf-6Z3phfI^~g|QS_91<8yu;W-*|?rEp7Wf`iNI zS}Xtn@N$LI6vP;VUg0VE?2poRKrrrqr%!7b)=nvBLoPZGP8)ewj5Jp@>?|T*%d$w9 z<0Q>WvgV{j?0BHdx#`c0GkZ?%T#)d8YXF%x1wEzY+zkXW!mxBM<**Aov#SVGzE?vopRa$1p}iv4T}q;+BhRZ3}vh#+=qcN3qcNJ<3WitVP5!s>Pvl%2 z?rp!{3P{!ltDg9ssF)jbCO-sE^1L){zP{k~DgVrnuOz%q+k9d~uJv;)cO3<)i$k`d zY(A|Ycfxm*_|s-Hsa7=$z4Z87SjwCQa#$9arF8l^e$yY^kW1W2Y+{Yxefy`czJqwP zqdH_y)+%_$&Lw!p2W74LBU9LC|2ge=w_@7On_7162fjJUbd<+G=?K2iXC-ySgwxQ+ zdAa2Jl?OpNr|dJ*}Y^ztUhAR9WAfL@BCG!C)L$7_Iih2 zj`0nh9FioLdMuq2JXZ@vcG9}gO3er5Qs#}G&Oh`j@rTCyTd|Z{iO>2K+4pC-23m3O zz8&fHC zvF0b;n{MXJ0NQ$NrwORJnxJ5{uiGw9LY5%cwz~vQ`N@tm@x`YlC@kwl9aNJvWV(K* zVYs93)5D)Laq)Hvhrh+#K3_9;*&K=TwE!i{)^zPx`CXgenX>3hi^`WDE+|X;;~09s z{Z|y&GIo_#XYU0_mv4Xk5Ip-=?yXw!>-#AA%rdxP=3asv4^jfCr&@~~XX_D zpespklePMQpErXT=mRuM^t&NFz3`TTVIR37RkZ$`?J` zqNvN#=($QtOH0E&4VC18qWxJlZpVe`iza6PUkXov=kM#H{3Gy%r7*uF*EACK(!Kr^ zeeb!U;YZTYa9>%@N55ZBOFi5`2%$J9+VQ0>-f`2*)Ut#YBQFL@bAV|n3Xop;AtRfuAllr{U=(^=ns$X54$nz1r*&*9E@Hlr&zzk-Q;Gp@9L5$VyNt>2-l^`fe+}YsAn?7JGVI&8{AE30FYr^ zL|&i&UAU6czGC{}xt=rt8p>GF)qIVIB%dN!(ik>R|kMP~8DLrahOsi)O z-KO79V>>_<)nZu0jAi+e!eru-&O6P>>{Em!4H9nC_+)u8iKcYx@>l?EwvT)0NI+-# zSb)HmG=~&dx4!TZAOG-J^Sjw%ef$6^G4CfXvif)Pgera}LgB00s^apTzAwxJJnA>8 zIRCu!de{=2h1%7KzKp^P+eADFRbwl;FLOq>(2+#$jk-Q&x#97aVlak=jp#^v8$cCj zXsupW(i&Lrzpt{5BT?}bv1F%3HP!oWzq4tJ>Sk&>`Zg{VtM|49Xe@dq0694Stzd2x zFbbgZLb^9a-Uj}9n4w8@BZ#HFo!ershk3L3WoU?);fola;L%8e_2+5L8^=fCOseJ2 zPVU?6-0yHeC;@2PIku8V7J&?l(t-%4l_Du^E~RLsyRvrjMD#a7((o$uZ z`4z3~mLo%f8!}EM!u-Y#X_^z!T}o~`+GX#ZZ84KVq>$ykGdr4euD3B5R8QilksMRF zI9CH#v!~7{Su)_!S~fjvEBa8-S%5-zf0p_H69hH*TPrt*KO5NC<>fe`Bc>(xXC?x? zv8|WHKHgjrNy*`sA~0^%1;M1E`cT9NI`N0pD3nsEt;&ES^Oyx1X>{kn9KZiVUPidT7WY_6(Md54g7MJba?D)*I%edT(sU2-Et{5Y z5j4$i@|2+C?rUrwR%#uO1{mRo{iVOGlTlw+6xJpfa9Tbye)BzcvT5k zL*H;;^tWkjEUb%ia)1~Iw;kL#exP;S(4A+5*x~kcR{DgTtDT4K^Z&M}o4=|u^Qv?u z+kf*t+kNe?BCxlzDk8;-kbrFSCxT8h(cuO=TZ)CT*6y`+ef&*|iQfd03xoufdD43l z^F(Z%pHUX|m&R#9y+R!r7!9*8QMb+HQb{Yf>N*Jnf6u>is>>lZeCnY#Asq7V)R zksPbkB9O~ooE7~p{jk~@!II?PtwkSRK99^Qba{^95K2Ep*bn1ET?qKCdEhxKa}~k` zRwpq3G->$XD@UW)r*yQvq8sgQY)1m8sJ4D)+CWyODj8yc_JC4T7e>up{PEjT6~DMu z?jw>V3QF*sgXY8gko1iJk9Zyc55HtW*eGhXq8SMcPCAz*$ey3}F9yYEol=HB|0C0& z*qh??ocxrcjmc=US)MjU!dp*?M(K5V^Q*!|2IsOwStS}EM6n22wojGly}1`nrDGWW zwE2~OX-}=}7xO{5Io;NE|wCGJU97DVCYCBcR#Or3o69rt?mQGH4GzB}ETa9~! zws{;u4nzZMJ9GJiBi*QK>6&8&Bg0qec zrWo*$w8;7Ie2QkL-_vA_I1;pWs6X%scCMZQhj@kw5vx-Ea^fkpsk-rv^D)d?B+4^* zr>qukt9%PsS5NHn@&jeAHF0Ob58XBs5m@lBX*#QCeCQ_m3~+icFNZQ(4Y`DUqefOO z{ES7TMN5xcXOtbUu35|xe2CW6qnGoE@v(Zw+AYNNZKoTbuamg$|2^3V`+rlQo!5mR zrd%%XebEWQXeWid54R_E{Wtt&J9Ucr9a%g$xCS%-rLDOBWXtWMNB#r=SR7juJ>3N0 z7E`YP3HMM&)EBz}nIPvr*4>jCjsbT)TsB=}F`HDQ%~XB$a#q;&=S#gxhcN2z3&Fp6 zlibX22OLGTO5d=2u~r!{&r+{RHGJ2}4#&;@s|>G4hx zMvMZ?1MXgRp zgC#O`E3=(VBTCUTs0zKJEe-nLDrrGsDg7exiz(zSep?{CK>r=xqG?;?nxO473b zi&B$!qK*6bHhsl?_?~nNe6gLoX0^Qvm-%;eMj-j@zHRPsu7s6&PDRT-V!~sk*`!CW z+aM^p$WhWE+?%jNUNCF^KFTgSQZ>K?(6JmNgFcrADl2{hW)+bM2@o8FozFLrnZB6m zOf|B)I%tn17D*KApA7CV!9I_+iyRF@HohJ6ODL6l*3o8026b>RVp7#{ZCG^j% z0|W;y4D2hX-(P;VzSCeoCd@|K`X_#=$f{|Uvoj{t*mWZ}Lw96h)X2)tLe+fE?9_o| zM*V5tLvIMr^Z(`rIV|A~m6-fg@99l^^fK8%2{J$R`k>Zbw7_Z^db+nzmR4eOJzT_X zs)`0uh%7R5+_amlaIOlz>BDx1-s|YwT09F_@%G1hZjengemWaCio6_&l|9J+`;x;#u zJMaNdVj!h6r4`C~DLPC9BK+z-{{r&`&;B(*!Nczmr3xs?K#Z>J&_#jge zgX`rv@#98<_Scee&m|aq-X*bFe~ryO;9c4eP4e zgAStqfLuy2B6R8Hwr8Ol`kOxDHNo%X$$P-&^b^!AP(QtYdXURTiou;5O(pGM{L4mA z&kv_wS3;kj^KsX*j#)m)L~kk9(~{uDM}>aRBpHSROb` zU)SH)-(z^mGpBC+cdv1m!B@r!a&JL@;=@|uvXAgAC7(6XL=6?_GSt1CpvFF33fju*p&)t5 z0EJ6?$;DJ#)ca2K$5joZQNbQTrlBiq0|JJ{ra<;bSV*KOSFah|&O33WRH`tkn<}r8 z!OxSt{l@Or@G5NWC7p3qiB!xZW8a0b`9q~gp5WG_FGd#E!&!hW=oT;bODs6=CcPO# zN=3^*4Eb{4gcc{&i*XgUNG-?UhMQ!SA5@ZLA9AYie!N44yGDg|V zPwzEy?J3AiN7y!W55EV$@5+a$;*GdHjp1tA6VhJ6{Dk~gEOMGs^!cy(fNp{EYQHjC4rSTAAP6Jg0>GnzrjB zbrWSmajpiqmu}WEx?7R%;9-aROI*kvb3i%vi+f-9$3(}I@nh(K_i`fxP*Go4rov*u z$Rb^JDN;B`q9Rjt33-80v7Hp47Zv~aIZFBesf_-A159=u7yf_LuU>Db|HHwUue6-p zrnEAF(o)JlOu9Z>|M{!Ph9*qoc)n-Oj@h$&Pu)*P`tCUm%o`_kq2NKw>kPV&RaD@@ zc@p{B3MwV27r|TlkH#9$gRVj9m8wu6;xc?=-2+tI=HLPylU~g--^3~}4+eN)!zk9}?M}DY(Og<4;(rcPHt= zs?mAmHM08WRnXA%^z`Qk3JO+$cCaBJ+8D7Hi5Gnuh%46qvigQ1V$#taYZjy<0zU9R zTC)+F2biEkpF8ba%2xZDxZOEwvt6C&mse)|X5AG876(P$Hhmq;|yfN<{Vs{9SIx)*P!$8(OrNP{&Q^H`%hzY-u~O)sN{UD%8-yI zY`ZTdpKAB6VUsoSTJ5TZ_0l{1l-AYYi=xV7C1XL*PauAk@X{~tq9)jn@aECx4=uPF z??jek_D0IVex;>3mMQX=Dl8CKuK8J+?l0S9yVE_ovSQDqXf;2W$w^OhWF|a&Mlae)fg$y_)Fjhk|);qQFx z@7C9G)6LN01a9$v<2X2^J(B>bp{DctTVQ{HK+ivXIF`-5zMyNYG@_y;nM*~6>^Urp zqV5VnTmz@>*NUS8h73@x5?8C4nc25{Dr1Ta#-$Iip^DMaNd`9yV#`CZpvCB8kE9Pm zz?24luo7aMi8#g!5a!JhZ^!#aWkf=JvQcy=V;LD+j;WclRZ~q^YXf6rCmhwAO^71i zGX0nZI~!l}zm52b9hjNH-E&P}uSA{g#Xi544&M*N;Sxp3;h0Zxr*WNsGQs2MCBcH5 zmA5&^oBGN4Lu%hC70*gD{qkitt7@=QGZR0yYpceK)n|THn!g<)RRuKueJri3p_`$G_sHlDri0}q)VVD z^m4I{p-%4*D3AbEpJ-8&QG5h3qXdKSDeR&(qi7Fd*oKg4 zrbb~&CMvyy1pG*$-ef=j@W-1r(#HzJz!k1vIrl$;OF*>p{#n9jJK-gYm-gRc$@#?YMfMBB z9G`=@6*Ulm|Dwi&86@LLAF8lgk|}FjHW(%y;Yl?GMh#p($}0ghX;gzG+F%yx6M{5d^6Or>8&GcC;_^ zH$vDQChmj%WArwIN zW6ZW8=|rvKza3PH2fu5Hk3=(THBJhYasR9P&Ts2 zl!qH-p(%YF2I?pbV5l9ZE#WC`s7s#W(%@$2CeSCwP&c{A`Ecn{OcFyTc8HW1x_5?N zDpe?~{kXYLB+wIgNhc?TrCCH=)@X!(o3ehKSWRSk@85EFbt}CgFLul5CVV@1oLsq3 z05yz^Gabv>p;UrypKlg}otZ(FHeHZq1r$xhm67%i^KAyJ%m?ts*LRg ziZN$BEMjw}`4r}NVP`FEBoUGt2DBe(K}Gsj8N?#rJ_^(*M4SOY-~9!lM|;z#B^R?6 z0*