From a04eaaa7790cbfeb9a64037c59e32062b81ecb39 Mon Sep 17 00:00:00 2001
From: "B.D. Murphy" <161863146+bdmurphy73@users.noreply.github.com>
Date: Fri, 6 Nov 2026 08:03:35 -0800
Subject: [PATCH] house: add multi-platform build infrastructure
- Add MANIFEST.in to include utils/ and setup/ in source distributions
- Add utils/build_all.py - unified multi-platform build orchestrator
(Linux amd64/arm64, macOS amd64/arm64, Windows amd64/arm64)
- Add BUILD_LINUX.md - Linux build guide with .deb and AppImage options
- Add RELEASE.md - complete release process with versioning (YYYY/MM.####),
platform support matrix, and release workflow
- Fix .gitignore to exclude UmbraEdit_Projects/, Inner_Demon_1.2a.docm,
UmbraEdit_deb_Build_Script.txt, requirements.txt, .DS_Store
- All source distributions now include build scripts for Linux packages
---
.gitignore | 5 +
BUILD_LINUX.md | 149 +++++++++---------
CODE_OF_CONDUCT.md | 0
CREDITS.md | 14 +-
MANIFEST.in | 27 ++++
README.md | 49 +++---
RELEASE.md | 157 +++++++++++++++++++
UMBRAEDIT.md | 2 +-
UMBRAEDIT_UPDATE_PLAN.md | 4 +-
setup/macos/build.sh | 6 +-
setup/macos/umbraedit.icns | Bin 0 -> 135559 bytes
utils/assets.py | 2 +-
utils/build_all.py | 303 +++++++++++++++++++++++++++++++++++++
utils/common.py | 5 +-
utils/docs.py | 5 +-
15 files changed, 615 insertions(+), 113 deletions(-)
create mode 100644 CODE_OF_CONDUCT.md
create mode 100644 MANIFEST.in
create mode 100644 RELEASE.md
create mode 100644 setup/macos/umbraedit.icns
create mode 100644 utils/build_all.py
diff --git a/.gitignore b/.gitignore
index 7996b811d..271132036 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,3 +80,8 @@ GEMINI.md
# Added by B.D. Murphy 2026: exclude files accidentally committed during branding transition
Splh.jpeg
Oldwelcome.webp
+.DS_Store
+UmbraEdit_Projects/
+Inner_Demon_1.2a.docm
+requirements.txt
+UmbraEdit_deb_Build_Script.txt
diff --git a/BUILD_LINUX.md b/BUILD_LINUX.md
index 13f30ef7b..6a0671bc8 100644
--- a/BUILD_LINUX.md
+++ b/BUILD_LINUX.md
@@ -1,116 +1,129 @@
# UmbraEdit - Linux AMD64 Build Guide
-UmbraEdit is built on macOS (darwin/aarch64), so native Linux packages (.deb, .rpm, AppImage)
-cannot be built directly from this machine. This document describes how to build
-Linux AMD64 install packages from the source artifacts provided here.
+UmbraEdit is developed on macOS but builds natively on Linux AMD64 and ARM64.
+This guide covers building Linux install packages from source.
-## Build Artifacts
+## Source Distribution
-The following files are in `dist/`:
+The source tarball (`umbraedit-2026.11.1.tar.gz`) includes everything needed to
+build Linux packages:
-| File | Description | Purpose |
-|------|-------------|---------|
-| `umbraedit-2026.11.1.tar.gz` | Source distribution (sdist) | Source tarball for building on Linux |
-| `umbraedit-2026.11.1-py3-none-any.whl` | Pure Python wheel | Installable via pip on any platform |
-
-## Prerequisites on Linux AMD64
-
-Before building, install the required system packages:
-
-```bash
-# Debian/Ubuntu
-sudo apt-get update
-sudo apt-get install python3 python3-pip python3-pyqt6 python3-pyqt6.qtsvg \
- python3-enchant qt6-image-formats-plugins qt6-svg-plugins \
- dh-python debhelper python3-build python3-setuptools
-
-# Fedora/RHEL
-sudo dnf install python3 python3-pip python3-pyqt6 python3-enchant \
- qt6-qtimageformats qt6-qtsvg python3-build python3-setuptools
-
-# Arch Linux
-sudo pacman -S python python-pip python-pyqt6 python-enchant qt6-imageformats qt6-svg \
- python-build python-setuptools
+```
+umbraedit-2026.11.1/
+├── pyproject.toml # Project metadata & dependencies
+├── UmbraEdit.py # Application entry point
+├── pkgutils.py # Packaging utility
+├── run_tests.py # Test runner
+├── setup/ # Packaging assets
+│ ├── data/ # .desktop file, MIME type XML
+│ ├── macos/ # macOS-specific packaging
+│ └── windows/ # Windows-specific packaging
+├── utils/ # Build scripts
+│ ├── build_debian.py # .deb package builder
+│ ├── build_appimage.py # AppImage builder
+│ ├── build_all.py # Multi-platform build orchestrator
+│ └── ...
+├── umbraedit/ # Application source code
+└── tests/ # Test suite
```
-## Option 1: Install via Wheel (Simplest)
+## Prerequisites on Linux
-The pure Python wheel can be installed directly on Linux AMD64 with pip:
+### Debian/Ubuntu
```bash
-# Copy the wheel to your Linux AMD64 machine
-scp umbraedit-2026.11.1-py3-none-any.whl user@linux-machine:~/
+sudo apt-get update
+sudo apt-get install \
+ python3 python3-pip \
+ python3-pyqt6 python3-pyqt6.qtsvg \
+ python3-enchant \
+ qt6-image-formats-plugins qt6-svg-plugins \
+ dh-python debhelper python3-build python3-setuptools \
+ python3-pytest python3-pytestqt python3-pytest-timeout \
+ appimagetool
+```
-# On the Linux machine
+### Fedora/RHEL
+
+```bash
+sudo dnf install \
+ python3 python3-pip \
+ python3-pyqt6 python3-enchant \
+ qt6-qtimageformats qt6-qtsvg \
+ python3-build python3-setuptools \
+ dpkg rpm-build appimagetool
+```
+
+### Arch Linux
+
+```bash
+sudo pacman -S \
+ python python-pip \
+ python-pyqt6 python-enchant \
+ qt6-imageformats qt6-svg \
+ python-build python-setuptools \
+ dpkg appimagetool
+```
+
+## Build Options
+
+### Option 1: Install via Wheel (Simplest)
+
+The pure Python wheel requires no compilation:
+
+```bash
pip install umbraedit-2026.11.1-py3-none-any.whl
-
-# Run UmbraEdit
umbraedit
```
-This installs the application as a Python package with the `umbraedit` console script
-entry point. No compilation is required.
-
-## Option 2: Build from Source Distribution
-
-The source tarball contains all source files needed to build native Linux packages:
+### Option 2: Install from Source Tarball
```bash
-# Copy the source tarball to your Linux AMD64 machine
-scp umbraedit-2026.11.1.tar.gz user@linux-machine:~/
-
-# On the Linux machine
tar xzf umbraedit-2026.11.1.tar.gz
cd umbraedit-2026.11.1
-
-# Build and install locally
pip install .
+umbraedit
```
-## Option 3: Build Debian (.deb) Package
-
-On a Debian/Ubuntu-based Linux AMD64 system:
+### Option 3: Build .deb Package
```bash
-# Install build dependencies
-sudo apt-get install dh-python pybuild-plugin-pyproject python3-build \
- python3-setuptools python3-all debhelper \
- python3-pytest python3-pytestqt python3-pytest-timeout
-
-# Extract and build
tar xzf umbraedit-2026.11.1.tar.gz
cd umbraedit-2026.11.1
-# Build .deb package
-python3 utils/build_debian.py --distro noble # or trixie, resolute, stonking
+# Build for Ubuntu Noble (24.04)
+python3 utils/build_debian.py --distro noble --build 1
# The .deb will be in dist_deb/
-sudo dpkg -i dist_deb/umbraedit_*.deb
+sudo dpkg -i dist_deb/umbraedit_*_amd64.deb
```
Available distro targets: `bookworm`, `trixie`, `noble`, `resolute`, `stonking`, `wilma`
-## Option 4: Build AppImage
-
-On any Linux AMD64 system:
+### Option 4: Build AppImage
```bash
-# Install AppImage build tools
pip install python-appimage
-sudo apt-get install appimagetool # or download from GitHub
+sudo apt-get install appimagetool
-# Extract and build
tar xzf umbraedit-2026.11.1.tar.gz
cd umbraedit-2026.11.1
-# Build AppImage
python3 utils/build_appimage.py --linux ubuntu --arch amd64 --python 3.12
-# The AppImage will be in dist_appimage/
chmod +x dist_appimage/umbraedit-2026.11-amd64.AppImage
./dist_appimage/umbraedit-2026.11-amd64.AppImage
```
+### Option 5: Build All Linux Packages
+
+```bash
+tar xzf umbraedit-2026.11.1.tar.gz
+cd umbraedit-2026.11.1
+
+python3 utils/build_all.py --platform linux --arch amd64
+```
+
## Project Storage
UmbraEdit projects are stored in plain folders with an `nwProject.nwx` file.
@@ -123,7 +136,7 @@ umbraedit # Opens the welcome dialog
## Version
-Current development version: **2026.11.0003**
+Current development version: **2026.11.0004**
## License
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..e69de29bb
diff --git a/CREDITS.md b/CREDITS.md
index dd60a35f1..13fc6522e 100644
--- a/CREDITS.md
+++ b/CREDITS.md
@@ -1,9 +1,13 @@
# Credits
-## Main Developer
+## Main Developer novelWriter
* Veronica Berglyd Olsen
+## Main Product Manager / Developer
+
+* B.D. Murphy
+
## Contributors
Larger contributions were made by:
@@ -18,7 +22,8 @@ For other contributions, see the project's [Contributors](https://github.com/sag
## Artwork
-The artwork on the Welcome dialog was created by Louis Durrant.
+The artwork on the Welcome dialog was generated with AI by B.D. Murphy. Reading print options through time.
+UmbraEdit icon by B.D. Murphy using AI.
## Translations
@@ -49,8 +54,7 @@ Translations of the documentation:
* **French:** Jean-Michel Heras (Karduin)
-Translations are managed on [Crowdin](https://crowdin.com/project/umbraedit), and more
-contributions are listed on the project's Members page.
+After the fork to UmbraEdit translations of text in the program are done via AI.
## Libraries
@@ -124,6 +128,8 @@ The font used for the main UmbraEdit logo, mimetype and text banners is Pridi.
* **Pridi** by Cadson Demak (Open Font License, Version 1.1)
+--> Caladea <--
+
## Special Mentions
Additional thanks to John Blommers who was an early user and who has provided a lot of very useful
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 000000000..032bee87e
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,27 @@
+include README.md
+include LICENSE.md
+include CONTRIBUTING.md
+include CREDITS.md
+include CHANGELOG.md
+include AI_POLICY.md
+include pyproject.toml
+include UmbraEdit.py
+include pkgutils.py
+include run_tests.py
+
+include setup/macos/*
+include setup/windows/*
+include setup/linux/*
+include setup/flatpak/*
+include setup/data/*
+include setup/appimage_launcher.sh
+
+include utils/*.py
+include utils/build_*.py
+
+recursive-include docs *
+recursive-include i18n *
+recursive-exclude *.pyc
+recursive-exclude __pycache__
+global-exclude .DS_Store
+global-exclude .gitkeep
diff --git a/README.md b/README.md
index 759791bdb..1af88594a 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,5 @@
# UmbraEdit
-[](https://github.com/saga-soft/UmbraEdit/actions/workflows/tests.yml)
-[](https://github.com/saga-soft/UmbraEdit/actions/workflows/syntax.yml)
-[](https://cloudsmith.com)
-
UmbraEdit is a plain text editor designed for writing novels assembled from many smaller text
@@ -13,34 +9,26 @@ for easy organisation of text and notes, using human readable text files as stor
The project format is well suited both for version control software and file synchronisation tools.
UmbraEdit is based on novelWrite 2026.02 by Veronica Berglyd Olsen (novelWriter.io) and is
-licenced under the same GPL v3.0 license.
+licensed under the same GPL v3.0 license.
+UmbraEdit is based on novelWrite 2026.02 by Veronica Berglyd Olsen (novelWriter.io) and is licensed under the same GPL v3.0 license.
-For more details, and how to install and use UmbraEdit, please see the main website and
-documentation.
+B.D. Murphy is modifying the original using AI to make it part of his Umbratools publishing system.
+
+The ideas:
+
+1) Write the novel. Make it simple while writing. Formatting is later.
+2) Have the entire project together. Not the novel text here and metadata you need somewhere else. All together. 2.a) ePub, paperback (print pdf), audio all start with the same story text, but each needs something different. Put everything into one project ISBN, book blurb, search terms, genere/categories BISAC codes, cover, etc
+3) With everything together publishing is simpler
+4) The goal is to write (human written) a novel, then use AI to help with everything else. At the end of the process there will be ePub, Paperback/Hard cover, audio versions in 10 languages.
+
+For more details, and how to install and use UmbraEdit, please see the main website and documentation.
+
+This project is a fork of novelWrite. Taking the great start and extending it. I use AI to help.
**Project Links**
* Website: [UmbraEdit](https://umbratools.com/umbraedit)
* Documentation: [UmbraEdit Docs](https://umbratools.com/umbraedit/docs)
-* Internationalisation: [crowdin.com/project/umbraedit](https://crowdin.com/project/umbraedit)
-* PyPi Project: [pypi.org/project/UmbraEdit](https://pypi.org/project/UmbraEdit)
-* Social Media: [fosstodon.org/@umbraedit](https://fosstodon.org/@umbraedit)
-
-_This project is developed and maintained with care by actual humans._
-
-## Sponsors & Attribution
-
-
![]() |
- Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation. | -
![]() |
- Free package repository hosting is graciously provided by Cloudsmith. | -
<7hzND?pB_fnn4sx$4LrZ!2h9PGSV5j(r6dCY6GDj*hP#yZ=b}*~YI``lG%N(dP0q zV2_AzfLW~do~7Qj+e1wayn3(QFFnProv*dkE5K=G@MCBGn*1~5ZwFeF<}M>Ut^6kw zk5q~^kB-d96q;bAYo!m};v)nsF}$X9g#l8cTX-qiVd7#~@%lBQSGF3`t9IoxOolWt zCEqLi+GKP(6|cNU)Ou$3I0*-|XG#(;dWL!sKM%!&zVs5)eV9>e-4Ufc*<-G{-Fgkf zDoGF=iP4--7JM(dP$n6L>*_1d_f$~|aGgET6!hB^DB^A+XC57!X4SVCI-&v%N^>pK zqlWxz;vV`g(PtwVj(?zrfHZxyO5$5?PNsBM9KsWE3}pK%y^`q@Zhk(4fH3GWY2-E; zXSPu4EL-jt%w2oL$6R>_flvoj=`&FGUxaCH*lqi$ntA4X 4f0sHTd9g%MCfOJoY>ZpNrbEUO(31d;M)um@8$`*>s^(STF{0r%18ce?Am<0 zZqh4$5QfoZ0=rvy8c3*JQ@O*@owSjhW-b-CYdRRl-viu`(OQo#U}rfJY23_1H^6nw zejk&-AC?E>B3%96!)xC3sQMoeGK6aZg%DMvEQs=ix4seQ;lPnFjU&|u!#Ms`U|1M4 zY<;5KP|*_?bzsL z#|W0lz@=SF}=63y6B;N6p}Aq zK(}~ODr_xF6Iko04TY%ZH^^jGN}k;jXlCE?G&6B<>Ut+ght~L%TN8dAN@$t^wn{M| zY&_}mt-jFr$$+WIv5-&fbwKv#67sfj)0}t%$da$CaiKnG7H#hWHy$J!l+lDjpb5+p zkZ_6671$ZBx#1bLvV_k^Qf_$$q9M9R5M$i|Cz3Bb9y~HlsX)*i20NOTwJ&N?wx3GU zx*8=1meo-J79AKu=o41vkrMk$c;FL4X13_~W>?s8jgA^T@`^d$e;fYn57tI-(X(;g zndHMj+U{iD)TGDv)E}7|fIK;1?4n~T30Lb49sQk6tD()DIKcp^VWxLr;L7zAI|18U zIo$9!H|k$}YMC``laSdj=93SS&;|=KT+ZqC_}Ng;2$Ujhg;Vi-Lg&ZMeH;l6`S&A> z8EnfQDDlgwkL;husH)&~0nL+Ky0m9|Sh4ECXK@14@IUTc-@A2_0_;IH=%*aP=e*L; zs+HyFv9w3i*ZiXL!pdsp07J{$kR>{K7bB21AC3 utolOLKn@%YsP64i7=wWqfWI#~`ePS&Sgp5J1sZ)Hs`i-%(z#g7}$EXN to z(D{N>ATPRKND8ly9n8Am?eP>nE-JD@b-|>M4F@3?zM+t{%lUc-Hwk($x#~ubZxMnJ z0t B8I4tzxyEaAG*(b~&YjfQhO!m-XgIdBQH zWaLvm9NSxuqn nmx&m-eK_BmjU#=pb z;WtHJq-1~)=Br$VESdk9DfwBD2q O509!5`4^ zN3!?twPnM=XlF8n;o|o>O(1NNa$WMi>Q=3@g)3CwWWw;YR(wM=o@o`nT6*unP9i-? z_?-=qj#(N)e&P8JAX-~GqlKWa) X8ci!{#DgfS8&p (>91b2%6@4Jn2sN| eH|NcI`9&`^;TH$ll?|1=5D%||7*3k$k}?9ulY?a z>VBY8)JP%MB`3TJ&IUyeMcgBg(k6mDy}%@d_nbV)ndI5 {%emkP)qXZYmaV(a{@1k;Ub{czeh)kvx*0}KBa+Gh!XPp{(n>cma({RxIQ7p zmNtjyS{Lm;J2TU52;m7S*z>=qb88v`Sa!HP5-fk^&HvnYk=VKRO;7wlt@*d&jXakP zR-ybkz|^S!=7T_q1tNQrTZ%67fH@TZi$MYr5Al?8eif)tahP!7ArILTtvrgSw&pJV z+<0)-pUi|K5zqcV8{D}1LUs14MkSdk<4j@ej;A)K&t9d~LF9M01u&@*Mw*z5DIoC| z }`5B(DZ22|h_f1#>N< z&>D3}^v-e>+A8N$_uV&dSRk^uxa96&99tbW``DqR&o34%=r?RES*;U=a1e^@0ncw? z1{t~2_3#36+uqa3ie+{x_(B+VSE6|zVLZvDyX4_FExZ;4)rD u)ie{hLp$&S*u@!LdG=k@&9 pzTCvD z!Z!yx4h@o@4IwKl5Bi;~svb=Nt}2Ox;2;`S?iBTznjM+8Hi >Hn0v~&BzK?+{QN$>0J@DQhq=GlhEiTABWfJFp z(j0pIBiEjk>DQbOJU;!#texG#)!a9+el5A|V=&8Q{;2oV;#NTpWXQ}+#pX~Nj@bbP z0>V3iq*u5bjuh3Hsj<721&T95qpzZ{`W}p~VUt~MQA>Y_VY6uTu3hmkL*R8>21{iM zOiVJ)03wtvy`p@(=;FzPlC@EI>u-xk+t?ZVSer}`%l%4{MsM)l9npezaXUT@>fyq2 zw=rB}ng UB;J-`|+3Qib81hgN^$_)ZZJ(?)fvHi! z4fky7$X;jM_fmnAbO#k+>6d(40%H73kzb&SF{Q3?3g$hdaW5tE =u2bW2@lk^2K+gr^4sJVbUwm^J-3>Rm6ctER`au$h3 zO&K|hx~rUg45Tv0?pY%JAuvoEub-ZK1+OgIEkwp8-SKYsz>BipJ@Mak_s0krLV^$H z81gvEp>>}+N`{~Xr$>4aeC_(rT6$6-oRA5kkwYg@vn@q!4no#vEu_A;=u4g}`1*}o z3t2eU&=eF!Nwuub%PKY;o?V |#w=Zf3~i<7>89%};OdBT 4z5}F>>t7#=$)XT&jtZ8hSqwv~F z6E9r7(jN%kO|H{ZNSJ+tf?gv}-P{@oeaJPyLk_5w58hA6XzzXsjOn +7w^4umX+R? z qd0?bGLso{2JFfH_0X6rTkzKIG(c)L8k1f}Y9f~DfW2-tKl2znOv3{~u zRHXS@_^G!YHr)bw-GF0 =HQqH38-h*sFistf&_7zhlijt9 zFbp7czRIvPMxr^8r~c7OvPYR?O+@ETH#ffpU&qDYvwY 5G^h=#c{G|Q4 zyX)`gmM=0E-Qsk-;wgN;)?4=~b1prhTCbm5G?kl5#qTS&_^|CPZTYNdX`5=tsXRj> zMas64JL6C>?^DJGhwjiYg;z?BP2_C$jd|dv2o+88YDp1Nvy%cp#9sEtKyn^$*7?N8 zEb>9oGxo~$Sb-#T*wC$tE4-38{G>5U`WISWuHQe-=w6Mvj4N+8*F?8c>=V;o;*+Un zU~gU&f~U+scW**<=P;L9D82c`uy>A(E3I(ud1|!bN-Sa6vjCOS=T2ZxH?>p>J(BGX ze7~vHtRk!@J}Xz|B0WUYv(C*Vo0OoU?;JTVK?3&KBP>51w^c-Vo8@^d!%(?K&gs2% zd{eI!se4%%ABrM=#d^1xtyfBwnYUcNBQc$3LwK28fI{{RdF^IO0d4R{3w#5^QbU1! zIX^bHbwQtb-sEE1m+yF_Dem4s8gj`H`C4^pMV*7{Dedh=Wm=BohLl(%rXwD>pU)+} zcbRsy1tUd%zUxm+9e()a=DsXbcVG?f0M>)!6k1VH(VjBpEwQgfTUv6(G*n^+nknu6 zmY$|1;#lkq-{MjP`{MhMV?q;}woDuCiARo&mkTaNa2xO{YFUfk4IbR!_w&uV*1RUG zFCDJ>7^sgRj^&Y@!1ei=G`g3La-oO~mALjyyD(_Y!dkE6a_2J{xWC3i%u0nzU|Y>B z!Hwd8EG>8K&x9f;wwW3m;;AbIa`e7IK!h*r_LY}rRdR_^N02~SDeiLeRrwow-bZmS zu69$K)bGs(CR8pp5>qMDTh+6<(#Eh%jo;q15e~P^ZaW$_00P!WtTvIOOKx9+7~zB* zM>HgH(Qpst!p?q&Eegfwc6?N(8PspgHcHy3iDH=?=1?HQtKFNC+69qqXL$%~=1^=w zg!f7+x>A%NgcN?C_PY|{utrm-5~9}qv?#xuCv~W5c{!^>XEtyzaudE|J@9O+L}Y7? zZ6u%B?ztpG3?}O64-Mbv_CZ^}E{qUdZVBC^!D$#!P`=n-Abd${C^ ;RgHhRB6UE~tf#w3ECi}*U z!g7V=%uguFtoeH{kNdbiznbo%l9tDnGR3ij)+v~e_M}nit+(S3uK3R3McUxRfAT@W z*T3=pSkotJONl`}S@j`HtA6#-fX^o9v>O&jT}4p9eU+(|4={C7{|h8=QJOotV-&hm zScOImwS$LNBi?=ryit60m3{sR*}1e*?``9#L}%^$6b<&Pblda|#`RunAGc=)q=?HN zU%5V yac(T>^X`CHkPb_{Xgn!n@2im#$yKreL zk}exfm4=jUCKYhg>eShF+wmdkZw*9(x8(LA3wqkJB}Z%+F-F&Hd^>`y{pw=3KqlT| zcfxITjWnEVczvAdX(M4~y(y x4x$luH2@!{X5tona^Ya} zPI*>H#L+L7pvE^n4!vU}Bs&>JlXSnzT{&)U@@l8o9YMI#cpr%_2&SBzG5g><=Xb!p z&3(OAd#g;J3=mPOGqVbUs9Q&6tacfB54p?8ruif<^vTIJE+bmh?M9ytF8AL*=bI@Z z=%ac4jGTMouP)S<_YD8`#~8k8fk}pNE8ikLNKuNoyqMbn-_?Sw+AA9h$iT$F-;HBk zG2Ew)A7~1n8IT`%<3@^`*y1qSUDqaV7$`=A_gcQDp;Vy^5Z@lZebiY6XGZH(Gp_tV z&PsaR{(wH5PZPG~nGB=n&-f)Ezz{C)`@$Pi6wj-+QJ)wLXIuBo^NnwG>llfQn^iCq z$VmABB+jyEIJi5N`B> 3%re(E?}jG5c}T4V8ME+=Uh=H(>aTKP(A z(x6ey^dR!KhfW}(B+}7$>kDE}rE= (z2)otzn(6|xYlR4-*ibjW41C6-TS zAxo+_p-;~G4GuV#sd~_MN28a@A9vqr@{{0zo+^Y&w`F*L-Rv$NS4nVgzZCkjZ{Z-= z2a5RN4y`@dZ`trvI*wilrn{{zK0A@mi2TOhef{WX7cvLM2{}7E>1tWzl?eR-lN43y zY2i-18-}Fuc-b@aJfcAnFnpiReNlO-C!3?SFX4SP7P(o2@2Swo7n&imH~2$|4mDYN zfYTPDU19BVM!KYV_uFwy`;w&Se0`h0waW)i)hY;J9*qRykIEJ5#-2CuZFTO+Od27z zD`}0r5PW41dDwjfvPwtaeN9|^sWixx;`u5YsdoWKezf0~Xz5z2_Y pN{sPkL0EL?|u?)& l=Fex r znwFytU(Kxf{ByXx@_Y~3aC^Y+1Ectpcl`=e?MvCrqpaGqYX@3Yrpfh7T?nTZvgiW= zTKgSKmHjK2B=GfWlbw-9UeQl3fhlVR9H=$8LW|*ykGMOq1QK-z^zR>DBDF6<*iu(7 zevsY?O)~Egin<_l@c8N7n#O7FF$1Qnb?@5(44;?{eYnx<>v~(kwo*ADw{#!%#(Ab> zl1Hw=nf?+BXIj1K$KN09cmW4tl8%w`? R&B6a;LGy58P~G%fD76Lb;Ttnhw< zNy^^REp0%YYo1KOb(u4(=G*6fZ`6_%cN@a?V6gI*!?C^GY~+%Ul*4-{;r6y+t&VpD(@5+-cS3j`>=@79zgdyddEIY{b=lrI0fZ*KFls z;|hJR{sFC^QElK^h3eVdu~Tzv=lwGqQRoyWm9hpc^nhucB61tX7?;L?BXI)>`TR_D z54GmKSvZocLKHx@!tFM`_a)o}RgC`BLP>V_5rxSQ2k5b-U-kh0cB}%kP|;fHH66F0 z)5V$fojB>FxyLpyg7pe48SBzWFKB7f@fb;+#I(|CKjnw|n*LJ!vF+b);#=NK8lJg_ zFN 5)5vBfa$-ckA3h^7D7v*t4@8-4AE4*HoC> zjmdy}#W(mZwq(KG8wYu?kp!ZBmMpcsyR6Z5wvF;W$LNjlzL~G#CeCO->CHltk>+ Bh2l zCfC|Esf@GX*dyq1FSqC|WoC}-8;SEsjj4dE`cnGcYp-lSU*g juJ_v9M{M41HINO$*5^vlm-TZ&-sh> z2|TV)z3HSScT@?CQ5@TE6^H5fJtMK3;3z52W4@yVFZTGpU6*Hh)>NwZB&B<5a{S}@ zrK-FyuloC^QhC+k`tB5QxnmHxk9X94>*|RmZjOa;TSQqUw&K9|9=Oo6o}J1|qD~`|d<^lJ_*suHK-e zhkdoe7p?9cqBmk}d8v+m1!L<*!8UE;;G83|?Hn`mo|CVA9oD 2o)R`v6X+ik1Uz!I6kf(=s9ez&a z84SVkQ8YOV4|-;=l`!;hNw74zzU4y?e1iI{wuE&MbSE*<*EmYXQQ4k}H@Byp%+I@N zwZ9A=k~ImGd(E7aO;~i+bZWdTDzNN)g@fFV tL6_T=>Xv&U;?5&NJFA=Cl6%o# zIS3zUN{E*o!i(*kt+r>`s%)2Exy%<;znA;bHA@hed0V&7IUS@6zOmVizE<5y+MMD{ zYgl#!89^tVWmYce2PoRWfc27Mm*?|admPVUo|Z>S9d<4uH@_kzN{4jJH|6Ldf&H6J zJ`Hof=xZN$CE0i@KMxF7eVRnF1pD62J@IT;Em2?O>~T{iZi|_7jf=M%@Dt Fe(QYTMHi==*vnKvbA*SF3v6DIP5%!78j3jvaBSo!BnCYax6$I zcpytKt-G0TYSd;Qc}C^;ZMR*93|A1Nc2B8(iYwS6w|PvA5Jm5D({8`=Ji6d+@RKmd z;-;x&6A{$*1f;WAI;v=*leiOm8m-!l)XX335d!TJwb3SA1xlb?V`Y82q=(f9RDBV)`T!gx{ z3ip*;F3?Te;kerGwBcp8_$306yRHZd>8GC|pg{GeP7Z$jUDb*wEgzF?Hr#M8t2DwS zJ$E|UgEMP>)TlSOx<`5~5&LGv3gniwU3Ay-wNvMWXmRT{~~Do_^hJLnr@p9|}5WFBDQfyejrY2%LQ-c3(J zPBhYp7+H*e-PPmsv;d9@v19p hiN!frz$>}TuYg5Vmf4;eX4@pDg<_nfM3Fq)pEvgvB7vgQlg#(hq5l}(zO z5Y4htk-qYU5l0lt&|&EtWyL4K9!FOJ(P^^_t|x+6t6s7o{_q4sBWj(#eH`SWCn1hT z%HTtVucy0Ahfr=Nv)X55eM!JqmdsVw6QNdikW?b>ddHZ8iC1?=Ke{w6Tz$MfLt%WO zme)Y>=U~@(!Y4X>Q_OxO5?9gX=yRt8L7V#Cxnh=+-tzMwwLQY*`BzRxG$q2It&ZRu zCZfbI<|F4(dI_TLV-gq(7GuA) }dm2|S74(wFRL zbH*EB=V#f-xJ326GSaH&6Le55^vdVJughu`dgE0rN!K6`y=ggENpKKMYuUU5lqaWW zF>aySmJS~}6M1B=btZD~vV>h0l~fT4CZ%g8rDp`WeGoM@mD=gyC+b_`ydW6z$I-1Z zJ$Y{DT~U@imja* ev!2qksa8~M@C80|L3G=t!@=u1j$>!FNoBK5(GF-niBT=dv7Dto^(PAx zAxY>qiqEO%t(k|a%e}3gG4}ZZH*K@yTt^>l4TBYv?!mDVjw%rD9A8=9W9A0c83qjS zg~lif9P)dX4STV7VIVnQt%XQx5h(IFdte-qcuR%*XyxdflI3M)?Sh8vTS1$#J7lNZ zX^t7S&GFJ(_WVwTfsj%^OirI%6>RNxF#k=G9jEz7r>u^ChdceI67wIQ5MPAty~6Pb zXwvR)K+msMwhtPfglZr96#S{I^ 1J{!d&mpk~b^@q)C3Q{}8XwnUx`ph4~zC zB|PwWaropvlVpNP;zV-K?DwNfchX=-8B22B6rfh(k3O7f$t-x{@KMg522+|qkYI9} zd3&l-1npIuwQ^p}Pup_sNXDJU0y%{#%dmJn`;VCP`RA;b>GS;*L2BNEgqViLn0sd9 z_T`axXt8y#i&W{9>G)T@P;Z>fRM3-`od!+N+IgvG(kquGCgjuOz-Lt2{FOzx3vFz8 zp4-D~>^F2jZlVLZhYTGn3&!esy?9r#+az?RU;y==$k9t4 2})xh~b&_ZV> z2}n 2G9vPd<$@up5HU|#Va|7XK$xYHg$wW#UxJp#z#lbW08Lj %*-W7z;!oPb7nP=wD8X?>aS1hX_iNx-A?!5 zk7W3Vpc5c%hRq@VI zQan{hj^r^@JpbQP-RbG~wpwE=QH6Jmf{UH$5?{!kd;LPXDIXowiLrTD{oa=jBPy{u z@ZHxu$5vb!$Tg=s2kxwJc^StxZJY)A$(ezw_0I6KFDRX hdO#ifmjPPXJ|)J#N>tRngJD@(Nio#~)DY zya0++QL}=_H#Vw%ZpJNAz3Cz$=M)8SJ +x_#P6 z@v~i*U%!|nv7*}v4p-J`g3IW0Z$Hfetq9xHdE0DX-&gXctgn#(&c+b_8=EDZ1{GWd z)LZqeIX%@H{YH-|sjt)GS@w~H;4jl`m?%`+t^CHNtv0GDc{c5dXImCw;&)&tz2Ew_ zd%tE-%o}57!_mf6Z~az$&O^;)?0hDyi&-{xHA@RS)G9t7%{TovX{N-r It zSa5BPonszjAePyiEI|pjdMznEn@qrj4jNbLP>T_PW}+TwxP#{C(d(>`n_N>zr!62` z3)@rq3ak~k_#uii#myAUxrmqG&V2?09;ApFKd)Ks>c(Q23nS{&!TkJ!tfj-V#O~-d zto*HUV5-KW?#I5HLAC)y9Z4&3hh)FD6zW@F=LY`jeC&!n71nF%WD@Uu>*Oa_x1CX? zmT5l|gu5y#WC=0bW#GjFZf6PI32HgPexpWcq}k@RU%decL3k%uJx`l!kAF-xdUtL) zCh(c-d_A&fz{r7wIZ!-0I>jadF&)|BUb)sIHOggPMyzVyxFNx>d~93a7}yO}UD~r) zr}CUg2>TyA1n+WnQjvkNnmpq__3Aa~X-LS#J5g*ooxJrrINgw3c_lo|>L9+uz+^nH zdajH;P&^(PU HQt}?B`6vJn$ zV`I^z^!qU-rIR^>Nuk{+3lI7RyYkWO%EtTEaHp5~$q#fp3j73$?cQOIE(23~HSAN} z(LLO-a({W`k^AyRbThL{uNKvIKo;|?_Z?*ar<_u1Ea7y)LQV0b9{5as`Q!*>Lym!5 z_V!iMe^iPOV1e&;=A)PE$Y>U3>=K!Yuqcx6cK`$}EVk{Wva&KE`F0!jM+WjFkk@(c z#A8zoZ>)TLn%9PG{2&LuQTalzmhm-~r6fc!iRu>#C7UL2&ym*}vd}-|nFE{>xm$kL zOUFOI6^`T0$ikvP++W~pW8*VY;u5#sp@@T}s~SKJhU>vP)Vtev+U^{93+cQET-(8U zFivl D;dheJvfW*uE!kt7RGW5(?2Io@hKxPqmYIygt39P?n}T{93J z@f;L5@W4m$23Exd{kz_)V|C^|bx;+2sz}neGF6w|8P7Lbz0{p7BI6~tv7)1L$@DFl z`vI^wO%9sOJO%Y>$q!#f)-Hv`^?th`ymj#|4|Wp+fJ|CL5*LpaO)WYy?n{M|oY#~y z%NNrz-KY7%h20b3V=7=_Y)zI~j<*|x)LYu>muJlaYKzn2lA@g5NpmF;AY>F Z#drVA)ZH08Z3>uvoeg{;z+<~mrm;Rwd}^Z^4ZwT#x~fp=qpvd)vsVK zlE;+1Pz^?5Av8QqFGdAdeSAP($)$A4++a_;V2lkFs(3B+mM&J~4r>CY`^g{mDYZL| z&ph6tS6ta;j(t@%S%WAsQ9tA3&R+2;Q@&t(D(;g=`7nPhvBz&=1mEKvndT!ENu4T4 zPS^?*zFEz&3-Y;Cro* o&y=N`%l%C7B-OJsvPxjGRj$^n37|vQJ6ogDs z7Dk2~>_gh}Nogd=OZh>!F}(a9(6;2+RRG37 Qha@-X=r_;Y2li $dLHiN>}eLu+NLScs~0*Gf?Jrrj>eQiIn@BICp0- z+ToXT_?-DkU&JN%?+nxGcOuHF_0v!CL+ZTyT=$QA#YJBi`-mPcF3$VasDlu|{JY3R zG3oWLB+-#qwBow#c3g(sNOehkDV*#=Vw;%DIEcc$Z?SJmU$RGVmhx1n02VG7j{1z+ z345auqJ6uH&?ELr+h_WC3mRpJ@i$^6hY05m70FalwB_RbXt@Dv5rsZ880oN*d->sT zC|+yhke6ig_AB{`+wtU6oPLK+vq4YE?`|403hC}!TWzW*rV)Lob|95L+OJoPzFbWz zL ;t8gM)9Pi2cXw&jJl-WJ`S$v^_azt_xL?{(rx-e4OBVJ` zm3CJPPvS%=a^`ltj<&(13s+Z!)E}I^M);^r@9bK%A;k92=uZ X-f@#u4L0P+5h`^N8lUaK5j>M?=TH+cE;@jEGVmpLxjHJp#% zuM}@{Vj+ucflW3&))vUg&AoFhANJ8eNOjEAzfa}0Gp1~#FT#N|674Vc=4afBSsC&{ zK7g-pK76IIM~EoSx#denJ1=H*y>L~FJ3;7a*83%slidxFyNm0(!OYDu@$96`+yke) zyxwtFnsQDXt&_5x-F_quLfIfh ->{>Md$f@*s|`rig~9gvB87xj{yZEjk} z@Q;ypY>Yq`sT&C^(^+$n$Gm)u4}zi(QZY{E)OGOSC29L+-%#Vl&Y{)? z@?t;oOs|WG3*v`v6 zKa0?t3+@R{kC;>15Ju7;VWnIrVS^Nq@9$!od_1bBbpkG$8~Nhd+t?F=%oy7(waa@i z;M&RJW3QIQAY*RYxrp>WLc&3t5!S--?BMUs0vHYIdmZDCy)JVUoG=ja7?zktMX+BB z@}ZCrKbR8pF4 Q;1kPV;#z_pnW zPBLZ4IWnTl |w#Y>=41Rh2Rk@f!{9KISw`IwDjE6Pt z1*Q$`|3F8ybtK&p5_hgCF87&q$ymbe0*y%1Ic3v>*9p%t;bIXm+4jbot0%|ng}7m7 z>t?+Nr!KrmpE3#bKo!}4f^>NVyR^12>Cw}JV>>(AyR9Akevk>b>3ZELX>lHa#K(9E z64eN&EHV;qq1DUyD>swoQev*|{F*v9v^`&eD@f081f7#`;4OfS}X{Xb|duq~|vM z6YMeoJQsrj QjF?3`GvyoCkS&(M+bEPnTA-5C;6k^+rmmdCHbPjDLu65z7X@fOqTfe@OEn`IN&4 zhMc`%vNSD#ggFy5dHU=H(c~5prN*QR9KMI6-R)BZ|9E;YFm4!<;Kv($xkV#`aBk^0 zM>4{hKi)*n?=qz@6Jb|r+6eK6a1_kSnFO@QKbt3tYg$CLmq?ybh^1m7z zE@@FIoMfjhiy&JU&BtFAWLsosZFL#m#O;C#m1*1iP9g=8z z18B`v;H-oVI3R!w7mrDox_mhc3#pxDlCdcXi99^uwzG{~|1|+$$^p=BogK%rP>Vy7 zon1!u4t7vii%d((uXN7@wEz)1<^C($1;x?GhQmthoN+S|CUQ`9#zaq-Us$3PK6$Xo zqHV0iXb-C@at}Cd`U+rHbw-K(V#f_W?{ac$ehv>79H_S}nIsMD|2kPVnH1NeEvE8L z7MpCnQ@!py`crr!_LqBqZg!kbG7C8SXDPHI9tO7P{q79KGm|yj-tN=5*emUr48p09 z`n><*&ns!fq (d+8>$l@79_@JSKo#0-9>mrBTZu$Cw15a z4Qm*N#f{HHi0~k7h^*~l1m0sooS|Hjw8jmWQ`AdqbxxsUAKTfJpG_zaam~i}C)CKG zfiLR^mM+_4aHgs$60ruwvqUX|n+E|?$f^7);AkW2uuebvxDn}-P`adxeorUP>fJ6M zItLQ?rZQz25f^aIR!>Nf2Jr#Otr*unhyy$b5MfAD{&_{#rKAA&WM9n*?=f7Dq56&; zR*@Ni0{8S*v4ppj`qst0AL8QNg4JEv=Pp1Z5@g!2nDfEPUkzDf!TK8EQ~$S&-fSmX zz2U{{bDg{&`>~w<2PVm8`6umV?1YmFEpf+p(XP+#CvO7ARrTA2MOh=G_ctUmKh#Mb z{)qx`Zb9r1 u?7r6)7xLCOQYju|?f@2C z52)|2D+34XQHG%43u4zVrst>Kf`kyi8-E_e4q|Rn2LS)R67RJjNwxU2I1MHIi>Fc1 z^aPmj&h~0Le$&@PZceUf7#vL^!+oBp?jl2WF3ew+MmM2+upoFo$e%n}lz8~fLg8jl z_EVXQ%Xa^xFgS{Yye}gcX58<`eEd+VJF#dNt I#%G7!9vqYlx>E{DT!gDkxPs3FjryS4j2S@5P5 zpj9o44z8|N$#0fXd?JE{9mj1*hjIO52_c{shr~r6<%?$vJt@NyQ6jw@BHAjPRPs+I zD+H8~ntp4FnDo7%7D*3FE+|wl_Ry_zj{| cMjv!B#PUy|wm7=sABYJBi;u;Q2u8GBrfMQGG- z|C3<4o@`073mWR|ECbOE9-~Iy$}log=b5>aRTorWUteMt2qLlbGlLV-QK=Ie(RJ)z zrw5-YX9;eZeVdQx(UV5WCYz(0a&DzG&;hiu)cZ6M*XrmiSFii}lip5DTqeH`{f@OR z2yC8#+Yf+?H{nOu62u%d9to|+LeFjt7i)i?-K;s2x;5qk0SRoJqjoZS;*mdja-e;d zaKjgl(bImqM6gpzRx4YjO3YJT$I&s&jt^S?7+%aHz=`bp#|m9aPVckJAHMu5tFXhQ zj^!>-OdYt?NaiA)@x{@oW)6Q{#XAr}y{!uvA4KA{7{v1QS_qv$iMnmAHv0DprP@>v zhkMNkKy`6|=a^FV6 ;Ri@C0ZbDOsow}Sd=!*ic zqgtii<4QhKy6;nliU*40{^S7%C&gLc7;0+f>*@PI8Skn5CvSU?OF)UN-}~@SR!9`X zLj|kPQLl_z=BbeI%3nWV@FIQu_Zmaji{GC-@qiEg)DF0ae>yy6bgkH AeN{XUG^+PJ0_a z!KA4VXNL5ALz$Z$)joXP{U_ri`xa0}Ugr)=?dEjvGy%vrJKVWIF!Y}%iG(p3L78>V zhx-9@uHOi{HKR~`9i_9`8K7X 2OG95XIW@e*&SGd@u`=LkBd_wyBVc+` E8DXWf$2uR`5YrmZw$_&3?+_rlWo#Tt$ZLEqe)+w+__weOE=?70TCyjjEpy z2>h-@Jq3Bx=ugoSHx@c$X)8PqRA%a@)VVyl?Wf-(bm!(OG+IGhSlVYqd;2SWiY7DU z`G_TP6-47{p>M1VxJm0KK=uSA$ea`^mrl);$SkUJ@HE?$DBW~GfJW9=y!ty$`~^6( z^^(11XCp!Sggc;SD}#0v*>XBnt-oG%D7WR3U2jV@h`fm^(&^=%nvf+o1u{Xsf*NN7 zm8Ino^up6R_d`&4eYY LS;N_!ZXuBe3a@dG2bQqQDQ3IO`+LZTqDKqmBU=;s zT|Qi1o)Uag;3_wb&~=iPoU_grCOqD)<2CS1{BZp~^^;gjWCNZkbto(Wb~`)Gb}W6N zV=?>)=)Pz7yQ-NYzT%;a90M88JI^J_pqmG?xHc`boZq3mS30!_@0TP`<1!}qWu3!b ze9CZdSDn9_E!ROAWAS10kFHYC Pq|1npC1=S}=AjsLA6o9~rW5*$8dP)lPXG#Npks7s3(M2Sxs34#vL(e|$`3A#VL zpK&n`8$>6ODySQNv3NLuF+}8&>W}96qGvl;+|dw5f;6D$RYah;4K0Y^-lT~8svjdG zySfsAgPs)L&lhz-R3{A?vbVr1B^bGLN7r7R$m6)TySx94CmRmb%{WWa-KA*^*}Ht# zkx?H7(%zX(_`*H5YDDI2j$Ko{#!fsPnLi0TJIgAIZ3 +rw}?oaz>UD4O=# -!yNW9b0Sc_XldO98Vt`9{Ghwkoey$F~vj?#lm7n zUKJrmr-CBsmN8E(YciTQXyzf*EU9t5)+V{r8JaOq!pO=P{x0>+d+VdFF2TNIL;B(F zVV1b^jd#pePLP%b*~ki{LmqQSax)JoJh#?!t{?Gy;}v!@*8F-s2`UfYUbB8_f{DD) zAyA#A?lAPJdLsq(%w{a)&|h+uQe?l#b$Ejo1aw$2Lrito)WGXeDy-<(<&7k52GDJy zs2KL+!uV=}W>%7ZtAU@-50AWrn8e$TTc%Mw(v~-i)8w{RbLD4SNGIi(uHao<9MpL& ziKww|d)QNG5~+h|KkxE7&jW4K9$YQ9EJ(`=NkS}jmWU(1n)dWMs!SGE>^>4Y2SOLg zphK_CXP;L^oE0W@YQf1lM5c6Uc=s9u3G(j(k$=aZ%T)f(v-tNhf`cM}lJOwo9&$Gl z6jg#|SM!2o_{oW`-Rgnt$ji+v7VVmrXY)$-gw4Nu>uF#zJ5j){XaWz5*T8@q)4R5- z>vu+^3K;!h>n*&)xjB=US~JL#0EW5*v?tUag9&!MtSBHE1U# qxX7y6)1s3cN^*Va!fB62!Nu?-}6CQXyRkWd1|93OHeNIOO3LFo96 zk1kn?^kf!(swKqae81q{Ff#0~^8inUWax01&{qOJ8nqm&T4Hwoc!u=UnwVhG5Fx<9 zmm`2Dr2`WB7`$%xDSO!evHux5lA 4}%0JvV>1%Za1}p%YwGu4GQ%Q|4uQ^svHuBEjCt9(SyBb{q#PV;{RdV%*v4kucx5 zDZTQCp1aeA4I3h1PMhMty(A!;fKj8$G4W1pHc+*KMAHYu-H!Y%e3WX)vHez<6ueTg z5dz6EQ?qcNDuqOlmxKQDd>PXoS#rocQu{(lnEBRzMa0;?T8oAJU^7TQ(8eD_ZGI$$ zqu1}B0m%fh$Jk$|l@_pEPn1iRgq7eY4~tAdO3H5Q#QblE?ze7>=R7aPuA-lp2Sc9U z<5$+-E#-gzSmEVSUl_(`_Ei6<3iurR#p3G&*V&=P_#9tpfCn9Sq)-!oi;LW-+xH?T z)&urU${63Tu#a7*E7{(-INLXst#P2*Dzy<5Kz%-wU6_2KhmsJT$Q}Iq(XT@mo5*f> zVI0*~>$S2TxZ}E8AT$h^?r7cH>>&cm?Y|O%lqgcDAEevf919=(*xBARGzj)Nb!~Y| zgO-+2-uWgyO$PaXIDxaNNH>u75hXm<& $2ZO$&lI8hjB_y{4zN6pySl z!@vvgj)^pi1h${R!r?L}s3NVNs5i`e1Nj#)R5oym{lA;}Km25-FZoFE#+%$ gK!>7_8qUF7wi?~W zkFwHut!J&j?O7fwN{HN+>lxw7ne|8z39O?3-U75qzNjX5tV9TE-gl4=5L6O5(k6mQ zRQx1@J_*GPx9lDIy4K#bnW6ojd0NIU=rDe9M;-aI74-hshLexrCtdnyn+u*6`kbo? zcRgUM`Xb@TlPKB3=joQr>rvA{dTI;FY6~5mlA!|66IJ>u;SWmKe^CheB$K6x9en8t zw6fWDi9HJ~S*$y?w;E@Xo&+bMKM#gcquj$o8giLR(TL?5xXMIk0T#Lm1kkEH3F)#_ z+ZcFCau@98_D8f=kasVEp|fl3O1YJ%HnfLRXvlNqk$5L(=&a` D#C&yZ8Jql7*qOSA}ks&8JK5yh)vdup;W%*WwD$au9BY 0kuh?4)2m z?F7#>;LD)b-4da7P=yUor}09Jinyn+-F+BT+6;v<3i;ZdxG3lfq*ylf`_9$O{t1i4 zhb{Cr&+ZD{y(&T704!O8&*}59ik+wBz|6IwKZxBt74CXJhd-e_$A$Kg*B6`_0-6QZ z<;?5VF|0rU^a*+{&l>D>^g)WrVQ(arM{yPTlW7N(*v$k3-|#5~@Wr-@N=EO{@1w(h zvgO^LX7S &n5$kCi`X zh)%%hcfPiaLJ~>fv#mXJ{}a#nwUQ8GRdjcL43%LoKSuLAp>KzxSTTey(b_RI4U1B% z5S?vbFwk-ZH%h>>z6lyhCF-7cMhM!)n!GxCCg&G40z&0%Qt-6cE3Mk1PL~UOv%6w% z64?3!cTst{^1L5Z)9gk`a)RikM_zYeV*$|~OlO|TPVP!d>A>|{`=>q*{fvb=Tiq0h z7_a4c8q`5ZX8L&QWpALQ_F m zx~G!%8hgMkT+H}*pHwfHJGp!|YI$;Ip=u-|$QY`@qcGleGFPwJ+;><7>*V=Vjm0bk z!ntt{njW_2Zjb~mc=fNla8lM=6N24*E1A!WNb#VvP`ndaGJ2tQ sjEZ-Y=%go zKEfaL1C@*_Wvk??{> X^(LIDC4`PHPFa=^mX;= kB8NGDphDc!}UbhFjYZ?Q2(;ayjfqg`eAJtuA!CT& dlD1PKrLH70NcD%oQ+R>lTCuQJB^uP^Rrb@&Rn&*oI1 z!+I;R&ml`KKA#im0lD(jkpI6_%45fMgcUyT{veQM6NC37!(s}o?peJik!=2N%UynC zKdFlt(+x^HWR`}6pQ3-!KKN`K9q(38) 0cy`3mVue^Mats41vJ{#!SdDSHT7i>8 z=Z;&;3(4~4ffb0hiB)@FrCv8<@l{et>VPxiQKOL5VlpgQaw5ENb=YrX-z72+koZz% z)j5!b5gt&wE|Qh>BmI8;>4Dmo>8}WKH4fYKqiR}rD*A%4d$25x+x!K}q$k`t%#%9s zgCXbYTE*ojQ@ j zp@y}pf%%lCP@?y8{6hZbrTgSjeYjI8N7TANLk2~eT2}(?^Kv9QACa+=* z&Z=GP>r?5s>zKidzqVXY4GcR8gPKbDr#p1!BJy~L&MVgqed=n?B>HCg!244d2;Ltu zgB1w1$yB()DeGt%x3=Y$k>fT+ghm;YBJdTVu%F%3cT)I@big%9y$}$<)k#ksJzEUI z!`QnDTvt~xd-biip-eRw)QCc4!TrYm#{Ki0?Q*&)TE|@XJZaS1YWU7VueY!qCkBLe zx1Y$|D$p;%m7^`R49*I0$(-3ObRF>Xs$W4^k#6O0I=dI{wpuyAqdR%1W(oQB3PgZQ z8OU|_s*2)DqHrnOM$~Qo(*atkxt!0*NwILz^EHdI8_uZ9FC>(*T@7 1g+2OS5l 5$lTz)KtoL|_XK3_LYd^C|1C22 zp1?Z7gi3{Kl{o0-3j^Ifk*M>z#4F#7FA67s42+M4l0Goj+kQWB!v(Wl_iq2#GS%(G zy6ZtxcX_6 27HvR}< =^&{U#b@hBz zFWK@Fk* Y};j{&IE^4zWI=DIwQI5k49i!JbohK1TfR%9i zy&|$Pf zyozfjOoI_nUjJ6A*=F#ad{G`|YNIiWu;0!IrX>InALv-O6D+$59{0&mPiV zcC6Y-5bqQty~_;O!a2f|H-D!Ne?{j={uti0qE8;YI&}YarBb2SfxN#;EaN-qn()9j zFEW4aQUIUiHPW2XHc%$@fa_)Jd}|sm%X&fF7NyGo?CB534`hOFHQM= `++onO2mES*<$)Z8YR;ZZP@!YDr-QuaMyA`i&oqY|{C@hYced*VM9Zs69x9etI zO2bN9 qo34k%I_b}I$Dts2SKuVpEAhA1PZuH z`7Rg;YK)FrYmlY} bmWo^??L{3d$m0(Vt~MZ{!qz<%uh*+!0AE0u O&D{T$ fw&+zp} zd<6(soi%Qz&sUbIia8B@rkKeC;_Nl54~IJfGv*&W0YMV JEo4@0VYqR1Vu( zTsY8va^c=r>c0Y5`ty3b-!V5cW%cPZyB529pj;gbin6HOIbI0-c#k xfocXH zT0J+Q(==7@VnuITY`KmCRmgv6v->{P<55s#*uiuh=6^xix-JJ?8Vy4 OUY*Ceo-f-7-AJNTXuL&Jz;$yr zyL1Y&TRgIAf#>SOQw=7s<2{aI06$PRT7{2%d7WH)GWUElC6F@c g= zh$1~zctvQVH?+EZ)hoN=-r-AQ; WQE8lJ(%I=<~OfkpT~yhKHV_Kc|srGAC2j+6%`ApqF!mTbJp;BVqU~ q zIK}X_FZ%}YV+KBB^mbswvFusmJO<4AGo-)sls*pyhDA1*HWlN`YcPt!hZgLT`pwpP zJw#e;>weWABy9;Iz)!wMR(_j+4!FOUQgmQExr#IO|N01`LecctvbIIb>yLsMZlIC9 zz@;$|-|ON4*H(n1j^b^t!GiZM(Dw&2RC@JWE8vk_mg|Mgo2XWPHY{1uN+ls!TLlt- z;HdZBQ%>$ bsGD`AMn(2 2OJ!pUUWHxMQDMU$I4`P>VZ2h@JShQ^2 zdDc{xsuhG9fH(bv)$a#qf-^1j4F7=wH>wp)$GP19;a%n>u3sdt4(ps`!Aj)OfoJqL z!kj?H7eL{Ay)DH^z*j8(<7>3&0p5INRk0-oM*ZQ>HN*pZ#c%vUus7U&B=zNbks&7| zA&ThmOK{JBaJ@0HY;nIOMo56mXaC3N@@azi%C9kRkel4oLo?rAsYUw^J-~{y{{t(| zr3AR^<~ge1e?I%i55{S1^%9;|RvD4m(}3X-lWKitr*G&BEu5N`GUr*q^Va+G1thR7 z6b-mhn4IE4eVfq6C35QP^R3$z8kJGBwRgdn?f{}V8mCJHtj^?7s5s2$BdRCyHA@lV zYX?cpEP}g3yc;zYpJ(s@ie_5qH1Z{I;=z%`r&E`k$anqr)h}X-aVMFhr)ZH~U)F}c z-}I1TWVw$bit|GD2C{mt;sfIEJjqhw{YO;t@{jw#*09v!yatkTAij4&8Mwuvr|9J1 zwasX1fP)T;(aek|M8*lyKHhpFJEic1(HBG;>J_pC$k>9Q*%l>eXy(-6O_K3=rZkLz zmkjgbdLB*dVMg+&OVYt)7}=4&57w}RQJP}w gF+S`K8$`e6c!4wa|NDnQbJb-Ly5vNshqukckkZu9#aJ9duvYP{BF`a{Mc@z z>zn~INW*OP&<-4RU@hh$fy>M@Z6?F7h}&Goy^BU?l=%62VwZpGmxzJPP3?x6dvJo} z<%JKiDdFI+yla3FSyiWc5kbe?MlX(u2wb^-QPma|#ogTLd9~rwwGaX5yYfK2n>YR_ z c$gQQQ+ceB#0Yr$&6=3C=(Y_uT!T3ephtag zJxW?$%oIG%j=}>JJ}5RLkWm9~sB$HGP#>v{$JUU%r?vGDwe1}{lauC8%MU~Vdz_Mv zND4os{-pZtaS2lP4)c)!7kgFt?ou>1plt4M>H^5xNfr&4SdD`>$Ma$8t=_mPTGLQu z_Wk!v55=+fxI1$pR33Mh#-Fd;n5|JKpGzPnpCvGc(XPot55k)qeCSPsHXtG29-tDU z{klhGcM$W)9r-{Ua5k?S34B%!)_g3MIKJO8mX_z0bS>>+D00DLfISFC;m)PPsNN6Y zmD|Hiz`Z*i&WC~g(`!(nzoD*$&d?)8g9m^m;$E%-8rOd7x7!0M!BNb(PalQ{8P+}$ zQVzB<;nWkNb4I-0nX_T94YQ0yO6I7iQ9(M5T-{DL&aixqpP+i$CU2O?@kvs`G2Z*L zlcxRgTdwi28a=n3nC)HpjrSr1MLpWeQ0pTY+5#LCEj{LAJjw{oNqt80^7Y7k!F^eK zd5iWtIyEois&_kaDjj}W&O}cN$%D@JpC#69ozZ }(BZLd(gADV3Qp?dpq@
j0y41(W*oyy$d<3W~73p4&>FSOF6pWm9srgsNN{3b6M=C#7 zy)%-L-R6Haq!*s=-!8GAq8S)rKLj{u$)PaJ&+M+wkN;6^Z=UU{$VxnW$_8Zjy%m~4 zMxj=oUVlnssDO9}Z$#LBJ9?TAR@Llk{V%mnG6n!Ckb4zmUatLF@|xz(>M#w*ESiQT z<0H@%XQs#)=Bw^#msMr(vA;iHs!Q}?c^(VSYtc8rS>Y>tfFP(dtUY{A#%pKWOlCQy zOIFhPz6Rs{cIli2l@NDu7@K+SjVs#{9;G)0d#EFr7_#nbFk|M9oe#Frd=3nuT+`14 zWvEQBhxyVogc%lqq{F1M?1kL`#*V2G+#o^D(4hD$fPC^vQ@1Td7&N#vS}16DJ;bol zPzt`8YyL<~%tOXD*%xEty=@82mRP!gY2zg@2@7h!AlEFU9DUhdB*yjBIp%|U;a2LK zw~2@Bqjn_)Vj2-P0ehTdcSWh`+vw5UNXZJ9QjZ-4QX@6sH`OZ$Z((2^e~b@*Ge7Jf zyB^L*4s2yA*e{kU34o?x(*Bl dO;o~1*uON1+kKiIq@-$B;FC4Rtn1^p(J6q;YY(Vc1ERAcf! zIg{w@r%hsTf*U?v*yW~M-TB_NH5_Gz@3wjchj_|>H=Wyvhc&DTJo;M4KGT+6wfe5w z60JlJtKxh2dUw9cvj{7^6Mbw@zL-g}n;PI`ux($GX4r+gG*#N|T$NJBp}Bj2dswNh zlH5tdJ4UK M~I$PGvzPw?` z)PRw>&?>X3CXUxfaVJ-arv-&u>ifDlcgadOHe%mzRi#40`SM-A_r!5fs kQ8ULVtBrNE;^@pNDXg&V<+i|TZBQ90bg9LAC7^-h6m!Z0IfnZB=I{yawsk%AT| zoPOA7vD{osGqQvdU%r|f`FRYlC6+?^1I)*(oJJyVScV#Lu4Cy?;>7Ykk=WMp&}k%( z4m)S~^VC5^mu;<69%Jh@+2kLyhC?CSSW`S-Y>MM~t+L_;t==x~JL$Ma&9=RIcf{Sy z5LxS3^z 80ns=ZLP$k9rl*;PVbQoMi5f zr|nJY<>TFj1Wq-!BwnWF+aF%gMwRP3;+K6+738q7bB8cbiNK@U5eGYUV7V# zSWJo#9J{wl(#%pR%cBCkT=QD)aHCd<>oY}p3gOJ=+-+)ZD1AeIdPOBhGpBEmf^I?a zx=HnoSe-ecfm@raZp13ZaDf5sFk#fcKF3(mO5c_17Ad+4?IWFM)|g-So-7-74kdCA zIxjWh-?i%TAZCl_Y 5MWZO{VX{- YIxT8>6EG~wIi=$IV?5!&qGnQ8JVga5Lw Kh$arQ*uZ3012ws%Yd%yH*HUo-LX{X(0*K1K6ly31> _}LJI|h; zSqNt&W6f=LgB?!4kvAMHVSV$xs2yrcIjmhBegxm^(SEX*?>F1odX(x2_gB*AlVyt* zRybQIZ2K^VHW>B(DipSRD?TstN=mdlO*d<6FzX79UoFUO04ibNHhma+k09Qj!92S~ zZ%$Ywt5}tL{hh%V$Do6tBwjJ$7vIpgmT54wZ{b{C)~6MznbC7OiLguMrvCNNQi58{ zr+vjBj@mE6U;m3y)%{&x_7*_BUfKIaWzeau+Su$dRjr7#Em(2QZ=+2B^(ihbSG#rL zult816bmi%?D5SFB5!bdDo{o2Tdp1Mfetp)wC~s7|6n5n86cy_lCJ&iN$eBupWRRQ zR%k`ox0dzadHE<%P((&DL8EIF5Tce#0i4$6lm!%xUAn+mOg2Wg@^6yW=RR3 z43M&gqtxIexZen$kb=%!jm9;q<03t$^_!}4w(H~BT ZDpo^DCv~jvqiiM_*2;ob7+ v}$efXD#66I1Yj`BofB&*b6~gkczR(~nmHPwkuUZ??ZL@Y(@7XIea-V{Z z5OCYh{$OL&=k=SAPB`gwuWOE~koBGG)`oL%qRgU*CnED>+=qSO!LF4BUcpLJq1K`D zZkzuYDp)xCD@pD+@i}$I#)L!0?A(D$%oTI9-+dVMcQXS#Kf*nFNY9hb&&XU>vo$}2 zoQ+mAZNHqDPbjfmiwxG6zCv*wVj*RdyzNIV5_LT2>zgV`Gca<{RysUF*qfWm3OP2; zL8ly(kk=#`4gd1|3F(v$VF_zu1V9GjkJO~Sr5vQ8&P&sycITiL3SX-b=47YsR&=4! zOZ*lS);3GDpyW`Ann_g%g5v5Yva5v~K-%BW9{p;4c)vM}9TGd27C%vHejIW{; SI-@MYJtQQ5gt2?BTkAAo*|URHL`@I?J6ADQ<}y#( zJl y%e{V(zg)2zt}@=|sEE@NeZ+-H} XRfq?mUo&u3lK zs@G;yAz|C=Z#=e# XvBpsG7F zvyv|_#q&N6u7)pphbj4%WC95e2x}<9y7m&*$?^qPP0UQQ&CYcN*01g#Ga8H2!$xb) zZO6@Rz3nj^+UkVx*+Ol`Iix#d?+;hfKY7rC!0;NGmt&lARNz?^VET$T@D{I(NZYQ| zgG(>)b0K?L*qi;3mgV&0XME;|yOLp-@jc?+Vfg&TOv|q=W~7~a!u?^Rc;+1@OgKqX z*g@l&Y7*Hg&I6p5_iGrtg`?+ZZCs2s+?p95Y==CYJ=Tv>&KqNe8mE9q%ZM20@1@h- z(;zD}o66<5G(whoX}m{laD->YmvGGwaXZEgOa`&ZpCGp)E&mENR0kS*Z_2thUZ$dL z8uSxxBvpFBrq3t6+g(o)1p+EZy}25B^xfB+O-d{g{&3ggYxAaNC)&I`6)m`JHKULks(ufV%_ zg4+KE(LGeUUju(?|KQGbPG|3N&+q=?9|z!PK^pXwkNjvG-_M}$_Mt1~;{H-3RdmuD zF=j1VCpheC7@LE}U~G+clYG|dlW`KExSW^6XHxwJ!5%Wk9`_U-wIw6&{S0Pq6RKGd zIfMKXZZM8PQ)Y`Q*a7wWZup?bs7L#5I^a$=muqRzeYnANz7wc>hnIdgYBJ!t)?<>F zxYcD(qD+>B3{SPjNH@InDV?nYO~G^uo1t}a`q}f-b&A8zjVW#c@;6@A{s?(9|2?7- z@fZeQArLk6YT@ewHa!C4Wb&&`_(^qqv|JD9_gb&o!Z{o{|EdoFN8%rQPH{N%S6sif)>Ph3+8yM%gzduhn17_3 cxwbJ@0UnL?m zyL^c}`CP=VC692sX{dFrSt^DFYL>Wr)&@pikrxVx&<=UlxHS)1pT6x;UNF(GSv1_K za!i(fq1-% ?t*yI;H%^@xJ09oE zc_Heg!rt6fO`aouT#5>Ow8{q`DMUVb=EH5|3YrEU)lYrdKpw7guC$?Ks8uiB^^Jec z$ZO>%WAYvyi3g-r@gRcs)3^1`5ob<^L!nmL?Y9cb7L;yYgUB)vz=@=P3u-BgtDxuQ z^S9nR-^Qm37Q*Dp{T_ue5E7y-zzyq8xDG$typ=7mv>M=b9JTDTFxc8S(KM>bdYbEh z>8V(9Dmaj&1Mk(?Ser-KobGaJ*KnR0Vt#hKvOTO?*sSTb8+?<`L80+7yQ C&K~nZ7BfEFcTscx5F0T?5!x)E$N9UuGPOP+T@m^gs zA+!(m?Z1iXI*v+$J_?%ehS@^q;jU_RHm9?khnxJRbH-8ZtK0SY=S^D0_VDVHbvYN0 ztsCa69Phd%5ZAs9Q0Wk`)HKm0e0+uREAS5LLrau{33+mp)6RB_o?fD>r%Rs$w`1fp zw6^sZqnF$VaFUzYjKoAiFs5}N)ZN7^0)G}$oqTDNOvp0%GV=<%>8Y!{f%V5lWwe!L za+9doap@_xMdzLkt=V|XoT60B4JGVoZaUAZ` }+XpZ+> zk2U7Lc|u~Yn4vQq#7gqHW~ q{!mcx$yT54B0khO_t zN~Y32f%EbRd_H&)p z^*Hu{C#j$LKLCM}Ga#zCCd^!MSsS4QucJK$Gw9xp`-4jQKa1JE|~hO5`*au+#3n zxi*4 ^cK~c6#Eu&6 O{XKZjE1WBl34_|tuJ=!m)PRF>zQ#vXfl?5?8dl)bQ)dX#x)MEBt$ z35=O^0=4cJ5|`8ORoMH4-)zu?Q6nF1qi}+y>3T=krOyutRcIcmPW{l^rK(GOM54ha z^d1YAw_71T3A9mJuR~K%jYFw~db%c_2Lt>Zlc~DPYk=6$AG98&vGRPmA6+g+tc)Ip z4)9hinP4Vs4=i8LwHwvw4xDwH4pt<|9na=RiDKKnDb~1RyljqgdUAe)7;DkUd(fxv zVYPimT}bRDGm`rl>B5h nF zH*19kYOVJ)>%XNAY`5nI1Zsj&U9)*HVY7MKVg2o1-_yQgd)Eitm=t(a>;^wM?xKu} z4f`jUJNrL@xw$UD-1{GpVD3Z#4U*2pTVS#j@n2x>!0Rmk8({9UQMcSc%@>br+l7p) z2`{(D-_K~H@ttY)OCT)LO0H}e4M=RrqzbK}Tpw$_Lmwav(>NNVu|b6i_CL@fdpO9A z?u#Py(i;zTKHGb`oh*!2Bq;IgW4$~9nL3*nr4_zeDhB<|x@4*b)Lb%O!O1z=GSgO6 zPz&%V<&(~HCL*_80h!aldtF8gG_o2#S%t6$n~VFhdMf7^Vkitgg=7DR*3;CK$6C z&ubGq?$M{7GKC}vZejh{f~nkZDJk?t|FvR1pG?%Yo3d;)4UMVD-N IQ)_GKb z?lu^;-+@lsCAxB;Z%NSrR8B-Qpe%PaU0iHFh0^#>_iI#8H6b6y8)T)2IC@cci(5R| zV0&Qav`ML7PQ9Zg_^Qolx%B$^jL4jfdLU=O^iQUF9ek80$kr%osA4WbV!=Z)yU;3W z))8zzBc0RY-6|1u?RxFv7V7S0pTaD+^R^+Yi2Sd6I|rg~aMliW9j*|fA&k9`KD!(nRBnW1n%K;R+=~deMBWjXBp6FUGBlgVXgmw* zN|J0MUdZumDIcl0B|H%mUrl