From b48a4e92e13faad9fda55cf035cdf53e62b0b663 Mon Sep 17 00:00:00 2001 From: Jonathan Cremin Date: Thu, 9 Jul 2015 23:01:43 +0100 Subject: [PATCH] Initial commit. --- .buildpacks | 2 + .dockerignore | 2 + .eslintrc | 14 + .gitignore | 10 + CHECKS | 1 + Dockerfile | 14 + LICENSE | 25 + Procfile | 1 + README.md | 101 ++ api/app.js | 154 +++ api/lib/auth.js | 57 + api/public/404.json | 6 + api/public/50x.json | 6 + api/routes/file.js | 259 ++++ api/routes/user.js | 85 ++ app.js | 35 + circle.yml | 24 + config/mongo.js | 21 + docker-compose.yml | 16 + init.js | 2 + lib/format.js | 52 + lib/hostr-file-stream.js | 36 + lib/hostr-id.js | 26 + lib/koa-error.js | 75 ++ lib/malware.js | 38 + lib/resize.js | 10 + lib/s3.js | 19 + lib/storage.js | 24 + lib/type.js | 34 + package.json | 98 ++ test/.eslintrc | 6 + test/api/auth.spec.js | 33 + test/api/file.spec.js | 68 ++ test/api/user.spec.js | 62 + test/fixtures/mongo-file.js | 21 + test/fixtures/mongo-user.js | 7 + test/fixtures/utah-arches.jpg | Bin 0 -> 194544 bytes test/unit/image-resize.spec.js | 16 + test/web/file.spec.js | 102 ++ test/web/user.spec.js | 26 + web/app.js | 170 +++ web/lib/auth.js | 193 +++ web/public/.eslintrc | 5 + web/public/404.html | 46 + web/public/50x.html | 44 + web/public/browserconfig.xml | 12 + web/public/config.js | 78 ++ web/public/favicon.ico | Bin 0 -> 15086 bytes web/public/images/animation.png | Bin 0 -> 9169 bytes web/public/images/apple-logo-app.png | Bin 0 -> 982 bytes .../images/apple-touch-icon-114x114.png | Bin 0 -> 860 bytes .../images/apple-touch-icon-120x120.png | Bin 0 -> 849 bytes .../images/apple-touch-icon-144x144.png | Bin 0 -> 1022 bytes .../images/apple-touch-icon-152x152.png | Bin 0 -> 1025 bytes web/public/images/apple-touch-icon-57x57.png | Bin 0 -> 539 bytes web/public/images/apple-touch-icon-60x60.png | Bin 0 -> 537 bytes web/public/images/apple-touch-icon-72x72.png | Bin 0 -> 632 bytes web/public/images/apple-touch-icon-76x76.png | Bin 0 -> 598 bytes .../images/apple-touch-icon-precomposed.png | Bin 0 -> 1299 bytes web/public/images/apple-touch-icon.png | Bin 0 -> 1025 bytes web/public/images/apple.png | Bin 0 -> 221 bytes web/public/images/arrow_down.png | Bin 0 -> 173 bytes web/public/images/bullet-r.png | Bin 0 -> 217 bytes web/public/images/bullet.png | Bin 0 -> 155 bytes web/public/images/camera.png | Bin 0 -> 379 bytes web/public/images/chevron20.svg | 9 + web/public/images/clock-25.png | Bin 0 -> 470 bytes web/public/images/clock-50.png | Bin 0 -> 855 bytes .../images/cloud-transfer-upload-sm.svg | 3 + web/public/images/cloud_top.jpg | Bin 0 -> 57872 bytes .../images/cloud_upload_font_awesome.svg | 19 + .../images/cloud_upload_font_awesome_red.svg | 19 + web/public/images/collection_thumb.png | Bin 0 -> 71743 bytes web/public/images/connected.png | Bin 0 -> 13688 bytes web/public/images/favicon-160x160.png | Bin 0 -> 1405 bytes web/public/images/favicon-16x16.png | Bin 0 -> 277 bytes web/public/images/favicon-196x196.png | Bin 0 -> 1351 bytes web/public/images/favicon-32x32.png | Bin 0 -> 441 bytes web/public/images/favicon-96x96.png | Bin 0 -> 919 bytes web/public/images/favicon.png | Bin 0 -> 542 bytes web/public/images/fb.png | Bin 0 -> 31944 bytes web/public/images/file-adjusted.png | Bin 0 -> 272 bytes web/public/images/file-cog.png | Bin 0 -> 1210 bytes web/public/images/file.png | Bin 0 -> 182 bytes web/public/images/file_icon.png | Bin 0 -> 236 bytes web/public/images/file_thumb.png | Bin 0 -> 8581 bytes web/public/images/filetype_header.png | Bin 0 -> 1331 bytes web/public/images/folder.png | Bin 0 -> 168 bytes web/public/images/gear.png | Bin 0 -> 234 bytes web/public/images/hostr-logo-500.png | Bin 0 -> 3994 bytes web/public/images/icons.png | Bin 0 -> 2505 bytes web/public/images/logo-dark-r.png | Bin 0 -> 884 bytes web/public/images/logo.png | Bin 0 -> 2410 bytes web/public/images/logo_dark.png | Bin 0 -> 335 bytes web/public/images/main-logo.png | Bin 0 -> 816 bytes web/public/images/menu-retina.png | Bin 0 -> 183 bytes web/public/images/menu.png | Bin 0 -> 123 bytes web/public/images/mstile-144x144.png | Bin 0 -> 1311 bytes web/public/images/mstile-150x150.png | Bin 0 -> 1105 bytes web/public/images/mstile-310x150.png | Bin 0 -> 1070 bytes web/public/images/mstile-310x310.png | Bin 0 -> 1581 bytes web/public/images/mstile-70x70.png | Bin 0 -> 951 bytes web/public/images/music.png | Bin 0 -> 409 bytes web/public/images/person.png | Bin 0 -> 745 bytes web/public/images/plus.png | Bin 0 -> 313 bytes web/public/images/round-icons.png | Bin 0 -> 14170 bytes web/public/images/search.png | Bin 0 -> 294 bytes web/public/images/share_anything.png | Bin 0 -> 7481 bytes web/public/images/share_anywhere.png | Bin 0 -> 6097 bytes web/public/images/stripe-128.png | Bin 0 -> 1444 bytes web/public/images/sync_wireframe.png | Bin 0 -> 4260 bytes web/public/images/tagline.png | Bin 0 -> 5753 bytes web/public/images/url.png | Bin 0 -> 351 bytes web/public/images/user.png | Bin 0 -> 2349 bytes web/public/images/video.png | Bin 0 -> 243 bytes web/public/images/windows-app-icon.png | Bin 0 -> 9110 bytes web/public/images/windows-backdrop.png | Bin 0 -> 4513 bytes web/public/images/windows-logo-app.png | Bin 0 -> 668 bytes web/public/images/windows-white-icon.png | Bin 0 -> 4233 bytes web/public/images/windows.png | Bin 0 -> 252 bytes web/public/maintenance.html | 42 + web/public/robots.txt | 3 + web/public/src/app.js | 129 ++ web/public/src/app/controllers.js | 105 ++ web/public/src/app/directives.js | 121 ++ web/public/src/app/directives/dropzone.js | 154 +++ web/public/src/app/directives/lazy-src.js | 222 ++++ web/public/src/app/filters.js | 33 + web/public/src/app/services.js | 72 ++ web/public/src/lib/smoothscroll.js | 224 ++++ web/public/src/partials/account.html | 74 ++ web/public/src/partials/apps.html | 23 + web/public/src/partials/billing.html | 37 + web/public/src/partials/collection.html | 70 ++ web/public/src/partials/file.html | 53 + web/public/src/partials/files.html | 81 ++ web/public/src/partials/footer.html | 20 + web/public/src/partials/header.html | 35 + web/public/src/partials/privacy.html | 52 + web/public/src/partials/pro.html | 67 ++ web/public/src/partials/terms.html | 36 + web/public/styles/app.scss | 1048 +++++++++++++++++ web/public/styles/style.scss | 469 ++++++++ web/public/updaters/mac-changelog.html | 33 + web/public/updaters/mac.xml | 89 ++ web/routes/file.js | 59 + web/routes/index.js | 55 + web/routes/pro.js | 81 ++ web/routes/user.js | 85 ++ web/views/apps.ejs | 55 + web/views/email/activate.html | 66 ++ web/views/email/forgot.html | 61 + web/views/email/inlined/activate.ejs | 111 ++ web/views/email/inlined/forgot.ejs | 106 ++ web/views/email/inlined/pro.ejs | 101 ++ web/views/email/pro.html | 56 + web/views/email/style.css | 271 +++++ web/views/file.ejs | 155 +++ web/views/footer.ejs | 17 + web/views/forgot.ejs | 61 + web/views/index.ejs | 105 ++ web/views/mac-update-changelog.ejs | 24 + web/views/mac-update.ejs | 25 + web/views/marketing.ejs | 186 +++ web/views/pricing.ejs | 104 ++ web/views/privacy.ejs | 81 ++ web/views/signin.ejs | 66 ++ web/views/signup.ejs | 64 + web/views/terms.ejs | 65 + 169 files changed, 7538 insertions(+) create mode 100644 .buildpacks create mode 100644 .dockerignore create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 CHECKS create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Procfile create mode 100644 README.md create mode 100644 api/app.js create mode 100644 api/lib/auth.js create mode 100644 api/public/404.json create mode 100644 api/public/50x.json create mode 100644 api/routes/file.js create mode 100644 api/routes/user.js create mode 100644 app.js create mode 100644 circle.yml create mode 100644 config/mongo.js create mode 100644 docker-compose.yml create mode 100644 init.js create mode 100644 lib/format.js create mode 100644 lib/hostr-file-stream.js create mode 100644 lib/hostr-id.js create mode 100644 lib/koa-error.js create mode 100644 lib/malware.js create mode 100644 lib/resize.js create mode 100644 lib/s3.js create mode 100644 lib/storage.js create mode 100644 lib/type.js create mode 100644 package.json create mode 100644 test/.eslintrc create mode 100644 test/api/auth.spec.js create mode 100644 test/api/file.spec.js create mode 100644 test/api/user.spec.js create mode 100644 test/fixtures/mongo-file.js create mode 100644 test/fixtures/mongo-user.js create mode 100644 test/fixtures/utah-arches.jpg create mode 100644 test/unit/image-resize.spec.js create mode 100644 test/web/file.spec.js create mode 100644 test/web/user.spec.js create mode 100644 web/app.js create mode 100644 web/lib/auth.js create mode 100644 web/public/.eslintrc create mode 100644 web/public/404.html create mode 100644 web/public/50x.html create mode 100644 web/public/browserconfig.xml create mode 100644 web/public/config.js create mode 100644 web/public/favicon.ico create mode 100644 web/public/images/animation.png create mode 100644 web/public/images/apple-logo-app.png create mode 100644 web/public/images/apple-touch-icon-114x114.png create mode 100644 web/public/images/apple-touch-icon-120x120.png create mode 100644 web/public/images/apple-touch-icon-144x144.png create mode 100644 web/public/images/apple-touch-icon-152x152.png create mode 100644 web/public/images/apple-touch-icon-57x57.png create mode 100644 web/public/images/apple-touch-icon-60x60.png create mode 100644 web/public/images/apple-touch-icon-72x72.png create mode 100644 web/public/images/apple-touch-icon-76x76.png create mode 100644 web/public/images/apple-touch-icon-precomposed.png create mode 100644 web/public/images/apple-touch-icon.png create mode 100644 web/public/images/apple.png create mode 100644 web/public/images/arrow_down.png create mode 100644 web/public/images/bullet-r.png create mode 100644 web/public/images/bullet.png create mode 100644 web/public/images/camera.png create mode 100644 web/public/images/chevron20.svg create mode 100644 web/public/images/clock-25.png create mode 100644 web/public/images/clock-50.png create mode 100755 web/public/images/cloud-transfer-upload-sm.svg create mode 100644 web/public/images/cloud_top.jpg create mode 100644 web/public/images/cloud_upload_font_awesome.svg create mode 100644 web/public/images/cloud_upload_font_awesome_red.svg create mode 100644 web/public/images/collection_thumb.png create mode 100644 web/public/images/connected.png create mode 100644 web/public/images/favicon-160x160.png create mode 100644 web/public/images/favicon-16x16.png create mode 100644 web/public/images/favicon-196x196.png create mode 100644 web/public/images/favicon-32x32.png create mode 100644 web/public/images/favicon-96x96.png create mode 100644 web/public/images/favicon.png create mode 100644 web/public/images/fb.png create mode 100644 web/public/images/file-adjusted.png create mode 100644 web/public/images/file-cog.png create mode 100644 web/public/images/file.png create mode 100644 web/public/images/file_icon.png create mode 100644 web/public/images/file_thumb.png create mode 100644 web/public/images/filetype_header.png create mode 100644 web/public/images/folder.png create mode 100644 web/public/images/gear.png create mode 100644 web/public/images/hostr-logo-500.png create mode 100644 web/public/images/icons.png create mode 100644 web/public/images/logo-dark-r.png create mode 100644 web/public/images/logo.png create mode 100644 web/public/images/logo_dark.png create mode 100644 web/public/images/main-logo.png create mode 100644 web/public/images/menu-retina.png create mode 100644 web/public/images/menu.png create mode 100644 web/public/images/mstile-144x144.png create mode 100644 web/public/images/mstile-150x150.png create mode 100644 web/public/images/mstile-310x150.png create mode 100644 web/public/images/mstile-310x310.png create mode 100644 web/public/images/mstile-70x70.png create mode 100644 web/public/images/music.png create mode 100755 web/public/images/person.png create mode 100644 web/public/images/plus.png create mode 100644 web/public/images/round-icons.png create mode 100644 web/public/images/search.png create mode 100644 web/public/images/share_anything.png create mode 100644 web/public/images/share_anywhere.png create mode 100644 web/public/images/stripe-128.png create mode 100644 web/public/images/sync_wireframe.png create mode 100644 web/public/images/tagline.png create mode 100644 web/public/images/url.png create mode 100644 web/public/images/user.png create mode 100644 web/public/images/video.png create mode 100644 web/public/images/windows-app-icon.png create mode 100644 web/public/images/windows-backdrop.png create mode 100644 web/public/images/windows-logo-app.png create mode 100644 web/public/images/windows-white-icon.png create mode 100644 web/public/images/windows.png create mode 100644 web/public/maintenance.html create mode 100644 web/public/robots.txt create mode 100644 web/public/src/app.js create mode 100644 web/public/src/app/controllers.js create mode 100644 web/public/src/app/directives.js create mode 100644 web/public/src/app/directives/dropzone.js create mode 100644 web/public/src/app/directives/lazy-src.js create mode 100644 web/public/src/app/filters.js create mode 100644 web/public/src/app/services.js create mode 100644 web/public/src/lib/smoothscroll.js create mode 100644 web/public/src/partials/account.html create mode 100644 web/public/src/partials/apps.html create mode 100644 web/public/src/partials/billing.html create mode 100644 web/public/src/partials/collection.html create mode 100644 web/public/src/partials/file.html create mode 100644 web/public/src/partials/files.html create mode 100644 web/public/src/partials/footer.html create mode 100644 web/public/src/partials/header.html create mode 100644 web/public/src/partials/privacy.html create mode 100644 web/public/src/partials/pro.html create mode 100644 web/public/src/partials/terms.html create mode 100644 web/public/styles/app.scss create mode 100644 web/public/styles/style.scss create mode 100644 web/public/updaters/mac-changelog.html create mode 100644 web/public/updaters/mac.xml create mode 100644 web/routes/file.js create mode 100644 web/routes/index.js create mode 100644 web/routes/pro.js create mode 100644 web/routes/user.js create mode 100644 web/views/apps.ejs create mode 100644 web/views/email/activate.html create mode 100644 web/views/email/forgot.html create mode 100644 web/views/email/inlined/activate.ejs create mode 100644 web/views/email/inlined/forgot.ejs create mode 100644 web/views/email/inlined/pro.ejs create mode 100644 web/views/email/pro.html create mode 100644 web/views/email/style.css create mode 100644 web/views/file.ejs create mode 100644 web/views/footer.ejs create mode 100644 web/views/forgot.ejs create mode 100644 web/views/index.ejs create mode 100644 web/views/mac-update-changelog.ejs create mode 100644 web/views/mac-update.ejs create mode 100644 web/views/marketing.ejs create mode 100644 web/views/pricing.ejs create mode 100644 web/views/privacy.ejs create mode 100644 web/views/signin.ejs create mode 100644 web/views/signup.ejs create mode 100644 web/views/terms.ejs diff --git a/.buildpacks b/.buildpacks new file mode 100644 index 0000000..fb35cb4 --- /dev/null +++ b/.buildpacks @@ -0,0 +1,2 @@ +https://github.com/mcollina/heroku-buildpack-graphicsmagick.git +https://github.com/kudos/heroku-buildpack-nodejs-jspm.git diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f4a6fa4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git +.env* diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..8985849 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,14 @@ +{ + "ecmaFeatures": { + "modules": true, + "jsx": true + }, + "env": { + "node": true, + "es6": true + }, + "rules": { + "quotes": [2, "single"], + "no-underscore-dangle": [0] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..402159d --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.env* +.DS_Store +.sass-cache/ +node_modules +jspm_packages +/coverage/ +npm-debug.log +web/public/build +web/public/styles/*.css +*.gz diff --git a/CHECKS b/CHECKS new file mode 100644 index 0000000..491e862 --- /dev/null +++ b/CHECKS @@ -0,0 +1 @@ +/ No more waiting for files to upload before sharing the links. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c78d494 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM kudoz/iojs-gm +MAINTAINER Jonathan Cremin + +WORKDIR /app + +COPY . . + +RUN npm install && npm rebuild node-sass + +RUN npm run build + +EXPOSE 4040 + +CMD npm start diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0e1cadb --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +(The MIT License) + +Copyright (c) 2015 Jonathan Cremin + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +This license applies only to the code and not to the logo, branding or +design. diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..063b78f --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: npm start diff --git a/README.md b/README.md new file mode 100644 index 0000000..e178bda --- /dev/null +++ b/README.md @@ -0,0 +1,101 @@ +# Hostr [![Circle CI](https://circleci.com/gh/kudos/hostr.svg?style=svg&circle-token=1b4dec62afcb7960446edf241a5cf9238b8c20ed)](https://circleci.com/gh/kudos/hostr) + +## Getting Started + +### Runtimes + +Acquire [iojs](https://iojs.org) somehow, using [nvm](https://github.com/creationix/nvm), [n](https://github.com/tj/n). Or if you don't have or want regular node installed globally just use homebrew `brew install iojs && brew link iojs --force`. + +### Dependencies + +You'll need `graphicsmagick` for image thumbnailing, everything else is taken care of by an `npm install`. + +### Databases + +You'll need Redis for session and pubsub and MongoDB for persistent storage, `brew install redis mongodb`. + +### Configuration + +Configuration is all sucked in from the environment. + +##### AWS + +File are always uploaded to S3, but they can optionally be written do disk and cached locally. + +`AWS_ACCESS_KEY_ID` **required** + +`AWS_SECRET_ACCESS_KEY` **required** + +`AWS_BUCKET` **required** + +##### Email + +`MANDRILL_KEY` **required** + +`EMAIL_FROM` - defaults to `nobody@example.com` + +##### Databases + +`REDIS_URL` - defaults to `redis://localhost:6379` + +`MONGO_URL` - defaults to `mongodb://localhost:27017/hostr` + +The database connections default to connecting locally if an env variable isn't found. The following indexes are required. + +```js +db.remember.ensureIndex({"created":1}, {expireAfterSeconds: 2592000}) +``` + +```js +db.file.ensureIndex({"owner" : 1, "status" : 1, "time_added" : -1}); +``` + +##### Local cache + +`LOCAL_CACHE` - defaults to `false`. + +`LOCAL_PATH` - defaults to `~/.hostr/uploads`. if `LOCAL_CACHE` is `true` will store files locally and not just on S3/GCS. + +##### SPDY + +If you want to use SPDY, add an SSL key and cert. + +`LOCALHOST_KEY` + +`LOCALHOST_CRT` + +##### App + +`BASE_URL` - defaults to `https://localhost:4040` + +`FILE_HOST` - used by API for absolute file urls, defaults to `$BASE_URL` + +`API_URL` - defaults to `/api` + +`PORT` - defaults to `4040`. + +`VIRUSTOTAL` - API key enables Virustotal integration. + +`SENTRY_DSN` - DSN enables Sentry integration. + +Additionally, Hostr uses [debug](https://github.com/visionmedia/debug) so you can use the `DEBUG` environment variable something like `DEBUG=hostr*` to get debug output. + +### Deploying to Heroku + +Because it uses iojs and graphicsmagick runtimes hostr needs an env variable for `BUILDPACK_URL` set to `https://github.com/ddollar/heroku-buildpack-multi.git`. + +You'll also need to add Heroku Redis and a MongoDB addon. + +## Usage + +### Start the app + +`npm start` or to live reload `npm run watch` + +### Run the tests + +`npm test` + +## Licence + +The code is MIT licenced, the brand is not. This applies to the logo, name and colour scheme. diff --git a/api/app.js b/api/app.js new file mode 100644 index 0000000..0927185 --- /dev/null +++ b/api/app.js @@ -0,0 +1,154 @@ +import spdy from 'spdy'; +import koa from 'koa'; +import route from 'koa-route'; +import websockify from 'koa-websocket'; +import logger from 'koa-logger'; +import compress from 'koa-compress'; +import bodyparser from 'koa-bodyparser'; +import cors from 'kcors'; +import co from 'co'; +import redis from 'redis-url'; +import coRedis from 'co-redis'; +import raven from 'raven'; +import auth from './lib/auth'; +import mongoConnect from '../config/mongo'; +import * as user from './routes/user'; +import * as file from './routes/file'; +import debugname from 'debug'; +const debug = debugname('hostr-api'); + +if (process.env.SENTRY_DSN) { + const ravenClient = new raven.Client(process.env.SENTRY_DSN); + ravenClient.patchGlobal(); +} + +const app = websockify(koa()); + +const redisUrl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://localhost:6379'; + +app.use(logger()); + +app.use(cors({ + origin: '*', + credentials: true +})); + +app.use(function* (next){ + this.set('Server', 'Nintendo 64'); + if(this.req.headers['x-forwarded-proto'] === 'http'){ + return this.redirect('https://' + this.req.headers.host + this.req.url); + } + yield next; +}); + +const redisConn = redis.connect(redisUrl); +let coRedisConn = {}; + +co(function*() { + coRedisConn = coRedis(redisConn); + coRedisConn.on('error', function (err) { + debug('Redis error ' + err); + }); +}).catch(function(err) { + console.error(err); +}); + +let mongoConnecting = false; +const mongoDeferred = {}; +mongoDeferred.promise = new Promise(function(resolve, reject) { + mongoDeferred.resolve = resolve; + mongoDeferred.reject = reject; +}); + +function* getMongo() { + if (!mongoConnecting) { + mongoConnecting = true; + const db = yield mongoConnect(); + mongoDeferred.resolve(db); + return db; + } else { + return mongoDeferred.promise; + } +} + +function* setupConnections(next){ + this.db = yield getMongo(); + this.redis = coRedisConn; + yield next; +} +app.ws.use(setupConnections); +app.use(setupConnections); + +app.use(route.get('/', function* (){ + this.status = 200; + this.body = ''; +})); + +app.use(function* (next){ + try { + yield next; + if (this.response.status === 404 && !this.response.body) { + this.throw(404); + } + } catch (err) { + if (err.status === 401) { + this.set('WWW-Authenticate', 'Basic'); + this.status = 401; + this.body = err.message; + } else if(err.status === 404) { + this.status = 404; + this.body = { + error: { + message: 'File not found', + code: 604 + } + }; + } else { + if (!err.status) { + debug(err); + throw err; + } else { + this.status = err.status; + this.body = err.message; + } + } + } + this.type = 'application/json'; +}); + +app.use(compress()); +app.use(bodyparser()); + +app.ws.use(route.all('/file/:id', file.events)); +app.ws.use(route.all('/user', user.events)); + +app.use(route.get('/file/:id', file.get)); + +// Run auth middleware before all other endpoints +app.use(auth); + +app.use(route.get('/user', user.get)); +app.use(route.get('/user/token', user.token)); +app.use(route.get('/user/transaction', user.transaction)); +app.use(route.post('/user/settings', user.settings)); +app.use(route.get('/file', file.list)); +app.use(route.post('/file', file.post)); +app.use(route.put('/file/:id', file.put)); +app.use(route.delete('/file/:id', file.del)); + +if (!module.parent) { + if (process.env.LOCALHOST_KEY) { + spdy.createServer({ + key: process.env.LOCALHOST_KEY, + cert: process.env.LOCALHOST_CRT + }, app.callback()).listen(4042, function() { + debug('Koa SPDY server listening on port ' + (process.env.PORT || 4042)); + }); + } else { + app.listen(process.env.PORT || 4042, function() { + debug('Koa HTTP server listening on port ' + (process.env.PORT || 4042)); + }); + } +} + +export default app; diff --git a/api/lib/auth.js b/api/lib/auth.js new file mode 100644 index 0000000..cb15bf7 --- /dev/null +++ b/api/lib/auth.js @@ -0,0 +1,57 @@ +import passwords from 'passwords'; +import auth from 'basic-auth'; +import mongoSetup from 'mongodb-promisified'; +const objectID = mongoSetup().ObjectID; +import debugname from 'debug'; +const debug = debugname('hostr-api:auth'); + +const badLoginMsg = '{"error": {"message": "Incorrect login details.", "code": 607}}'; + +module.exports = function* (next) { + const Users = this.db.Users; + const Files = this.db.Files; + const Logins = this.db.Logins; + let user = false; + + if (this.req.headers.authorization && this.req.headers.authorization[0] === ':') { + debug('Logging in with token'); + const userToken = yield this.redis.get(this.req.headers.authorization.substr(1)); + this.assert(userToken, 401, '{"error": {"message": "Invalid token.", "code": 606}}'); + debug('Token found'); + user = yield Users.findOne({'_id': objectID(userToken)}); + } else { + + const authUser = auth(this); + this.assert(authUser, 401, badLoginMsg); + const remoteIp = this.req.headers['x-real-ip'] || this.req.connection.remoteAddress; + const count = yield Logins.count({ip: remoteIp, successful: false, at: { '$gt': Math.ceil(Date.now() / 1000) - 600}}); + this.assert(count < 25, 401, '{"error": {"message": "Too many incorrect logins.", "code": 608}}'); + + yield Logins.insertOne({ip: remoteIp, at: Math.ceil(Date.now() / 1000), successful: null}); + user = yield Users.findOne({'email': authUser.name, 'banned': {'$exists': false}, 'status': {'$ne': 'deleted'}}); + this.assert(user, 401, badLoginMsg); + const authenticated = yield passwords.match(authUser.pass, user.salted_password); + this.assert(authenticated, 401, badLoginMsg); + } + debug('Checking user'); + this.assert(user, 401, badLoginMsg); + debug('Checking user is activated'); + this.assert(!user.activationCode, 401, '{"error": {"message": "Account has not been activated.", "code": 603}}'); + + const uploadedTotal = yield Files.count({owner: user._id, status: {'$ne': 'deleted'}}); + const uploadedToday = yield Files.count({'owner': user._id, 'time_added': {'$gt': Date.now()}}); + + const normalisedUser = { + 'id': user._id, + 'email': user.email, + 'daily_upload_allowance': user.type === 'Pro' ? 'unlimited' : 15, + 'file_count': uploadedTotal, + 'max_filesize': user.type === 'Pro' ? 524288000 : 20971520, + 'plan': user.type || 'Free', + 'uploads_today': uploadedToday + }; + this.response.set('Daily-Uploads-Remaining', user.type === 'Pro' ? 'unlimited' : 15 - uploadedToday); + this.user = normalisedUser; + debug('Authenticated user: ' + this.user.email); + yield next; +}; diff --git a/api/public/404.json b/api/public/404.json new file mode 100644 index 0000000..5cd4cf0 --- /dev/null +++ b/api/public/404.json @@ -0,0 +1,6 @@ +{ + "error": { + "message": "Invalid API endpoint", + "code": 404 + } +} diff --git a/api/public/50x.json b/api/public/50x.json new file mode 100644 index 0000000..e996335 --- /dev/null +++ b/api/public/50x.json @@ -0,0 +1,6 @@ +{ + "error": { + "message": "An error occured on the server", + "code": 665 + } +} diff --git a/api/routes/file.js b/api/routes/file.js new file mode 100644 index 0000000..10bc559 --- /dev/null +++ b/api/routes/file.js @@ -0,0 +1,259 @@ +import path from 'path'; +import fs from 'fs'; +import crypto from 'crypto'; +import gm from 'gm'; +import redis from 'redis-url'; +import parse from 'co-busboy'; +import { upload as s3Upload } from '../../lib/s3'; +import { sniff } from '../../lib/type'; +import hostrId from '../../lib/hostr-id'; +import malware from '../../lib/malware'; +import { formatFile } from '../../lib/format'; + +import debugname from 'debug'; +const debug = debugname('hostr-api:file'); + +const redisUrl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://localhost:6379'; + +const fileHost = process.env.FILE_HOST || 'https://localhost:4040'; + +const storePath = process.env.STORE_PATH || path.join(process.env.HOME, '.hostr', 'uploads'); + +export function* post(next) { + if (!this.request.is('multipart/*')) { + return yield next; + } + const Files = this.db.Files; + + const expectedSize = this.request.headers['content-length']; + const tempGuid = this.request.headers['hostr-guid']; + const remoteIp = this.request.headers['x-real-ip'] || this.req.connection.remoteAddress; + + const md5sum = crypto.createHash('md5'); + + let lastPercent = 0; + let percentComplete = 0; + let lastTick = 0; + let receivedSize = 0; + + // Receive upload + debug('Parsing upload'); + const upload = yield parse(this, {autoFields: true, headers: this.request.headers, limits: { files: 1}, highWaterMark: 1000000}); + + // Check daily upload limit + const count = yield Files.count({owner: this.user.id, 'time_added': {'$gt': Math.ceil(Date.now() / 1000) - 86400}}); + const userLimit = this.user.daily_upload_allowance; + const underLimit = (count < userLimit || userLimit === 'unlimited'); + this.assert(underLimit, 400, `{ + "error": { + "message": "Daily upload limits (${this.user.daily_upload_allowance}) exceeded.", + "code": 602 + } + }`); + + // Clean filename for storage, keep original for display + upload.originalName = upload.filename; + upload.filename = upload.filename.replace(/[^a-zA-Z0-9\.\-\_\s]/g, '').replace(/\s+/g, ''); + const fileId = yield hostrId(Files); + + const uploadPromise = new Promise((resolve, reject) => { + upload.on('error', () => { + reject(); + }); + + upload.on('end', () => { + resolve(); + }); + }); + + const key = path.join(fileId[0], fileId + '_' + upload.filename); + const localStream = fs.createWriteStream(path.join(storePath, key)); + + upload.pipe(localStream); + upload.pipe(s3Upload(key)); + + const thumbsPromises = [ + new Promise((resolve, reject) => { + const small = gm(upload).resize(150, 150, '>').stream(); + small.pipe(fs.createWriteStream(path.join(storePath, fileId[0], '150', fileId + '_' + upload.filename))); + small.pipe(s3Upload(path.join('150', fileId + '_' + upload.filename))).on('finish', resolve); + }), + new Promise((resolve, reject) => { + const medium = gm(upload).resize(970, '>').stream(); + medium.pipe(fs.createWriteStream(path.join(storePath, fileId[0], '970', fileId + '_' + upload.filename))); + medium.pipe(s3Upload(path.join('970', fileId + '_' + upload.filename))).on('finish', resolve); + }) + ]; + + + let dimensionsPromise = new Promise((resolve, reject) => { + gm(upload).size((err, size) => { + if (err) { + reject(err); + } else { + resolve(size); + } + }); + }); + + upload.on('data', (data) => { + receivedSize += data.length; + if (receivedSize > this.user.max_filesize) { + fs.unlink(path.join(storePath, key)); + this.throw(413, '{"error": {"message": "The file you tried to upload is too large.", "code": 601}}'); + } + + percentComplete = Math.floor(receivedSize * 100 / expectedSize); + if (percentComplete > lastPercent && lastTick < Date.now() - 1000) { + const progressEvent = `{type: 'file-progress', data: {id: ${fileId}, complete: ${percentComplete}}}`; + this.redis.publish('/file/' + fileId, progressEvent); + this.redis.publish('/user/' + this.user.id, progressEvent); + lastTick = Date.now(); + } + lastPercent = percentComplete; + + md5sum.update(data); + }); + + // Fire an event to let the frontend map the GUID it sent to the real ID. Allows immediate linking to the file + let acceptedEvent = `{type: 'file-accepted', data: {id: ${fileId}, guid: ${tempGuid}, href: ${fileHost}/${fileId}}}`; + this.redis.publish('/user/' + this.user.id, acceptedEvent); + // Fire final upload progress event so users know it's now processing + const completeEvent = `{type: 'file-progress', data: {id: ${fileId}, complete: 100}}`; + this.redis.publish('/file/' + fileId, completeEvent); + this.redis.publish('/user/' + this.user.id, completeEvent); + + const dbFile = { + _id: fileId, + owner: this.user.id, + ip: remoteIp, + 'system_name': fileId, + 'file_name': upload.filename, + 'original_name': upload.originalName, + 'file_size': receivedSize, + 'time_added': Math.ceil(Date.now() / 1000), + status: 'active', + 'last_accessed': null, + s3: false, + type: sniff(upload.filename) + }; + + yield Files.insertOne(dbFile); + yield uploadPromise; + try { + const dimensions = yield dimensionsPromise; + dbFile.width = dimensions.width; + dbFile.height = dimensions.height; + } catch (e) { + debug('Not an image'); + } + + yield thumbsPromises; + + dbFile.file_size = receivedSize; // eslint-disable-line camelcase + dbFile.status = 'active'; + dbFile.md5 = md5sum.digest('hex'); + + const formattedFile = formatFile(dbFile); + + delete dbFile._id; + yield Files.updateOne({_id: fileId}, {$set: dbFile}); + + // Fire upload complete event + const addedEvent = `{type: 'file-added', data: ${formattedFile}}`; + this.redis.publish('/file/' + fileId, addedEvent); + this.redis.publish('/user/' + this.user.id, addedEvent); + this.status = 201; + this.body = formattedFile; + + if (process.env.VIRUSTOTAL) { + // Check in the background + process.nextTick(function*() { + debug('Malware Scan'); + const { positive, result } = yield malware(dbFile); + yield Files.updateOne({_id: fileId}, {'$set': {malware: positive, virustotal: result}}); + }); + } else { + debug('Skipping Malware Scan, VIRUSTOTAL env variable not found.'); + } +} + + +export function* list() { + const Files = this.db.Files; + + let status = 'active'; + if (this.request.query.trashed) { + status = 'trashed'; + } else if (this.request.query.all) { + status = {'$in': ['active', 'trashed']}; + } + + let limit = 20; + if (this.request.query.perpage === '0') { + limit = false; + } else if(this.request.query.perpage > 0) { + limit = parseInt(this.request.query.perpage / 1); + } + + let skip = 0; + if (this.request.query.page) { + skip = parseInt(this.request.query.page - 1) * limit; + } + + const queryOptions = { + limit: limit, skip: skip, sort: [['time_added', 'desc']], + hint: { + owner: 1, status: 1, 'time_added': -1 + } + }; + + const userFiles = yield Files.find({owner: this.user.id, status: status}, queryOptions).toArray(); + + this.body = userFiles.map(formatFile); +} + + +export function* get(id) { + const Files = this.db.Files; + const Users = this.db.Users; + const file = yield Files.findOne({_id: id, status: {'$in': ['active', 'uploading']}}); + this.assert(file, 404, '{"error": {"message": "File not found", "code": 604}}'); + const user = yield Users.findOne({_id: file.owner}); + this.assert(user && !user.banned, 404, '{"error": {"message": "File not found", "code": 604}}'); + this.body = formatFile(file); +} + + +export function* put(id) { + if (this.request.body.trashed) { + const Files = this.db.Files; + const status = this.request.body.trashed ? 'trashed' : 'active'; + yield Files.updateOne({'_id': id, owner: this.user.id}, {$set: {status: status}}, {w: 1}); + } +} + + +export function* del(id) { + const Files = this.db.Files; + yield Files.updateOne({'_id': id, owner: this.user.id}, {$set: {status: 'deleted'}}, {w: 1}); + const event = {type: 'file-deleted', data: {'id': id}}; + yield this.redis.publish('/user/' + this.user.id, JSON.stringify(event)); + yield this.redis.publish('/file/' + id, JSON.stringify(event)); + this.body = ''; +} + + +export function* events() { + const pubsub = redis.connect(redisUrl); + pubsub.on('ready', function() { + pubsub.subscribe(this.path); + }.bind(this)); + + pubsub.on('message', function(channel, message) { + this.websocket.send(message); + }.bind(this)); + this.on('close', function() { + pubsub.quit(); + }); +} diff --git a/api/routes/user.js b/api/routes/user.js new file mode 100644 index 0000000..36ac916 --- /dev/null +++ b/api/routes/user.js @@ -0,0 +1,85 @@ +import uuid from 'node-uuid'; +import redis from 'redis-url'; +import co from 'co'; +import passwords from 'passwords'; + +import debugname from 'debug'; +const debug = debugname('hostr-api:file'); + +const redisUrl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://localhost:6379'; + +export function* get (){ + this.body = this.user; +} + +export function* token(){ + const token = uuid.v4(); // eslint-disable-line no-shadow + yield this.redis.set(token, this.user.id, 'EX', 86400); + this.body = {token: token}; +} + +export function* transaction(){ + const Transactions = this.db.Transactions; + const transactions = yield Transactions.find({'user_id': this.user.id}).toArray(); + + this.body = transactions.map(function(transaction) { // eslint-disable-line no-shadow + const type = transaction.paypal ? 'paypal' : 'direct'; + return { + id: transaction._id, + amount: transaction.paypal ? transaction.amount : transaction.amount / 100, + date: transaction.date, + description: transaction.desc, + type: type + }; + }); +} + +export function* settings() { + this.assert(this.request.body, 400, '{"error": {"message": "Current Password required to update account.", "code": 612}}'); + this.assert(this.request.body.current_password, 400, '{"error": {"message": "Current Password required to update account.", "code": 612}}'); + const Users = this.db.Users; + const user = yield Users.findOne({'_id': this.user.id}); + this.assert(yield passwords.match(this.request.body.current_password, user.salted_password), 400, '{"error": {"message": "Incorrect password", "code": 606}}'); + const data = {}; + if (this.request.body.email && this.request.body.email !== user.email) { + data.email = this.request.body.email; + if (!user.activated_email) { + data.activated_email = user.email; // eslint-disable-line camelcase + } + } + if (this.request.body.new_password) { + this.assert(this.request.body.new_password.length >= 7, 400, '{"error": {"message": "Password must be 7 or more characters long.", "code": 606}}'); + data.salted_password = yield passwords.hash(this.request.body.new_password); // eslint-disable-line camelcase + } + Users.updateOne({_id: user._id}, {'$set': data}); + this.body = {}; +} + +export function* events() { + const pubsub = redis.connect(redisUrl); + pubsub.on('message', function(channel, message) { + this.websocket.send(message); + }.bind(this)); + pubsub.on('ready', function () { + this.websocket.on('message', co.wrap(function* (message) { + let json; + try{ + json = JSON.parse(message); + } catch(e) { + debug('Invalid JSON for socket auth'); + this.websocket.send('Invalid authentication message. Bad JSON?'); + } + const reply = yield this.redis.get(json.authorization); + if (reply) { + pubsub.subscribe('/user/' + reply); + debug('Subscribed to: /user/%s', reply); + } else { + this.websocket.send('Invalid authentication token.'); + } + })); + }.bind(this)); + this.on('close', function() { + debug('Socket closed'); + pubsub.quit(); + }); +} diff --git a/app.js b/app.js new file mode 100644 index 0000000..9923a5c --- /dev/null +++ b/app.js @@ -0,0 +1,35 @@ +import koa from 'koa'; +import mount from 'koa-mount'; +import spdy from 'spdy'; +import api from './api/app'; +import web from './web/app'; +import { init as storageInit } from './lib/storage'; + +import debugname from 'debug'; +const debug = debugname('hostr'); + +storageInit(); + +const app = koa(); + +app.keys = [process.env.KEYS || 'INSECURE']; + +app.use(mount('/api', api)); +app.use(mount('/', web)); + +if (!module.parent) { + if (process.env.LOCALHOST_KEY) { + spdy.createServer({ + key: process.env.LOCALHOST_KEY, + cert: process.env.LOCALHOST_CRT + }, app.callback()).listen(4040, function() { + debug('Koa SPDY server listening on port ' + (process.env.PORT || 4040)); + }); + } else { + app.listen(process.env.PORT || 4040, function() { + debug('Koa HTTP server listening on port ' + (process.env.PORT || 4040)); + }); + } +} + +module.exports = app; diff --git a/circle.yml b/circle.yml new file mode 100644 index 0000000..2954b8f --- /dev/null +++ b/circle.yml @@ -0,0 +1,24 @@ +machine: + services: + - docker + pre: + - curl https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash + - npm install -g npm@3 + node: + version: iojs-2.5.0 + +test: + pre: + - mongo hostr test/fixtures/mongo-user.js test/fixtures/mongo-file.js + override: + - npm run cover + post: + - docker build -t $CIRCLE_PROJECT_REPONAME:$CIRCLE_BUILD_NUM . && docker save $CIRCLE_PROJECT_REPONAME:$CIRCLE_BUILD_NUM | gzip > $CIRCLE_ARTIFACTS/$CIRCLE_PROJECT_REPONAME-ci-build-$CIRCLE_BUILD_NUM.tar.gz + +dependencies: + cache_directories: + - node_modules + - web/public/jspm_packages + post: + - ./node_modules/.bin/jspm config registries.github.auth $JSPM_GITHUB_AUTH_TOKEN + - ./node_modules/.bin/jspm install diff --git a/config/mongo.js b/config/mongo.js new file mode 100644 index 0000000..85c44ae --- /dev/null +++ b/config/mongo.js @@ -0,0 +1,21 @@ +import mongodb from 'mongodb-promisified'; +const MongoClient = mongodb().MongoClient; +import debugname from 'debug'; +const debug = debugname('hostr-api:db'); + +const uristring = process.env.MONGO_URL || process.env.MONGOLAB_URI || 'mongodb://localhost:27017/hostr'; + +export default function*() { + debug('Connecting to Mongodb'); + const client = yield MongoClient.connect(uristring); + debug('Successfully connected to Mongodb'); + client.Users = client.collection('users'); + client.Files = client.collection('files'); + client.Transactions = client.collection('transactions'); + client.Logins = client.collection('logins'); + client.Remember = client.collection('remember'); + client.Reset = client.collection('reset'); + client.Remember.ensureIndex({'created': 1}, {expireAfterSeconds: 2592000}); + client.Files.ensureIndex({'owner': 1, 'status': 1, 'time_added': -1}); + return client; +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..78f9a16 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +web: + image: kudoz/hostr + env_file: .env-docker + links: + - redis + - mongo + ports: + - 443:4040 +redis: + image: redis + ports: + - 6379:6379 +mongo: + image: mongo + ports: + - 27017:27017 diff --git a/init.js b/init.js new file mode 100644 index 0000000..c7da2cc --- /dev/null +++ b/init.js @@ -0,0 +1,2 @@ +import { init as storageInit } from './lib/storage'; +storageInit(); diff --git a/lib/format.js b/lib/format.js new file mode 100644 index 0000000..584b494 --- /dev/null +++ b/lib/format.js @@ -0,0 +1,52 @@ +import moment from 'moment'; +import { sniff } from './type'; + +const fileHost = process.env.FILE_HOST || 'http://localhost:4040'; + +export function formatDate(timestamp) { + return moment.unix(timestamp).format('D MMM YY [at] h:mm A'); +} + +export function formatSize(size) { + if (size >= 1073741824) { + size = Math.round((size / 1073741824) * 10) / 10 + 'GB'; + } else { + if (size >= 1048576) { + size = Math.round((size / 1048576) * 10) / 10 + 'MB'; + } else { + if (size >= 1024) { + size = Math.round((size / 1024) * 10) / 10 + 'KB'; + } else { + size = Math.round(size) + 'B'; + } + } + } + return size; +}; + +export function formatFile(file) { + const formattedFile = { + added: moment.unix(file.time_added).format(), + readableAdded: formatDate(file.time_added), + downloads: file.downloads !== undefined ? file.downloads : 0, + href: fileHost + '/' + file._id, // eslint-disable-line no-underscore-dangle + id: file._id, // eslint-disable-line no-underscore-dangle + name: file.file_name, + size: file.file_size, + readableSize: formatSize(file.file_size), + type: sniff(file.file_name), + trashed: (file.status === 'trashed'), + status: file.status + }; + + if (file.width) { + formattedFile.height = file.height; + formattedFile.width = file.width; + const ext = (file.file_name.split('.').pop().toLowerCase() === 'psd' ? '.png' : ''); + formattedFile.direct = { + '150x': fileHost + '/file/150/' + file._id + '/' + file.file_name + ext, // eslint-disable-line no-underscore-dangle + '970x': fileHost + '/file/970/' + file._id + '/' + file.file_name + ext // eslint-disable-line no-underscore-dangle + }; + } + return formattedFile; +} diff --git a/lib/hostr-file-stream.js b/lib/hostr-file-stream.js new file mode 100644 index 0000000..d17a486 --- /dev/null +++ b/lib/hostr-file-stream.js @@ -0,0 +1,36 @@ +import fs from 'fs'; +import path from 'path'; +import createError from 'http-errors'; +import { get as getFile } from './s3'; + +import debugname from 'debug'; +const debug = debugname('hostr:file-stream'); + +export default function* hostrFileStream(localPath, remotePath) { + const localRead = fs.createReadStream(localPath); + return new Promise((resolve, reject) => { + localRead.once('error', () => { + debug('local error'); + const remoteRead = getFile(remotePath); + + remoteRead.once('readable', () => { + debug('remote readable'); + const localWrite = fs.createWriteStream(localPath); + localWrite.once('finish', () => { + debug('local write end'); + resolve(fs.createReadStream(localPath)); + }); + remoteRead.pipe(localWrite); + }); + + remoteRead.once('error', () => { + debug('remote error'); + reject(createError(404)); + }); + }); + localRead.once('readable', () => { + debug('local readable'); + resolve(localRead); + }); + }); +} diff --git a/lib/hostr-id.js b/lib/hostr-id.js new file mode 100644 index 0000000..be784cb --- /dev/null +++ b/lib/hostr-id.js @@ -0,0 +1,26 @@ +const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + +function randomID() { + let rand = ''; + for (let i = 0; i < 12; i++) { + rand += chars.charAt(Math.floor((Math.random() * chars.length))); + } + return rand; +} + +function* checkId(Files, fileId, attempts) { + if (attempts > 10) { + return false; + } + const file = yield Files.findOne({'_id': fileId}); + if(file === null) { + return fileId; + } else { + return checkId(randomID(), attempts++); + } +} + +export default function* (Files) { + let attempts = 0; + return yield checkId(Files, randomID(), attempts); +} diff --git a/lib/koa-error.js b/lib/koa-error.js new file mode 100644 index 0000000..2625cd8 --- /dev/null +++ b/lib/koa-error.js @@ -0,0 +1,75 @@ +/** + * Module dependencies. + */ + +var swig = require('swig'); +var http = require('http'); + +/** + * Expose `error`. + */ + +module.exports = error; + +/** + * Error middleware. + * + * - `template` defaults to ./error.html + * + * @param {Object} opts + * @api public + */ + +function error(opts) { + opts = opts || {}; + + // template + var path = opts.template || __dirname + '/error.html'; + var render = swig.compileFile(path); + + // env + var env = process.env.NODE_ENV || 'development'; + + return function *error(next){ + try { + yield next; + if (404 == this.response.status && !this.response.body) this.throw(404); + } catch (err) { + this.status = err.status || 500; + + // application + this.app.emit('error', err, this); + + // accepted types + switch (this.accepts('html', 'text', 'json')) { + case 'text': + this.type = 'text/plain'; + if ('development' == env) this.body = err.message + else if (err.expose) this.body = err.message + else throw err; + break; + + case 'json': + this.type = 'application/json'; + if ('development' == env) this.body = { error: err.message } + else if (err.expose) this.body = { error: err.message } + else this.body = { error: http.STATUS_CODES[this.status] } + break; + + case 'html': + this.type = 'text/html'; + this.body = render({ + env: env, + ctx: this, + request: this.request, + response: this.response, + error: err.message, + stack: err.stack, + status: this.status, + code: err.code + }); + break; + } + } + } +} diff --git a/lib/malware.js b/lib/malware.js new file mode 100644 index 0000000..84d87c6 --- /dev/null +++ b/lib/malware.js @@ -0,0 +1,38 @@ +import virustotal from 'virustotal.js'; + +virustotal.setKey(process.env.VIRUSTOTAL); + +const extensions = ['EXE', 'PIF', 'APPLICATION', 'GADGET', 'MSI', 'MSP', 'COM', 'SCR', 'HTA', 'CPL', 'MSC', + 'JAR', 'BAT', 'CMD', 'VB', 'VBS', 'VBE', 'JS', 'JSE', 'WS', 'WSF', 'WSC', 'WSH', 'PS1', 'PS1XML', 'PS2', + 'PS2XML', 'PSC1', 'PSC2', 'MSH', 'MSH1', 'MSH2', 'MSHXML', 'MSH1XML', 'MSH2XML', 'SCF', 'LNK', 'INF', 'REG', + 'PDF', 'DOC', 'XLS', 'PPT', 'DOCM', 'DOTM', 'XLSM', 'XLTM', 'XLAM', 'PPTM', 'POTM', 'PPAM', 'PPSM', 'SLDM', + 'RAR', 'TAR', 'ZIP', 'GZ' +]; + +function getExtension(filename) { + const i = filename.lastIndexOf('.'); + return (i < 0) ? '' : filename.substr(i + 1); +}; + +export default function (file) { + const deferred = {}; + deferred.promise = new Promise(function(resolve, reject) { + deferred.resolve = resolve; + deferred.reject = reject; + }); + if (extensions.indexOf(getExtension(file.file_name.toUpperCase())) >= 0) { + virustotal.getFileReport(file.md5, function (err, res) { + if (err) { + return deferred.reject(err); + } + if (res.scans) { + deferred.resolve({positive: res.positives >= 5, result: res}); + } else { + deferred.resolve(); + } + }); + } else { + deferred.resolve(); + } + return deferred.promise; +}; diff --git a/lib/resize.js b/lib/resize.js new file mode 100644 index 0000000..7e44e07 --- /dev/null +++ b/lib/resize.js @@ -0,0 +1,10 @@ +import debugname from 'debug'; +const debug = debugname('hostr-api:resize'); +import gm from 'gm'; + +export default function(input, size) { + debug('Resizing'); + const image = gm(input); + + return image.resize(size.width, size.height, '>').stream(); +} diff --git a/lib/s3.js b/lib/s3.js new file mode 100644 index 0000000..b89353e --- /dev/null +++ b/lib/s3.js @@ -0,0 +1,19 @@ +import aws from 'aws-sdk'; +import s3UploadStream from 's3-upload-stream'; +import debugname from 'debug'; +const debug = debugname('hostr:s3'); + +const bucket = process.env.AWS_BUCKET || 'hostrdotcodev'; + +const s3 = new aws.S3(); +const s3Stream = s3UploadStream(s3); + +export function get(key) { + debug('fetching file: %s', 'hostr_files/' + key); + return s3.getObject({Bucket: bucket, Key: 'hostr_files/' + key}).createReadStream(); +} + +export function upload(key, body) { + debug('Uploading file: %s', 'hostr_files/' + key); + return s3Stream.upload({Bucket: bucket, Key: 'hostr_files/' + key}); +} diff --git a/lib/storage.js b/lib/storage.js new file mode 100644 index 0000000..932f07c --- /dev/null +++ b/lib/storage.js @@ -0,0 +1,24 @@ +import fs from 'fs'; +import path from 'path'; + +function range(start,stop) { + var result=[]; + for (var idx=start.charCodeAt(0),end=stop.charCodeAt(0); idx <=end; ++idx){ + result.push(String.fromCharCode(idx)); + } + return result; +}; + +const storePath = process.env.FILE_PATH || path.join(process.env.HOME, '.hostr', 'uploads'); + +const directories = range('A', 'Z').concat(range('a', 'z'), range('0', '9')); + +export function init() { + directories.forEach((directory) => { + if (!fs.existsSync(path.join(storePath, directory))) { + fs.mkdirSync(path.join(storePath, directory)); + fs.mkdirSync(path.join(storePath, directory, '150')); + fs.mkdirSync(path.join(storePath, directory, '970')); + } + }); +} diff --git a/lib/type.js b/lib/type.js new file mode 100644 index 0000000..736d0e5 --- /dev/null +++ b/lib/type.js @@ -0,0 +1,34 @@ +const extensions = { + 'jpg': 'image', + 'jpeg': 'image', + 'png': 'image', + 'gif': 'image', + 'bmp': 'image', + 'tiff': 'image', + 'psd': 'image', + 'mp3': 'audio', + 'm4a': 'audio', + 'ogg': 'audio', + 'flac': 'audio', + 'aac': 'audio', + 'mpg': 'video', + 'mkv': 'video', + 'avi': 'video', + 'divx': 'video', + 'mpeg': 'video', + 'flv': 'video', + 'mp4': 'video', + 'mov': 'video', + 'zip': 'archive', + 'gz': 'archive', + 'tgz': 'archive', + 'bz2': 'archive', + 'rar': 'archive' +}; + +export function sniff(filename) { + if (extensions[filename.split('.').pop().toLowerCase()]) { + return extensions[filename.split('.').pop().toLowerCase()]; + } + return 'other'; +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..34ede98 --- /dev/null +++ b/package.json @@ -0,0 +1,98 @@ +{ + "name": "hostr", + "description": "Hostr - simple sharing", + "repository": "https://github.com/kudos/hostr-web", + "version": "0.0.0", + "private": true, + "engines": { + "iojs": "^2.5.0", + "npm": "^3.2.0" + }, + "scripts": { + "build": "npm run build-js && npm run build-sass", + "build-js": "babel -D -m system -d web/public/build web/public/src", + "build-sass": "node-sass -r -o web/public/styles/ web/public/styles/", + "cover": "istanbul cover _mocha -- --require babel/register test/**/*.spec.js", + "init": "node --require babel/register init.js", + "jspm": "jspm install", + "start": "npm run build && node -r 'babel/register' app.js", + "test": "mongo hostr test/fixtures/mongo-user.js test/fixtures/mongo-file.js && mocha -r babel/register test/api test/web", + "watch": "nodemon -x \"node -r 'babel/register'\" -i web/public/ app.js", + "watch-js": "babel -D -w -m system -d web/public/build web/public/src", + "watch-sass": "node-sass -w -r -o web/public/styles/ web/public/styles/" + }, + "dependencies": { + "aws-sdk": "~2.1.42", + "babel": "~5.8.20", + "basic-auth": "~1.0.3", + "co": "~4.6.0", + "co-busboy": "~1.3.0", + "co-redis": "~1.2.1", + "co-views": "~1.0.0", + "debug": "~2.2.0", + "ejs": "~2.3.2", + "gm": "~1.18.1", + "http-errors": "^1.3.1", + "jspm": "~0.16.0-beta.3", + "kcors": "~1.0.1", + "koa": "~0.21.0", + "koa-bodyparser": "~2.0.0", + "koa-compress": "~1.0.8", + "koa-favicon": "~1.2.0", + "koa-file-server": "~2.3.1", + "koa-generic-session": "~1.9.0", + "koa-logger": "~1.3.0", + "koa-mount": "~1.3.0", + "koa-redis": "~1.0.0", + "koa-route": "~2.4.2", + "koa-views": "~3.1.0", + "koa-websocket": "~1.0.0", + "mandrill-api": "~1.0.45", + "mime-types": "~2.1.4", + "mkdirp": "~0.5.1", + "moment": "~2.10.6", + "mongodb-promisified": "~1.0.3", + "node-sass": "~3.2.0", + "node-uuid": "~1.4.3", + "passwords": "~1.3.0", + "pretty-error": "^1.1.2", + "raven": "~0.8.1", + "redis": "0.12.1", + "redis-url": "~1.2.1", + "s3-upload-stream": "^1.0.7", + "spdy": "~1.32.4", + "stripe": "~3.6.0", + "supertest": "~1.0.1", + "swig": "^1.4.2", + "virustotal.js": "~0.3.1" + }, + "devDependencies": { + "eslint": "~1.0.0", + "istanbul": "^0.3.17", + "mocha": "~2.2.5", + "nodemon": "~1.4.0", + "tmp": "0.0.26" + }, + "jspm": { + "directories": { + "baseURL": "web/public" + }, + "dependencies": { + "angular": "npm:angular@~1.4.3", + "angular-reconnecting-websocket": "github:adieu/angular-reconnecting-websocket@~0.1.1", + "angular-strap": "npm:angular-strap@~2.3.1", + "angular/resource": "npm:angular-resource@~1.4.3", + "angular/route": "npm:angular-route@~1.4.3", + "bootstrap-sass": "npm:bootstrap-sass@~3.3.5", + "cferdinandi/smooth-scroll": "github:cferdinandi/smooth-scroll@~5.3.7", + "dropzone": "npm:dropzone@~4.0.1", + "jquery": "npm:jquery@~2.1.4", + "zeroclipboard": "npm:zeroclipboard@~2.2.0" + }, + "devDependencies": { + "babel": "npm:babel-core@^5.8.5", + "babel-runtime": "npm:babel-runtime@^5.8.5", + "core-js": "npm:core-js@~1.0.0" + } + } +} diff --git a/test/.eslintrc b/test/.eslintrc new file mode 100644 index 0000000..b309be5 --- /dev/null +++ b/test/.eslintrc @@ -0,0 +1,6 @@ +{ + "env": { + "mocha": true, + "es6": true + } +} \ No newline at end of file diff --git a/test/api/auth.spec.js b/test/api/auth.spec.js new file mode 100644 index 0000000..943302c --- /dev/null +++ b/test/api/auth.spec.js @@ -0,0 +1,33 @@ +import { agent } from 'supertest'; +import app from '../../api/app'; + +const request = agent(app.listen()); + +describe('hostr-api auth', function(){ + + describe('with no credentials', function(){ + it('should `throw` 401', function(done){ + request + .get('/user') + .expect(401, done); + }); + }); + + describe('with invalid credentials', function(){ + it('should `throw` 401', function(done){ + request + .get('/user') + .auth('user', 'invalid password') + .expect(401, done); + }); + }); + + describe('with valid credentials', function(){ + it('should call the next middleware', function(done){ + request + .get('/') + .auth('test@hostr.co', 'test-password') + .expect(200, done); + }); + }); +}); diff --git a/test/api/file.spec.js b/test/api/file.spec.js new file mode 100644 index 0000000..5f38802 --- /dev/null +++ b/test/api/file.spec.js @@ -0,0 +1,68 @@ +import assert from 'assert'; +import { agent } from 'supertest'; +import app from '../../api/app'; + +const request = agent(app.listen()); + +describe('hostr-api file', function() { + + let id; + + describe('when GET /file', function() { + it('should receive a list of file objects', function(done) { + request + .get('/file') + .auth('test@hostr.co', 'test-password') + .expect(200) + .expect(function(response) { + assert(response.body instanceof Array); + }) + .end(done); + }); + }); + + describe('when POSTing a file to /file', function() { + it('should receive a new file object', function(done) { + this.timeout(30000); + request + .post('/file') + .attach('file', 'test/fixtures/utah-arches.jpg') + .auth('test@hostr.co', 'test-password') + .expect(201) + .expect(function(response) { + assert(response.body.name === 'utah-arches.jpg'); + id = response.body.id; + }) + .end(done); + }); + }); + + describe('when GET /file/:id', function() { + it('should receive the file object', function(done) { + request + .get('/file/' + id) + .expect(200) + .expect(function(response) { + assert(response.body.name === 'utah-arches.jpg'); + }) + .end(done); + }); + }); + + describe('when DELETE /file/:id', function() { + it('should delete the file object', function(done) { + request + .delete('/file/' + id) + .auth('test@hostr.co', 'test-password') + .expect(200, done); + }); + }); + + describe('when GET deleted /file/:id', function() { + it('should not receive the file object', function(done) { + request + .get('/file/' + id) + .expect(404, done); + }); + }); +}); diff --git a/test/api/user.spec.js b/test/api/user.spec.js new file mode 100644 index 0000000..47c5b3c --- /dev/null +++ b/test/api/user.spec.js @@ -0,0 +1,62 @@ +import assert from 'assert'; +import { agent } from 'supertest'; +import app from '../../api/app'; + +const request = agent(app.listen()); + +describe('hostr-api user', function() { + + describe('when GET /user', function() { + it('should receive a user object', function(done) { + request + .get('/user') + .auth('test@hostr.co', 'test-password') + .expect(function(response) { + assert(response.body.id === '54fd04a37675bcd06213eac8'); + }) + .expect(200) + .end(done); + }); + }); + + describe('when GET /user/token', function() { + it('should receive a user token object', function(done) { + request + .get('/user/token') + .auth('test@hostr.co', 'test-password') + .expect(function(response) { + assert(response.body.token); + }) + .expect(200) + .end(done); + }); + }); + + describe('when GET /user/transaction', function() { + it('should receive a user transactions object', function(done) { + request + .get('/user/transaction') + .auth('test@hostr.co', 'test-password') + .expect(200) + .expect(function(response) { + assert(response.body instanceof Array); + }) + .end(done); + }); + }); + + describe('when GET /user/settings', function() { + it('should update user password', function(done) { + request + .post('/user/settings') + .send({'current_password': 'test-password', 'new_password': 'test-password' }) + .auth('test@hostr.co', 'test-password') + .expect(200) + .expect(function(response) { + assert(response.body instanceof Object); + }) + .end(done); + }); + }); + +}); diff --git a/test/fixtures/mongo-file.js b/test/fixtures/mongo-file.js new file mode 100644 index 0000000..f71214d --- /dev/null +++ b/test/fixtures/mongo-file.js @@ -0,0 +1,21 @@ +db.files.createIndex({ + "owner": 1, + "status": 1, + "time_added": -1 +}); +db.files.save({"_id": "94U1ruo7anyQ", + "owner": ObjectId("54fd04a37675bcd06213eac8"), + "system_name": "94U1ruo7anyQ", + "file_name": "utah-arches.jpg", + "original_name": "utah-arches.jpg", + "file_size": 194544, + "time_added": 1436223854, + "status": "active", + "last_accessed": null, + "s3": true, + "type": "image", + "ip": "::1", + "md5": "1f4185751b4db05494cbc0aad68d7d77", + "width": 1024, + "height": 683 +}); diff --git a/test/fixtures/mongo-user.js b/test/fixtures/mongo-user.js new file mode 100644 index 0000000..95595a6 --- /dev/null +++ b/test/fixtures/mongo-user.js @@ -0,0 +1,7 @@ +db.users.save({ + "_id": ObjectId("54fd04a37675bcd06213eac8"), + "email": "test@hostr.co", + "salted_password": "$pbkdf2-256-1$2$kBhIDRqFwnF/1ms6ZHfME2o2$a48e8c350d26397fcc88bf0a7a2817b1cdcd1ffffe0521a5", + "joined": 1425867940, + "signup_ip": "127.0.0.1" +}); diff --git a/test/fixtures/utah-arches.jpg b/test/fixtures/utah-arches.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3f5382e403009735214701b436d85b739bb0ab2 GIT binary patch literal 194544 zcmb5VcQjmG^gnzt5oL(piOy(I20@4(bwnA$7$*8)2&06M2%`7idmW7EF-j06dhaAp zLUfX72}z#(=J|ftyMFJV@4L^eyUtp7KIiPa&*$uY?m7GZUHSVDKxd$Fcmd5%`FBx8X5*#YHB(bItE52W@cuZ zTdeG?Ol%BH%uN3^@*n&L=?y9(kcozxhUx#e{2c)3DM;%;L~ZB+QhE|HdXm3`05<>t zH~-W2{|X5y8R!Q2O$y4tYXHUn-uWg?4j$E|(WTK4uJslZe4@*c284l7Y`~;%@UG)5 zvQ5Nh=LPtq+U}XW>Ik-^Sk`ZUO0%|l!l&0mMPHm-Luck%IPJQ>`zz^Z8T1wig;Z}awEuHT(sTg87N+c^QzNH>*|6RdX`JCCA%2hh3(!A&%WEWE_|!G z=7d1h9zoGjYka?I=ez#2BkwVRRr7T*S~+ByBlae=RtCFL z^my1iFqGO=DCb}2U86Skahx8SAD{yO^?p)l3giF{0{6e74?_V?E@=Yf6rczIK(TkK z)S(GkpZ%!DDBD|Cy8poCBfENE*0!e&Ep+MAD%$v_B8zwIo{bzR^VICse`mY#a4>?K zlAo7^jhBRsmx7-Dkzrg^e^`kV>U}>OzyVI^<4q@8S=yzG_V`Y<`@)Hb)JYL7b-~dI z_QKcM`ba*Hb+fg(P*7e{ruHf@^>mqA#AuPZ!u|IL7`~?>jYvNbz>9iGr%!pOlb?Zt zJ%>ES#fc(;osOJ%10a)j$3EEGeBQZ+hQ2|c9%Ib|tn+eD^P)=#wz&*=DT$2L%Dg1k z{!TLPn+Ul1GuN!Lp?-{D8VDQ)gb4sK^rR3mc*Qk~5gGB>`{~))K&bab1EDf#%n8*t z2Q2ayMi2Vnt4E%9S|vu3Ds&a-&d#J7k0P}>&@$FA`^eaeL~;8ULq4W-+6)u`37}3N z4x*rEDp!=ep%Dg708pTCauQQnVE{d#9z&V|7W3535dhf8wY33&;bjVu z?b7Z6*B=|u&^duN6ZosQ3+^1Nhl^AMd^4_$d2;b$@!bNu!Fa2jPM$kVPBr)WTOqqu zI*>Xkh=d&=Ay!@*NQ0Lmfc_K#fSyj4Tz!HL1ZI@T!yYQp7z1`lMaZ4?*hh z>3B)P%?BjWMu&| z^2ZwH*E`6Q(ej+EM8fmX^l{U*DQfTD6LB%jd3L~(5QDsnV&-QY#DgzIFclOIaxjz( z)1`P%929;%aYhgc8!*A1SM>any!cKr(JWvxUN9MXXSQdsInH9))?(4INj4ye$J>y( zmZd#t{ds;;)SRKT$EVpdu$LV{Ma)04B#a29*z}B{;|FPLYg0|c^aHxY!6&Dh z*U4_wC*vi_0bWLsdrhrs9`yt>br0Fb^@50m|m0&H?ruUpe=XXlDW z;TfIxRJ`hpYtut6*EJG8%>?w2d*JvJHSXxuzhJLGn5{W{@u!c_Ru3b;D6G^b*Jy}L zr6=Xpsz;Tl{Er>z$khRjK~i!sk#;V1v{nD+ceq~t0N|5{owm!e;ePb>YV z`B1GsE^c$aX6U&@9WylVx6Ttd)=(}_*_r|ZAy4dz-x~X$L>YCU(5COOxfL=p#jI z@sn7|OO$|8>9489b1PGFYC(WBAgv3?@dFd#38Yle55ad#6OA@Mqu*3Zho^ZeH(La; z{D4|arZTiD$iv5HPyClz8PMO@M^{7s+|>{y`f7lU5~ThC)nMU2)6ZIsJIm~Ry@+sf zB8d<%1CtTk1zalA^p>FO7>j+y%Q@c-`x}-S;UuVKHJ)fi?qNNyNCm+a55$^hgZMYw z_9j7XeO`ATnu_;H$R0**Z3@`_Re_dg{z<5?%ZSOm_hHZj>H!A5go!b&ba8L~IU!*t5iTVa_9p?0A(y0j40>5Qjtok4 zyj%fF^rR&F^jq|#cMO;Md@s}Q^AyIpq^Yylx?n1Rav6Rs!KMMWD=|5&i_2AZ&!{S{ zK0lVc5GlHHC&qb(;zY+4-;gyWdc*Ff(y$rJaLe9oT8dTRB^l8V(g81t&P*^2WLKEa zlGGGSIW{+xu*xQ2kuTT;&L?LwYp+{g!<=$erJF0#j$YV$S)N8ec;0<1sYwwN#!oKv zVHsx#mFy8Lj_ZfGTsR;JSv045e*yQgiJJI$gwhToMQ??WHuf3TktUh2eBTd{=a zRCME(9%fVm32Jki8fMPfrvadFUNEVwK4zX@;$bAGOGc@ndInRu zZL3K~z?fei*Gs>=kzcp%*C*;qhR^ahENwB^yEy9ntGU-JxyoD~7zTA>wCc~>6so)& zNHlZRYSb4bF~8OF&S6-@XkK!y(O<8DF854O9oh+p3&=Z#{2S{r2*j@bb9=} z6vPD*seySw2Q%+Gv>YZ)I-{1ipUiwI`c_k*r-^Ll@>M&Z3eOMUc8Bl(TD1(VBLg65 zV!SBqCC#O3`tPnJAB8j$`V{#U#C|Z#Tr#r;Gz8*HuwVG$Qy}`60kV7^kuMVHG^MbGM$d7%PK56}& z7X4m~vNgi|tm9Im!yZpiewkEKCn8vg?MZ56R>L)S0x>C(sTFkmg2cXTqWWw4!>JzH z&=_Y8Vv{-O9d=X_ofUC~ykJh)fK8%Vy?7a?RILx1Yl= zZZM;x@8}qv6q_o_#1;M8t&U%<`qH#esl_0iZq6x!w48gGQ3??d3>T~*H84Xc*cfn` z5=d#>EqrAIK2Kz1Y^+XCZ^+g|{=m4TpoOe1pPub=I{VipCSJMH|KA>| zE!ANOg{LR>MHt%if}z9;)q=-+p_4n|Lu=lAO0W+vSXoM&F;(lD3>gvp`V4yS^YtVh zVNsKhy=qdtI4m!oqzln-eyN)8uPPYk5yb|6xNMlysB^X)Pk&6+3l8wWUw^Ql+?evy z55~B3hK$_1K;ApnY4B40eE26TL=PLtF^X$-=nyh29(rt3E2o0Bi3sTQgfx#PF@}xg4B48u&EI(V49PHuoF;=dk6qKEy$8dhJ@oHSF6` zcG1HT7S_y+A4rz#=-dI*=wEmAJD+K&VY9N_Q{t3uBz8r&7h|*}p{opLEKYj*bd&~^ zLWh^N#rTooQiO2@pBOpGn{|VNF=vDdM%hX7fy>LssoMdYWI1+6!bh)jf6}E@ANg73 zRin;NShq!G=9o%4^37v2cB}7+@KT%WmJGt1rsJ) zQ!Ba25GWrH4}%6#Px=P+cdi~cjrV?yi?yGfcmBYx=qZHm8aniU7~2>hLG3|AJ&^f6 zj@-4D*XWJ2DF(5c?RNDg@P_SVsO4AcOuK4?GMUtLXFlddMQrip_kFw9s2erb92qh`Cc zB@I821{50|JLk&=JIjTPO{e1ZFO)QUL>8LPeo$2OUqwkw-q^m}UK`BIJ(Fzt{Y*Jr zu#^IbKrgC25Tau%|MZsWTY&Mdg{4JD1kVGAlfOS2DKS`p2CEx^O^j` zrFFr)rOW&&JB#d@t=4UinRe4k<4M!`fq0rqZ^FU(W&BAk`Y@*^W{5f||) z;!iU#X-6j&!zMF2nOZL5PFij&@Fkx}cwa`JL5)${*O?&fs zmx(c}iSHn%=aejsnWym^ICxpfkrp~0q)Z(*Q9{a}Up+wXjI zgg=^>1Tn+r;8dJHAW4ohDA8lC(wH-HX&&^kUBxrzU?XJ%=ZnOmG0uBg5d~Hju52`7^8l4WdQu)?DMb@VNguI9u%%#h8c%f8a$eZ`~24E@m{lhDIM8)YXU2)}@=oS9`w z<;y*Rm_G7~H}gJj|L6-ZaHXPN8@9fgJ5Pi;&`jNypTNu}O=)??4Se9L%&41aHM|O5 z{aLSe3I8%yuf#%o-;Cv9$-;=&SNWGKYhy3X?huA7n?L6H+C5m2|LIpftf=;8Rx!`O zi2eo{IccJc1~O;u@ertWFDV--w#rc26r6o#c_Cu$=u_8PXNJf$H-Cks7M~la#s?t2 z8BE2f^^n&o7ARgs(|s9ePqac&#W~eli}omV$lQd*Q#KxnV83$xINsrl{5h?1Aa%Or z%j++wTU{vNEVxxwU2zgY;*v7~3l%p%Gbh(_clH(Nftzr5#qBdh?gw(G9VR`=%IB0k z^3t-G(@4-4%s6PZkS)m=`JCz{)Z846C}_{6Rjc%LEnbk1Qao-r?0&V_b0c!t_-vW? zyrW!8X{KDi`>Z4;Z7UwpcP>l!ZhIZ9qBJl6-hW{PQx@@v)Aw$w6}^b)&R(mf?GLr= z*4DOfh-al*!+qinL&7#<#%HNYZxlGTEewPi)i;kH2z^}+;<^W$Hr9}daVa7*IgASN z7;4-j`~?UH;*S|dVUjS0@Iv5$P!W>uH8ddC3co9(7ZS%G3%)`Y=gybnFAsCVM zR9D3c`F7=w}Tlc>t(?jLXCTer6fokONn;8^`#Bqpv=JeaJ^Vl3Wu+5z)aF-N(h z@g8T&v?8Yc^0KXJH!_0!AeBQ7bU4MR;9HsZ(L!&hQsLcc#YB)OItT6JE`a!20jW?` zG7Vp;UOhPQrCznZw^u@ZQP~q1Uu6CB~}zrg69Zb@p(8%1U~=W7gTN zhI_FCJwgXwB->Ohf}Ww3^JCD8R5IRq`ZfLD7Mm))O#We8s-3K}DWMLY6cx3NukZeaKT$bBH}_WWv4Dtt36nKhG=u^8A-i zsgJ+bAkXFZY^puG53$p~B_9SiT3j<2J7tx%&wI8<)~?=SV2AE;Ke8#d$tr0dd3X;HXHQR|261?=@|-y z5wwD_Wj@Ol-Jih=)pW23>(U)$DmlM!ef@!TVoGdDz5>4LZQ=#u+3x3bYK+8S+WxBX zr1`1hvoE!?{36-+mad<@D7_5&SiCyxyb>CS5n?h+S=%Oj3-WBv$U}5#ZWu+g@-BU< z5rn|H-%QqQ6!c-z5O|JFi8USR;kU^;3Ok%D zG_18L@PG3@o8MAR4)LaJFRiy;`Euf@#WJTQ*$TNE(P%#< zshGI0(1#Y+UrlV%xBZ@rB>e?iRU~cSDhKJjtUJG7%~R7*?D9(gb*4G@DAV^ACEF;n zbx;b$K!N{Al~IbWyO*3c%`WAaVc&^0pLb||dCBc`H$(mD&6y>)wWwobL9fi)Do>+4 zvl;jg1huA*zH>*b81KOR9Z&SX@0eOVMPv`3gnq=sr+5Fo*~q%dx|Y3ovMu*VJm)-c zR~UEu_V{kqEZSFXPns^Wg3QO)$=JN=aXXu|foa2X^@Q`Tb?9L22saJCq({S0W8K@V z1rDf&s<9W=M;Ns7jVIOOea+%Ogf?yO+h;}d`>}T#>VHgzoQB?BxxR-nevuloH?bMm zB{?<_Ez)?Fl+AkjOp;CcAE)i+R};NYH2?(Ngotmbu86tb-tycbL~{X&u>R?PK29_~QNVTPuZI0=US9JEXo* z*U44g%SW5}wzo&l$L6oM;QrOQ!`I#decY;Ryap+CG!}Z?7cS+R{iM=cI7JH=eZjn? zU*on}O>C2}cuAtV&yX~O8p-J&I;x4Z)OWTZB`60ka@6<+qPNd%p%Tzm zpM*hR5SNq;CZp10;%=m`H1vVFy`%6)mHfBqu7&vtN4_@=UKI!~^!2_8xXJxdbI~Vvly$fSeG}k@Rmj}I z76hx9(tlXG(n4T!(XU_@a6Ms!E#7%%6Za)JkDA-X(H1w#B73Da#g%;+U>*7@Su)+S z(A6dJae4&%8_~V`p)o)3Ns`-C>CfYbZU^6yUTxC9Nq2i$3%1#>5e3;K4@yICwl+nR zMeA(6p$=Xx%Kplb{a)#L5O?r_f}M>gvNo%z{&#&df5EDpsTM?Hsu)rs#}g-2QomI? z;8{VwV<9DM8IW+~pJI>OWohRwPn$b85>GE_5f4&W(;jPG@5d!GJoiPyY3=KHzZIFC zcj%0sN|`h)bX5Lx?`%cY;r$h>?iN+YfJ~NmSzz{6z;Y7SQhB15b@hQ5-OXhS^bi1oZd=#DLvVK<&;^dOVY*{51`Sdd;tY#Sobez~$6-&<7)gZw;?t+<0cMMI@ zOXtjNi55mXnrZ6~ymzhB${&qwb;efHRO zW~+ZU^(q>ctoG3uBit)5v}qCo^Vz4z_n4jC9u6qTvS=T#JMG@AOO?7(=vk-g8fAd2 zzH#uU&71lZh4_Trh2tAehmpN+i<0k z!?J%W&iCeAri~Gq(zzMB!w%n%g>?=O(3Z2MgvE;}tf|qRBpB>eV$i%lH1jR1R&hq` z-Q{$KFV;g0E-qhems*7#ls+Ue9rx_;JjY$mb&l-I$YaH!ZpFsRDzy$~hb1_KvRg37 zYESa&-`M~rQf=l#$ECGZGZE&pQb$B6IR<(&7=%_j&3;DJ^QRK2%lg(uZoc`e2M%Wa z(DdBa{e*Y8$pt$0K56%w6Fe&>sA|ETq4LuvzASl<=9m+{K67d{O+ zy=C>{T|eAfN3vh?sP)Qw2wp86>}|TwOMG@-eq@wuTo|nU6~}91(Wet>7sN0|IB-!x zHX8=gHQUe#n?lWVBOHz^2v&kEEVybKT<@^hxapfrn{7^NOqFoaXZg$Lp&zJC_yb(j z3GZy}P&>yi8_I;4=?b@de{GV~s`<;p8Zj$sd{L7V-w zx^wv1qjc@xhB;ZZRVr;dx^P8CXPZX3tm=FL?BsA%)?8QB*<}C+t&T|9k|U#-L)|NX zEk>u2moI9tDyFVtRe01)8_P%Q@uS=ij`iq(wJ4N_=y6b1luKI@_65(u+;ZBQ$>HxG z_n(p1A36yQzk`W+YNhfKMmzjWKi0j1)Nv>UoGVx_vr5#9BI5);s%j3%RoW|@stxD{ z4|_%5sGjM3Z-S{9cWJhn3QSr+Q!$+2bva)T%`NenHGN%s+-gxsX7#{-;C+@gi zHox}tLv+-;9|mI$AH?vJbp^-{vXp%H$h%-J1>9w_cig^`ROsx{iHt@4xtHcV!CE#y!dl#iC)e9n zx1n}+u${1r&b4yvoYpO^CBz)cK5DP=;;OHl6*h7UX!^Q;J70u#v^C2wk2cz>aGwT# znxir~nF#9FAIqzs+qrF+)+Hsb z!Ac_|wGZ-6(&2&91P{*B#(q4P0fz7~f0n%Ty>{U>K@wT%Dt*o^V&*GkK{H|Tnb+Ju z_9wSJ>zv6YHyHtQ-+#muqYb|HDu zNv#s+k$IqUVtD65?sOZwS?zjx$KwoJSMkO2iA_KBn}2;YD%*CkpRrE^epKh~BZ{8m zb5r`(v0eG#qPWX{ZyCQotX`gId{Z*B{aG&5j++q7OuK%6a`(K09fvOqkW1w*7IW!H zeB|a}xuA}pO^WZb2Y+1oL|`@MV)1IJJ{#wDmI{tm3M?x$2`m(uYN8imgsK)78NMPD z_VxXv0(YI@b7U>38Cp0{veI@BeDvY$co0Erjh0I}s{gcCy?EHTpVPXyxbX>pYIy;H z4{|%HIICuEamIQMzB?c0m|IykQaK#PT2uK^tp`@g%m!A~Gf`XTX?^ZerTq(JU3h>) z#(G1^;BOnU4by!Gq80tI3emaeC&>j<2F*LCXiRED#qOfan{yY_xqpzuQ^DhmQvqo; z#ku6nvJK_-+OrSvnXdMz0DeDqzpsa>$*Iq~m$@frJLdy!Xt+Tv*<9|i~&TN}?1 z;*RU>wr_L&q{^qbT1Gd9a+wq|MNmY;ffY7dc5mUW&3qH!mCl7+pVluMZ z8CpOMAR~{OKp~#LfQ~Y*x%XvJW%gd%Z!OI`$KP80FRX{Ql4UXj>n@ZE>S|n+pF7Gg zADqq}-J2~tQlQvb+b9j6`qy(&-e=N#_;30x~MP*dSS%>A!OqEjEFvT%~ zpMDh?oiOo$B%LiP1(*SV8Jho)rPJ@SUKh3vj~C{N6e~Qf5iOyNtPYq;w8qY}Tz5Gc zoBD?V0A;DP5xGoQG@S#n&IcwT!s~YCvm$pLB2StFhTwT`Xqzd8XT_lx(Al)?yY}@2 zOFa~^aZ-T8Cmlsus?S%I6FY25*Jq>-h+WZ7>LJ`4_U4ONCUv3n*31-x=+6BUbTzYV z0p(`ZIyn&t@VYq^=#8mUkn^$uKo|!I3P}787B^2g7ec0%t=4oP9So$y^suwD`}Zth z{>!0+qyPE?fG80tF7Z@-1`5oBi2eJdp-E_;gPRJr-I@ska7--5zfhDq~k5m&10S@*j!vh!iTj|A@XdxZICyeYr9^1CSq?x z`~K^SC`LCZTcwE^48$r4Ww;L0CtSrwWfczXXQ`+JGsnNt6brB>S@pHr3{qu80W|+( za8MuUzyJRybi5CTOH=fuW?{A$qLD}KF!-VcF9PTD3fucrbq#|8h>!7~F#gZ=e=eX@ zo)95@NSQZ}m>AYKGfRcpZ<($3+#ApTHbkT{41oS`CnVDU7eY~)sv@4T2sO#hsc$wD zQfaWz#g$e1mAdo#+O7Y8)mFaOgSG2~(h}7>Gt8H5KoF;L;%Bz!nCm12;l`St&$rv$)Te ztsRo3YS-flhw)rrSF6?=(#humdX_$Q%Gg%Gh$NhiR~s%nS*M8tcsW2MRK=`JmB{9| zX4B6P5f%g2uU$>?^6ElL)*Y~XA;EkUK;aM%kiV?r%}9X`4u?xnwH&+#0P;K-uh{8$ z;j7{0fQFWGEdv77b()?1pK{v=DjrsTZBv@K(I#mU8JBXWD1b%=*a672)B(y?8896{ zs)6*GHm+07%nN|F?7q@<_q&i7PpjcGSTvkn>b%=&){xT&2*52@2KCtZ2A>8JCwdG? z6(F3>;pXPXAigUW6mWDTwx5*fDPRkUx_h{OFK7=YipxQ?G~D~i*Hvzwu>z2=ji!2% zlz`a%ri_8XJ|h62FWL{IEa9)~kBak}eT&J|WVLxeJSIK%%tebF^{`xmr{UzpS<#OG zt=lG32Pim*WMh$3RFDS#;}Bg10PxFi^#`g6ZHA&B%~B5Q275NIf}|nVU?s7a&V*R& z4!C*F%)B~?GE7V|U7cij5%)74MPveyLy7|EGr5e`EM&!ld)V9Gm$>KQI}on42cotfk$9q1`RuHRv z+tdxvY3PoLU`d$Mlk`l4@{dR&G%VKDDfIv*M@WguD-|kyuhrPj;2?#kIzOE?elppp zX4!dKzPuxUdKzAcFDGU^W`^`|vy)Kqg{;dxko*Ot0F>1%VgD%_+n;bkFwM%ZhEP1F zTF;RI$<$|VFV4ReRMf}HdzAfN&C184h>kioHSo=#c?y*TiZTp3r{7A1Qm~SHVHepu z_j3SJyifwg!sCFkN)I9XJC?aeESkPOG7(0A1+KD6kLUx`c~Q{!VS{1BmVAcb>51(& z8$^;)5(5fVwXM>sR5ga1HbKI|M7;M@Mg#%|`1>4)lq01@hfx?qXN27@-R>&tz@ij=SrV3Kp7@D1Ef9H z^77TrcVq*rlQ1LUu!3&~Cakv#Sw6%ZoQH5Jc+`q}?w`v#Z&vjY9idp0y7AfLqab>D0e!C+O`%;3yC zd_JE?FTPQk!?uLFMsZEnhf=1c`wQfL4Q&@iBBoXWKhh~uyH zWUlH7qL$?@9|G9+rrp?iVQa&%cW@?yXDS`eiy;|AK+_5}Vzypf9@RkHT`cAf^+;A6e|xvo_928`qPrW7{UHq784>s)xz8<{(KwnDA1WR~e=p0OK%QT_1BH_GDtbUgYZHTR;=%4CstS<;-&~y^-FQ2w3qz@~LdOxna|D!&o zqMwh9E(LfZGh{7Jd`W{yd$P$EbE-}2zL~d$jVi(hd=OWE~%aCs$tx&{J za{cR!6oAo&K8({d#WOZ5cZG_R5Z5^=IVsNl=7rZhQQPa}8*!3DUz+QXKQPd9&+4h2 zO0fk26=CTFbF|L6sc7D zX-8!(vRha)zAo-I)<_Wn06uvkYPO>jM-no;!GWiyFM<&|K$hqgX z(LsMy6)w|BfIIY9f*i^Rq@=~W7R6#B1^h6ZWu~7_ch@#sMjhe0!A!P%BpubW?xT}K z+Vm>I6pUPzw~c4SZT|vF7B}rhR(rW+CFic!YhMMxaRqIfxR&!!L)3sMz(6r9;93xY zrjK=LSP%MLAgvph?&RuO%9O4*zfbV<`Pq~pnKAql(2e_Z^2X_VioS2R*!(#SwqX^M zZOxBO%9q>15tg-PMrDQoQaaI^CMk}@bV6QPct>l)W_ne%$s$B z3f6>XZ)_RpzfG>GBnaa#>Bau-#owe?fxQM_{Oy7`FUnwX| zE7}P9Wa)l+{XEs=*5@2{1%I{JgAmE*)3yS*?Ur}$XGLWXMEZTZN9<1+8~_p>9noP( z(DoN4hImWFYOq*B&=)luD6-S>O>;~(vzvjRJN#l_IqU`>5pDj5U5J|SN6N^ylX`i$~o z?kC!hErX9Tyl3YUdyq@gqv1;K!i4t6(aK33=F`LSV!sM|U3d3{5fCe{iMEm2%j2ir zzfT`j@2fd~zP+c^Sa|w-isqx=428aqu8e`q4IU+kpppn*wbNtFm5}8IpR>OyyKLZL zSG{M3kBQFgBy1$#v8I3eW6!%BSb<&Oj+B4xI#6(G@E0g^x!}Z_r~3cAfA`&GqtR2T zz`W0mm7zEKDK(jgpt=yv`XtmsC5SY>NkOygvAAnvjwZk95YN}@jBN4L`}(0u%BUMI zl9_Iq(yx>IekQ)kUQn7F7fGM}Lr^+3ZJhqSm3$cL-FnuGnEocP_A4UXfN&V66=~sN zP-Y(QLD1g#wto_yL|XdNG0oM}omtzF+%laQ%%r9Tg% z+H_U;*yUZgb@~@jJ2So5oGRu_-x^mN+H=sPi)1o0O+>{)+6#{TEsR$-+x2|Y1t`v( zMfv|tki<3-&ep5?tyt3oxN@!w&GQ_`TXMfo_@*(>M^0sn)rH;{Ne_Je3nZLVep* z#MznM?U|oeM?HUmv3nBw1Lm(EcYwVvl|n+ZLdT~N$LUui*`NIWbWhmcmohn0<(Nz0 zPXRMI@YQyRD2;i-gwmbFUb%5?TVt|TRX71Jt`h~Xf;JP~j_7|(-N)4m&tU4t3coDLbT=fe6^;@nD%c0qRy)s!?XM&Q_C@8-P$-ez&-|77^jzg{X@OLBU_|=EM zK+~-96^|U#^nrf@S^C-_Tzz`RNr?s`y&x`Kp6xD z6}NglIF3wPknG-L3L=oy?vA3b=gL+E(+q9=tpn20JiB^3N!ZHi<9{8K%R&hv|{+@SMH>)tKarXHBwltb@6VQo+W)`1zfQ zyeK_%K9zoL^~2Q_e5ydDijc>$*g9b$qevmHaPZMSk@G`mjj- z$@Ur1Map6Ji!`)>*}WHJu`@d!qX_eMfk{cWj9DRSSNQk?<cW=7trCYVDNo2$5-B6M+g>+8`K!cZ$K{n(T`(E>dMNaoDLrgK* zZfTxViSD{6pL6Ooyd~kVQG*)3>J&_*Oyai3h#PTAIoRHj-w&~K>^bt6GD*Y5*_#*7 ze-uX-9ELaEYq)*{M$H2x32Yf=32xs)CfW}0&s)f0_T7`w@vdrj$8lVkE}GTjJuRLf zYifRLrlZ+Z!E2qysPX?4fHGg^SKIV~mx%_no%r+wf z?Q@jizJ3r^-#kA-WgLy3>8)dDhh>^;S1LS!F$*6<1MfHGicH z&zK`8dCh>sA+h%0WR+wq^U^|x(fw;XlT7mitP0C6!A4~A6TTOgY_Vf5B;*v+i?P{t zR@61_LB;(r=5a?K!>HkN5@ykvX!!+m4en)0#CZu0CfN9y^H_gJDa%<)@ zPI5V`w%V~!m5N$+U>uH>5-lPaN=7QlTl=ep9~?yAsSY*u3xMG3^cEl6{_{PvhvE3D zUg`Lvqt|(24;__vwQ+zQUUaJIWeC`9l-guF6T+-Lenmj-RI50^EFq8AIb043J}KjR zqp3Wb-wPwf3OI451qz~5HwGP*2090PW@pAe<#9S%x;v(ETxW}8=>sfxnc*#rqt4oO ziRad=>@}5Q%vpQY@Emk|gYjpb%AkUB>aFTr=b7G(tX0iL*ZWRlfx~8_{;z{hA_Clo zTUM)NEH7G@y9#Zab!#8+cnC@LV%WSAS{(|?>gR3ueai}=>vkACC5+tFYlJH+)7n@oG{2lc_}Z z6TGZXex&E?%+-T=n}wFWNt|5dmSNKa%eAX)j|69f1ZU^OMT}3TOeKKp|*v(*}Q#tSy!p2hmN8q7Jr@fTQ>2u zR(B0AIawwqLx3Adx5r&bDp<24vslHl+-a0WN7G?PKF9V&HXh9c@m)iDRhG@kqA{rN z(m}&R`FA3^1qAHJ!sBtXcJt}VyFxad7TcOEc4vEdd|{9$t_j_tn(l1TC6RgcIWyyf zRky)$>+ssf62-L6qbFALI1c69<6fUwT91 zww6>P<134fa;vy6?wyUxBLBS!T&`F`hBomWi-BGdv- zLZ+PGy{on5_IeLovvT$t6*_mGHSagR?NXhspX5mh@~A7SeFt@JjBl|-V2`Gk8%dn1 ze!el5tq+G@$YHZhvTGVXJ}~$fR=BjVpQ@3a?-F;anzI>aX$ZfneSa*VkijJBB~AFn zqDWP)YIADUStwQ2Z3w&fy?%D0STnDonhCS_iBSIw`%ck{Ws_M+?ZzD!t&pI${dt!d zG1U1$0Wv1{+z&F#(W&HIM>5l|v54>H7^}u~Vb4CzR+(mc)zuPu?s|)eA2izEzZbYE z-@MteOkixhqwvW4)oY}utdix}I+c%mowiqe=RoHZKg+~IBMZrV*}JoBefYK(kJxIV z%z~q_Nyb-7#je6)fm?xaS52jw@L4}gTnp^WTOR$jy_s`IKaYJv7fXu(Hal;*qmYxd z4wK}pNR5wHv~`y5&L5SyBR9J|>pql)yA!f}cO1$yxv31^nD}ur8eti9Fz)=OW0}jQ zCgC6}c3dcnp@co3>n_#l+Co|@pOFam|HB~% z865xs-}NKV5srdU)*`l`Ie>giu#fHd@VF_qO&{iatT5Ux&4iwY5Zud-6~;8j$E@qH zk=lHvVPLnLEG?z2{Z;)<@_eau{nB)6=-1wri|rcB{B#zx{_P09c4%BI?sPfsPu42$ z&{$UR@qAjAa2PsF7!bzk>uHha8=>;m0UFBJ+Cjlc?wPlkOd~S~wq*W(1VDHRA z_YSiu)monK)(ZDS=iMC0h3lTs$<*pZFqI8|h6sO#D&(OCEH92`-E={ja9vriUtHzF z>nJLDY?Ip}n(_hXBo!)>Obg&}14uiUv>j4}rPcd<&}r&9V5XPZfjqIagpG--3xgW{ zY-?#>ParWQMDe6Gp+Iy}2SQIy#*{KM1Bf}Rh{g;9QT>1n8Sx9_{-(pDk3y^*hyqt< zba*~$BZn8hwf!z2M{^uIAJrN;$0iLB-#j0Fi1#Ia>B`{%kmo>n(TQNM5BT*0M^43I-vf&xfWhHw12DQQHC zlbZLBV2CtJOe=`y;DZ>$i(I%e1Sw;<9#JNOK{I`F2>>TuKLF)>O&-QZGm4l`>(m9u zHrj3rX7HEnD(S}y$rd2*3V~yxGo*kP8wCd{irk+U;3OWRp@<*5p~zCbR;}P;9iiX$ z*EuPMWesr1sZsqJ-6xaDLiCydiEz&6KJutMHz25wjm)u46H-c3O59~1RAB5xA{n#x zt?^fHWHja6>pNEYNA(l6Sh$)ZK~d10f=98uZsdHiFAHPH!NDEo#S&X|+9{L?S|o`w zqn)(@tq4keQC;XFPKtKiL$Y8y6})&>ij*dS=1_*S_dc=0f&vAMh%^5> z`MjPa3Dyn+^|9%z5d75=69qrzD+Eim3M_YO`WCE+zLRpVDQlfG(nJ|+qx$uQQw(Tk zhyzEis2IE)FBZ z844dvQwIz!>zT(OP|DJmwg9?>4N7LF2RN`nrOE9*&sWXoMVIpnsyye#?cznhEH)yW zJrk%6l-LVAAI^%2^OK@rhx=6mPv~;U6wb<`^4KWDa)k34jf@<~6$9b+GmVN&9a__I zG_d_mmr>_;cE=nX=^{=ClcSBWUoxj&ah1Y3z)_r~E-wX1tNXZ_dcX8dmK#VT%o|$K!nb~J&m(Zg|MURDOT6hpR4Of?I zhcX*-v;iSuzWH)Q*f@pAt_g?N8xMH)OY0YNBM|W^oUi=oAy2rUf2xsl*7VpjYlz=^ z&nmAhsA$49n)OV;T>rJkD3P)7`Z)WAor81_3Y-kZ<5Rv!RD?3W$j&&*llkf5tfz1HMZTvK z8vjCKFSi=G9OsVgf&P;DeN8+6?zHvb!1l+Cryf}*R!L74Vq0CaKG2Lpb5Ss@aBx(# zrLn+@DCtMCt;XtX;_rKk7zN*`0qO?JDoxI1AEtgb&Jrr==Gi7}c%Z1r*yOnZgji7y zCcsYlGZ~)naR)gR6lpA^-+p{|A1k1bE}mqF`ij@UM6nJ@kUID4HC)Zf89qriiTimR zOt80>MJdO!+cfkgr0}J&u6VU zLxoKzN3uIOj=XyLzJzki>HIv3Wv+4jC z^xT1gIh#EzuTrV*J`h5u==|PZ(0(xez9O45Aiak9BQ`fW3%8E6ilL#-lUy=nQvpSg zhp10W1|@>%joQ0c8i=ZDg~`ocZ+la`(ur?}2jRZWW+ID+={$B&6u7jY1bJz;XdlA; z34b444Ii0;l3|d)f0-LCjsFEj#ZXZqdq9oI^Y&)c+*p~@TgX+cY6qr2$e__x6am;e z`I#a8eg9&A*1(<$DC!ja*rh{30X!)R4whx0Re=(ds^CSUbWg8*W<1nP{#+lRyM@56 z7Y^VsGFZ|I6`9-IIUsO6Zz+$G9#AcxnsrwoJoOV-i{K{DsAQzceU4@Qgzyzec_>;( z4)b7~gwMO6EedLMX1h{SHW#r%%N_rvFCSrD@4hz=;iq^i1OA=CuVA)HW;MM1k;vI& zJo`-#3d#T@4Guap?9EFuOn!~%9TT@|dktQ<MeYo5w4QJ%1RvM=?Ryt0E^LtVe^-7aZs?Ip}s;_l%Y`w z2}U<}m=tXua1sa@C$(k0XA9KZs>0b(!HA-D zChgf059>(6qiT-&jPzHB{MyB(`LPN*=-zFD`0-fQDisuwPg&kPslk8p#Tov+*noM< zU7I!$M*webU}V#)F1#yERQL{jcHx}TfWXOc;@$R*TzkgAT$7ctd$ho2OH+gI)S#R^$URrL4KZ+xmHPYd2;%% zgFkl>G_938QRSSvTvywt9$;vfSI&cgRR8mzaNcA9Lb3#*AUV}4`L z?93MA)_g}{jcr$ZeXG-4=^SV zr_y)XuVH0}J-+#>gTwp-E{35H<#}DZhk4n&3V8GE6!n=4veS&0h>Q4Ih;PGZH8`>7 zU=SAc6ExZ$-7fushqCB%SnK#e& z-nwn%PYg9+=gx1P2a)rAI1G}2Wk} z^n@xhe*q3PQT#=DV?4iqx8f_T?EVLo%?lwlq((JQ+lmKwg(12({Be+5c<>;=(Ghpi zRlh77I`whzT%seh3`0@o&!z=?3zZ9w*;le}2>@g#zzGp!@$C0skB)yA`@K2bc-SAl zM~EAUjBtW4HBoF~NyF86nkGbYtPb$A(U*^8`s>g{?Ua~i<(RQ~1yRSo-Hp{!WFOh@$ZHT{u`f#O zaT^$sB64~YVEGdt5FEW8r9Zjxz{WT(M_wE<8elm$a$Z3VZ}1B&k_y=*K|tOoWkx*V zj8u+clqah)(A6kGMES!G>IQMyTT3>@c~bUv#wGmRl?;dhJD$Eb1b4CR*LT##$;<0{ znfj)b)I!}Ozoxy8lXrjrMUh*}*1OZ_mf2yyO&z0{TikX|lrLO7tX1Gvc_*U6?MS52 zI)KwZ4dyA%UArymxx70$H$I*pc_OAhSM{SROCu;(45Tt=-=MGFGFv?6FK7a`giL){ z9#1*_!!~snI9r%QzKS}}X73CkDBKicZt00o7!9GH(zDXgca3!3aX>{R7JUAs3QbI> z;gV5eh1gqCi@tOG?%E>TLhkdA;|q!C_0t>yAr{yO zMFvF$I_Z?OcA1cgj3R4U{yGU%jA2TlQhPXywN1e;{k@KuOY9Fy>1?@bs+zz>ow z(Jnzd)>5Q9tEL*>OZS{uA zrA*%@5R*aW%7LJb!-btX<1Y2}&SuL=KiAh^3M77yTTNCcoL)1|J(b?b7~5ns*XtP` zW)XQQy-jF>gNO#Oy;KBEv>6Dn-_)NSTrQU{0OrGA@p}QRFmd#zSaH;^G znfFw2mJ4#kW4DtRR5?Eh{4Lp0(PN6f={IHCd}U$cp{LbVlTJiFP+7EY!LmPLQ`Qyh z&9?VvL^0CkdvW4&Oo>YJI!2KC$p-Pe)n`^Ctb2EqjegrWgCjxu6(X4xS^y>NHXOR?J}*) z8mh$l3zsp^cH(FK1Zvm)(4OZb@;jzb| zIB+?NVw-$KG%CbN!F6YVQ$z0qcDo ztXLv*+srid&F^vO;dxst7}lz@aU*m-XQ@SN$&i9$abk_UDy(Y=z+L zdWVO#_b+==sai-%sdfRyCx4_Jf z2%@#cN?%|#IdX}+U>hL)40R5G=fI< z+)q}%C8u0>Qrt|QFAf1`HVI#9s307JlWc_fO{Qz!*Cnl0M7gSmc-6M*>T}0XN@TXO zoGs?J5zHTmUbuf~^;ujryhEM}Mc4L6-cv}F)uy7`P;u@IFuCL9OJ$FpE@3Ab@Zz<; z?u1=yl*Hvxe)(4VTV3FHnf!7(AW%br^iB(ko4IUi?VzQhttD{&-eH7S-*1$(!_Dor zgrY@3RPfw(T{Dq!bs%O5?81|wTr$QiNV!|z;x$?pl?{WNBo9|R6gss|Ncy%|ub5)N zHQ7D(gV)S~S9u}DmQKntTQn|jSByRNwC^_OEg!~f!x}Hcjfs*- zsB1CNb(z4N1S@8tmK2S+Bx`r+t8+K;MVR#qPaeT3?&w4dL=2f<=`9rNr|3)@;74-= zw+W=kmb3SUSyph(h~a zwN3Ix6S@wYlH$?`s>P6anj7r7Rk`bcBI{VupsMP0xpnyYyusjx3;1Y2=3;XZ9;gjg z=c+1NSI(S&57qcS6qO*?UMkW90ks;M?`bpHdO3_TnWqz=iP}}xmG+7zj|nU>>%a}h zjQg1fGMIp6U+f|6{8&dz7l8RdO!h48B&a$6R_IZ^;0Q-PcNV8d7pF&2i&L4QMIIZg zzF1|fb9GE3Jm56^!!AM6woJYbtNvVpKdxHtbbL%>ezA3uDgX_tWgX+iEXHi)J>y|SBNFecTunKj!;7=*3 zF>~%Qvvix}WX;|R1Ut*8kJ`Od@y4TyTmns2gch+vF&4SN#$@mq@Xm;>pi8zn5eZ{u zwL+S`=PE(uCQAug67&UzfNnGItjmeM!liaWDuzQ6#X-JaLS`EC5-_pdLRpU@#+0qj zNOV?%vwewpRzJl&<;bqI#Y{VLzuqXhq5T#CcC3|d06T22P)tTvfybCR%DfQi#P+)S z<>$Z{t)@lrIsX}GSg?vEddYQRxZ%3JVKz|gHetfcK;fXNjj@=uvRtBhT%wgTEIwPe zI6ZP(A7(fmRVhJKg0Ej{TaP#G3B}|p8d8RInlhQxxnI1)0f5S9LUU>2bwC7ou{0 zcK32lRzP7Wvd}s!!>p3lY~5s_a%lMdSqbYb#f(E$hX)jyZG6{t!fCVfv28Uj8=CcM zwa0s3r9D$tHAs%JpE2U25?Nq=#hPcEcGOK}s@6O?k)3X%;!!ooW|eq1^d-4$^lrk% zQ75{Xb-f^=48}Z~qp{D`7U^lK(lqydkK1a`v1>LiW2HKWe5YxYC%9AIRg*tNpkg#2 zz9>uI*=&@g&2S?7fPsHr9v6K&KdVvKtF;`i_+gvXJpHiV#w~&st}!oLk8E`a;GjG~ zefsq2zq43Tk&kwuJVSZ%6cr5@5C1s<4Gtmgi#K%i+&o0Q(hPhuTKodUjB@Y(dkX3k zw5NYjB6%G}bVt^7R^XP3$X7$O9^<&5K&&^PKlVo1VvLpm(ooFbWBo-T9dsH>E?(2T zRuX0mQEyeE7754(uToJLDm6g3H`GY9Gunte^JK& z3_AWr*{D0+LvCyT99d4K4LWQ&(T-g+SobRKhSRxr{n;%k#@eaNZk9PFRO_oY)U<5P1L>dpsSj0{miJHO+`eE&=rFA- zntX(wGOC|c2(GV8In4;dnfmK?O_-Qa*IzDIF3+I#c~(mH0}==DU6>vMVv8x8wHlkk z`Y|H~n=*HY3h(7@ovKA5+p$}KYUBpHXU@VYn;TxX#V?-C@GG$v+xh$cJaSB5hA#ut zXHRe4Xib4VQ0$J?p7_5gE0|a;Mod;xznt&YPoQVnQg>U@aV&s{pE&bie}(MTj~T#x z)kqdeYzB(~2n1r1Qs51eYkx>n)d9f&cnBz>3(bT;E(zIt)!xB+7K8wdS5i2sX$%tb z1_W5`f@xFhO}n>y+AsQoqfFClb=Ua}Pe;D98!(}3doQuM{+JbncOBx{K=I`0#zf{m z;G$udPES?p`LvXKM40LX-Q4}I$sst|$QHLb{fiP;ee(mBn^`od9T=grpF&n&W8A`= zv-P+ysK-QV)Th;=qmg|4W{bmXs^kw0h06N5ME;EQQqz-CjB2A#ow}{UM4f4}(o0{$ z=5XJ8Xr=zZ$W=fO5awj%IAuOmpZ|Jlydz}r?lu0dUel?bJ&awQNBL$bC%(AojhOCi zw0_#D!O$MxI_Y@o!;Y%*AKkc<$=NF}m33~6fY*gv56XbI(1#M$+Df!J^A%!Oh2;FJ zM4gp~(ZHYh4#7v(uS5Q#?3K?Rr^c;%PCK6(ZErr6%nVx)CH;$np9AW6h&0YkbwFEu z!ohmB%^U~ulVT|QN@mW|muV8PD?aOF%}7fTPanoWtdk8%13z3HzK!hr!`{teSvd2; z4dY;``<}?!wwN1A-7*{rh>hKV5Ut zqGnv}{`bmQP^ow5P@vjzsi?S5!RT#bH?Hw#28An8IKr?L!D_W5oek&xdesK$5!c40 zRB_JvK`Dd5tQOi_XubP^T5|k{T2X*NhKeo%vPtma13y4e!oC_fu;_E*R}=kwhD?<% z*_Bvz{x3>VbThGAQTN5EjN5uSAkR8(2_tTndwwf3Qdc`iz(FF;X&_k6)eF01D(B4q zn_J2Q^GK^KhOAC_LLe??p&V@jo}XIK58VYkES%iWXo5HOC$Z*IPPh#s)EOrW^;8X} zu|LqS@-cydRS7HB^lhPL@RpGbAFQjzvE#oe#omYjfqQ}bi^jhwthr*!8qIt*J1QLO z;JXOk_wM+?*MDfd-Pru`7Z%+#BjYy7QuGx)DuA5ZLeUs=dsY%p>K*xZsotI$*i_)J zHpOaw`im0p&swX$e!{4>;P}vZ96p5D(?9l*YacB$0{%Gswsvg5cA3BEfMe(@(2o6N zvo0sO-8^FRFUn0!;8NgVY*%vgyn&_>PWRDEX)6M-iTc51%rS5q@-F!-tM+;s<9D{U zBj4v2>JeChLh1(9sI-?ze(9m1PD@CpG6gwy<7C%4l4hI^8rDnwwtYf;vz2u z{tIoJz7WXypMmZ=q)O;iEfIDLmkfgiYjW!svj?*eU%H8p9lt58b!PW@oZD-8hk(!h zUvbp!ZAXk1o|5PqWwX-DMhbXw!5rcr%0wO5#^~EenQKw6{&k>-sv^8Bm_5|ZT z+_!yD-6FZq41ZA^4Qm_dXvUqe8}~gd!k6|=BT(yjexB=PPZEi2T{&N*Jl)#({Nm46 zcWw1j^|AB4OPNg8y7>Y%Fkw2==37?7SJUXce&_w_8 z*OHJ-f(X4sg2k=eGmy^$pDv(WeWWZ2QIq3i86^r5F}i+w&YkcC_cOgiqNnV6O!u(+ z-Tpn9=Kba43SBkc3tY@zr78Mbq?nd2{9qqgZINB)OH4Kp=Ui>oWv1Yry%P9ciL|iQ zzbGw5j=G};owVJjxt%DGVAY%Wfqn>iSB zfN|Kf_DF<0XQ*;l*5osjV)IN%`$Bz0(`hJ|t01R`cgnO;AkB>|V>~QhpGhY>DLTeE z%7!aYL@W#TL+V9UufpmJwlmFp{>I-i0WT!kk1r=DCy|SKEpYGkdu|wGBy8WFk%3eo z@u@oQrs-{98`4f)yWjIx>KH^&JYl5Jw-XqrJpC9=SX=ROrMEANI3iitl$iPD2WPh) z)B4fM4VxFG$sT>)cfASYyHz%Y_TB-bw^9V(eaaBD0$jh6TG<^oc>zo77&H8hb8F#A zk_2zV6`pYcR1A_1OA)#c3)2=_uwWTy(ia4(j$2Sp&W3_luD>8mZu8aiP-r!xvZ^{J z$l0>p(mcq`(mZfaXPt>3om}Hks;JxU@h7D#{ce9}w3)yMFM+{HrfzzC-FS<9ka>|I z1^9cl5x`gap(FYJ2sXEM>|W<+Fx2TC3#b8a55>n3?QBvT!@{E7hfkNHRn970EXcrl z)Yzc|H_X#fVdZ5T^Q^?cxvzKHLO(R2ht(jJNsejuIP_OzYgba_*W|_kmr!rI4$nqt zzrsz+c#-&R6`QK+=c|TN?E}YItI(h8oMM^;NCRO42D!cc1ghi+>f3;F2B~xWj|6x& zULaL5IY~hI)76Vky^@$PF3X$Ke4ijKRc5>m8W1f4*_u5Q*(`3xrVVN>F5EzZ?$k3Q zN+wG14S$LLqHSCh)yEcD9y^!C0h+nCqmYD5x)@k{+19b6rg8-IfXm7|-vn+fmQXsg z@tcb%iT*IXT=b+PaL~3>uqn?H6yNfjEh1kGclAYFZOhXJJBlpKLe$hVO*L5iI|+jUCp zOM8k3MQsbZb#r2SS$x83671H^j=)avP*1SmEfWRW*FU1Z8X)m@{o4aK%0E5HePKb7 z;ku=UXXv0}KU)FJPKUG?GpbCZc<1k(rIM`_y-o|0XwP*;kF;qw8@?UrgK`K@MRoEg zVm`l96@fUuI#+5T*aQJOoD3LLd%{PhsKS_i84RLrUvZHJz4);bp7h7^Uaj@ibv)}g z84^=G8<2Q%&p`}HGWCv4>2^&?=>|iZ4<~15RaJO43T|3N$1$HdNTwhy%f#f)(RsJ< zM~kCA^%%t&e&fp8_xUwE8=t;;^rK~^R$HF+8dLr|OQ+ffsTPm}@rh(J;~g)Bh)Ta* z@FY~V&LVgJ74_DY%=c(R`mSX5yS~8yZqb;4?0S zGNjx4;@m+}(vPV)&Oxp{*U*)(;xZ*^g!4VN>^#KsH+V*e%?|=@6Fg#z_7u<0EG1ZNDoU%JEXy2 zvgtWH$27zwGt(wSVS;ujX21-Buj-#kW8E+~AomxgnKqF7FNzoK;g&JK$wG7yr*`nVVkm6cF4$jMG(0=XsVs?gSW4&yV=@r-I47?exYN;I8^rE=bxa7y8=V_d? zgg1Q9()`g)kR~R8w5(aUs;VmToqsPTC)XNk3DZY^fKm0KZ0yfr*gr05a8;&nwXqEj zt4vCMO`d)AJ7aH$3ZI%?Kshxp7Cs4!Z#FwVIC3Ywyqv0Nsz`uzj~}>QV<7m%?@3l7 zla?^XP2+fatk2uN)ORdX>7y{)13+T;uisM^HLgPW|4g&$Hh^CO65&RT^Gs%4ZFjp! ztEfg)9}HD9n#lFV*Jg9d#M6H>K%bW?>WUT~HYp!fB|mZTG_tGgna`0YwoVf6O6h9* z-F63p2aa+er*ZjjMykO+l^h(5aZIb{QRMx5wj&1pW*xvEvt%A64_d3_+E@!=4rB%| z60d}km_QtwnOV-)LCJrJZ`B^Ca5vF46Dx^6s;#6zA{L}-qxwatER7!IiCP4lYuA|* z*ZO)VWBfDayN+?oNi}WH4A+%STdpvW?t72);g&-$79~}ryTewGeAk5e(~yH}v})}; z#qsbaP3kg7&aPWnrB9RuKmiM*IidC&M@t#FYOAKWnM}U!R|ytzHlQl`oXI zuU`%xKj3aPrH;xlZC;~<&Bmr=Oji=8fqsx=cE3SYRnrN50S2y^JVf`vIz`sS!+CY2 z8l7U(dCKwFZk`~h|hVfCPqsA)~8Xg3^ zN$wY3-Xp1kZP;yiXrs2+J`;x7J>=YDji{;+`7Ow=T+u#QDEdlWJ=b_G_NvG*BXEgU zA-^pvIcLxlc<`P;mQA}Z~8&umeX-)$ylM5%_ogUCe*;Lm0=@g00C zmG~wI!zyaHHfS>T69;?Xb0E#nF9WyF9SzTvr#0j6Ke|m{Ziqb)r1K@e_ews#&i{+j zlwd79FT{*B#`3QIob4IQUZWeGEj8^YA~`XX*K`@qjx$J5`JG3HEiJxa6R5}hVGjy2 zs7|aW=SiHLouWDPv2GEn68%`~T??A>x>zU(%BNbiXT3EDr%EL7?r!7}MUjA}N(Ob%S)+|(iunj5up9UOqLBM^Y~^h4R#&A!XvU*jNJ`6F z=F7!%l;<7)39A1#JN3mScPLhAtXSTc9dYP@pk~j(QZz^O0dL3~k@7IyPrz;|3qJ~} z#8~t^T^3U)j}$F_ybpMU_!X9_Cc4@<^L&#Eeti;0-(M6qjZglQ zL#YxHCEm*K%M?Eg?z9-17W?R3=Q^Y#uz5_5=VMo71pABPPzfLzze4X&kOpbz!M>gH zRrm*hkWY$zBOheHD7I%pn5duS!@eq&s}INtp;=RgxP^}2oSNzOgG`X}yGfP^+?UQrOKR#6~Ye<*8oIOOwPOa*OOD$$_{;U;0+b{ttmT^|TSQVk`{gVC( zUrqJ9s2CS>VBYFGMK|nd7oo7Y+1l0Sbe&UEqc)Lol3I1*bI{MUFq)F7q|^oep9C>v z7jyEhif9Qe9q(2m9S%{0hTj2OrXHwRR-uoR(O9YNBIYRmosNuf|Hl8Q1mq0jSyjGs zc;h_=!~c=TSpWM`vq%a2J`t}czYo1oGM(ILX!%Xa8ts^BXYJKQ?YdSd zFCi*vLN{yBC!jv*>4WDn!NDWMUHqdXYhV4dWqqV5^PY?_#pbB0D(5wGxEAA@ba0Tj z{+slFFaOcqW3)udqt31+ifiC%K$Z-Ms%qpU*o+wMKL+}rYjsr@lET*?hz;czcPF1 zR=_;2nljUrv%X(=ik!L`IGgQp!bofUm>C()=}TwXPfQ}C(7f7^_e0KAq=R2ACYrOb;c0 z)N)*X(P{CY-(9;?*g=EnEFPSN9+Uo}vw7j!%z~%x+*_Gm5~PBqAABkc;Az}FjV=e) zFO#vyjK4YMnJMKt`Crd6QKu}?&O}hJZw*yn7%Pe9K;LI5U2O3X{zZXz(%gu=bfzw< zg3a#sw0V#uS`Yn1%=U^*l)^f;U%h@*U;lq}{?DEN>HGh={BAQ*zwjJ+D2fx<=Q7pa zxq%=pK7e%gdHVkCuZDk80w_)pihI`|UAZUA2HP2-(UZhwUGK9Rj7v7vN@t%>0Z;AE zh3lU8*uQW$1daN8br^7a{95$@|3%Th)WcT2~3KW zu3x39^dG~S&c||e>_z(&5Bokj1eiMs7n!q?^k;Izs~>Y`b$9oq)miMQl=92^CAJ8t<8HO z$p9J0%nS*k#`6KqjYegwzAv=bS}NHY6-vm7lS9iTnnJNRo;;f#d;TDy2)V1Y=s|A| z@FE^4N5~EY#L>i#2Qk-a(GlG&2zML+7aAnSXD9b{s`@}y>q2?P4LscWn!}ZVxx*{Q zO)?4Gi)`iI;`pXG%TUu;*hHoWmAKeyUgBk*c=>l;*ttUET)nXnPUY5!ZHeJA|AXJF zD*YV=0^@X!dhE0dB-MEUnds+Cal6SMU~QLDc*ob8kj8QVh8CTQ6L280a*baX7hKoe zEv=9bEizI14#N5eVZhkKF1EV?vO%8qe<=897W@s3zmM2d zBOM<^-3pLo+!16(Y%)8gHnt9q1irPwUIi_<^#~dOpWLztBf7S-#fJKySf9s( znmia-jsvxuHWaw@Jap19=3S>%`QE&pu~_y0z{&0i09L<3U5gMHH4q{$2Y|w=dm9x^ z%}f)FTgGPPKZq6Mlp1bSz!4k4J>g0}3h8FgsaL7v8*7P0zt>UhU(KT))QTIWFsx^b za)(ZJQ_~Kp)wC;@4=T?*`cSIos^R9&Dy@Pyo}#{cqOCKF=qoN-2&>2(e%guzQRu6#z=GZ{#RJX(Za0S?I~e-7wxQslYq3I>!qzgg(;lJY z?X%9nz;3hpbjH1sG5f2x1v|xl-`9tAuZ291`ZsY4IvWZz41ar&Qvqw2YP6q9hq!{U(0Ij}j24wiRffwf z;#ZCWqWC0Nze}ZRsVzH)|hMVb|0x#EpE9R^K4OC%0@OHb&0afJvUj9wTl zK7G%48qBXAnS?Fwxhj|xUh6I4DMe$iGb%$(H@XR0euXeIKqj1zy7*7T`JJxwkOk7D zUg~!@Ge{+zZJa$hF(W2~qLPc-sAB%!H}SU95+Z%x>)KfY(|9uPOj07tJ6MbDOe#8} z+(pclt(;M(MvUHJ$#%G&{uhN{o<(dEusrx0-A%Pw4O2`b5SOr&aL;Hmrc$=Q!TC#5 z6V&R1^P;gT=rV$Gcoj+=K_<&@6DEmw`kw#QVh??ybzF{71r+$-gTx}sB0Nx`EuI~&R0XiMVsWi4%a?c`P~_?MY^{Zwfi1+C1XYJ zs5C>`8~D7o>e5>Jh+IU>fzFP(1=N{}pqAHkbGhpE*jsCSv9yvY1@ycpT8#}N^~E{F zfYJp!1D7*jg`%jKhqD_nzw0lWm*$wLVO$D$Q74-fWXjLr1AhrT)Sd?~nKX5mfYO8$^5 zX{#98)&-zY(6snT@tmYa8!Jl1jF%+!-Ru5}<=Wr@5+e0Atqz*i@sD5mfTT09fFFb% z-c6f(oyV@x1-w&hMUpIkh`9;@4R6Y(r&##2zy9{=Qi9fA-B(fLKI?@^X>=C18t5Gm zxf=h|rz5{!_{p6zvW6J>xi_50_7jwxby?C%k|>m?0d|O|IEZG+RQl~w?@p1L2WE6DZi!IwjYEH)%}kt z$|C^+X^bFA-daQXMts~{?!nmRBts>aAN!R?UrZYirZc$=|1%KztD%LHEz%CTNG%oS zuLFvq;;yKsJzHT zod`>hv8EmL>T3jtFS%KFxIJ%jWY)f| z;GeK_NR5o?|!#sKc3faye1jsH(=x%ekEzY zaYpsfwuV!wck-XOs?ceJBAF zgBAvqWz;dhlyiL&x!&1Xt=}8(+&)3YSk@d3*n1U|uxMouF{no7%CyQl(>^58uv>3@ z#ILA$#rg)1GgECZbQ)5DoCsr!Ny-MS&jb_*e%o|cQnd>XqoKbj*lhxz6KWIk$m)C? zQN`hdn*X7=AZ=p$-i3%PwLuA#fu7<&Us@eRx~U{l)8$gp^@rcOmnQ-`4p=C`MXaP+ zIWCj-G9jW^cbiyIiVWS2HdXrmx*(gnaL4$EH6(-}*ZZHeRQ@AAkA8z(AeMPCrthb^ z1LBnX8kmsMzbFyP@Fzp*(JgneBeMY#_EY`+H=JZ<2Fc^B)h6L zXw>it;=37s8d^IOI-e4yRWHrFhWG3ucqXo8E>3{wf$VLa861}fLMf26Z9Xz*F&Q)Z zw&F?&GWeF3B+s)x@2SRMw8EYWg(Wrs-n?#P*}7rb$3{(J3HO!l^M8pKYucl%EKG%* zY`6OHQ!mcI9Qbes*PX&s$rm^`rGmU1Y!koU#2c%0ng4pnpeg{>8Zw~Jz=|3jle`H0EX}Cs~ zsQrS&nFeJov!e4sX3hbRO#fv=nPhQ<$H>8G-;LlpfRKkN7E*`px~p~ildz;&%cF&6 z>jmUDzksjhsWZv?4^EMH56;EUaNYf`+Lnv7(?&@UN}ZyoX=Yqeu)Cf3n4$WXMQ=h? z4&s=s{8VQk{l>$`=X4toBHz0E&36tNMq9U^pTb2BP+Qcll(RmldYI5;L zqQo>fWNz?sYL=Cw3GD@GAU~rGzX0A$gKjy#36iP1Onh9pCbg|2iz)x0nYL*OGq0yb zvyWyn;FXJF1aj&mW?oFR_V)+!YFG7H0=+0PJVVFml$mk=b3BWHu14A1-DR((UEw30QYN z8m=1>Il>q)5wvnzAFk^XH~d=6+V5YA$wetX#sukC8L6v=xDT}!vk}}YvZm>#y)Dx< zo3%!6U$AB##@7FfBJ3yyHq&a<9Xh499|6fyi@eL3g`Gvg-h?I8h~_={&OTd!mU_-? zjb$u0-YJujLQB&a&D;s5PN+)(%*%K88+8tkxxTGi;7=+n%+FF(&4xEKMYL)0vgdu> z*MgmaHgJwRl2jYB+lg=+hmlC>2wGUbSV6Xz{@+1p&aLses zNTy_AO4}#z)j8U|mP%dXdbh}|P)iBJ*}1T4Jo%sknD9@Thv z7Dqfex&GJ{MHamtdkmfpNbnC1J1jAZo`MY@DRN%@QljXh!LB|jET%uxu(u^Wle3jw zG1}W|LVnN4fwN%S1{=ln2Xk%0PjhMIiWq3X#?%mtprL_Pt`_0NnL;JPO)-g~ped&4 z@IF@+_ds3v+d5#VdDJ0aX4Ko{`J%n&o@|(%)`vfI8|~~3^5Kd?FOrvN=Qak?le*&W zo6;2GvkblB*4vDq<5XDOj+)0jcotOWMz1DQOcg4@L=$YCaPUDSV$>7fOu8}$n3*B( zqnQ9s2KZ^nEjvQ6k4+)kSpv)j=pp2W3_?M}OYyx68|BkfEZuHNVof;4uWho4ldj8@ zUaw#_{FX&#Zq8StUeM|lXd$bKo3aFxrg4@^b}IH;pkOq{nXeGNjOd;hb8+Mqg@cG7 z$;zAi-i-}FCnNW!Y93am-rFDNeCmaQUi+iQxGi&;`5Ub7MUP~~>Tf!6?3{gF1!eN3 zNIQj7_{v|eXJn_2h#6|tEZQdTTerZJQdI@tQsVrGN)}I|tWd2T8J@e3Oo9)?dmYQq zEFcFyRjcVC;h>_iqL<(CZBays%TA=3mps98ZUk&(eoc}fhB#(%B5R1vi_|^=qg_V~ ze?o6BO~v;{A>1zV+JY)(oip@Bfmf@HbJKCSO#3XjpR_r^P7DFv-Tr8~*|0o0>F8tK0;Gne_{2^teMXuM(qxd8 z+qFlowAR8%_A8w&cr90gljQ=YZL^OgmX32DbgQAyZ<4w+p8L#2^$UIX-YB0-cAPoe zm3?x?C}IVsS7?C|U!<=yTRwEHHW_chA$6THpF}y<0cUw%#s%zBlhBi;{UXu_{aDvs?Bs)d~$AKDjdD&kEE9n zi>JWor9VdYWa|{GbYF>f+JWn)vhM0=O-wAzP3KR0#&5(qDd%g*c%ColbYN@#x90y} zY6?75gCWSFL>_cFi(Ng>%y?BHC3U0i@L6uZQ61j2L(aS z2#fW)`;fX=WlZLfM19^I;fLh~K>*DPe>`ux&xZMG%8yJzmn{oWQcHU4J;Mi*X|}~~ za`z-sL@?Oo?$tr=HrL6(g0qL$$}pHF&`qU+tIIedu1>sfVEQ3Sjr}i**r)Mcpf#Gy z&T_8~+w)!s8vhOFoM?t_QXq9}+25OND2^4UU`sI>*rT0ULnP`&wSLqsi!k{tF~O$NW!) z>es)&{$Uo<5G$*eRX^x>jVOO6iJN=ZW=_uw2(lMM zgPlphGR4oI@Ep-~QD%DdwZ+m`F{iEN1q_sLFEdl=Gne|ZWup!=+tS1OZn_Rx>@%^7on`jbnyuTm;pcJV1nakdQB>1q1+kLptTR8}seR2fd@rWD`b&x6$lU*< zX9KjgTS9=MK2p0IbI(U|03K{!mFw%8%qYrqO46#q6LTd7GaIzXG#WE7U>DzPCCE=T zAxz!m1@md9&*TocH-sD%hrk7#>h6=CJ=o$O)J~1u40Js=a7N3{uTI!YI>Q#Mey>v5 zZ`=88le=%N^3$<*)v%0;{|2e6*1J=WQy=rmYhT88C{|*MYMt=?1H+g0 zSKo09H3d%((U4{N&waJ?O=WqhF+DbDQ<%_*BI32TpN`^}1y9N!Q#2@a_C&au&8X<| zYn5Pf_6_J}@`>4NIuXiw<*TN>7*Y}s=uC)0yW|QHL^~>fdN(WHUHvzk$13qdx$Gcu zyH&9%vY7?1^>7nL>?_4>tEkg;j&HOJ+dTOr881Y@{@LWdegOZ6a$v#3?TcNn@gOp_ z5A0Lq1eo(B@ZsNcucf9{0!XE$#v|IJ#IJnCJ#az~yFEQ06M&YYU;NsNj2$dPt@ zbtAJITPm%ar33EYT|OG|BBZ^lf3Bd5-Oz@un$S@6a+%7IPx&D>m|JXM#hh<>UPdeTzU&Zvp>l%J^ezx;FntX7&zK&%H!Jqb=~f!s zyZjom{p?n}(&yK3(TO+$(2@N4kWK$a`41@~;{*w4Gi|e|6DB4L|ME$PlEKYCy2$Mg zk#0Tro`njFdwjQ>4F?PRkorU3;84Br7SUUq4X?#^-DL5l_hwV7g_|4Qu(g(w(O>DN zJ~3H?O05U_`$_)?&p)N$(v0+nau7xk>`r0e zxUMTmb|xmTZR?Uw$2_snv@Q==wR7dJ!ty`C;S8`YVutW|Y1%6ro|Zffl7Q|ikx0ML!as(;!foNt}%FOw7`$UE0! zgp%Sv)XyP&bAF;=1;jE2(uZrPuUzzuPEkZZ?{DX`C@- zI!r{^@5k1ZABMh-4XBMqTv&%(-FByvi>Q3BhEaqRg%v9Cl9d)-iuE0rtn8u>m!`c( zPg&GqC?*GDodxJhD5H2f{{RR!TnKi0kuDC*Nbr>9u3B1JT29|xE(?O|TvL83y@<2g zxYuIfTu?1Y2!wLIEKKi6l{#l8;~K&Ug(^%bkezag1O9ZuL?GgfyHq$%HaTr=v zBHWnJ_;R>q1Fffg)HZvjX^9#52L~aX* z#cI9JkRb8$;TAX0I4AV0F8ruP7+n8`FIvj(aF*@PYJhR zS^2XYl`5w={nkS zI+V7Z(4bw-z}(mRmFexg~ESFQ^!Vi>7^P1VkD8xcei(FLUn&RDfqjAa*T zmK&I)-qb!&VBPiw$ho?j&Q`e*8d7I+&)BQ_i;13FCyT<0tRz>AqaI}>S|J3vOqCc* z%rNhh@!t;4H<4gCuhm?H=~kV&Ub*^m0^81IF;cIH4rKm0o6c+R1o>N4W%=W+dbT`b z)GSno#NI8s@5W1OYioZ-`fWUvrldskT+>N*CMt6$DvD-jOenf~Z8X$n1QE^-Pls}8 zIg?L+P8&`yjw&!w6FO?_qCG7x47Cy$#>T|pA13wW zZzvn6c`PLJ%*9*E!Y)rIvwknx^Ekxupa_W1U~M}2YS4Q5;f+}GA@O|h$f9uArE?EZ z!XJ;qM9FycvCQ+9;9j?HBb+6ZzdLJ(7d|7J7+Ro?2AJzs=@(;+*4c=Kg!k;#s~N=B zI#jE6snB+It;IZg*H-3n^9`7%j|%{HjjkOt$&v-Q^(8Mgc)SE4F-eerPY?QYVoj0q za_g3E+bM0#3YwhI``){5|f1m2TN3G@4{{X#;BQ?>6Q?5pkm8@q^ zk6s@GCRJB~T;%~z`6UIJlrKssU6&P#Ws5PV1yd&mW3aAH zY+xzway*4k12g0+Mv10a-sQ%PR}jrkaEY=ptT(zU6ta-vD;Aj9ipPKuay${Oa+IFTE1ROveVME^$Fs)eT)$snEajnd>#J) z_Wd#P{|*T|`l27!7JOP9|MCPBqkt z9x31G&bcm0n`$B2;iTf)^`xF0eyr*KR|Mi+Yl?NW>BqFdQ3_zFjWZ@?ucnvyTiRvC zX@8Xu^Zx*s)31$2d{ke8k14l3E?+%yn@+#X;GqrA#qI~%UUr10Q$%i^J%=3g@r8ao6#0G*9%435SR5nMlb&WQ1McGm9SY>@(k!A z;$hB3fNb_c*!vKL_?nO7`ms-oOYkLme^GnlAEjgL%~`<92V)#!4q+C;XUX>S~!^y4jOH+%C(lH^OPUX>aMLP^rm1WhhDui>XUXxpygk zUruY1XIooMH(%v*;=PTwozs0NS(s(va6$>s(foelgnNwJ3dm!f7UL zt_l7Y*8Z&eOhvt|D9cID9Y>7bFlJJ9CW>}iTvrt`@*yF#9Cui*YjMz;W_XCt*&?#9 zbF6rAdlQ(W5;58py5v{iGjVAXmgBF>{{ZL8EX2^>tQ?r8s_~V3JmE336Co&A$VkzG z7v$z{yWgm}E{_p3p8?~aqixRnl1{ycaSrdRdUMmm@NV8F{ZFUtc)gb5zS)q|W;P04qyL zmn7y=F4rbelWH2=c&4w(eZOt#OMax8rZ;b=R@X{ky6ARX7Zt^DTo+pFU1_4UxTlKJ z;+dA01*N56`cv5-7)dZ?XtH<>?ATy%h1j$O+r(C_ag{dqY;;aAt|xiOnoyG?yO3>L zjHUPsvy(Woo#J8chYld zdwO2l_VlB9**->2zTqU<8M=GF4`t+pf0&ioGIGf??P;AmGc7I)T3T972V5O+Tvr6~ zTvdQdQIEjOk$5u^oH7g9b7LN7gU?bN-9hHf6Y?E{atx2gJzsINLW@xg+V}zct%@9) zP14@nqX-wdrShDt@#Vy`BXgAay+7ouFNYg*w*m8S53$|kb{(dSE-!p873X&SuPXgY zvESrhrFhph*gRQ-JxVj_H?-DizwskC=j3)D2bVmzA;0B30PFsqew$b8!4xfS)^L8* zoO0~*>K@;U+J_1KC{J=VPlAzq&+s5-mB?9CFSXA-? zxVoBbz-Ca*RBI;kI&hwM^*CZJ{{Sg9#pV|YSop}mgSm*ch+bbmy!iKy#E+2VxqURX z`!)31!% z-Cj$zVs9B)4?3P^Ie+;B&p`F_{{W*^8L`#l!o}meG+UKj#;qWY%L}p7WE=UU>A%mB zM*z)LT&+P@mn`N;>4)ynK~`LBouog%}oYNg zc%tWU?}4>j$H9O-m}~ZJb6ZYP z&Pr18{M(VsneP@NT^R{mh+_9hHR{BEl=JwR~+M9vTZ-&!v6qQm@!e~&NBI>=4Och08l)OAuNrb z(nxXfhi9CDo@|~#KlXh$9haZmY+PpcJo^*&Um=&!*S(J$#9VJ1@XPt~=W~8GSHFvl zc)2Ie9$P`f<5>~tsxPTimnQLxe{k`dxBXVf*o~6=eATyU!^h_IVO^WIHgV&;qRp9O zeBaFRvJ|||?B1-J87kLmNR>;6t8^8{5u)P6aYmSF&ZxrDn{G3=+Bx5kKicv7>2X^6 zv!;KeI%odNI%y`F<-emkXGEJtW^TZ%(uog`ts3Nv>X|>mPSZQx=*{#u+NFWP*ipo{zF%$muhXnV@i-~i>5c+}g1INfJh-dp z{Y1)6Pmb|j;_*<8Y7;MD+Fy=lx4S~zc{H0}K>ka{e4X$n z#^m9B@%7j>eYcUu{rK}$VdSvcCb5U}uM?JTzFxcJ-^l?WAIB;~7m1-k@c?p6%n0?C z#W~J(qx=Q1+8q6Y-I4pZJHV+f$nX2RTTK4|+uAMI0$=L!vBBl>X%{3g8vg*2h;YLB zC-ru+dbCqC%j`InPbiHL_dY;bIY46!Y!1dx$!9rZ0rwK#y&4XDw2CWMr^*BA0}gh_ zYZ7ZvIIBR_j4LgWZj*SK!=dIF-=+_H)|n2&=r>^bbt4-w)b}!QvRPG zDDr7LG)r-t&vLYSM~iObf0@7X#=tqDm1(D92X-IFH*d$2a>#?Ns*$HpBWtQynm&~x z{7I$Bj{gAA`C&W!mmOQ~S!`U|HFFYRQLA=DcukHx&yo7)y_I_=$K0IF`oooD)B1Rp zs8q{f&S2q2*MnG%S`RJC&8W~9y9+VQ;=bLGus$bt6lu3VhqyX%KBAN#(#oI~~29pcsUI^5!S4FJ;_SZF?0-Y9a{j zcc;AEDCC%pTJw@V{{T2xp>3~ECj29I4%c!|R7B3p+G_F1Jp5WW6-*ea)sI)IOhC6( zE<9wYO3ixsu|g8BTbJ2_tuj?RNOm)`obcHu zva*%ScDrK>UfeQqbKVHeR~s1M&5XtW0IDs>!ot_7%)j)!IYELbzzln!G%ach5`5yD|6>_{1Rozrz~Os}e)l4oGzZd)0+03c>8+Xx8B@VWZX|_e#nASPsNSp3G$S zGcg3|+l9kewmOT9EDUn0Hz`9Rwj5)xjs-tr-cmq4n=WG6D}_TSS;evigOA8K6YnzT z_d*sG^3sMw^S>sy_?IKiLe%2la4DsZFRVkBB?zo~tM4*rowp>cI~*_^hY^UZpe8K3 zc*KF?IFFKzJ}kib>EfERk(s9BXvv^a@{h<~R_7E*G|F1tk~K0EgsM?KGZbmthmW1Y zFCVl*{ex;0Y2!gh$U9N)P7$$oMXz)cans-kLZq@5zz=U z9#05KrzpP%gTl!vS%@-~^WMOwNbFMNy53I+s}0!o>~V~roTmM5dAx=Rb1kf(gJe=^ z&pb{vu|)o-H_j3Qd~w5#Obd@nTSq>DP`ok5HCdO_0vJ zSFl#xSRPrklwya zI9sSV6Mf4$fjv1)9>HJ;!Rz?oh;#VVWN!eA(6Tb_#$K~orrvf;MVn!-<#lsd0?-u? zEG{e+@)F7$83v*<$@g9k!eC2M;mhr@ly1>+UJV_tqQ(08*J>WIYvRIq(TM83+s{$2 z=0|E5Gf#1Wh#^>inL%0oa5@E_>9TgF%~DTsHF-*Npz(i8a+P;G!X1tQxrSU*vx6P% z3mnV{-|K3$lujtp=TJD`W<;d{ z4mhVc&5C%)c#myPm#&)`DU8_uHQpSQML5J12qaDf|>!u6D>yOkA5)1T*m+ik?;Mzp%% zo4|Lm?UAXF@gqX+6j7;(72%xhep1Wfo^|tLH3DO^lgXPijeiix_%KOuB#&gWehMp3 zpTHj%kfX;PcE9yBD_QHGy||mo`f;$Z*+EaY$48U>LwlI_JhNBJf)+0u4F3Q`>g8lY zU(3wv8%UOr@G2Bqscln(9@J+A_l;R?T&~}g1Co%UV48O2g}E|Q#?{1*t}Jp!e_U4q z`IHt1bEUDUv419_-ab(_D-U7rS}8$({0Wf9)2ca4ScywNf5wF?b#BnFd9c0LWr%tN z#x+cf+{TO-gMu4U4hmHB1jKq&N#pZ`O^S{5Kbw3oVkTstKc*=ym3br#b1>v2J*SS=^=?tUC;rdY=jNzZG{_rzxkHyxF?Co$x7Q zY~ryqusXKhwTl-d$HqGhraL?_HovDJnACw#aUHy*YDe!7gO5=dNwOLdE0+q?>%jcY zVTcR!gv_d6U^FTFmm1?#tq&}fkyP>rwF{;!YrJe#knY~Uh{V>8I=C}D-MC2RD?8Y( z*C@vY#bN1}5K|U61mr9fuaH4&2DV1aPPNZ-L&{wt1B>gjsee8~tyx;g3nd!K;S#;7 z{m>RV0jHA13h-OS=h|An-8^m{cvr|{&bIwYkp zw?;x7Mr$^YD#o*hEvZidXV=I0@vX+!i^i~xHDJWhY9gug2YTM zQUveNX%duSNzaS{-1v?pHa)49b-`$)AMuu~sVNhT1#g(Dw{VI^uVi;)a1EIrO%Bay zR3OGD{!&I_9K1>|>QN{lXpAvdWbRwiYkXfr2nGBU6;R3PD+!5b-C$9#Nv(0YEks@nCV&BZzR z@MQhPt6C4u9M37v`K+!ELx&tZJY`Jgx<8214E01pSC|6)|(~>M+0>?cvU}YSHdS$qKIA6^8=dqTE2RxGuGc!lB!!fve$h#I_7^O!D=9A&(u4)_iycS24t> zOeQ+mtmRB_&V^Z+AgS6RRh4QoyW1#PXT^q?gdDkAc*-&RRzTKYR|>2PG z0%R`{$RNTmX1Cni7%CYLxmfi~^9Cl(8u@Q#)T$cj)JZc!{mTZuV$b@)&V(5e;>!FGy0Y zS{-%qk(}jfoFIOoo~7($F44&0#b5&m8t`@u?nS1?v~hqrn^zDrMXzr7Wlreq{kJEZ z3^FF8N7AiVDGWiScf7Qn;4bJ@R^ZlRe}UBemun*$Eg9;=3Y(5X$&9%RIT2emy9Kg9 zf;DJ+x=^r2YZsoxCGG&xvgZ^A;R$KAmxLOy;7+mRS)?3h=HG1)P4@_6;O7}nm$oOD;5aPk9}-(g4h{ek+E?E+Z)A7pIeU^8AZbKYhf*? zJrmC%3&riVV1|&Z`l6WiJ5nQ6!(>R$VT*Rvj0-TU;^AEvw4}KK*Q-L1Yeub(`Igk8 zR=Xxvsv7fDt?7aQB!Nzar?Y0UT{}o>u=_}Azt1Nrm7!>~n3rf*6EC~^a}*=PAxQS? zQzPJNi#Oa4v=1v(N0oV&_fiIL?(nm5hB5FcpN!S}QLL)gj#3e%I=0C-jXRe8s`3x4 zIgd?L`$n(3N2=tIFjBdev z6yO=uY@}`l;*C-nAT$^aDf=)9TnKiW zYty|3Zf#&kz=+D;C}#y+U5sVP-;*s_oCs@F5Hm$&e7gvO{8m&%vrdF939OIbII5A9 zibsbzmNqhDp;$gj3$PEB`&k26n1@o-U9#1mA8E4tRj>CzeV#ac}B2%Q#Vql8`0GzTkIG*Va#+90F zArTD9DfEMrPS zn$>zot{KrPuH&yKyf!6!jm^!_2;YfY+UZxxD9ka1;FNugIP;K-^+hgriYfF|g?X+L zBpMMNQeK5}6u!|g;_IG9+tV0xrZoQm5ihzuL(Wn4a=lY%+YQ>asS2gJ7F6Y3n1gE3 zgbXM|`FYn3jIr$! zsf|p4XEf{1QMva9uR1m*Iv4`W)6CWFRcg-4YTb6N3UP#R1~I8KNSDOp$=b(p&twGp>S0>dEcOoXpmHKl6w z4kP6~lvnK-u1VnbB^V0itRNYoDOqBx1?qrqykgdSzR1V-&)9OCMeY zYm~tO!z9sz*=VVha7~tnVK4HXe4{#itX>1P7l`damPw;%bf2nMY&1`hy$hnJchIh9 z_N9L%_RvtV?Lzi0G>JxYfU)L)ZV$+#aMrD`N-Mg711s0^IL?;F9f)>J7Z@7CMk3y7A zD|9D}w_@~zbM7tL=Z%@RQ`ULrMoAuUK~Frynz7iN{Io-!^&8aEta7|64;$?W81U7?iho*vWv%PV1p zOYfo~p0#|1h++UEwg=b~_-uuDJL2*zvDkwG<$XktVll0frZGmPR=#mgBAthPbZ*bD z75<=qR}wiuQnM;i#gE%#<6%&R&35JvM!#Ph0b|LMu@;680tr>i1*=w_Ipo1o5XSILU6a&c!@?vF};tr_4$}&o`|BLJU63 z!f6t0P%5U7ni)S}7AwfsBm!0~m_5g=`p4JPid6Ml8Aa&yhd3t!Y$>R{Ln z`A*H7?l}-IJL18xMhbESu0z?cdJ{Z@4`u+T5=M9-+JU?}BbG}Y>5?Svl)O=jFDb$j zH7jxgk=iMY*6Z`<3d3m;qc}<#P7CgQ-bC$=S0dB{IQw@mv^Ut6doWx6h)+YrDb!*Gl$WH`I1OOZ?V)te;hGEyjWaE{|TB0th zjVpKWMs@*%jH%L(Ws8{kcU$uO%sp%sSa*HNp$CLYY8Q78Eb=e3hsHAo%aZjN8o24S zTICqqE+)i9Q_C`wr(49Xz46~1YnH9Zj&-uHb^;KGH_5eH0>~8hFJ>CR9MK*aB$cX; z(65JsZULaCxEZ8rux%&+{w4N1MC~=yUoJ5=V&I3Du z83v^bF>6KzpHk(!p5>W0$0}g5Jiw2JihLtu zo><>m?*c*$#qCzO9=k=4K%UpCe0D{wf$lY8T_gyq9j)1|Ca@y3ib~;-*o1M)R^D&T zy4v8}q{{wy?5@WP&BG^EtPkzXM-e*WaKiY!gB2`(MAcyw)tiw->lkT9;pMwcV^fum zD!x;iI7gGKe9cTa^GK&QL4<*7Bvvw9MRP3jmPg1q*2hvNSx~JSz?=U7OPIz@%37`p zRj?%YyEYNCR)niKoK;&UA>o0FruG@FR0lyVW&0)X65PcrJy=M-BNddoYj(VU3n`x` zXN8(~nDf-8uh$KWHL2IV{d-=|i)g2Zb^yoU(Iv34ILe#Lmw zv1-RcnfVRtcA1aT#XmXY3mP_B(EjB3p8SoLB|w~{8x6Tu6@DnSnn58Z3uiA8&E{6U zMpi>aZP#in1b(Uz86$9#!My>?B?dn@%s#+uJ~+M4X9PcK_|}D~M!`T2Y9q5CU!41g z3lDa+$n`KL?+kAq?1nJl$i&=(6TcYU>aSRktr<5u*~-r_gDS-q9F1Uia(=iAn~bYt zuQLcYBT~JuC}wH-5gmb-?uF0f6sq=2)yV|*ou`V*b;sUf4vs}xy&>dY@3ibkS)u!Y zE4gGkg{~ZV-?n(!?&d7;dib*2gzA~M|<&mkx zO&C|a*Q-LeOzheq~52};XF8n3SLxzsNlhp{Z?J>JZ4uJve!B#&DTu; z1hbf-$|JA91Sdf*nm18UY4yYXq~Y)?T!>oyBQm_~PSZK3qFb^Z;(OxOyB)%O(=`%b z?}6%&lbuf|8`m*4XRENJSOv>-v*1ggfc#csY& z0UV_m&?wm0uHxl!%}_XM@r~@P2H?fkYqf8musOSN8=oE=RX-=h&Y&SyyZE>(#?CA; zYgxY|i&DRi!i&-tAO-R4AXv2}hahK*%gYW75B*A=;z{!qug28_!SNA^=O+#4t_y%{ z%}gJRk0Bu9foZVyXOzjpg;%+it=VDe2NX|+^tt7;V+RJ-H%;(@TQrr$1!n83K8X?Z*JLg8{t&hnxuU_!{d}~OV2#6=jh;yM|-D;x{ z!;s1Ps6JEN^@do0<2|rSylIA3pvreQTz7>`a?5hCJD#gvu^`e8UO}x==ej!>b};H< zU#;rAq7dx;J+j7B_DVc!RI_}Lm5O+#>Bm}tiRF0*8EDvNt}84;TFJ9WR$z7T0YK0c zMBL}s#KfQTN>ByAW-ys-ca`9)3HzSPqHj{&@G&XM#K0_mN7%zXW(jR&8V@Ql;5r;c zV?BEF<<#!yR4Gb`q8@_Bjf)nI5@Rs=R-_BV9r>3KPjdKPs>I~>Z!67pj-E*eEh^K` zT<^pS$mcAP@*i`-;U>|G<@u~Vh(eEG3{XF5~&8yEaEBfHnIw$1$#Dd_V4aUoY`?$zE&@tklGR z7_g&_kM#T@F^U+-j8f@*j9&G2>y^2G7F!|K*rt=uB^VCdz(JU^Y*i3SWw(d^BH&u6 zvPC{Iv6y4^mOCx`9*{zByIE_4m0RHEsahT=XS(uHn*z2!$=U7QquMK$WmU1YVU`!C z00P;6lkQ&K%XhV6H{%Df3EeI|-oV-Ydql^~nChM|F~=j5n4XjNy$i7&XTQLsw+ojV zhauy|*4Y85H{7#1T!d-T5t!>GfsM%Yyans}v7QK-DcHoz8B)i9(`iURAYQLTq&5PO_sq-U5gvgL^Z z<$BHrZ23m8@bYgWk8WoSZk(1)x_qB8lH%dW?O`<4AWf8FjO`LlUUW$k1>?w~1i8v@ zA%n(;UG9_BYL59Bns$_}Pqrl>Y#Qt}(-Q;~sYo+$`nxtmR-p zPVlS>adOmdIQU5Oy#N8Ks8f-r_9nUr;(!sB+d`>F4!<4USmblDu&>=5AqNQ=KLjM4vAzhJ%J8uY6cY)Z_veqFp#*t-PAqd9(T!sd98yk0^SwQnKY4DZ6 zysK4*H=SwRtxlBTdcI57n9tm#MzT9%^{t!9gE8Ck7*5Z+`3Yt4AL=jlWsHV)##bdQ^LY1+Tk=rerGFn=#WJKbXK}F1J}<*;9qM?1 z?bjRz6Iaa`Fv{WRkiI`=#NNzl;U!u&?ltEOx}iF~)ho$?99CKAN?D%3RLcFWvH90* zsqeM>vCnZ;3;kWpggN9!$FV~%40RLR<0g-A4>@}rIK*V)M;ye9*}&O1iu;5QXatQm zq(^rR_C3!b$ag7V;daJ2!^b0L;q4DM0y!`BT(w}CkYlj2mOK3@IymFyqd=4)EUc~J zURQ0@Xc+kj_d~|CJ*uB;lihyR!(Q5W__>Q%1uQ67__EjAi?CTt{tDu8CT981+zX!b(JBvu0qKc;C>CAE&mbVnzQcovn80gS!MMWG_!YUoFZ znstWM5;0yVpH7uB@2F*8hpT)vhY!*s6OdSaH z9N6LIMN=8;&}>5rUW->4M$nuKqDBn4#MLUhO%gp1PM-oyGLh`DJ(jb^+;ee+YgqN? z&N7IeHwV=*7Ud>091jxKi}0jwF7)FV+PcHDjT4bbzsGYS>wq~L#*?T zUYDmrIVP(c-eo^~9edgs?LC>`Fz#|CyrA%*!J<3l-_dDbJ>@sN?D%J zwn31yaT|*z5=$wR{4tkFWYUiW<8xW7TTtT~>Z^BEtB-T!TGy%@S9B=c=MMDd)N&ee zcFV96<2Jg@Rq`(j1Ip<=*z&{GZlm#%vR_`!wtI?L$My{ttUNW}V0q9ygaNrHkifO5 zWxQy$o`zS^LA%@`lTS{pQN^(2K;oH*;*G)cuM13Sb`8b8?%51{vU0}~wfO~Hx9mLf zvWN^uvJ50!JL9-(kA=hs2sq=sYCgR~-6*QyhSl&iueE^F#y&XUH*Pz}%_Gsf*JiJg zV%slf&N^94W;!MmGI3~U+0V;poRxSj?W0bU19RDx+uq-urU5O z5&H6NtUdBL@i{wEYfj(vpBASJWi%QCtR}EpkYMD;9#APC@42_;I&c2~O1ejEEjHQ< z=yV~#^y91982r%qv@iZ1UAJ4xzW`VN0POJYv5;uk!HK#^{9ferT)AJM{{YL8!V&r8 zW%>Es_)o{B{0Dw5h#O3FAjAcjY|@7aNUz;hxYf1zPZcgwuH7|f{B3Z~!=aWMr{zX2sPFt~czl#h<9!ntIv?%^3 ztu2o$`NuHbC9M2H32qeT@~rayT&L#>#B)AL`p<})&ao{@HL?VD%jUoNcwfg5dG*zV z-fbCwPvhlw#2XGAk?4Hl{1A^UXq(!`_$0YC;jrpr)IHx-J1k!lT|xFg2ZsQ&;*j)!e`ZUJaExpFmj z{K+roG2Ds;e%n&(YySYir7!w@3G%H}&tVKq&ll=EhQ*^=I$!_907no20Rsa90|W;K z1Ox>H0R;d700I#M5+N}`B2i%w6EblGAR{nBfssH^QevU8GjhSv6ky@-1tddLf;3~2 z@uDSEbA!VF+5iXv0RRR+0{hAar4GG-oqf-m$6$9PJ?=Xot}fkHzToy}LF!5W04D<) zd%X5=j=-_+eAk-t?ekeYMQ1R%N3P-7ALSt)?CsgCc1BPf(Ci!g`GtbZO3iT8O& z{GQbZ*Yi=?mCbo&pNt(D}n_b#7yhi<&ROnRP3M*je7Jl2TFg^yD| zbLyw=u!egz^{2DRY1yB(9BQ%Q?DAI;*g!w!EhTRYg>ibb$ww~VH7#6NL+u*&Pb3j2 z4oj-#{!)xUQU(!I>iPCe>)XV%Q8OQ5D?X``yp$}cALU#rg$nM>_Qx~=$^(+q?4lNS zQ*nhKi2<`#t6t8d{ILp0W;=Y8g$Q(3+GncIWP7akk6$Vj@=~??=6>d$%XM5PVO#~J zywPj6L!#HSkw6nM?sUOj0>`>2^juBANAG=)Zk?0&2bz@&Rr$zLLcmyA*Vol#$nBnL zB?$L8?Tr)?rD%y8eead5EUY2=tY#KOeZK>+6bNyIF4x?`!R*Od?8d52{`m4!xI}&P z9g?C^7@lag+bLnY?SZ`2%s(V@Ftvv6ur*lU-081mE~REy3er}6^mgMvVe|X2liAnp z5H(Y~bqF=vuLvia=&&_fYuTR7S25Wrs0%)?KFz=jC2Q|vSy5>owukSXVSW;z{iCXI zoP{ol9T05lwOaa+6v{cC-Bikz04%I_Opv7blwE~_wfiQ1!-oF=klQ~Bz{`}uY^!p* zESz>=q1aD9SIK7!g=KSEb`nf>!S@(h?Yq^U+2`5U-r;2Zk59XyMulrFMxhuQD2-IS zNefL84LDIfo_&}adf8Z>$>y`zWW z`-*n^wipS8CYcL}>aDvCLfw{oUJ10XF31Pf);nXiHd*ZR_Zq^_sf8;6KvAb}G)&KC zP6Efj;#d*(K8i=(O$AGF(MIcw!mYO|OGT-@duAr(oO{8hR;vfxYwBZFmCz_yIxHjI ziF1|CsL-Nr@>=B|w@4bUEPI*Nc`SX=f*L}DkW|h>gSsVUM$A$IFu+^UaR=dfd&%sA zChpnW-Nvg8Q01!CKr366{g!VL?tGAfxzD=63r68#Y4-4G;aFNR%}#{!Mq8rd(OoNI znnB_V9}*;CM9eKra$J)}Y(2SXMA|a09v^w+hea!hEq%vdP#x5$2u@tE?G}CKgnO)? zvB*;kGPy3RJAJBFa<8Yhp8XH(d*iC;Xp*ES)ldh#6p~sv|fItr$x#ZsyY4Bp3gL6buD$^EcWBxOs_w69M%q0 z%oWB94vOIX9>Y16iG`7HDk9Z~XS2d#Mv|um!C)^mE!(qPl@8fzxLvB^aWU_tC_pVj z*9(01`F7+^xEc@<#oQlDpS44RD`7L2_I2c?fRfDRv%4P!NUd>1n z7ZcT^Anv8WIux8rF&t_Gu1;ymcd2xob5b(0PJYFrBoz^rugmXHInDn+$6` zniyUn2~mXG!CoM+eMxTXue{Uj*x6_9Y>%_(xh#p5ff9y$EhQK&;q3EL*PNo)i-15h zN&(m|?C4h^+Ti9lj6}k97icsn>O=*1PT}#3_E+c8`ocp*`i46!}p3PK5%F8mKgUNSvm>eI> zrpsD_nammYtr&QkY zt*FYqG*@_9G;d~^QzR68I8J4*&qN$r=qjD_6NDYl)i8`4DL(KQi;yiA+@$3Cns$~w zpw9f12LlQSMU!-Utjw=Jw`ukWD_+UADM9AyLD zK3~aqZE3i3#4Ocl@ajS~+}$dF}ZjC=QS0UfzQ1*CS`av!?KZn#rylD{cX$X7MNkg(?A zb@eg8_NXUa)(9$KK~l|-mY4Y{?zH3(@eB4$b2RLj5{AKO2wof%TI)!9?UE+VrbK*}Q02<8`r^j7STbk8(y1Sk?o zQdmctnynDBEe>1{C$m+AU0W^KC}#-l^IGR+13~MSxv~n4yIcpBM-9%`lEedOY8rMW)PjVdG5QOZt8Bb+F zEqGFCIrOIvP#9g_d`SA7CJ0$@maO)0uV@-VKFmttV_>au>ouXL9;UvwJ!nP6aG4)& z&~|CrhRW0IaM_dFs>0D>YuS@(52(qpTTQLcMZzIqN^sJ2PPy4;lc7bAq*ymR)L!xA zpK~s24~YZuEQHrd#$jm@?=(W~C3ryvdji@6aTr7&gu;`l_a1(>Nk>fJN+IJT7zjoQ z)oZHNWk}PvP_wcnyGaDv~saEyJ0tdJ*~wXF*7?XsqvJ-l*OIlM!+V<-!J9ay+6;ShN2Y~>4w{`V3_k%iiUI4n0 zSsvp)y`l&?gUv-iLYBJ)a{&u=3T{EAzyh_Ob+2YtJ0_z+h3uR#vmb8Nc$YtaZ8n!4 zz!>lzh3+n$&uG1BeUm$RfCIwRgvG31YRP5%Hz{1@Y*B-5$G`B#O*WEP0kVb^wR?);bVpZvk7Kz9-cfwyfcDz^^N!$aHR z$GO#O>TsN^Ux-`%uO6-eS`pi*^`(@a;mr>5j%D7XDl|5r2Q4T!y0`L;m#~vf`VL(c z2Rhd_WWmu*!UoF#sL@GjS?thZ9VKlmXj%A?YfJ*6_!}LT(a~XQv!aEsXFsr;aJ$a( zO+9&_UTPk)qLf;BIbIw~zX(yu0vmFB+$Nr!Lsi{a19iea)LXU?2fYsF3UQ`yX!@-? zdzUwh_f4tYhTE)SeAWJp>whWHK9#1|Z8Cwk!;Zs4(i$oQ&0j&Gl>opR6k7I{xw{_R z`-~pl5oyDMlOJx;YwGB^Est)76J>)4HJ||1?O8FT73_$p4?R$0sTqEenNUO!nN$zr zWnpP6MI@Xe+i-cK*K}^;yQ*`W!biBBNYYWcfvz|XYH@umQ{82&1{PKpzhbqjq>6&y z7BH|>tA=NqhOoKCU)`7=qTvx5_GeWs5{NsYPrR4Y+mghmP3^OOYrJm}2gz^PdajEK zRjwsAr~PVpKbdASxprW$5suw5v;|;#nTbTWWN*LS7+w;sEkSkd=&p4NZYOdVcGiJS zyDjc38Yzhi7P(t?>U%Zy;$=RjB33nAZa7Ec4fP|RzY(f)UIA@U1wNgxYj(SrZ8MG+ zAmF^#lC#-pY}6y<5p);2p^{dgss!p$u^bXYR5bocxEnypl7vG+z749de? zxWQQL^IX(84#;)D9ntoIc$#NNN`|?rE?M8RA!FRZPIINf-=dJ)e3Q7_QvU#k6o`VL z{fI2uUf%?w9tV2i6FMSKgdj!>P`Jw11wdMd91gyRm^sIDGq|N;#3`! zfdxjZPTdzJ&0}9RBpCI07qoQTq@S_GsS2zNw*+?KLF|F1>)`}^*TwW%Yy8%vuO$FS zx|O%Pd}8tk>Z;VKE-nz%;`i~KHLEQvct2{_vqkty+tt&vDj`THHg1)sO7dQPo2^zJ zxvY;=IxMM6^;c4*bNU2kogjakR1JD%f!NVtj?Kl(s)M?aY?b0`l*zl2-Eh6D#I^PL zdf5=VsUD{mR|+|Tru>b)L&za6;UB8z4=gDRd;z&y52670f&^}zj^2t~;4WAotnKP# z_H$Uu;%df=3n*%5r>Opt{W>VR(3x zOB-#gi*?lyV4)W^yMR})e2>EA4`Z6;!;6tBGwSMAuzNHMPjRXe+yy3>#!+(`)>Is@ zt#pFbrQH`P?7(y>bi&^%>TM-w9igoagQ$rm0zvsMyCB#j`l|^5g{a|Ew&8H-k5#Im z0gI|+bHV_Ng)=!)fNaD>;f)%b}i?Oot8<&ZwxIwe8ud0QRua+fBIw|8+hq2S;6IB8PGNA37T_MqJ1c;8betm6 zZMSGyG78tTRcg3+oBF3aYK#lf?K}*oDFgej7JW}hY5aG6Ry8Zo!zzY%-Y9lNEC)kW zj4v;kLs*4Y;yQ;uO?f~dM!Q@&rb#&Dm&^kr;I8!wyxVx zm|x1h8S&z$b`L&EVe2?9(P;D%0`>RE+>Wf?;k5YRe36&0Ogs%z8$XU@tX9`_7I4X5n z&C1!dMj=6nDn@oi4v3ADoH?p3)4i_15D+E5i*?~_qaPNCY5{etylXq(N1)GYE{q-j z07Q7%1W1Ho(<_v&VPiw;dNohR3sI%B^Qz)`k+4S6bA?U7KmfMgfs_#RN`n67*He7x zId*z6aV4M@$C{Sn(uhA7MHA)r%~qdf&t|J%RQ_Jcj@aeu_&$nSZ6{*3^)OCV+pC}n zTqHK9CDp1X;ninV$2dp3Aje+YA+Bd7duayFqh)t<4;+=Y-R6rkbF}EJuS3aTYP>vJ zEHp~XB2WYdFAhSN73ZS!>^aeSFG9EBsdRY+3ALraswK51-Bxo6w3z2Mqll>^Wm(kP zMU=oGopMyf7KmTUh~1r$x2XF^AEWy~uLckFDEGA+SG#}@Gz(<`7$)RS^m_m4_`ysg2Z)daToj6(A6?@3IiMLz}o>U6|c@ ztPCxGMb95qFJ(aI4JSlg*KnVj=(Q+=qjy|$j=hu3XJvmb$wMnR%GDKV-Fg+q*M~n% z#i+15!a1lLBg`r_GZh&hLZ}cTpQb!Ad8yr>uV$I-@jwZ;RBTmsqtDc=#_39g?L=FKJFcKxni4L zZ#6yBSYuYKRJiid3!h_m-9h4~_?o?&n&3BCrtg=j8oOj8H%1hewoX-~LjGZ*n~3g; z9aZ0rU=#9L!D_@A+EB(y=AF?V$U7}?n+uU%fMm;WI6~72#XOL3SE4bkHWEbasRmO6 zx~LuD=#C&cc`54%Qv`r@P#r!>wJs3i*&bn2sqwdk{(YW~Db#x$;!g{qKBLUOsgvfd zV`Y)Y(LB+buD1={Hm*fl2Z%dj!nxa0R!44^vHix)#P6mxGE{KMR=zyg;=D4Uiz;a&BouRuG4g^BN))rA9#H|&*$5j;r z+t4;jX=@E8QqvheeV5oPgZPdUO*>`TfTa!55^|UVYgz{i#lx!IOwVQ~g>~!@H0xewI zDngz~-fCRKc8er}7NCV&(TR$Fl1qMjb_#oXJu&*_d8&-k^Pa005blUqpxdh9l1OzFz~;I&_c_bm8f1IvKnWa&^M?l z!PPN1S5t9we`Vr#Wuv_%+XfWg@I$F|f}ofOqTz6NlE@@A7@UMoOmaXvGLB;sn!-#D zCqj#UV5>w1taf<5t2_1pypTJrb6pH5gb%vqvNYMtiu&TqLbCX?AL$}Q3bDpXo%ap_+d|Np@mCkr;34mo>OIu)^ zrusFGd&uuPLh3+6h8CCz5D+`|WJLCPrk})zRXY%jB6+U&PV_CxJ6cn!2XRw)kN!b= zRj}G_H~C7VN|_}3VcBM6Ey9hKGSZ5c&N92t`?SGTX?kO;Rbyb&jGm!-KlpC?`V%)c zHAA9pL6b`%QY>(H2+wDwTk%ppr;-eIn|1@svl&_J)oQg1Rj+PJ=DZ^<+E)9*--IJ5p-X_DkqAmtGEFR2mhw6tUBW$aN z%R4VMOalh7$DAucxUG?IHR&DWv3K=d;gD({(Nu12^f7BZ=OsuQti%)qrvZ@&bdONH> ze&;S&KCY{Er>(DUp=`AKR^IDH;QdzX3r8*eR}>>9$};QF76b!jPRm8i6$c?Yp^;3T z6~n!2m}F%@ZeNm&C^EVQ*RxGmRip&oO_X|}A{Urc+4wTF3lbB#>aB6&^qRnbbyllj z2R0hLBYQ%f^z&LmEdZYI0s^k>Y$Sa5>m2IqaLTsOID5v9h6D zbz%MeSBD=LWF31N{{Z_&QFHLdwn;(5M|SGGey*L8OaP16Sy1dQPcEeEss0SgEu&1f z{uwTU(v3^rSTqyA+jUy4J9g~b>GlW@?%a8|MV!X#Z=$-)5ZkZ~O6E?zRGrh#%rV&_7y2$luQh-$f;$9OHb8XBcOtW!m!{AC*FpaP zenqu1$tEmJJ?rt zK;^GsP4tc~`n^yL@=gxOCg8bYP#az)6<>bl9z94wnD&J?L^I(+buE>jBDltB;DV@u zf#{FWI|aY!fE3y0s~1(g)2LZ47#v7B^%&XaQ4NAZ#{Gev?K_UroIB<-yVmR`4@E4f zCy1Zuy&A2psLF;0A{?oY2l#=L&422Bqdp+y+Qy|XNT+qvI;MI+XzwXI>Vuwbyzx#w z_Md0pu-M>j*Ry4y_Ze^sZfRUc`zHu4AD0U(;yj##GwjpZrI3SXDhSnTZRE3|R)W}Z zRDe@?>KknBPgsWuv2W~w_u*{)RTJ8>%PnNUlv^iw0~yv7s1_X>5TyhlyM z{{XV2hL{^KPoO)(D-QLz`KNa|sMcK@$2Crfzr6Iewx(yw5%gwMeJ@A!s&c>%ia*8H zpDA7Uq`BNaLQ$sA3%RK|RYbOt83SVpjB{G!OX5*NwU-=%yO%Y+;5RkRz$%?94efmN zMq5X`9e(2_aNoq9*VJ`WsNslJ8qwh#U&#N~puR-GzpvGNF6 zMni_XD^GWGc_E_7v5w`bLL(Sl{FVX6=v|0bw25ELglw+nuugiZJ}2sk=8NtE#X9$e zIlqNyzDngD7*J;mq9Sx!#Hy`3!Ch0oHc%o7UXxcE+CEFKU`C^bqMa~&@>A+N#Z}Uo z10}{(@>LkkD9c^uhX`sPf~iyRp&AjYtlx&Qy}n1c&}j`>QPcV>-wy6Z2R@08sl_hv z?1Rh}yGUC0dPeruxM#2W`mJTxS|I@J+on}#un=Se=7HU+;JqcUf_)w4ezHGxrwiAk zO@gDrX1R?*y~O($z{kKsK9InF<#?Fj?}d6VrBa63@i6H+rg}qMJ+`fk%4H_es6*t* zgZie_sZHEC#Z6bU^m;6f^>S@O+uZY+IxD-N6pCV*8etA5ozQOxx2o`y8-qV_*_>{N z7X>`RcN2-P#iHRB2WAnq#7`s}aS$@KCVHaVd&g7UZo2a1uAFp7BZn!*r6AwK#xk4@ zHeB8338nPI9{k!lCb^9VTcyg4&o8)SHX*5u?_BQlI;UBXRiI(0U4Y%?7k(wGG4P|3 zaI*^rAvLFRiJUbw<1$fNDipMD@m=IU)T#l5%N@j?>7MdFOD9B0Kyz96yFMr@R0;-U zxIzPT4E!NBJ~sf1ORfOm^F-)Z^C$jQSN{NQjs1}7fj{-Qj3;vfRnN9xCr)TW*DXyi zv@UDWDxb{G+Dvc5l}?0POf)g*DyV3Fg0LfE2P6~|LA2YI%qgIGV!m|omSCXAB(SE6$87ffxxP;TBXXq1nd`KY) z^Y}{ivOXAZ{{V1Z7AfB*)!8mE)<=A<$xQ^!!Ib=?-Uf_bQPp0KSo3tLb1UWrMr zx+TZ8-jMC3tsKf8n^L1+1)|n$sg}!Z%+HIQsDKBO!nlwnKAfl1KlIFcq2o;*)F8&+ zPQj#Wp2ETmI3Z!nG72qqW-^^a&j6^VDWA=C$W*$W*GO<`5?FWDVcbpThJ<+_=G{FN z#5)@!x0y|C@o&v|gNFE16XuRv186|oHu6qr4sGHP1lxX4X{^S%+ZC4#n8sFK77fHB z#sFZ-099e0u!sew&Z z+Trs?UgI2^zllHiqYjrM@cM0Z{xzgs$An(rIwB6pS|Po+Lg z=+s(nd$hQs$f-IvnlSg;?DA00)SUG|InD!2yC}YDg2VA>e1f>Pqn-_*muj2dQFDX- z9%|ZeaJR$#k@jPQIng>5n4vUVGnsqe#tN7{CZ;CiUP|yJVR{2ij%Tz!r*`8rr zCxvaQHi>d$9l%_JhMbYwd8it~9-UI5FQy@_7y(*BvcLm*A(fTphfc_Y*(X4~9k|H- zksxXm=u3!|U>XIPhOK-kgYc(vUX=Ep3Y82d>%%1ru&j6vZz8xFc=U~tZO(1S1ZcSK z0-=xo(P=F(IUoTxx0XIgRJGSqz$48;5JzRs62pO*g-)E2#tG~G@U!}(quPiPTr&%a zuv6J@i$?;RN$hp>{4PKVaX%$%xGmLPaBv;G7Q?f}ugPR7-eXl`vefENH26u>CsU$s zeK8^ieADe~UeSW+Q*U_l@>az$JA~}I;n8t9#{6i#qj-9ihJJ`NILPq`R?C2y(<#=P zZfpGTvg)2;L8({+^;{;ik6a)s*Kc|@E}MLnxOqJ_L&C_;0`FYc9&w;Tp{6Od#@;Q{ z?H6O{69w#bn&T@p={9;IDN^qzn@~N|FL8p>c$4p@+jZeNl{dIvct+>~&`9|N?goPW zrD`P>J@_2e`M7nMK$kVd?FwnUF#iB3m8paHTD%Mva!|&G6R8c=Jf9M2I0Ndm(P`o+ zaI+(Ipew?>Agwf0BP+(atcZoMD^(?|ouvl4%x*%lghfM_6~xy(w{fCv&Ecv40FUas zsx9dLyi=hH_S?nNb$Ra| z{RPJmsj-;d(yeHVVU;%>xT5fVv%1LCt3hIgtwJp5>9JGyaH*Zk>>2*9mvf zr;>bot3!z{f}NKZhZHY%s;gw0V;B`I|26tHk%|QnV&81hp zrB{eDf4VLv(oW$zPkY_*U@DF-7ZYd^l*?_M4^=;pMCz7W(~0JLJr$!J<9}4{8EcvZ ztTrV;bEYwAOg@n8(D39LUFDZHCgzy^Qzo0M+U^q>Z}(SP8eQ=?Z{&ci@lx#FIS96) zw(J61lxexa?WiLMR9x5G!I0jI*woBqIIilju++-O?qtflyBYXK$hOxw{Yr*0fv0laernS!4g9D~pWP5Oogorf;N77{17Ds> z+{1N*b!ERLmY3VP$|jpMM9W*r1IbBO^0;O-=3IN8a%D9rxIyYOkbD)=@N6ABm{VI%t81M%*e|3%SP2bL78>K;G8{9NIfZj9KbLY7 zZKUS1kbo`)aWT#e{3cPfah{3N8uCxV^nl0nOpqs(9hfywC9TE_Hw5Zo3T?%Q8QF1+ks7B4Qz4s4RM}8m zSp;KrDgYn13dFOaMe^&()us`=Hn#dqDl{0|ocvL6Nz+Meu=M=n-3QZzv_$L7+&0s zzDQPUeUaqv(5AM=)O+w{G#1+JF{-Ba)g;uJ(+VV*#oD29!A)&|UGXj&)Z1>+C2^i7 z@1hOU{{SU58aQ;q4yNXo>w%&zpAM!Ga1F;Lpa?XO=++aS94OBFr!@LY9Zw}eB4Xb) zQc2^^vY5ttO}X$+iurYbb6@h*-dg+<$rhRwUS2b9$&~3a)Y<6YL=E@8pn`|8a1@V; z&%s17p3mYT+MxdGpgVLz`X;Nn@{Fp1b z?!`9&saDgj8eO;wn`k^d)KuCW$Ahh|gji*Si>^~?mus@Np=mDSgvRdSI&8S9>DDC) z)!7=zUN=)~e+s}OxdvovgKTh*ia%9MQLA8ybnd^4EFXn?I^x0jg5s#hk+2ExYg&7} z&U93Z;;km+f*=%qtub~+5tC0jEsPby=(|AdtHbFRpNTs9jSVlj&fa;~k2gI-L-$~3E{3NHB z*x^t>jY_~V5@e>mnPKq1pG14MHN<7jJO2QxeKI?vOy*9gcb(Ik{$Uz&+gYY|P+|rS z69`}ps_Azm+Mt|F;TJ=A%s6vRr%tv3;%HstZ@BLZz3&MzfYFp1L%9AZgxW=h2nQh? zu(jNkqJ`1%P7@gfJY>2~s5AxvI^3e?7U_lIbhl7eqM)bCMc#@uyT#uQ$}5L^4U{u#g}JAY|ELv=zwiTR$wypX6kIX@3N>Lp7X*6 zp&Ns^e=-ejjq0pxKZ$~FRM;FCTRGNKODeY3{D?w>>eF!sZvBw9$=@iB27#QRp}QUw zON(i~ld*2FnncTlxxnh0U3N6)oolq;lJ3kF)7-l#o7bSa`QODlZ=zFgQ8<$mpk=V zwSna1!uE8)o!oGSA5ou|WZfaUHr%R>H1$#_+f~9>w4~O$rXVJ^s5ZOe7=%SOx$kI@ zq4f-&TPSVLFHm?~Iz#a!$D(5!cp$pT~n7N1BE#sU#hmyL-zwj8)1KUyM(Lc zGXDU|iL4qMOG2(=yTIL=xI>>|i%L0elY)tJBO08cZ*`o28S+-~y549E5fV8l zGCcHFxMAw*Kl1fX>=-^_Hs-a(y4sFlyDJTsvzp*&b=qMD7V)_03)!*Mp6?QI?pslZ zG2ZB|bcP)RXA2E`=ZF%8tQ6h<0OCS@&7&JMVGsFswAC7rotkyX9uNRV`V?gO6zFXr z#%XBCUU-{wP>Qyn%%i=e=QkKccj8A>OWx8nkfqN6jWG!Lep3sN<&@fOc1Pt{%gN-7 zmX{*>jp5o+bVClALr@wwPNoR@Deo!=u;&Ovn9H|BHPnvzS#bX9`jTzYTma6JgWT7) z{R*{|ue*6s-4GkRrU)Dwby1E5FMC}M%VA4=4cHVsLX8yS-g_%T5M6VQh{uhCLb%&# zXw^629W_Kco?SlDau;`W#`~$joz&HU#c+r`lbs9VkbaORCimW##!L-3rcfq}<4AvS&ytRT?P=D29A1VeUDWj1j; zMNHSIE@{hkga~0HqMLp!=Vgg~u8GlNn~7-DC$+7H&~9a3>jdj5#Qy-()Gdo$u|>4q zZ1h(5g{0zBrni9O$w()IPO55$G#wmNhY3U$aE%B?omTJ_W*B}PCqaJ_VP!~-oSESd z-D0R{8HSW9-6o!RQHP#1Z#5@O=vC}wx)yK7q?odHuwjWj{-rqb$oo?%TWxt<-6FAl$PqVC(?HO=_tTfze| z)o~V?=%iC*p-rBS(Hb60(i>i!R1AS4)la;5hifPIUdz$@#+HV-Fu*7WvCMm4bWeqU z5v_es27F1wTTcu-I%n>jDG5J9oE_+`rVh5OQu%}lqT_zCkd3h0zKYt-cX#;OQGGYR+GIsF6LChPTEX6PM&;locgM*dFAj@=!KcX+RqlDLIcS5~O5vtdzL^yX zl*)TEnMA#Uz-2k5rjRH#qa|ZrirjGJ7ZN~r5EUBVlDUs}v-nWnb26>Cf{zo8hh>MC zwcOAVk-Cx~wO&4m)R1wa1|XnK&=YF5=^T{Pc)5mfs*89W6pPzw)=+!omYKpZ(&n9& z%mJ=;veocMO;EESgwQ}Y)uDi+++$mA#lU9^oATWYj9*@Rg89657O?-MHND{GC2;@-!9`FV)L?|x z(5m1VaXIru`&YKu1-StUw9mx2V6^O>$anm@-w0Q*nHqHFgP)ev3xvh^P<3i^pHxT;4?z*4X~LsqQKR=7iCz)pOs5nAa*9P&kc&f}G5>4q;2dbtiOC(H#m6 z1Bk11jZlbaDXn$a)X@mcoTE8j9T$o2jKD#z4kiBpL|O2TiH+GoU+Sh>(1u&)i3CG1 zh;;CT+b$QJ!BH4*Gy&129ugXKTy5%uKq}_yfphfPb1hnEoLvGG2>B*#6ML*XbkhzK z(EwiSPU>c7n$JBHoCf9-skGtRDvqdfnkfJa@Ph;Rn>Z>=Njo6mK`t7oc_@K^bt?w% zn)pk4u2P`H?169&jlw?xYTzNT6g26b6T0aL=LS)0z;vJlKvRJTU_jIri$mJHM8bio z(Mua~KcW)SXIvp5wp2?Y-B$cO(_MA8Zh*v98uLUn@l;mM9uWY|+ag>rj6rEmYRS3C zMy*Vj0V-Yf3C8aZRnZPSijkGXtrBw>S2s`DMl*cf%Hm^+;t^-X|o834HoZPPf2*#<$yS(!XDl!Vy)2V6Q9vFeD?&kwusldzW zsA#v%Umhh627agz2L^!_hdqRiMi+MS=AprUH5g6qTVSV`PW=>#5sWT7?Fc%Rp_8Jz zS{U7d;#CD_I0KCTiVPUn$l4%1h3AG;XF1sScqB+NHhiw@S8%&pBK~aUw~c z?_Kgeu$clf;L8@TXAkMgc|~|zX~bw2Xj}rvAH zPHVDh>Va+}D$wCDnr_=E^^1+o%$FkSaQ3uJBIn?ZGJ}Ifyw%le@HapaG~FH6$=2ks z@k)n5CmOHd7rUah#wS@$adHO3Em0EDghqhqhPYe8b_iD;mM17iWkG3_b@D)lx*Z!1OFM}R@jGR0R*@&7G8WmP+t^x*>27Gn8H4G*WJS)R#!;uMj~VC_sWQ+U0wmPxy_F!56c_ zU4hYOBSI4kUOTpDC^gT2v_f#=h#+$av<@bps%v2J{Uvb$k(5h3BxEBXVL@&WH4qwC z>b!m}kRLVSR^)lD7WR|6wC}3a@Tt}nvZZo`GlnLRBouDZ3r=S#fWT-@J>DlCN~?`L zx4=`L=Mv+E227^4xLigp*Q&$F0L&wqE(=K^THstqC5Abq%7P~DXxbPr5UEELWT#Z` z9vnc3K;A6&&B~!fc$Tp`nje`D2PZGz%pRg*WN46)+lqc}r86?T^`LBE>Y zni0Blal_3>!Fmop6bo{RFdXgqp+65*Z+9xvGq0MHHl4XFC=NGD03RO8*oLEXK|K*^ z4wh(F3y8a#mc+2E%)4}2T;6%)vvAI(H-4((;~?V*RHhrvP6b1*Rx^{b;l^b}N3_^c z-JL!ab4)yC0`NoP9E+*aBomlfYe;YCv;&fZbRMe1m-FY*HPHdOBN;t+O>6z7`ePs| zWlU3DPGLb1R60n14yXq;uyj`b9OX!ELbxz{Y?M2&I5w4sBGbeBDPX$YzoKX)G@Xir zvJ;p6XuW0EdVZaSj>JyEVnC7{{rV}jzw8qN=MSVk&w5$va zBQc-ZF|DL5cBL5}6ac^oUoVV+t!Ri>07wb_RNh3aIjO*WD#u*{Rjt5RKr#C(TjB`6 zGPEE&nl1RHAI!Dzs2Zc3ZVHH!0wy)sY>8(Pas^ zg1jU+b6JRP$}|eVM!TnAy5sa&(BP>J(8Bg^V7TrV@@k@7d8b_folrE)?+83odqCM= z5P5P@0#rj|oMl{G9@q3zBRx@bL=ih`nDWvdVE+Jg$>9|?Jkvw`H%M}?!sd=>H{o{= z=&(3bWZ{tDL0e$#k1~(s1y4jB23x8)4!d5eA{|de2-SHkmC;<-oltOPu5apq2UTeq z{nfT!*X6E+8U&4DUrpT*878mlql<+Phx(&4Y2T8T<~bto!Zce+$}ZQE&(RKwc_xpl zABCzLuvE;Lr>I_G7Y~I8OkJ{LatH~o*ei2|8kG8k7Rs|-j!|m_T$@i_)Z!L4P~0+d zs%4`6GOT-x?98i~PU>XDofmlgxvJ0!1H}kMGRwCie#_d^zxlF(8U#r>IKuBtw(XVf zbgMb;q1kJKEu`V5ifTBM7z-ilK!QRp;vhQm&t&=;HSZ$Z1O`5xLvH%mJ*MwnP zaDkZ{t=_m8NYy>B{ZX5Egd>vdl;bk3h_iKR(fSk?f>v}3T(xmTxf#@_v*MLg^Py;S zoZOXlk}2+vvZQ6FSxh)E6amAzSjx`~pQ4ZZX_SPT)oNk7u*70IBIkZB)9M#BtYf28!%W=g za@jY+T)XDE&Sr=j)jVSYIEeoMd#(z8QvU$-K)s>O<`vZ53r>na$Qv&6A;Larx${k} zJE$@o)y0d1s0Sn{oOAw((Sfo$Ts}(&D(E)_!xy*pMx$>ors*I-{TFy(vTYd1D0?C< z{Se@A?$o-Qh#J91*|>=0zA$>A9aJ~St}I$GjhT5(xyA3O5h6vUH-X0Pi-oRn;n-OPbaLyeVd|RB@bG@B0Y1rK69I8L(9oXd@m;!eL`Y7#*AO;D=+|h7cNr+V zyS3W{F3hMhTJEYK0MudQjX0Cz%#{F2YlaI-24sa6y!Vk1kAglTwGN)BGXfAJSX@FS zaMWl(x8mJ+i@61s*|w`BInLcofgF~=oe(@Rst#znbA<9tnbC0I1YY4T2*5l`LW!7Z z2pxhTW)-aswKmufl*t@JMI9HK;=tyPi^PH4Aon(2&0zz$DqO>aK8TBf0bJjwHE=j4 zJeDRLIV^c6N&X=RD7cw~Dolc56HQKEI)xqFH3%TLX;E$g)fj>~6bNVvSkWXcp&Nz8 zifKTo6Iw)6Yq)|EZ-gGq-Gp6q=3!jWGO9<7t|`qt6=>xE$(Gw6G&{+ANzWFG**)IT z(lUpn)oYwaWO=UfxBy)`%5C?Si@s{3hCpP*pRCN*T%VYv}OcoicBguDd zlI)Otu?W@i4-9@I3%I;d|d3Ca>wb#0(ZRIkV7gG+6P-RBd zCE`R%rNQjpVi%(^y%iqg9pudK^H5#h+s|ZM3=VF&P6nNpoRGRt%>jHX8u~6R`7GnS zS2~-&^2&>Gw##J)Bq%MxKn%*bo``u$%8qDLZcPn!)oa(vcm5f=OC$;V^3~uS~V@DQ<2Rt$7R2bb;+macsQ=%KD zsN{L8CDkt45NktP>blOU#eiKgClltId)tk2g*Ny(sFw`MGJyD20pi_jb*n!LiwNq0 zb4Qxy?Sk(e$ryyd$dXVPKQ!V9!B)+(R|nNxT{5oxXj*VlxMimbH4JQ`=FbvrWpa*v zrv_SdP-KT4_FNcq$`}qK#Gw2J3ZJT{8WRN={Z!mAjl4#hYom*F@LM7L*LLnEJs8NS z6Qke@z%B!lXNnHol;bGd;Bp4iN^t)Gx3X*>8o#hR%aX>}lB&i)4qV-*ntA-A_fM``8rqVa z=#U%=1ZFf;4+-K-aQ+oG=v6ZMaw!>99??uTp1diZ*fy`BjanCohd=PNWd@pTbaYoS zfwv8lrpE@IcSKVR2jLs6z=1djQ@9%!NKPQ3j5#>FghcgB7~nIn|x)han}MhRDbAMKdi73g%$mfEqp_wF3yj@|6(Z(agx)R~2Py3&i?)>G_(rNv z#I%cYqr>?^cDy$$8^?`P{J*MmOq?Ix8${mVHBO>76XaDpf9~n>O&3Lt=Apypsu=NmiDe3KYx-`%bTHiI3s zBV?DJdmuR{7`e_kMdgML5o6zuo2LeU^q|hE&EevHO1!|m#okH;k_wp^MEGF9g>zjD ze~5KPT<>J5@{;ZjgY;s6mHSV!Khg?V{J~kjXrBUIanl=*onDIU4U@6$y_=q z{7K&w6-z=MRXNeC$o4qv$r;IUO%~1Q7#Yb@(GRFCgjxi)mW3JOjG?TcWbo!u4sG6R zA0-aNVMhBXk}c-7P@mTc&8?U#he8wVfcVifrb;=wolJ@5oYxE#LpX%sD_??|@#Lfc zqarpY$PLylNfaPvoq%NC#){Sl(vhZ!fT zmNntjxUsiX>gBwD@cOOa3XLZ;G2%mbu&L2)2C}vGfjD&RfOnw)??kE^TJm&M%NiT# zzLOF(UX5C6G}W4U%YJIBg{AZaH0uTvVZ=4Tp40H>bpHTH3~PpE*Jqld=eX2koG%-+ z?e$eDX0WFMa0C@nliSDW`14PtSn%MK9NsN*5UExuwjy32{WU02r6Q9I$<@c7`XE0F zxLI>h%BGBM-3dU1qKJx^p5E}DPPZ5F>o@unX+ZQXea*)LWZi4>}Z_lJjkXc>?{2tos)*b3&m850Y4A4s*N^qDG~YSiZE ze9ZpAIn>*SCh$c))(io(ENHhND_bQ)^lH<2Ktx>RDmvr237y_isN!|zgG^xSs*AC? zglS;rN^4mLc?B)tBS|aTHc9%bW}Ci0s(>74LY{8%qke<+Pi3tg;N*?I5{LqJg1Di( z2uven8Z>^WW^O6X!+MTNobmTV37}xND?bt=OA#aD>|q-f=AdRdr%QKIXN3%dC0nwL zVQHc~z?3l}a+_;q9QbgpJB2OK>VcmU9Kct6S`{rOc`HPQg=_UADs@sco0Y)iDR!lE z+#?!&iCZmJ7?5jX!kG@y;YR9AoI6-gvzo zh8!EJYlT7x)&X2q3$C9vAc!y`5QjP*as88;NzODwi+{qK1T>9Z8mG9Men`~IomcXw z6Hv?H2%P6c*EINiLKTv5vjylisO4-v-AR$NCZ$H`>pQ0HvB$vh?tLN4zf z8dGi_6m{cL20>SA7z*~_v-M4B_*0I!LDD!g^IhFKceb8ZadP1~=8ewrXqa5<0vCHu z?9ZBbfY8H%3X4a;H2(m8Y0}{iG5tUP03`t9at>&fubPEvi%yV%jc^vRx(yi*3tSZF z$vIcO0Nnvko%fY%3(4IVRN^HU5IA%T%dj^W&JcU&iDf{=sJdqe2pTECbwzA=Rt|_v zK}=}yr;!-K=L-$U3&|PqwFpO(bwKmVADAiL7hM&jE!_+Wg{9o#5~n2*7$HvR;3yvv zTp~ytpyq(lC}i=gwRJJ|PqgG{g~m%!da8aT>_Abo$`Vi)8E%DK4qks% z5vp@}nQ9KYN}~4p6;hM_FVPu(8Zw^wo*7#@!Ag5C)rG-}r&c zUGX%2-fEq1M-6r^q)CepUnNoOcyj}|r{Q-_iixuS07a8dqaCKdqOp|)R{!fH4HJF8ti(K1k|8&AHitv-4E^j0~| z5A?TVB1z@ZG4&amhF&r3wjZ*xj6A*4TmJmldtJfJevIUI3x_OjHOet0yI;+e=9hl*jmZ&k%s{n7$ zbQlAg9grqM<7-XF=74d?%Oie^iM%e=W8qfBE*o4K$f5~t%uM^ zHl357@n3JraS1{IO%4(jATSfZnNc2UjQ&69-|kR<#Zct`0OS)#;wj&lq4G{4Gxu^V0qBV2qhgtlh$D>%PX1JXm1>(g&-O%YAv@%Zd|%l+^8l(ldtp>3B!6WmSycM9 zV+iFt`H_xmIf9)W)1zbkR=@63{HOI)X$;d)TmwNehxcq%mY14LW2PwJ!yBwLPBy(gu} z7a29FadlL`CZAPRvxdE``AVWd0JB5{VW2zb3C^A?*gthe#O1Vy^+ApoHNeO|NvClc z`KL!azG%!C=%8-p=8sSAoJI-C2Xx|coIeUDcDWD#0FhPbo&2(?PyI&a2JAwCgwojs z$UEZZzCfZ~ly&*KZKQal`-&Cm9N=LB|P#Gi=Agr)hP<3fihNIDx*`pa-UO z=~)Pd^+-UF+Yk{U)3Y%KO)wIbm>Ezo;UFIAYTLR)d$uSyFePr9q|28xiDo22tUFT$ z)VV^AgNa>hJsz6qO6gLuDsw9T0EJ4#to5l~Dpy1J*GlQc*GH)?=0wVK7ab4bQl(1k zQ94wvl`9iafdmVdTY*KW1JRZ`UwenUrcj&HA`%EP{X%YG>IRW;1ZEd38bV;071gOy z!=kQV#;-LFDvI!p4Q4n=bi70WzR2;iCmGu)WEY8LbeeQr)VnrIJNbu;F|%e%O7kzkx?jISDg^+6;jhVSe%7IIfk;n z<&y5P9a-qMsZthVClbg_SewXvDFkL>GXhk%1+=|J*pB(~QKj;oFi7{5ws`3O01jnJ z>8_R1r9_)_ui?*E5x$UGV2LVJsZcsps1l`0&q|fjrFG}7o}{VAP9yv)qtdEZK$X$) z@IsZyeJCqR`o5>%*? zs#K{^B}#!RRZ5jCo4{F8O~nPpO5EF*QR+K~s9-yoMa&D_w&X-T66&LM{u9<|F#5PR zvT*}(sM)QN`%N`)00Cw#=%^bddhgLyE|$YAZ5q8{#-XCdO-AKr(NOOx9(o0_WNl#Q zcp&30Ih6^m1?L+2SgBIF*Gk7gK zb>B+plYLXIbg5A#bgq@qGb#i!$`@?G2tkczQk7K*Mae9R=P9V-4q-XH%MR&*!nlo? zN+2kJDA@59cvNSUHnG^L;%q%ZS3G@nSd;(vH{CsAq=eL{jgnNlHoChzq(eaI4v7Jy zYqT`d(ltg2Dj*^u2na|DBKmp8_jg^-Klkp~?!C@AuXEn#eaAVFG!~U#N}LIn%jT>o z%p1e~bb%`do(Y$N$3DW0FPo2iCgObyIOt8Dq_$as*Y`@Z1uxk!rhG-xTpZ-A^}{+8 zz9fS&v)@s0O!1$rM(03{2TN-mn!^QZmo3R$a~CTLJ=T;!NmI_AYm5b|`CTl}0jQSG<8^%j>R(dj~s5$BS8H0Wvl)75k(G zXOM9}xtfKZx-&W$(5JkAjSBo8#A}p*LDU?*EJr(#tkw-Vu61bbfpqX-JhTRt2Wnze3VGPVO$=KXd;8iVf>fpFn8SYGDX+V$?i!;&Q z9ugB;XWmkDO~1i0&xSZSdcl8?pX%~lsm{^r4ddWp*fKcC@F^N6-eDweIRecw zW)CLvVScs3p7)(#1j~;u)h;9J%73~s**w-l>U#3&lCz?DhUPrKRGu(>jlv3EUWsT_ zRLs?Sd-c4vD9Tx{ZqBIxk}zp~|XYpQ;Jta+VqYcxenbdwx68V!Yd;0sE zhkwOTOb6o(59FdTk$KoOYEH(%d{$)C1sV}s(}7IS!Ki=OAY&b82cvp3ILHrV#OY#U zrv=BseoeVJ$5N7o_m`W>kN$Tqe0Yj1-0x7NAyMpAN;@!&TiKkOml$Dy<^@C)d^o{6 zHD9VukJ<-=Cga-c!tzYdLW!J4q@8j}?S(xNjse_+{FQPl1cdzB-g99HJ3XR;W{scY z{h1aR{%HMAj|fu?U~ACh2b35OctDF$E{0+TeI^(oFz$(2GivSvnJO7;9bt|J(v)kl zZNaPy43G)Gknp$0>DU`;K?*loLcRIX^dPIBg8koMW-WY@O$!IyCE66vQaLh&cIe*m zoWyc$xW&D96tC?7xTuVO!s$Y=(+7z)mJY!8(D4eKsPW5Fr12h83ZR7u>@&NF` z)Q0X4OM|}uZ9Xg>%>IA!{7;|tdi%~QB2m0CvI%B5m6`Im&v1CY&0Z633S zLEQjC3I8;!wszm2AmN)>uO~v^(P&Cm(DoWr2B)yOU_t=EObzo)d+mS(b$0;cx}hnc zvhshPvoZr;GCbh$S^WK=+dxxg3<7;Ffl3T`2aKaV=n@mB9Bl0R(__Je;7h>1IsGo= z=Jgau0g<=qxJzsBKDQ1H#O(hBCc=n~2^pB6duUK&&;$5woQiQ`qTYPZu&{ zZ^ML^7S~{w0UjIQ_7(>Ee9T<^ug2!H-!6&>#ZYJzL^b}zJ+Nw$GRTlsK88K^>}=!f z`B9xu)y%?3qW%KGh^bTKy-ymUn5D>vk|16Pl-6oOsrC67+zUUIB zHz~|1^@v?`2ALz|RB5GOXbLLTw7P(nj4bpf&AUdB(Fp_tQ>#Ktb#}fg8_-YL!yL2@ znv>ZcG)#)@IB0ypoQ+`)h6JVx|DQnhhQtOHxy=bYdpak<^~N-13C1LKD2%o-q-suq z3t(Uil!J^)_7yBd4?HJBz<%9*^0MEPe(Z@FC4D4(>A2BKnpz?dL&QhZJ4QQ^KNBlk zj#dpz^s4BxLUzFnVYi|(`L6ti@2M&@Lt}apbCN!i{Kzuf40Bf7@|q{b=rA~q2t2PK{!D`#b_c@5<_GOJ9;kDz)IY@T z2mOLfxG@V;W&fo-OL*BoJAADpOw}T-1Aei12F5qV;1GoZn;Ysc(R%pGKeVvuw~C?B z3P(?Wkt$>Z)%-S{OCV+x0C}?l$KJqkM?SoT38!emBtMYY}3qw+Bi#-yNXUj z_NWd1%*OeVk)0=3pW_lSe()v|bl)EXFF-bLswFVWm1Xw-IFhiVGbs75wHKY1ki~oh6KAq=7 zunCL{-;(qiAQjLk0~ChmT>|xvLHN(zaySCykoWknu&tT34&DlzYbp`VNgLHd8Do0b z+-u^iTY7M@y~D@Wi31Coa_T%tU$f&e!YW=z!b?1OqvRBQZ3VOYXXRV(KnRK8N z?m1^M^nbmS-0}=lKkf^nBGnCM#rftT8#Yyl#`Z}Zp2hnDZ7+78WT)uE((e`>icJ#( z_Z20u&w}6Pi}N+Hl_kySff+Q2+Ppq3?OP%<3r;_$Mlz~lQtN+s`l-cKod?Zv(Tkpa zd3=OvBOZJIi=WE9^a6SXv9q+8A(+O6l(W;XcZ;K2F)e#~E?yofm@4bz(Pn>u2?&8k z%^5PF=PNB+Afvs5HoDJy^^^asJM*mF+_ikdV53BLg#{;BD|T4jyVuw?E%{D$;_UvChDlt z70b)vmO_w2${{q5>#c>UIslv_y8sgJjfsS87cxnj9&iA;`H72>G(%EOuv0&N2fwuh z;6c}K;|I_otC^RW9Al&2P~R8YE`S*@vM}K)@>orHCf832;~mYZvlU#E1dM3^*ICA6 zlx6+|g<4Ay$=1@%cECt>lUc|MI?UJ{=b(gLW8TK#h{;T-l_@3l#`#eCBz=_b$bkUK z@O`iJFDG+la_#f{KLryrn0=qNO@3W>joPhqN$;~#fp}_6u2(ruQGbWqe2dsGEbbaz zRBN+QPpV8;q>s8JtI$P6f(!!W!PgI-e4w3bH_`VKtNRhQPz|YKQ$1~ieShWlWe^Ky z{2F#xt2Mb?#@5E_5#Xp*gxM*{cb?@rL<_2kBcKFEkO#k~0|C?OvilI%7>+)8&f-L1 z%MNkr8<;(#k~$d+Z!A8V#b`~KtyeLuwLU=9(@zy+%o?i5*5POeSOiaW(8Tz!1bNvY zW>yLd<$ph^G}x5vf{{}80^UD;fh<#4R}g3S3`@0w6XJ&EMWWd+J#doGJrZXFDoWbs z(I=(SylGi-Tzp|_vw{$D=!w7DnRGIfoE^Z_TI(PCgoCl7$3z&aQn0m$;sV9m1kD~a z*(w?eZmcw_bU5F1@(XrEZ`UmzP;o5fCzvJF=tKU)8ppv%-lP>>A3eE)8ElNN1uCoF zBQXQdLA@cLPeBi`&=f#o+o|?L4Y>sCaPrImkYHM*LsH|PMH{bRg5hE#xmra9!Sk}F zKM5Jvie=iL2>wi^NkKi@miah{{2JA;VnZ!vpS@(AVDz!0*QM9CPTR{RX;__O4={Lh zydyil?A44P#?cKbT*fsqaW?Bn>@@Hu?}f``u$R0s6kZW`rP?H}o+bZyO4vt0yj-St zjmG4qz`-5U&ae~8ztOZ+t7Fi7h|kUclEVX;1Q4Mj@yF%c_*dANJgZ3ybJ2n#1^xtt zS;iSPBen8Y+RDxRQ+wIJEyH@nr_RI$y9Jdfw%?_SV}8&F0CRj8V9pQDCwI(cZ&On+#SJBEl+Gr~~@;!=>Ko(c2!}2*+Q|WpA{Gt!A9X)08N4Ed#d92);i_a zvzsef@^GT^ z|HEp+0+|}LU<56o1Id#llN_bZDYI@Jh|W2dr}8Z213%S`B`SU>!No+1@-d2yKqqQ# zEn^Y7O=;3UwACE9ihhnl(K7OFiOL;xcCvude^ncF_I2fx6TjeD?TYLaNoNF8ClqxY zcBV%4;|QL~)OD6Mdc!iZ>3$9lUy)Iq=-zIQY=2=h`dz zsEKg@!%7?@rZF{!QmG+>rZldsyq72K@38{SWQ;M)Oq5_vMU-2gK~W`gVkJg>Jri@z z^3avPud_4lcN{{e-?`F+Dl{36zA)qR&&?!RdE)07%C2fGdll2e7~ostD8t&eM%GY) zGiJv=BQ9#z0>SzG)$j8gqtQ+?=N+LhPxn=Z(|As}b*Z*j$dEvreF=>^RtNXDN*q}? ztz$w%F!egVor?WASe#PfzLO73h9!sSKP;@~G#R3{Q)wTZODwvMx9r>oV-f(6wpH+| zaso$K@!K?-_AWog-$!531AJd!{EEIN?6d1f4Y-CS7FvDD^3>8v#FVU&`3c3Giudck z%3+Ocq?%SBmCJL&3g?~BtY&IOma4@DM7vdZ2U@>Pm}%tEo{(2}ekX&&A0U8m#|94d z4WC;DHi|P3{>e+CV2@2wpfoelEX2R*h4(S{32!DzhDHTws;2M?=<4@{{zA;3yxBc@ zWEJ;Vquzm=H+d9MEZ+w8O2pq-z>Tpo@Sl#Hu56jK-v*OrES|N%scZ6dKC)_vMgomI z$djlR$Lo(gnKICA#ppz8`B}SSzhqPk++PY*>_t_gi3!_1 zyh+-sE(Ywo`B@^BQA2ouw?FNcBYIfh{{VSH}lytBZaT&WxWE5rRTKxDJQ;}sxF~DE9&z~H*@p*{lF04qP|8L3}GKR zX*J70tR%eMj>aDm4SpecpdePD80^Bbizdz>$KwFYy*>z#mM!4O!|H3cPq44wv~KdT zC`$D1GEbxHv;@EVbLD)mP9{jr8AfAG|5@1R!%K6mMEBKbzwYy!@=^72Ox6!F)k+3t zSE{7t#KCyeDidWu5E$D{}MUQvAOo#g&(qT=?~c@;!096G!~ zapoA^Pju57JFQJMbL?37+Xy&%`8au_V}Di<#psVP`sf^;107UaOQ}{oh+`l{lJh|I z3OBs5)I~XN3sqeE^7?bjorzSq65R&RXW$&A5inIk#Ls#18?ZV(uc16X6g{))$Yb0DUGwRO-O_KU z)@$EG@oV?^{ym;G!?>D5#iB#QV`r^2c~F`f$g_xjF_DEV)iGM=u0lalta!AqbrT$^oI)5iQ& zP17u0rZ(H%bNdC%q)(j_F4)uhq%QB~n^X^OLgDzFd*!dc6<&YcYddd+3BfE` zU9gRJN#~V(GFmecD5=NxOwR2I$_v?*iW@`(?2yq*3Fj9Hd<1^`9(VawOZHsA?4h*Q z?5cb0!eoIe?*g84ia4NjbaENggq4$A24?}9t8rJvq`@sK#oZr$$>**fns-U)QT1cp zw=jfD_L@4qFp5up*&z{^l{os{qG`m$X)^_t+lYig(KwkfyTYwHw)zK%(*kimfh2KP zyw;*GI^zYsL)uW-p2&^X_hiTKH9XweH*7zmvY8`@7WGIlOmyzOJ>8=#Zs8r+%$x-$oF4M5T%7>@g$^@~J6LYHJ$8dAC z50&ir#GR;?EoGE6gdAt32}%C=z1;XW7s&eGo#O!=N2Bs8rsz6Dlh1j0rA~ShvfxG* z_3~Mr^5IOq_eRYLY?uT`pHsaOWwoil=!$QAD5z*1iQ#5^PpKBk4f`+lk`F5 z8H8*_^Q@Myh@vWl^J9^ARHSH=g4p!9ELT)0899m-t7Cfbo`~# zz4Y3kMT?Q}By}rvKCF>}BIPdG$vNM9=N2U)DNbUz1_!q|fRY={pXn`U_2n8mM+QjV+bClU5t65%EaD;!?uohFjInvXDr1$x3jj+ zAvBFAUl*Y^z7=&ct{a2h3NuB z$)oXp`jXc}w^vB>x=n@AJK}MDzDd7p44h{rh~{~MO}71X0dkj73F$7yD-MRkD-c0A zt=M?GA$(+OPNHBo=c~fTIk`#pWFX3fz;4@jLZN+ZI_g}CvD%OFxDDU~wEiNOz3ew< zp&Fl28Y=?Z&Q}va22mh?bpK;Lu<0s=ApTN|zZrewcr->uOC0WZF04?!z=lwALAwCL z^bX?ZxK@;b!bJ1jk1>$0(gNv8+E*-^z{t#fITN#xV3L;?|6$cl^+aW3p3B%;S^C}y zBtZv9SMmqMUJD9(l(pqW8(P&mfAr{|+=>OCyU9u_R3tFD7g9-^?6jpI-L^`uKDLTH ze!D{7ta1M>6K=|{4SUZ6qUJG{D~-@z=<0FLSpTI4WY7L9;0qwe&k8!3oewh6N&dCrRW2)$T zLfzj`@GOJjmY7hJTmAQR`_sai{eHY-9jEyVHnSP4;DLBTwSMxHPz$YfFl%H4l%pF)E*ptW}meAB6g9?usf=mIpH?a}| zB1{Fg_55CH1{Ia~UJznqIe~rC@DONc;bWNoW{B#@oDxeB98v{(VYlx{bHB&IXz(G6 zarO)07m&siHnXD!`m&MD? z{q)7ppk02|u;B0RW!fcmO1HSa>v+w^^W@A?2)P6GO7)}#A-jEW_v?H_Z)@=bFkcF;Fvy|I~EzuI$A4x3a*%< zgtA?{@v<~3=i1{q6NQhB z{9lt>(q)zLS6l_M+P;J6>&tlP5SvI!!uLn|KUj zlk~jbiDlF!4c3=Y7r88a`)loGg%|FG6;@Fb{^V}y*vl<%xzA7cY#k*DTtrucwMPL1 zGLj%VOF@h$W`)K(G9;z0H$5K`y#Wf85S5vkRq}6@;WNvx@rAmyjVv!#$4OghaX$jn z-v|P0?96j~+yul##+Ujye^*oY9Dn3_O3BF1%nx+vgP;M@WoJ##@AqV+M)0WbsN9mi zS)!Y-wL04%FbSHSHR5!Q2JBFZrE@I}L0A~0l8tcQSJB3!G%a2UyBZsT2D-4&dhZsC z(k8vQ_j00Tg-KF!@g--I&B4aM%oRn+DAj!l z;T|BKwyGIYuKJe2-o^Fg`-<1=qJnDmWQFG6KQVpdCs$M2Pc8C=!{x7T_YPh3p5F?E z=_0=bx~@jB-w8XE3+v6Pchhv$yq^3J zY9aT_ZtTYns~dPYGV_QuBwXv7|Co{sLSGwz)M(2%iivgzE~7VmB+%b3tsc#zejLM3 zA|Xr7UEI|<{|5jvMYL;;U@?V;ucU&b1={ zl9jGNkrP~^1?a$YK-sgY0A1aplgH7Xb@TQU3_EVwmxk2gQ4+NG%J{%&E&BBMz_p&2 zF<9dRaRg&SoTk&#JQsOp!YCBMYE1_$B8eIW56~p%XHFVK*{KR&o=RMh1_6*I8zE_@ zu|Q{%M9_?w{q#P*>_DegIQ>DuRnw79ZGYuSB5_NBN^KI9&>Pc;ndRa!-1wow^2dgCb_~L{*Xab8FlPIYA3Nl9Oe{_ zDS5L!9w}lf8J7yxkqt7jo5vjz>v1%j%r(||D>$FKO2r7?1SA>NR>t-^7KAMbzP#AD z`e34GWVyuf-@0=yXREB z@9*{QP>8LNQ~srq(zeUFS%DHW?wcu3PE%je0CDB7KUSJ0%#Wmh%0BcYoyEn$ z?lZ+9hfBkmDjl|>DMQWiQRErTwO7Vq=8@#hIDIV-+r{6P(FK_MzPGbsy!-57RJ@T( zgExXQ6pO{eHk(xv<4suXUN2YLxxza9r2@`05TwF0~vXi zbjI+kJ)1O#ytH$VVI!9uNdG61X`tDJh;aQQGu0j!^C0PY9)GZXg88lK1{|46==Ae^ zEWp>NTMR@+i8J#?-7~3Aw})WlLp8;m^4;8>(S!@ z`RfxX$KQ_{`rL@_eJN0-+Zs3TRdr8ZaBE-*4goV<(_HKFja0RY3GIXxq*4+UasbQ) zKC<>H36l5Il+*so)#5wO7qfkRHh0Imf?H6|EM@yaEv>nDa^WPPb3$jgD66Pr$J|Rj z+cNhapIW6lZIG}6a~=8MIpr>FC{}X}sqR1(wG{^sk>fE5>F9C&R|gyfG9YO}tLlA7 z$Ddl1)J)}s#-dG%XPNVa%L^pptP{^%GPB7-K+it~`Z0y;k6Q`;MnyB~oTE@7%I}Z2<|d}62DA#4w!T42 zFW@Z+wL&kqX>mSQD8|kql74%e3PlOtGM4ym!7e!U8ZCb*mw%)kOk2>FF&x7t(cw=L z+VQw^^sAwWr2~k2+k!#7ibCbEU7BwK_GlH{B{9-lZpy!w1)lFyZDFjuB+-n_YwI?}!cF=t) zToOyS9im?!GGgQHpTf$M{WwOVc4j|>qc=XyP^nX-y4fd);6ccOCz^Bvq29f3okMa+ z5(gYcop>oO+SU!2`qhsIV6BZjEMIz_VZULy?l(m^IF=}6PUtJ3E*PmX zHTqIA+|Iq%M^4+(k)7oaOjC8hgj3GWA`JyB5b7vFy}?xytc@{AV;O&0-6vL{{Dk^U z3cNPtfK|j}m5cYPc7`#9<;v~@np%92fmEDkj#4yxjeRV#Ad_AiK=UyWZB;_%49>K9 zMLE`zCPb0LU0%-h#;M>{-18;JgMA`EjosN0&6=0>M-BZ*Lw*N<7{!6wS^GD)MvmOb&ug0zF(V|@{_F}y)(Vk+w86l5TKcT@!t6DAkv;JGH z+Kv|A5#~}L-)pgiQ%7YJ%fJZe({f~vynw5w((JgQl8t>~rcQyS6kbxw8D&6qHGPFm zc{BOru_&=g{1(>_Fc*Eneg9_&bM-ExXW%4L$%6C*S#3=~l%M~UY{nRvDL8M_o(ff&ap7namif)~AIOXT_ zXY{tBnW5|YvZ$wwFLw+Q4ue7OW00jG*f=D!uMlvGKWX@%$O7~11?6#ww;UG8j{CG+ z0Q|1{t~!`$a%!&lEI>+FDxH%B#`0RI@X8n^L$S5otNKN;m5f ziRMH7VNAka)Z>mOBx&T)PqjRMdi6T@)28gZ_89z+O#gBOIy*%qSbc<3MQLwSv2}AJ zKQsI!-}~GzN-p~c+ALWo6v?9&z3F=wL{8D;^zL(RbYZFP;U6vUZ5+;4QG>=iF}7&a zVCF}mKe1C{Q&zr~|A1ak_xH)7*K$V=UURQl9`bVu^lF;MYvWBi=0Y8@!`R(3QZ}Px z=&rE!)n-O{onxlB;|$4Wq=2~utlgq&{?w8NvMKz6iZ^*z2%z*^Zi|2IAF1cMu!lo= zV0Y88c&FKWB*o`FQmGd}`=}k)cL_@yT_BRQ=jlB$)1fZ%RHGB!VthL7^*~PKQYF_* zS3&3{x+vQgR}0-HK6HttQ(Pa9zA824<1t-~geMDd<;CkI zdXAHK&uD&Ri7GakB`5c~P(&O)twM0&Ub8tA0X!0ce>E{)ZK52Ve9S zjQ!!iaq9R>A3=AlYcQdv>V_Hu3-;+Q>uX+oN!Q-;DIldRP#b()qWoxECa7z)r8#GD zHI{rmh_m?HHGfLz9FJdrj3ji5j%$*RT2b|PCY{ixRmzT%a;OPq0vorEu#SD{GHc0f zv5^iyu(>UURVZ&#Y$&M>QSr&mS=H?67g|t~noe+anxr!@sWH(-p2a-g%}w6%ov~Vl zLV|HLcST^a=ttJH3MqbH7(pf(Iyz}8_`tE?n-Uy{;wyEJMF#bw5vr#50d6$S+tYs6 z980>Mw;9T$cK0Y>p%;I&)Wza8a}rlM zSy{h@{S|SP{gYI8^G+|pvpaOBse6A*R15yEB`QRao^sF)e7n)M!%&w*tC*U))GZTonPX0Z7hU`+c3?g0nPJPK`+voIM7V z@?=Yw!uFA3>>%!u=qyKn;AvMD^W*fan<%Dy!RRk^Xj%xQKRO6$FP$^U{$;NUwt%*16{aNcZ4bR1vh)_tuXo_o5N zmcV>T;MXzck9p}USFhE+Cj|HpIln?pdljzKd8S}$b65~X(zk%{79lDwzgh4RU%M$t zbsxS?svZ6SZD$@4tk;$=`S~A~#?2#J-sEQ0_qP{_=n(T1CUVHWtA~5y3&AxLv?$%` ztUBgK;5a2<1xSUJy(=UA$HRj-0MqABIp^DsOcG*-@Nt9PT{09}7+HWfy(_1v1uKT) z5@EgF#%DhOD#fwKSaE(bbCn8;BwAh#pAQe?DCWX9wZZh-rD|l#L-?^xDNPGUo7o&M zyS~?td%v&RLv7TLt|}YS+fOA#(Qm~B%0}m%=iiCTX)RwXy4ym$zv>r4cL?uxno4kp z+&}itm2>{f;+$P7fl>+dHCqEEV-LwYgw^zh8<+V@4z^m@s!mu(jm^Jv+^N^TAQDo2 ze=U;N--dP;D8sQRsYzz-A zC}KueUKqLJs+m363Rh%}IlK`bZ)cR`+a7V<`kjjJP<*PVb;3s;^|Jkh)|3!&{s$hrWz@F;L~e*uS%E{+yPhPVM(7niU*9W|R9g2T?tbn&KYA4|NY}b)KNhCc z{E6V$<>2OKLTgHZU9!z05gn>=6VCBX`5O1qmS%n%hSpThA?B+di`-w!8J{U@lh1LU z%~WP9N+BCHyr&i-pv}Ev(<|CKDoz@k-)!Q= z3?^PtRV0wheSL3IkH3$7xnp+ncd8g4@d@q7Mf^>CmXAf$z31+Om6rm2?_2TG6g^r7 z;;sx$B{nPQX8xY934NAed=F|kOuJD85&oT=tDIn(xk-Be4=NeS2*^Q;#uQ(ab-vI2 zflue~E4e_dR4DbL(sKVlEQVA2QFW0uWg=Xr-UMM$lF>(7pBu7Z z!hQFzwacZ|>fg5KAc10WQ-0rcwrxVZ|F9U1>uXn8m(NAg!}tlW*|_-nML+bD;X5T3 z;xIQ(YEY8Kee%?W-utC_-anB{A4=2&stYz&sEhTd?C;(waS}`hpX^Rk}!V2~y-yBe4#{U%m&*DzqbeL`7_jReGAZ{N8MJQ#w z#*HPUsO#SrbEIO@qO`(y(F{7qw}g0%H4ZJQtoLIhE}Fp*r3s zG*8`p$(Wz)DAL6f!)B;(WTA&C$o=@sSw2H;Vt{Nh-!{?e#l{FJL+w5%;j$V$;z&N| znx@Yq_tm%FiNUghS+m-c&`Xkn+4XgS!I8)`cH9N3TF;!puN$GWMwgW?^^Cse;c&IC z(Fr*8S?EXPlY9oM=yTngbJ~2blI`v(nka*bU|JC9!;6w!@*D1KvxXbnPhkJmU5nhb zZ(WmI^CZ?OWu28|ShP;#bsnf~<5$cX)n?T;e{IKTv}VulFkV>O2mKwkd>NYDE-w4wC6BIICUhJZOSNH{ z>`>R|TwGr(&K{wYAA%A-q+q#%Zm?Prp>j;5aS<{u>7_PV?x-I4PWZP$M z)m7zGy(`#jpx-F7;zE^3R07B11ash%&m=I8Vg`@{XCQW1j7*&9Kc);YhXzDLauNb3 z*q`P=dy2a$1g}5?{Oo#sTlLjNgU3$!M}7BrdKzQBqybZKAzFE$<;*U1NW&K>Nr0d3 zcBik(*GrIf9mRiGUz^;qM8xA$M$du=+Tle*20eqQAaZqPj*PWvLo63#-ApZck37t>NAI z-D5D83@=9r@M)AMb!4qY)qsO4%{&NLgBx&3uH0`Z=XEY*93>|PL9{b^;seC1&Z0gR z)Mf@GQH9y{JCm>9zHkr zhUG`e7)>NHeoRzDqL++q@0%q}i0*p+BmdBup;CzzvCShW^oDukR0&P^*83~HV$;%f z=050E6tiOJWKujKL9)FXa=-4jz^&V?w~*=igwkDDaB}d%8A@O2Jg#Ta46L>?gYOOPKLJaPz|~R45jtVU>~Uqe!A%EYn>=txe!r=-jCRk zAoDW7!3ppN&L48BR#uz4Y^55zeMCG)pHf#z-iiGNpxv-4&z=W~JBQl4l&nILTf9^k@s5_B;W@wO|>3#o9u&e)DzOUlNis;Iw z50O2PxsJaFv7l^>J^WR-lX@#PPqa~gDTXAl1iu6~=I{K*?9VLMD;>2RMW4c~CI>n4 zx6Fw<5=pOlY44%8m2&l}AV}e{5yhjodTv~KoGg5p%JASLjY+d_2i-E0Ht|D{N4E(q z^1$z8cS$}|v?+VtUB6_*3Zk0Ho$s;p&WV7Oui<_lyF}$u&mp8b60++InYT&olu;3* z@btby1o=}J%~-gVY>7T1uOS#svUcNqUgKQ5N9)Q}EIPW>5S8vdME4&S*SEI!2A_0^ zvmxQ4Q~J!}8(Go0z^N8E46t@O(;fRNMjlIRVd{89Mg4Whvkm0$?zq0YEa2wU?6^73 zQj{#a6UDxX@i=zBG{ar+A9Nh}IXiP$;(F!ns>RaFDv+g=aOzMol-QFFN+m(JIpkL4 zt(6TacK%z|Yic_@Nz?q#Iruv|FwNekoWEEcMX&-jmvVUKZ1{GqkJnL(I&Leu^C{2p zA0O&bV_PE|B_c(}C6d>RXe_XJ{XH#BK;k8g*#U*q{x5 zePBAv5pX*(W)VBen$#JS?)}%5eQc;GUKVeUllAf+&EsiYqJ8y2k)+^S^xpSsbov+E z(0p;Ug`-ZsaB|2-tB-1#a?dX*BjewhR9F9Dt;k2{&1noYkotxwpJ875Q93fwFMjqG z^mRoO)zlT*BQ9ib+U-94K`FsnX|NysE4V*5yavpT>53rs4-FS7N=*-ozsoAUAmaP- za+#ZcjQOH4uDsTU6aNjSrA(xG5??Azecxm#;gLt0l`-QyII?24V4oo1SBwk&W)2e` zivww?#2sWk=!xYsH5aj--iWcvW2|1Mm6j*iADUvFvwK}LxNlspGj9Oy+|>uaC439v z+-wBahRS^FjZ^zHq%u7s|7_8YBeTzr(zwzWu>Ds^{8U~9zl-~R;=lC)a%j&KMFkk> zt;04L#=k?7`IdGIXl!SH$_*WZspR5Z{B9AJgX(}N)PK_4GSH_9Gq$kOqjI{a0Y8|* zCb@H2%yn>`$N|-CY2v4?%Bt2&YyVcd83ewBYz_f;C1}P)=TP6h|}Z>zO<76U;hN_}3}E_24=CVA>PlZ9z1h<@Pt4-2f88jBcF7l_`NN2>-q!?Z@ii7ci`pW_W^df!pO zMn0R{{v5Z6TJv#F6J~bVJb4s@N%yPM$ddx(s*)xt`HGmx94x`L>(AwOw&hkFko+dX z1Ik=RIJWN#Uck*Bk?}e@H!<2z*lefk`)A~ni#b^6hQ>t-VgLHNX(f>NXJA6MUt+H3 z9=0`+MXqNnxIwbltCWK~ae@U&i1=Oj^eA5SIFrs8QB-ZW?vv5LiCYYcWp!lr z&yImOFRcIbkbBA7Q!)I`URHF=2d!hVM04)b5AQ3|oY9_L8=Hx8UtaE;E0_fUu~!*_ z|4w{pBAy6=q?_)u3Uj`}S^hyww6^yb8qbb%LiT9<3AyKy``@tiuCOAk7P1IOv_;}3 z%O@uvK{}SiM?>TFAA*Ox(OA~E1#++aV#)|%!zzm^OMlHbxnO~C9ODyOZS;xM=BrMvodI}0oQOtKR zntt(vfxc?HE(%LO&`Q`w3})SuiG~K+;#kl*_W{fh;HDANm5nt|{pD`*Q)CY{)_^ie zzTB96$|%TV7)JQy z^`rL+W}?praErv>u?t&#;)h@9Z{WVHQfey{x)I{Z{^f0<+5+w}-GIG|IhQ;W^QN$J z`PV^vf%@_uQ_#eb(^F}LxbkD})5r?%_rs)vM`0*zn`AQycYVSM1>zLbmU!1nUw{r} z$_ATJ&-9}nu=DJpqZEAQ2Cnxa9>tx#cijhne@7?JX@c4^+3Ho2ZCmBWW7v_Ow?i7t zV*%?LLmSfiE%xGx()i&9`0u#4cylPfRujJ(p7%8*Z+8x${>e2%gZx4MbzFvdUG~-B zm>v1#{Qx!9CXxK-x`GO6lFMBiXKo9;XhI_TzBF1a;d>um>U4WSvdx`@e1sE8Gl4%< zo54}Kuz^27sXF8dn36|!xET9vh)aY;jDguU9{1bR9L@k8sXX#kISOu?JTt82p=7V0 zHj8O>d-^4$O?K%~#AxgZb-g3=7ANX#U}*h33F^wq*v#pVa)|bSSgC0B6El~!zf(19 zrh*zj{3ucxhD1~QfWKdU51cI^vFH#^G)yYE`5^}J&+W1>zOhR!hDYSAv+fbW3!$AaM@?Yxy z5i`MYBX!N;4oeVjBzSZ-1ORc8MXyPBbSkYJH<$Mta*urnJWll7$I}R*m*?rub1m`> zV3;t${|m)622*ybkP;(xfkm-)V*g>ij*jCHpsCb)*G)hb_=JGGgy7ER#beFxo+${v z1`m+bl-$r$`DJH)g+0RJsW!{ZOR;qOmRlKll86SD4w)_He5-owHD@vEmoR z1Be?ygBtl$>7+=hCmfA_6=%8_?Lga}nVh0A=8ydqfJI80@WFDRP2g(Y)Lcx`VaY7G zNyly#fC#M#qW>NBSGAMC)-lfrX6(K1_gR$`XWuJ2p^I5(AvrgHX!m@Yl0;=4t3or9d^-seS+e9t2V;Zccqh#%i-bq|Cxy^Pav(&kTkLkLHz1Hgp zoBBxFjLprEwZk3BI_6u$Fi$x?E34IUmmfXh=+{a&A$pG{Vmoi+C%3=nP6&5sbG*nt z>wNz)0;Tpf`(1}7ljGz15452z3+rxisW7Z#rKmxQ%|BW~{p@OMBbafGPc5(TH+(H` zRDX^fk=y?*+2H=UoB5T3XpJegS+D@7G3BG=0!EfHDpn@kfwuZKKS z3JQ+4L{=orokb$tqdd@)EuWA|(OB(W{}0qaE5Gvq1hL%q{L9B;fT{JD+7MT zFTtkv^#z1lO!3b$s7x^+IK{i%CO4E_O!|l-h{r8vJ2*0FC3yb;RNDNy&A3@X7!Ml- zJiy(23Wr`t%qsyhVf$h^a$$>kW>ZT_x4(S=wKFHWTuyQUki zAGEXWpu2-rnN55KlYASt2SRXdOzq39S>9udPk)F7<(P`(6o#gBv05h{0Z2PkVzj{w zq*c@AVdHCK=@?ni=*0kTJV7b){fpbqH6J1a7sS@zcw%Q%%+G1LQyBJvp~72{5LdyN z4q~$RxHpIT`pZj1OnnnEf~w;%Z(o$zbuL{->F$z=W0%=0vWstMj3Vx(M>IY?M*(Hz zYURBUaC(gK*^YiDXoB4>Jok^mW+lvzQ(wh9&wmglI4;F_?3|0%Ko9%z92A!gyt$3c z3Yc$^{YPrp6Q%%e>PxwTo`}dh_`k9T5#N&?&m>7mCqcOLFjjU;IUayl(SK7LNtZrP zBsO%|)8;()y@&2*KT}=*0COwMSsmd~g<3sNl|_pto0J96G_}NT0HXN6)V<2!o-#VW ziFC3BM}l_oDi7w zC~)jCim+X%$Hb!+6nZ~0l}Kv1KC!Hv`3dwUC42Y}g;m1t)#mQ;1$Y5P>gGO+OQC*E zL9JZMRs3@Yf*Ws#xai$5JTXmGb;|z$a}}WBjjR}0gNCH^3<_f`{0zGD5h$Cn{ zvHOVO@JUNnJ5Kr>$^x7tngdI548qAy9Zgkl4p@1Ej>OWANNk07p#>lABdo28z2kM7 zHABk3r!WIB{~E zs3s^;A6aQ&@5p&v8YQp%6?+<-S z3rAS`F$)zfraOTwmXK|8y5Gd)x1dd}_Vu_(tVCTi_>AznTCe6*!gXlh&-E$dR#k=a z0sY^^zc@MXos(`~m^I7ERk!}}3bHz&M{fG>`kjstX?*1=Dp|r4wS9%m5psyDX)>e4 zBQ9}O@VfOX6L|`I`{FW7f|MPxFY=2S_IC?`veCZ@xV-{u>*4)N^(bncp<5?N4 zG9MGqe)lqAB4hgFoV2ZdEz78C#SaennS>TV{{SC|xk}Y3Yrlv>U13~5)dJKg<$x&YMx#X5HMebKJjN`L0?|miJ;V~5q-PN&6mkgnGgeqircT2M~pRvANAX_x~v4SY(f-&mEeth$Xg z#UC)D7+%-GBbte~1%$P7tn9MBE<))n6+gNOGX;r#lCHYmPuvap(U0y?Sm5D^0JsNZ zydufqZxON`)s)cX!x|!oqz_xfBTC&D#~9;L=-}~e{Ktey&{+7)!j5nSU#4N2E^B)Z z_g9Y5j|QB5;ReBWjt`{V7LLy!IPJuyM=yInUE^{Aq%4hIeC|<_$$)(LfGLxR_~PKd zN$ejd-e5vDu>m~N@)g^n!*|7R2|&Ji!=?&8nbBJy3InU z)_I8*Hw`|qiWWQm`PXKOb-;wDanSiLp4J99TW+1CT^8VwFP?)S1 zygz1aTcY3iAc4F#lwYqT*S^WFRqvRL0FiN8v$>K2OE!4m?}3A-&~%FPP4o&jJ4ce^3i8 zfgbsdde~UgZ+YFvkm%<+j2V|^k@p-q0&0AI;(v15r^&}Y;tf@G^K}0J*@<8>80LoY z8oSWCU-*||=CQ{DVYtHcw@A{0Kn&- zAnfYG^9PWvqaQ8P8=8=|#%w~k=Y|HKA+g)$Tg^`S?U;ihvC^2nd5Ykf!Atmxmol5l z-_&Oa6ouEP6vhp?Ih4=@o!mrG%)e$VYFycN?A zEEsNOJ0KYZnstrw9c&?^{ht!PCbAo5pfoJ2!1Z#eS0$zM0SbbL!7?-|nSSb620FB3 zU8N!X0Do_Y2QyL`ch+XZ%wfL8?o{W5DQf11a=?9I=C5b%7dgX*Uva_3?*+a)L5B#{ z*Ebl*@46P%dm5;tI4>48$Ei|e3hXC;bBAcNZ+u5c?W~2J+_3TtiY|_JbI0{4=@8$Z;37*?m&HYcz}imL?m?l3LBw!e1-P?8IAjN(|+8DKr2 zVh%b=vW(qAApTs(2rB4r6852$tKmG#g~rQ1($%DcJ8vKMGQeBf<=zW|rp;yut69MO zW+4I!y~`Je#3IpYg0Xau(o2{7S>Qls%6=$#36rFgLDqEK_NLUvK@I z?@$~HFFmCVbhaKpr*NtkT#o+$rygavAT<_0xNy7FGJHW)?M>+S+6anI=)|~#BDnoP z0lluZkDn3TS{6pi(cFea@)J(~0PMor#mV@g=3p-3kE!>G9g~veYURv@hPgke`CSRX z;cXT&jKV@Pa;$EdunfBgoe&#E zMTU9rJ0Xjsn*RV3MvGTtI^euwH2SERIp4VG#8?p3Sns@}nq11_{X%Ad(O&9ONPLN$ zrsmS8BDL7LoCujOiu=o9unSu3`2PUd4vhI^{{Vlr8#L4idoFpr2S?0wgTYpO$6FKN z513;)(}1?mbb9Rh++Y`++kF!{n%?mBFX&lw=6KP&ID&#!F&;RI1`}F4kyXHh8DbD~64{{Q_=M3OQ-l)^ zUix|ZLM;@Wr5Fwlk`6{VYJkG{=I<{AN|TP){Eu2Sqo2>_J5W^X=v=c#w8!&O^4XTF zUUB%H_XQRBgXY74JVr#Z$ws^rh6gSQ;&Tr4UnZEq-N%b%vQtIl-~0ZFN8#PWLS|uFH=>Wpakh1>~mUa>@Y` zUOc9-cvoqTww7>f{>Az_cIPtAoNZep5OTuk=64*Bzs~UIwU=+B0o`u7U1i=>n`lLs z{=oKqx#ypll%1B1_;AhC`de>4bqo}2fphkla0(2di;{->1GK$yG%Mj5$PP@tp~j#v zKC;0YyB`TelVF4H;wJ(29%bSS1!wDUJd3L+1Bpl+P(r-Np$(~ny+Wb($oq(gE0mWc^?mJE^p#4?Mw`Q)t$s^Tay`-xKK&3cS$% zWsaiAOe_4$xb&7MXxh^(*tKDD+$U>FFPxbMe-m^%vc|h5I5-ITCwKkKtqDbohJ7%b zhgg@62p;ZLm;>$mnJ9Ns`%?A1T)#Imt@nr`)!5KGS9yJKV-34PyrJxfiOa%IqW*l$ zHVRtHSTF|T%+7#AF$)Wq^&`&etq+)qFb%4{VhYVlr{E)1JK!T?%OkfSkNQf%&;h2MUCJnyFCDVi30+qv{)05vtwxoTZ_E za@-l4MSMbys`G#rLY75uiGY(7zzCj=;Z~qXLTfB}E7@Lq&5{f$Q|wz8-Y(LG;LZ>M zm%#=UIkskCyHd-zsuMi@kxM27(0C`1eYu|WBQWwP&&USKN&U|S(~PE%(%zR%FU%!9nvVO-bbob&4RR5e8H>Hdn($nQ za_B}gZ>ldP&kE0IjZXq0BCQO#o;3Ihn{0M9gr%SjL{1UyO=i&4oI7nPYiF1Eaqhd6JpZXY={8I)>Os|Z^3~o zJbY$Jn`0OHW!DDi+`^;A&v+2I3#MV_8rhg4<|Q>P0>X{?l`B36Zv>_0Re@#dBuYN< zP=N|4rlAsVZutC6YHFyjmFL`~9UMPr5N|N}@iAwR2{JEsR=NXUKq_2izJjHRSOXkji%T>OEgVub zC7*N8)B+<7r+OweaiHJC3umN!%K)Z8Vdl_lKN6%vCdMHWbV%Hths4%?VG(vKaOARs zSt$8E!8C@_xwaXq4EKyX1&3#8{)~|S0C5v7=Y7~^7EwjqP*PHkCGVh500CS zkYQ3QN5x8`K0|(>xd8CSTMgRX_hSy=^dshdRCDGCEy`IdnK@-%32OyJ)3fs$8Rl(6 zL|(aEEf{bdN~_&8`IL9nWoUiGLomzbGg;KQZXWXxUr+}10UoapAKbwp4bctSrtt~I zMIcL*OvU*4nFL28dBZCp@Eal_MOOx8aRsKG<}J*zMnYWg?=Og=$HvbSCo+?>@dSvs zl**v6J0(~*22ZqBu8#0cZIKmZcMApD7#a1robLu9>}5j4COuk-TD7vP0S4%3Ta1{} zUaF@r+7&B`BgEj~m||F)d&lhEg4KDLmdu+Hy<>u@kDEZRTBFlG;RcSfqGq*rweU!S3Kg^i1r4VY>FQUNYo~$e_=8m;w3I@vzP-)TxF@LLDohSaa(>6 z$Gg(rV~!4MA`P(6)}xy_O(j~w(Nk?DTXP2M69E`eT-$h+=HRzi>Kwo=4aDg^|Xu{e>w^)GumzjD1EP8oNc8?3-?BVJ&2ITeEnOy6P_uQ6QrEB&Yuf+BG!?VhX5pe_T# zSvT3lKNA}%+@=*Fje)ccX2NT?tQ)G1N;ASVKd7#pOE;L< za^dj3Mb8IanUqHSqWN+atbJvd*=Ka7L|{HDU!cO%(=FlId{f7HZXMIgt^Cf*h`$Hs zG7JhUa%1SqE&#f>{h4y4W>asOV@sTbD93yRxikhC9{#1W)1*#3J3zY0RJR*Hmfn-wP6oop^EY_q`zaZy(R)GsW(B^m(Eer0&DW7MhgU^n%K z$Hn1TpvOxd~-+_toY%0tb(2|}}=7gF)tc^HCD z^)i|m7#ffY++jdmFk>?j5)S4%FfT`#ecV?2%POJoRQQ%Kt!73y3<<0VYw%%Su_}?A zeG_x)Qh{trH?%BNGSX7A(7mP#eIs8Vh`YhU=4T?!ah$+=p;zWscGNoTfH$Ur)j(?u zATM@(AX^QeBwEA1*~uy>ZL3tv2o%F(48H9{nSCoF^*pG*h(krgei#B((OS=lwt)C% zEn`_6v8GUbGiv-MUyjVwzfg1^No>OAmCtEz3A!sd`2L`)sl;PnY6c<~!{M60=>5xsZztZLysH7S zIAxn>g^=!=#0y+tk;7gl8HdPPXjAHU1wuIsSZt1lHJb4OhPXg%XJi|;K77i+_8rM& zJfMCfaPQBlNQGWI&O{6HMF!MAX-z!t(drQ7dqZ4{3&f^MPbMa*o0};K5nI^t5?R~+ zL}-=g{a*b_Xp@ z9POO6_!h6lW{s8+yg zDIu?iGa@ah2C7hu9h#N8UOU4%fCn~-Shy<;VLPfv<#Ml8)xYSm_@|S2@A<~e zhBWd;*^8#$aR&HcUoGYxvx#ZA=7rkb>ZPMup^(d=qhNC8r4wO-{{ZX~LAA+HUR8$L zO1D^kAgW+EzJ0?{z@2AY!_)xXTww3I!lGP`(9!tZB&c1E8-NsvLWAS&I~L~k++qO8b_xll%b{E`sO@V5!(F90_8@jsjGQL*^yi1@GkU8RO z;icop<}_T&`x5$>=Qc!4VYnDIg{ZC{^TaDLP%4v&QA^ckMB8>^D>i8Da-b2=9oPKg zUSKRyc!oIc)ZMzCDZpYtCC@=h|`=8#KQ6RD1-_c#ByMZZD7(> zJFH;K?o}`3yX-tmd1CO4)SD^on}7tom$n|b(7i!0sdFe8P99!j`c7g&S8d>gu}T{E zIks%_i8K^cvFB@CLr&8A5Q3DU@etMo7{(pUUK|g`Wz}US60FMg&l4sF#1`D1bsWGV zQD3-Gp~q^N>V^zUx>;8T(pY)aI3Nxv9NQ6{TLH(oI)^mj#A~3&p0X5f@o=3kbHe`s zP*8=0>=KmCR%+tIlmUEaFR666XpY_(fSGXQ?{0}wwzzhV8m+4o&QW?R5OCw{C0s0A z=B1NWiZcNqsm)?5Sg9bATSa5UQL*oVo_~L=UzzIY--go$oJ1rx{Tkj~B zJekGH5LrOiX=*OBYc<>EELAPh+q4e^a=2j7(womU6oJ6Jd6^$tosyb#qq*8xKptD; zal?k(*OYeR7WjBdF-&H`=C>8lyaULIU#Sh8}qI`0+n9SCu5 zq5#n?gJV&cbh{j}SN{NGZ8v?(;d!@Ie{zQam1k^34oa5;`-qV>KJMjw*AoU<Tl&VsAuOiyN`fY%;*YTsw`@!ef5}$3K1^J57Rxg!yjL(X#vJyK=Of|X zV`LBwP%c~40lW>JtQyA~hIER3+(5zGtM3ntR%#)vRq~Yf&itIfO0Z?~3@(M(mkjBf z8SX-)(GQt_QAHh@ZuGLI0BG_+7Dev3Z|fVoZ5Cc*w5Ygc5;vSZuD|51SOSM31O|yQ zh@&lfH4$Ix8Jg>Z$`3%c8t0giOjH`XNZPj1zcH{~>w)tt4_+Vlsl=RHKjITgB{gx+ zq8W)cTcf5LRpl-Dl!m)5i_8T!P3L4K)w%3F=IRa_?U*$*IF1v`ROWfG9QpgiZ5k;w z%rtfnGdqN>Ena50uwLBMu(-kJKO9Q5(!ANg{6yaH?M~BVoV$4XGU=qEjQ6{FiN=5y zP%u3k_XV>6aBDZuANCE=sQaOAJONub5pfqh zzPpW|1#NsyV5vJ!XxtJMv6nxcOCF(umFL+A&^Jl+h~{K=4Q?4K8+*qrfU{5a00o7e z@wh83H);s`I@82cUrhv;kPMZTvN$1Xs`0&19lIB1SO+doii$wQ#?-c&ZDJ}+&v&=` zymiVb`OLT4GP}X(Xw3^WnwaRBmwdRlys=d+SKc}>EwMJ7vB%~kn--iS&51!MLB}R# zn5}+B6)+6HX;>LU-Y0XYjYipAbqvWeMB|F;6*Yq^ z3kE##ErV4dxwQqGVh{n<%a!QYX^lH=#v(b^fiecpbEsQT4pO1pzD=?BDB_?PQ*VyU zM>{W}f&g3`3azc;wj=ru3s80#vlW;Os=(| zaXM9@SRtr%Q@Y&oJYoigT6y9*{GxAJMs`-9@KVJ-Mk0VfyUa2Q8doj&+ytPg$;MxR zlw9kMR+qg>b4o2rG~RdS6xjJ!wmy(0v?oTh-z>fj;{Z4cCTyvLgM8`!qBRy*l~?a_ z$Re|gKPCv!oS*= zX(+UB%*8=GO;`Ki|Z6PnkQTF(X*VSyNgXi%P z-~mr)EcrOzp$O0`;#Tq-XX0i@W4P8)$x~9qQ7^XROgEZy4xAO>xwFK#sgSBTjh66Q zE4%_|%EEgOqFsXx8I^k9o}ezWz+&!KU^QIFF_hTNh;AK`um}mRDr5s(FAxli>f_}v zYue#rjWxQCy@xn?jycM|Y)z2`e#F=K$#-%E%OYiWo`nq?8D@^mpZ_gi@e}zMa;H{bC`;>zmp-I70ZUK1A$mKEFYJcn^k%eGx?Duu^Gm<3aU5*}c`HvRl-c{4xStdKG z#kJ)5uhcvt-@RAfTsL8C`;~uA(avG2>9b$^6o`4s#4XBEG_bcSqea7lI7omdobEej zSTAwvyxQ(xYie^u(iwH+c>VjC!#mbem`Iz8y1yBfNSg;5yOm~UWmI-eh5?Khb=p|u zn899mpH(dtj~jgPe|*Qb@my%U{pCP16`YH-xTOWDgx0+HNQMDKY%kB!VbW{N2Fds# z9ku(MU4%RF{{Ui;h6iU-jHE4jfy1Ne-ej&7d*&&Y3(eOTEh?O4JC9;-FFToYW8B=L zMTyM=56dj9AAZye$#rLG=b6N*OB4|M%cd4PmlU}+TihKj18mTfNh&y^#skli5)p_W zaF*pSPDnnE%7?JK8>SRKhITZ<9v4|J)-e;Gpvq+P`hx1?yqw32xLa?hn8!T=5iD2s z5Gm$vUe5&0G}&t@E0f3>*@vxpfFl65u-)^Aa8`upIGTKzi1tkvPjM?3czA0cW%|Rq zVUX3`@pXpeOqqH&2*N4GJy>Jd&GX_Vv*K&Z|$HO1CS+&L<4k*h~+#@>av+(vTd zaV^HfxBg2bV-I|0d10b4R3ayPi)qgR+-kc>`_w=zNUED9Kq6A9?Gt%$m8ntl4RaW7 zRpUE{dhB#fy3nyX4K|phsFj=^?yX9VCMWi@-Gm4Si#8}e2 ziEK@S-H!(gz8Opgy$rt2zYInRKU4ev0N7}A3xEv$^YJ#2r0|d0T!qA4u*sz?!{@XZ zjdZIK`#(`S*o*GJQ;;2NP{Hzc<~4XZ#bw9Z1S~ET)4+S#2SZOQ%k=z2R;()Y_rHk5 zZosOiLCFuIDxJ#5$KNpK%DCIDR3JiAlDL~G9k>}iWnz3>5+HySav(NY9Q)Q~q zK^v_ueio2T@_{-DPh@3t11*N{=3AC{f7BU>S<`3zg6ys}%tdQ~mTOLPyvkGr!EhG= zN?PqB2I9pomd1-hE29GbW{wsV=eIN4C&Ay`-&4wpy-Ozs9f<5*^?$uZvKv@yc*_9J z*f<*amyrc5^Xg&aQQlpd@h)+oCpZ1{iY0{uX5pj(`ZGVVlePs4=nXhwm&V_DJXGX> zu~fVsIGlLt3*>*XiG}9`+Vfl(`^>e<8pYUanue-(i&Go*7Sjy)N3#g9@rum8v(LwW za+!)L`QPX14kK0jotO3SMhz)il`8PmvbOF|_NBr#z-k)xX!GI?uI{K3`PYm@;X;nV zn2(vvP%?puNHnubzyt+Xd{^cndNw(;p9d1cQ2O1>KSdqW{{Um9Mg5Z2+7r5F)wROB z!Pk74G&1wSjUs0lQjN8UAPlB6=B4p%wCy~?2Vps>D12f83Mc?vihDw$i;$nw9WKfF zZ=n*c40yx}VN218Ze*69GVw&9>&&c6S@SY3rf(PiscB9IlJ+Hw&1bw_W~ve7QLyLc zD8y}R?=Gzh`Ogt^Zi}{^O4-ZyLd?VBpWGgo_|DJn3{%~yd5&Jt`E}#W1D2XMPr@fV zBr94At?WHtFmBGZPz-g99(Kos%eWn_zS5h8l}X9|{{T^Q zeU~Bs0FdK}_S^KF14Zw5KN20AoJj8RU+=udk&TbMdgt{BiLJ8hDRe3}{aTfanRYko zW#c$gch9(CORz28{{S#vA84#x2Q5$rEob%!ylGFL^+%;{%6EFSOtxdhsx1ws{QY4v zQ4AWCC@de;&&DXluo1BuBe9Wdi**PZDQfjZcBxSI62c|gVF2mLvutDasg%Rm1w*#e zoQpS>wb9=k%oXmkG?~iLXuxdvNtixhZS(K_%sCZ@9lR2ZZoU1`nYveWy0lWe+z{|Q z3-jxUN|P8bg*LmWubUM`Q-$&wsRLAsIN&nBuip4yLH7_JXuyH}d?a72HdL!kx(e<%Wd@ zxQr7f=iVU+NlV9>lS@DKEMamhd`s`x{{VWH?{z%!D!1DBV*dcRwNg=adzT(mfJX_F z+t?D{gw<(+a$#nC0=$gBE*k9CNUT%_{7PHS)xqXey1EY>%&G{7a_TW#1h=m6XNZa( z58O`b%p3I#s;aCr4;bI1{{YyNK+jOvn`uLJ#*gWgWT&UD~OIj2oH%ycQCV4?CG=2GAaz+^FdGp_R1 zEs4B3!rh(X)^ZK$?yF|rsk4oeFyH%NN=2q@wm5s2c z%iM1=vpQGvE#4r*xWAkHOchlDPi??iC~<2uDc!}^{l}c>lTY}?xLVzD&1Nxc0@>Lz z*ZY_NDQLTE-{LZmXhr+TM4+U*)BXPdW>p0>#M+@~VcPCHXW*bp;4R4J=EN-@_b^2* zyaasr0M)fwAMRBKZvOyvnQ)$#06SxUGKd!O^o4CthaMqB zYGSkh08hk73vxH+IowV6K|;G)d6=95r~S+&bS^ofY82EL0O)|Fs0B$<_-pi=OO=;Z!0EGF4=Dd05^Z1rT2Ce7M+ACcj369of z$7beq%4pPgYoKXj_yf99ugJ@?}wCp_m@Jq1KeD{c4 z0fNC*OP#^lxNg{@-F9J5a8Xk4gI6%16=fVNn}100(F)g}>-RQ@Vfgz+NGlpi!QEh-z92mz zjWbi(W1APA-k{=Rf%Ii#2W#&e?dJk{hetz&tow>c#2>vvSmEEAU!+q*oTn>RYPWne$+>?d0D` zO^SZ8L6*NVhB@J9E-5QE_{tC+flhDTE? zX|_0ydm7zAW?*`IO`8vm3+;b8mwsNbD*Ua}v`RAbfK&9nN>|xJU$?nn<2i_8Oq*rK z#&Sxcr3@y(PJZ#Zu%-8GZ}S7yZmW~+ZKn8;1?DcBF`vA;eUqtI{{VcXq7`QFWcJ)i z2UHHync!vKRWYw|IoYLrdYW$?U{hJztnlt)5 zxm)-`r!)zjTQZdz+$Pa&pO}n*T(;dp&^~P`?2CF`PWk+>&=eebgj01s$R*g-LOKcm z01%h4m(n4U-G9gUX9l~2b`RNMAws9jw|voZ_szj$iT?m02Y^2?JxzR1A=_SN_aU3C z(9A;)f0^hlQR}#>_>=%LYH5uxq{K0Qv`mlil=)=2v9{#GEoleK70lpKtSZ3NI9H2a zVu0$mioeSRLV{nUp@Iu=F}t5e5_UNFhdWju%(ENDWw5wbRfsRlpyQMr1!3z5brEIb z(i^W28uy4)JiergU{Sio8DW73HZX;Bvc$OPmUuI*CBus_|EQ=7sTTyAL^_e4!i0V{Z zev!5~ADHgDtxF2zpLtWJN7)Ql0v}s2V6MNT5NG{}FM*fLR9hFq;`d7GIJV(e@}L2u zXvLaOHIx=$D<>QtN#jY7p^U`^IRb8=jjfM?cJ)SMD5-SwY|0jSICy6z94OO)Pq;^j z6K+*g8|m=>00K3VP=b*8GC@;~S&%`&F zp|{l>`+&mvmx6$6*u}A2IrA)Va{S@g0N86KR5R;Pz}T!cu@Js=v`DNn=>S8AH>ER8~ z3&x}W!~iM~0RRF50s;X81pxs80RaF20RRypF+ovbae)w#p&+rr(eU9g@jy`j+5iXv z0RRC%5S|~T$Ll|1>7(dzpL^)N;nBnlTJbX+z$yxx&Lyv)!SytpPA4BuW|N7}(`o8* zeP17=ljx~zP?;v~(B>G$4f)A=g+L>6?}QRu)*xgPEj>;Yi@Jxjda*3zW|#!s$^a%6 zBEh6t7f?R5fw2#A;}YefSr7#maQJXgx+YR$DxDqZ;hL%Dp=P)i#>)V_?Uvnp3}wSf zc#f!jj8NPRqj)AunwjHCyv$%^x?qAqrM4^D&Kmk{iJlRysH62mgQ=xXX48+OdE#xy z(%kwnPCl5MTb3Q*s-}Ihq^g5RPN6*(~^f^AE;%zyYxzEw8+HLgaZT|p?CBDAM z{{TZ1uW0xK0|_;_9%-|SS!g?8yc_bGW+pAZaj3SMX?Jm4q0h{HRCd7jPv!`^8)N~J zWkzz7p5b>pkmL|;D#UurmxHuO=Jq6QT(_@0mys3B+N8hIcnf zaOld{GPhSMYMPBmep#sdUJ&n)z>WroQ#HY27sf9zUCW&i@>Sb8`Y}_RpP$r5-$yT} zOVsUinXx(XILFY#S2mo^K7`@9vlRZcA0Jzk`=^im8HU&NbI0g&Ir?+vaWtB0arEkK zIr?$>*y)!eQJm9|)kMC{(+JKclc}7VZG8+E&1nEaFRhw#EY1wf4HVxq82wJ+qoUi0720%ER3?s{{Vx=r>E_4 z7MEt!;sj>yxL`4VaO`q|%bAA=;04R&&5#aTmDPelUA}vn)Xed@TaI%v4;=&ninY#W z_x0v}6K|uBt8b>CLS8c%hVWNCo1Y!j#Td5!%)chK@bM&tTV6Q84*-_+yi z(fuP6kE@)2;wV5Y9lH-w(GLt-6^L{(MJ7c>wKDeRDprk5jTNl-Hj1+O6JeK_fqnRi zs+@X;x}fm{SgW_F-4#?YTe#1IMVZ)UIIEef$cl%OXuryKXLIP6GWJ!n+LOO6xZPxRsZgkuog<$>tGx3J9XdAmSoc zxQgt=?rBqR&@g2Ba?hOGI{G%6eNJ~%Z=+29p>>!h+{VPo4}`&Nn>AniWR_=-lL5KJ`>e|fHp!{RL{40)V(Vo+ulh`B|@N1ijN zl?Eyc$>s%eifUgMoVJTzN@X-#=9Og3+PkabWQnIHR21od?M#5V#{&b=V?v!yGQ#RC zv^#I zc7xn4XyzTu`BPbq3&=hi>L#POz+kE3s+m(jf2=;m!SnomY?Ir@A|pG(SZ zIQpA?3v}WcE}-NVH7T4G$Ulz+Gl- zVk^s4H3Fnc&7izadS~r2tK@Jsi0!Y4xwY;-!QTz#C4dIQlu9P7`mYS>yG+KAUK>q!K@LkHsIa!Sq||x7O<)pfff4a-UZ- zn))$*gOYJFPG<9;{D9cQ$pjg66Hx(^+%bUehLs!-!w*#zQ!<}O@=o+#Fg}Q7a51B3~FaV@ntMn~dRUk(U!0gy)`gIR`4dF6=4A?BY>CX;Wb^KaAJ^e{~(YIEHEzMPYf zse)|FO+P?OW{4`)e$Z-xE8o&wpHJuY7W%3Bho7ah==4t$dBn-|y-bsDr%$JOyw~XG z$Lgrmu^LL)vZiUwDfb{TwB~e*+wz+hI6h?q6mXn{zy_JXC5tIrMZ0(s=!mKaTJANm z3#c;N>;7qlxrHz$nDm-%WMZ~s+S!L*5X&&rFl-rR-R4tP3T%co8R}9(rlH$PXo`>z zl^rP@DpyI>N~>K&Z)SYV-%meAew$5Z({HDV&(+T7XX@T%{WsW}O))Y}zPH2lgf6Ig znJrY|PS4gI=iBuMtkPxr@=iXbtMpx`DW}tKAEbPJPb>?p@bfE<1a%aViM-Pnn|hoL zN%ED$aU7Ov3P$houCXJ{rC%o=<^KSnBL~r^*NK)^rZ1?{Y4w{kq|#Ua000efIQ^oZOG%nLMh=?}Q(UQu`wqe%Ee>s_hc*@QtW7T0>`gb}gAUNtVdYqLJ+E6nl z=$9M%2RM~TZ>TBd22oTKDC0{i?gt)WNI|S861~a7 z2V3Dz<{ryYd!==4V|N8C^ynu#)|rTC4d6HolW zD?1-kkL$x(wBza0bMCxWh;p5F9Nb)AV%-&ayK{2u6dP@Iu8VW+MdVyvr7hp3p5eUB^0q4AG4*NmX*8NmzODZN_mBeoK9^bW z`W(KEW|K+0`)1Q8({HHOX)t{lAF7qd(fNLZ!7;{S#?fw9Oyv=u$V%Mq^2{ta+-@Vz zcP_2)BR4$H48O2aI$S7W$UOO(Fvo#B!5%u6$lsaZAl#t3jwNs8Dgy;~3o*<)7nm7Y zoHI9gj-F+RKm$Z@wdTtp%pmEvS__CZA79yw+*-YxMCsoBbY8ssKMoeg3B3{sl%G+4UW|`o6!Y zoM}r%(Xvu1(NlZ+kEFpi{TAO_PpDWk3c4xmY&&%SasVl*IXEQ^X}2!lJW<<7S4k_+N1-gSm@~ zX@E{uqA&LmmAQnA2}?m%EQY@UC2x&g%@RdFQl~Pb=n082t_n~Us5})cJskBJP51*o za)KBoLt^F|_>qzoe3dwv36gxK{{TgPy*{41`dVM;Hv0O0plLOm{XC}gNv!5=Hq_JV z{$Kg6o{=8;KFNlUT@x%0ifWNomyn@#@!MZxs^ zzfg2UgtO5&JA|ZfP!qwTDI(P200>7TGK603`D!C=*<4nyZs28TEBS3P6)&O-*iI^Xp1!vkjhN4{{Y#I0_sm3{8ZV* z-fuVhyH0+lvq{B$UB0=u>C?gbE9vxTjitYUE#;RKcq>!xaynq}Un6g_4EBjlYnEy* z5HJMhIPNe8yu!T1z6ie+g-cUx>QN~3%NQDOzGF`k9wH}V9;Iy?Lr|0Q#`p7~#6k;z z5g863Dhx)b6o5EKLmm@48TwvEqL5+*sPadE&25q114YZk7-Mc_=nx&<&rzwxG`Y*_ zxPM66`I$14Po)ZmBNHq5hTz{*Zxf%VdGVS}{*61DO$oQ@Cq5=gzt^>t*VX)g@-Zv6 zWh7zM%L<=*m`dIl8jr*PP`o;KD9w7I;4?I|>{GXEK_D zFggcVLX?`0oW^4QJCAAK3yksx<@gJLxC-ww-hIH8D@JP=>S`d}}DuuZvDKI7%P(XDpk;LUDBH~+Rv0qaYYf^@<%)B#2LPiMYD9j#}y~PLA7`b@m)16Efyqy5AKv2I*Tq-i{L-ug^=7Iy$zE)@&sgrCouWGt*=93uDTHMc>&U=38-1b0McKM`@=Gf9Kb(X%)D zW%`Y#zeb-!;>^qfo()ZAX}sU*-eH?f9_tEz8_8h09?Og^`K{Oqc$GK3Qwt*WSH9)Fsb%TZr-1P= zg!!CDjmnKvc5^HFGb|3*5Yvdb`i1Hc-LpJ}D0LISiMi>|%&s<7hW=-)q6G!WaTmyO z`E7yXIXSmRUb>ejZMmcDL|Bi^?yTFXs0Su%`+$m7z{=--cIOd^0K^8n;HV*6mPMU% z1xG?U(WuxR^Bgxz*Ji5|iv1r+%+hN&mTFr|$c#=5 z>`HQo)B^f~D`f>7`k`-Pd;HVs>o?@+3L2b%K&I^>AS_avgD<d4awnOcV6-x_US@M0vp+pN!Ps>56Xk3Z zP!Ec0n8`ctTC!Yr)Z}lC3}DS(;7S~a5LIKe8WQG7b3BvDJ3ytv@pe=XbP=pGNZDQB zGDA@4Me5!s3WwBx<%ocz$uLhrKGa-hWWWI*69-=*F^Jr)rF|KH@C82Hy+RfZV}C+I zyxa4aV-gd0=*HYu;8fW9cKsnV#P#}j`c4xHus=(Af8)u)7m^3)Y#&<})4boPH#OtA zv{jj;-ful--%g)K-%j785c4FyCHDDan(BSDsPyhK1_x)a6A8azG*P9FszSA}_ZAEB zaK_eWYpHL-OXga4dAcK0uY_dsPwg{BpF@JakA}IakmWp|b9|>=OhGgRfZ59F5C-Et zRnX==%VOWezU)cdsXRr@*O<#M%pAid9nGbISj+O87cGeZnL}_G)W;0Pq4TI4v{>BV zYte=#?%q0xr7Bq>Q3~44%U#R?i=oiPF@PzTp0y7ovLo*^tDN+^gornVq>qBoJceAsU7V z5COQ2a|0Va1(dH=a(-o4MgvX*Zss*u@d3c2?G`C~TBWvCr*Q_@CA+|4U4RpR&^G!t zW}im?07E@ZkE0~`Ceu0dGDUP!!YIE9dwpJ6wAb`b{{T&ag}c;Tq1(BaaY7doflvOL z<7qz$&;I~DCv4f8)-JMN^$k9+%k`YHh~B}+&vUd8ZamZ~v8I&7-P9Rb(;R6~gfGTe zn1eNr4PTsY{M@qp0On)?aXFX|O{}cN3v!ojP9n2--&MG`Y0XA!50jWLZEroy0LAwQ zCsE>NW*|lQsN%P$Gd5B?pNCL0^)ua7#mQ+`+7yiU< zWrE`Ix7W$_DP#9#nZ?W0^z%thUsF(hBW_pGx79>8MbEN!M}C}%saR4l1%4rpkhw}l zKc_tZ07&@%0Og76PQTDPCf)vn<@#u5wQuP(kgm(JTHLd=feVH^ifk|V7<5ux%)fCm z0=iwpvB7TdiNi!_DplaLd?th{$Cw2}{6VeTFoAxyf``g3Al12qhy$sj%&Mb!N5k+) z>#mN!ct-*i0NS%h1a`ORdrIZi+%zMc`z8}D>@IU2kP3Mt7Z8PMx!ky!D-b%1N6s~# zE;+8sf*3-~9^vg3W&2AWSFm5ix7xAp<(N2eF+(4`E1^>mIQ>O-{ZsIMg>-&_Z?Ak3 z>}#)})dkL@E#(9To2)*WW?q#yGOAoWzfVP-~`#Ft!hl?tCNZTLzEi+NId z5~8K9CD>Rjyv}ChW9Wg^>cq8KtFI71+clG>89fr@r;3k>!L3A=b+ZE3DeQecr+7P1fxsiz z3=#pwcK34s065|Q0DvW-QxSF({{RMq;$eVS63u2=n0!}F{<6Hf70kH!c1VbD35amI z`_7rROW~_nj^m*w*cIrA&AUqY9N#gi+}dJ&{{W`2o0}r+$vMINOC%Gyy$R@3cK)t);O2N%dtF6&)^6UXHJHccMDn7V^8T1aS6;v zB7kfUsfp!bvML9{wGXQSjBa2z^vEw9%Z^GtFvD(A%EzG7E@7$}8<%X{4c7dVz@ll2 z`TD$mr|0xu^>W{;+wuJ=)BgY#4t4(kg_E@3a8XxGRP2)VZbLQenAAHw1gT)mVxHio zjq*7*OgQ$Ll}?ecU)LqP$(a;J>QmLkPXflA^b-ZP^B95jUM=)wXORJ0YULUaK1soc zmJHCp3S&#!QXf2a%YQOAM*`q&&zOI2tfpy5m;0ymOyGjHA%Nau7RyU&Beu6T_ZZpAxE5-(*xik`~7+xWRfCsYG22%<9GA zQ40(p(e*q(Qw=*unSQvJ(snEV0J?EI?wLjSlmXN9eg6Rbj8g2-gDO7!$X^Q&EM*_J zHFqp+kmB(#i(-w`z&7D4W%eh=z|4CLPy9B$CEX&B^;j##XAn8IVqV574zm9MOQgAa zWsp{DwkTp=Hp2t$z|;f}Xc715RKC*5cw{`M1A{ANk;RP8v1$7ggFzC{6U1Z-@dZk? zO+>_2T!&!|iU!~m;_wH?+jU|xk)ObTE>bjCNAOtJttT*bM1nrO#!qrY(h_6lX# zxGN%B?!A*eR%lhrY5~nmblu-Fp65{)^{Dy&h-qh(I+p^51{{RIawt9Yt*YwqYKz99Zt^WXlnPzk5X)6kiUlYu|zatPJ zi*Ru-H#PP4n}RI1SXQ+hvyjBWC`-;|=VaRB_08x`+2!=4ro`fx+(vCWCA!=uDTil% zr3$W#v#Gy5E!@P`3*rLJ)@BBH>xe?nsXR+=841IfNDy755n^iGrA7RoA!W5?)V|@% zCkFbZ5&{DkKQ2o0uX2)1fkTW2!$_Dg3qJ?uD@hz`~aR)|jxP45qN59vIUtg+ZKvth~ zrw8bC`aFO1Ds}e#QL^m-5{w6(pZtEGFaH1-5vXhW!Bmh}RXQ>)%bL!CB51PvOvuu| zLVK4PLlc>jbmR4-SM(M|nq~JRs`Qzx%B^k%VrjZ>`xYfpve3*je2yUoAE!(vR$F48 zCD%+c!qx*?l;va;M@l98XM_SIZhFQsC&F$iwk7&p|2hf@)xLe8toEC5gni6kDW!a?ZxP9}y=pz<;D? zg>o;mPvmsvD4)z@RT!f<5OwB(H+d!KA{rlqbkA*qIORQ(jQyX{{Sju(qHvdIR60F zGMmoxlaf25Yr+h2urjb66EPvvOONGU^K-#BpP}^D~Wj(S^2kkN(RoO+GXPTMSSD z9_G1zWrSuk7cJ(1beTVM6S=J$cMOUk9CqJ1miCfU*;J9#mlvZtHwIe`lzpNv{{RjN zd8ZDr%=KWGDJXyM5YeCd1Y<%WKpn;uOw!JdgBgKo!9KR@9oJHV22@XPWJHXuEMAM^ zppey)@#bRAOv_us8--<;l?*y{@6U*(DQW)z&IVR6-VjIB1)e4(EoCO#EEyfcI9s?c zvJo81cgDtL2|-7uzY_$21;>6E3ECTdlxyud*h2WnN6a~#qL>@1h#*zacP=kHS@!<` zlCl=k$IM#jK41R;9E>OvqzmP3F=OCnHNR=x&+jdJZTrety-ITm&tRFJ+w?hy(*S zsYZt;ZGHWK>Q*>%Y?fB)$xT(l@Vl5e&{KTOgACx@x%rQcc3#gC{68sBy1PPZyJJjs zzU|GdN=H8)VIW(`2KRcpna!mE_GabjOTzq$U>6)L6TvB88%4UHXRDe;D>2=fkW1kO zO+NC3k!9<|yRg|zuux#yYZ<1gh8wQ#$G)Y5$FG6NAB|J>^BC-JDw9Onswf2>T-vol9oW7B50O{1V11raH zRpL71HlyCqpu4k%Be)E{Cj0P8O2QnxK^QC@J;b?N>iB+}{NYRGs_EQN6ajpkCx2Ey zs8#&{_5T3fatqdR5prDko7N|kT_=|3221tf#7rC!FZA1AMLL)2TdIvXwXFpzY**z- zkoegkig~|4l5HG=FTiQhl#toH%K+$e_J?)Y1UK(o;w*!Rjz>1epEHoMfFJ|39wg>9 zpKkPuWo_;^pR%(YXuJ-l7-jJ)2?=quvA9Z52YQaV8EL78M*w)2A}&C_$?IMw=}MWK)d%U30tfq98*|EH6;e3UAQ<%Frx62*AR+=8ySTdZkD`favQct zVFgtE()oUYKUxsJmeYC8q3I6VHfl?QpF zQ+zb!AL%yEfa<>}16dCD##J+f*Q;n61}@frJZAKnBCaMq=YR?1gU zieyu4)bMcon_6h*r9n9IN^VrK4?bm_AvI-Zx-h3z{Y9a9jU+<3(sBuBp;$y;uXtU{ zg!~6mlFT%zP7-b+9m-pmCJ;5$6u+53YUPv{3PHTBm2@+iG*s2qO7jKk;B7^C%KU{@ zx70Fnw$Q&wNU$klr6`VUF$Q99GRiSR(!9#QG(dcyo1-_|e=}sjRaNRTeM(oNO$y=l zIfF4=evy1~`|t`-@?d4Bl36vjg#L7K9#88kTvRvrkKPD~7S0G<62k2CGkU^Rt+I~W*7^cFow7%NGioYPtn5@S4 zIZPkiB4Az>Fl9_)Sli23q6IniIsv6?kWX0c{zSITGS4 z)%Yew^1x4i<<-!D!TkG%afO2f^EFktyzXFJuLm-KX#7ed80<<9gt%>a3 zK77MA#?|<{oZN_*Lrk=2hK!t(L|~9wxF0jZCmT(*Y<7>r;uUhB*W0L~0WTEo!DxED zCY!m+P<};=sDmPADX%_Y`=#xa)jJFxCDp7OW7l3K^-UnSH*rrX&~?({EwErq3rVE7 zqzxe5tMMA9RVaR1iY>54j~AFclu`C?6%ID4Wbsdo%!|Q5o;&!1tZpjn@64@jycHnz4d7)BSF1bvjJ-L)l5-F@o&oYJVv2AA)2gEMrvjEn>YFRVoV^jSA%QmgMV1&0>jZ<{d7Ps2b+=F9+`e#Uct@gp5a9 zDhJdKG=_KTVYJo};%lXt?l-V0PF_eso-$v=Ia0d0OyOAFJQCkzl~3v66Dg- zPq>zf5p`c9+#2qNZeNe-E;0E%$5n0wDv-;0uI6SIn<|JH4$+{3oWdz!r$Z)pE!(y@ zbVV2d+Lw0VV7Q4@UJ;@$7f&|1%*}!6$?TRDy9Vv>z|LRRa=pL)RE*V@=tiZu{YbWm zos;qXAN!%+Xb_=WF&syWAFj$_QCiH@l`SA59p0rCW>qo7*sAJTuk8c#5p_1@n=7vs ziF&8GGK=c0vm(bmLqas0kDeqGbA4w_LSc}k`Zx)=ICh!zN zz9&Br6U520tuQw%o5Xm0&$;^!+3m5(gt%!owR)LgHvmVd@E3Q|>AjL`_2n1Y+ z@7$m#?9&B_sY?i{G$we99`)Z}5&I75!RiqT#cm1VDTHQn|HuNrYRZmcb*jDCHb%8xg zRIImi%{x=Q6Gn4LTQOW*FR~F5SLE?E)(F*iagtcEe#eqzAe<)X#w&cvxw1ph*A*V~ zfGAV0qo#W|^XKTip-s)g7*uSvb;G}o<6U469sBw>;1U(PF}?mf_dL3f+&GtY82~<` zaW7y{_?OXZtDDnRScinBx5UINFvOtdw-D6?4gt1|N^wSrdoJdfe7JywBA+umUWt2U zmL?%daWr_B^kJnpslX-?%3gwSqE-d+VkSxr0_>EJh*bjl{{ZkHG$n?Zy?%nPZ69d1 zfAKK-{;>;wuppwa&M3vl*b`r8aXDbdBUnc6rd7FG>MbbFHgq6Lz)Vh*v{&dYucc3? z@J^yE<0g@$b2I`eIGd@E7mOhd-^k9yH*&c4<&(TdYI9uaGZ2sqBKB_@Y-d=y4>+i% z^~MoAYMWFt6MHs{9RxP5#AL>Y4<2cAN)`j!?@<=Iths()96 zweuRWI_z@?9C2Mvc~S5TNli@o5xB)1O0*bI0w~!uTwO>G<8vHx{72Qlb@WYCur7gT zfNhQ;-r~`=r59!*0?A#ocj!T8^0cPn1F$TsndqmfpGy5YrM{(W%+n|NTQ5?!uyWXM zP|2wl*ns{d7O^pdB}}*{{SSZ752<*2;h?)SfT+p<(dzmPiQjk zEmlePibM36*{pk+I4#cs7WzODe?bL(r>E$2Vqc%DU;h9(KK(!OgaC#4h8BHXw<>9c zPwxqE2~DJV2V0*}m@^dEsCmTo6Tv?b^vu6R@Xs?cyesL9QZAoKnm=`iX}1Yv`69*& zn=$23Rt;@ATAUXlFNWsWl+s0DwM+;p@Gv;{D{WlrEd}@zsAsKns<8ORIK7wec}M zEnkTK{;cFC=3?(-O+P`*<`HRy5X^!sq?ZgpZ3)ViQN$Px=QheJQ<}ZY(_71YUx|1J zvOm!JPf6hYJKOYuU+R5+hlXG3g$D$5tAW%xTtYK^Omc6`!|?zcz{c+;u0o4E-%Q%=R0J3|0MY^j&Dlm#idW??z;d_)Io`PDO zo|p%m%{yk}@gD-vLYzb17htMx(SP7Zn;-$5MHP7vr5o6WH7V9UFP{1(KDXX0}*JF$J?X=){+7dkII;;DlUCY{9Ay+001TAyY0Mx=a?AT)c4LY8)#s2_~v&XNl52)}@4D|Xt=Z+?w z;By)P9ZZQ3+E^0#QjX>nA>vrZ@R^tcwl4K&iFt*}I>+TR(DJxGs(6%qr)b881%j{A z;rNH43vyHPbK))PD|NU!t-yai6m!^)PW(lxVi3DvmG_wg5?gyb_<%~tE2*ak+??IQ zq*N_f(9F1sDJwlQqXOhQyCwZu89pl|T{@2HRlxVc*>UheH?mA#e~EEutOLN*snzVt z_|M^R;+H}63Oua7T7;oo1QWyUAKpd--~t>$AH7=S>HDjnDsUKLk}>ztC6 z#luUAP2yIoi>sZ;oZyDz`$t7k=2KDwq3%7vfWLs*iF!3?2PsM@L}V5RfGcsrMp1gsaEF}@-mW%KuZyn2j2!Y$#%7jTqa?bygH`~pRDMix#^!PJeO zaWmP$8Fxvm*>R7KP(6JJPPB%l0RSEs0KS8Jl?X40P$S|~ED&(Fl}n3MOSL#9HE>>5 zEFPj5mhOF_Gtim)%>MvSX^Q%clfm>ho6WrbgkH7veP+<++LRMN&}ik{=YuI!B3}qf zY)gpLpq)6Cq#@>GfIQ0*M@Hp9r_I4eKGB&wMq(ED2?)ukP)-X9ls^VSs^_>SWE}(7 z5bblb3svGB!9ZN?d>D<>V>Y@Dd_4x>og=)VMf>{bPR?hL{&DB`M)fCcu9eayc za0zusUCb`3KyWF);moIKfjM*uW}ub8*#$}xEj~oD+HjPG?=eF`BTtj9=Q9M3M$|l{1i%1F zX~r(aWUjLuA)G5zg{Hrlz`0N*!|oxV(Pc68*g*O&>$oW8hhjRQ)>jol2r*lQ^Iz=7 z<2;cnHdR)W!!a6SRc>L-wKAcSr74G!R>Si!kbJNuOzJv?B6*!e4Eqo=(Ul=pmo9KM zcus%>eonkWMz_W9>ltRhT-}M(`UXbzH=2DN=D$O4rS63T>1O(iwo8G}NWxoOG&fLd za9)?huW*n$sJBuA*_YNH4L}93ew;-XR=!VgsRA=@4Cix^2Im`q+fEoT&<5&t=o*1#(+IP@ zCZY#s{KmK?tPD2CSYX9Y zF36Hm2ZPTsSWX?jVCL?rpo3N`YYGWfQOZc9jdWNvVU+uT=)vQ zd_;5K3vY*fl+687#Z$v6tCveJJw?4-@|Gl;WMC$$rR2hyk9^C#EbJMPHy_Cx24-M< zp|oVtxn&_TQoiy8qwxnZK4pC)+-rr2c1Up4#*wt0tLevj8K}S1KbZn4rk=j7ol_j_RL@^vKQbWLa{(Z zbXLdlJnF)8)68WHo$7k+j58rU5Oiyrj*&Me`f6ZGb`kp@L9|Mm!RA`=8setJlhtK- ziEVcjo_e{2Tm;^%-gfa0iK$U;pD^WrXnVurH%zQH+KP3llbP6-^DcXiQif9~Wqix~ zocsXJp@`;fwk{*JqGp+~rTh#->LFjy;>N!*zCM+a;FXrkIn*UZ z*gKU`_eN@^;1x2^skE}Gss=s@YUc!Sp7$QR9ezSJK>)2^0K+s2T@1!rE%7@gEUY>(q9`s9bI?$f7FLw+diI1_Z*RR8q#Km8vt_EwoE{55!m+_Z@Ja8FhK` zO47Wc^IFSQL{AF<0;^9M_U|3Q<;4K5!E8JG#6?fg?I^yA^wU3ANxa+XTm3S$`fPrk z<{EX8m-)5gvoZ4t1pqw(IZB0@;FwzL;$%=S(4|nbopBth)Mr$)YQRD?ba{>g+l!9F zj;ja?hmj$dXA+u$lQ%Q0c|j^v=H2?3=shepJPMnsXRmR%#+mMmLDhwbh6r4xSsSPb zFdBYR+}7YXJ%~-sh{};B9=h3R_QB>jPXS3t&jvoB9V|+BtR0r6O}90%=0s(2T{8e( zh+uQ#D@ZZi7661%P+BU)cVek=j>75+;>4?XmaxRdaCNc@%-%C3L|$J-x|gBPWJeo< z>ehZD6p8L}EH(EzL&x$6$U-rhXG2 zd65JwFz`C_C_tx8?2l!!?q;Ewr3lLj9``D<09rs-OuV6SRuw9^jqWf@V#c7h_NDrd zV%x`3*Bx1N7m3Zzl{k!^h^DxFmVC@2xX>zPjNrGn7FDRc-O-eLtBGAIMFG!Hss)Q6 z*Tx@a8Bd_vQ2Kag+M0bGYE}d2B+c~kGjo{tJTW?rxMV~T?I`yhEDsWZkpf#!2sB!9 z-7w{aj21g0r3BHz=4WZ^F7low#4VH#AY+p40peQ5Asxea!TqJ6fwf{7Q*P|Y2XbbI zqc5O&6))l~GMIGD8TDZE6M{*FYI!6UsDzuoFnK-QF->F%qWDULy#-D&be!C0BSrg; zwK=UoY+`K~z}T=|dzM*6J59OyL}Lm}+y|?jK+skDIF1_P(@%$=bBd1Z5osMtjK9hF zK*j^iY5^K<k&&jx6xRFc5`q-Uyp2RU%{f22otb>rH&k z$T2`vsa#|85L1~|P~emYteq%xdZ&1FE#b z4hFK&uaaVlpa&gQ?1yn53$xzhBWN7yI3Knj#L-06_*to*F5>9NbghvIa! zm2k86VBgR2E__jsvRxJ_MI^5kd$=xzi&zFcSJ_S+B^m4j$>466FG+i92s)Phr`a`v zdl;=AGX13_fkn~f{z#4`Ghd+#g^hCl!y2fJ68fo&lO+bU2fk)5DS08n=3Jm;_A+nA zKZxiPNbt;@OtSSdeH-d;^lvx%EE8$2uj##Dmz)~?CWYWCb771GV(PyV{BVHEQ&1kF zP`mCk%C;^=69fyRMF0yW6NbBm0EBgh7&q5<$h;jqg~9_Z0qeCfY{2(X>cGb>yo_w#uGw0zL64t5v)L;~eaWPDfV zHL4W14}LvF>{C2{^q1^V0-`)*zliI?C5e#NClLP1we9-Z1seAAb#4>S5dxtmSU*81 z_#yJCfhz!03NrNN_M5||ReDW9iZw}3lBGe1CVuFT6;S47iZq;^u4ht~QRz&6W+XCN zJd9I`q}mIu#4}<02jXBNgAK7Pm;!`VhhMz1fEI%dbIa}|_RSy0zF{a(2OmYO!SuHM zPMb`hL*`77R;4PNT*;^tqI$v1s7iQdZ6f2jm~gMDCKpCy%apniFulf6M>i0JhEGD7Z>-=JU%6uW88B= z)NW;M?d61{alEnJkCXjUjvqF{>kM{{Sk21S4)L;dNp5k1cz! z1f+Bb4eYH(yhaSlv=ER(;3TD&u?!OSZf!LmB#7h(*>@YLbc!B$rd4USye~MSZO$j$ z3F3Zcdp~H)OLptmxrdbDZQrl9b!8DRMVJTb3-h{YI+*!*!RR@Gs#mEz+!syJJ( zQm#z^YPs$TUz(UDlgTZhoM+WF@C$$-=&ppSVh^2s1o)-KZ}01C|kv zK}@yg1%w?^SoncUktGWk(UamafvS`h?OjF-%uxDqtYap7fDIdgf3*aZF}Q1AK4oZA zzo$I657H(NqfJddpQdK|onK3jQqv4r;u%O9g&TvY9IO}(K>Y;em_vU}v}Cb)jhC@7 zMxC`NVppDK1v~Bu#vDTBS6_V8qK__+R@Wo15P%T2zZrVtD7Ab-dHbkOJu?FCn~~$h zwgB{!D8*eR`$}!Hp|}er`IL7@m_38t#^8CJOlReR0=SmR;HeruG?UOc^TY|-UkWnG zP@+}pjHbR~m3wlPu(B~;{lc??aVWELhvOSq+2I&J?)aEJ8t6S@B?R(toz132}P4ZkIXf?8XIhToDuwG#YC~oc8d+^Kq zY_qw1w9W?hV#ji_@ebbRl{hjzFhUXURfPj>W^WdygdkhUtL%F?l#PmpPilYwGrXs7 ze&!zHEd`EwSfPbz1*zAWh292FCBPR15yFHWRWaOe2abG|1)MM^H_UZjOEotLuO3a@ zXgUr-r;B9rnHZeRlyyM`=4mLOY~S7wy9gYRf)2{=&+!?HBsc^5B2NWS3R#TLY`Hu( zQF;FWF!_^R($L4^h6PDLsCispfIBxg3ILxYa9+<-SvOlRUSg&K0)*f3>J2INNxux^ z62%HLuAi${eiWYCsqsj4q8Z&+Sj@4gNC!a8mqWX1r31LK$MTeXv1NX%{ZShx?GuWd zP9x}K`Wj48x`f$>oJ&LSG4Qmgw0-67CxbHUQI@71OI%M9bQd__g+P804cZePv(G!2 znZAn7ns;#RWF`t3+4O{53ey^P<>jWlGLYoMS*b#yJI3fI%*AwBrGQddv>Mz-6F**jE9QvOq!NYu#coYCiIZhyeTo)B}%;#>y zL=;gt4rbtq*U*J&jxyTuJNw7d3Dpul59U#oej~J(5NKS#!4sIu z4HJa1mC-WWMje%%Yejj?=@Kh%rGd z@&%)~>HwDzHF+Oui-VW&iy(fNj| zr~tcdZgc11d+YP_1<8yodulGr8aQ)X{7gYk9(3>HQmzg`lbn6h27;~9swUDG~I})5ROqmY@UugM7JYpkfngk|RhZ)AWCRlEkG#w(Anp;(N`@zv!D+O)0 zgmEoG=<-YPGJqNbUmqj)h%-NfGU|QFw!V?|HJLLh!c|JvruaUcXNFQTxTp)o%_pbQ z6{+Y&tmZES#FNcvEoGf*auhQv9w|grQg~)12h_QV8urO zqLT2$PVOny`67uDM0v0RT}-601CRSKPK@mgjVg5miK*4mA;Of?FSkl6|e0sM2k_5 z#$CeVXNydIiAzWmVa{;=A_`nQgPW~*iTL-kT*sUi3B>G8g*;bharjhBu-(4@0C)q< z#mEy9NX!-<)L+M#l-nEyNb)PJbD4GEmMW==^H5HV6QvnD{{ZYjMlq{luNb*OrKz5H z486puzj3x64ZLT!_Cgx<8UrBgL)5%j2x)Aq+OxGe-F)SXPfEYTECUn>tS_qx@=K&y z8t=!%#=H`&vBeuHKsX|4ndBn1wgXG9mzOf>0YLZ+TtQ}A{#3k8!J@kS{_~9hECYmK%9$ znQf{oU*a~GXCv1V%u>_D{F1{^#QHg5N9ZZc?ugmeVjdAMS2H;mk8-e-DGIB<#%8AC zbbOG?KTcw+P*{j)L*Q;7X%_`5+@+HFm^*W)s84i(sy-#4dxGqFl=@lAIciv7sfk9* z*7FEfQazQ%w+AfOI+uuGlH(<7tow$8kWRS7z!fz`V$dkzE$ZdLQz4pqje^UL&ghBg z!C#cP7LmWP8{pngFXmF>r3aUAJ!S1hGyec%vNi;zpX%j?33ROc^NCCWU?6lLKM;9n zVMAIDbI%f+=?=m6bp$Yx-XjPK>?8IJ(K)xZK=|5L^SOIi;(`wh#^4iURyvG%ii}uD zYg6$wY(b-n@NQDU1XLwe($XGr$v4#2Vqoc|*$TrNXdw8g5Z?;wRxGRxJ<4lQV#58m z{YvA&C@zh`s=nB-)$GD%liWIx`hk8Jm0=)eWrEYuese>q#iIf%{iy!-0QE1_oxInl zxM&H?<`s|+(7X=U4yqwk9K!k|GY;pQ>1L1ARe_#UvjMZWONO|*q6JC);Gov9%xD04 zRz)_-jsc`0%|Zsq_>`bz}w%-$+{pSMz00c+7tGSGP>Td_5{v~hZ244y95?On4kb~r& zQefP&GL%N_eM?zQAzlT>jDgQ49TcIVDr#xH1CRLvXtK@tzW3&CV+sN9H3W;uviPw4 z#~Hzq_jez}yS!{tJviJ*Sa2T^gc?vt5zI3IWp;+cOFN?r?l6H(FnLmV;yeXKMxFpx z((>-%;suV=#{MH*k>E=I0FfptP29k|%jXp@L+9S*Zf9kx~EF_zf$zZ z)eCD>xQx^4sNb1M#bS?L%!sXJN7opg=}^)#)w00V_wh5O${DF(@B?jC^$9x+S!nKQ zWS6{he(@&=#Q-!tz^odJd=kA&Miw3c$EYS_U1>1G@cQ|M)ZEA~KMmB)i9xjnUIbIf z)uzmZ!k^83Hhw(t=qj2qMlSBI@)-IkobBWyaCShoww*WP;ZKu|gV0O6Nn?lPNdPRlPU zR8_9#FO(ZwVb=|a?ZfdS!7XBs?Wr4%G;ens4ColFTW;sigQ{H?gZT(2b;CDQj znPu;!C@Fp>M7^Rrm+X};Pg7>`jv%W400BB^lQvZ*m6`L4hf;*~ur(ty#o}hFsB-K< zHGD%Y1t)iijyA`UTnv;xCH@ zC3H$yBXbQb2PkPLywq+i?CP1Z9}yTb(B5foEVWr`>6DhM*-0MP8Dv&k3?-ivM7$p| z`-r`J)PL2G7VyKACf$K3%?Vb8y-Fog(>d(AqT0+es;vzF0JKVlE(C~xt1-bmMg!3R zqSoD4xCiL+SX+u7``@k0Nn&wgU zH2(mza54*+b|$MIGsthY!>MLF9OV4P%%knQ^Xe_@TO-uPXfnnX+0QcyXMk>}6Ad^M z6wM%u`vgoPCgt2rBNL|3{OFD?(q)v_Xm8k0%FWEv? z2*NA4-N8|20;^^pAC&G;Xkx1&7hRKs^2=IJn7pBrN{ilj8Ma|P^d7?$Q*Z4uX(ejz z*^yK5OWFqUvYmkThyYKy2p@DNf-%nH-9~kNygqu44s({V)@tPesP-OVR~6{EX6!Ep zA}Up5a<86-kpL->ua}l+?1$Vbzr?=3f4fV`>H%dODm@q*SO?I$x>rv++(lup2tqss zv9f7uwoY%Dzb>A{@Dk!sZ{Fb!uzqt z{mQ609xl_^!NBaMb*BI((EchofHiPiyNxo1lH7Tg@*R$GA944WLNoo>0d>4IVfzon zxIp5Ij(GbdCWkK;7k$faf_xUMgkQQ`3P$|R*h2FeY8?x8m_L!jC0fdO%otoZ>HZ^S ztCLTuUs>`r^9f?$&IVz1Ep8Gg7{3Kd$RvJBoQz)b=9$1D80Cm8Dqjj`RWcWINR&Yd zyOIp^4y(I>=JC@hYx$f3?3*5?k!u^u0+lCZHT>afktk zZ0$HJT;fnARRRq^cjg6v(%(HK16wh|1%Zzl^D+AvZ5w}yT!f&|XUty`z>mEV%EZ&z zg0$?1FWNMbA!`V1{uyI7zW9u7sa|N~xBxa4Y^VD8nSeBoh5pCl7bUPW8ZZ1@YH_F7 zk9aJ-nSR3>0esGueZKRRU=p#*H)AwM^2WvRjTk{`K={Rd;Z|I>m|xD{w6R7fbXw_t zA}~-E-}#xDP}@xV_ZVGJ9Zz3rVj`Ty*uMm+92+{g6>2TRb-0~Ls;+}83F9%T7(bF+ z+9n5))rKL8ajf=UHfoM4HMLfS*!`wSQC^EbBkebv#ILV$FATwCErq)BxA>K)cZD?h zgxaLFh{CJ>!~Mi^J!;6FEC2{ zMP<2b7ZC=Q7)a!eROlM4ADzVFi$!FLwv{kJ>>xiTjpB6Wm25m{ssCIxIc}kuebxaDq z#upbO3UQD7DL4^r8RGHr9}7)5zW!(IAB~@3FZc#Ji;hhvhJzYmF#=Y(sn1>>zF={2{DgYV7 zvR6s&YenhQ?+=-wO0E?=xoZu_!cz480Zx_22mo{xR1p~+O?`@T1~#NCR#I=MxHA*=utKQ-KP_2FqSyO?X!p{N#y%Le*-S&%2d0 zw7NN8{F`Bb!A;BZ__IFZChQZLT4GzJEL2gXDMNbu!L&wR0+RL|j^R5BlVVm-5wl1> zE^$Z^h8vfND-yf@y!9&pyZ{kxFkV-Q*a7anN@Swp+{)GL^Uitx;k6?@iu{t?l==C7 zS$;_d0luLPkXGqm{bG7$k|}n0L0OI7XvjKl9}{;$&xpxSOY#2z*bAkQ$B~Xdm?L6= zjY$3R)KIVpTs3IlZT=&)W&?)Au3v0II|V7iCFvN9FAjin_=|Hh7z5+q?=1#6vcsr^ z0YVVpjw_hPwA+bIKtOh^1AxvB6#8eF$|5!n9puAV5GUC@+b^$mYe= z0C4-s`yEtAmJ^l1;+l$wpR9#=q8hf!{72l}$x12uT!wR)YLywtxB~+JZ zlv?@&kfCrh0?T~IBi&32GPM%wCL?^^5#tw^Q{7=pFqU7aMJMEDL@ATCcMD_onfy7v zCi`W1Ul3zsIJ89vni#jQpP$%z{G4rq9mboj1utJ;`b zo)v{Eno_o}UpGi{nf5 z#JUBPnt4vRlmaN(N=z?n))rHiMW2&te=$&Gv;Z4`meDBX{w0Aq0_pQO-T-dD-9TjY znOC-BQx=s;OO&_MJIXBVcq8Jic~vQE2wkU-oEVoFu~MyYfzBu)O~!%rNmt<>fUH0 z$Qau!(HL!^D(3>?EZ%To+Zh=ssjyo17VoGon3@b9B*&RZ1+x%6!^&ga^P!Bg#o0LP z7iJeoJW)5?4kMHV8_s5yW~Q;VGM!(UuD`tCh~w$vp5`$`UF_~|F@SIhte4uzvStwZ zr|it}@*mvZiRLxR{39vSrSG6Tuz0>0vB2gnx7vSDN-~4&B%{m@kjYpDxDw7k1f$$r z<}g~WCl=^ny~hF`Qj&q{+U(B?E)29KzYOAQt{eW?^l)H!*J!AP&xBq z{6;}yzyPgQpx+V+3lH|9<%U5;KJD4=83I~iYq(3oMXO-G77Z7cRdzAP@zlu$q1U1- z27=;{Ifn)2HkHk^qVXx;o$!n(p=jVdcz~Kkt1TbAb#+w@FV24P7hMEKy%MRg5reS% zVi1k9u1c0d=U+{x<$x^Nh1GrH^&oc|qvBPbS>QMGiA%{D4nTc^<6>4J#$}9Lhy1vz zF{YJg!>Mw(G#%B}H9C1asy^9VcQ0ECEC>PM5&I?Trom1T&UyHP@7oel-`g;dhPG7- zfV8T^RaWkJs`<6vtCKZ=@Ns~yiFTG*}J86fA4%p@-O zM?;lz?@Td<+>)lit5f``XPB<%%@;mWx_9+rxU`W-lvf`t~)m??2AcCsOF$^1Yv`P!>z;47;aXZ zeuxKcdxwA8TF{lt6Q84&d=GJJ2|G)Aj_7)uK{SZFW(@q?{n%iiCZf8gF%;(2wP(ax zliM}wdYq#2ET@4dLGna$6PTzQQws1@N`q`ki7AwQLak6ruaVEw^uJcy1nbgJ4ZYOA?SvI=ua_Vyv%LB%t-yksN{KVYd zumkWkK|#K>R8(EzqVX|srQv6Uf}7z*8?70cP>(EGPf#w*tHbjXD%*=0e}*x#AZ1s( ziGf%QJT3dh6L%V*uZl^M99}ng`^Q1p9HrOVh)|aR?!bNXDF*rI*T)P@y09*@i(_0; zft0w{-~m@hm*x?@1gfXlz^5cxO$J|iTHuLgARaI$yu`ekgGMTs;M`{iMOip}XI#M+ z$x7wwjUJ{_6@bm*pEd8Opi;*xAG7<7T(b*%EBNy>0{fwCS01>D&gQAT$)YuW>dQhA zsG<)$bH3%LyESqm`D_VfJCLY61+$|z)pdOkD*#IgLcEMCJm$bnn|0ywoSj97zoof# z%%QPzaAD?J5J$>}Q`osx&>MZ|H_=hBs?z}h@ZlLdpsd!eHayteFZd7KnC|KU4#nZq z?Zh;KC0U0jfXWy+3)hl{>~d$AGe9!3Rf9zs2zA&|B%p5gIZWpK1B9XDi@u0|w4^Gr z*-Q385JD*w*y4rH4-=LsM!S|SDa-B;W)orRq4V~G#2v)4-_a5~q>Wmi1PbOCaW}-L zh#R}8bVTq>%aCy|m_@D&a?!3OOZP2X`gvspuU9z&cT*v7E0~7*!l}O!vegARd8^HR zu^2@V5h?jIeX*&HSO89hU8T_jMrvRzh8n>42&4H#=zJyhd(#6|%3_nm-bv+{RJIpA zE~;8EYEIjoZ88_+FOQjO`4fKqRL5%435w6erz#6T=BY00dX%|roQJk{bx}99xU7>% z7802^?9k(JL{i4gecoIflmh<1JC%hEO}-DdNahkvwv^VmB2Z7i5mN27+TbNXoy}bVb$%W$qrv{H2fLmw~ zn2fyM{YrETk(Yku=r8cm<5OFs8%9rt0ajG-1F%K_afWs|eSdK`;7oBY*`*s4r}wx_ z08Ri?;9@v&0^V940*^%H!Nf}V`G9fBHGQ9%i46&!*8~=y*i6bQ>52C@_n7o&XG>oH z0C@F$iF7>^6)2lmYn1Y>Cc>fqLUK-F;Y{Aa{0VI;DStVvD(;{pvJGWGeopIi6CNVz z$khxuDk~e`Q|12vBRfWi9$@v{Y2nw`pd#VhTlAGo3$u`S4(e4nG041Z*%>MVYmYOI zL($?>6B6Dhu|@ceoS7B@(s04*os#gsIIoFCn;~pK{`dzHm<`s;R?ilGVy0g}0fVFq ztd*FCs(?n*7^a_i4tkSyRACtg^f+SxryxcQxNql$$`rGN05j4h;OPy?t@K!N&Mzkr zKyZMaoilF|{Iz1ZQV`>haEak4Ud_~Vvv6Z1Q8km+?iGPx3qDh*luMO3bd+PRCFOuP zqvu}-aR}KdbOqlIeyVxHG8&C|nTHOc>o($3xOgDpZl{)cXKU0|^dtf^iPP6R@anC{6(_MEQbg-m!M`sN>rs3^LaE+|64)0tB~Le=v^Xxf-yA&|2pQQpM=F zS(`r%u>efcEiF^c%OsN6kH)Lqpnk=Jij>gRkD7aexf>wsBJ#pBs4(>d{7M##HUWA2 zekHPxtxer5-nA(_1x7k7$NAz1-nK)_eupoKVz$C^ydX8cG%?-58U_c0F?yx5eiSfX zutIPq%M*G2rOG)#U8(0-ff_^rWmyFRtPfg>H#bhP>IZ<90Onk3P+N2SOMCtUo$esr zET1u2a_xMp%%gXM$gaL6rSH0|5aSy^5l-BYBt^Um==VEI5p%*_QLhcW-a`FL2nePE zr?YCxSX6%36rGeedOZ7p6``jtzGnCtOF!gJg3A^U5L<`<__O(oBAo%Z4*t_77}p{i z@W$mDm@d!V#Iu@III|~>LpT=-!(&p}pHk6tcl=AT9vPRuHohT?7<6@h{{Wd%g%qqD z{{V5W#z93LpHk2VXNB7M$-B6Jlt=tDjf2TR`(UdgRAdKlL?WnJ8jQGAeHYBOMMwin zTAto&)bP{`NT+eSdm>@L6JVaq;;M({nY;A3LaMM^HR{+i9k+jI2e-thN~U%+jSd#u z;!@JdHZ}L^8!sTKDt9YxE0|1(>A;xuAaK8hOg|Hugaxr2F;LO?4B^|3WwCO!CECv- z*hm62nnw2y81Rb3me=DO+(iEW`^SQ-vqbugpgOY75j8@2&uwRVrUsMQw&0jt4S ze^Bcc27c+U(RdU|?2LbSX9vs(7w!i{1j~u>kd!m@rWn0X+AU&W=4dP(A%##PL-vZy zZMqi1#v<->I=!BFU;s)ytGBP3gAqGrO}6p&n17tHuNGi&_?runIZI{!qqbJU&1%OL z{{YxS4u$ZBcrDD`@dsXjYdE@MFhB*+DE|O4cOVpYhPLF=Jj3U{ltY11{a#HvndnT0h<6-oOUyam4Q`@dInupy0eXmjN&3V zs=T)DTSCwSHnr&r-7zj|mdq~Bj1-od(cmrgWr@g|1|5s4!!9!jF7=R)ToDd@H?2wr z%4*A5(*~t4N+w9abE;EmOJFmg;V&S?s@Z4n7ta9jcQLqPt_gBo;IhIV%=|)eVqi<*vjSst1cUZRdM%91xZ6MWKEV|4EVXa1vRqjj&&@e%5vu( z<>d~FuIv8*jLB-nJE6Z?h;Cy1>I#h~Bowc_OV;LGgVMyLKS5Z^{&5URwL4U=LtK06 zV8bab$#sWq!m=o?a-922wUj95zqB)cDaRAQ)O_g{z(XT07AFvJoYL}?Ucxuw7g8Cm z*!{OP&NiV#jOLCsxMO`_6d5u%jr9y5#LKF$jrAxf!exLxF4J$NDdU!TCycL&kyb)= zr-%-Ww-*rHL!BNAj4zTH;;;vklQFLXwP!ybBJfbHm&6kaU(`MuJL=_NrxEJBP|fGo z`uZ5#h^CEH%*`k{GJ7_8mgZCSY%ie8T#luE&Q|*U;Q?P(qH4U-+3FL!sA!gOV+;v~ zT`A=1*$yhD0(bx_+ra4$`j8{Sv)A77FxI9vRzVu$5fQA#p6uV_n~z_4E>iaC>IxS{ z0d}3r*H#!C&UwX32FF0G-{Mqtu#i^n#(wiLkJ8b9ljakrI-t&*O+5273S1$PDfpD1 zjM|rKq^rYh3$bslk&w#RG1L_P+qaA9J>?ZtA?n z>RSzO!#{{1Tdjf4W!`nvS7qG+JTBo1c##9T@ytK~0Vlovw+A!2=otfc;>vg7*KD6^Ix~|}D&=!g_6HAx)ZNl5DjhcYyRBXz$z;B4D{6-Ul&9$n> zsb4V_5@y>C7k&zze=>8@nywW_<|^<~vsGMO+m8IeMV%52SR9W$4M26tjklazqwyGm zkrLn+o_#Wi)vzC4Tzspp3tMu)#qb46kFq?;U5D^`{h&-Z@|o5D0JRc%h%Jszx0p8?$|y`A@%>6VZ{jtS0@mHbWFBg)k@xOL2A-jY4JWoZ0%&}HvlRsC9uQe|?AJvR#;ne0 z3|;o8;#|&*R-hF4wgDu9heE$$`^LMm8l_N}H(AYeuISvjrr}xXuTxAL{7L+yw0|rH zTO9DWZhX&LGC@y}Kwv0j;eRlVVA|y!CvSSV%2(zF&$&<9F?$d83R<+hUg{@h3YeUj zrz*~+_%$X!uH$2jw^ta(RRTUwpqtsq zkP{i8tG0Y9bcEE2CHeB&{dt$@c=9^z$*7CYA_7+;a8rlSJ;gxdko_NQ4E z`Eyq+1F5BshTbeXt1-4NEwCdN+@)*}5H3^W%GfWqApF&^uMU$0ZbtTPDN6dl;9&AL z;-gqxY-{K55x*RwP8Rc-WOD;hwfmb+d7OB*&@m6Fx*C|CM4VLoT zXSnXBreT7^8`8gs3FeZZFkT5V?mVR8hKJrDbb~U?XQR|sG7D=xhk3$0%s|1dD4^3Y zcnVX%&no&QW!k!mQFOIszC6k&*vjZT^<3jMabk2>imEoP-|tfAKu{Eb8TV0|$zolO zL(RhlG2B_`KQFW`l@&PF`paC+orr+h^tW=01#g(wzLdejNS%^VWOk8Q(zN>Wr; zy3bO=00%h8JG_wMU;?04D8_W&Aq7kmWp-wY{Ko`iCGkgsp@I?&95>Kn-AC185aeXB zJ9@{Mu??=ul(-y2U2$`6k?EIFtDgZ-VBx2R8N{-Qky-al#bU(bs!KjPF$HwMU;^T= zV9Q7`a@I6n{o?$*;@3;QaoYNb5C#koSDck_4WYoyy6uPfG~dL{1}+7?Xhv$3;(`0s z#~Vzdt{ko+vtJjzO=cNzz0sypsv91>s}C(o5yIkp)*W05I9Z4sO?8)+YTSq*IdcwNIDE@OOdC$YPz6=<+|5kObOQ=C zuijFkkjcvjj$0S_nI-+pj;(y>15;w`D#$=|X10)#%&QNIw0-)O3{A*s_&)J8LI@{I zp!S(5scdf*FI^fOaf}0)x98x7#e54+-*HK`hU;s}`P@=(a4v)x^bU*;%^UFoaDkB`=XUaVo$20QCh~RX|#14TwSq z4Au29Kn1|bNw&^6EkQ*`(rs^nFG~523AMJkSQ*?#2B@xZ+_3PVUbLsD_lVG4h^u1H zlI9K^MvFg!ltlAjEe7a0?qo58LV)=u?oJmDRR z4!DX7AOTc1JRsTb3vMYza_`EooU^&sedWxU_=v-+^Jn2GcOh5^uY+@Vg>0U~jCzgp zq%Cx?uNliGAWWGsseStC@!c1eq8(O7wG3Ga@xyfWw^@LWsC`gi5voSWwLXp{@Dl zsN|9cRZZ7F_5&jE%%Q+g{{T{i&WB5H5SU?n=H)dEi-|~^NM9v};|!1pQMFWEGf;#5 z6v@nS5KsChL?$+juXWzI8A~ z0Tg=u*1)6~5l!!km>MyQVPh;DYRK}jY^2W92U8FBFnUp4gW_3SoU**&SI%Jn0ELbq z3>51!(QS8M4d86A7HTYWI|Uu-96lyTT`9f-hYHyrTnhu0ic*K|z92KqjTPvrn`~io6wtL>F~nw50V^f9W3DZ!k9w5b)+xMtnU$<;#Y$hyUR$a#jp3ZBMHg1+_+Ddqe!FwX7aqo=z^o2%yxFXM{6ns?6${IhG-DfwSj@5y z4sq-A0NDylkhIs2m?3B_J*}?1W?Co^6U{6=7cIEWQaPhb_k#ijOG5CkvThsFWm2{K z7R9X#NK??m#Bi+a1K%o_F#|RW#!FT%Czf&&cHcf5n1|vEN?PE&(JsPSHRv4q;xM!D zY8xwBl=*7}g{+N_9A+~Vq;{5r@V)LI=ypK3Ezx$F)ysD4Z<5?Aw0d#64x7|&?pPXe zpmMton}&ofR0?no47Px1xaDjng*?Ww_L+us9_NCEQL0*T4u;#;mI~U-bZFUo6L--H zB^U;Z3%WUKD5Ql4tOFQ5?g_$wQk8x{j3qiyHyhvTE z7@By--8pN$O57L}N>)W{i>R)IZrpMl?Dpm)DPWGSvt#*ql+&{01qb{K7#mYU7v)R& zW5|Y?e1#Zya~^fKO0ckfzi8lTaRQ65yV2_2Et+~GBv3DH`!4ehhEmIns_#R5*O&^5 zoDD?L!fefCflT~}tiB)0Vf|EtsmWsnUdGhi^Jwg*8AUzS^)e-Z4^UeQr}zw6kvUi3 z*?PVgs5II@wWF3S%P>6j2zkkiy3Sq~Q;TR32vhc1&LFmNRawJ#tlNeilSpXbvX%_& z%|kJ&!hoZZ7Ow5zG2!4>I1@f<`y!J9j+g*9n@nmt*#TM(4N=BCOfCxn6c3TON;sfL z+o^>fXsy-siLt(s%0YOaV@w2h7FZWBym7RHW)h6oDY zAQvFs*TgSao0mMD-MMiskCsBsDNZVydCuWMHImd|ZtR!&lvlMmfm_V@zYys`PA1Lp zyc|l~(uN4EhsOOuQ@R+IXBkJw0SGZh2Sre!W;+_hEdKGus^P+payz=v7DNGRvn6DE zg+Mb)0nvW`Vpj%C4Ua1WRMs^Bvz`R3+Vxn^aiws(%G6=j_4#PkV36Gbil{YoWSVHVXOwq*Q7m9R(PzJrXz>XwA0u6#cx zFw@#r3wF*k)D?SG7bq$*SNDM_qS}B1EgeC@0Rz{Kz!!j3_^sU;&ejg-1XaKp1!dI7 z&}@T&LBZ3U%h@RdJ{Vfln~OfRo;tlCb-90pF~}91xIQ83f-6^RvHK7lR;UA!hfVR~ z8~wR7VC-j@^#xmUmVmOI!fAjqlbBC6aeYbj?35XRND`+7&N-LDA`Wpc3J&HJ9so5* z4=66`+JdxXzVj$*<|yJ_;B&ZP1$%y&}{5DRz( zeWx+OjM;VXo?&cX999uF_j0NeZ4G|K!SOO862QJWeZ~tNK3*sf!&mAgH7L9aWzHvX z4`OWLfA%I72*4H??>_E2iL(N2g`+peNhmm@NW5gyuZT}VsXX7lgNT3G+}t(0{6P~l zL5a5&uXgHnFsS(pVU)x7fh{lFRf(fF+!v|(zM)FTvT=i8PF!U5QLhjKG?)hITplB_ zYOrR|?BE8zr2uT`W*`b9Gz3X5>^0 zg07oYYql7Kr~;eHFR~!A^U${HtC+^}lR0e4luF&EcU(tl zO&STKu%+;GDUzf%*kQmu!3}T*U5%P|9~l`TlC8O;Rg0=+yE-uDH#K|BjBzY(6Gmy1 zWwcR_Wj=Kh;DE&%OL!^|sp=#E#urB&N}aHxYIoSuv6q;utU?~C*0xT5ftJeIAG)J9 zFho++qT27SEQy_A#n*)|HG|U{md2|MZ8URPste30PA#AXKKFk6LgzYBn|%BnRML|+ z5qR&Z&^UMn6kzW zcA}lT4DAnnDWcV6S$zCVqedjNAfhPRxA7X(fM`}}*~SuN;NXK69W>qs8h=Q;MU7A^ zYz+BSV;%bfoA}IW6I2!ISBk2=&IB(-!t9~=hnHwLJ2RTk-e%EXfvp-;ZvD&F272q3 zv&mIZ^B-n`Pw!%)5D`_@xgXu`5gdkROG|mEWs1Y!3cwF_c5YrSDJY>6Pffd6`HfM;>HU9wFS7)5?_I73_=twuC11xs~{JdS3u6b5G z%I*wSHyGj3AL1UrO8DYP4l$ zU5#ga6u z_B&NFwJyZ#JBK2RaRw}No!=0Gddko+rff~UOQRS_S<@~Z#D>sDKrf@7JVYzuG2NPj zo6Z5`ZBh7^omucovjFnr5HBm?;iF#)fh7i|YvZ)m4zX=#Z_`R#dS97W74z zaZ*9pP2XPGxkiS{aNez+U{7Y2VtJ2_j%q#mI*YO;j;^A`1s@S;?6-3N0L=|eiX4|t zad4IAV>3mf#=mH^_QMY)RvOOZyXFxv(4xDlXIO-q$YppfFA(_10G5_mX#Svfj3T%I z-DdmTR`&1prSfU@E0%7vv-Y4kcBqFl6QM}-grYi$%)^O%97gq?3glJ){! zRRK=zcIjlLfdudYdTw8v<~dNv1bNOd`+eiH9ac646|C3UI^)9Cvc0`2gA6pwQ?Rj* z%yMNB!)UvsCy|(ozo5wE7R|YZBEDfSzD8>MiF_0$hV;Rjzc9?6bkOJj0I10l09mZz zupjk7-awWm_izS<(rXp#kDY0chXFzAv^Sc<2T>|3Q6XV{rB!z7u08g^PGG_Z87{MF zVlaWg(LIHhv@9GfRZ@z?-;~wn_bCB+g}VbS)fRe`xh4sWj5b?p+*`mKNmc-Hf~6fI zN~}<5WBx{`o@iL@(*$;0CNfoD+?Y13h3ogSsTif(0c6nRnJt-GO7E*hwq)mZ`$hrW z1|Bm-W*sc#Ly^?Mo5UvIS!PUTUp$#!A@Ix`JR~=a(>Znp1xeN{uQ`{~PzDX|gU~v7 zhXh-B+dg*crz-*{ou4@&C`b#SXFy)=WL*#`!+cSm;?bs)r!V6%5u*SDLM{Bj2BbJQ zNZF&rt}Kgc-b%ln{7u8CWOBUUJDK2JITkcu%nJ$%4~Djq(_Gv((`PioIjYP)agXM3 zBLrNI&AKJ^+5mq0$`df0C<5v6j7Qu7h-UMwgrGSW4@KkA7D;%dxDernBTiRp*+ag0 z>Mq`Z9xt5BP{z!~J`2%(!f+Zpa6Ddk>J|8>02)3&n8<9=Sgz=BRM8OP{{SVod(3>; z5kpr^E5@bRFa(X*;kI$twaCi(OViJWaj?n9TZd`$l^JY37c%Ni2a18O5S?TIn_F%U zBZ_IjiMo8CV6Zx@r;M5L9wshB2X4n*ZW2fX6$WjLXJfcyTBT`&E*RGH1``y81kUR< zjACOvL>GtwUeN=QdJIxtFL}&8-vIzp*Z8P~W3>(XSmPxkF{SWLT>xi~SMdO?)mYY> z>2mQDQE=#98){@k2pc)Fb+cD2h(dA__HgOfaQD$h(iWA@el8w3TrkKj`yY5!a>D(K z8jA1z&=t0_#dU@yrLwCH8s|=Lf;-f1A@7>bJBnw_1ZeB}i9oRGYaF?++FfiWa;Ee9 zOXiU9>{A0?e#*Uj)*&S9j7s`Ew-v~BZr?ZuUumd-MHKAm%X>t*-eU8px&}=2{KHE-5arCmP%d_Bee;Jkrcd7vxH2a$Hrv zzx7l-h1P?+dU@0-7EuoXvtP7>5sZsn+v z9gutCaDjkvlo-<{zYxB41PpWk0O2xz81!WD)bEd2^$At$@g8W-RqkirQcAubYmW+t zj!Ch29I~Xrk!$36<}+h}ELErf08V9ogsb6&OkZ(~#2N*L=xcd+my5(#7Al%)xVRrc zM~3cZ0(60E4vk`H!!v3vWW-WH;s$W7=SRC z)^4(tWsJ}QZPEy9IQ!;Y15V5519{VfQ2?zVx*Y*;71IsHk+g+w@ORqopoV}35K+l# zM<7{t07B|i$iP;85mvKNQ%VWF2eRzQ-w-)YY#dfsfsMH#Z}x?>=mrBe*YhfUbXKm@ zgL&~ZU`yg?r+hGdRnLCmdHgcvS&%oH!-E7SjLTcW$Dg!Y6VMwIh%rT@q315PGRgc0 zA<_QG`Rv9rX7QIlwL~Q_o5Ww7ckW!uk^;itV~z4hLE7xAnk_u*^DC6aSfdxi_=+1O zmWK(4CO?S4hCnR~!vj3b_*v}1!7t`;6X1AOm7XIFrQNBuSlq@<|e9mQThApw(O}>d- zpZ%`l@j}UVXzqhC3r^I&jdxP$b2lhow6lp> zb_bV6DiRiQ6<_n*+Xk*fII_#jsnzIa99V7=8AjDl^QnDdtgXIj;PnQS04F=F_>076 z9|M59W13+D!mQz+n4la))Aq^sh;r0Hepc6o++WAmQh(MWH}%i~!}?icvc(tCo#}`I z+NjtmJgl)HTYbtS+gh9LQy~VQIGI3Y1XuCIpaYo-yw;R+3xuIZ5jljK4-ULbEK~=32ho~52IZX0+m{#Fq z^B{Diz)XI4;uyj~QLYiP<~S&+Iym2{VA}b0^AmP<4}kmpOQ~BH+V|XSqwW`*x~+_# z2aX$`CIk{A?2a|gC)3l!4wN?j0yIi{fD2?(O5id4i5A45l|&R*X7{;H?qEzBCS4qf zp&Ax<_B;{bY+Y>gfX$dXf=1~S-PuJtB4Tf_ExIX|ge+=xFVbN~y#^owye8H z#4?a01=b!rm1G zAv%*;)WxATU3>QwxlCteEP+;uY>#0pq-Y)NcV%%QeHEZbal?(0&9bZxJYa;k#S0>_*>zG3Z92MJhufH}agD9@BoJjc40v zQulPmLn^SUtViSicDywbnvL8wg9X;@@fr%Nc<+0n^vZ>Z3&>NJ`F_&CB?I?8YEutD zv%~ly;^>f^k+n>d&)UsJtr`pL_7jG0<4!aDNc~Y6C>#_`m9CV!-^kBR*j)q|c-GfFy4q zPsee60bL1wV%266kC}d8U3Y1I;J^H-tTN4}ueg@!Z+VBNp!~c#Zc6 znawUBN*IU%=MhTg!M4>Won}%5+70KM!}BT?8PEkiGSnZ_pH+JQE0-^Y??)Bpl`-ilR5H?rE;Src`e zARx3u0M(6{R&)G(lIm#W*TgZGl)>R%{daIed*J7+Qy8brpmgE28dkXD=5>Cv|FGvTt#78 zbbk7HQhS%zjcbpa;KrqqkIloHKe?79K^Q8}cz)!}V?xw5dw+02=Ymdk)#L3BMQCSr z&k4col}xmIyVXLNtW@N*ss8{G+W?kPd8S8DOYzhi73V7aej^_NN?R!0J-BKe6}PFtyJ6rROpTK=AAWxF(1M>Z(0)73a{-cw zW55nHejr0ui(L9JId?LWSu({As}$fb@`1s zT^R#npE9Y~Ep}@>+$zk0Gm5VXaWDv79+l=fU@hs`Lx3t9lrk?KHJgHj;|v)W{fJCd z4bg18b1d{DXytpY!S7m{1DM4G-3UL#s-ghWj!*Z9BIQkkca3$H5>PWEZWR`S#F)y+ zs@x~HkQz_T%_m{E+`?F0@0V;2Z-@;A0H(KRj}vGxJxc!oP*)bf)VwD-{E>GyMe=ik zB!sjUD`+d|&UFELjS;X$u^HhPs0K0TJjea9(FSXDe=*k6$-KMb5gHAT`KUo{gC)EC zYAHHF$r~TXtieZz(`P<21=0f{x@yYn@ffkFCmuTYDB6fwSKK|i4f86_p$KMxc72(H zEgYX&!c?Pka0=BY5qk71EWzOZ<%eXPjs)X=p+$%-9@V~TbKoFxhTX=n;cQCEeK7gM z$j>GEZs8PcY8J75VU%k-v;nM2FIWsMfqiS#)6y;UTE26y5|Fi)Yn!i$kW~)BxQ3HYl(q??=byypz@jTAGL~b^Gs^_1zAp*SxGt$|2B&(aqQvuH zs^^c#h_>8Zn*FJY4dR&9xgTs^m@l7U;i$d31(B6Kiu}V-65Yt9o(8_~gzZ5of)BK< zX^-l2VqsmUThk28=g{P?%O8l*RCFO$&K{pIHY2%Oc`1(>j_HtC&4YzqJlq25s5Hn| zA;7$HfDmJzE*dMx+kB-oRBwRJGi)V%!a?1~--n5*6i!-h=XsURT9rt&)#vkyveMYN za`l+^jGDW3{{SK@m@A4t#yDzTu-#iLGoyI@p_FoGbzX)7dDfwl@>Et}P2P@l}u5uhGiD#jgk2(F~j$JqD!(SXsyrRq9s3kVh4~tBF8F90k=;TKh5A z#8pQ_;QK%Yg}`mGc7q=>&Gn!=VdqZ0MKMPu6w4+y(=9^{g#_K>obS|B@CnM@yjR{- zPbXj;_`lj~l`O$~PvL~hU@^P#>evvP#pu(;5y*)~yqW(1VmV8Y<7H9q{AON0fCY00 zkKR)i>_MGRY;9wQsDge$?L8HH0= zw;Wu5u>nnixPP7|EtFU(84oou6Gc$Azmhd34?6kb;$zNG2X?(~SQ~W;J1N5THh>vX zgOGEy1pZ}`%kMRQXFFKc7qeqV{1E6%_-SpK@Ar(_T(x!QYR*|-AOY}nVsqr6tM)v9 ziJZcZ?5Bl(BSx)8c{J_+03w$P60bo0zdsOcEdvW^cuQrF8ZtWKCybLz>O} zPDW8Ie;^U}EChpChwxqfx|FA^CvaC(zr-uL<$ohpu9(U%^j7$Ke=|!)PEZALR1ld| zJSbO!!(B}LyltiitandmsDZFKNW%MOpHLh?i`vQ|OlGDs!gidg@6MlcpdNW{L zp9hU##9?co(41JMbH?nKd!^uKKpDod$_vS86IIG51P_5^vrX_$&(tz?b z@fTY!*)1>0cVBI$8nErU%F=8(_G#`klJv4M&FICz!y6DfTd}Ourseg(e+Ay3 z+6^|O7g;p#dHXPUr4+Ec9ubQ{Is&_6<@>?S_`-pjIno-~y3)4IH;nV8>LNu-irKTz z`k?ESAR71%R;68LH3F=T#%`Qc5R%p}X*xuH@cj%yu`Z~;!|Dr|0ibpJO+%ms4*A&1 z<}?V)G*h6L<|)Ax7B`Oj`!OMFO4|poIFBTa7esV_*sHC_XWNm_*+l+<1C zlBjcC!Q8(gPB-?IxJ(o}<=69>U2uzKa>v>h-%wU4_R;Zi);LS&JxZ?6YZ_>Ac&+m} zg+X3Rd-;{5(rXTT#2l2XLt{-DwZy9VH4d9+xl|R9t#2QK7kyEOUKA*E=W}Drj9TOF z<}A5T%^6eMUTPnJ77POEN`$Z(LF8Kboo>LhXC9>&uaMxT$X4eI?5MNP;suZ#kz$b2cJI_f(7FegtBoN^Ey>AdARK%w1*_+noC>dV3i}LoE7RorL!J+qa^VzY zP|fYk1lh(G{z7tUtoNFu{mi4E!maWL8MrVi3zVaQioPjFD&LMgVh(`YxVrhh?huB8 zSRuOReC(jMzunbNUNe>(x9=A!oq_1iv+FXV5Xbo8{Kf|tIN+o1X455v7| zhZ+9>keay$tqz1KX-yy4K}D1vFGQ={b*m zj#G#3BpwQ&F52M|pS&NIPy&>p>9Sl-igH-}{{VSpYjAEa4}8|=q{)IW9a@Y9wuQv- zoLKxlMdu}y3hd)S?xuN`0%rNcxIrP<=NAvW-gNka%bOtJ+0#WvrfOD|@AqY4`rd~* z_^7)@fF})X7*zwc&^f;~a|p7ye=cQ7w^?4gr5^;oGgko-#hbs{C7vDRZ?LOg{$W-M zfzztsv)+)nxM^(>7_zhs8RInWr7Qy%Lr^r)x}?vSVt`hIXdK&$Zt1!j0#&Z6R}KIl zc&;gsxeezFF#+n5il}3%zqtfbiZeBqD9c}J)T9)3P~9WZuI^vfW;sD?x14hf!$zDt z4f0eA^iyZVdCZ_)Ic?&fas*bIyI= z&vQSJ8oxh$n>D&LQUct+wrZ2SC0HuM_%)VQlI~W}ZV}*MM&H43BJQ@yVS3iT!x*tJ z1B=kq!|0PwE{zVa=LG%9j!IgaRZSs3ZY-12%}hfh_Bjqy;os&{^+#6yY@aiKZpLuf z*Eq+1=pGER&1)(j6e!phg69LUbZ#FIjncbQXyTBD`i12?gmLniI}?)(K^%-|oH>q1D!kSE-!S*gSolCzi>ZwB_`b#YI)mAaZlS}z2 zAgn+I7okU9={(6W-wyWU2UX ziWjD!3PNA%RHyaAT-XRa%JZtooRsFbjL6f9HiS3IK9M?4^J|qhlEdVz!i`Y@KmOr( z;$v_H1F)V^b!ViCzuwBEC4t;D{*VHw;bUdg2k=OSLbbuaqWm?#2oey;wJK z51LcA(`{0qw-gu-M-Hu8a_avH0p8|I?jzOlHWHn^uhd?I>Kwm!Et0}fDXS1m_?mA+ zs;ivK`@*T4yBMa_RCYJ_^wG!758()c7&ds=El@fw!s~sQr3c0rSj5P>WoMS^#m2Yq z-X0;%_ilLZ=N|nL#C5#B`%RWs>~2HJml%)+efjOq`>>Sq*oOhbtFN{Z+4q2&cex5N z#1x`wJE*mCmSLdC8N%ZmzQ%tZBkQON8?))7s$Wk;qT&RTnLI>3^ac$Jg(CD6Yg=|t+-!Kg@Umf{NT+5#O4PH#;T)Lg+=JQz(BJ3@C#>0x9#RkF-R9LTtn-7 za}ZDJyCzp3;7*mK#nU`DK5}sm#Scj?A(Cm}`jGNeMCfbb1~tc`PxgLa$iC4x8uUjv z5%Y0oV!XbM4gAYL79rDGbk5+6Jy_!7HAl#dy5$O8=nG?YsA??c?-rTtx=1w z-wj2VT(y~PDs9w{5xoK>4E1kgm~=H}9?&M7*Fi6f_fQo=w~C_`g_YLuV~qLMmS{#m8f zQ1hpvUn0yxFC{S>8ZA$;#WYuJ7q$66t3{Y>mi+VUV~y8;D+Q%7LFKAW2&7^@f2970 z6SW7mQIT4zoO`)LAO7)buuty~$>TGlfgOiwFev`$1E!Wx(#!>gf5>k?%Jx*o~3ThqMk>iG6w~7)`Q{*?w4gOiRjV@!T*P<4-KE z9I!1FHLIH@@fM~0is)8MOLKTrQ~TNHIGu!_MgvaUM|R}>#EIL9)`Vo=l4@>4Sj`g0 zJQEr2`=zJVEtxk+z0kN`=JFy1j5y>D!Uu~MI9J*|cF&f$#p6X!&^N=!!X@b$lV#-> z^~nu6>-FyMQnpF%d%uq~1yaz_J_P#v2b8rlDbhD-ew9;^$w)M}Ji2Bx)%PCEG7MvU z{sn*XPsH4_N1nxJ3I1t?gKd+C@SIs}%f`nu9Zd%U>Uk=wzjGF;ggA0y;LCwu-K6iw zqt2b)%UZ>~d9o3?K_w=fl{a7xYi;_KHk^tr3>*mmy;Xo{#bmSYOGef2gqQnOg!DP@ z7!0{JTfAvr&sNU=rc2^dV~JL89y}+ukV^R_r<>$^@was=%r&+AGS*0@i)^dC<4%L> zb9IFW$IDnGJC|OAv}pe{xJn~2=u&J|A;3Y9#i^;b~4SNt?s zG>ZJ??`h#-rmn7!&-csv$5_@<_bRP4R2|%7_DIN_`+~76ZjiI<~i$`QlfcEH@4^(T3Hc@nu}a>e&GGAzTH zVJfttyB+m0eg&_*8ngN$FTZR^uDsOmC%GFb--*tOV0p$r;I)3$+xRWCj<#E@N)9-5 zen1oDc;%0wG_P0jsz?pHdfoSfc=+cBzcfx~vJ&;>>C8A0RS_{E|B4UlmMFoEJpI}9 z(hnk}i)4ql2~S=LLcgdwmpfG|5ckbY#Fbd`2@&){_1m1*k0tB%Ix6%Rt=Rlymn!H< zp_zyTn=_%2O(O?KLp$3QhkebxaW>sOQ(Tmitb)LVlSRYx0-M*8+MYiNz_uPF%@PK6 z`-4N(IIL)WtJQ6jYN%knJVmAH$G+~U5JC%wv)K28COxn1)dch1`G|KS@zVGhgZ~TS zOeItkG!^`gOngTc*mIX|hoJsq_16;6t6b-QtHh!orI2|iM31K};_f{cJPUYaU|dNi z?|MX(rn828k65APpf=9_z{l4N$VNFToeyR{j zket2wPblmvGe}TOSZgKx(_acL-miBh`^2%K`lOZR(S3%3Rrb=AtQijtbS)&TBi}ZA zGE%5JtL+>YF(7WUD0)R>(>r2nA%A=ViLO@vzWA*t)t{c8;YRL#W%`KQSo`15>?Gm7 zwqB^ZdzZZ7i6%y7?%8HGM5mwCD%tez6~%OFz55-4@rBdq`?FxQwX$OosEVe#{D(u* z`%Jiwv-E*p7PleyboJZDCU-jRV&9DeSq$Vxa%x;MG9je{!31iq?OnaVFQmf%TlT@_ zQ?AO}t}mUcyYWo*OOW<2f2MtGSBA&4htbixL?QZYDLF@D=mA_hjZdIQ%cm!Xl@CF5PwhPN+rtIh$+qAifK>E| z%8uLT(vX@2uzTOi^CMlVR1C2k9gn?RuIERnT@R@yZwhV$pB%XE$eR zbLaxc5k>+3U1CZ%#l{xaf&0uj$aXnNkS5e9v4gPAbmMGKWLtyen2IO54qYYT>s>I@ zA^$D&V9ChJM3gtU%|DkGDKJdSGua8jc?Gv$X{)BVOSQ}<%8N*m|5Dlni4t5eS~Pz_ zVJ*CZKO~(p6%iK6NH)lm*SD7b0l)w4>*m8L%E!Fjpt*$0I$9rwQcnTcKT#G>(;{5lp*;fI+8qQU~+UHxx| z=vZPDJM|Bp%0usUo9sSi^x2j9z7L_U!OKDiT@tJ{GZE^|+0V5#@EAN-K?%vtjvIyo zDYQ*COuNov@E+l2dZY>YIg_M(m)b~)6*D)q3mK&u4e+6xQ5+!`pJe>#w%EIiFUcu| zP*leYxF_k;sk3so#DZc?CeZdas#4AUkZjD%>X^~|kRxY_aABdKcKr;P^kR6Y%y^Dx zGdf-4qItcszxfkIKR;$u@iOJLSd&*P-_|40xhj__v%*U_q}H*BAZYm?sy z)UdCry8?0MT29gg@JC}U2DVp-mfpdS%RL-72_$_u~19%Q|CJQJd)nX75H zkZ%{i%hF!F8~3C0(DhB+!AZQ^RNh^G<3*ft%P#zhYZb4%<)Et!h1qlNh2-duh2@hR zkYRrQL5XUKcRw&!i+DM*J=7!ox*x}|R4sG-dA+FtT``WF&#i6plTb_7N5Y+&5e2G_tEfYARDH0_V+cMr2X!2ga$N@U!GH9o_P4PwK zsY?OPJs_oW+7?@K}M8==9m?3h1d^O$+7QbjxpF=-t&9+I^NAt61@sYR*c4 z17pTj{b%88L5l(LF{JSNC1O_@WCX5{yu2GY=zXoYk@=a8`gTYycgW3m|DD(qQ;o&E zYR@~GibEXodW0=ff5j$IU8lgMOp(1;+<-shOE;Mc0p0LRWSL}EmQCR1mE5?%I2)$y zr@u|>(?_19(3;0Z1__eQ^d+Cy-RmQA`B>#(EKj4J5GBUt&adwo!=~`22bVGrd4KZn z5%K6 zKWB;hPCrBe+^v>|TBi?e^g}WQ8g?I$M4dWSna?_xMKcL$Uu<_NerDseithoZDfUI? z4JmJwoi#}UhMtI>-!hNdAJ7I)8t=%|%R+a<NGuleqa?fp zr|(H}C{x@cntzod^zols!idsOt1n^@3H&}@zYF#pWxzhHjQVVP4J5AOTCNF1oXpP@ zxe$1PCfw|heWQv;hwTr2jmn(JVph^u@n@w%$>Wk^S)$IOuvlg5Vx%Dk} zZgp{?nwB$`b5=Xb!_L3xpTBcy|5U=z@~r~-r_Pe+scGE_b7mY*($wk4ZLuuIETqZM zW$xRGPLWtkk*wiM>V+jissQrYL$t?gnx(`s>ry+&ZSt#_PIMz4r|f!f@2+%$h3<4f zJlm%c->*&dI!<&pMz{H${a$%BVY6oh>TVS`EO9Jcu4|`Os7i>4K4I&%QxI-edjjI$sQr<&XOve6~zam+A=cG~6C#p;nw;iVj}k z5w0sPjMrT3Vtn&fqJREjvJ*wZNYBcXDDg{S(CiTf6`LpMr*&%c zesAubFS|1tBWxJzMmeReCpF_$LM$=FsKSvN!gzRGR!1D$u$fSQDB6O%#OpkwpIpmE zAqRJM)}EOx`ht&}8Yu+Gm`R*Sj^L~!Qjb*Z7$Dq`>)<`0GmA7z07ExRw zY3twAH8MSxM!I}89nj#hqgsQBmh<5&qWe=MYxgyELL(IP*0n(z6HYzgQr%A57JEkBLfp z@wDmZd+Qm)enD5I_!n&kqk0)k?D|=5qDcP!PSc&i&jdq+A_?$M<6pVIjwp*hb3OBa zN)@a{@4|+kIA3O~qyJhsK{D0oRbso^P|f4HccS2;UkIP@Et8M9clutwe*U%+`l@^t zMq(RlysDvJah>r4pAjl6aT@<2|6^Re_a~BEUvFcAcE$@sb1vxN_@5Yb7TzAgZaJX7 z)E_;C@HfHL=5NdTws}Z_{_fOqqrWy09=>7wD}sdDbgJlL41a-yNZIZD>c5!**X`)< zW4qzwjs>G`bPOu-ZqkXK3LF4apb#~#(-iwg`A;*g7Yz75eqW+%h+O-$%6r%}O;_>< zBnDk|ehUogk8iGU*&O9%RsI~h4SSI&FHMnH_wCGJDFi=apRS>WyP*Mi(UE{ zoS&1me~DYyTJ_7muPw@)hfagPy8h`>r|^T>8vMZnyu0w~#=0gZ;WTY@nzt>r--N}5 z8Gn8J_Z>s^qM(4);*doiuB~EL)M-{Egy@A*5NMCpufFhF=?e5BY6p-jKI9PCjU)SSS&B z&5C~X1EfF5u)ihkMQ~haE`CuKxuA;sVejPj0J?reSTp3G-b-y7DirjTh;-CxLp~&Q z&b+EX)A#XfMlw;Y`S?qKH+44EGneRxQbH?sL}fsTm~#leQgX%}Ko19IAMAb`PWz(I z-=K2d82YVJ$U%)r-f2NYb~cRccASU_rNU5q<;VmeNgZv`7a4#(WzR8ov~`Q8*+~fi z%BJ#L=^9P4bJ)-jhV@nIX-v)wYhJWejm6fpSJehoS;$-Z+qUB~QsqH|&y7CYbK~pZ zu$;Ur|7wMimG6j}QoUg=zbm5t?edqA*nDz>RNrlBV}^6Q(b zL5umN6NUZPZr=kecnrlAIgPrFPIXS)7m;4Ef#Ow?2i891{%1#S>OqyLriXTK$!IS{Q6{f#-n~*q9n2m@3|s$(AyE7C?u|6I_}*p@wyt* zf1Rr>Y+~{}!CZrDsUSjs$LS68sgj0$Gkt~}y{obYp-GBB)DV8?NAV&TUXt;vw@s{k zTc@?m*I*Fe4PI@J%UAM2L;eQpMRl9)^aPxc_rHsq!)FF#bc86V@o}J<#das(wntj| zf)rw{Uk_Ae}_>arT zgp>1!Y>i!o_+Cj`CO?uFm3(swbiq^|o+5P{*v#xxF&kBbbm3I(c)jg(E3h_kYG?2i zn41MiKtVC%d$XBfC_^zjn@N;(_~4hycAvG>qJJkHHaB8Ck>E@kSQO9! zFj@4vrucxOmq< zfN=Qx9NKKYmIn_Piww~kZ_WErM)Yele0Lllibk34hxrN1xlA+m8UNVWH|x@TofS>% z#%7Y!sFWwk1OL#s5SucxIBl6`sA|HH3U?M+iafol(Rn)95m4xdZSzr?j{nkoVl0zM zWS5=YkY<5gA5@TWj#92;#VwEr0$y&?C!SZowtF;fAS1WKuCpz6kpw4Ii2BUU`tlsl zS9;@&kHpr+!tXY^w!>Co)zXcyH$@qeZn- zlJOSaFV|cQ7dhSs zF(MwqrXk?4Bmtf#JR-G@OX1uDpR=r*vbylDUtKz>Adax5a|;F+?_Rv8>HmEQh8~b3C2A6hOz~pbueyx^eXNPu7|m9 z=Zdh>Q2+1y(*)%+GaNEoS)hzC@5(9Yky^!Pu#EJIh* zxEDFS>?}Cpo;7v6E0MQ0=BD(42EU{Ut321UiLk_y_0JIs4 zh6{1R^C1h1u*rgb4JW>B(xjPqUxIUb<55^Hh6I+|&iZaIWc6tC5LJOALQvZiT!> z(B<c+N4pjBCwQ0*^|W0v$sws4up zct&?0St@vh#Us)bEHmr(bshnDrC- z9c3ec_!UOcNQxcLQer8kvxNF1^K{@8^M}^7?*)(QyjOp1C2N>I-R|<3aGUSJMpI%Q+xyc^!CJpjrDRZ zx~yi+hN^Q|vf+NPf+bd^$<%OjN~gA}R!p6RKZR_}@A*;Eo#F`4wMTzK;PU#c%!XSHW;&W7Bfre@P`w(amqXPxMmoK#|1%aB9im#|ZaNA&~)8 z4Z5_ik>14o6Bkb18_|z@z%}kWPX#$Q1O2{MphQMrN9GO6gzy=ZlR7bXcyQ*5*okRc z-n4kCDFS;UYCFw13fWU&=L0Uysy9?I18u=PcfH@gvdnoMYE#;?8$9n+&klZa0F_Ys zH6EPaI`-%o&8ZM#Ne_ntoLSG)#@v+4x^{ag0hOe-zLt%piv}wc8MkqN8mCS2@KAKY zUYOMXUaV?BDO)5yiHGRX(kd2(g0Yp4iKV{>!{68>p5x^`yRhEA%}VG z!~C8-`Qat$mhKUPOA?97hI&)Uv3<7(Ywjdf@05_>Mw^s|+mzNpg*JsX*QpC3O2(6z z>J<;!{O7tF)xj~rW0a|gm*t@3zr!|hk~jrRHE2tm7odMQs3aBU?Lkf<3gv0K`#r}^ zwO>Ibv(~-j*!nkj+g*1{nveU^oiCS}DL3gKcjE1AGe&v}(GllD2xa;0(GYEcHXt1NQ>~WTDQL+u^4GvKW$sVbD`=pyP z4wlL8CJ~!fW~KBYC9r@h9%tZ|I_RO{%^PS+R4UUM<7RB6J!pr?pPZ3NQnshDO+PB6 zg1stgUPZO7dW|VVj@M}5R-spfnXtUQ8-xKnIeNNX@i-Jk@&bp^_>aGN);`odrx8e{ zhm{gNzHcbFvt^@y`w=)wNUTcwdd0q+7Mp)Thcdtc;L;Y+#l6heSD4i_P`Rd`X09i= z%S9I)sxvtSr`bfSiyxi7>Oy;ydCapHI2Z}1*jRe?(3JN_S~n0nSjYTMIo@8zSHhv9 zH(ZlrFV6l%Zd71PYVLw5`M{a?h!OPi9|}i|1_uuhmjD+Zp8%Ht4-XF?2Nw?qpN8Nu z7YIN|%}vWGO2h+H)S&|_SkWtKzaxGEwMP6~!Xd%M!^I`Rxs$n@>akc2AW^F`n`odW zhXibSgK|2`FvHDqXP|4)lBjFX2PZIDztx9+Pm(bFnC@9d$uu=dng}Zr6u71pvc;c@ z6k2B5Y>^{E>!h~;^*c2LmYJ-~l(^W(`I%z6B`LX^PXh;PTp!Mm&nzC$up8;WG*{j- zSBJ|zyF+r(9A_QK=wufSSj;}~&i6KQ`zxMH}0wY{wev&&2fMkTpAhS(DGvzwTX{OZvaDCC|ydu;)UygGpaYJ&Ej z>9XJarF>{ecHQIU3_ltEheN#Hz^ak-qaPR%ki@$Z^Xh;PjZckosq+V6NM6-iGbQx5 zWm*{-xL}7U8L|aPN0J+$3{!w?Q7b(Bpfq44?_xb+1_bvdA0?+uS28!PFr82G*6GRN zGJt&nc{SYP*~*JJMpAVnj&oXG4r5M8g1&)qki+L~s9IN0nh}WP3J;eUSPci!KL-|8 zsY|nxIt=bhGF+c9NS)oOx+hfT`vS4O(E#n=6GY&{=~rN?IxC!v!#2;nSOaKC z?oh@$d)kZalOe;5$PkDU7#B4Pl8PbV0a7&d+{itw-d!JA0ZOU5< z14f{J6G#r{XYxbVFyO!y3>d(dddAn_5IUfGU{p)4*%qS47zbZ8hjSlOlLwETE(9VI zT0@%$WxCpt*#XzY&2n`lA%P2MAh}j9felJ5n9j^|g1n+-odC1|q#1-##A@i=iaIP-}eTYaO;0B|G;@Zki)gz=u`bSai{qYKz-eVyBW% zuWw)&$L0y_>J$FKL-C=|D~H~tCOl^nh- zCgNg$yd8P{3bgD+3}|Hl8se$cfE*KzbRK=CubgO&A=v}hT$zHBtV#M`0Mn5K2c*VJ z){nn|c=ZZ3SRQxt+6BAv@;=jL%I?GYf1vLN9r;}y_+EM6FI){b2PT8rcYQVZR;Q~f zWarWkx(VvA?jK7l6=c%a!>ti}l=3GJch{#krZMGe&Js1{@c!d)G_pgC^BRP z-qut9c#DMrFUOS2T9VNifcuxk5`Yiqo)8Ra6#-E^#)eMN8wU+hRhG6G&m*q=1+5a@ zw)wi~71)V9sWJm25x^pXjP~sT!uK>pu$`Jouy0P>^)&iVE7K zMFj#;h4k}+zZahz;T5Ho0t@v}crSnhBvY-_BGyl;5Y!XP`6u=T?5mT-&w^HiNtuwt zJ-R&`r|UhgC7zPk)DNqZB|)ow$H}f;F$tmDKf{$MV7O6`+_NL%7Ecanb{{x4#}j?P z(Y9hB8dRi+YKyB@EqHeXGqQMEWZN9ioy7>zK~^+Bwc6Hi_Pb^>XNuJ}PX0wCS5NLv zFL;52Y7FK0%w)Gs4#W-;B;H#q#KBl2z?DDSx+e@(03VUx2auEB=k6b$-gw5mZ3((T zA6PSC*!yvja0D29jFG*I#qfa3)_W}WI6goEOu%@eW4%X#U4gAg#UZ=zqI8U|RDy7GXqwn@l4_C&8mhtIj%g_hD$C$(A zww2R$a2xh*r9@w$Wznz&WfXQV5eNG$5UtO^W^QtNlZA9=F8jk!F| z3?55RVT!Tt2a9i6OD(`o9LBDWV}vBr*oHi8aaw4c@Wj+@Q(?s{&pZK4nQ%_CK{GXH z$R6HPp=yMHX6@udJS>I4^^7j_svLI_O;);%f z!g6D}T^vbrS)QN)@S+?McwS#$T?IBE_sl{rx4(!$=swdo#Trbi7&O6B8a|-B_xu{rg7j2Al5uw(2gdNV zmZt1ak8`K>o_Cad)NouDpJ;GiMvlkas{&&rQ?p2fOc=asFo*&1JQ1d(+e}}^*jObM z7MQ#i4i;<4e+Nnb6;hPWhM@QC*dHdlCrd15m#An=y@t4CpntXgVSAM)^n&h7VosVo z<_>go=UAjID7BIsYLjYrX$YbuA$6@}-ibhRabSWH3T#<Fdr`i(Tp*x;@TXJvm^hJL&W<)B*45`#xea zZbHQ`ScA1cTS8<@fTeG=E64P5HyN;lXkgz@$MAT`B5+XFM!&lI8jjbS!Qya2JQ#p_ z7&25D^JsRpWXyv(f2Q9=*h1b`pC#V_o7Owrnhnt^(e@;6KJt>kcKK-em2>KskzXWP zx~6|f;0mLjGRklnH#FB-VIj2P8YzjKYL;vND}=rSG{a?%0S6|{x2E=j?S@s0D9v}v zGi_|bMK^K9U^-VLkZ9efaSQ;7@qg6pRh7)A@d(pV}GoU6?+f18D!YAWp*tyd-& z;AXLI#la7Oi&wC(oGj3Uj=UNK%5hMe5I>V-iZ)d)^7?QAA&o>0ae>P)Hmi7dzA_Oo zY@~;3zYK33ZzrJU!-nvE-5Thd(CDiWSzDeO9{za$(2Kbrlu#L{)D>z7y61a5Unjp9 zo*o+`Ke-VdQ-yAdIh;CQ+8eCt@O~5waDYuEeEPVgU+>pRr1$r=;}oZ@Us7honRC3* zyH)NjQDT5jvEHp}$p;ruv{t{NGH9zxs)G0?i$1arFI>1~fNg0Y{T=On^wLBUO`RSYUL}>Vn~n%LjOLpONFIqVezeEp zGgXQ<)#&vNplN?}hUb#NB1<^DVgRE~Pyi7e_)-DDHC9J*?bkzcbvds4mQx8@B|&{q zvtC|;w|8)$cz~Ef2UHRW*}r*>=1*^ok$6IZl*-oXO7|VAs{pM#d(*QE7IKV+>8{6h zy*tq@(f=x3vh{`bzPm_`unIOJZskkg<;+Om!H+6Ba@e@=c$ZyC0$_?xhe_y29e?&x zt{p)0aM(vLV{uySd>sh0z&kPUS#i=DGme8A##$(ZNrk5;Zw~iZ41ALQYf<8U$0qwC zbx*)GDn?)#?=feE`>r7rg(6E&2!K;<4#^LYS-YW}#Cr!fZR7O+4Bv>krGDp6EHk;Q z(awnV+-?XElD-m@Z@c(xQ647sC$5Piws>~l4mSw6(1eW_WaU$`Po9BRTDHwAKT1B! zf_pRWyn0qFt^k!vM+16V6DC?iAaHN#C>Vh8uTQPvQfp98bgNYKI-pcC8yy${J3a6P z%OK;S{vY9+^u8eJ>^od6tXl26XA59zj7_WyrLL2+!Sa^q9dtcw+)3YlE9D}*$Y>*u zu3N(=b9}TrJ1bfe*bIk)y(&y?i4(PQ9iz@H+9zb0Q)kb+4Q529;e}lv5?|MZ8?-*( zX>Z3)Zz{|&)oNZ~XrAh)n6s^cOkZzW;s9O;6Ni%>kYi&gXa(+l1&ASWZHPewy8lj0 zTYj(=XN+&Sr2=68(B!@+<6Q&zM6Ofv(8{<4D8jjAw*cu4?8t^F4*!C^bmg6>(RpL#W>u5h++(bfdMpT$IIfM`6@B}ekxg- zj$JO{|8cugXOTERv36U<+augEFk&k7C3eEG{WJD^nBY&nx_7GOck$qy8YkA$o307B zT@7cW>bVvHFmbmP6S6n11O6;{aJ?ny0dmKbNeg9CZ3j4>xz_#sJyZkeV=8u{X(&tl1ZceanFNL!T~QYN|u3z!ofD?1D=a?a)R z6G*8J4yno>``2K4?l`pdnc@#}f6e~M2SioxV#v!RlS@hI2WxHcJ68IJ7gwH9pMhn< z(^n3dFlgCctCvIm$S@8lLgxB#nK36}T|)C)0O@)iQ&uG!4PXk7kxLd`HdJqOF(|s! z{M?oNUQji=1^nk@?Y$dD?x7vHhx?+bs)B-5Q!Bkxv_q3fzAm#6BgXNh2Gd(3;yn)C z{A_*tq!bkOzUqy=nEuZ+$3XMgrEt?7=jN|FwfA3V8}G%KLk6hR%_Dh?sHh+9N@HDQ zpI)~0wx={{Ez`~+z%n6l0$yDM6P+SGi?>Gj$EU|utr`v=tXvE@Qj>xUu#le;LJT~6 z@h5t^c~`!~wDQk9G5D?BtjG@{`NDaU{QQdA7T_B!9yq8{mChUU)#z9%X_jus#GPkXkn`NbS2Qe%T}#55EOcU(bV~Z(bNl#CL%&hg`}oB=4g2c z)r@!&`hOL!OUDk7JfZTpI?SvkQ0?vBo>Qncnxxu zfV>uufA?Wa;9Z|lFxT6@m#BpY0%G&4ewuMK4!LJHRoQLF8@*av|F3ukDR*&|WcQ%8 zA3Tt}xlGJq=ZW2SAJBbh6v{cKw{aIj{?^eK0yt7|<(jF6*=uLT{Umw%hv6Cb0}noB zN-o+YG%B~N{4|A7M?TX|5T0s@Y>HDGHY{m)2V$Zib^vm~uz;TfibTsodKW^^1g-Cx z10|(*b7p?Iv%Gc$c@@oj1wN-?a*VH5Zpj62;inO86I0wJ}*wp{;4_{3-2N&3u~`qja9r{e(wr8_zqn`F|DW99Ma(3xr*wLHddU8=JPI!6ZU|~wM(Tn-#$3{f z&c5o(Ad5@LI5lmLfV%*khZb8Uw+#)$`ndo!SZc&-50?pqw?{`tenLWkM~Gg;)07t9 zWC+DY^MD9bzp6rPS9se*CGd`{7_;^SX(g3iB@lgE6iJUuM{K z(k@3j_SdpboGDbByrL=o=IzRgCHhiFiA^X%Q6OM*(4ddX5ODCeal~pB?mL`U5=d|}xg=^p9kmx0qw+alH+@3029S(C z!kQ5BjxbOQk>P}>NG4VV3LG0;3NAmcF=?-hntmVl=L_}6uC6?3;t$fc4t6DZ_s+ks zhADndb~VS&rx)e@7s&Wb^f)7U@=Ntu9~ZHZt{zZmrU^!xtzynwJa?Z$L?cMbhJRh% z^J8*pZLf2;{uMowMeCexOZ+5^s-Z1Q#nX7?c{>p|k?@NXOf45lm#;t+nteN`qsGH7 z7#@Uv7}Bq#T4;Q+M!qVcIU^ae2lvH7ckCq{q5uM89~mTS((0T)G~U-5F2*f-v%QFZg`e5X~te4f_q@~YA-~0M+k>;?2SBYVExPpms!P%H8tJ?45@pKnUEqA9%6WBLx zfJEO^Gp}3(YXDqah_ya7dqS?N#C=3eu*`xz3e)nUY^Km)O)e&l4-qzNS6)i{+jhwt z^Y?8o*$tcU_=`WP!fDmDpP7&V#w$5ZtxussCRHC}vuhLjc_FfQ9PXR|$)feK#Yd4_+LI z9|~8`u9Q`~fY2@~L4`yduTj?WSwC5#W>d}Uv=-Q1)6rASaQKnZjDN&Q2pqU1X=+TV z`WbWo^2A{4azvj5h(+45AyG*5BZh^3Fbm?)&`Hm~de?UBz}3a{oG!x|?HJr==3@x9 z0v2-_H`8UpR}^@8Ik)ugOpL2MZ>A5bj0aN}TB>)40+Rt!;W@6w@W6}MgaBWeY^@E+ zzhry~9b9|3$fiBN*wiv({lZ@gXsn#jqYDPh_YO?8W@L7!l4)FuJFFl>|UYK(Yts`BfnRv$4 zrJ|!(U0@(a@zD~H+THbEIR$r;!%Vp$JCGU2x`m9)(3dCg(H5V1u|Bd6-^OT`}w*;XdZEwz!-tA^j_ z=nOHg)l*N{TRW^SCm+z0TU)Nx&^L*k09YU7j<)>v_eYKxrvU;bA zTrPhEYK<+s#EiSI)E&_Kx_&bJID4GwDf?=Q)HTuOEiUl;t25PVzrAm~Ij`r>U;GYy zj@7KfV9VH@J++zz`M=zNgdDD%Nmvu3Ow*yW$2lg`O)MLYie)5{e+rNp^)fZ@ni05D zO2*Jq4YB4j(V@}N0)s!wDFt&n!zcPR71|vk(3M1Z;j)8nRzLVrug}yNC9L@UObalbY}U?!!M3gw2F@ggPBHV|CU%PjnD;k&+)*gR2~$1 z$}lOHf{QsYX%}FYBAVL(Osi5uoUGOJqnn}>Q+-4@Td&&rRiQ)fR_~Pz`WF!sRk0OQ zoU-#dT&y)}WgsnsOsJ@~pxRFNr2{ah^C61k!yO=IA~x#|i&y}zR%Q@J?z6`OW+m@l z)_E|Mv+K4RpC$M*YVpF4ROZaW?R}gm_sCzNC#@i8x{xg*^a+PEoGue9<+d7o2OQ;2nS?XDW{0jpKFe0O2cExM#RB;CdB{M3lfzPZwD3q@dg zeietTUbyuT#|HT;p)kM1)#YN_#A0EJC&~s^6#(bycZ2oR)KWu%p;K-0H^a-A$)Ntg z@1TDl&XB>(bPG9#`$x!GK6**XZqV@?62|Z1W@Zx~EwQ8R%3~YnK2RjeRH8&`b zuO_MA7q6g6M!$xAS}>w_&IE~THaHJ)-ms28C`~94ro2yFLd4e0J~-jiT*zdhdpQ9B zMy&eq|A(6{(E?iIJnh6Xlfyk_+*G;J9;{ts%9uag(Q<;A}H29(pdRGA1)Rx5gNan0x#d#`D3QSol|bvEQ54(=Aa+*z{o z{=$Xy6)zmX9476!%J~kOmux|7q{`)h#;R;gp}3I<@;V82<}A%j>uM|N7>`49)isYGfG$CmG5e@*d1`Z`vdxY+2I*tO5IINa1!S; zrF!}HcYye!N^FJpW!$);qP?Rac7|f!01%IJT_jT+Xrwp^w-=AjP#yj#w3Hlf?Ee5T zLC?O4iHYkr8Z>q?_i1q){(^lZm4X@8@t(|87E{jfgijKVVj#LUQx zwkQxlAmSgCxtfzSY_DJzJ=#!s@Ft+*rqkG+f>tF*QPHJ=<#fBbTB|t2eJb4>({0^= z-j!xDEz#Lm1yHQS#M?13h$eFjVgs3+KwyK2i{>~Dpkx`3S+BCWg)s=kvm#{8E&l*a z*_usRyyMu%P4m_@b$Uex*VW(WV(gJ9uwLw72R>B)0M@%0x5J3fP8HhI%inx9QD5wj-^|8Gnl~m`o;SW^RR{ zFq}ejJB70|h$eG0GDOaM&S5x#;V@=a`0lNzqs$5xSyJ9G*7{h_#k5UW;MB?3Lkdl~ zg=W|?usIM}8o(o5!W%btnVGn+N$U3^;IF7ApnmOjErW6gRv3D)h2jX4l*6Z3R%5p)!+3#p{-{-xC`9kzCi?YGl3O$##{&+5RLOl z_EAfyW8)_u6Fn2xZ~ZX&PfztaJ$An(8TJ!dV^Y5x72M>8a5<*-r-M=(*C7jZ->h|w zWrI!{u&0mFp1opNx(j{1Mz5;Vy2HawdChn(p-$3%GxTq(uc&Fpk^caInVFbO%q9~z zLT2bp&%P!g8JPCW&Sr5tnD!A)B5F4AKA=X_{{W9TFh1^2mpx@|@55WmG-1CM(y~KI z5Tw~Q!jYFTml2l}sJz0n7?mQpTK zRJMqY-%1vJHhLOj-F-7GbUIF7M_qcQ-mmHDWVh0?a;@pRE03adfmuH)64_fbSR}<`&`^ zUIFHvTGL@ywOW=c*BoI2HYcU}mA|KN7t^5ESL<{w^#L{7gQi>{vcvfc7Z^6~GO}~d zjg3}h1`aYmRjXgF+ck@^$ex|7Z%5Q7p=-5oP|La#JxLagORDNB`h*}~UiKss1oXXo z`Yxe$38d9m>Xj|j`(|clW)lgSgu>HyVK{{Q6Em5anY$3SCMQr#W^Kg8#M?IJV-R!f z3?~zL5L$n*+oK%uFl+o$#-C7X87EW;-7D5G?XPm%g56!InAd`4^)o6?A*MAkwD9S{ zpHH?5;iyHdEF*N%YW{)pUr|P+mTEqp^}^eKivlf0`%}cs4UYc+)anhjms?%u71wgx z)MW>@pgwW*&WD8=9JOm;!KY93Px1CpD&lMmdDLhHpNG=fqd6ngJV$E{nvn%cy)`Ih z_V`aK1y%zUw*;2Hp0 zbq6!_F0ikcPHq1H@&%&L+w}hcQ?K<^eroN}n+M0~nLDzgBP6N5owrRUxbE8Dsi^a6 z6wPThy92)`pVB(P>Rz6!F)^9z6&iIf0La9(g)HpOcXJi-KSOKx2huii3B)F5XV{ob zX99Uah2VV6(3zN86PcJ^7sO`Iwle_R_Tp`XW9;q`3{$pl%-xy4Gkm~k)PIiwiBZgI zHkh?|<}(mv;%XFDp+g3RAwxFeZG|9RvBqP9AUNyNb-P=~Xa4};Ird?ZHCh9xL~FH?Qhi=I&+^Ow0!{P7EKp-ZEhB5JXYW7dF@U?;qAT!@$g2-$r*Q zU4EMNv-)#Uml$D@v>qer!$#1SgF;EcuhW;a`jBGfo~uue&BJM*rM+-^0k?PQ-_-Yd z?af}J&saF0s3_c4z{4|Ie{Gf?CeqXN_Plx~u`X=FVKXx@m|7OhBng?BoK4u9p=r7n z#5O|tgy-0(ok5c^F)^3~#0!{G6vW0R*|u$kCdshCq(Fqth6FQV61wvRc!H4Mlj(E# z_!$QyOPS(i7&fv4@y>m==6Lf82x^9y+HLW4Bl{kn0h%``yI64pW?G{4D+ilH_)~dt z`=?Hi$x*l2)IWN^PGWbin_kF#cX`l^`|BBzGP-|MbtlNat4prts@2r4<=dZfK{)nj z6^yaCFv_l>8U_#7>d(|E=rtWW5+ATIcpyIz5e_&rgVx>CJj~``h{v2yPZ-`~1Dwoa zC?rg8QvxQUy{Ga3#Qo0w2V4H9p|06@EH_Fn`hkOt&A#8M>fEVh^-A|9=vQc!+2L+| zDBuwk?J(;N)OcB!26~p9>STbl{ zn98pjti~;jOF&4Jn?_@4ogqd^$b*QByy8}htIJnT>>sAA!AJuUY6^2XgV?TPQ18`m zWdjVZ9%d7tXQeIf$_3+W3Ta)jbv97nJdHxjeKxzf59wqc6`#|a;YPB+e{eSFOx1dN z>l=7FTP&}}&7;()*jq;WL%LgHDu+7VZGMegYE#rTw|dp>ecLe)zjIX!3GE%@}oRYNYVXDn;XSviuHshgwC!JuqVPvzt{y)WaC;K;}#0v4LSDppNBWYF6Wtww$ z47z)?$KzPF1{rb(BipZhLB#52W@cs|l(v>`siCxoDj)pIbm^$%rE666ztx(5)2-o0 z{dMX#KIPGVy{^PRQ?LC)to63dnr~j$dSaEU^ylj5^$P}{TGXY32ld74PN8(@S&Sr^ zjL-U<<`ammjwUxkF*A-~;$!=jy9#WnfVC(62ayfh#zkgX&|~ zbctd8S^A#OMRBFmewqDJeP{MHS%;VoC#Y7nY8_Y9>(9y+#Psb?(KcHdQ4r)uT+2rj zUss(zHX*3;zXJiUU{+UtZtY_1&xStJW*j zCPDRNq<-aop+)^}%-uEqr$?bz<-b#L*I3pyK!0{wzo3(5Wg)lm`g`>=`lXAc)c&E> zx2o&yu=P0;1i?QZCooLI#5_UN4X{cd_FgtXgOdX6Zaphhx*BY0W})3%b|E+sITD>k zo||aCy>71WSGljd)2;eD)#s<`zPgZRXRYcROxiYk76_JiMKOs+YBU$xQHzx zd6mB=Wp0<424Go&ASQ0a@)^8{T$$t|8=4m;Zkx!Pn8kKjEpZmsJ^3>?W^T;P1Q>Z}Re|nvL%-9X6u#jTvZf4xe>dJ%n z8`P-1emaG%PtEjG^SR~qixgGy=8p|N%a$7>K6K|?z9QTCu}2_JqK5{mpPujZu?au{E~XQ8*pJ8O!Q4?(6@@g zsihmnK$w=MR#=#t^*hW19k0iU=-2%&vbH#wn1n(zF)=pgZN%F)%uGy7OiWB-W);jU z3T7Jf9+G0v(NL@d6F8Zf%+6*#@C@5FW^BX@kFzkGP2|8#1_s36h#qG!;$m%>fb50y z14bedHs%bZCx3fCzy`kcA0_zgZsSvAG_(}4o)!@9t+FfC-BFh7cK}yOsH<3Z*fe$j z09I+Mp-VOXyXk0n{YB~;e^5lLN#Clde}>25_x z)5sf<>x=t}!2Tv&q^lNZ0l6PP#V+4+G1I>F#1Qi?_|HXR-HEzqGjI@`z%vdQUffIrHs%n*e50QqC0JY52#U-g3vX?uR_UnP zaT=fU+i3if#64}#GRm9(09tNsINJ4{HPHf~!v3fAs=a341wLBr{H)`u`8=`QI2;*T z`J&YJ90diN3bhok%4}WTvjg~nm^thzn8}#L10&m}hnf9iEGl7Q!)yz-V-rnU+iuf) zVx?oC0Pc3VcDEQ!c~%eN7JCJFjiSg%WI*c`xS;32Yk4Dy-eGko0(AL*IqSzvaXrsFpl zq`U}PVq-HC5S&8zf#7^kBE=#4+cxHGfiW>L>_o)d0+9j4-81ZSF%Q|?$Jx|8Oc4fF zWuY6njq{%r?`~!eIPy9{bO(1Om0z~g*8Q%HD*O#rD8i}K)7l2J@)W4+^+&C*rO?z@ zSMB_zjBWUqeZ~=pPcaU9UV3dq-n&|zMw`=6FxBb?shOs&xx^40K*#&c&R{w0oQ@A7 zH!NWo;scnm1~SmL^Oz^~nWxW~ZPc%f?HY#J%>R??AEtICGYeOhl!&0scCMDYd@l-B{!yqs)m_}hy3d~}08r{8lAZ2Nco)*2+!TvlkLnl}>7?_8MJ&0M1O}nRz36LgW zfw4DY2F%RN-wl|aSZ>4?<|{zL0t_M_j69eC5Rf1_fM#u*15X%*K%7MZy4ecjpt$d7 zg+ZP%Htn6pLVEDnI%TmV7Cow;=x-1M?U|YDde8NJTihUJsbY=CG23(tn7i({$aLyD)JxGcz*@o3S?;oXpSF9=zU=KAMtq z%yv}lus?{-*h46aPGIE9tK22Owlf2gVmBFw<;>@~yKF2>#!SW`AKc6f{%#vyDZqs8 z5f930aFwn>ng0L)?Gw^|RoK(gE8fjy{Xtn}4H)?p8GzitemIZ7ihrr1uA7IB%?(y* zH9=agWAtStFMhdh{YFO8@`U-~D{dV61=~wjYdIeFj}?>EDh|UJ4W=X<%{j^2KTT?e zi%?MMHHqq~UZ2VoFyuxoV%Fv@L_u6NW-gtS@SvdO+*C4e*Vm>^(0c8458boX&ETqA zdn*d&W^)HHOw8tE+>FkrFpR>mti~oj!2rw%Oz~z4u{>FZfY51{eL7F4Q3W%`7BXZ) zpu%&+3bS!pUu@K#{Fe~ zl$CvLby4*V>KfnmYuff(NEi%)Z6XH9_6w7ktGWZ>S!owEDhy@Xfnyv&^6zS%h}+gP zHsJI53_u_mkHd4^Ckh}q=4+SYupO`*%FgMaU7A;E>1(p3p1o*a+kiH64-tM`MjK2c zF-}C%pw`x|)r?0O5p_*&xYa#Xvt~tXRB)fQxu?V|^sBsDh0QIypM6?j=4-0ncS``t zgNVIk6R_ke{JuX@M&dM|sI@g%8r@&0YIItHYtVYS>u45RSE$piZMChrg~^So8QLq> zt2WcB*Ekre?QOd3*7_{!%QM^!Z4&CWU$!(q{+-6Ns(Qk07?^{PV12=v_TbD3jKUQ0 z3PPBhCfv=FY}*GDb|7h)nV)R?Vi5}FG8wgm`3TmL4W&j-pIJ`4Zm)yZX6c;6>>%O> zg~auL)Rt)MH0hi52D?;^TiV9MlAfz(n?~9>xn`%-Zr9S3y{I;ZQ22qeC;dP(0&nIP z*f~oAoEuy^2tVmp{OTB4fTZBgplo(BW-|cY+3sh55eWinm&VyUw{tjdl+8nVD-8z_ zE@gicGFwmLXX*#vZYFquZi;YoJC-)XDs7}nPZ2~jLr&dQ%{@#HF_qHH2GRRQ zVj~*PXQuj%mbS*Nyo;Z0LU~sb@wi5$`3kNwcEg$$aLb8V#wMhAm~PvK;Rn=FU5%$7 zNq8@9A$M6S)-_sk>sP2*T8+2s9`@TbdTjii#^vI~Z5_d)?$X*_Ugfj>+O<{aZSpDA zQ>eJSYpSIDb2BsTjLb}XVqy<$;$~)MaA6Y@6BBIPHq1p-)lMHFNZ}z*_abr(dV^^NV!){XeL2S>_T%Q~p=f^si@$Y`xd; zOBnuMQu{v zPa(i}-eWHTrZLPAAL<{B&l7P1V{>K$kuS~^#KBk_5l8vBZADlYGlhvXVA-Qp8blR< z2dp-A3{Q{=Wj+NN!R!a#xSM=~5DlVwRsR56LYTaJEnX|`V|7Q=bz4GdQ$tHCYLn^T z6R|OaG%gzTns(z5a~NbzO6}%qm+7?yqf_T3t+llZs>(4JgEc?Bw5t+3(}&dQ+zQlc zG@D1KUJfd6PpLz_FP77>sMf-kEW=lJowlppX&7a_>usuSw$F^R%MS%yr$Kg|#Mk5> zZ(iL@&ZcoQGoQaWnVFgP&%bjM8H8eH7;+`rs*NM;!u`S;=nzApbqE#LewuhzgxT1L8`Z@h|RTD zw5u4YZTS(uXYxO|*@ZWB2E~lTL_R)YIgQL-Wox@807=Au+k~I&9Lf-i*`}Vo%G=$y zC|E=sz;np_j2uJ6#!Oh}B32AuVvOXSYl}`rYq-PAtaCIew@i|;voq8!`pXF(Jdh@( zi?<1%?1Hcj{Sk(rrz{1X0*`H7i>2Jh(zNT%vh8W|5Z03Kk{4lzxu&axCpM7>{-B>VPUCpbpY_99R zt+zhKPsOlCVpyZMY#tR(X9y)`yg(9?cUquuvokX@Gc!Kff&=fE3^Ow`Gcz+en}<^~ zKE;CfcDB7aD=PKFdvi~&24c2qy+WT)&hJw79Y?PnvX52NdOam8@HV$Echih~TAi!8 zo{u@ot$sG!DyZ|l)}kV4#xpD;js;p{ei^=$RmeabeEuZhw$jz0El24CiY@Xp3916M1`&uj zfw4B@qtqZ~9JC$67=tQ1h9MhTQn{8tl;$tWV-mm0X$Ov)#JR?rrg>o6VkY|py0F6l z5~l*KF|=i>(`^}Bw98uVpQottJF)ilAayo)#TvShniEpzPEO){hH;K-L#b_{X?pPU zPj{I^O4~ly42h0rqfRwTwrjLc>AyBCM>CcgHT8n!^$rYOHr`sZYEQReyMdCgY{aNKUE_|{Y_iO{ZCly{{SaY zGEeGy)(_Ok-8brGPX7S%WgWljde@`+sYgrtoox}nQf=T5)WuF4{{SauJb&d5xyk)Y zX&)c_hg6-X>J3#KGk&Gi0TW(#c?F)Ytkjrw`r{W_tG9+@W&E+RwEQvG8hbjYzo$0m zaTc~fjLOfJI)VlQ>MdW0XS&~u3(AwWyX|%b%?*id4_V`D4jC+KP9s+DkVOL z7LB56D`CW_ijD}eTk%?Ue5T!v#l!0Ok7>{@(T3C*^%|fCU}7aq*kHPMBXKLUgI=75 z`L>lPtg@e(!~+npL(lq?eLvH!Y-u}#5pT*9m;}U5L}kF^sNWf1$+)pX1~X1K9$b}d zN|VI7EH<7oh)fD=>im1V{vnnKfg(`I?F*KF0%2Po<5cK#4R0JuL>6V)8 z+Z2Ww6V=~qaZ?0h#?$68mo3J^d#T$@+*JPnSy&>Kvr606ooW%5H-NjAty=2N*nTEA z`JS%A%RWt?=|<=q2O_7p^OQRrSnQS4VBFe`{{R^7=e(5}h`w{d1pX_zds>>@v~AT5 z(R`P8y^!L5<8lJnJM*z@Ew6QBF;LkM9Bq}4E>;>-A_Z2?8ioQ2(MDXN=Mn1#MlzL% zY8`~FhvZRLnc}Q`mhu7R82ti{~Eg<)r$RNF|R|H$XrE~uPw(Lf* zH{{Mp!mDi@hs?-_YaE0d4;WiJ6rh;M#K<2d&VEn4yL@c9QhiFX+*?wXVm_!3#>*^z zBUZztZgDFcSVHTkKPy?aZHa0X`A2^#=8A%xi*)N^^IA2Hv_70yjDV}rJZ_AJ)0oBS z;hjyj>=tR7uv!Wna&1$RU^_-9Fl7WI`*4%svtU@cUs}Z)%Hk~LZ7T%jNH2SKw zDtuzbs|>bW!}k@n_5cGWw6OipRs!+4JbxKO8k-?~HFc}G16}E7#`=9tb`Kld>FcQ> zg_Ml~EVYHbsSVj7IE7pK!;WW^o()7Y@?HRkmd?|`w|LtQrH2B`e23(fi+Nh~#=c5v zykCjGYi(dQb`Ox^HAEfL#g@w@N;+ZT7#V@TrR(KC8M|aHw9hH%wZ(oi!q#JLNoL`> zkAQqlg@?#C(}k=W#?j-m{{Uxp0%MFtw|5av=%yDViI7_p&Ex!*$0iGkov>WZ+g@w! zZQb9T4*cA}RYn1I&Lc9hg#w-cC$&*mBC9H18pca(Eehb^+g|K$0c|^G`fFIXcrsN9 zLKsPcxWh8T7%1@X+YeHZLciaO`|N@Wne_sQS`0AGr8gfaH3U9 zUf2gf>^ZYSxBv=;3(cBr7#qT^n&@p%;80mc9IF34w3VL_%F*g=Py3pEReGxaH)m5` z;L29br%_HZ1w{N}Xi2jLlj%Mx0(ytRs`PPPgp{dtOM!jubKo5_ShCuDBjZR63r5u_ z?e7ox?glHiJ}HODZwVtXe%bk8j$x-Huv17-2-HwMO8Sc~X=b5@Fcn`c%0OMPkn56c zeL)Q?Z=_;eY7osu%BzX_E=^8qY)dV5T#u;5d5f%aIc2$qLuz)e=K7t(hrY^=2-LNT z0DVhZcC%mPuOrRme~{Ie=;~hlkTpz$Ce2IOK%1Jg0e0^uqzVO0K2pHjrq|oGirsnm z;>vJXZ-10jboo6SS1iW#ux2Pm87QcughjHd^P~9#4_g zIoDa4^u=WrfO5jU!Zl{b;);HSH$Ra=WIf8GYVTWAg~1i%Ur7gzD6Zki*L@=G7W##4 zw_ra~d2Q8YO0Y-T!mmCWTt1b)HrzD_bg+jR73-`}L9bkPlr47kiEWl-pQ*B?*i&7! zc;i?uIfjDCx*GP(xtkl)Cs_05w4R#S-ZSI*6do5atS*p{Em&si; zC{SjgZX6(%5D5bYw!nKEqKa*TqG1G0jLVo2m!!FEJhfQnY*t)=p*l2V23ss-917OX zOKA~#hLcNfYPOD8_^<5g>7vccVK$wsW}NmnzTJ^jU?bMUPT7sD8RJm(Ye?LxYCj(m zKNG~H;CPV+=x6~q4;XR;uC)ZTaLLTJpBns_1Xy&efEZDPP;2G~ZQF%cwQO0Aq%a|u zbxpl&W!A19wp!X7f<)9V>;@}%#Hg)2L#kS3j*apQO% z%PpG^4p&lg-X$EUs|Vt0*m9>Q@_K9ykTmB_%xWxmCKu${t^ z>PdPP#^JG9u)!9_%+uRmm5rxYscl1U3dZ?mWHfHG9{&J1+U-cmnAk0cdLsdDyBZ z(Cw1k2&I3k7(e39sv&=jEWqxIxw^4h@5nOal6ON}T$@!iF^FDb*hnS^ z*qoPTUyqT9nJT%PH%hdP*>1WIa@cMjSM<#FIvc! zgdZqv3&{GGRmoj@brSmAZZ}y=3w318hDz_0-jGEmmzqy6+DF`&kot-@i4)q*>^XE>l=kiv@gorJk9`W znR%8de(O&OFs*JQA*|*$Z#kGX!mVN4SQFI@%6?Ze5e2Tp5Lf5neq-{le(lKmhsGHW zcsA~^{A;OklC^l>5!F_CHw+PDF~D2av52;A=(4v&W)ri38)QN&$%LUyxu=ZE>e<-> z?~F~LMG9JKD+4Aaf}xVSrUxPQ4P+QaD-g5t9@c&dLU97;h-)lgr*4he|JzmnudFfnUjX z7C4Lx2pb24tht8PsQhfPt{7mA)J5@`@_s;Uc1}zUxp5R@zbC_LfXA@R!)&dNHZ#`M zFUx6G1Q%yGV^|zP`-Ek`EwHFx#ZQu0*gPwmq8;M}S*SRip2kN9VwlQmJXS@MZXtcG zws8l`qPdC{jwaTpn3}Qx&U~YC{a4a3!&=ub4t8}$sq~zN)g50hmH`clS~Y=8Jg8~h zp#|--9VR$et&aqc>QQ*c*tUdh#%eVy1wjuWp*Sjl_v2PL9wYrQ%KUWXSlrvE-^i|~ zsdmFbBax?Z!SFDjPi3crrF8E7D=Kb?j7Zx2o>IN@#LI}(zxQ2F$%^^TY&&AE&PYLI z-SopFa6c%-s3ccr3>I#fm}YE33XB)Z48$RZV_0!F>@$pH*xLqT@FKqGNM0hDjCA(+ z&LUV`&ESJH*C}Ed>{nANK2MBi6>tjyEYxjW&AXRzZb$(X1|hbhuH$XhxcJs_*(J{# zPG-zN0q7*zzAhVyVHEU(BQthCBI3b?LKsFHh%k`{FcQs)UX`pHnW{9dWzDo;*Gk-Z zWT{t+ED6|OBIQ)K;%P1ThI3O#)SGY)H~fPV4ncS+ zwDV)2uzW&z$1XlORIkb-04&=rVOw!Uo8^qD+qOnPL1P0v=!0lx#8MSb)n>99-jxkD zn_^XtS+<@(u!4Lwv1m+|Bkb0P&o1 zwc)nGMmUW}jAjid#(g2%&(rvZU`DL)-@0&XZH5xHjLMih6$-~o9lZG4Nhq?lI*x)p z2XI^b%5wFo`7MZX&xE8Km|`_d4o8z>08-8W01|6uAz|7ZY_m>;m=vMJuCu5Znu-~O zqNc_orcPzew<{QZKmr6QDA{gh)eAmKQIZxlL{=yaP2yPFT4&C%CglwZvi0O3!f;?x zdKR-BLd-@YA#s`F-8@8y6C8pHn7Mu?$+md5^Bah%<&8!;6<_A&HEqcOwsAfxpa!!& zTWc>^EHedL%<+a2c5KA4WY--eVGAtWP+M#hC+>eM>>;S{$Ratw@ z*JlmnWXwMfW9@t}YSgjXD{9&};09V1h9D>*M6?E5tJ-%3MgxT*hS6T%#g>*;z_2|h zYc8QGGwSQ7@mo>UuuE0HED&%GT;Y*a48XgL_|Y2UUBeDYo3@@<^OYlxZ5W;-S2C0; zazCye0&^OT{e!VFJpNC~m@tXDv&BR(`7zi`ZaE%JkZOtMBl#xYGd%k~GfQHY5wO`K zVLZaP;s78!d6-iQh{>K{I~o;hxPbjS@RpWcr^-4$P{R>!HN?Arc3YM+PQ;u`wE!KU z+AdydE2Uh=zsO@)0^)hVSz~WG0AVE!%)Jd&#IUq#*0nOAwM|1SHWUS^a}9(j6Gp7f zxpfxzlEfMKE*8{g=4dqSeAHC543x8(yZnm{e66a)=4mSPaN4o-$A!4#5!?R&vZ<)= zDXV8Q{m01z$G}zFlJ8$UGA(CpuREjs@f(xMpkB_e#&IonVVFbMc(DHfmNfwb*Zoy}Fh9n7t$JC&BpPUf&}hZw{z#dyK6a%wA*!CdkY2?ke&7;UJ$z%-hl@1LTVgJlCnrw3+Xb&m_+4B1m*cdj$|%8zc!<)ZX69-sdWK@v zx0yqV<;AQcHEFkCmmW13y++(brJtv%RK{QzjmI0Hu(NZt-erZKiQ{Hmn#XEgh#7}Y zdz9Dkj+pG}*@ozq?-*|wt+;CyKPFA5obQWOXwvud9uDKg2wSHN!{g&(cFTWmS705z zzF)!Er+fEL7-5NGpgE1i^DDL?C8aFOkrlHIkS^|mY&j2Z)r$L@mQ`R?c9j^FISYuc zLq`k<6J|dnOC~^GvnfTaVY0P>IB&;ofws!gk-kL*QsPe_J`BsUNQRoaF+QavFU<)m9iKMX)1jf?2c_uA&s#Qq;hWiB!I%3%NAN zEa0*QZKG<`o2AM)acL^VMzveyR;9G_sIZ5`tZhuoRMy5L4OhX40Ep@sz-;N-*A<1!9zkLtsF9e+M01WKFAy*JMc6Ym+H+#=FZkdy8)l>S z&IL4{47BB?WK&)ys@Aitn_|@V3`^IUK=U_kpNjs9N379nTpi5yI^Jn8FO z*DObj!U*jK?qefY-!>ct4CfF~3l=rj76nrsOj`Hkz%~dSzqWAW1Xavo&jDG_%DRBy z*rhJO7I_3En<5LE01)$%&52TlQMpJ{kk$(hKPabpmJO}R`O_UU zG$(^9PZ2P`ip|qkSkx}{(l^dtcYKDH<)ODjXUlZER-@tqZ&~3v$TXMyl{R&=cYhr4 zl@v_N7#IMw$|+~$+xs|`+H73H?SB%=89qhGY+w~*5tiN!H6@(2wyl4SNJM(t`!)+( z=|-J1X!UvnE#F zF}7D<%XDSla#5C{6@`Z_Ren>EVv4#o`4$vVIe**gyK&g8zeD!d1TY-U>PBY*ZvgTD z9KicXj-i=ZY93R|flOCi&lh0q4Zu_{gAfH0rrP*xl~<8p@2(}akpbOakdR0f0QY;vnkVpcR^Z_6bl9m)4jesKyaqTz?zEu zmB-?)Xiuj+y^6)LsDA?P9%Zt;OHLPXrE$sA*}EV;&qY_TTZ*#gG>(}<2MU7;B?ZMZh2iIsv|Asv!m`^Rei7lm?Aw5Yj$Sp`B}sMv59 zZo?n&%Cm${JlibXZG0I`%m@L{_boyUp>Wdo+PF2jv`ceY=DuO9Sv1I@o;xi{ak#PJ z7YP{PLfGo8v=?GiVS6zgj^@z$63%iZYENp&hFZ&S6T+Znd~Mu67|j-<<1t9Bq4~He z<5SFWw0y9mII^{|Llf{Y5X2bDa0nM|LI{1`)Z)I2a#fkYXxJ+rz5I>4dmI@(f+qhuX!CrHnCYcBfRJZ8ONb_*SByt1u~ET}lDI?8R_W(CF_x(>2talde$8>wm zpCI`sC3Ur+`5j(I#Og)4+~;tQ@`Luff@F8*N@t#ZNUl-4N*UB*eQe4(%+h6Lw0 zaLt^C@#1bJINg}P_M9mYoXU>Fm>F7Ga&;YcLf9~pV`R#$A%w9T1|c^uAvc`FLVA5a z#w&QTBd-P%k+vc$c7bhPZlePrpB!6H<14_*mLKEJ5aKnSR^(Tfjy@$qbMlW~;h44W z;%U{Y7z<|@jguMytXQ%k|5sLW``_Rq6Rd zL2VmkTHaBa>4u`B4L6vHZ3e@YMnRhnlH6FKwN-sRfHkFg+LyMI@oiS-A{|eV#(Ym4_LYDOSW*W#q6MatnWoK7W>~wPnJLs>Q;n+|D0~js4!Z zJS*Wb4<>HUTk(+%ghe@tlM=A)xvcpaV8dcmnK+&zAVQ=N>|O`wl{uA>PB%87I4W3e z<~r<@9KgV4Bje*Vx{+`y*H^kK>@yfUquZDQm)!yKF4z>Ym4XiGx5C(ny@v4km^3IY z95Mnxl_wE&${QgU#BnY^OK%q^o$?K=T&wCEB}A+%W?I|q$z&;sZJu=|!n;~tHZ~PE zD`Zn~r-@zbr+kajzr`u6>YL|k)2llwy0+7|$!u-dA@|{-Qwiq~@xiHBHrP%_A$Rc< zU}6GC1mwb-nxiF*=Z;7a-vOgA?mZC*7)5e`J4d<3*%gs^U0Oa)OFm4xkBhvFmr zdL+dgyE53*yu~;$^5!=L#N!g41Uy9fc1AH5ix@^3So{G9;xLtocOXi>O&nx2ya2M3 zw8CYFYjLMPArSA*U!1~Y_F_u^0I0(a0GEs~ih#7N0+Nn|)PK1t8_z5@^xQC)^2{fh z=?7^fIBBgLU1FRun!ps~1DR(GvegKf55pKHkd{^if3RaH+llFD3b2~tva;gdT!^Fb zkMPDT8^<;cqB$j@Cuo_C@r%sP*m#}dV~BuEXPBJk0l&SVG=2Sz?8~8H*y8bl2F!f_rbTdEO zT(SLmbnA;!;;-!r+$F+a+>xCwgj5`y*Y`ESa&|L2n3EXms~^~(LdO9LPUIso(JlQY z@YbbaOF~(-X6p*CrCH)PLOTL#uT!f`Gt4-0PI$!o>rJ3o7w4&j$^hQPT zr%`EBT`L?_uRH`QXk(N9goum2l@-elZg`rmyo_>$MhpJ{L47f3zX6$&sI=W_bRyux zc{yOPzB;ulbV#sVvz7I^IkA@(jQ;>rz~sjz(6U8FI#X>+Lm2)x`fbKN3nWz#==u{E zt?+BFin1cibwoqcnJssF^gKR?nIUurE}n(Z9HFqOHzDZR`^^}Vxbha=q!rteIA+} z5f-R@Xx`s*(ZbiweaL9m)h)pHd^92-iLvU5ndqpuM9MQhT9>U89o(HFMqYblxUb`i zYmVwFbXRT1V(QLUgP?8 zj;ZusN6c0uqUDwQ*e_Nna=&(cHvA>W!03j^sx2y_p@|`MWJ7Hk+pY30-um&n=lSa+ zqwBE}^;TKvo9%S^T!q2cmG}A$I9}_3=IEA4oIPz@@$)XH)#EMYj6}Jw+o9DzgfVm& zZ_N=8TH`U*7e%!>;Sbqf>g2xfeiMGHUS{&V4=eW%^^sSrb=tIKV=joK=%H2ZZ|tP& z3-@}uyF4e$!t>0Zw+1@l{CqWWSmx|IYRIl3Xj(Hjk!V^O{x9ooTWMayUax-g+Fgxv zT)%K)FWO5Z(B;WX__~;L#dKyLs@)E${3#X~$VF}y5?J^p(?&Wu&h4^DJv z59QGqr21o%l9M7I4wOVxBB~*vs?U3q6&V!bqVeoEZTIS4+r(V^dd_WpmAJguo{Wy| zdFXVC5-PaAZPa7#Wm(D5wq=>vvM|i6cW^hl`Df!VLmZI^=!lrlp&baS`nAS;P1$m< zUr`sV`Tp&#(W5Vig6m`ayuUg#7lE}r_2MNhmWOAKr}-jYw=M@i8-GDYOK4JcA-QKK zM2MU0UwRQ$W$jLjm{0P43VXg2pDEt!gZ!8D6`_n$ht@r>(89|QQmr@|1p zOnn7U-iclEPtSz7{Jh?s&9zy)F(K{30(|Nsoa`W%ZF&KBX)~{{Y(g$}eUexSJ)${iU>X zh~>lO=Pa`GeR?@h5oy}qMk;?6(G}CV;$4|ixam?Fm>sA@>F_u0#g4ABH(u5^UAL(V zg~g9C-K%_v(qw7B-g+ZWAqYjHi^56IJYBjMH{@+S$D=CU)8viineyRozYbWl7FX4N z59OZIetkm6ffBIu)I`|GhfzuV3MCDBv3oGpF21uY*k)07QN$=+=OEos58cR9gNDx=ih;X`W1#d^c<*lWq#PGvSH6BDd2XKv0~z*pYLeq zj1Gl{Vp$l3R-z#&LvF&w#yZe)iIEXtec~A8iiyxx6-F@%Y;trRWQC;)hvY?WRD^O> z7X=s)?V)gRr@WOhJkmNjfpn zm=%bqk&`k~a?Y!vjmcl+F^qSWl(J`6%vKbg=VJO?m9?!7)45{eXz&$`nLCWE%I7T( zZu()CWWMTFbHM9Tj!?@C!x;&=xr&bEtD?iUNNB}M4vhAPep|`fYTFnc{{V10A=L}_ zvRNKB)U;iS^MqF-`3${9LM)EsBBYrKV2cG&PUldMv5W#nei8S4bZMw$mEL*VxWXEjWJNVFe}OW$Wufl zeRW)u@Ap34DbfuJ2s*k;T4@+1(#<3WNC^@G(x4)4V5;dQJ8##=&g^$$<`UPTQ4Rt^Y zQWO1R=5~I@V9j&+@tQD;mrPl&_OCZ~f{o4doW8$&e6xZn>aG2XCu3SM_w>u5#b={* z4O^PLJk6n!0HEipzcEJLN zt~<_x{XS0`ye*YBoP^#6hI_StEt>pYF{xivmv+P1yayydXS`ujhP)pz)c#T9ea{Re zuWB^>IbIP=aYtE;-%NvB-@CD)GOc3BDlk;}HuSSLZ$Z)2dP~kNyyca#|UkzdQ`&WJa_E z-q`xZv>}8F`@qg6g7>-QZ*~qLeEQp2rox>CeX2Zv#0up=MqeWCs6;G09MK3`%dzC3 zQorr&I7NE6Gs5{{^Vwl5XJs=e{pG>CubqRWHfZs1;{(Rbmy=#Kv9d=6tG~6_!L|DB z-<)l{6~VZL2L+1tvIa=S+gtsWF6*^{GSIN{2pNm5JN&$FEOIx{aTeS0+7*a0x0KSI z-$y1o3{w+pIV{73nt&!l<*GqDn}n;sY*&f6LgDv479+v&AnDt#gY=k z^}d}gZ8s&Mt1jumg!Vpb>;>Jp~LHV)Qe*~ zC)eFXxi0{|Lv_* znSgoE!|ocJC4@d|9eDo=?Gc}56jLfrF^YSG+Y*3t0$tG5pVZvWSyGlvlwihv?Z zH#>_-!kKs>&pZjQud2a{0$^)?m~|tYvU$fEd)Tb+qmS@^Watc5MM-RTXxB4gRTAqU zASO=QJ=l-tZ0Rnm2$st#OiVh$3Wbzy9x7JHqz@!e?Ffmk#q4GnQqV7FW0sQ#Qt<5_ zu6yhO;STS!ip>rz^e34o!{`wY12UezO|vyzyqb$(=xp;~3!#a)tX`rOGD)6ThYsvO zz~_bRgBc+%Xmgsfaw$4o_JW?hz2 zZcqo`v&c1Mu^C#exMzYenJMhJ#W1n+ZGs8tKh}QHr zu*ZzxphbrLWQfD|MIt-x>MSx>k$@BT_Q~#o7gco6(4(KTM?}pRfaYKRg*#vHV%rX4 z4n!3;tw&P&#xMTj*Oym}hKo-zxg*BzL6I`OHN_-0%T4z*>^_U=W?zD10u#sCfyGF* zd0TO(Z+8e!42)Jtqj)stvNG@>$4e@y8{*nC+M0?B@l-^M5y^?x8Aex*vP2=-1Gyu* zC4SC{2jIag7Yg6~Bp3Td`Z9$tCcy`YWjqs&-A=Ryars?^DGYQGN!KCRGw_nC6-Fzk zGKYZpX<~?u(vd3wE1n;QzlbEDqFLXyvubzCbP}yuY3zOvKpElRayfToi~`Krkf{cA z)rM|fM-({9AR55tqaCNP@{CoC7Yb)Wn@g0Xx`+`f`w75L)YB@>OT!deP9xWbFEo!L zS#>mF;Ck&I0%|#Lg}9uRnjnH*@?v+>IMii0h%L6fa4gWcplUs!LPcsG+#D$$N$J#~ zV%Nx66jQl^WiXGgca4e>leb{|r!I<4XU|)Gv2^!B`u5Bi$7n`Ck z{GpZ|LLH19-4~IY^@6cGE<$lf5gn2PZkiWuDfu__A^V{l3 z^Mv1(#2MZPvfl-VWzh;c9S--#{|MI%V- zC;X{*+S*{Gzf?M!&!Sg=rF6zeYd-(q|6h~%zZi``$V|HVq+}sRi@2i5~+ktV~P}pO?rQ4a&n;o5&6(meT z2nQ4aEfKWbbd#os#>mBB!dHvOOBHH>wF-2x3TN<_b$7a)Or}MV_JwH&H@k?qdNN!q zjKn%z-`A(ia+gpDNs-vvYmKI^SB$zkCiR!v1q&?`vKdw7$=!bB2${Ks)9-tn7)#hhH1KDD@7=<&HHnt%eKjtYey6@Ys^d zC5H)jKkMK>-qg85D3K1WmXaZ&@SCV*d^WloZg@siV0hc3@r)OTzG+znH5lC;b6Mme z2UXctEN2yu6nFIkw?{q&C8&d?DxzbgqkktvEG{HuNgh2g+5=Y_%|DvB-QR% zcYNfkd(fQ($O_)BrZ_>cr}x^$UybyVp8E3;*BCS(eoYO(lacYXy)ZRHleF8m)2AF}4)<@$QujYCE90 z67BDHn4jIm3B+hwwns{@fZbuxPKbS{$D!y3yKN2q@|u>b<%N6RN=he?N}yxm4};V> zD{b}46OV;e6EupuCbEgkd8KQ8{8l_eLo|9hM=5gehJL-93%B^bpzvKF~ z%dbtI(gv}9ZO`q}3?$+eBFYFi4ptKoPiz zhtL+Y{P2D)Z{v_^H(E@tu^wAZv}daklDe0ZYIOKLVNG{x-BaH88+IRN9R>=4LBANQ za{8Jgtg9OlfA2zEE%AhJp87Yj{bhy;RAuzl&I1I;l~ZSSh2X7-#XXKlGqfQmd9_8) zX2)R6FnNyD>F$AU@(~U-yT1HxGve$Zp2Zj2MszboYh|dz!3zPE)MA1+!<33bZI&2P z_$hQ_p<;huQ)z)9cu<0v?-D)cHL;7Ewb1KjL~x2V_lFq{`8IWQehW83(Rgh1&k>sp zYn_;h5Xgn*BAQdgxsYcM@i|P9vrQ&v^GdBbuH#hz@uQlfuyf&;mE1<>AK_CSi{XhJ zBwTB9Qd&-13Y_NWePCp5eK{L7n^jLaW}uN5qVOQqF{QWd;+%-viKYVttueDns(Qz& z*X#5~k~GjpG5eGWWU$j2>u#YxU#Owy78QdLI_eM0 zD&lFxl4S#O{wlMGw-7i486`4Sk!MHl`CuTHC1^f(sZ9=Hx2+$-0}(h@NC7XVQOH(2 zNwLIETFz@fA-Qj8MQgyI*BX#8AQ~ZyyJ&?#EPh(S)xd##RF_WS_TQi3dL7nMhF3#x zMYA(rmkX9pI}qOSfF##Ag?u;YR_WW}&WeS91qTLfcVvF0)zK(3(R2Q1 zy~ZJ)_&yYY6QXLB56_G%C-(ZuhXCNZ6#vs2kHe$yA!snI-z4&(8GbS#}ftc1#o_|IMYZ$Y&u+v$Qx~tK}UK`H}@x8 zs^9hC6A+I6ky(M!TCOqmgN%p%3DQE6Zkj23GH3AX8HfkWoWnxg-x!Kgesf<~U;F+y zuSsxuMCL*I;6}9U05nYZHFJxs*lO@J4_$i)ZU2-yF?^rCJ;MnRzQa-{;o2m0*K-N> z(O`OEol(2gc;uVkuv|7mQJ`|2^!q@I#DQ^CaStLRE~n56$=5gZR8q)M)(>yU`^ls| zKuS6FU(Cepuo*hM5j9JPJ6>L25>)NCXhOLolnEV!vAca^UsQ&Z%_5sKvxOUu&V7eF zT+|Q`1Bc3ZG5O{3t^~bAzi#wt-incZ6XBN7uWOQFT$sE?5<3q;i>b}1Z!qGBKWxR@mTL5) z2B7(tSmOR{eV*~n1xQ!~3$oHZj^z9U57%GIx&RU+f_2)xJWI6?k4LZ8@-<-S7_or2TDhnxlrr6`irpG!1zu`2*zo!k^=3rH)6++oGgD^aLQ&?^mVg zjMne>>^sj$4*O(YCm{G~V+AkvJG+W;B-orXee4@KxSk5zgY>7xed1Q*09DPiD%Mlw za{|@a@4h`CvvY$~xFhSw|B-D`L~hi%K+>pJV-b17F43Fu|F0-nbR-n9?Ql z7>e8DZ5k{gT(}O`w$bU__uSF}Z!j?Nz_Vb3^f!y0M3x2k z>fcP@Ce#aFQIKS%1XBik-OH4kYyLqHj-!=5SZ@koXPk!4{-ec3Z zVeZRKH5c{hDC*9e`V#Xnb3~t@3T5RP_f%!VIAz6eZ0mDe*!DA@hR5d{7F@sa3+8ZA zc9l2xJ#)TmUR%}1Qy+)nlLPynn#^yjF}AaHgXvd!?Iqmg#rot)AzLW79sI2Xa^cym z1N9uFSVOOb$#U;*r$W2S4v**VKmuzPApdCsASnzNiD6gccl}6itA!fR?PO$zh*-G@ z0$S}EeYECLL|BSA9U?aC=g_W~_$@aU74T1`yD@{`%Dlx@+)Ncc*F3P-VtZhTRQ$ze zskqj(SPYsT(Ss_7<2M3b6=Y{KX2>?EueEf~sMcdbqH*KHNMA=A| z#vY!1W79n!dL9r6PB+{5cr z(wNF1=_4KTbc7xt$XXl9VOB7e&?AD}|6h7!;a5J{f<94KW+KPJ76Z5b{3E+9d@g4` zP$2Pf&O9z|?!A3~WA7kVUET3kUXJn1Qwj5I!+0~LuH@#e>&em^u6%yM1NQIj-OKo6 zip@~7$OEn9RuETU_Wc5z*^3C-M?`y?G&}33WZDT`nYl!7fNsFk`!syzsVuW2hq;@M zL|>OkJ&mv=0?@cHNjyg2YSRyQyYP{KFo_PU93Lz^#iGDh{|jph(+;I=ifN%W5Iwr8 zf*(|LB`b}XHCy@Lg?UqKMyGeU)$((E*&o-uJg5s1yi$$0 zG|nNYa(*p-pKGKU7p`*n7@;g#tP2R*IBox7a3Q%SW)XtiM_BGWU)j*0K}xHfB2{do z2D)BSzg2(8NH!QvQdor`6s(JK!HQ2!qO24n$M5|(s(t~(j6TmaHYJeKP#K>fu>EFAULjtZB*cdbC*|bcOqpvuZt4; z>}XcJ8ZdImVm1Ef zL?np^5PjhXSA9F)*hE7g8pUdO6UeVZEVz&XN5@1toLgBFHSdymRM8bDQiv*Ec!`M}pF z1(b<|eAAv&-_eBxvE6&WxlrMkdc%X>kQNYW;mS|jqzzGWQMqw<*gw3E%5Pi#cYbz2 z<8_MI>2F&1PoA2t;e*6H`>hnk;vS|CTn-mX0~HyNN*R%MBJsZu>Z$Z~Io7fcm}A*W zs7OvMb6=TF7(DeapA6xdZgf@orCSb*dj~yzC*nnIH162^<3(&wEtTC+jZ2MT+|r38 zyu=%9MntL)E5XaRx?9#heZIhTX!rE)N0P(n^I{NV7+5dM$fTEqpz$~hvu)$z9dmNW zWGpt<*xU5XW$ul}*FVg*mNNz zosmxU#`N0!2&f^^->&h5zib#%cAmf;zW$GF3dkQz&$-6eCvzLJX>paR$K_+k^kN6|jey|LpuoIMaUt66Ng5ke7X&SD7i7^1QClTPq(&SjzaN7e^z(eZmKJyVY=vwh3| z%&Q;sW}KEzBo0}_O*P)m!{>r&bwPW=Km^8=dqvM%_-@N6#9Inf_J6&*EIi8Ko}ACx z^jSMz59PZnJScbNbfp(sI9qB*_mEzM3}2w+W6-bi|k zbv|u|8Z3dlAFn{YD`cAex-XchmJ*2IbW?eq_#pY)Q?ml0l_GP5|3y>~WqA4eRH9-X zqx{Zg6F{^K)6p-g)OvSiuy#U+d9E+rPN&5V&9tr1J4ss38N|G<6$E4s3&&d{35v`H z1Fp~8DdigtAeh=y-|>jQ*skheRiZ`0@3q#C7Rr2Ij0hm`i}8vcKRXVK8YYUgr&Ig( zoe&n^Sc+A`fHmn>goGSE&qDf7gjD~syI^;S`=y}4Mp>cE1T^a+Duth~`SLU3+?V~> zv+O%2zbXg}m`-qN92gB(ivk8J9fI8;a&F$iK-0aqy%dyR%U^$R=}TwCls`xL#!VCE z77VbhrcLSRIz1!~RODNcX4&=6$s$?n=j)U2eXTl*4pm&RpfniRRJ;@H` zs4`p~lRcD1360bh-v38N7|czsZi-_r=?x=Gy$&=`5_VX`UTC^jod(L+xqbHVg#@c` zPJN=#ADf|ZVm<*nFBK!O@EsQb89g@sShbC*7c^?z0Y2$t;vuAh2=t*fvELlhR}o>^qB+ctQe&-(n##7nXy5GZdB3{PFeB?P~}CafeUCLM_0Y^$e;Ua{cv>yMhiEi)}guC$dAB+$tx zeC zbp88&;T4J%res>e{w}zaf`=4p$$k5c@-TN>I>TA~v<;-zl{Kp{=CYJ}ql?mI=|}aP zq&F1Yr~-|q>*^DzjT;u;5hV;OJ2hgosgA2|w7G2+F1$?Y3O)nZHwI%g1m>x*fu94= z0iPO1ouAdpL1;p50y}c;jHkzi4ASLs;TNXzIJkVm@~#RwAEyi9(ax2w zkbU#xAjwCRU?IN&`A58H8RX+-@FIAzg(+zwfXx^4jTTwCjkHCpY2=#h#}OkzF24uD z>xVY%P_xOSsM#bC`5KAFzWXZ++w`Bdsy!|c^9y{yuko(aRm3qNp%98u;;{#Z*M=PUhn1zF zQT1Kt6*#2@hsB@;lhPgQY>2qM6Y9@I)fsf7?~(w$NBq`LT+io5r9a7%uzskT zK}7;YtfF^#E;kp1`K<7wneoRZ%DoElvabXdRn zWtp}7bQLgCz0^AhK696IKhuP5tZvY0QPL*U0%V?tTyMMS-eyKK z_q-*n)HU8ko!9>gY&svKfYB{d30SUM8s32W#sD$Why?`s`u?Y~g?+^N^KSCt*0-Uv zG(N*}Q3|yz{I=ZBhhF8@?=RA2AI7xIyT9qR5O~ra`{cI7E-ZX~q(hbd&@=C<3>u%c zrYyg~tHDa1)VE<>^j6&Zi}Dk_B=@(mDpqMzYp3x9zHNB{X?Bau#A^J&N`-xMk!&Fo9g}K?=P84LVmS&Olf@5*zZA&FAHr7fe)E*Mze+KYdj|f zwx?)GMDx2wlw`hx!NnoLy2J4w89Tu$MRLf8rxBuS6#oV(-1xv!{7ZYnJE|ShmW70U zd=^77K7OL7e&>#QZ@71`=Jmw0xWe!{I}|vGkpj19Tj7{=(?D9tmr~kcj=KAE8R{j- z_qLkIURt*KgA&W&u#3X{&yZQsHMN9n7aHKBeb4QN!z6_r`)TXoxSGHEz@JVgO&E{;dS@u6jRp1KxKiyC>ze#Lo!s} z-E;U2F75mH(B<6{e{ir)(+y(~peaf=?K>7d5PI%?S^nn%i?|7w3RcaCl%F|p=5LM; zBb;Se(7DIFr_(aq@X;B6S&c2l>78)6WL6L7IJ~7+35nm_z7R$g{65s>E;+uka)?nY z9ura?Uk-{3%c8a(MLViK2xnq85piGZC_jEw+4VaU20c&sN@98-uR7>OJecnYt~H=P z8@p4f=LAPDvF&dpd?7`B_rJu)VsN_y;q7+S)Sc4696v*$wBrj12grSOHv7P+pTB%N zo4@3%T;T7uA1tPVe~=FmbH@D1%i;i1S|ub4{5rXRN*Fwv~&@KLVLzaDtBmtP~E z^Va;#eX;IW>vv3P) zjhY)d1QiGm=U>3qzOGdlH4mxM?5=SywB^CX@I#o!P4n*Ag-U>Df05^_l?*p{&90;O zP;B3X`5zf<`(Oe~x*)rDm2thBNv!F8L{iSmRVZbCF3vvyK z|Jv_)X_B-ucE~4CLR;K?npt#Pxb;z}v!oHLCz)Ua~lxe)y$5U4{Odf*1q z>!!#M`@1*qHU$9$7e;COVT^6X-LIev-bht5n050KXq9MN7X;>&`Sj&_@W#_{V7jqi za_>3#ZeVq=x>8m@6aCk~6QBM?FTC%yjMUHBDau`N9)+$q0x(sJ4elinf0BPS9=(g_+s${ zu3TI4%yf-Y_kO&sFSg|a75i%(!#+f+PUOp8-p_1z@j7ohW~kl?e==)B=6|*!%X|s# zlW`AO%EA(ordxD72IKv#red|#<##!)<{pIGE z-l($y;{??;-inbD-q(=ktj25utOw)){zTL3Y(t)m$J2|Bo45 z*HJC@rf4p5=@qAI(zDNemy$1E*}cwk*}vD7qS}c0|H$suGeo_6+#x0h9jX~XaVj(Jx(-!G4#)I& zIXRd8P@TDwtJEHeK4mhj+s+T3_Mf7*@>3d~>&S*AhBu!lVj@`lro-#2)pNgm^vC3U zi(=@YCJvn?TB7ZI((qqK#3;Sws*T4xQ1NEWylHH69CIx_oTex5*!GnbR$Q$YI-SbT zkSiT0LddQAVDOxYqR@wrd?!wkJJdNP5=*k%{mT_4+|_5n;!+$ZR$c$dc098~cigAW z5|gI^L(%DVJ^$nVstbSKkjk{Dc{vnj^t#p;v8QAFtImbiG1XLz6rJ=$+sgTt(g!WU zDZI(jAXP~1o}o;k#4UwyY`4-NH@49hEBbhDju`nvth(s9BZ=_C@sO|3 zyKCnAyS2e!C{yawBouZDJg?p0%dsFbX7k0KrL|8mL~aZN;Y4MQ7yo5Fcyt=HkoW)? z_?+>vq%6Jy%Iend7g_9$C+bvw*5?oX;g4RP<-mMnrJ@vsY)px8$sY`7eq%&r{9RT0vwDIqKC(Uz zzp+%odfs78+}Gn$NsiU6scwf7S{pMjK4_W3T0rFzvV?5wIhHLa|EJ%ZQ7HGSMbjDi z_)2pvfkf$#>b?Vq_y113@3%Y4kRg~ITD*6Ez&GmjIgV4g=+RH^2l-AaIWfy&_shQf zoVI6I3=tR1-Px0&o;Tn>L~+#JeIAeGl>eNtD(pyo%MLDDnyBulsFf!~8t-h5KGF^8 z;?}Ddmgsv1+Bf^!lzBFRpBUL@@xdALI=28El~Izm)h}f+qR+7kk$4Jc@VXj0qG)wm z4y+2T=HNa=5g$0Ay#J96g2;D&pE&maBOBcsk>V!HdU0b>1xr!-Fgs`LSrAg>L5sa* z>E;1NWv73HSAWmbC!+l$((U%0(lm>_8>Dc%J5V0Fz!NrU9vgEtoAN-rQSaBgC`2n>zmKlgo~w=8i3o_@_Sp2He)9v&)f`u*lKc7VjAl>*tnomfAOi zb508wK!S51uRR1=$F72{rcKk75ZLJ$(J7031}Esq?UYz`e{&eqVLg7Hh-Fap9XMmf z6D5AkCSIJtL^RyPx|VLSwOIn&LN(M`zsT3%R$jK6Z9n zMQ=oaVE}eo`LxWqoBPFCSt0Jnk#tocg<(4)U1Pu5gR|tQb(aFXYcu4N{8|}3&ihCw z5ue|=v&?t(@=_*yLq6fR{aMv9oMd%5UeLE!6qF9)^doK7e-xN_HFZUdN;&Zo&#eqx z4$KI^eP2KJIrkXGq&+{+aERYePEd5-DwC!zRKYQ-U@7|&xIsWXHO(z_4gpjCO6&P^ z_gcF>fUh7k(nZtuuK}(i#hv%I_O%MUg1vRRnQ}yiCw=97Fs&=9gbX{LFjUD`1D0a( zE&EnoK672+S1Q?3=~gdeBso5+NQRfDXGkVUOQ-xS5kioHG;Z_8@+K&>S)m0Kbd!8A|ypUgk8?rG|k;82sR)(%F8C2M35bFp0roS#*?h|&3Dgwe$? ze>TZ1PdnA3{{Ae)ImR zGueNZWt`W+Mzx5{NX^HwNXH!c!Nn74y6YfCq4GObv{FC(P{=5X*JL3k*4egxO7n(o z!H7_i64c|!AeD)vf$ga`@bMod*9eU4Z0X!Op@s>1PvPT8kmoN)Ib>0MuNJs9KEhc) zw2J?c4U~+!{9%(E_hy>E{$viCz~1ra-1M+p z+{U^l4fc#7JTVlYezbl#Y1#TtCon4PsiP{fKuPMRwa&!}hU9*e)%5g|j-W@iR&KY3 z0020ROB)RQm^mWS%Gcn{>I0x^I7DJ(lHK4#@rMa-NKF68XtV$FJ{N#vTyF3!A-=WW;+dF3$G*H||6D2R zBe&>#MESxi!}$t*z;_<>u0dQ%dykQ<`YzhRMuzr>yDATWV>|J*7a#uB4?xsJ^<^{| z{ekeXzSJq@e7uK=p(?CK$fmqFVkl%!^44+Hj@3gPmtedIgoc*44MCf;qkn?e0>VRk zKe$FCTD+gOHe#4`lq`N(`=yAOcUj;(F`j^j;`bJr2jQ z-N{+`U8TFBI`{tkV0ov)dM9~`;8-Dx;^h;#ar5t|Rz82QvJpTr@3KURz0I`GPMhSn z#Y_?yMuqQFg6J$dJw@PwWeijf^qsV`Iuok;_*1p-y+Lfx-b%N9aCI}>{X0=`8b@4H z`K5%3<>i%6SYtD&f%K?*$8|-ArJmzHXjzv_jdMpGbUkz}1 z9>%JSN}>Oey%23>HZJ2&758Cmjo-M_#>ZN2p6F8G@Z;^p{pASGnnEf@T+$X7Z(OtV?;JN9dNk;-6>4e=BYn6W;DW)nXc5DU-gZh=`;_w7RHx z5tf(hFWE*|Z4OgYY{1K5i0~*Lmb&#$UqrO3QX8@+&dgLIm_7YmCc@{IH68WXb0$Y^ zVR$KjQ zXt{q-6{iI5fTu&zJ7HS&JF;4Lqj--P_j)33EwXRFfsB15-MEwe*iB->9$+w%)H=@H`hp;eVW9G4e?m7G`~}c4RxPcu&J71%5K^G_>U}3nwpW?SXq@r zJ&A)N@xOZvF^o_$O%~L5Y{_=<=kW`dC2-`}r1A)jQ*uoRm}Xk#ql~L5#!;F@Vk?}- z1>w*4+4DPhnmMKZP;FU z0ywy3h0B5@75MaV<3H{BLMJcEgg9IP#loA+;_p?%Kra2Pus!G z<-Cey#$@domPhaKB3O2oiX6T-Y!IiOcX4J$PvqnQwIBmUp-YH=1)mPJlS2^ZYtVw< zlwZH%k4XXwXi$3eyG%}A!M+C`mxagA0;y^L?nA3IUA=7@Ho*j46<4c0N5W%+)#mLg z6KjjYA>1FCsNw5l4eB;FnfE&V0y9)ZufI?Sw}}R{_nf>j@h)KqGU#nh{hm2Y#O{^x zql+B=k;zz8RIn>Blt`Q()l3wG`g!ZH^2Wt_kjtDQba4j1xXG`|83Jp)-w*E~kdM1@ zndkNcW$Nj@x90SQOHG8Zbo5@+>(F9j#ID_KgMs|Kq5q^kBJw;X1JJ$K#8^F0zFe8p z3>1$N&9}qxzCBf>C5f->E+vu&xnw^mVJ@#}*XK{Swyt)=9SX0+xq>0PzH5pWMD%0z&;I7>QCtpc*@pu{)9P%+P4i6| zxAn$=MLsaC8oL9|Tc3d7(F(PmaBS^8{D5bxAQjz0NDfXs}U~fjemn$M_Bo#ZP zqyLXA*2Im$C-5xxp1wE38!mR*A6|Md%u(&;%Y&mp+h57AUiE6=T7KpYFNC7RQER{b z3h#@M2ZxFL+1El`<}R7P_NT~Jyg!t<-F1+YQw3d88^?xvyCmE%0{>cS791Iebkz=K zzh-?g9qhup$0^~S*RRY_0Dj+JZ&g8B_iU4>x23MU9hJV9Ee(OTD4f+Nus-NP08AdP z=pXpwuX{%zI6@N!06Ci2}n}@ zY0ytxI?Hu_@S3h=$Dp74!bRftbJ8bU-;&w``RO{tsd&HIwb>{^$3Dn6B{#iZGNnP- zg;n<>M`283;LDCv1rM8xr(B=}1nJ9<9c{#|uaAF;6ZD*npCi5 z@oeTYEk0(umhaNgcO%BBdHMz(0VJLv{w(h~v3EZx;kK`E z#50M>*&iKav|CRdj42T}aPq6aHEL#+HgLsOioYYj#_LkeRQ_yeH@LH<2Q6fN`c(Zp zgwMCwcvK-U?Dmuo&>onA1+{)X6(~a*1F*Q6Xm$5_>MV-qvxRL4HytXiMQK`R6>R+T zQl|%Kuyrya9Bp1AtQIKa%~i7{?henID;p`zH)61DfnVY_hXen*8P0CVrVIIwN9W;hiSZhKNxLed@<{c!XEd1elxr~6b z`&3b|!ap*^6{Eq62Uv*QnnVBCLCC;v6^ZJH{L%-~TVd7*haR(UF9fgzx#%p)AM9%T;aC zcYM1OC*_m^sCoAItF1T;(|J{2Ork+Psyg?-LY#Gf#)s%GcynPoFcog90?9_~-ZzF` z1pXr{l8YpqNQkiuU^@5=H42S{C2N8p=t^dulYLi>oS5wge>2oMY*PIiToO&BpN#GV zW{gU}?9as`gzSeG8&~?-La0aVz&@D;yu8>^UKVrdfiMl1c@2?PyQWCDD<3stR(G6&aW_)+706pQN8lfjvHoucWFh$?@;jO zlBwj`*JwUSrBvW^hQ~ax11VB-;8;GEjb(d)l|Eo(2pC7%#{!nA!cI?8lffbjF<^|J z-<$;JNiu&1UA}TvLi}@YaEXXbRtAOQUaw#AA0B;l)1fe^RYHvjiOj9LiizacY1;Vm z2sQm4MI;(}4Ezc@)0%(n|5TdUG`Hs6yRBv3qxylmKf!)lqhYz0vWu7pg{m==-=^vD z-osFp_3w|sYchOw^4Ot!J)whK3-$S2)q(6^eNO>y)c`0yExPHEu;if$?SOKVLnn~Q0ncH2)$>y8ePU->`YKdo4iHM}c>&d- zWZw#yPiPVz*g7zt3Y5t~H>_~gI*qyrEjL`|qm8E--b2gl=FgSgygYpez9c?6&lB68 z=E3QP=1ZXyB!3wH>XHXdegf#rmA>cBGh98nWKvnES&M;Y@BgaA6K_=v&&Tj8VIuW? zrhKLa$J_a3b0X#ZLi3-FRQ4tW_HYm7;~gqtYx27m6c9#9K1{)8M@Bi+<3mwD3st7c%WlUa)z+`*MHD$yH_ z!9p5i7pP1op&Ui~OuGC!e1jVUedw-cOPk~~XI-q>81od8ZZT745=Tev z-dqPcwf&|^@z_0RiZc+-BJsq_l7`sX@@SlUA3iLY!yR_5wJG-fo=sC+)_i__F&^jc zZQ0Ps$|+Me-u@R*xgTk4)b%rk%#_daZJ=$hpAH|K$Lz&I&@~0!=_3iR${z5L{`tuj&mmX7%*COX#%d6Jo`1IW0 z`hjuen7(H+WF(zuv5PjJ<~2Gn6lwJz@_|}vb?NcW0o3u8fg+)xvxFS!buFh;L=9K@ zCg8`O4>Ja*CXIt8Oq<_vOJl<+U#vK6$EBkO9o;Y0e!N6!bS5m!5KKDbneQj=$UNpF zR0*1fd`IlL+gG<9Hqtl2vgA4sX1$JVnSji8wyWSVYL4tW-;c}jr|u9dMH}XsS#ng# zop7hH>V8>U5GkeAoqHC@nNF7SW7Yhz&YZqOl+ztQrFTzp#CRE)n}=4xc8xyl+yuZ@ z*~ULd2P&>Z_sBMZv9%tT+Y>O&r!C8=g>X{!CDXFJY=X4A)lQNCKG)ze3M8#}t(4oGlaj_x{4P`>%{+M7!7d@&Prv zq}5|&M#jnC#A|m^Lig@@B#@q9#TAOkv660sXU$+N}!Ua1jRjVr&{_ZKezUP@X27 z?Xpw+*vX5B85bFqC$UnPg$!<0D`Xew$3v)*sq8zZN0z=y~PlVP}}A_`-jzvt8QY}INe;p!EDXA^B!{GPMI(u?Nu?J z1}s>h#Efn#V?p&RyxiH1I6B{0UKk99;I$Mwiqk~xgp~o@b(2q(*VZ&zWzvc)qX#n< zQMM>8#7rNxJCh!AR0CzF$S8CqzI%)nCNMA(MpD@tAtDNMx^8?HVF((}s~%%>_Unzg zO+GR~gHMId)i|-QNrguNTVbLTlN6u)f(wa}k{pL{j9HjckM;LZChddmj~jt8p>{X0 zGL;RLaa9gDRIq3RvM!_2#Jg(0(97vCXFtXVIgd5Dx!RAY<*|)fmgXSMK!7qqgx3iLVveY7Q zwZt1A1rhs%0XHg4iN0df3?|nh*gngI5foL4h%w=x0NuKJ!5>z}SX*SqGA_}NPqk_; z5F4DDWo|)ML9}}tAz;}zr}A=AqnhQL?J;6)w=iJZz_3t1jcp{A5t7%F!qmZ(V~w3y zP!0mw{l@u|5ALzFe2RvF&aJ~_$X~2T6>cs?CW5m8!?4IXJO2RjPq+dEIN_)W!E@Ph z$Y5qNRk&^#KBI7GD#yMa7XD>Vckm+3w1eT2h62$X#Y9D?%u2hn3Qdy^T62MH~9`fHtz> z7kfXy8X@}Fga_tYfy%9O z3Yd$0kd@Qorrc416$Kf${{SEk{*?a!M0!v0W4Wz}sr;iZMs6&p01`VOG~8E^SY_e3 zPKfrx3dPDgI*cr);UR=U-7e$6a>^s-d|ix>P`c&*S#SnpA50g4i$HS|FyKUcaEpyg zK#Q&cNWe5gk&gI}OHeR8K|%IQsj13vC$Upr+qbqIa<4I8`;(~NDq@vY_6;~Z=G@f03Zfax@I3r7+WST3!iD_Rao5KAFxJ26=)mZ{VrWWXWKV4 z#gGmmJ6e9^G)#xE9c&0%nkeT~WaJASl$#;#Y-7lB zDKl@{4lWR@SA;WiR4ew3485if57}Cl7N|(5&Zmf^Apu<(&({5IP&;8frbcmPT)%yH zwTR#ytIM-yKU7D|Xk^0rZq*na(1eDYiHru~5x25KKx!U)0yjMxTYEDQ+1Zf1*HdvSr+MtK@7g8#!O%nxmVU`>Q`~PG5S!3h^Df`;XFIL1*1jN|)^Y{U6JK(J-t zTZPn`BSeV~1PVk!u#pBObrI2fE2j1T03nbmn4MmUXH^_!%1EFZ*Xpx%0}uK7#?;*8 zZ%F4RW^1zL`s53Xk%1Mww-7c!C~nzcuqU;%$=m>+#du$^=7N|>ZWLtND7zMi3m#_B zd4X6rKUImdHwPfw*4@IVtOzR&wEI6XzqW|^3<%`?vIaq8V&=L4FxxSvC5IZfXKodX znO+yO3hx}N7UC5mV+FfRRmo)j;Z3F|97A10iCPRR)KvAD2m58Q0$0?PQ{S_Q8lx5N z9Dz*sUlVxh43!m^{{SHCQ9#UUIt+2n&cPXbBw`V3w#|@W5gcV7XT`Iub`K$i#m=`t z=1?N#-`S$mA}Q!QbVwn2Ldtj_b>y<)F*B{rTdCv>fs%@!e%1-}Ya9KOE(S%hi!Z4C zmDTw>7bqfRqUBnb z;Ka*o4qs}_c}q6fuW@qjic8G74jJyQW8)}5h4(irW9(H(+|flZDTp@)fjk_Q$zpC` z`dAqctXMgdP=3b-H|a5By`}K(x)?SvkB=f9!yY!q#KmOC{Fn@t8xY1~;@-ifab=s= z#L6}=4V;*xaW_N=idaU)=@$lOEJUrw3~P({x~@(LRl+G)To^r_rXhe*f&SPGVl${- zP&PtKBBF2~AO8SQjJ?+J!C&a2Dvki#(Hwo7AjWEY7?>CyChOojvhx{sf=dv283Dq) zr};Sm29C^xs8TO<9>8}KWZY~7HI~8?`7?;DK&TmVH`#)(@%jd+P&pGKoJVO^I6s~@ zQ{F@DZZ;DePFfsoi|YX{AYW%NcxJ}HTx>nS_2wls<{rMuYLJIv?18g=W#83;BuZR8w#qoK#rtt!ljt;}3t^F4pHXxp;49*purE_w|kW88VXM{e%aFtHiDlp-kWEB+=yLYZ2ZQR3?cM91Gh@`s5+LIsw zOx>|~X5Z7`RuhG2+0YI!voSkJsl4MGrIt`;Oot(+RIlTRHV|W-ty7DEG7)j|l`$>A zCEPD;+l8r7#f%3(SahKmk)=`0Y)m?33U@PY{y}mYu$IGyEP~l`9HNN8+L$!=!FTix zsxuG?DC04Y>m0+8bc1p>c6jW>#mI4rnAX3JqbrgbN5}z=V$?3DhRddSKF= z++`UB!-O%4Jz^X|xS241+|)S5Q1pOzD>~3~LXT|niJu4CuF;&~#) zf^3M{H#a#R`U=2?oeGTGAq=fkDZU0gY#VfMzhA{*+mEb>ABa>hSln*g8z4~w?&*u= z;tV-9kuT7o707o*r28{uRA{+S@;$qami1&dTOnQpW*E6Ru;j>h5PxqA?-oi7f{0K> z2GfT>Z$Mt@aqt-W8*$p%u9F@|==#a^%DM~c0y>gzJrTAOReSwwOJg@-OLyu6kO)<= zyyY`bkwa~5R$-5YCwv%7n8ae@5HFpI4b9uQhX{5tuLAH`_7rYW6Akr=1`CW?oKxfg zSbgN3!xyz~0qTX6cefrT;oN1ZjY4;qGGZT9Wz4qD`0i=PvB;TpYkPy^8ddu?L!M%$ z;FmYHSYc5aip<%$6MojB8)@P4WCEs4+Zq?*g0Wd(8F6w3O^}_}6xlJ^RB#9*m95tX zLL#$c5uKa0YMAn}cA48C+QTB{G!9L?969}*m2q4GR%Cy)88`6*8I$g}E18WSamcwe z?UV10^Wrqkk-+5{vj`Y>0oo$u83b&WVajn2uHXemakp?s{-#%|iH)LOFXS=>?&!-4 z80}~oav03FU}Ui#@m;$1Rbn!n-#yD=4VS5*Jk!3#K6kb;{Hk z!t*z(8T+qcsE@UxWn;;Fr9S9O1^UI5@yD(2iy-PyJ&a)gUG>r~@+$U&UD%$H=t?+MCM3#2CRh z815VfrLrG%WcKqmaRx<4pSs*EXVial_Y78*)wLY1MQqGikMIkdmoVH545aND4mGHb zH&jw4qb@aW7b|3&F(8--#$#n4)y&rLGrE&+o( zFtS;m;Bv}i62!z}NCzWri2T{ePFA6a?QN$S1DF)!;P2ZpfWVoPhNwQ>e*t31F;3CS zIav8U$87szYK@hUZ5H@`(a3Ce6WD&^GqFHMH++*L6+mImzPgW|Y#bRaL(>^B3v>QO!#B!?>Yw`l_lni~bawxGqfsISu%MV%tY$SE z5m)QWF8(7{HH@s>%|1F?Hmk%12iP2EFDw)V5w#;uBkG2AAPwlZ8xv##1XSWS+~=DJ zI2i);a&I(L?G&tOY;OM9m}Op1*OkQC6j;TPoB8AB9DDn*kD@{5Ce|hZA)?d+dYXX) zboM4Ssr#B~k22-^N6xsGHf6>wapo*3OZyEQqfwYCjm=kPp;7%5xDMWiPgo)b?`h6a zL`h%e;=_Nsa)Ja#fapj zXZuvdJ%Tnr@)(G?`2!#|2IdtCvd31&IQJZ1MGE7vyYAV&VsF2yW^3pxG*%ebmTi_L znz@ftxa}^a4jJfjn3qy&dWRP0*VgdO!!X@N5A_QBd6>y@z_m9$WtP}!K;}E{;$G&V zg?0f3PHJOs^a;p0ZXqB{c*aI7A1KAyeeH3x5txLa_|93C_9oS5DmmZ2V9Q2i zZNF)c?ku)2(6G}jOe|h*EFpV>+EE6eRuKL8gZ}_&*v@i^q{MT^YT`a-%4%XK8*}@Q zuM3%iaC2`IH#O1Rahr>h%}k|~)W?&WIM22)u^CP#;}SNa#9hh3%6)DO-YR9paDekJ zuVJ7C^D|^2YHu>?2L)gzi3-$Wou&b8Qz_liy}Sx1f}|O{dE|lpn{jbaAF6}4fN#8^ zj71aqPxnCVXmU`OL{@gJVjP3k49~TxhGx7%^tk|DPCyMDwd{n3>mc0muN*)Hs9;S( zq@G1Vi)pybM89z3*X(xBOl*KuXUEZQ0NPjm za%u_?V%%){8&aW3z!EcB^RQ5wYQUp+?uKTmsK^<%sM?8e68#cKF>fPGV1q>$*wkAd z{9r&gOxTsVD~VnlJX~?HM8ouo;KR)746Sj_@-0-mMj%bYbxYi8ARpdZkBe}bF;!M1 zDrQhh#5A`VqXOfcd$DvJyaFh(6>piU&*>XOWo86SOkak?n@skcZS`Wz#K+BC1p_k2 z#&NAoZ$gQ~xb6o9eWqM|P1^~K$0soXEygFKM|SRthMIgT7_`Z##usVLkzI{$Cx~*s zF}6F{jg*dydk+CN#vs58DTsfleum&dOk#y!w8*}`W)KkVh#6OW3PqV<4aJVfr~s{| z**}vt^qL6uoRcV^ld2ekj`sJ|^b_l=5DHp^2_z9;Yk}DqoI1o5a_mwpRwx|YEgvHYg zJ5|Fj5e`k}Dw5IBouXn~edNjz?TG%)A;(?%_JJ2qwmu?SrYr{lhXG#O0d?CKAE~ys zWZa-CV#=an!MxiHER_e=3+6HQ3WoqAj9*UM7qjg)1r-%YX?tTG;$u^jh*NJdUzxW1 z3O7^>Q1R1?Gj9;B_N-V$QqTgX6yjrj#u}SKh`B-@U8!s)R>o$hChj3E{Uu`)AKG?q zWFE0|ab6|{+r(e;a~WvN3%i&zh3`J>oW@&$zww1iv<^t9xwb;vd53BaTmoz|3*8eO z&ubVITZLNZad$iICe|wNaspy3!*|b z$;zlIM&P3<3RP@e0=bn?aTw9LTevDev5)+XzzlxSVL2Gs4UdVrmzDO>=h;S&L_^G9 zu;c6ua9mt+`>p_9WBVR*VgPc-X_&^r^&|?JTWE#-bKC);?rdY0$k|T{uF-KYARKr> z|0m%pslTqa=Kl((Y;ec#HO!&f(5L2S=y`A6R(okM;yB z9Bt++pW-N8!osFE+T;@Q?CqHc`wS|eG}Ai!3>d`9zqYA~?qs{-_x9M!jxytXH4`q# z8+`U0Y+{dRF|Tb$QoO)6L5_zlla3sggHiRV?;<0W3gMbBctF(e@yEwz}&x~Z^Y&cCy*~BTj>?mPPL3x81 z9gp$wcWmHeBRHvcU^KJ%fin&xow&qojCh$Csad8`k-5+QGsSK^;5PeWfJ6*K6Bv-f z0k{itc8I5S%eIO(gE0@iM~KFDw=;D!3Kuc*#$g+{iYj9qKsb-Z%!h~#!kjS%L$$;vLJ%{qD)APT1WU{-HZe5s8Q>T*|}<7 zU=(IQ{z{pTaTtr3`7y;nI-0Tcn7*btyNmpU!}c8J?sUdtg^kIX1&N=BQ5)** zTA{Y7f6D5tiUPFD^|;Cjj9@TuVjvUwW3!A5hma}*a<<(b8g4s;ZiMPL)}a3YaTu`Y z7~DAq#lShJpcaJ{?2tAw1OLPTJ`n%{00ja91_}WK0|EyC000010uT`)F(5%OQ9xmF zk)iMd5+YDwfw95S;W9!}@grhz6M!>vf{>!Z(*N232mu2D2|ob%gCG06T?>Z#6Zl!&W0TbW zJY%%ft}2R3Zu5T@xw$QBNW|=BNJX`0;w7&=4bI4jRWs2q@H&#yjwVMpV;a<=9*psj z$2K`BKY*6CrsJ^8>CDwr_cQn{bk{=ihlaW;A@|at^(j7;nLZogXF`*%gefX}$#GoW zNJ}o24U39MQ_R@)U_z8b_ziT&qTB^HLFu#8avlq}DJk6#->*}@M297dsasl-nh|6@ z82C>jnv>{QA*vN?zLq^GT_+y>a8M=yF^c8Xubb9DjWICU#0^gr!!WM1<^)e7j(qTp8G zzg7`hNmV~JHu`bbzuz4Wy%!?6jcSz8s~kT~(N)nL?;FH5r9OU97poHf>(%z{@fmaqIp`g2c^(;9px8D ziuy6Th2+@ zC$sE&F`@}WSfhQ(NqVs_<^Juf+x4FI@17*Ri1XDK@9XZjC&p7kzN`+z9N6??YXcnK zgmbTT=C}@#r|WlZqqROypPZS8%~x!&Eec+9Cuo&C{LHIQEh%1Di^G!@B8S~hNJK;8 zF;rHP(Q+DVXYyK|2#XA4RUVJ&x6S^zcrf&4FJ=D#_4}ThFJGxDen_gapE1~aGHls| zsq@}gkJ|kB&y=0q{{Zs8s{8y1#Zgeiv%z&k;ANM4zHfdjtkqY1znnLR@$=H<&CUA0 ztGoXIYyFWo&bO{F)I$4>o}A@&tNy*`XTw6Kk7e}^sCr#$Ef!_PeP~j*qlNdi_UGL- z!QLgKn5vSvrDa;K$8zY#j&;%2r0o{cc+kC={iXL^{{UW=`difX!a8YYMMBXTMbVi# zs-hYY+*LEN=d$$roE?lp!S#DcXV|oK7hDP zh;nnu4a;%RsQIlidY+G-@3DQw6MX$|#g9o?H}$f+DW3z;ubtm}JrZxb=|Nf?!&>~; zXCasMpMw31iT>}Vjn~lrtqa(%v)KOt7#FPrs!OwX_80nlt=Hv!G;&kUoEV*!SI?rk zE|`QVIU*5o^2lmKMnzH4AIF%}L^Fo3!FHP@yR^Iy*ja~_d3AL&Xjgt;7q9K1SXg=$ zR8>SitT4+Pc1jwn8(38?ez;UB7%-#T@5 zkkN9J({%fbEht)YXLFa|^`j8|O~3)>`&iFA^Y&xkb zx8i!R_Qm+A3QoyhwONwrc!~c2gZqB-*v`9~uduFdEVnyZ{&+vq{{Y9pEJBhI6r%N6 z6-R{hq=y&?)a^&>mMk2HAU#=qJvHPWtaE^?1 z`N@B$3*UCX8_KU%Pi6(;UFcl{5aVB7oNo`~uc+L?zXLmV>_tyVu(tV`;4$fPhupO9 zn;y7i#Pww>_Pe=bqq*+%tjjXl@GK&m&@slypdA%NL<+Im_y!cNoqY~z&+uf&m?=6Ubi?;T8UoWu* zBH8tj(Zb)Fm5Do|3wM^1AusbGtT8$~zQPo%UnqAPiB~>;#$o>e41Rw;tB-<{m1+u&tFjj zr(zT-Z?~V3=@d#Ezp$*G`iL7`_U|Bc@A_zgsB$rkx`*rflT)(bWWJ617xu5K(Xg~( z-B0_z#>YGupE~%PYU*Bl=hxi*rS~^8b@IsUnx|x6v-)nY-{DQ_&jJlgxutik;M06&7sPZ4UtzuJG)spq`O{GrF=@z!RJ zAHRjq;H?*9^FdWbkKf#OZ@O5}%nuunrYjEP?<}iI?1%pVQ_?;5`FW`egR_3p6rn;w zRUxaBw&hV|dP+1#;(Xr2wurH5USBT48kzbp%i@1;-dL|e^JARVj2G)JMMy_o=hihv zOL_gD=d`rl^RCYOdHK&Mc7J(AUCWu_wnRooN8mJsR#62#AMsBvOcobz;d7gqVk4u%w17kcxRBqFFo(Il8s5n;kDh z`FBvYElFZgU2Gw6`Rc=pdz<(Xvwc`O_$ge-t}eza^VQGIJ4Jb5rM&l!;;C~ZF+7Z8 z7|5^MT-aF^D=UbGqRgH2}WWN|T1HL{uV@yxgcHE709!;7VRA>CM#g7e zMSTksdJw0HmwJyw<_xtZ@b zp^<2}0V>aVCWUcb>B+p_r-AU*WXESbaPd5AwylLM3P{APIkD=@nCvp*wvF`TUdCpv zCrv1>oy>@H%&{n?zOA+5PP(zDD2j+z^Kub6zAMw71Dl%FYK*qGt78&e6)XtBiEpC% zF{x{OFErr)0F7+P7A1A(&&WbBIj;G6-+=I2Q_S4ltYmi3jPNtV-dW)-Yf3RJa9;;H z5ueQ7m%zY?M?r{&;ugK9nX8_5H~fy$W7p^Wedg!4p6O>sHRD<_#kQPid=1R##;X|N zymU9(Bd=33F`McC0B@hD`HG^V(YW;DZ$DYH9TR>Y`nTx&PpEbn&Qfz+ESru@W^_3( zH58n(rxu(vZtLCa4+(x;vA}c8)ZV4hmqX5sYuhrxjLmZ}Zj1We-hAZW!Bn-MakmFD z#Jtc_*u@8V?hQ*+Pk>RS-? zD{Q|kVxr(I`s9+&Cb8C1I-UM O(bdE1`iph -1); + }) + .end(done); + }); + }); + + describe('when GET /file/:badid/:name', function() { + it('should receive 404 and some HTML', function(done) { + request + .get('/notarealid') + .expect(404) + .expect('Content-type', /text\/html/) // Could include charset + .end(done); + }); + }); + + describe('when GET /:bad-id', function() { + it('should receive 404 and some HTML', function(done) { + request + .get('/file/notarealid/orname') + .expect(404) + .expect('Content-type', /text\/html/) // Could include charset + .end(done); + }); + }); +}); diff --git a/test/web/user.spec.js b/test/web/user.spec.js new file mode 100644 index 0000000..31bc268 --- /dev/null +++ b/test/web/user.spec.js @@ -0,0 +1,26 @@ +import app from '../../web/app'; +import { agent } from 'supertest'; + +const request = agent(app.listen()); + +describe('hostr-web user', function() { + describe('when POST /signin with invalid credentials', function() { + it('should not redirect to /', function(done) { + request + .post('/signin') + .send({'email': 'test@hostr.co', 'password': 'test-passworddeded'}) + .expect(200, done); + }); + }); + + describe('when POST /signin with valid credentials', function() { + it('should redirect to /', function(done) { + request + .post('/signin') + .send({'email': 'test@hostr.co', 'password': 'test-password'}) + .expect(302) + .expect('Location', '/') + .end(done); + }); + }); +}); diff --git a/web/app.js b/web/app.js new file mode 100644 index 0000000..ff63caa --- /dev/null +++ b/web/app.js @@ -0,0 +1,170 @@ +import path from 'path'; +import spdy from 'spdy'; +import koa from 'koa'; +import route from 'koa-route'; +import views from 'koa-views'; +import logger from 'koa-logger'; +import favicon from 'koa-favicon'; +import redisStore from 'koa-redis'; +import compress from 'koa-compress'; +import bodyparser from 'koa-bodyparser'; +import session from 'koa-generic-session'; +import staticHandler from 'koa-file-server'; +import co from 'co'; +import redis from 'redis-url'; +import coRedis from 'co-redis'; +import raven from 'raven'; +// waiting for PR to be merged, can remove swig dependency when done +import errors from '../lib/koa-error'; +import mongoConnect from '../config/mongo'; +import * as index from './routes/index'; +import * as file from './routes/file'; +import * as pro from './routes/pro'; +import * as user from './routes/user'; +import mongodb from 'mongodb-promisified'; +const objectId = mongodb().ObjectId; +import debugname from 'debug'; +const debug = debugname('hostr-web'); + +if (process.env.SENTRY_DSN) { + const ravenClient = new raven.Client(process.env.SENTRY_DSN); + ravenClient.patchGlobal(); +} + +const redisUrl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://localhost:6379'; + +const app = koa(); + +app.use(errors({template: path.join(__dirname, 'public', '404.html')})); + +app.use(function*(next){ + this.set('Server', 'Nintendo 64'); + if(this.req.headers['x-forwarded-proto'] === 'http'){ + return this.redirect('https://' + this.request.headers.host + this.request.url); + } + yield next; +}); + +app.use(function*(next){ + this.state = { + apiURL: process.env.API_URL, + baseURL: process.env.BASE_URL, + stripePublic: process.env.STRIPE_PUBLIC_KEY + }; + yield next; +}); + +const redisConn = redis.connect(redisUrl); +let coRedisConn = {}; + +co(function*() { + coRedisConn = coRedis(redisConn); + coRedisConn.on('error', function (err) { + debug('Redis error ' + err); + }); +}).catch(function(err) { + debug(err); +}); + +let mongoConnecting = false; +const mongoDeferred = {}; +mongoDeferred.promise = new Promise(function(resolve, reject) { + mongoDeferred.resolve = resolve; + mongoDeferred.reject = reject; +}); + +function* getMongo() { + if (!mongoConnecting) { + mongoConnecting = true; + const db = yield mongoConnect(); + mongoDeferred.resolve(db); + return db; + } else { + return mongoDeferred.promise; + } +} + +app.use(compress()); +app.use(bodyparser()); +app.use(favicon(path.join(__dirname, 'public/images/favicon.png'))); +app.use(staticHandler({root: path.join(__dirname, 'public'), maxage: 31536000000})); +app.use(logger()); +app.use(views('views', { + default: 'ejs' +})); + +app.use(function* setupConnections(next){ + this.db = yield getMongo(); + this.redis = coRedisConn; + yield next; +}); + +app.keys = [process.env.KEYS || 'INSECURE']; +app.use(session({ + store: redisStore({client: redisConn}) +})); + +app.use(function* objectIdSession(next) { + if (this.session.user) { + this.session.user.id = objectId(this.session.user.id); + } + yield next; +}); + +app.use(route.get('/', index.main)); +app.use(route.get('/account', index.main)); +app.use(route.get('/billing', index.main)); +app.use(route.get('/pro', index.main)); + +app.use(route.get('/signin', user.signin)); +app.use(route.post('/signin', user.signin)); +app.use(route.get('/signup', user.signup)); +app.use(route.post('/signup', user.signup)); +app.use(route.get('/logout', user.logout)); +app.use(route.post('/logout', user.logout)); +app.use(route.get('/forgot', user.forgot)); +app.use(route.get('/forgot/:token', user.forgot)); +app.use(route.post('/forgot/:token', user.forgot)); +app.use(route.post('/forgot', user.forgot)); +app.use(route.get('/activate/:code', user.activate)); + +app.use(route.get('/terms', index.staticPage)); +app.use(route.get('/privacy', index.staticPage)); +app.use(route.get('/pricing', index.staticPage)); +app.use(route.get('/apps', index.staticPage)); +app.use(route.get('/stats', index.staticPage)); + +app.use(route.post('/pro/create', pro.create)); +app.use(route.post('/pro/cancel', pro.cancel)); + +app.use(route.get('/:id', file.landing)); +app.use(route.get('/download/:id/:name', function(id) { + this.redirect('/' + id); +})); +app.use(route.get('/file/:id/:name', file.get)); +app.use(route.get('/files/:id/:name', file.get)); +app.use(route.get('/file/:size/:id/:name', file.resized)); + +app.use(route.get('/updaters/mac', function() { + this.redirect('/updaters/mac.xml'); +})); +app.use(route.get('/updaters/mac/changelog', function() { + this.render('mac-update-changelog'); +})); + +if (!module.parent) { + if (process.env.LOCALHOST_KEY) { + spdy.createServer({ + key: process.env.LOCALHOST_KEY, + cert: process.env.LOCALHOST_CRT + }, app.callback()).listen(4041, function() { + debug('Koa SPDY server listening on port ' + (process.env.PORT || 4041)); + }); + } else { + app.listen(process.env.PORT || 4041, function() { + debug('Koa HTTP server listening on port ' + (process.env.PORT || 4041)); + }); + } +} + +export default app; diff --git a/web/lib/auth.js b/web/lib/auth.js new file mode 100644 index 0000000..4f8e547 --- /dev/null +++ b/web/lib/auth.js @@ -0,0 +1,193 @@ +import crypto from 'crypto'; +import passwords from 'passwords'; +import uuid from 'node-uuid'; +import views from 'co-views'; +const render = views('views', { default: 'ejs'}); +import debugname from 'debug'; +const debug = debugname('hostr-web:auth'); +import { Mandrill } from 'mandrill-api/mandrill'; +const mandrill = new Mandrill(process.env.MANDRILL_KEY); + +export function* authenticate(ctx, email, password) { + const Users = ctx.db.Users; + const Logins = ctx.db.Logins; + const remoteIp = ctx.headers['x-real-ip'] || ctx.ip; + + if (!password || password.length < 6){ + debug('No password, or password too short'); + return new Error('Invalid login details'); + } + const count = yield Logins.count({ip: remoteIp, successful: false, at: { '$gt': Math.ceil(Date.now() / 1000) - 600}}); + if (count > 25) { + debug('Throttling brute force'); + return new Error('Invalid login details'); + } + const login = {ip: remoteIp, at: Math.ceil(Date.now() / 1000), successful: null}; + yield Logins.save(login); + const user = yield Users.findOne({email: email.toLowerCase(), banned: {'$exists': false}, status: {'$ne': 'deleted'}}); + if (user) { + const verified = yield passwords.verify(password, user.salted_password); + if (verified) { + debug('Password verified'); + login.successful = true; + yield Logins.updateOne({_id: login._id}, login); + return user; + } else { + debug('Password invalid'); + login.successful = false; + yield Logins.updateOne({_id: login._id}, login); + } + } else { + debug('Email invalid'); + login.successful = false; + yield Logins.updateOne({_id: login._id}, login); + } +} + + +export function* setupSession(ctx, user) { + debug('Setting up session'); + const token = uuid.v4(); + yield ctx.redis.set(token, user._id, 'EX', 604800); + + const sessionUser = { + 'id': user._id, + 'email': user.email, + 'dailyUploadAllowance': 15, + 'maxFileSize': 20971520, + 'joined': user.joined, + 'plan': user.type || 'Free', + 'uploadsToday': 0, + 'token': token, + 'md5': crypto.createHash('md5').update(user.email).digest('hex') + }; + + if (sessionUser.plan === 'Pro') { + sessionUser.maxFileSize = 524288000; + sessionUser.dailyUploadAllowance = 'unlimited'; + } + + ctx.session.user = sessionUser; + if (ctx.request.body.remember && ctx.request.body.remember === 'on') { + const Remember = ctx.db.Remember; + var rememberToken = uuid(); + Remember.save({_id: rememberToken, 'user_id': user.id, created: new Date().getTime()}); + ctx.cookies.set('r', rememberToken, { maxAge: 1209600000, httpOnly: true}); + } + debug('Session set up'); +} + + +export function* signup(ctx, email, password, ip) { + const Users = ctx.db.Users; + const existingUser = yield Users.findOne({email: email, status: {'$ne': 'deleted'}}); + if (existingUser) { + debug('Email already in use.'); + return 'Email already in use.'; + } + const cryptedPassword = yield passwords.crypt(password); + var user = { + email: email, + 'salted_password': cryptedPassword, + joined: Math.round(new Date().getTime() / 1000), + 'signup_ip': ip, + activationCode: uuid() + }; + Users.insertOne(user); + + const html = yield render('email/inlined/activate', {activationUrl: process.env.BASE_URL + '/activate/' + user.activationCode}); + const text = `Thanks for signing up to Hostr! +Please confirm your email address by clicking the link below. + +${process.env.BASE_URL + '/activate/' + user.activationCode} + +— Jonathan Cremin, Hostr Founder +`; + mandrill.messages.send({message: { + html: html, + text: text, + subject: 'Welcome to Hostr', + 'from_email': 'jonathan@hostr.co', + 'from_name': 'Jonathan from Hostr', + to: [{ + email: user.email, + type: 'to' + }], + 'tags': [ + 'user-activation' + ] + }}); +} + + +export function* sendResetToken(ctx, email) { + const Users = ctx.db.Users; + const Reset = ctx.db.Reset; + const user = yield Users.findOne({email: email}); + if (user) { + var token = uuid.v4(); + Reset.save({ + '_id': user._id, + 'token': token, + 'created': Math.round(new Date().getTime() / 1000) + }); + const html = yield this.render('email/inlined/forgot', {forgotUrl: this.locals.baseUrl + '/forgot/' + token}); + const text = `It seems you've forgotten your password :( +Visit ${ctx.locals.baseUrl + '/forgot/' + token} to set a new one. +`; + mandrill.messages.send({message: { + html: html, + text: text, + subject: 'Hostr Password Reset', + 'from_email': 'jonathan@hostr.co', + 'from_name': 'Jonathan from Hostr', + to: [{ + email: user.email, + type: 'to' + }], + 'tags': [ + 'password-reset' + ] + }}); + } else { + return 'There was an error looking up your email address.'; + } +} + + +export function* fromToken(ctx, token) { + const Users = ctx.db.Users; + const reply = yield ctx.redis.get(token); + return yield Users.findOne({_id: reply}); +} + + +export function* fromCookie(ctx, cookie) { + const Remember = ctx.db.Remember; + const Users = ctx.db.Users; + const remember = yield Remember.findOne({_id: cookie}); + return yield Users.findOne({_id: remember.user_id}); +} + + +export function* validateResetToken(ctx) { + const Reset = ctx.db.Reset; + return yield Reset.findOne({token: ctx.params.id}); +} + + +export function* updatePassword(ctx, userId, password) { + const Users = ctx.db.Users; + const cryptedPassword = yield passwords.crypt(password); + yield Users.update({_id: userId}, {'$set': {'salted_password': cryptedPassword}}); +} + + +export function* activateUser(ctx, code) { + const Users = ctx.db.Users; + const user = yield Users.findOne({activationCode: code}); + if (user) { + Users.updateOne({_id: user._id}, {'$unset': {activationCode: ''}}); + yield setupSession(ctx, user); + } +} diff --git a/web/public/.eslintrc b/web/public/.eslintrc new file mode 100644 index 0000000..e5a34ae --- /dev/null +++ b/web/public/.eslintrc @@ -0,0 +1,5 @@ +{ + "env": { + "browser": true + } +} diff --git a/web/public/404.html b/web/public/404.html new file mode 100644 index 0000000..4f892f3 --- /dev/null +++ b/web/public/404.html @@ -0,0 +1,46 @@ + + + + + + + Hostr - File not found + + + + + + + + +
+
+
+
+

404

+

We can't find the file you're looking for :(

+ +

The owner may have removed it or it may never have existed in the first place.

+ + Try our homepage instead :) +
+
+
+
+ + + + diff --git a/web/public/50x.html b/web/public/50x.html new file mode 100644 index 0000000..738b514 --- /dev/null +++ b/web/public/50x.html @@ -0,0 +1,44 @@ + + + + + + + Hostr - File not found + + + + + + +
+
+
+ +
+
+
+ +
+
+
+
+

Oops!

+

It looks like you've hit an unexpected error :(

+ +

Refreshing might fix the problem. If not, sit tight! We're on it!

+
+
+
+
+ + + + diff --git a/web/public/browserconfig.xml b/web/public/browserconfig.xml new file mode 100644 index 0000000..81ec113 --- /dev/null +++ b/web/public/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #00aba9 + + + diff --git a/web/public/config.js b/web/public/config.js new file mode 100644 index 0000000..7071e7c --- /dev/null +++ b/web/public/config.js @@ -0,0 +1,78 @@ +System.config({ + "defaultJSExtensions": true, + "transpiler": "babel", + "babelOptions": { + "optional": [ + "runtime" + ] + }, + "paths": { + "github:*": "jspm_packages/github/*", + "npm:*": "jspm_packages/npm/*" + } +}); + +System.config({ + "map": { + "angular": "npm:angular@1.4.3", + "angular-reconnecting-websocket": "github:adieu/angular-reconnecting-websocket@0.1.1", + "angular-strap": "npm:angular-strap@2.1.2", + "angular/resource": "npm:angular-resource@1.4.3", + "angular/route": "npm:angular-route@1.4.3", + "babel": "npm:babel-core@5.8.5", + "babel-runtime": "npm:babel-runtime@5.8.5", + "bootstrap-sass": "npm:bootstrap-sass@3.3.5", + "cferdinandi/smooth-scroll": "github:cferdinandi/smooth-scroll@5.3.7", + "core-js": "npm:core-js@0.9.18", + "dropzone": "npm:dropzone@4.0.1", + "jquery": "npm:jquery@2.1.4", + "zeroclipboard": "npm:zeroclipboard@2.2.0", + "github:jspm/nodelibs-path@0.1.0": { + "path-browserify": "npm:path-browserify@0.0.0" + }, + "github:jspm/nodelibs-process@0.1.1": { + "process": "npm:process@0.10.1" + }, + "github:jspm/nodelibs-util@0.1.0": { + "util": "npm:util@0.10.3" + }, + "npm:angular-strap@2.1.2": { + "fs": "github:jspm/nodelibs-fs@0.1.2", + "path": "github:jspm/nodelibs-path@0.1.0", + "process": "github:jspm/nodelibs-process@0.1.1", + "systemjs-json": "github:systemjs/plugin-json@0.1.0", + "util": "github:jspm/nodelibs-util@0.1.0" + }, + "npm:angular@1.4.3": { + "process": "github:jspm/nodelibs-process@0.1.1" + }, + "npm:babel-runtime@5.8.5": { + "process": "github:jspm/nodelibs-process@0.1.1" + }, + "npm:core-js@0.9.18": { + "fs": "github:jspm/nodelibs-fs@0.1.2", + "process": "github:jspm/nodelibs-process@0.1.1", + "systemjs-json": "github:systemjs/plugin-json@0.1.0" + }, + "npm:dropzone@4.0.1": { + "process": "github:jspm/nodelibs-process@0.1.1" + }, + "npm:inherits@2.0.1": { + "util": "github:jspm/nodelibs-util@0.1.0" + }, + "npm:jquery@2.1.4": { + "process": "github:jspm/nodelibs-process@0.1.1" + }, + "npm:path-browserify@0.0.0": { + "process": "github:jspm/nodelibs-process@0.1.1" + }, + "npm:util@0.10.3": { + "inherits": "npm:inherits@2.0.1", + "process": "github:jspm/nodelibs-process@0.1.1" + }, + "npm:zeroclipboard@2.2.0": { + "process": "github:jspm/nodelibs-process@0.1.1" + } + } +}); + diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3a24ecff976e427f543f276914411013ffc43f3d GIT binary patch literal 15086 zcmeI3&udgy6vuB&t0-dJxN%_y+KRX_8-=bCEC}xW4-)96bnV7XlTC3|2y{_Ou`X?~ ze?WH~EhM|T>%vk{hElpHO_72{;r07@bH9%>FZ1hVW|9>1;M;TGz30dGoO|wlqu7+@ z(tJ95Hc7V9M{lKcEv3|Ib>F|y{MVXWTFUS5rF7$5N|&UgC0TUmB~p^!ES}clJEw%> z4RH!CvbiYyD*P$D7!&AX(-N>Rgg=Bw!d5_h_ZW%pDR)?vP1eDi;x z^`8ae0mkgh6>NDl?q`o3_4Jze@_Xj9-Jtx@B_D&hv4;3%4&Q*iee z`&ZQ>+Kw~E|1iCxNC|Arb#edSluCS?(idN*^!fWKZQe=g?sMs(vn*sA?6_xI!ivEC zR6blhN6(?G0R6C^h(%D`t3pTkWgkI{mXBht2%P8FS^7ShrCb^if0i8ZZU2Mflk;c7 z9bsciz}Gz?*0W!H*5TKpHj+c{DA#Y8v=7N8Vchs-Z%F^`F~GSQs+V)2$D76i|c zW3EYj?>~O8l8@v-4qAgNy6i8%AGpWp<9~#k*?uqk&pB*k&!aJMdU!CG*Dh)7vrSyi zZnb|JJHB;>oj>P~PjaG$Wt@^o?LVvuZNdG$mN_wRevRX2AHFx(-!-9y&kXjJJ!Z|Z z?}ga(LF`j>n&gi?F`|EJ>u(j~=#w7ksgvIK62IjfvUG1bo^!P%C-%F{w9PNCvX4=<^SX26o%)w| z{W!IYIK+*}ggtS`AqO0vYgL)VVa}AMFo%+@yct`k1{sU~r$n#eKkdRR1{7hd$@X{d~mH_X;(fl>bTm z?Kh~GVorm9S&RR1{U_$n-ZjbJ`UhQq#Xm1x&b?55F9+okcu%eWb8L8=929rZJT}5Z zVKwULeb;&Ny4I>#8c*E+_>~`iAKl91v3f!Jt|51Dbsw8&U7|1C7B;=6@wE8Eq49kx z8|Sd9F*yM4^i6>|>Vo8*zw7x;I6nja>?!^m?EySw;~d}$Kj&fT?+tmC+=I=;^$))A zPyF&6c;2-dCW8%ihBvkFHx-WT!7jg=n+AXTr8kMqd2~%nIfA=&FUt zSCG@-Z=W$fIaK$NWA~Gp5B(Q^%aFrUp{HM52mEBasqhc}y#K_fmsW);566#E>-0Tb zW8JBL^*b!;XWmogZ~ux(9eoDf1H7{z^cVSn@*b3Q&CT65<@Z4AB~Sae^t|L$>R+qL zb@??9OZW`}I#F*Z_gbuJ@UMP$twwMF)^0Hn)U|x5nnx^ZO@qpF;i3ZIE<7 zn|t-$tn=_YybaIQrPnQ4*Esg6<5fL~Zq{4X7`~C)u(5Na##Mc@uZnB%-}7zKJl_)T zDE0}C)POs-j=0~$__NPmH@9Jun7ir#|N0|6*NA&yRfu=$uo(3<^Q+>d>$SQ*@4NVGZWj;DQ7>`=y;4CC5w&366jPmPH;DOTl!dYd;q z95;^XOU^FwILl2?{oazD_ZdIYKjTSJuetN!Y?XhepLD+m@ORuvrR!nd$lK;j?7hJD z$QkoDZ}O;WZqAX%UdIFYPue%po;$bvGjpuhUisGTYWz7<-1C!wb4#r`!`%5kU)8su z&S4tw#1Xj9Cq>V9B>U}|n+D%m`Y>nYEaM#cKB~Z*UV-kv9OD0p;u$TUQLqy!jg+`U zZ+!Vf)_?K}yT6L(+g-V{fc(AKSw_AncGi)97tc!lo#Ig`UtX9mrm zkreNwR?6ip*NepaT=5e5@e2fT DSn4MC literal 0 HcmV?d00001 diff --git a/web/public/images/animation.png b/web/public/images/animation.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd67261bc1ffd95f65ecdc5d0a856f262957594 GIT binary patch literal 9169 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 Ef`o*yy#N3J literal 0 HcmV?d00001 diff --git a/web/public/images/apple-touch-icon-114x114.png b/web/public/images/apple-touch-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..0920fb4ae5e7999484980af9f0eba88475a85262 GIT binary patch literal 860 zcmV-i1Ec(jP)=fm&Bstg5Q>^71w^GrYRHXU_7i0008# zNkl@u0Pyk9~R;oSqVYzl+HU@#aA27`Oy z?*RXRp4RBh8=RVCS7}U0_zvNf%+hX3@eW$7HcM|yNtCsV^af?I5~7j7e221FF)0AP zM_Hsk2fa~=Bv6Fe*{pnnAUXs!ahCFLrzF}3O<@sU?Tu{T5u8s)DWP^Y!mkp8pG9=Y zoU}i~bXrLOVA98{OLzvM{@D`tcs*Z8*bxdW&>7;J$|no+snjOig=zhrj&#(^3oKP-Z`H(mK~J>!!{m= zw7YES=6)QD#nerThEJ?q-e!?yh7ANUKg1*F#Gv zCg9FW2D^N=`beZ1v6Rpw_U!DP(l16r;oT%-Mp|VO5N`oXUaIJpY$_;RqwkshfT#hP~OH0~V0B%+?SVZ&6xG9maG~70&T5e>$ z+~fAdDa87G+pKh`s>Y{h1fpEss`QCp6sJ6LGHS9?+Tb)%KCSWRqw68p8RA1Mr&}Y) z0yiny%a=b^Z}ZUx07#=_Tgs^Fr4#C78(iO5+ot3QHDYqH2#d7&Ue+sBsBQ21DhnK| z-}hIR;@g!lltcMSd6oYrC83J)GV$7jJBbDw{_oSk6(u!*_op1nk5H26$Va6tMAer7 m9|?B`27|$1Fc=I5xAF(;z%CZNF;o@+0000rwE{~0kXk})go}WWNLHPLi)U8T|0008q zNkl2m8J3`S)Ou`locwvD*Kj2)XSCZ2XK=TB=FIP+CP=@bTo!C){L3?c(xXO$AN^#BY4Io}9u4*d* z@M1AjLSHOqa%jXJ;^*v!#!C{<>xW2r_Yv>{6yy_v^Ko9O`Fjxz!q-6^Vo_In^vdl* zuk<~>0^?k$ES?%EhM!a~x@E@wy6HE}H#pDl4U z7P;sAa=7m<24g42C6;bKlfqJN2iQ+s1KZs>fqZ;{0J|o}xZk$hj^{FCKQRI|ye!}y z%lU}?#On5fS|5LUDo6u>*sI2Inp|sR0<~+Na%z5TXBsc~)b6jY^E@H~<+VGOi z6TA%a-2Xkqp}CEZuhvp(zz$-?Ut3=GSszFnqbYcMGZElI znV4JYT5)BFhxo6F6MjzmgNXy3Lc90H-5BB_{_n+|`R$37=uQkQ{=Hy-U@#aA27|$1 bFt~sp+RZAPLlBz&00000NkvXXu0mjf&eWSx literal 0 HcmV?d00001 diff --git a/web/public/images/apple-touch-icon-144x144.png b/web/public/images/apple-touch-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..ce05d402ccf61d153903aa39cbec19069b3ec129 GIT binary patch literal 1022 zcmVb#~9r&qF^z<>cg{pP#?JzN6LA&;S4fj7da6 zRCwC$n%Pe4Fc3gJi}&UKKljpDWkTA70Cw6d&3S+dHQ{J7TMb506h%=KMNt$*QIx-f zKf$~o^QCG$i>+k z=Cd$~)7Nq<<`rN`K4t=4KyVMsWXJfb#ZB08}e0+omLT#y(Wf9vb zZM!&%(o7-woQ2Ja(W=qht0&hYN>ha-Lp{S@!(?et7YNCUAw~~SA1ru{P-oXjDl($M z`9ea;$6cJIi(evyTOZo$F=V-9zEA-ElE<<%iK5Jv=}B!Wuw;uwNM4B16+)jGO$0zW zSf5fUDYY6Muib#%~F>zMGIyAr(>~6;h$Ag*q+_Bm@0gXa+Rm4|p_?0YaluAr(@gw-w^q{O1vB{sM}5 sGtis|ufQmZq9}@@D2k#eit=~<0q7z(s{n8#bN~PV07*qoM6N<$f`gdLlK=n! literal 0 HcmV?d00001 diff --git a/web/public/images/apple-touch-icon-152x152.png b/web/public/images/apple-touch-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2749f7d475b0dba8db126918a1f3b0e4a29e5d GIT binary patch literal 1025 zcmV+c1pfPpP)0{{R3FC5Sl0000gP)t-s|Ns9Z zA0Q?oBmMpT+}qrMetx5&qDDeP($Uhvz`(Y(wVIfj?(OYfTU^WpOV?JhfD4ILH(5ZywZs%v zTM4+5SXB$Uo|hBT1(l6}D~Z*hl}xyrn8N!`n|hA*?=%oFLhK!$2QAW3ZGKAPqZx-x zH_(ROB5!Li+meFthsgmBYo^}>ekpuZWBn;1Z7tq3$6L@1ANXL_vmyM@y#FER%QF*h zqhe!=XMM+Z2-=8<9hG$4R?EdP4;TBVftvgV`i8 z-C$LLB`ncrK$~FmC)WvgfR7wh;!4)kdS%hmDJU&8F-L6Czd|tJkXrM&yTW zHhw8VvF@ARx`v%5^wDC$arJ6azAYxkE~V~j0kt^hEtb9F9wxSzI~=LYtkete{W<11 zF}){KpO=?o9|ra6CyNE=O6T+^jrA~2tT@-|3LFysm(H5zrx9X`xX|yltBJxja}E*9 ztfMY3W|az?&mcnfTabDJo-78+t`K^AeiHn#BGSWlfSB(H7$|DEWI=7R{2S!N90})( z#nLlX+^z*YX@7Xzso5396caNs6Em@kik-^ekJ#qVC7<`a@?=hU^gIR=Gcgl0vH!Q&B>qao vVwgszKLO@JhG7_nVHk#C7=~dO#%cTq!k0EZ2!eSG00000NkvXXu0mjf97W{q literal 0 HcmV?d00001 diff --git a/web/public/images/apple-touch-icon-57x57.png b/web/public/images/apple-touch-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..79afc34f1a5b554222e2444f607be865f452cb47 GIT binary patch literal 539 zcmV+$0_6RPP)w*Xtg5Suh=|S1&GGT^xVE>_(b1uw zpufJpm6Mc3LPOr(-iL*SK${Xl0004wNkloUHkSe^K1DR1Nau$hL`4e%Q7txTuW~0Df10!<&xsCF!9GypnC0y z`P17%G0<{l=4@W_0SX0fh)f^FvpdGx^(-`RKb()(L5aq?Fj>eR&IHq&q<(JweyDqN zbZqW;a{wfzwEHALdXr3(;0UfG&c`whPEekyvV|2r+*$zU|4=<)Ym9e#o3$k6d>8^3 zkH@I?{QDtAX{M=liV@bZIx{eF&dmI?Ou(qijm24LDC^Lw>`2e|NCM3!!1tu|#!RLL zNmU355DTaDj-)LB>oUf^kF!bGDbqb^kd|XJQx}k6h;v<1v>1q)k9Tpj5a>c(PH2d) z-z`GZ6IZ48mo0ukvrT=b8!10Q59`dstZ1ns~BqfnyUH#9Zn<>mJF_9P%7t*fil)6`B%OFuk4?(Xg{D=c7LUB|}8xwyD_c6W@5 zi{ z4Cd?o0~1L+z?U5!mdRX!)!TN!##?;1Y3>c~oXO(x*#j5W5Tqn!iXF&FB zDUHhrI2lsPWL9>2be?>j7IvX=TUkyBWx9`3VY^gA8rgF=*L}YXk#Uyog$J5473+pu zGBX4W8_!|b7r~Ut5T_-_}pzV_E>~y3N zM*{T$4yTqQei;`R7nb>NvR0Mshi7zH$5zz<2(R$ku&PPq@fq(C;l6Oxmy6g27)aQL zq8A`07xads>=%pp@_=(~lDfShXa|p|+d_7SXo1!)TJq((Lht13xmlt|Je5zgDgb(f zd@CU6_ggU;wXSNRvV-ZD={C!5G2V$tg~36>$=wcGj`FGKK`DB(N81J>+|52}3|s|O zf2{{rr20IKxPyrtCCCKbyN$n#a&Vq1dKjh>BsL#S5mJC>BJeJbBbhqIn1ymt*=#G! zxk&K`O>lW$5W!9=TV7$^xd;Krlsny%=`s4gjGn0#F=C8O(GyKk7C5R^6rYqa2NJmq z?j&rh$ci;e!QEvDQg;B^)Lt|>@Gz)JB*?^xd62?3&PW76x29LNg`AUV7Pd(ggSusZ zLgq9x!{!#z3U1j~TcKlbPi$!rX;6DlZa|NnLL@4$uz)lo04;!{VZxl<`^WMD#xE#Stp{WK}*V#Bomfu_vpxIcZt^itLW%% z78QP2bjk;d0Pv=2n9oEFoQcq*KLb4ie5A;?@$E%HHlk-1eJ8dZ@nJ45F8%-@)gyLs SjI=EP0000*hxe|RCr$PmD`HsFbqUXlJCy_|37wjgtObuWNACSG&4-jL;N5(6hc(+ zv$(mrp?`t@$_1aD&e-hGuOqDDT;93hKR>c@O8BWC|HO#U)ND z0FP#1;-YJm1v_RIMR>NrV@?dK25U>UpT?i7&*>1(uiTo9Fbmh$wGc=t;SlUHXJ)57 zk(C{*Nk4gb?4TkIgJNcJPh|zw30t3%H>xWAx$Ds&bJ?b3W3D@B-2(o4lqa%ky0KIo zTcb@jf<8d1PN1~L1(~X&N_Lqpa06YD5o|H>Z=8sZL~Z@aLe@Tv$%GJw6tk+ug1Tjd zMOdXIY=qqt^57kqwf=aZH%B zQG~|;>X2DUpMymy==rwG;(YGPW1Qlcg?&e|#j31cKQF$B{hR}uWm`DTyj#s)7yy!O zmYvMU4UZkvv$G=nnj7ytkO literal 0 HcmV?d00001 diff --git a/web/public/images/apple-touch-icon-precomposed.png b/web/public/images/apple-touch-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..f952f985b1339de50c78456cfeeb0d0fae8f8525 GIT binary patch literal 1299 zcmV+u1?>8XP)0{{R3FC5Sl0000>P)t-s00030 z|NsC0|NsC0|NsC0|Nrvx^78WX|NsC0|NpnOwj&=PB_Sf++}xp`pffKpsi&yY(bE6_ z|NZ^_!N9;?TU>yCewmk;M?^#=jD-&X000VfQchC<6E9?>)&Tmj0AcL^ZvX%UZAnBy zRCoc*&N&XkKoCUHu3pqLY5D$lWfd~U5Hj_$pMCoTkF1UVvQ>s-9@(K0%@sQEYs?4N z8UAey$+Z%vW5M;}WGty5k7FomD7=lKsiLtTE9$7-SW-#8#)4YnIR>i1V=SpA?_*9q zej6LqGp=KxBG?Qn3Y$$uZJ;J|)v-_=OVzPb9lNk+M?21=Fcg3yXZD}FMd%=9a*$VPzFsIc3@?J1s&@_R(8O)1T z0(di+)6xp^TjyA3rxD}`*gJVivkZ{mu9)hxOltrD9_J*?6Q=cSre&+9Ka!`Ux`wY_ zdl;9ZElr%7O5K*}AmKe2-wFW4sxE73y+m+a#Xu5><&{K_(}7)Zc_x7=JWh39U3?% zrwxEHZslLpuHpD&nRrAa5vq!)UJoM{(YDVtCzGwfVbKt4^6y^^n??1gEtc3R8p38x z#jk@McWm7V;*iGd+hI7YrImOjL-SXygJI8?)PA1=zz}2JC05ZfFqg>&?$YZVe3Wv# z3Z|YXT4jsiiMz^mu-4LkDtTJwZJU=VN1hx;T?F&H-n`6PHEn5aS*>hs#~KdHkFUnr z#PfQYt;Uu%8ur-UT$1R~3yGEt@Y59|iD(p zqGA#J^is~}rYafyB#c-afIdIFOjq!Ou-(@8U(u8-rQ{z@$cXuR7*XXvf?8d23?xH{ z>r$ShJAsvMr(wbKM=kDi*-cz(9MjCN{Ske+sqf@#8DjzNAQ6UbbrzSd-{O zR>85breJ#TE1)4_ROx9Ei$G`xSdfMf*WPg$#opTHf5Q0{7_m-=EZ|EOBSGM9FqhpE zhJV_*n-c(m7z)A{F(3&3fc=+h0bUcC002ov JPDHLkV1mo%cFh0) literal 0 HcmV?d00001 diff --git a/web/public/images/apple-touch-icon.png b/web/public/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2749f7d475b0dba8db126918a1f3b0e4a29e5d GIT binary patch literal 1025 zcmV+c1pfPpP)0{{R3FC5Sl0000gP)t-s|Ns9Z zA0Q?oBmMpT+}qrMetx5&qDDeP($Uhvz`(Y(wVIfj?(OYfTU^WpOV?JhfD4ILH(5ZywZs%v zTM4+5SXB$Uo|hBT1(l6}D~Z*hl}xyrn8N!`n|hA*?=%oFLhK!$2QAW3ZGKAPqZx-x zH_(ROB5!Li+meFthsgmBYo^}>ekpuZWBn;1Z7tq3$6L@1ANXL_vmyM@y#FER%QF*h zqhe!=XMM+Z2-=8<9hG$4R?EdP4;TBVftvgV`i8 z-C$LLB`ncrK$~FmC)WvgfR7wh;!4)kdS%hmDJU&8F-L6Czd|tJkXrM&yTW zHhw8VvF@ARx`v%5^wDC$arJ6azAYxkE~V~j0kt^hEtb9F9wxSzI~=LYtkete{W<11 zF}){KpO=?o9|ra6CyNE=O6T+^jrA~2tT@-|3LFysm(H5zrx9X`xX|yltBJxja}E*9 ztfMY3W|az?&mcnfTabDJo-78+t`K^AeiHn#BGSWlfSB(H7$|DEWI=7R{2S!N90})( z#nLlX+^z*YX@7Xzso5396caNs6Em@kik-^ekJ#qVC7<`a@?=hU^gIR=Gcgl0vH!Q&B>qao vVwgszKLO@JhG7_nVHk#C7=~dO#%cTq!k0EZ2!eSG00000NkvXXu0mjf97W{q literal 0 HcmV?d00001 diff --git a/web/public/images/apple.png b/web/public/images/apple.png new file mode 100644 index 0000000000000000000000000000000000000000..7c82b40edae930273c53f0b96f4cbe80221b8967 GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^fcM&Njmb&Nn!tX60_Xp>@`bo2yHVYo$?soyz}^B%^zm>k6)#7fGEvA^d)=LC^h; z2(QCWtQ#}!B_Encx15OgJji)CB31D5p<9Apfe0X}ad- Vlc~19e1Yy|@O1TaS?83{1OP*^R9OH3 literal 0 HcmV?d00001 diff --git a/web/public/images/arrow_down.png b/web/public/images/arrow_down.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6366252f42ea64285f23d83fc2a481653d8a63 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^+(696!3HEnjZ%I9sS-~Y#}J9|jaiXaJ9+qWjZMJN9nOxQ-*+iq@1fE$L;DLzbji^t~O?rSTcmz WS)6REwMhlq&*16m=d#Wzp$PzLS3BAO literal 0 HcmV?d00001 diff --git a/web/public/images/bullet-r.png b/web/public/images/bullet-r.png new file mode 100644 index 0000000000000000000000000000000000000000..4842a8422b78cff07d9119c29a71a7b6959cb390 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW1=7Z8X_ldd)=6cq$pvmH z1uiKCt|^6XDfzA-1_Et5+7k&>%~ulS7tFxQ$!qNtw0P;sOP6ncy}ZnKE>I@G)5S4_ zBRV-DAt9hJiJ^JT?BeN-8QqJSdJNAxxb0?QW)5a$X1=XBVS^tNb2&rD!CeiG;S5I- y_8fV@dC`jXV1swzL6O5-5A(W2Fm4xl#lx`EU!;t0(>-;d*$kepelF{r5}E)wu}3EW literal 0 HcmV?d00001 diff --git a/web/public/images/bullet.png b/web/public/images/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e38e1db58d023660a45be3f85153cfa22e1fae GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqNuDl_Ar*|t42-#-9YPi2xR1y$ ztk4bN(OJ1JRqR8Y*S#P1`x}@fnr|o=PLN^tF!gAd9?r(`$@xw9+p>!0vLpt zPt~feVAw9o#i4ET!6Jxx3Bw!V71!+?KSr&PU}o5n6`=ij(URFf+Za4u{an^LB{Ts5 D%<3>M literal 0 HcmV?d00001 diff --git a/web/public/images/camera.png b/web/public/images/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..865d2e81c9f6e5b4468bf97d65011d6457da7d51 GIT binary patch literal 379 zcmV->0fhdEP)Bv_)5Oe%gZFB|rfnmzO}M;A>5l3mQD z--j#V|1#Xe8|sKLMj;uaE`85(IK%`;NHIbSf#eXW^izaZ!wDih;{{GJ!V|hktcF); zV2m?3MGF%&ky#CU1Slk(LV8K-D@M!UicRnF5V7?=4l%(2QVej4n&bc}4o!d6qKDUw z&oRB}b1Z7;V}=L~1d=lKLQ;8Gt9*q&33HeDEF11f>0xb&jxzi|wr6-Z Z{0*G4a8z8Y?gjt=002ovPDHLkV1lrAo|6Co literal 0 HcmV?d00001 diff --git a/web/public/images/chevron20.svg b/web/public/images/chevron20.svg new file mode 100644 index 0000000..326fed1 --- /dev/null +++ b/web/public/images/chevron20.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/web/public/images/clock-25.png b/web/public/images/clock-25.png new file mode 100644 index 0000000000000000000000000000000000000000..1346378de3e3a9dbb6afe72fa8865e0ef3e7c18a GIT binary patch literal 470 zcmV;{0V)28P)P000>X1^@s6#OZ}&0004cozb(hNxs<>W$xetiNo&p}Es}PK9wp0jE@@EmIYhyCVy-1{Nf9DBy+uibnBprLVsOiq zoUmG9C4&$rGkp_y!v7Ti(;?}zIqiUXN^<0q7c3AJOMp7twCOP*8PKE6Hg#f>KY!|=Hgz}UH~;_u M07*qoM6N<$f`Sv%O8@`> literal 0 HcmV?d00001 diff --git a/web/public/images/clock-50.png b/web/public/images/clock-50.png new file mode 100644 index 0000000000000000000000000000000000000000..37d7f03a128bfb32548178d123838ec53dec1cd5 GIT binary patch literal 855 zcmV-d1E~CoP)M-w(e9p|Xx zz^S^nI&6fd8zU1c$Q=HJRcPPi6(N7Y2tfGttta4+``3#c6H?Ru7qlgSlmog~0 zzO2F)QZEfMiVCc_M-gclPtqvj9#&K^+HH^#9K(t?y25xi?#8g<7$b3mq;Lc)K1Tv3 zu!I}Sil2~*6GZ34BbH%evTaNkmhq@_rqduF!ipuB9tBZLuwp(k2*z}Y#X3xngQ#^~ znlTm?WLGCP5(5wRSnOf{g#k9%lJf zB{?EoW5W0H8|nv9El8EIhFPCKh#|KqY8EvqtuDaC^vQEulx*OYOHJTfPI@IDn?~Kn zH)Jw~@HS3h+kDsQHeTk(W%z?tv=QvVq8Z~WR)B5uS$mLoqK~@4B=8m1UUt-tE6Ye?@Em1-kGhQ~$n*RWfzvJr=Q5_#(F0@^Gynyj?47 zW9Tn>j*#+o_4c|4S8qQ@T)la{4803@8G7gKGE}6n9dSKf2z))gjZ`lm43x2o$qpV2 zOm_HS;DeA)ICf$_;rP*s^Mqq3*b@#h9q>`jbU&XtoxyhL-1{>p51|(EH4br!8X8W` hwH><8Ec)D({tLfWj&rD^&WQj3002ovPDHLkV1gsIiE;n{ literal 0 HcmV?d00001 diff --git a/web/public/images/cloud-transfer-upload-sm.svg b/web/public/images/cloud-transfer-upload-sm.svg new file mode 100755 index 0000000..8a25fdf --- /dev/null +++ b/web/public/images/cloud-transfer-upload-sm.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/public/images/cloud_top.jpg b/web/public/images/cloud_top.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32a87f3b56a29b8c72fd6a2304946f707cf196a9 GIT binary patch literal 57872 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 literal 0 HcmV?d00001 diff --git a/web/public/images/cloud_upload_font_awesome.svg b/web/public/images/cloud_upload_font_awesome.svg new file mode 100644 index 0000000..d9d6064 --- /dev/null +++ b/web/public/images/cloud_upload_font_awesome.svg @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/web/public/images/cloud_upload_font_awesome_red.svg b/web/public/images/cloud_upload_font_awesome_red.svg new file mode 100644 index 0000000..1d72b7b --- /dev/null +++ b/web/public/images/cloud_upload_font_awesome_red.svg @@ -0,0 +1,19 @@ + + + + + + + + + + diff --git a/web/public/images/collection_thumb.png b/web/public/images/collection_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b798c27047fef79af7c85e1da0076109221ece32 GIT binary patch literal 71743 zcmV((K;XZLP)5LLeas*-ji+m8&Xc*KO)HZ+G5vo@TGP<{0yjBHg2- z_i|;+5%Bx8_tt*qo_f~k$DG6dZGYmsU%TDjU-nqqKmW2u{WZMogNcbexho5&Y?EgN5J{^Om$@?wngH&?>75=QLZrn7k&F;k)hk9~u zX3`rQon`Jxvqds34)@Hewptghp{3bHtfg)BFFK>@?N(RosnT}K`vkEkkEXz`;pt|N zLk{i4k_6aF@9fEqb6Wh)2s^gCTG)3?a4d|(0e8$srU8w*V2;GvFj=86JB9M#w9>ln z%_8t&*%YF{A(7h#JJVF`Cr+IV00S8e45HD*ve+N(YQ?WVvrmWr=x(^%w)(TEp4=7Y zU`EQ3F|(=}WNF9vRe^!Cki->3cSe&xIOmG52Od}YaR zzEMBku+4f$M<e{#oajNXsocBwQ z*}F9!s@?7Thnr5@X0`dU_sWB|GMlxhEx&W#&e#1feX8%>k6hY&x7;Ls;gZbGlT~kR z?USB&gJ$|7ZH7Kr7oXbEm7PY8mr{Xc-9!Urao#XM@qAB|p*31RDynF!wssCKbjvlf zhkFDmW5VN5W697u7>3+#Lrc=Z0dasCkJCTP{(;4Bd}!l{zTe4i{_wKjU(&YqT5;Pl zDjw^2^Nse+s}>%Abh%vF`p4c1C;!zLV&M$ED5M$yx>h<$KOt~OoGwl%vA-i&+)+@w_#s&-rD%*KHmSvB|bds z6m;V@;v1nKGyl0Cj(^uLZ?~)dPd})ij(m4pPvWk64S#yg(_jv)Sr%u=peJeg)HPJ7 zC#Pz$CD_Y*)=j%&b=*cvzQB&I4EqZ9>5_B!X=Q()PNnkI@r5fR-~nc_o$Bclf95^= z;`#PZzP$TRJOAc;@jI9P>BC|pUs`^AUk?ZWj&I+7cpHE1ll>1Lj~ADCOqOl`&1biN z;!VqpPxJWnfoI0AzG1pH_0vfG_Wk9b`9ZJAwyl?mYRFj!GY~jn9LcfSlc_yx_4xB2 z#AiqRZ~x%#_LleB^02q<8q2E6fvq^+jvRY3q`v1|Vmo80=RHT**<#Q9{NV5ZF#f&| zx99iuPkk|tY~MQXZ*A+3FZTNny6YF0Jz3X_Mo){VRU0u5u`a$J=}0mfo|yZdJy;+6 zK4W<-Hq-mt`OWLOh)d?nVSn^|x2x6u?00|VLOfX>&h7gCQZzm^+-RGBQTExTk9nHD zuW1uk)LAhC%M{^ruRPzZvxR+e@Uqi_YwWF?d=jyhf9`s5&qD5t-4|D4A!-?(W{oM7 zsz|d|mEi#_?DA0GVjT{F@9dA&PPv)&hqm9n+}2>*n5CYXoQn#Sm7k~n#FO@SJh2}P z_SCbj-7NN`DU-kaP`~|r82&3a_T6W^;kKAx+Z-pJ-*Z0u;Iqyb-4(hVBS(1b zA(t};i&2meMQm0TSiP9zPd+(cm;UjOGi!Xft?qeB=4q+$%{pT}tezMjUdJ8z@tvL! z&&iJ~KWy=nOTOLWH=o&1{Kiv$l=*-CB%i<3lNFD6v2$cz&Dox8BWoGTh=y`lwaYf! zJi&z#4AC6*ATw@~!@-ueVh^L@NFLd*`g(O^Z-(8r`J;@7m)-u3?|yXT_M5kyn|?5; zZi9T&`P6uMuZ+{FE)gEFL017zSY(!1nje(**3OR`TeIrJhxNydnK9UJBCpm}70}cD zlqwp_aI=(F8q_41DRY#t#d2|srR}MQsHSb!B=m5W`26%Ce}}859vkn zGX2AipB(wc&ad9sFF)P>;ET(rinpVlI-idCs~=}<`Tk8?%s;yy`>b!hv3=O|dzbmc zhw*gb={a)P-`GcH`=w3q-}vVjzJE7Hv!%wjpS9n(ZJ+e~-hF=SX8U~4;o5Au@#)@v zddaKEPj-HIiLc+dRsM@#?k7;hX%8tGX%9-MoFee`~XcWBvZ)*k@j?Va3UU92PCMF%O&4hv#_e_R{h=;)nbG(be|%zQ29{ zZXdIVco_PF$NceKrPgOnkJc}D+t|`JKTjzKvKcWh`x<1l%nWzBjhHdo@KmL(E0lKH z<`?>Tk9H2mpvkiBmY0rsy%pzoZl>pAf9}`6+l*7vEnmo|K*?#Xm-}))FGJy#MROl^ zG<*=SN1nOOdFMoLExi0e!(|}jbZ&Vmk2SfpWU!RQx|a4)b{^5&OrqIf5OEs5TV2Bd zT$Nkd!^4PUhFiaG@wKyETb$fy+n2t*b=#Hn3?mvK7pBOjHpzG;2i;>CdvpV2>l zSnD)?<7#>P?Dt~pIcUSV)`<1=qnG0k_tE0~t2g;<<@OxnGoVhjb9ea0nbo3L3a!Vaq-~J+7X< zas26L?ct^VUw4<9+imo7Y#w{xgYcaDV{Obn@gKdMUwKo1=B=v_ZT{#|e>l0@bqs2% zJZ@#Xr;T~gPB-DlWx^nH_{fSShM{QAUKFa_*b8{}r(2Q4AdYR#(e7_kNe4AMu82wSr* zbB)$_ajsU3#WoDNT0<8L{Ng#Q@*=G%U8TYGw9p*?AOc|1If>-`w#FpNj>6x*&n z2G5lz;bxa1%(}}&PG<7v#;-r2GX8KMm$bK6-faB!3!m-nCidTW^Yra=`1j3booXeU;u<{7={8;D|RgGrLf46EsT)&1(!8jhISE9W`QIM z5>AH04l|AE@80%jTYP+3A0IDYfU>`J+D@hiskQcG=8ux!z0Z%X<6rmA`N^sOrRVv3 zFT+oIdn#Q8+S_p&CYvX1gF%McROZl(Re%o-0|Q|gKCsZP1($atCSjViirvPQbEFt& z;vverm2aD2n5=eoll|$BzVn#rf#(*k@EV{3bBSr`vSpzkI-lFH(Q<)d5t$fLoEZ;l z?m*(so{YgTV#aLs#-hX9R`;ouCCvLJ9hp*>;AR(_rcLw?{4Scy5wgs<(mZ6d1q?{ zpN(W@#d=M@PhXe1-u&eQWgJEw_T49WeSI}*U&8A#N^!GXUd;Oam#5Z>!@16Rk;JLA zy9Jb)2bm(VhQJ3Il%c`axF4*JU>G*Q9r~=5wMVUte!4p6F+jAk+yaW+AfbapGg90g zJX`ImDJtH*)~DV6%IEvV6&W9H_GjLV@9jA!zwvB)-uE9r6wSZrF~)43!&^@|ml3C{ zsiP#1%*(E`QywjIxF(oDgs~&Xsu7n+-&b6jwcemXCe~m#)~0^RSXR-o088bW7}#O~ z_G=$~r>8&lULKdkAjDYQ_Y2Hi-#E9uk`o+OXSs|{Z31%uxm$H{n4;P-WSeOj>b7lm z*?q75);YDdOF4zOqJ{Sz57XU(JSq4rtE_b>U-bHz_ib1f_egIMe` z*&^lSSc3#=1|$u(i2D?_%;X&Dk=fU9jNFS6M1t5_&|vRfzBJV!%$|fYY)?BfLq0tm zpogs$`;wkml}=%e9F&!}Xoq5Ld0Tp!?P0m(&Z)&WZ>*Bv-?O##Pu&=mKi=(g>GMlo zZGHv0DEcyjb%j389v>I?kGy%K6{}<}+Oad4Ww=CZE2n#nO#u&shl-uq&&z-5^|*tRLG4I0cl7WEQVxDlLnFi z2b@YKNMvBfDNW7MsA(aL65faw)vE;qX*8x({ba`4`bXz@a*jW|%Qx`v?c;v8ufM^q zyH#zQ_Oj0&uco=i)%U`VoK53T7)0zsIkhG7bpT*Z*r2Kz8Ik2(s|;;nL! zg*ylgFhQ^u9UKNUB(Nd_>{ovISI#!OS{2Q@V{Ly>Lo0;k+d{LIQ%5iFjg{aN+tf&Mx8nGEgE>$Ow(=u*#b8P$bi@B}mmfu*}%YOe} z?qj9xQO9MJUo}^ZW0(b=EC!1P))H>XOY?otnf2tiC)jl|)A@aU;&e7x5->sM}9 z+gK-8OP$tyJGM_Q?T7p2Zjp}cS`o2~vD@K(^4$9gml!K8BbAuk$N>#=l&}c1CPq@= z7#dfjJI}fP?tT64 z7kk8HoE}VzvAXR!nuq&Tl1jHNGuOdb}?ON1wWZLz@ zZsO+&qoeyYr=G5!z<>q-*sp!_ms_>F$ak9Fw42@Q(|xW{v1sn+J^KFec;0TW8)m%{ zh-LNcy>K`ucR>q$W84MDrM-DwE%gVF_Uz0DTijUucwS!YbtR1T!aix1aXRU$%~pg* zdB)*Ck@_eJw`}fhl7#{TAuI3(z`n8V0M*OZv)-Mo!As{ycPzreo2~?5ltwa~vq313^t))2Zw+HhmJc8E)6p_sDd+*RxpNWwiXJNohr+l*X0N?u=bT^ zA8tH{=U@1+Zo<}i$e&D*E}Dfb#oumuSZ5HlGF z&Q3=zOQ3;ZKnQC*Tr?MZb|x}DIXKUp8__Al!2Z-P{pxOkc1H{CW9CgBO#l&QF5nBnZ#OX4PaKn$!HsGX9QMeAyi97kBG_# z(`j-nx{=){9#mq@T*BMqK0Kr{Z-$ATau>a6RVyT`lj_3tnh(_$$8u2HvJQjn5&rqh zdMST;TThR;J@fUOcGdEWJ^splo?OR;Zai^r&&pvbJEVEc1GB|ZX31(WL`IWCw!jkt!iJr;d?KSzw{iPxN==3irD9Fxjk;&>^bC@sOun1`=zS+ zl}K11ofr&bNgT3)06FZ~jWdRoF+!X1aL+_fo}91q;hpo@@xS=;?#9E5J7a?a`;~A0 z^2%C~y|`9O8>F>HUC=G(3pz6{N}2~nZe&5TEw+(;Zp0%DX>BygtzkLJHs|?pX@uDv z6l$w^5WUzuI=k4>k~SO?HeyGsMUk%RMx=+wh-rdAkB)bbEMhm`*vp%D?ZGyvH5DtF2%4$fJP{Dk$rVy9tcnF#js23^Q0|ip>*LYG z>>JPGTUXH%+#d7tJ9j+n?e-exfYlk#FIMoRF@w|OB3~FXOW~<4>>>(t2y_vf%opu) z=q{4gV;L1$qE?Dlcs4a*DWe zPNHCdLl_-ggfmpsx{$)ACxbI_Z<@uq@#KU!m(`+6AAUbs^xA>icYpa;=4I5`x2(n8 ztc|UBe2kV&vGQp^GYzCG|kz0B;jLry!gP9vcWipe-Wb;;5 zLPcAbN(F^$%*Y(gn?hOBT~Q2o>y@WyxAQt?`d@ufk2}BgOjpq!F1ojR!+3v<-@E7Yv43=P z?Ja-*v+-h7Eq)yYy3jTT*l@ULJ)e2(qsc&+!7wd@^A*h)$pyPL?ZnyhMYobb+bLQO z`#V1RwTsoMBn9Wng2S_tV1*>gGQ@;%&m0Gc2(r?8a9);Y>FYK=+wIZn>o@1s@`rbB z%i);HFPp`Y*Fk|Q9#FU~IS7+%Gxd?dI$E6v!#u&LfPn{e_SIsjEW*TA9I{%n5hEf} zsAe+?M}wH2o*B7nt0dw88)gkSD6gR~M40n3@dZH>h06-{g z=4iAX-#jmg1B5(ND8p?uY(U{|1Cdxj;z0=qNzi79Oh&{+y{c3ISZIQ-@1cxSUg?3s%MTp%PMAk#cBYG}1421Lq? zp=J!M0WhM-YpfV)L58)V)}W|?&L!5C6diz76es|qdv}7Oq_%|7=Un^J9oO)pua0TM zM$uNXH`a{IB(Met1u_iI;bk+GWBAr0N4jOw0;~or&};~UO5ZHd!g=ib#XTI7Gz(=$ zcq)tz4kjgMubuZ&?2hXN6Z7c^nDNdP89}OE0#`VSa zHt;o+Y0@xjXfLTLG~nDgF361w^#qjKk}ddgTMZ} zzxUg}^V3g1`_acAzy0=`C@mW?P7|?IM9a~LgZ{F7OL69uu#nbfWmes;LFnZ}ole4H z-__x(zFfUMmYvIpd--vgsomJ6vyG@{u3mh6k1u*8`s{BKwW+$lbKS1z{&BWu^^L3eV(0ru z-ZZXSyY}O!4{Z@`*>m^HjcjO@JsLF#M-U(=*kL1z;j%Q&&@XbLbq=_khs%Ec~jUea%j zKlY?K;|FD9=aR82J#>PVD9_{IfJHGlAh*~?RwS%OYM70o@T5Xcf}5iv?6m9R0O{dF z7Gs!s5~4RE1vLpXB$_f$o)>e%*Bq&UM55tE$H7)liY`BCjrDuq`+lGOKmDKj&;FhN znt#=A|JLvPg}?B>`t9HO7e0Ld+dulrAN+lP?%(w5f95;)FZ#{Z`G54^{U6_t`>%ZC zTl;ueYB-x!S%k%~VIB@vH5Rj;xPx5Q8)1`+hmp}WPf=7>H04l~LM%GXs&k6a4# zttZkx-D7wzxsJH3y$0)ChdL3+WI_-@4k^SinW9FyCj?B%jF1hJ0a%~}GbEBVqK9Vo zrd9OAZI(-{A^|f@&AD`WbQC7{ZFzWEpMLh&|LmXp`~SWF@IU;<_4+^k3;)}H?Em^%V(Lg8 zX%?o^;xrhf;W!lb(bvD-Fgb2o%o<8~G1@z3Po4}*yYigN_2>KOdo3Gxd*5^Y@MgQQ z{U_5r*X9osFTp@A*>>^!Q?^4ofB{Z8Be4Roz>O0aN?O2$vC%4^l1UhH_GB}xF|am* z*vIa2kARU`U@WVRj<*`x3}AQ~tEaM+mTHQTWv5oAaJa~#NjXhsnHd{_Upl8KwKHRA zHftklcGfU!>H`PB08i2}83vM?wO-XSg|bfTtyfEKm+Y}!#N4~Ppd~^q=eA$QX4;MO zw2MVB8mIKJL`FZGjcI-vxp<1(g*#)L(8!b}%w&ss3G)OY84V&!sVUsY;raW4Nx9#~) ze)RnD<)8eGKYso8vmgBaU;q5&-LvhD^~w7CfABB9dHvzv`w#rNf9C)8&wcvh#V@`8 z-hH1lavjl|T6NELgbag(EC^jijLO7T7=$qZ2r>!705QQ#MpNviv-*e-t#oYKuzinO z52c3@szeC}f)&zdKB%2TN;ey0CvJi)l;GI6f9cyz*g0dr>9#l91`h@`!i?1vu`u%L z6z|+g~GrVUZW?8itteBm3Oh&g+A+mcMQVjiCAj2JdUb}_ZXtTAi2-wbvy%atZmq7*Ktpd}Il z6Vb>52nn`B_qI4`I23{e138gio(!#Rx$F^STVG61^@wSTn0?ZSZ%Rb z#(`OiCTxq$$tXT2!Kc~a0TVGVu0|1paczr*cmHIGndU*ZU2xmmNg=iVn91v z?jyZz1J{0$n-xQxHm$W3wlE-)=8Q58VaRQ21im&dhE)(IvCP4~r~zVu4uKjB2n-6s zpa{1tDD$WETaS+SY45dc8++#tmO+V&>&VUXfiHDWLbTy{Sr&{a0V{aV9Fkl2*aAJW*jr*v6EbDp8%%;jI zZ>=gPqo8RS@@67(WQ!Cn5wHbju555$Y=C^vzCku8jm@33Ne2g1M0m0+&}>++C%^`B z_JJ9Ipur9SC#z=d9J4I$N4`kAHh%e*FOo6rHgp_(wh{LpF$U(MS}yyI`DGZ!*2qC+ zaGf@!B1KyeNY*sQSZzsbAqO+Jk#QAcw4V2J_r1(lr(cMJwQ&K10(VD)Gz>4vI5QadS zX6D|ifE^s*wdR6^85jbCOgyNe7B-9qG8kAeU?~jQW>z)0b_NuHLqR}+z`#I2m?z0h z?3^fcr&9yfxOR3h*u*#~FDxfZD@L>Te(BqOv5cf3+(2NGEJAtJEae-S7{-JEz?|6` z9)j>>w~V2R2$=X{HAV0<5(0n%2zaeyZsrfFk&KpPA}vIS|h;OMb=mXXjv1|qFc+}i3~1_p$&3m~9i z0Txb1mLl4jdMN+6kMKGzEnd02hmoB%mhq08g55G^t7L5&DFec4AX8vnezJbB1{v4| zGlnZXwR=00Hzyv-t|W!s^%34m!?o^-ZynY#Sgi|BmyHd(fQc|_0dS+IH8jwA2~ML{ zqrZL(f`Wp8fCPu(SjSh-8YScPvm^jW00Ki4Ii+BIupWRS8Vl6nScXHAfG}Q5zW{LP zutEWW6+-S-2}Xzl@ru9`B?Qv|oYxUnOH(L;AdDta9RBm|3O(GYcs(Tok;vZ2^*J?&e^dIm#Vd$qUPgl5IAM26D$tdxl33q7o4y zmZr<7Ezt08Be28*Fg(bPtyp1HL2)by^gxj$z zPqAJ`oh{OB=@~JSMJh^a&J+PDlx{H$6LQ%lh@zZGLjnqK498Lchy;>oxENrL4=Qks zoMjDC2uQ(VZ48e<7zo343|8|bMHwxnwfVk`ZC}E&$L7P}lCdxhgV#C$#76GmyhadU z(2=u=-cZpX^Gn|pG%OJS^0K~)GM_+Ji&iEelH5?58cPWbGz|j~3a%!L^Tmz_1SVwU zqnnjlK({~ptKUhnb(W2cIQHCt0ApO@61j}LxDTL^+k&$XYqpC8PU6uBXfVK?+@oA! zUD;BKun~AdjnWzcwlADvhvujY4;o~N3Rd$RQkeIwbtDmemN`y@lK?>xZ6`f33wfT< zWjEJu+f%B`24lkw?y=2qXIW6u53V=sm8n=w5hPRwq9S8pMuQ5Zvku)$ZUEhzXD${*WqO0*_v^SGW=1(^? z(ToaG_~d5@mLLiis5rpLG;HVQT29-ui`BmU&2McP_dz>GS~xA+g~QhcZY*DNgq;xJ z#y-M*)E4VQrUL*K#6V^!Ww=FYpp~d7yNvW8Ap~Van!+Q;E^KSDch12Ma&9`gl8G$<<|sjAQ|oq!7672a zTB5)G>T z!~AswoQW8l8{PNSe1JiM8zum-7F>`95m0~uAYMZ*GAt$|umo@ba1cyhVUVlipP*Ab9Qnj~p7BSQeAt&|t5uqgB~WG8FZ=zZ{o0$c z%>4a}o(SL&7+cVjf(F7xHDZtfBOzd#0JxwH4cbbU6w)5HrqUX=$858y(lUKrN9M9I zceZ4AEbycYf;Ahu)M?da#A;-Q(3q_sk4F{04**84-?G6*P$0B77QTWi4>Y2Wnw zhGDQ79U7QO(`s!{k<3^Z@3kvE*IFuCMD1PY^)yBXWW>qxv1Sk?c!6MwwUNdqMpoGd zII~Vh4$Md}A{lPY2i3^T5?WHRJ+=PPbv#;pdRN0|4I9a_y0XD%1BLmEq2kBJ2 zvH2j6gTqh@zo>kQ1*{m25J1Xoh%Fe08JSX88=9LnS&m53L!N808)^#6ciy~nm z&*%b$uVeybvaLa87mmtl#Q`UflY`YL@Ye#0Ve%v;ZDqUg6-rj5BG$o9ZUmWQT`ae1 zdt|YPZ{S|J3kMn@62oK%SU?Vw4~mL2498%A^CbjLp~y$DszjTlTVG zKoACl;TV7%8>D5Kp>{HgOWJwvy4uR;`K|N(FzRFY@q==j%O}H|#l(YrRfp)rMnZII zgGY2@Y;X}5Y-LPhpJ8Nx003dZCM7+^5qEYf)O zG9TV7+>=ul>qer6_Eel$YN<>F8QK~p z%VKryi31MZbM0-cip~hkt%la{v5W?NHfn6x`2W-kDo`RLf-HX?ZXXU$w1O{W$M8;{xVGqWQ{$<7Zh=NUI0D}xS zI;@$BC?b@jXq#2dSNEjAO=D@c40edd9MJH=1zIKB#-3%IPL)fGBy!}|v=0j(DrW;3 zy9mrpW|W{6dBz4?qYo@N4R$jN!UXIGZdN|l4(r;hJFBU@C9E?CX-iNB5;8C_7!YEI zn}t+5kuK6G5G=)2GX-;SZ#tJj1mw6BL}v@JzPV9VJqB&J8f4s5T2?C)X;;6r(wJB6b%id zIm^aW~Yd&Nk#AFn{#XG4&7e3qT=Pw=_;4R)zV%+ zR5@eN>~%soi9qW@274Nru@S@fVculGuw11ct7UhsFr4bFD+QJexM^f^5hu7ngLGOV z1Ym}2Wn5T|!q9*ffpu^oMLVIxh~c|;XTS;p2?Zi7pnAQZ=*TEXIF;trtX)d6A`wLi z5^u06_aF*HEl751v1BLWsCJISqxDD0MOFq=gfYYl>CP}->4wmWHb?*n43vQt8|;9Y zOS_^~Dh$LhHhEIu5k~5wz2Pz>!`8-qX@z~52ZSOS6HE|tTCZ%pK1+)LrUj8L!5QT( zMy3(?MMOlZUEq|8_~Sjntcz9T?jATU5wV=c;)3a7fawWBuD-4cMnGDOFN zAuI_*i~TS^mlc!{xRtR&PxtfSu!2?^(Y#7$+HTb(5fj69A2EnH4;yUcPBR1*<|)F+ zL9FbZ=J<(_9T{oEyq#t_exYD7a;Dje4=^0^wRv$Ef<`Oq=R;*kC~ycE&>&5&D%OP^ zwqzKVSm2ANC1WJpYSkwOp~PAuz+Ik90E4l(*TrZ+8mmariX%Kc`wk+m;E)y=06G&x zAcI`MpoAMKWwZt&tpo`H;hufBvt_zFN&uW1gn8r`VK}zqK^keqU^p$%0OLzI0L9Po zS|$FK5nq;Ry_Re_O$@^lZt#bwDCDR^(2BY??Z~vy3`Ba+lK_W=vaf#iBf}1j&0;9b z`s&+5m#yi*#jIuGPAIDN7$lnjb_j4$1`x2r3Il)!1CY^V1$?;%0tShk=BRtE!z&74 zDn~_Yp)uGN?P@^@3<_4*6|u-NXPCRJN3{ykAhCf0Q+Q}%4m&BT#PhZML87isF)4~=;zN$KqD_$01$8hL?cJUG6rT597!m5 zTF8Cd<39SyB+?YZ!z|e)@CAegi7RC>DR;6{!3q^F?b;n+C3+0f9OSeSX1Y*qg$ptg z2qF=SQDkam8EaUI0yni>hGj>9GZRQ zD<2`&#-$>?Vpy3PDI5UN%rYWNkwml7P=W)5G|s1Z7~R<*G0?)#IA8^dGQf~zGyn!H zFknR;3o20~1TbZW+$g8^Xxl!kHCizQ&Ai8m-F&rKNlG5m2!k+!``eOqa4L~=<^D=Gv{D6k%V9SmC`4FYx-YHbk&FoI z$%Yq3cH(T2qqKV4$2eOK;$O}&b`c;|T5C+v!m-OPYeU?y7QQrN&9 z0R|bY!^&RwK&4BxH3vzqZL5)32A&jbPVc$Jxkr*CXhL8ublG9$Tnq=yGc(EXAeX`3-~tBW!AO}Bt+b@T z0(P|F#c*r@L_>oz5H#SGfj2y0ryK+U2KidlL0^isfFvLd41_RT)}i5gr7H<5DgrB1 z1fkV;b~~6=z2>>aRcpI0cMrUIbH2V=pMU-^b1tXNd9-DdRgLt`tprV^sS0^Me@@W>>|jmSbP48um#(oG>Ol5B2DLK+r}YJwRk!9kWLw}1qBcpj+*(vWEzVV)Nm z=Bs5TT#EX(^*G!lhd4$m;oRV7ytnshkc{zb=qKp6S@TF z&c5Oal41T@)G>hp814X-fTMvKUurabDGv`wgFp!xY)K{=tWdA4nE((NP{KE?s9srl z-+Mcqzw!Q)tJbWMm&($!H@1^_oVtJc@cI2^(h?qC^ziBHcHNL+)6H!sNv$X9Lax|{ zAAWO*GyPxLd;jU<3ji;tVY8!IpsGb7u3(+E#xr$}eOSf!T*2ek2Us868_ur>!7**}5^?G@K}QDO$6E+ei!xMdpRAVNMRPpXIl*k+LYt zAuMvVB}N5GAk)Klr-2IGyj-K#)tX1HMu!GN3WJ1T8L%>ofD1U_uwxrhU<@acOjxmw z0vx(n#R!%p!2=SR2SC-A50C>T01RAY6Z^nV5d3Uu3WpA>!=S?&uMFldCZK~CY(&xV z^;8_sKiNO{+VwZze)s5)ms$NmrM~*A;N{(m$H{(Kl5w?o$dB1iS6AQo#?9^0K6!ch z>E|zxm%6V#*6m7lbG>#+G_Q-j{ozLre5u?j(I5>9RscFUE+#BSVUVHdrdK%=zyJd# z3YLHbh=UPEN~empkt92KlV?_}Reg<(eecV*SxEa>d|8Sz2x4hD2us5EJ$=E!l5Vs@ zK|*stsurP&^2{A~DC3MBBA{a{BO_WmRAS_4GcLeQg;sKCn7hnX*64kS6$+>1WUsb{ z(9v!6+yfsf^YwK(M*KVmCE^5+WZ;F)#I9N!Rg0r^(XlWmi3X$6-Ps3j@XBsu5pr={ z5@~A;1_S#10#D!+C{6At138Iye9YXBc2&0Yo>h zVL*of32TtA%dc)2N?v_RfCP{M6_99x{d~iFg8j|95&?x_N@txE?#sh{_c(p`J8vH^ zUVgTxMXb?=`Mx&{zWd%7-8A&_MiR3;_MjwhScjY8eVPEWyBGXL{KZ2o^_Zsdi%QSdb%v zjG2Y6!Pv=_2(uzV%}z(|get>PxdK#{QO&ld+9fZhS0J>>2p=^9$`^V-`ijIXRMu8e z^YUP4v&&VswdrTAALz**yLQ||05nxKA7i*}(4_!3OJRoK1iM%pV~0i);x#x3GpY!X z*bPs#!Hzj4FgzhB*uv7tUCm#wQ^9q%;g@8KT@`4Q`2dAQ3Y_dl8>`k%H4U9Ym%tO6 zBN+AiR_-BAFa^u&e3%J9d)*huV896m6bM!rjwJ>Q6c~7rK!N~3&=P`S7$ATIUmyW! zPA0FQUc08(WUvk@USIITiwr7gg$4xf_He(qtM=hLH=g=pms_5rNy|PnXFgre>#{sB z`aUnUZ>OvIsF&lxCVgjZzK{O)yU)J$m1mic&+m_){N(Pmt`GNpJ-44JM*N(df4Tl> zf9pn!05CwvwV)u91Vi|C8U+kXQ_v<_s4|cU@={BSimC?>*Ah0#hVMkHehNFA@5H2U ztS}-hE6yu97<+QI%T()%mFIi;vYuNXS~b;_SPjF}L^QI4Nm+H>&L7;4{nEb3lndM# zGMMaUvE!@lBV^fd(P6_ca6|1LRwH5=Lnq@1S{f(;09z0ad*GP`&gqOUCQ}(q+;|Nb z?61<8fO_2+3}Vc&WRBs{$}9G5pmnv86uaXXmDbh}$$heV2C<_JaCT4;uZ57lumY2U z1b&GOsvewb#Sl-nM0&&TGFL`-t@l zrgDEcvR$2GIWM2zJ$&`q8}Gawnd=u{ytsXGV{d=>Eq_&qbKvz)zXBz!Sp5P=0ge>{ z1Rx{aYs`i!Oi4|)6)li!_kJ#4=)-(qF_ht}Dq8y7B5IOv`1K$4%NVQ;OS8bjPUV|Z zVM;A!X?fl>j-}_an$4&&eT<=)bGPY{43`C})~NJkU)k!kaOtc~I@?^YjEuXHgJsEX z=vdpt4(Gh7VE%w*UIUvngF z@zU$oZ(}B_*qeC@V}igOC4ukSW#?@kh0&4>d6Z?0Bx50KJGVS`xPje6nFvgf;IBhu z0t8Gtu&@F~j#r`w7_Srn3exd`L2HZxhk+V`w$mL0CxbP~Ni#Ch>(xNu&KNQSj4vbX z#7NqS9Jb|vb&uhTSrL$gF@ynNuXPo{Ci`h0Z(Xfld*|khy&8LIl{zg#WM;JOdJ7%% zCl7a@zp!)U7}J;V8^vxIMC@Zf9?X_ptiAi;&Hk_-R^NQ~%&%_WY-R=t&d={%04%78 z2x)->8i;^$>_VP6i2_6f))zY|iIA1oDP$IV&W9Y8)t8V(=JX{8%{-&}m?w9CGnT91 zvG9eOIxTj4rG<#$GSaiAgu13dj&}HhdXX`kWQUa}afY2&+Zm1D$81F2~Zs z<|*VJ52Nmn*%vjhRMiseWGoD0DYM9<7Sn9B$prVX+KtehS|BTz(=rE(pPXZ#d0LuS zVP|o`7pqAa$OwGqG|fS6Nk>b;JkY`zOfeTr4R#x6JAp0Oj+=Iku$zTP!&UNF=k%OC z+(Mg9$3l$LvXAA&Be7O5JZWcB231@c1Hb|b1OrxxpbHr`!5j(zXu@7S=9rX$aZDVT zxN#h;qAxfsc%bx|OFOAA7$6XwTvaBhDYFwSAYNk-MZtQ)6ND``mwCd5Fc2hi?6o^% zLckL4ri-lZ`Vo5T$@Stjsx{JM)s!zAlg>UpVn$OgTU7R=mRJ|@VTej#}(w!$1ixqKtK@ zhXpn`7Si&Hcr)T-_Qy-Ry5d&jv_!Xp^~#Ovcj@I=>a8X5r~vEB)xm8~pR zjop^8MkXGF#i51KaWO!1{ux!Z8W{lhe3-{q(qr0s^R){=FgXZ=)*v!R5 zUaDyWVFp}h?7=DaOWri~G}b{jH0@-1goOxFa;(A^8JRtN+q<@yMJRT(QiUiHA!Voy z>y`}Tgquq;a2Z8ykN^hK>#-#m8f;tL-*3@~W8XJM$;8T8 zI~6z#$BLgJP|%VN4h5?iCv0F)AZJSiML@w2YsP4x-EgE(jKu|FwGiJuR{`AwA zFYogFEPnZ&+au>^kK^gp&Ew0v=Z}~5w7Nx(ek9E!Yn;!U6`wsk#4_J~>zRG46pXu7Ti#_aZBIC^@rr<+}y z_r$F-w^}df3Zj+mez86LCzbJNZ#-d3uc(wB_qecMhFjFTrwHfe(Bt065;rZ(vSq{F zl%_G{-6X|z!<7e?Nn&R<;=UJaJ1=8^%xEM(_9-C95?*)a2`38z(s0qq062Lzwigfi`10W!AHDaLHXuda8F4Y z%|E-FpMG+8dKO>1zI~Y&9scf{ym&cYKIXc%zE=j>4IL)YYokwfuc)ZU~$G9l2W3za8 z8u5n3oO#)>uG?sNB?}+ zvzzN?xo0g?`;3Rn@Wwgp0x70^>s^i1igi2|QrVj8zO*$?BeY?A&G050q>&K94IoW1 za(9>7)+#TQvjG*k?hH3PtOhg~C@5nqkX_J?>%N->?qXN5oY%ZuuKj#p71z`Q;ifTT z+n(NTzw_7r60dmoonO6vdVTaSF8gd@R&bp>_;e_^uDZl#EfcK+n)VqDQ|^GXne#Y% zBULz-}gOUchom(JoXtc*3Iq%V3N z$K$*2Z12DK?&Z?$emweRWV`Y!u5!Ki!)ITzQu{@VXlHMgpB-bH+tjfjzp~udS@#c@ z=o%Yd`*=9f@+9qn zmobBP+cNh#T3c*Ttwp_QrtA3pi*cD6w5?sB_xrmiwM98B|^enx z`Mf8JE!wX8kvF$-d0D==j*G=stInz6fH_ts37WSYDa&xgx~IZS6ba$9$`Q>|DKfb^ zvqSFOpo~hjEI)hFY|c@A#XH)OrM(X0mEETqdGo9_@EooN>r)10($8>YCBXK`RcCMZ~; z6p&OJtFChyQ~^k|g=%mioLz*Ga19*^*c|mUOpb#V_D~m$Air4n{}I; zqW9ik%sIQCCwp)mR0}zU0bWP8-+BQ!4{PTz2mvv(YedJ?kUf4EpJh>F0*36|fq91mz@$!)w5lCF%6iAQ|RQg$Crq%1Cz;ZIJ z!2xFhba0c34STWDDtzp6vskkWw-&qlN_4fAiy*l+9!C0y@4WF_f9Hbi!N%RS__u zK_M{7X~hm90tSHNL&KVpM8k~zg8MJJ03^iEm+b+=1|HVK7L8Ud!H6IeU&ykC1~^s{ z0GL_AiV^@2t;HqNQxQsUk-1MnZOd7n7*j zRbEc+Y?i3S+0EYj;G+$@pfD6>8kc?b(`agIt5!Uq_fDq>W{&M-dj`tGrQQme^3*KC zKEEHk;_Zk-`#pXT*O_vFi7C-p$FRnH?|inIedNBj+F2~85Kio*N)Z&b(rS!cgYw3Z zEWr#fQ==v6#e`frbrU`<-@Q4H-Y=xFy2j9Q3LUA;mgMRQ*JV4fs9kT_ckK%!NwMM? znWU%VLE6lH@r|fiYP7Tw3r1b0Z*D0kjYtw)VALc`iXi(OZ3)aqrW=eE?+_qxD0gnI z-}(LD|9=9K{w@E|-~W&P@BWF~ci#Os|M`FOfAhcd-+cGYTdv;y=qn$*c=?5yL!|e0 z`Usk=7oi!l4Co%tVQE@G1_FP5>qiD4AZR<~O3K*+O#2=YNCg16Uj3b62nyeX$ie^& z3JVkgB6oaa86*hQXi0&7t{Vcc_dsZ;B5`SenbnXr+e$jm@t|yBy)xoPe0JozE?<4` z$#!1J@yVypnb%j(+8iTfX7geAlU1L++^=rWPfyz?cc1r1XYQ!l zeVuRCXIJ&fBja9iR!?GK3)?f-?VLyUyZefWfINP$_Q%7T z9>eV7*|fIDvEPO-78ljFYm0SN?as^H_Z-)*v6__;LXxO~qc_Yh)osK>)VyFw)7&y+ zDqW&1+EBL4$?84?yNGZ|B^66#vV+elYZgPt(v1CNaXH3CE(vlYJbLD8B9)w%9F8ui zC4`O7?y_)S3Cf9tNQq4{D#;lhoxNpPwTf!dGN_^{1YbdDM2j*;uH@yCLB{$0M^J?5?NM2pi+@t=Ula($+=}OX50g z*bhD*EwZgorG6dk;z%~X-uH(&?0oaAwf--cYcJR;vZ-}-x9e~!g)Ng)^HbQv=&~^8 zLO>OAqEv1RM@4vAS*{tw(;UXd>@1RWB5|jik%|Z`^MG?}HgsrtEh7ep zblut#_D4VXq~_<~|Ly<&|M0!1Z~s&O-2d~PTmP^9xBdqYFYdqltKa#_PkwTB+L8{d zGdku9v*BvpH>Y|a^^Qp)*wl8?X=69Gzc zLmgXR?LQpw=g%MBfA8j<_ivAvW$%9Y?UlTT&HV=7(}rD6Y!6Xa#VpRD9Xml9Iq=2; z8o1N3rPLZ%Eh;NRm-}&E&s(b@UUqiGsEBpWTp9?&sPq-v@d!1s!|I|8G66gw5dT8H+d#Av5hEFfZPM3tv~qQ??Ca3 zIe+I@fBEjS(XD=#HBL(4;6+OmW?ld@ot-uvm>;hf8C}B5VX+bbJMKK?8s#J?G*fWe(A1hUXZbUeJPW5Nfdw zEn-6E?nff9fP#RM^z{1rr$73mAAIk({*(X6f94$a9vE6b)N!2sMCjWlck z00NnikVwb)d2n#Pgc}Mpm6^-3@H5OTl1vidRp6x~-+ucv%^!~GC*sC6j`?!Fd>CKc z(RPkS-HF_kL%ETOcgTUs$mplIx{A|+omv@wS|XO7X)Pj*`%##J7DW}<2-C_01KcUu z{xE2=OV%>pee>C>`Leg#$1)(%gv09Nu|KAn)+O>3D^-HSY{C>HF~?JqD2A8`&Sl!& zUN3TgEPJE*SI+T%a5HmT@^)!g`0bkSU$4Kk@CVL4#o^8G#O1iNPho@Tk6HUTiA?BhfU8W8eTJ>8aF3BQgO16(d*! zAIN}2gF}edU|>J@R`fuGPo}ig=zHcx7+E#OFx=cB$pi#|Lr^KMZa25aHCyaqmnQ_V6RR>p5jc4EsK%AWX>u%an%0|@MJvr}gIZ4(wLDhunHKBK zIf$@4EgJXI(KS`o;^?)P-M(@A?2V|0(N81nyqMXxU{hC1JZp_<*6v%|MlS;8I(VFz zAe{X|c#}spuHb;XLZWm7lC))ee*B>i+}A` ze(l@;)c^he0=#qeER}}w3IV|)+G}|y?6O&e7 z?eXwWzIc2beJjkOsyJuARPXiPdsl0_>bvFU%?SYqLExIa9f4@WL5^ZtIEw&jn1?X8>Z_2K2q=g%*ny?k73 zX=XZ?{hc3u_cH51i%2)^jG(7hF#=BpmMBEPVUD_mx2()oP0PX)Sn%z%m`2ZbZy5+q zjvloe;iVxFwqa5>t_PP2^HEX=T`V@G!yW|G0Aq2M;t@i)XO6(47^{&q3CJ=Jbvp$Z zd$NcKkxO2C^rWIBtymhBtWNIUyi$%O8d=S+mG?v=L}H0n=mfALkp+pIc48y}xwzE; zLkI#ov?^^|WF`RCB1e*nYj`O6wQ&(3!$4p~Y)k#<$A2C8`~IH4=X;-g{JX#P+ozkW zue|xrX?^o|fB!E(dHUg#H{aMF9?gtbxY$p&UdC`YfP%BwPZk-2Z0@pd=|gzIwb?~7 zUSlw^MkEHwmvO?_cij1T41g)M)_{HABf|02fTj1mebUY=nOu7K7ERneJeczO_L(^D zUr1Cm+Jfi$V)m?K^?38iZL~^_%Y95woBQdsz5B+^{e2zP!$Tn*YLz2eGiho^n4KxH z=`5sm<%kGYS@tB!Q;2A>#kR6r~?$WS(%S^rD>wumm!EON+VD4i8X;u&dpu@GuW?9om({;98r1FGl^i*It0a>K873pNrU@Sx- z0}qYFbb<*bfB-?l0s`D4GtEF)m?vox*w4)+mUMl6E$RDz_}g#`clUqLU#I3YY*i(}>WXxmt8^5>{;2Xy%w90KtGW7!+UT)etp079f5hifCgD zGm``eg~!9=!+Jh{@bv1_3zxggveDAwrddUf+}>d9db}G7>hLYHAH8b%@PpeigE2al z$*JY}^u|N)(!;au8LFf+oN(O85(7Miqs1E3LOjl6=EZ$mUHh;)tRk;(+G*LMs?FsK z^&fnG_l)ybzj`ZMYIK7|Z8Xit+^H*h+;Z&Gy=7MK-QDf$U;8K|(L_47!mB@0s;y~ z_*#}Duut>Y#&Wv78Z+n7 zm#WkC>EZst%=i+fnOewP&u|2bOzcJoOo62U91NAKQ(6`>kh3JI1{%K(A|YiLdlxg(|ofm(a1#c}nfk)mz)%Ja1-m?x~n* z%kvlGb``tY}en{T@Bpm2=2kkO!9WHWD4kZMfpEYunM=D7Ffa#W zl1;1BtF2jhX02?AM1gDW*g24~B$uRZ=GHVQ8yPKx=P+wKmvyd2UdTp(r^=fwTV}4C z?>Wwjp~Qx~*@$7aVqH=wfRqeVBhs>^r9;4A8pi*3ad)JIb88c!BC+PlLcdSK_<3Bm zlVL8x=ib{Em5Bv}`<@keFcJ%tgh+-kc=e0-1mymSKdbX~1d%Ayq zSkca=*7ANZ*jH8rR&%si-*^@;KFxNvcb}aNph1BgH#~i4j!|j##4WCF`u=$Tm`|=x<@&=PJzuZ4XJMc2^_ANv zi&chMCir07oNkW1?0ar)v*=VnB-l5;@==Ca3Jm0sARr;IM5|j>@XG3ofMv_^xZ)i` zG6GE6;S2|AkN_mMqK;v#2w8_<1d&MQ8a-&Ns_sOGzym-7z~r4gfuWLET6zV_T(%`d zFC5H~5$QuoiA^qYAc&^SuuRUz;j|=83P>~qD?rd-K*I~18nA#Mumli@zb*c@oXBe% zY#{HSnvB0KUDwnv{JP}JJnVGU zY(8eL%S=C8?!waC<<2nZX{{YeYhb4(cS*UfLGto(Urwjnww<2Tdv83O&-Wkom#1|L z3uTHFP7+P}}kx{Kq!#?=>N7jjEp-W73fcE8IuqC$YW z%~dhD7}t;hIHW@dXBx)qxzVgZ+5n4TxP(IjU~V7=7~oh(#&9sFz?b5Rbm**388mE=0tnF0HFyPK zUP}J|hRM`WPGrC^!f?^ke5Hm~Bl-UY;hve|=P^KxI@)%7ijy68V@zA69yn$oL=4s1 zC~JPX-`n*$sGfeg&#h&J#mT<$#Ma)gDLavyVo z)}aCEN5q_*YD`HbA#EDuBn2YmnL0vDwN&l7rq&f%(!iEB0y3LhW~3l=OdYv%no4$7 z7*m5-FpR)OLLU(^Z1*tNK9#dIuKfH`Kw;w)p7 z6A*#;{{hBpTs2xqE+Rm%dMv|-+q$}q5oQb2-_FVg#@~VnAo~zsMi7i}Y%B-!d|J+% z(N2)nSSb;Tu##0*{f2rx=+jG%o2%0l_)KYNaJr20fbbM6qo7N1xoSW?y^f$%}{m_rL$i z^^@B-+WGOJK#I!Wvn%jCS%ZvvU=Y zjDQN)uvju>$|Jp<2qO zkd!B7S}_X^GutD`T9u|XTY+2eYS!e(vdg@Ua|QI_o;wY+(h3E&v#caofrNnpxJUpD z9CCqFL>pE%uwb2ZfMl*%z8d&N3O4}KSYMCm{>2C)EK>%82uSL0F1rIc3jkEG4!W^w zCN^L}3k*eI*uD^nf;P#&c~n=g2j>H_S@&5e!hQxzkm4Fxo5k3_+mRXaeZ!cF@}^` zNqR1=wM*_>c*1dbJ70Syx9|P<`Q6kvZrZY3^*W5i z0uSX8a&v##Uyjm3M7U)>RBfv*Ih<|L2=?_bgo#BdV?=}#Uu3w?oJwU*#_XYboVm=g ztY;^M1_ww;IW*R>`Id1R!FI|tGi#P4$eWT(NpqJk(hx3`93}O2UB{7wbkm5+sA=Y5 zX*qhCNwH;xW30n2Iao!c zW?8wU(geCg!e_W5MMhZ{h-idEKnR;G6Pq9q2ta{Dh!V@RWsYTriNT$J;?dF>h%7LGjz3SD;gCc+2R?v7*KmS6k&o8Nlt z>POG(r!QW-^YjUI+WQyF)^5+&&(5*?<&txQG5TlEFKsjPxNa8qosVQskycHX#$9-qJQjM0mV~zSD``Vp5835LREw# zKzO4Hy^1^l5%#5n1`0x0(v55AAQmVCg9N=2-33*E%z#3`0to^3N`hWtW*Q1ZPJuKj zqMcGD8;q6Kk(+_QfnP|oa;_F?XLo=V1igr6tJEEJ2oM1Wm<&TGv6ZnaggGPxp5zrgVrNK5a7+v% z3o4Z zgFigUOe%E>T+07f*@$jN^bJjiv z*_vq>z=kq;h`CnR*t8DIe)Q$kuB=5gs**HTG{6Ydu{C^T*JGbvhx#$MQ_PLiu8RmW zNdfo8W_Eq6I9>TsNfVFd%hg<8KJMMdqLV6VM3RX@_U?z@G7D)(fkZ%ou}t#3ZT%iK zTNoZe!oH7dsMTf;n=AGJPoWn$1XMsm!U_ox1mqwa8|+DZ$wIP%5(_SHGoy#na?MHw zK_!^47_d{A0uVSPl&U3aK@%5n5E!pR6hXaKmPm3#gA@TKDI!{1rz}TaZE?3>sIq`; zAXLo3x~l4obxBf0L_1;gvhNmQ`|*orIs>nL3Wc0-4~wpSBw-b-!mP5+*5-U%?0oU` z680(uuw#xl&MU>yjHAXlYFRcc84wVVKtN$>bM#5W$ow z6Jh{U?JATfV@S$Ovr{l|?S(;rLqZ{F&g=i{Bu|T*HBs8d3JW9{GMf8~#~vs9=G)hd z^YeUw%)xdJ11sZo><~K5*7IH?;YP8XHmgPKi5WrwLSP&0GCPI!em9SYLs#XeH@3Xn zDIdH)wa?}z zF##|DQ&?rjDNchuStEugsfr-eC15oQ4Z{KwD13FY%5YJ<0s(+yJHm+p24?&{(8`a1BJ507TU*dS#U+!Xhc8$f{rb8>SV{n0-D{1e6(SJ&^o z`{9SrpMSb7F~H!p%44Ozw%c>q{n*2hdH8Cv^!pbw-)IjUflaZ&Jvf@#@!N~IT8^71 zZ+`O0C;N*Zus-|n!(X~QzMOSH%ua6H7&s#V0)PVy01VQ4*7a?yr|5Tk67B+ka4PlL zaeQ!de&^Zx{TE%zuf&!SR(5vo!siK8{{CM21%LmV%sH$u1d%c`~n)j!LQj)#@ z!AFYlx*M^Y02s(PC*3hK5tuB;aBD&alwxC`7|n9*8}85{TU*B?Y8`+8K@go0Sb?KN z0gaZKC?bZ8td_0T;oZlIfpxVtMrI7lhD?aSFot0P!V7Z-SbcfI#YntSlQ5LzO6*kN zAjgU_`+sxxAHddkSy>?dti9I$?fpC9#y5SbzpoQb(=;eiB$;5uP>c}=10rC;G{(Uh z%sCEX9!vfESJXiT6;TFMf+I)}kW4ppe>uG2-h0w-@84c)ubI+&>wCK>%b9uV*884& ztL{0c?%835XFbod&E;q{h7g|r;P(Rva{QKez2k#F@Ld3&eD>XKZoQkMM;$Bzm{_F* zj42L2yztTofazvYVzIh&`}UnuROfx*=x}!*M4FnDIb3)E(P4YJ+dcpQa9*CD9i1yR z)5pvxKGc=My{%TK_wT2twrO6x(e*COCITdRP9g|s;W!uss^`5*ovp#9XJ^GpBzzy8;#Z@l%xKI-9S z?`DB$go(&Txw~Em29GhW7`%f9>t{!!!6ypK?KF){4REmIFmp=niSuGuqr|czCS(Vb@vI zzF1D-$=eHRarS9Dbu)7(a-V^$Q3MQDI%_0)>*&-#GnSs5J7YV137Z@-6G|E-97)o z51gDn_m}?mSANm&`knV~Kk;||@z*|i_pPry|3ebRB}Ny^1_yjJp)p43c;TfVy7$a8 zzv~bEnP2iNzi@GO>-_93hu!A#;R6w*VKHN7xR6X{P6`N|$8qt-EBANX2lw9bo?q~} zzxMR}EoFc4aPxYU0KXZEK)iX7fev?({P5Aksr6s_OTXZAzVKIk{3m|WPk!%vc2}=) z=Ij7)Qzg>oK;py2#l`&x@A>$j`pZ7=H~sg&_=`UBJ)gY0_~7R9fnp+&gg^>X@SA2W zI(J0ov!kQufB5@=@^e4uSAWJ&`}m*#3qFe%cR%oB&l4@w=xjl0$To;rEovYx*HIE@ z^a$@LBk9RHx%zY{V`*iTsR;lUsCnc4$;oI4L1>jn5I<_W-L5gSh(HinD%z%~bMM_J zgy7D4Q>AD|0KxF4>OxtIfN?n$0>?;3+B+q)fZik!Suml1Y;XVx4r2H+=YhG++pW2Q zAw=-mF*2NeH!-<7$gdeeO(6_!n1K_STl%G6)-T638KIR6`+HG0;gexN3UOi!{>b7FZ-+i>zA)0e%8p_?ZJ;dC_`!pM-g?JHn|9l6jK0oeBy&afCoR1TwDx0WgsIdKI^u!}G6i zZIOoN)|xlB?n|Lsr9~tbz6k?@gIu~N)$4l4&ATXoASx-SdGii$%@u$YhKqIxS5C|> z4nOC8>#23qV8SRZRdS&0P{-?|&@ys@6-XzYs|PfJATFWWJi%SO!NIDtD_y&P%LEk^ zKphNm5&|j!1`^(cD!3syCP$gU1P1Kp9#sGXPys>}qyT2i%t(2$-{|*!&o}?sKlG*F z_;0@HpZ@Rvbf=HT@tzeZ!J8o)838B&;QKBBXu<#dpMLFM`tx7Y?DE1_}Z)M29le9`%Pc?#b)K7eZ^NT(sFfj>e~{<9RTP} zs-gS1USB`zwF?4~UU$tXbz z+@TTCAq~pV^(vG177;@}8e_-AqZ|*BQ;bv^hyn;;zy)A*_Kmn1W1Bq&D zfZlWt5P~ZAL5qun0Wa59&XOE0Hg6eT5EWWecBNj7AtF&Jd+NPtPjK5SKp+B{XcI?e zm}0pC3cNtp5Jf5CFg4{dR-!DiqE>H%r~%M9x@+|`pbMly1EgavNR1M-7FAbwPwp^> zI{dLORgeQfGw6p7VG;vDkiqJrZelvQI+2?q5#tEJw|@OM|FJLob5GyCH%+fa8B!pJ z!!??4B#BW&T$=${s;M>3P&-~55_rm*s9a8^M$r23?JEbUH4gSd7)?O8&%pTqLoQmqQv?r$On^&4@sO z&6`%Ztg=kX(y)Z2EX}=WjY6g&WKnYWc5v@u7I6pH$W}~9w4uWmK?29x=P=p=F-oR^ zuGvNca?Hh3j%N#fgt?y;(Ft6Qx~(EsB5H93F6n?I0F#dz>nU3>WS}t z|Bt7fUVGz}U-Egs$`0F9ip01_D5`;?sfi;diEF9*SDrXM{T;ve_k8N7f2t(CNQ>3gkf*vXh2MGo>m{k_HD95@y?rvkQ^2RJgTJ%I>mwAX)Z$nC(z?vX+N< zYrUvF6xsnH7By0JNH3}Bqt^E2u!?ctbnkVdT2(JD8yZgX%Fza}YwIZl<*v0VleKEv zT4QnnD_PL02xD9fHEya=q;5vFHZn%6<_L%Z#17}l8qmg*fyRM*AhN|8d0Z(O-DItF z>xs7u+?cgiP8=OgEt0hB)i(lsW6D+?3s1f+GSza2QCCfEnIF0*vbKg zIau8o0vM1OUNH+NqWNc)cuzpv_Ojyg3!oABc~>w8o}qJ}oI9rq+XZ2l+Ko zlshUR3u~tsJ3*T=7$+yE*j>E-XyTOFUH|jO_y|fxb_IDDl85m6oBy)DM|L2x#AK)r$!2RL~4kJCQt`DC?LXTNy8BM1UqX^)2?0DAg+h-HH-@FlvEguvzkIo-ba1{(%Ze1})Rmx6bd~xl_t^r!n;1 z@oJn(df_nbW@VA%$WN_hU;77Ny?^g$2=GHg-%WJy?hr^#;ZTM(9|Wyg2pKk=tZ(0c z`0C}=Yrt@FdgtWUs_kF_v+qWt)<#Fe^(Y@SqD@#PFD`aC6!%u^NnS2bm%a0@?6QT* zH@rfJzDXnKDUXkKyWPdhfS;T{dvbody|@fSLMQ~lqC;W^d1*CAw7|SWW1k^82DE8* zki`&MJQ~-G3K}#Z2BnIL=3r+s9;|~@APQF+xHpM?LFv-l=HfEQYPlSaBGrZv`XceR z=>3a>F%jd|VmT1a^L+4`TBg(l)Fui+hcSi_*`P#dt%f<}+_iZlbg@K-Hii25s1*?) zBBhk0w6@%)$+9^wqt3dW{D^%AFhIBNy&Vps4vdaM6x}&O8_XHl0ppDkngcmXZOX32 zC6SjK-pn3Yg8*E6{=pnVkcP%YFc>3dxPlJm$dsv>3LH?-bu-8a>drBWxRvJpx^ZDJ zwNW#cKB+KG*Uc0N0D&?v-PAk%F=i1MUI{FK15E+uNT6<$f(1$j85W?h+h0=Cl=AZU zXsXrKAf&Z*p{1`^V`;r59~(fVZkp4oaubC+(*Oo(tpli-$1HianEif}i;b>EKFe)W zdj_Ab^S&_&GU$;`S6h|X&9Fe)a9em)PaY&F85AA)XnFbIVJqd<-CNqcx{abZ#6sW% z=nPvSmfoEP;t2{cyQdue+C{lCsDjLWX;k3~7IZ-eNUxdq&3%>A?(#51K0aCB-)^~+ zFkArR?6Fc+1EMAooh2g_)aEq6)d3-zy%P;tmP07;NbpkC#n3{ev-MH0eWxVU8~}$v zc)yVWYSWx$aJFFkgFd)u!;!u7_zb}7bD19@49&8m4DPC}9v?5x*Ng3>n@tM~V@<*QXabjdmTrJgV-O=!lbNjVo^pW-#5+CtqhY)Pe_Us18NZ0mLIgTaZJ+`Ii?^g zF2&P2lls*5L@UsqgwQfXz05$yQc$4XP{2ae zv@%KW$ZOXYy-Z;gG!6&p@dn>faedg$`dGC&lS&dX;P@e_T9q=1& zm;ed}3X5oOFaiF{#&|opyAc3N*Fh*iP>0+!kpx^(-9?}bw;SKU8;&jjA1ENg+MA{z z5pWo}cod+42o)Sqv!haW6hjhJAVr{wH3bxr#o@pXSOIeV{5^OENC^xj2(vbAWEru- zGY~)pO~3}5kyZ#3)ZhXVg1X-rlQK&n>DoxF6;%%s0D^<6BWA3N&lS4HfW^!+aiB4> zwYqJx8~~pSN7;+!#=TQ)T7_seaDjIsHj)@=Q1?DvxCFRhG3&0+dUCp2D6V`O$8{=o z?}$-GQBqGaZ|2=aPy0zl;fdS4&qMAW5RE27%21_1t+kYwrsaB0Nf|4kAQ6f~fdOy^ z0-z2MJ`@BL!blXF^CF%&HP(arY?#4AQzUr52~3?jH9``q20?+WfJTix6KW%+d600l zS{s#pi2~Z`#Zfpq8l{O+Ul`m6OORGdhnTrjS>}A$7oxpo}~-U^U!SG?91F}nWU+TAV^YZ+uQ1Bc@l=bw$6nS>s%Tm(dez!-r&-E zC#eIk0z&QDTB8zp32$(K0?-f`3U)_^?f?Neua4yqJvup{0KhYwD+oB?MvMU#5CXsm zm13ms06xSSUs#y5_nWAH0Q&Vo4ovPLiucZNASlHF)xZOL>a6H98ksXV1ORsZ4AcRG z0RS?Q5xHXy=r^fLG6uWeY@Y#%&}Vc;tgrzrxIP^SVj#dHLg-{#;OOMN^EkjeKn9Ef zQc&H!lQ>O7<-9<2)X8dy%OSMh0y27#TzMXiL(%C3nmk2Xu8`a{@?3kXz<|L*52l^iu79-?3Hl5e zJb;nm1nVYoq1|lID68l&Q&4Pf7gvv#d3E<}*@L)A=+kaiCeodL;L&zFm(xW)8dlw% z6AkFg_31d+rj(cOYYP6{Q>P)&E3faJ=ZHMddt$IVxy7&`rfOI$hX4oYuyaJcwGb!3 ztXiLY(@C5{486=6C;?sA+dghuJIZvnUI1Kuo_9Vj!!V##q7mMq@ZghDTmTKAvnSr_ z=8>b3apfkBobVI8?imgW*1#;)kw}dkkHHN=3`o~2a022@F0AZiQBW1h;ef)31z?yq zAl`g}Z~-?UK%F8r^$0|O7;e`ed~!h1A}D|eQb3HuO-ZT)44zQ{GDLw3yg?(PLV%(G zC~_0tZpAn3yO`l)LwaJ;-b{95)#PO zg9l6I`nZ%+Kr}Q$Bs6tMa3C_N2}K3eD`KEN4mv|*&poNJoRa6oMiCkoWxZ< zI;*!1A_wT~&RZWRH-dnhYc#&;cJBodAQ6QFaGPQr)y?rZBzi3o$+C$_6Qu?SFyD+7 z^P7Iv>MkZE${@X={KK79npYYVStW}k9szGqy0&Z=1{8iX_GSw15Q2gn=x`w)kSEuG z>X4gqbA*v3XmciOl&LirB}u3zHx%k9Qq)JUKJOti6 zhG=de0EmQHfzhKzYRyNh!#bhaRG{Jv>1gUC4vQj&Ar_i)8!9_@8qY)N!8c0XaS~CO z`%dq3n+n}pN+c%*n6_$%olC-yF*HB4glwWf1Swdrhp&tw21^8uO&cvd5=Q5#cL9hs zTAEP<$KL$FF)gUmU0La^CG{Iz`&r z=Kik7;M>}tytRJIt#wgcJleiqHmDvYJGZi-I4F(zR?d;_#fzyGed^XpT=I6e+dV`) z>rWrAw$-#E4QP&9N^2aX&o-Z?voV>$Qpy*X)9kIQ4>7M+gyvV%R6EC_>1-Txz)V4@ z!Z|bxGEdFX4m0}H(=tg{MQm_!?bjRQaohx@9E%hnMc0GcCoAW|?fRYZ3mqbenB4WQCIMOnrm zsyo7nUJ%qMd!v}Tn?fU4;RbRb!iXe-0Vt~$NQ6iu zyLY&4Deii6&NxZhfDJH2=J?CHCU_rG}Y@X=)J=O5jr8z zjb}oKHu41Th=8FJ`kPuTO^}ItwHcuUp@D!n#F(2~2mqXdAc!#cR?!0zt_#A!#Q+Z! zSqR{SV2@cbIQjrMV2_DpDmpZwy6iE$VMd*dMCv0(t-=fK@3U=8np)rGtK5Q zAcOXOwxWx%D~G87urN~~!|cLCOft=WDQ$@;uFdQ~5D|EvOB=>va9zjr3`UT&~T2n~2tmMmMlutUxwRNc)fq90E388aLf4%= zg2PynLZQJy5iq!-Gj8yqDzP_t|KsX@0)|6Xu{4S_w7hFDEh0#9WN@2HRfUpdCT2EL zD;1t4OK+_i?raqs7;fN zo~LMX>|l zS!mPMNMw2(Vu&VR+__g>bQ-c9U}&n42jRfl>_K z^~Zj2z?pp1TlKZqH62Aa;J`IPWK!$Wm=k+zN&+ZIT^UYD3DyC{H6qXmt$_t`gg4u4 zdR)-Eo;nK_9v-IBY&qoWhy66Aa9&zVqup69?r-KeILq+p;pX6$9ZnpHN{l>B&Rk(D zq=srpM79^NkG8r)4pQ~@AH zF|(V9i$UfcpiT_4EE1?ySSC_uB^m&AaD*5dKn`ZFh6rlli0WVlnt}+5Lu2H9C=bDby`S7q}^WD%L1$bKUjfVa3>yvZ;3KdZeF6gLIb3C5CNTH^hSZr zs$yUSwpUb-bo>%IKZky$=v%w|_53Q@{LXTIm8UnnLgl@(`aZn^`Lp@-rQO!V5~b&` zY+l|7^X^a(kKY;OeR_pS$Hj`eA4QImU)(>sH7v@0-u2yY{De>b8{hvQ=ZCL7eeWHg z`>7xQRp0jA?|bQ`vy+rPp5MN8|G~xP>f!n6$@=81f#+#Ez4GAp$Gqq5KkZ$+&Gh{(74?69!P)`GfV@lM>S5!Hb4=gz@Z8{EGe8e&6n!zfC^wlU6_Y<6>2x zy<19~8=N($^zJZFL~}3zCj|%|fPfp^1k27SoepzNGA2Zwn(b#V+tvY_LW!S_zk26q=ncX(^W@TPS+ ztPVC$eTpr+xCi$c0XGM60|vN))f=L4NkITL03c#BCvqZJRqdYH9bn#LCd#!l#r-P# zKt?h|Na~cyq)7ElBrXvMH;rq$`3gY4o}_$S(=`JO zY~ci(bWjTeuli!uD<6%`<8V0a>s(Kz12WH2>qNX7NNU;kA||xRIRjw;MrLc1syiCM z2`8Xenj(a&{w|*PzjpZEulLQLn$JIPI)|nAt*(xJ@f++JbpF2m1(1H7y#4vzt2XK{ z9`4mT{Ybppi#^d+zvA|@fWGhQ#XDj3IZwQOvgzRSuKQKnVzc?QyZ3(m$G#Ujza!rM zxgY+v@%FPXz4qhZ_`^T)^265=>8F46M~#d1_r34?pLy!ZkNxyde)ZvIJI#UX%ddR! zsZaU%pYvCL^FRA@f9G5N##csP-v5{X@i0Fao_=Ee)@PbOdg8Nx-uBVUy9Ymh^x2=e z`uLCAW2&F|QT~g5vI66Gz8ns9cjv4ef=`+=xF&BM5sGVDO9CQ1UAK!r1O#-z6?Q16 zX?*Kjj_xfMy_fxD2bTmupauagPZopuyw_dn#iwq5bv4gbc#)cw>vd%b1UHH?sOe4a z$ja?nz9JSfnI*&OVcmlqoy>W(aFso;tulB5DxznxeSQGZ64!LAchO zwy7_Knd&l`>VoIiFzkY5n)6~cx{X6c8f5Bf6&4^CpkWn?50D^(59mUjeFazX(b>H7 zb=~zbFcS+I6LqL!7|@Lhz{1@t6T4=KJSGi&_UOBvk@6EK%Q(=!$?-BSR?xj&&Q&dp zvW#gS1YLuL-ka*yY>|XXl-wPR(4{-qR4*I;aC!D`5A_N!f4tthP5HOs?sw|^BlFd7 z@;gtBi|?TF`s%&!Gyg{2|Hl57cjx?T*Ux_`R;Qq_|xqQjT{fw8l+xMK``T7?hJ$G-Bd;Iiwyv>GjTc`8I@)v&cr!5xCThE+s zuc(Li^jn|!#LxQV@BYT`a9L8v)sKB({qA>s>=*u=ANtCFU0!|Tna}>23c35ceqK7x z%P;uMd8F0q_V`oYv-)Z8jz9Aw!UqraEB^KPi#|Q-vHsA1(Esg==`%hNf9EUX>75?9 zyE;Y8of5=h9dPhXP~8E>H3aC88B}^pNuIuU=2kB*C*^Et38VyVCK7UrE%4mh(Q-Hf z?W~#bpyU9!BPUb_&qxHlF(%-MeiJ7c0ucZT*P`vA_vtW?1D&5Oh`k)<;t=qG8Y^Y^ zj`rLaW6q`(oQ`BTUgVUpk{m1^`n+VSRXsw2MINIPG{s!358P^$Ks@T)Zb%#dd1GXt z5YRHhjL1PnoI5)H>ma~Jj0RhPmC;ksro=7U$}kQAW&qfwqt7rIGQeapj3|oSJNItt z)pbUQumN<4Rh8Hs=nh1n1HxoVt?IsYEvDQD;(hJYJiAMD4?Pfzhr=99xZBLT!+yP@ z=WgGYL?3v#dAQe5<}~Ev+sm^s><;B19y!`%n_58>kBf`5R7N z{)6$g%krM5<@R?%|7ZHHl^_2`J^hOCzVFKMOZ@gb`|vfcf9m14eBk_(kJIo4yC3^) z>4|@j@?bY@^z|PM?GK#4?U=_uyZPWh|G;&HJK%7d zfy5X(4&Z`5LL=A!0^$0s>XCb^6Y+R^m1^x<*GviA=cY>=LKcGU=lQjlFAqVVI$IAZ zy?RxwwiJSOKq3x+OppOhATwq{1gat68WcfJ4kExn0X-swP;J<6uNcc5-8J^qwaw~n z)>h`!$L0sjagIV(!bCk_<{0;_jf4u{(ZoG3n$Sp-woE$ff`{snQ|GChH}?UkKtOQE z79`#R?}JB~#au7Y{#%-=2nBtGp-?9&Rwzqcr6Y)BHHXs&3;$03$v@v0ujzas6U<2R)xPUs zVEf6tAN=9V*PcFGeC?B;`KjsN`+Fhwv2`rZ-n}~gXFvQs&)!~q@Y8*7fDYsxt^gu2a)&A=uw$P9M`~~Z^G$Rcpl%ex zNq4-y-)qz3uo5;ajXBg+C-1A(qSm=}U(@i$!^7)Wn?)j1XaGh+Ef@=2uA59PfdK~+ z;Z3vv(BL;cO85aeG4t-wm_th`Cs93UU}hQ~9=xLUJ#Vp{4*l}s;i_*B`>FQjyqRfk zmBT1}tZPNtbJ^|MK-dF;cJ3o4Y-e;7uw#NV9RK;o2;`2XyF1w&`fOMaq@4*JAp8V$ zfFi~Y?w~Ht+9?S82xal6|9ur21M!s-a!GxfHU0D2ZA$6pc!;g zTUTeaxEyYci{;7Ud`wRs#kt1^`_1ijy0cu*eNLRu){9PhaVY2Ov>Lc`bEQ(+#Z;!| zOO9z7JRtP8DSFt1qV?!#eD2PY6W>`bLyA{r?z6KX03s>O-QAZVUS@tUZ+=@(UtK=& z!tIlW_h}ye2mqFXXRYn$Px@x1Im^kNo&|edmw;(l7YzeD4;G%NO7GpY*c+>_77>KjwG*>L2`v z-}u8{`7hV+diL<@gI*MuXy>y1uJ_T8ZSyaD@6jLmg4Mg9y8o;GD1~L-@8Zjk(jWNQ z(_j3%`pbU0{7BPSydp?owgMxJ;@)i@oD}e%=!QT6Q9%&_P_Y1MB%?MW zq5v?g8d7oxw1TpN61G6n7q*Y&+QDBjxP-_3FuV^2)SDpWiyJKd{@v`#P;wJidDQB9k)TentG>DA2+F#usn;fd4r`=5XRGf%(sC;y~(Ue5L2yWjRzU-tI`7PsDg z@A8LUn&Ee!Ie+xxE1i-!Gb1`|o!f4+GJb@sC;!YB;~#(j{cruI5sL;|V88s0|3kgA z?tkE~L!Que@*$ZRYF#F2fbLXN64b5{iOCS5GZYX<%B)89a)+G7$~-B3_%r8e8SX#0 z-+MkkIoq}AwFeijl9w#pf~VGq(JBZUM9{m%NbsgA4gxiA3ET*zc-(`;2{8{^T*!2G zA|MI`aD|&bGFoMN=ETrhd$6?UMAI1W8uaerE-CV2oeZTcNPbX>&%11O)VlV zw5-%3P<_`tgch1$5cjzi2!n3jd24}0loaw-HAaFt6wIV=@?{(VfwJPTM%)2}VPVDd z2-m6tQ9&mXIJqeejMf~H2w-@VNUHOUA+iAGXwZ?+0PP5oWm9J|WzR#jv(v@tQ9f*{ zMrxhtmV+v2norc4v;k16V9&-9$^QI@A34!)f4b8BdJU% z8*R6FouCh4M+m3L&r_Y+Wr(Y{c2SX6w6r>%W5cfeDt;tfBW5AN8kGI{!hX2(Y=!>Lma}xm)m}ln7mRQQ<{NS~M-GE#2kx#^zcDf8$Bz@ltDV=Gqsky%W++I;0 zOcF|EbY($PYE8i)@s&vfH9>^zOPyyQ7eP$s*7&I3Tb(buJ=)E4LLB(&(RQj~IV6*! z1xrpX0jjJ@S>R9u00%{NWdy*49fsM70Kf$>gC~l{1_RWQZh{sC6cB=Fd^DGnWjwz# z9Co_hOq`Z|o&>C!#E56N3?^7XBupUTRHl9Bl84pVG1CAG z5C{QHTN>014TvGJ)oQ{?95!sqltRCEwjKr%;klM=^*qYp^8D51)d6=;7Q)zH>`z81 zLUqrHOqnS08vNR$O>;bXN62GSS!ci4+uSrQ1&y1}<|Kgj5MJt5FiSlQC7&AP@ML#0A%pM z-VGIE&<;J}ywUx`eYtn*WKsOm?PwSgTelY4aELxCf*_;qTG(hiUaXb%l@GiQOy?(0 zj7JNH&%4@L7voYT>OAS*WFg!UsFgX!jNV&B+`aNJKYgC>F6pIRJqiHYkG)P{|A;4L zGB>4dL5w2OL{R|;1P*v}ZUCeRB5FWt#V*?6?(Ox5ot`~x6S_KCtu!K6DX(u1V+b-x z-TT~Ij$$qhC$_mYRhBHU3XcvC1QuuqD@?>mul0`MumFjW2367oF#tC%T{jS9xS3pC z?d5oQ`gER`>Eq%i!ti?YIRw* zy@z4QmzR^cTXIv-t=n%cVD^HrKyMV_j>r8$2o1C#I6)0Gnq!pSDkwn|lVAW8BwfG? zg*XtPLf)L{y54r9IxNht7CkhwNN`G9t(ooFvm+aZy1QHst4aBltILyxjJ$YZbLs9& z8kIGnlQTG4D8kTP(A3BPle4272=}*jmHGBMR;AY;Y&OgZx?~ZSq7xzR>nuaKd%V82 zPLB>-nTJEd;bQ;lrX2}#KB7=AcE;WA-Wv&|>b>&Lr@8RT;fc*n93VKsot&D1#03zb zIT{cN00u!T=l}`)rt~cikhZjnTD%X{wj71!2z6t_U{SI*Rna3#)1A%`X~33=mLG^!TT9`ed4j(V73MnvlFFd@$6cscB*vMqYDTB7Z@#gC2`Ui7M?ZVw?a03MeoicS)^ zQdqRPgc!u7v-w^i?p2fILR}Vcr`AX2L$^hMbr^sKA{%<>64Z?xGeL<$h#cm?v1;(% zf}r<-qDjZRR_zHix29RYj+P18Z+xySR5pE6NFd zkU?3gw2)VFp5@`LZTE-$)U>HHffKb7gOl*Vf?#nqPeU5sb?@FXgcmL!zW&gsKIhp_ z&z5(NR&QKPO-r3ZwfQYio<6l&E>a%FBgeb9(;~(P^G@452Jr!al;RQ#+JbunGZ27~ zF;-N<;3xqE1P1jt2ON6IK&I~QpV0t}M z6FNem1~5?vD3Mn+4~wIiV{F#Dz#Exbw^)LyAp|nFI0((XS91;obfSzj}R?>?1$PY z3o0mpmbaec4`o@nJ4GS@d#6NkgqA$eUO|CG)LQ~6(19gT9UuXqUNUkcg98y%95Ddy z3NV}yg}TZ$5sd?C2~rx3Mo-;a9ws}?hpoEL?g%Nt2;RW1BqAJjf}xBtIA8**rie*g zfk2pQ1vm|ftV3K4!WslxqN9Z|b{n~GPL`_$kFS@je(>9O&ds+!^uopIYV~n%d*Y?d z_6L9X)x~;z*VF4khJ7*B_Qs*n+?LB6*>na*Y_BebbMFFV1QlzIqcl=FIO28gXh4EB z0yQ`?;v7A|p~OG|jc`I#Y7j>OFrE1j{Q${PQ;MS0%OY}B38b?w!AXO@CVUQES*5R{90E@_~HhBXO5J1gl&bgLS zdU)HtlhpCjosvka=Yq&xvwiqP~Et5LY(0Wj@NVfnP3bk z;O<2Jcpv#j85t1V+$$04VBElOyc|I8)K!^aE9MG_ik`ahl9qcGH zRbAX2&tfb_s)a05*lspFksf)NoOlT@PRF;O1KgZ&6J!#oRODm)2qtQ+vl_*B> zNx_d%KkA7j;U5 za}gvlQZ$Fa8)6>Kh;%}8r|Ss7#~dB1s^BCh4(%{vNL2-61mGeIShX_9;?{C_w12=M z$Gp_qwskIZE7gzI;qKXJ7T1D8eED#{Q|<1H5$=50gxz7g8spoaIxP}ke(`<~EEimw z#~M9p>B=U6t6>#U1!!PETr5**jn#=p(y2v?E`SQOfr$YERLG13o)HQU9;Y@T0s_Fj zfoO#7zzipl-~9C>umdt+P!4O;T?0{0*Rn8XNu;GrwX&l@0x6*IjG>V%vg$NdxGF@~ zv?`-n^WwAlLtQN0qx3#%-o?6S1)}p3k9;HxiwJg>rM>6!i9$dGj z5>XExCOAU@BzS`uOx+itnXVVV<7VF21*Cw#=}M&l3t;%rsX2igMn@rMj6^WsgGDQd zoFhetft}105HLtvixEkd)vEvp6`HTc@dzSrMPjfZ)>>$NYB~De6Jm)xuGWbbikc}z zBJ_yV7ffuSt(14E@gYDOkwigh7zrIPz+j9FV&r}k3KCF(;Gkv*c}%IbMj&$cafn2< zdLZwX!Vr6z4f{LC>mkLRP3~cmRyXs47cJUh?~AB341VZ=)vA$r3~o`;II_nWdg;gwW_rq91Hg@U0d%xM8`yi4(beYcPtlPN(g`%D5(*`Gy^0g9Wx@a zp@)85oH29-K)?h}F$F2DD0OZK0isqpSRO+)?X*rPgGT#f6TU;DV^0>8$bp#2B_s~&l5`G?9(q!y0kL)$ zA_F-n36TwvYBR7}qk++Y0SE>#BJ*sa%@aIuB6o`J+JOKOh&S!=Q2KI|r*9n{s&02> zHQ+ps#j*FDgw@ETGlEgKt~Rh#>Q=jjIaBIhNi%sjpu-6?G%4mIJZcS&J_HU~wd;JS zZB|fx%ki2eOdk6*=QON`VTKu6L{8ovcG>$hHFJbSM8vJ{FTC|#U#vpc#Ui!|8$Bcm z)xu#aG{lv#_TE*gN8)apX<4k%a>>5uS;->+H0le3Dttk?pa$+@1OYS94CBIVlBRQB z#XdO&z->&dY0w=nJla_1wrZFHc#N+FM}BX0q_gj>K6!p}l;!?zs`EUs952UqfI{;z zrk%Hf7U02H;vg)6*|g8FNZp{b3)%oPurY|yTkmYJ4DNtI25R00BXFBui7GmJ^EM`4oh&OnZ03Btti9eo8qZe43{usRF@XdWR;_@RvH(-0 zKKB+hxLarg$Lra8xOV~_-+J39GWVGxaU+W^>a_(kU9H?HLlGRx3c9}HD8q@NkkL@k z9Kpa2mFxDO2$~WckyKeAf}$L-n;ns$y!1K|&7{w)*Wh$0Wf+FuT4sM_UN$WaZUR$s zhg{dPpr#awRMN7V;cCai$Ra&M3Y@Gv4I>>RPT-wwpfc}mc@&P1P6x6&d#8CYD9dR| z_sijxhgXsZX%32^8!}04RV0I2YlsrXwZjWM0#3t-eYG*>^X0H@ZM!+l%~x5Pl5kUq zHx~{vdMyy3ziA3~Gp!D(-UQ_CAqFx45J-WFIf>04GX$6#07@d(i-NfW0&1ot0>9}i zH7IG$W34I~M2cxdY#}>lv`Ud33^jP8IJgVu;>l5kBC&T;Q8Y~?&0PlBPujFUb7wd@ zTJLs^g<{9f=6PzRdko%Zex&Wza`dVPDCd_jrNJnsR5D&%*k6E2l1O+cQ8ji-PU+pyR zFD3$>K0ZG^rp%fqgco9z@6`)vjmzOgSboa?64N@;XMe3^D2IAg;;6MZdUfS)X+T6O|eR6p;q^m~?r2Aiw}7pdk!|;NE};HW+}84uC|+ znQqMf0?=h3ve>=Tjd1yOd8gBjy%RzRLo*#rW}TZ>SFXi&hdIm%=sf`XU;gWjIH?)Y zEJ!^noTPX5K5Q81AM5negwY9N8AdNY%p z%_$iyDmPSSCbP;(iYBHR`%;f$mZdO)HSA-C9cXa&>{Ld83@9==pIR&hn#6)lI$J>S7_c z@1_Mu2tT;mUe0}`0)YngrnAPQfO!BZ04RYJ9(~jZ(ZYg&52eL zm+RFl4==LF6Sq$8KbjuCe#t{m`J|cwQ}XQ5&FpcvL8;ITCgIO3U`O##;{X>rl15EaAPh> zFbcEis!cZM7i|HvC}WW?w0o;Gi`XCylm z4O*~VC4}ttm1=d{Qs|Z^+bKqFG&mJ3~H_5i^vKmq%ep=-6>OQw4(;NNM<5yPTeHCW2j{o88A#-MRlI#=*T3d z**bvlB9AdW@^2f<>9rV^LlY9%`w(ss7YO*CB|jE8xUs5V62 zL&qj9XUh5wNb1?3go2*|dH%#@nl`wRTR9Ugwe) zBWZN1t;o2<7>0-YN3U(#>3Vf5$I0e>ZJC3xFlBXZZNAhpct}GkRmr6@*jwn)1&S_3 zdlF;8eh+4LsxgW+cBcr{>+s1PH-HctKnxh9lak{@<~u3EL8y&HoCMvjKT{w^YwCmu zX;L!Uer678F4;yME1GiWMtq|~2SDHg(AnK*O-T|Fv8x$*R?*zL(KXeJ!2rx)0#>1w zb)9@Z22G$=`zWLdR0-r@fJoS_P$8@bIXlV^c87gaRD{%)d08ggmdRkxou4lj;fG&) za3`PKJ(1V;WwV{T$%0jKQdQwrnrNj+trBNJDXJascjO3tExX&HQU1^aBGS5?(Jw@7A?sT9ql!h1pRqLszIdoP7 zImC!Fo9Wf2u0@uod~10!MB3Zdo7`HA>vg=^*E-F2&yE@X>cvG>IZ0#`4^tH;rs4A9 zFbw^zPv1H}i%jA8WW7F3quJFQW;ioPrrv!!*BLZqY>lh+h7df&}+$noi0 zXPD>vS33ks0RnV*2Ld@!AcD5;5(b9@Ko<(!Q4Eza9MF?zMF?~=#tG_#py-{59FeYh zUF<-F2lS2z(3>SIfCbV4xH@qM0y+flaQ8qX4YhY6RO$;wBPc-tzzvyDvooFEd2Rp> zjG=%R)@K2^2-M&J;GxDUWtE~^EUN3#)$?Tg+HevhqEm;$17+3iJcCFCvPvlqj=nAtMK(yQ$LM5c<+u{@&_8Sn3>>7X${Ql6(q$iF$OM$%vPjn~UZ>?X331GK}$b71vQN_R0h1L(hpD$Summ_UvXrJ5s%><)#PPF8ttILxyU;Z3~h!OswbIS@e=jd88G{AR}Cf|18UQ&gJW zNen75_M{oUZv&!66UPK(0va>{7J&xn?0hyvy7T07r2q`T*9bMk_Rcq6xq!`8)>(L@ z=~A(7V_el~50%9_x(Vk3_0mMdowYUWH$LXjfEC;#HmYY~LD8I?@Td(Tgg}f2XNr8-&)xOI-}(dw`{55hXbnRc=4Lb%S;%U&%F*_%)RONV zOInYyYJ~yv#?^kEWSR5J)1$Jn42g?DXLEpvfCdOUAi@!4Uzi1O!gU{Jg}8+(oE$<9 zkOKxpf|5~{qce#yTyB&*!h%tBb8t#JAL?>3e)v1?^|}4P5B%7nOfe3vIiLVN#)9+5 zotJ?O*kg*njzH8w(R;&VO9*e89W!8Ws@xsly?1hadbxc#nlwS1AQ4bF!v$0baI6Rw z%{`}azu8T5Jv&=Ju|5gQI!*TagY8j{<6&>Hr;;z5p9+-87aKs294Mp9+c896{53Iqm}h+Sud zfzH;WPGxpK%n0xg)uX;X&P2Fq3ls$=AVX`&3EI#J0`CawK91VT2m<1qCfY|Z3sm6> zFicb|M>GYgAQ`m=Ks|9Z%s?WilUvUbf#8l9K+x8SL;!-5qmMDxyukhvl{M!)J!~fR z*69k(8im5v9yJ~$3PhoqC4|!ig*+@fvb2bO=mLqHR0xkYF3_Cg{e2Uw_fAeWu2-7_ zbsu8VR#a9?X@{$MWA^T+*PZd>FCTL9TSs|TKg@l#i1!~%)1fTK1;`2Z#1m_+{_4f< zD6P8ho#}j7NyNc0H7nCRbZsmIx>=g=-m*yPXzuZ`OfEtititon5A}w9VFU$5!oc#d zl-oz)^l^S|r#|bu-gR4)zx{i@XLWq?wzt0ZjmwAIH#S2W(ZRWxE_*F8 zM{_thMl>ZUQ_T{astM;Ai)AcoZcS3uIx7=F9M^6m1eEMrDaTf(ad{q6eeHukmKL|3 ze(K(X{U+An0uiXAH^kt|0)?wOLlA4-A3Qw!Tk8_dn^sB*q+}w4 zXsrxauVkVMaA$R8i@Ukyg?-o)r@NvrUv48Z2bT{KQ4&CN_T3eV)^V9e*yJKafD5>z z83YN~8M3;q2z!7D&P>(-!0Bd>VIW$DCZEK6wTztIRl-;GD-6=#1PqZmJ zDT9gb_9Y-k-Iuwa9p%n`xY*j91_snz;?hbp*{YuAVZAsuc{vNs>eP>tCuk&%&38qy8(!linRjDZ?@n7 z_zWc=6WrfS?i^4DWzQuCDcjnPLY|H8-=C&xtBf#4KkQGBmxJ-Qeb4t|Tzv7b|Mkn0 z(>h(uom)X-I0tLKT&JnhG*7pVQ`PS7ZiXhEceyXIBv?@;RhHyhiQy`UkXA~}(E)%+ zf#A-Or5&wref3v<)wh1@H$2=f78pw?aUgU+5dxEdTse}0*x7W~Ek5_`+3|o6zP|51 z4Iu{_#t2DLnzCxsF3W|7?dD)paSq)hhJ;$1m3I4Ny(x6H-;XlhTc-V7?_adLx8&|R z-!E<26;;neLI}MYamX1}AtR*fJVVt0rA)``6}jy;nmNvH>onY2#i?UgG!cgYcPNPA z3I46ML%$(%a-IP0S-&;Tbf!Bcf&;Qv!|M&m@U-j+Z`VGVCUWzi69XjEJ zm=@-T_3^!#kA(Me9%bpS^x)yH`+;1{Jq@Z1Z$(J=zzvH$ZmrE|(CFk8sd;lSprTT&&Lwo$cf9@97-{?JHVza8)1>Yk z0VfCmx(-`!MxWk<-#9md$o9ojUKu)O23dq_gsUcps#M|8>GamKAdnC#WGOZ&3AG9l z=LqVt>9uK50gi$oTe;NcoCY`%#HqmLCO=}3d2MuZ6xTUk9?C+ZCEs4P+S|efKx2f8 z5NUZHr^`Akr$uiXy(+U9>7$GCw%bSPXz}B(yqbKuIDwg7ZF&eGMeI1fH=_E3iwO|{ z(Yc7HJPKy)>vVh+SIb=I)-4PoEdAoLS8Iy_)w<3Uv-D<>yuBGL5r7V-4|Tl(fXBN? z0+M+kY#dzzMJi60@2OfB=sG{PfTK zIsf+m_}cTcqlb?i*a84ffeQe@2+HvP@;KbQGJtgY%-O|@4*152>)u+&!q92IG6;Ou&EI@P1q&v9T z(QzJ9sH*MITsWywOpTjXu{L|W?p$;<;c%GSA`ZOB(dOll9sqMdjK3aAcO6N#WtPA$ zZ<@3`{^{|JM&F0xy4k5t6d~pXh*0-LTEOfs9_lit;DD<$u|#Pbb=X|43%i0?W`&^z zI1p7;l}LCg2>=1?T&@LB7}OY0*Bh>^uZL>_m>?@W6XhQ&$a8Rum7;+Ns zYEg?SDF)x~>)A+)qm^n)E=KM0^|sylV&r9#A#*wk4<7AbdpL~)=aI+gOIk`|ZK|$0 zMTNZZV7u8FDS|W#@Byl75O+!0T`dG5q9_bQ6fimSW7PR{LvaQi2mpZuKtp8WW*$|* ztt$s*Cu)ff{P3#ukfYiMUwrA_Q}5vPmS>)M_8ss2@K5-JkN${{`k0UW*!KVzAN5f` z_1}EUfB5K+{)A8ZX+Q5*e$np+G#@=l@+5EpERN3K4on~RQ6GtTe&_A)eEWNT5-0=w zF`w{>Kn?Tyt?&MX=RWN1AMwujzU^J_e(uBH_3U%+0tTY^$_p<6C>owRI=^$5Bn-1z zZMtt-XLA4|!DN51eY8YeybhTCu-T_q(<4jq`EB&PIr!1JKeo;r30}Cl{Bh0 zQrAuv`)J+>s>lKu8UQp$awr(oKmyLq^E%H4h5?ra^Y4BO4NNQde1a$FpR zrX(sLcACZL$8ViO_+lWgQ9;(!qDF zC!fo{v?h9#SEkJe3Zb`26soLMbsfTLz1%s-t;_%8VmvhxgIvB!0)2hl$ z&P_p41O!-10bU?VlPTD_XKQ7-l&7Ct*PuH^DJTc`#>>!Los)t{G!!e^e3{JynxiPQ zLCt2ZR>8p=lwbfU!Iip4xRbkk^O-uxArlb1d3IKAQ>WC!0^TO=4a*3StTVeib9EXx ztZqH`KmL|q_ufzZsekg1|Jl#_jGuS!*<0`Z=#T%KfA=4J=eK^(@B8CldMLZ!{|El? zH-FvN0Qi|d^E3bBkG}By3qSgMf7h3s+`9Mf4}Zts`5S-vo$vY7`RXO-#g2ul8Hdaf zfCRdCdkut>6yDgE?Orw1NVHt9&K7cVl#h?|-J^JXytsF?IF4!7LKHz1<4B!+)@B}h zPb=Oxv(nW>#@3x?r=xLLj$wz2EW2zVv_jy?^3Qee$P%n(eQ??LYjxPx|Dq1MqLZ z;TwMXCwyG#ANk`izVyQTe+0*Y z^1RJ(-h)WeI- zR7@kR00L74M5IO&*MaUF533M2N?;+L`;55(L6WnJHrSX~?yVgR1IVv)h;9yr3&9=N z9l(kYu{Z);+yck|=uHU{rVSv(0BB?gb5n>jnA|}tiGn&~WKt)z-AdNb=Cfs{^II#) z-3&QLc5+Yyj9{&gaTRlaV>=P)$ypu;5+)j?HBU}(Q1@0KjTE9wgT@(f@&L}UW*J+? ztW7evxiJh15E9VTH3~sg#k*+&3p=xq?rZMOjLrZEhvs$HJ0%J5fbNYG7olw_5@_Ub zd>o&>yXK+KU2CmGU4rebu7>f+Cl)<-vsiVxg z31&KlW-Qcc93ppw*?dt$SS>NX@RL6LV@qk@_oLsLlKhje{F?va^S|IdAOA65@_YX0 z=kA@o^xEt1`G}AH{eS3B0Qg5=_0?bg7yrV?{*?EA`Jeuyf8o#l$p@RupY<8P;C(;x z-S^)4lh1QLK0bQlXgFHrVO)VSscp9fU`dWZJZtA6^?q5r)~+*Ne=xuBX#3jB`>EIc zp&z`GGkF_&n-llM9JsrCb9Es;j4cz;<194qgKxJDBwTe6TEqp3L)2Pu864ioTT{Wc z)NEBQz`m5-`(+65C!7oFb4+8I#8@oXC;w7 zw_1uCm=(nbb9CDrO`+61E;~;vY5sd`kW@9k$*msZpNDM%7xB~*B z5#pQzn6O${aMOB?ki~}5a@L)2w<;b_ze1FK752`FZJ7)mmyEz2% zRU8ldN@i!P)mEDx;GwxmT#Z`xZKkw9DlMRV zE_MgqPb{2B=E5;S)ud7tAVS;$Dx@MHz!kvb^k{Zf#N;Ww`r;*8t&KT#-;*(~K=QVa z__}}f_s3iR#&-w6_PdvUH+Kp1yPXum07)dHCq%?d|9O(C`0}cfaSOe)#>b zz3me|ULU-AethfCeEDDd@;~>-06h8ZN8DNt^Zrn^MI>}?(c#m}k2W+8fQ82HVImuB z*G-l~Cl-T^g_ZiY&9O`9+BpQ_xzQ#l7tBJ!-m5`qDnxl?FWqR+43SenPa0}gE-us+ z012fg)k>)zL?lPRW8vBgt)#1WcH%(9QtB3*r5e1|P{>y?Erk!egSpnwGyBkn&}SsJ znb}G`IvOK*+a_wHWK$u@L>5aT1lV^@C}VaZr<%rbd8vSlR;j6 z^$i62OMmSzfAJT6;bZpwhHIpo+ABCdY3&t!2=a{xzzW#i^cUA?TL3^pt*3`n@XE6qKR<5#VH=tO zFm=QrnNXdA_o+K8W&yf^m}fM0Q?(xM+#aRll}EeezK6tsTkC-WNNI+XdKv~um`Y{# zp2GZy5Hv5*d%w6uN)WJ?rqP%gXz+-~aU7dc zCXuWVi2<19=v1@B*Y0Zr?i|UXwcXUE6A4b&LtOI1`(?kM$8lU_5Y4s1kvx%>8km!# zIW!Yb9T2d3g+{R7Ea8k^Y2LJ3XT#B1e(jB^6de}KiWXT^CvAg^a{~lF5kwFb%l760 z4i-8T6}M;4Pi^6^-@iP`>z$!#xwl$RUAGqp^=OzmQJejC&PsGK%?uq_^yUsWd?+A* z0!(Dy8PTACyQEYPWq zcMU$!sEuZsJ;1AW2`gek1Sl{~I>C`cfDGQ7Tdvp(1Q0+O+@J)joYuWMb1U58nlzd; zGh%Jcht56YJ&>sT<4XNEAFAVVFmp%sA~K3upxd|KzU?X@uv4_sW#KxL1g%OU zW-yf7$KycxqD}5}vXl>p92$RD$`NQ3vgkDvZGc<5{AO@6CoTOtrE zl9I840B{ItF~0Wv^T7Vs{np=oest%xhp&!la5#(*9gU2eyGT`yf;z=z&UAW^o$lM+ zqprx)G`UD{c*9lE#e!}xR{OH2Fmy)}Z}4eGU@cQ$h&=uFxBt;U@ux0ce&6|1AJ(S% zY?*k0&1BQgg_RxsW@8h`XAOfaMv9cpbrG>IR76)2`vDN0d?rXD0rz>Di%X2U5TUSe ztqMe_vuFcH?pD>A0Y+4)z?EXdRy;)vhPgQfQb3ftGzFXX6}d@rM{fo0eKF=Jm|LqV zc?=`Lc2-8uo;j-?0J6C^!3rpFvKU+em@@>}?J%S!BC3)Zf&I|hgNwGxoK|sH>TnoZ zZtQpyb|XDffCMx!!N6Lp3PpD_LKHf=`xdwBAi)GjL}ux#?AEKeS}bIHa6`xN+HUka3xo1*{x9ql#{nDNFI012LwfBp{i>@1xDmkv&8Y%(Ne=y z9fwDlr*i9wm1}?HVi$wlI$06f)S5Q9v#Le`3skRdvH_}qKp9YCZH0tc)#DXmd?~B1T?`G$kU{jut>#BWIz+*?eva z$(f*l`WD`1JswkzwyoGqwa&WWWYC+-UcgFzP5faZGwe%^gDfahHZvr5&f^gQ4hX>v zaGy{X6pxM;`)MyC7^uyCo_lLP_iB4G)`15L!Kw95-OW3j&)$iN1`e)$@=n1@^}6pN z^cK4ppPM5O%V2W{D|!TVaDxZ#(yVr}fM^xP=Qva8+F{I*2;Q1X2t+ZM%`t}F0T|E$ z?m%l;$y~!ytC2uDTC+}1-d+XJcB=b5hTv%_vf}+-1Dr@?pjLEO=U@z;1GB@u3!?y` zqZu%u6QCf%%*>_~M-B)@XlOI>U{R#F3k0Oyi|x;EKWWXiO^72n!37f0BQO8}Nyy7_ z5z``dlCBxj(E|Wr01b$NAn1x1@2+o8D7|-zv3KghAxsVg;URPHJ)|ez@?kM_ZF5Tb zP)jKVV2SPsodKe2->yDLfPsbTD8r=Idj$_53Q+S9(PtPCvh(aV*Tyjnl4_w4IzX+P zQzD(v-G&glD5JTBZd2E2q=OFAKV6C~v1wY+AS= zqc(Qb{?*dBxQ%e^hO!7e`t1QH%Ubl>84{tWhj&_ z(MZyo;!VXoGBoaCwO%U_3F591-T@^F*Q?dh>1ygN+Zd8k zka{S~6C;>Fz@g0cDGj<#2AOwxN zXfz429<3IO0F%_TsG14PY-Ab8w@tYxbR$s{$sVjnpa249)CvfeKn2`bh9geQT?%0&=}dE4A|pq(FFrB zloU!>uVPhfw{vpwY*|r-gF@LbNgFgVTQ!4=kh?}pHbT0R(Z&O zZk`_=E>H&~Wdb$n)(Wct;?l3vUI6TXKsyP~Dj2Y)9zu@-Z^0R+2vEzC zluT&8*q2rS0;ae;ee#JXsP`9MdDP2&AOH-6)7$H1T0DH|!Nl#}6Hm+s?COpX$0eA= z6^AyREe64|#*!$`JZ~OS;5iRzHk%cWwu~d7W|R_Iwc<TAeK2(r)q(hKm}UGN>Bx^h-{6r^m*0;dT0)pIB0D&TVJmwS=zSC7{@H5Y3rojf7|Bnw{qO6sy9|va&XLOYPc$Ndx_;DUzR?Ik6EmgrZ_m7 z>Vmm-G%%|hL7ci66A`r_nX4j4?>@Ii6iqD<)~Dl0{`z)nH45N^+*)<%i=7qbV72XM zo!vPt&YSl*lMYm^CgHe9`&}V#6v)JFZjrd^Ozh1=5;pe%0N~^Z6pCv=aLm@Nb~lgN zL*s+aB;KvV8-qA-=~D`Uf4p@60jJBoaLkSYdP%{X065fZBB; z?+jGX0L;JubWn#oNZ&M-r4BdH08~H;Y;d3ps59a)uuD&lSvUp+A3TD*mYL&l=jnSX z$?2V^ZC5_}r+m!oyGQeb%air(v*(_;b^EF1dbodolk@Vqk9aos#mleVAI4#1S)Iu` zAJzHrXn%;DjuxxVH8|~yb;J209}rrpCn*4+HaNGtX9! zj%ATfFZU0_kkGu$Z7NMD()#?#WTTC$Gcxmd5^by7Y2V!w3&nMrwj3EQKp{X4Sw=)f zgObBy%&Ie*LWoG5BbT`VNR}HH0s{jG>MHJt2-P6~Q-@KFRZCptJIm-j)>@QRTm+(G zB1yQt_HdfLEy7Z+4`*qj&;}>M*wAirTLW0Yie2R8zJPgNGGjTW-goods=7y)#$Z5z z3CKVLhyWp|!U3>cmmD1k_;27%5~lzaU_;L&B%6=-SaQJ@YJ&(_F>PQmTv#@Yrb|p z9^Jcj=W72@Ern(my`4mfnao@pY;J*b;Hk`EU;5Ef5))!1n1Q*uqjt`T-Bd4&E`&{E z^=Tbx@@!3I0h!=IiJ4*m!Hbeaibfi5D!yXK1UilBB*e46ILUMfe=TG5)G(V71@vTsB?IAyX(}STIL?8bVRr$ zZ|q;3K$%KftH+#nwr65Jm;0kgL%K3bQn3SH!L0d$J!A$#qz$c=77B4}S1R0Xn^PtCe}T-`%^n zySUta+c$nE1>Ak+Ue>FB|L@+vSRdU!KIbr8Zue!zh*{R@Nng#aXe&7$9qPUVhgNt} zb>|==$jO)*m?tSgmsJFifj4Ti2l4S?z!xm=g~Y+>Kr*b90rKG2N1*=QDkc0Ns!pDM!6vi0Lduy#xBOfyooNnEDn~}nV8T&d3 zC~=%Tg67PzSQ94)44RPuR_p|ccd(`^q%EEwo3tpbzJJG#fUA_TGULD1e_74w>b z^S;z&%A4J8d+?NPl}0AndujV9IK*MGSfdo6nIjBL7p;}z8LDo>m{)?`WO>YE4x6bQ z4!Rtoxr1mBBTpouJGfhIEyhSgBsB*Bu!tQF4Hm~0QxY$S*_yU-F-F0Di{-M>%#Wt2 z38Zlt5YUC>I7v01+}g&QAh9=SH=He2<2s(zpTX#uBx zc~KfU1raAYIe!b3fEE%1v6hx4x|lY17?A(~3u#kQ0f59nK^>i)8f+}dl0qSaX-Pnn z6itl@3U>lsmx~PKjT{`}tk#*17DzNyRgi#mnsvRBTIDcR2|$D?VEt^J8p-~!LzkI7 z8Jf@HTre=~#!I9*2^z;-cRLK@aOXJAvsq)$TB^_6kW(ulhTbIW=(t7z41hi+!eaP; z48D0L1(E}TY7oE$uux_isRaJaaf z6cQy0w8O0hL5`!Dnc`#}FE(vP@OeKDGG>XAjarP6h{|4zTL|41t?90m^YyLe3ThZ5 zwwq#&WF@oB?LzxPGLb^7xv#b<34mvt}#sMNj%PK}-L2DoeZUhTW1~diXrYQmd?r=g>m|QopL}3wd zIFPGP>nPfaAW{^!a)1n#(o*+3w!!Y5FUCNZmyJN2S-rY)5ZWB-(8V)GA_ZUV$~wj6 zQQBJ z%sP;t-b(1QZ|z8EG33MCJBQgVQ0ta+4z+gg!33evD57kw5TM?uH;K{OEMZXe03bje ztQZ2iP~Z>-4o7KOTkqPVhqMT0WWDFu4Iv85x-$kvci4?X2>{3cR}j!~y*K?QTp<7m zgzg9cvXJ#Y0|Dsn-3?7+;;A^nLlw_8QraH&rpPfiu3V|QMWPNcSW#mZ*WTHJF{RmU z7z8$i(5#U9j9N*@8MBn`vFok%>B+6QoxGN**1lC|>e^9sTBTK9qZCxKg-{~yy-h|b zBBy~v5Q+$s`w-wW$gE4|h-Bf=IJga+`yep|u9)hs(GU}`8aWNvPs*J@v&I;@N01OX zfzhao5}Q-6%}ArAVc{W=RWu6(XG%Os>~mEOJY?iHO?16I2W_ zMGDcic@VW0AqUsN)g@A8j#X9SQhe_PMK}<|K|lqv!vPhTL2k}aF)PCm(;&M;X@zgy z4hzbcQ|*MKC`vw?GSPOL)#B+|YPFOB;_Y^3gkdFR=Uod8tY(8GcAdNfQBW9S5QY{) zREm-M5YJ+CZVxxDH7MrOafHO}Zu@_+_GY`XB*&TVXKv;(dm!>OTGck9DpZ z5JYmXAqF?|{{U(f7Pe}GEQtLfFB0LA@C%RM#`JJaA_5na7+j9?kAq=Ce@8X}f&!3Z zW!9tw1H%=whHrMIqAg}~U;R9E&*1?lJRCtL7=a}M+^i5H$Qf&8B6Az1EkyRKu5OXe zW9zTctN1uSKIWVi9#gbd889~AYnjSS0-t?WvMfBdrK;K_X>w|u>U|TV9Lo9#?U{p6 z!+iQ#FK)_-qN=ocDA33Vx7hS?U8V$*&5>8Z zR(^HrDzg^bx>zM6?6E)FQuT2|v>X+dir#5C$^%m<^OjUfsVy;%({|%nw_R0fZf=2< zC8n7Bh%=^JSXN=!pmoRo^vD18Mm?M1aaFD(c@DqU(=UcBG>+P1J-DLi+m=>&YFpAhPH?NG^_Q)m==?aB&Gu#g_HpLmpI)}U^5?&vim3aRteHPQFSE{xzkg1j z>U;ml>Q_CUR+`@KY$MrRm%Clb8l=%rrI%t~Dw%dZJ$A48@j0h8ILsEzER}6EIw4L7 z5dS!iUw(CUH_uAIFhJ-BY556=wd*`t9D}5)wr#smTou6;#I?jWj?av60f4^Wv}}Bb zObl=UFi=N>rE?~0VAhY%YD;ZlpTk3=`6^w#JBo2uTDh-#=q$VQTFf3VdrexV%*@D< z?yD7J%?-}W-77kkgvYde`<%ylzC3MfghQL~Z}@f`O2r~e6bi}0LB*0#=()`mvs$vMly zm1pH1aT3n#t8=B)E(+M-o|pk3Xei**><>#%Yk&RA=gUif?fXYwX}PnS=aH;I4!#}b z;s5f|-&022Lv=TNl%>t~vUi$~(`#J!)?z4iBz?sS5<&Nk= zj(EI0zkR;X)DL1N2cZ5tvY0trw)EU;%Pm83ax&R`OG^d>6bK9u5rN&uFoyzQ!_4f8 z^xPUG*N)#^HkkY_0v-Bte+fGb*zwb9=0}yAJ$m$gTaqGg5%|&4C-aPJUJ>3SPnlh| zKE+GtzM44zfMwHG93x%S^Y%DZ<2=pSd|QI|ynEPVd(vJ1-?z6&EvvAgnI%ft0CcGB zOQ39*4##n~`-aRy%S+pr?ZuWO?<#E>NdJc=&0v-35?i!{@or$a3zMOe&Y|w0M{V_D&&ap*U_4a@~7oP2> zKmE@VFAGQF%@cGcE;5N{>Vqv%H{Dqgj^>b?U1C`%;DD`>g+NZ9jKtcUkG`qTxA*b$ zZnJOgzV@vny-gq2`Q#D4p6zDHdz@!7Y&OYfo~pcFetLd+?%&?7x8q)x*o?QFo2PP5 zPX`PHg3bB3kK6w6x-UC_{iZoiEz``l*ql0tl){03To{B$W=i5$O7+CkVF$&&?H~2w z?i|oz!#*rlKZZTqdEhpnLqK5#n^}^u0T$<4ehTqh!s629;pCS`Qi=(H@Xh8$U8yC= zygIMFzx00h9y#zD7YW!9U$d3mhnv&`%obeNsUq{T_N(h*w6 zI4y@o=q%iGi_JAieWPOfR2JR|tj3|(jD!G(OA4%v6)(T?Zpf_dORRfPedaZTOnJHm zhidQMs>)0xnQL6J_Q$s0b#2C=U)TM*_sfjqo(*?9F16^-dy;Vsi%5YK*YUB&W<6)yx2SK& z*=%h-|MLF6mH+(n>pjLfMl-7c0b!BjGp#lI=bs*jbid{F*#x~`pF^Z=9*M+1hM*J4 zf!rba!o)NTkYr{E3v(DxC%a3Bo&x z)je9-`pdQ$VU1FWQAyfmh0mw$(JwNxL>Zm{5#$K(Ij5VA&rg-*wmrI;A9?KJ*2^B1 zP2}l*eLJFaSMvq}K&aEvmDa6@^}NrOedYd`^vxbO*S6R=?CDScw$1GQ<+RL$)i0r= z`X2KHu*ggl6W`(*S`CWxiRTYKD0*L|ftiM}4lBP{UhL5<1y{wspE>Hx<=MlQ&oO)q zmKYzy!d_l>insF!?>)lF3=hgGEToe^kK8n}c@*)~BkVu^Jg~XCr2sI_)7BULv^-(S zk>8k0qb2XqT@x5sK=QRd2ms^nAOyXW!VQL>fSWc{$o#+u=;v~&r04lm$cJtv^9`0Q;bBBJmj?*a09r_? zQ_WS^AnW?&W#8zBT{hOCoHPT-AxK)&P;Sx35CG62At3-jWG6K9tdkTAf z{kJQ4X{^yt4NDu*Gw+>#_q!kM^bu_G0=GKV9K#9;g+*DR0wr!-V(Iz1JZ5s#X&#P6 z*L~49dh~hT*Ca_D+haYgZ`q2Wdtk8js=i(4AZ#NSwz25*?U2~^?YY~(ADJT;R<>kf zMV6!U^|7yy_Se76_1SC8&(HHKe+9%B==VlZf(R(apgBXhkyuCKdoUzATt*lAD%zS5 z<|xCsL{>*6nL=lz-4!X2XNyjq-NtZFyrrZ)37Z=*f!O;z_f2@`X&Xfl}BS<|#G zON1(A)1X>Q*V2|oan~3%@2a)60!y$TH{PHD_NADB`F%GWLYQ;jv_Q}dz(M?m0D=E# zDkF?C5X`T8IxKJi0JuXjCO(nCn8j!;;KmFz5zvX7X~?MIt$hx>)yq@=d3`>!Mn>0V zw#stctkGKc>&`26s5I|Ssj1R%Ytt&Mt8u8j<}L1tcbb`)sygnw`g|;XR`bTcimR-5_jOWy{EE1Hg>Ysw81O9w}@2Q?8hK)q8#aidsf-xFq z_J`nzeYvjmb{gwRd(QmG*g9;-@!p7i@0NT?)puq|s-~q!5-2Ke`7R{X!-lh8p91MD|L1siS{oHuS%uq6q?Gq2u#>gCZ|>{)r=C$V?0 zCI9n81a0fem1B%Ed`)l|sn)U4U|5gM>{AMjd)OX+cJou#1Jx-xY{7k%=&_AFx@?4p zN7Oha2LpXM&E$rk_oa8eB|b7IBp{+&SDUjhwzFmAeU3ZF5P|n@J;GbByaR4%pf97* z#$Dc&iZjpWZFK|1sng4Dp{XQSk1Ds3>KtjCCC%q7qWjP^^UcXBV)c8RH9Y2w#m0=4(v^ss+UQ6oJymJ*>C&X~_T?Xg0#YRnUf(0(8W~~uss7Xrdi6y<|eU7jk znsZ#u>OGg&h?{F>HyyJ^*<&002Vqgs^AS}eY;HV37! z?_VfxjeV(0etcFV%~3%>1E%IYi^ta6VxPzO^O29GZ_6@rhO9X=lOO#TVb(k{o7o!E z(YJvZN2!W2$w^CA>p7c^>uT7T>ytP0n$}HPEI?svxaQbe@2k(zT4-rJwsmhU&pc-K z6@ARs+FK5L`Q={$QO0JBSw_&)st*ktJ$4D~LTh+s;j)Vv^r+HS@43C=w!e+DOD?im zjWMJDagXyvLv?3NT1; z(3h!C=-`mw@ANYW7-0OP{OI%npoq;2?5Nr4VmJXL!^|vO>`_D2%ZSaa1RYMt$Fx1J zzoxmsM_pYgNW4cdQj%Fk-zvqZxlUwC!$1ZDbH4cXGLV$hteXBT%J0w zS)R-GyxINj(nkN~rwxw({numnz3-jMAM`LKWy&3_G`*LubuN};xGXc9dzjrrX=T=a zdW0+*5`=;KI4(j~Bt&mBX_=?ix`vk_K8hha&pV`%|9EHqe@9Zma*NZOEaF%rHhGHjP8d z_irQNv9WC1V)3%KZZB6eGw)^w+rDlUT_}N|i{_+I$Ag_)ejU1ohD;EWSdrTRfdV-S z1bK9iCW71|&&l~&n~;NG!u(1P0EZREmnt*}!@v>)1^;)@51R7Mm8@_FAp`-}Bs+$P zW$<1a1J-SGvv7j}TgDo#Pg(Z?Qd;xp=bxf`2nl5Zk{@?&Zd#LJ6c_*|tYc<;AwW1b zl?_5Sh#z9M0)PdC9MY=FAMw-AFP-|2KOft=|MJI}rf=V}_tMz7 zFWoGUS2*+0R{?G7}aAn_^i1yvss$@ zAj+0)eaq7m+t9%@d+fbWJJG3gBi5~tp)rQcT%4sPSo-dk=bgjo$mv3{Kr(XVC;{un zNJ2`18G)VPnPtS*$v}dcR_ow$0=^2h7>F`n%4)aIA;0yVp|-E@g`VgiltbvZ&LIp1 zd4ltgBBTGv|40I}9p2ytPK<;H+_D-MPmjGX&GLl(Bprx|p^y9=&T7Fi_I+pX$J;R& zp8mZA)nvn1A+fKF>5Po@5XpC#Aqfn+SxOVS!ypa#$`8UJBkMY5?3+Cv{n?hcywA`1 zcva7S)|uJ*lSef>^X%@USn+ZvvjG<6SC}s0mGBgP)crYljADDb&JR$3ycqA@AA500 zY#PS}ek(mg-p)K9`~K4G!bYAwHqr+l~=Z z%?u9!LxTvXrwvLB2(fjJ;bk9T8}#OyR(T5OQK?jJYgbLIbDnc;^et52^cG}(j&sh{ z9pCJHA7=4*FaDG5m)D^w;U!PP++0t-ke!&4TK5MIi!um=QyVIZdP zX5He>GvpbdA1Bja&V7RM8&bIO4^z-Ve}4;CH6!=a&LGTva>nUeIWrwM%%ZQj@sX^X_0RG7cBeOA+^#Dl zqVK(zJ}w@MjnEv&7!j+DF#%Qe_LO;AtNy%ErK*w#PLyR1If_PBvn7Yrs z>GEY+zm21f!E}OZ>DoqS4Bv6QYmW)vg-A*1^qAM&wD(FX;^(5gEx;yMLaPM%!J(Ab&ZIa%_MrFF4EX!hekw1 zwW}`cFRNSB@gaNtOC_zSz2>aX*knxxJ2~u9EqmX%PuRj?Dge2 z>`K;qoDz;-N~6}kEk;euxzC9oW=~CITsd5@NCgRI_S4=Y`Ih&XxUeAt83-XTGjK@0 zfC&a>NOZFj3XudPWU+1L#CfK<5HtXU_$~HZnf%yeeE&Ywe@G$r_eKR!8IPCBvt|=! zkNzNs_3a$T3RR0DgXXTk&ZFId0QP`bUiS5UoX1hy7MtB~qX*uUB-I_&Zz90x)Ynx_%*+r>o4-6> z=9q8#Xz2~JJ*qnHwrysntin^%*LI1uN8~I`23S+H=v%zLL@*58 zPJ9E^S}T^;uQSsUpI8t&S;1P*$Thl4Bs6CQ$FF02<|h*a(zPPU6PmDYX+&^+XWj!0 zByvzyEuz18rIDB+Se=n1vW@NtXwU?K8GQfwmG4d(vES3gC}OZ10+@mtgP(+ z5E-D)54FZmzbsF$ODp>*``kp{h8zb00IoS&YUGN~tT%0uO$=bHC{xhDjf5@< z7Dn;44p;|(irQmE^YeP283KF#>ED*kocleuO?8@FL0#$LE)s`Id1uHhsg+1Y#5vOG zR`;^ASQ~h^evEhPTV<7Kl7&S@_MBsEw$G?c8VR2AtyiQnwxQ!b%cry1{XU`_ee0g8 z)NrP?O*FGq>qgq?!%wF6V@ZUIsfE(=ZiJ-oB5+E=z3VLz%dQ|TZuPh7GDS2MGdVFm0EEvc8r+b|4 ztAtI3>hf@=qaun7jK7IF_lc}L-GViL9eyA@aX6^#Z5+XeHjoXy+@8S6@h6Lm+*j# z3=H`d^;|wsVu1xpF4(*2;8({82&1~~7xx;fGt`Cb5C6~qm^DR*qkD&#N-L6>3EoJT7^?1Lz zWxE{}YjpDpJS(VAp_~=3dt?iZ^9=K0+T?FR+{0}o9n6fSuL3iXDb)}H5VGj)D)}%R z7?=}ICYVF=_b||puam$JYON&1m$n$N{>_;JPI!g`%#2LJk$p|wj56C>S?rc~nl+fR zWUTp=>p9-5?=jrilQKtRyJ^dc)lm|?rR9B1eeO_*2WmU2O>dG_*TeMklB<1 ziImB@QWvZsyr`*)-Xou^zuh+&0zt86o*M1f-ol!8zf+s(hB3g%%AX&z$zFv0k5;BbLm<$vgp*+E=mM43X&FirJyo|Cr1 zbw}qKJ&1@bYZS2u)K!XgU+&`?pVAW~0GNm%4Ss#RNw9!I1S2hkcLvzN48Y+M9TNfs zU@(&2qkHbrv*mGU0{YJD;vyS-<%bb#RVBF*1(v8|KmYOnZJv3Dw_#}qGzX)l_N||H zN(w{h92UST$^a5JIH{)SZ3}AntukbezE0>zjhR>PdzeEdG6)zBV7c|4l0lLQo;~Im z2Hvfb6py6~G|p4*5kAVo&l-zhT2>@u>1~fltAug5wzJ(HhEcHDQl@zm8remHfB-@A zV+arwOfcw>{9X(Me190z*9EZe+j<5CnAvryck`GLEztXs9xE-c5B5hr9=*;=Ta96u zFrn@?Z2`a*Kk4Re^oWszQ@O5BR#Hq3J5*8CJf83a|fo2>Uxx%IG#ol=0oSAo6pg&QNv#^ybHab?k;@yE+^h@4Ytb7Kj-P{Na)*PKIU zs5GouGnYYRPVWE|T3BZEC!Zy?tJx-I-qBi-CPxOK*}Y|hQ!HY_1O~gQ`mB^|*3_^T z;Q_~W-)c+P9ISygWmeNNHFFk3wX4q_+j?A=DBG4m_{`FAv-KHfn#_c@j7M#E-u7f% z+%_9BNN{J&znN7xvkMluA)tO&{9zWPtkKA%wFHM73=&ol3=lX>5KI7o>fP6Eecsxf z_gYK*A?)JwF2k1YNwmqtVWwCV-B-Hm_EUF*=6;^7U>N>>p4OIRdY}S+p9lNy`D@Uo zZEKI2SH(GVl6SU!HJVeie0J$J*_^YR2D34N1Taxhrozw9gUK{s8s(V5ymnfUoi{eAjX}D(m%iugX>&NJGog&ik|U{PR{7Hm@#|QK6n4*Eljqt}8o0C_uF=3nQh%{dge9ch~A?|nfWo!DPKh<_>W@91fVkk z%ps5hDXJ0y`o4?#`}sbO6@9TPG$ZqhF3lakYxMreoqkGgL-cW6;gR~97qAKo(mr;3 zQDhrA_T8VKy@yb2Y4c%o31hzOt1Y@dV7vM@8Fk)io*IS;2{0(xeaQ9jNYdQtvl~{s zZOx*GVRS~@*1~4gRFuL((cJT%;cHCgZR7s*yA9D}Q9NHYG%}+JJxxg?-4OsdnwE&T zc0eR(jR3hANf;B`NMj`1ScLEu6v6@`P>1427^|V%sBUKDyxn$d=4OO}!Qvic3`}8R zMwOMBEw*&)OH`D3yjn)ztI7r#zflDszyPphW>i(CjR3dI_I@RL`sFcavw2CDosyV+ zHt9G9N>}-6ECAk+0K?M|Oo;DQ0VEXgeGyrZ{AkljAs%la3!&!LU^Yxm(b9UlB43(>W@_mf6Q{-M1Qt zUq1Y>wowVfoN+0vY=06T*Eb%o`!=z)pyg#pjHUYO91MNhXd?)r?+q$uj%pYkyOO2Z z{?hAAjE0BXhsHB|&iBHTc%W>BWzz3s^v%Np)tyczf+sjbO3;rp2LkF>eO_P?Akg1z zH%6Wsv;D>MtdUxl$Sl%XE(i$hB>nq<&34yE&pZ=Fu{>RWZP^ZEJq?%?6%3|}dmG?Ik zX_;$(N?n2mT3|%L$#4%wVa&<%j-{oMxV39oY#G*v%B(Sx2wLM9UK-nKI?2=6vlG@_>#fz%JdEN_2vI21_PewJh#ov$iX;? zM>KMb40|d*z`sA+6fl+copWG+{OAAq_Lpm0T@Dw705B-kZgCqnGJC|jM%DQ~*zg5D zke8L)3S}B2dzh@ZHhW(#(0w|dNf>nNM0)0sn;`b!%xtm&40#;Y_;4fFKbW5oCkwGZpR0;+>QEyxKX4vX45q zeJ9qa&&wh<_;9w=WwyZq6Lz7_Iphw5(TG7J-+CPxEob<)ZTE5Zu#sr!|8MVndS%J3 zto~bZ_Q{BR_r6zUyWRd%B^jv&-59U|wYp(|5fem@7(q*XgN9GoQ%1}fz=-aa8cVn_ zRVwUy_r8qCvv({;rO>-d)%A0iTvfuqQD*97X6VFO(%xsUvx5NhP8d{FRHOB!gZ+lA zq=TPsD@&YCTkdVo^xhBv=~ZcnR`zCru@DD{0|`K{-v7{($(zy@ zy}`tKQN+AN4z%T^xyh9gk)RYLfg{dnB~+!@$#5HF(a%U88F|gt1dvqFIPxaPNjZjn z0u#|GDq!7`9^J7UITO!N5mdRLqY*e+%%yorQhY|ameUz|WY%y5*Q?LxNzuKHOsipm zktCSUx?ECVx6?_KH^84oeReaSK?GG)*6GxjU@ZjDu3UDwu5}I zw>zbDPAJYVy*(B=>0|?jgc&Xnnathk)m{=eC_t_6ed%vLP1!mTl88&@V%DJTetNpd zPwSDr7`Sz6s0Tx}5Cx{4&#~^SFOh7G_S67?Aoo4aXZAfZGwm6YuN-!rPj{BQh9R@7s(xcfUvp0>k;dF<|^$7R%USA$ZURU=S z6Sbkf-7S4vy=P;}qc8_?R3@n^B04B+1tmNpltho$i8wm}>0roS(5De%|napxxBT;VW)8v6P5+yCzJGRC) zdNiyEhH;Xxn4Ds2!>Ish$q={&19Yg@AP5IiMsnF%L>I^QpsHMh*WHmA0(n9N1QakmHI%TUR zz-^eZxwV=&XbP#+SXZ}pSOd&c0t(ERif>z`_0*v`@fObuBkguN^@Nt0tuc}lv1;p( z^ag}UfR0DY+*3Th(tjkCmEIjvS^NsY~D!`g6K7>ce2iBwhbM10U9`>_I0WTZJefjxKKt~I%wRtdPA;F+}b>`h=r_>O8InGnFS(h~)V{Zwq z>xJfITQfV$X(9Fk#vmIFQt3vnOUsK|#3>Ac69DZR9>$R>4opo7nC%Pbb8dkko*tC{ z^3jbneS!}4s|y1VxJBf)skNuE>KR>~5iQeFU8wRC! zCdi`ggeVYX0<;Bh7OGH(xyR$0OB>f%*sPYIW-Ra3(U$aRmdRA~F?mk5aw7|!m$=qR zb~}mOQcXa>3ITzy1TGQ>c9Km?oK7_!Bj)Pm2Rp#1BKp`u4Os0-!WwO~OXSjm%)v5| zI|!hOEhVv>Jw|Vh8mY{+&-YUavYDKQ-IHl)+P1Y3nom8I(JCL>Wan(M8cT$6X4+ZA zVihzz7^thrnU*{yfG5#Y0FZo5X>V;?-xfwdL4)L3EKZ%gU>|`j#uGgl1%o~_j0&Ev zd~c4qQ9Ys0G?>X9Qm zj-|i3j8-G39s(QG4-dSN8ta^I%4cK9WW^8N&5;j0YY?<@q^jTUp zuI+r6gK65Oh&lJ_`&z@-zAO!8C4gN-m#h)iR+XvyS6(kj5bOi3&F|H+drQgC;R*!{ zL5!6>*0W<(D8_nS?zkjE2>i5)@OBaW|1V+iOpfu+l(n22+gNus9UqsLB|>=_W(R>$ zCn}O6XrLku7?xlg>k8KA(%@-npgM*J;E zbAQs~n?gDD>Gdx^5z8dutuRc#`|a=kpO1b9*WfN`p|nE#!|DDz=li?M!{z>7>xw1- zERW&SP6pHY%(^uZw2fh8gMES_8HHw8c`mn zX&U{yUeE7qY~Y3mU?kx{3Fan;Se#k7jBXPeHV?ecI-` z@Bi=*{>Oj$&-dT>*24Vp|NZ%k<-J$m`<*uFfBn^8zyJQr^Ebcy=97hwU=9oahVq z!nkI7ZH~72GUF5QwkpIJ^e7q_H`$Q1Gp827Wq3>;!!}cei$sqGc?m?0%p@# zRzFO{g3MEznHH^E)$7Z*zVqP+Km3RP_+S0WcmL6k{^URYr$7An|MvHO_)k9k(I3IX zKl{`F@Gt)K-~Hf^|LO1l50ZB1I^@IP7zz@VqO!+?0E*TNUNv1+WNsx0&MLieve=%CIRDDZ|G zb@*ML(ZT(u)zWYfPxtc0)PPpT?)cfF@_=LKGNb>M_`b!50{j{ z&KFgwZu#AK@0BlakbvfpYUDGXsDuW94l6kcy1CWzg%=uvDAr^NXk>ov zgz@r&)0uH0I@=(0OqTgoX#f<|k&-^YZye9GWO~~12v~$d+lZzFf@pA=t}5|7M4;pX zv)QU*nW?Quki8fHgr{`*U3K=9TXPt&*>gngJ7Z+;?Q}Y2UZG3-7!R*s-+kj7P0BX0 zU0VbbHHxwKvoZlNKB0llZ6KbWt^mkD3FbF}sfi^Z$;LjAzJ|$nD>SnX?!{|ZeyvKr zq2M02&-cq8syN>Ixh6Grj3*+b%1jfT7_3Z*q3rKF$TC18Mp+)@ilb?U^dw=lve)5z5{^x)G@y~wx-Z#E|t(uO?F%lflQD!vs zxgt$yz>^CwzafH15+rh`3HTa@QUw7sJU|EEp6_QqY0%&T!3_ih+F^g^SUpE@13T!( z?*|Cd^fS4UNdyrwvZ6T$h}(bKhymcYEizSgUP6$ipE{MB`u;>FCG2)&~qS7=X8C7CaQ!e^$PNNk4a zw*ommNpikw!g#*ooY0PkL2!5!kJWrEcW%S6> zN5LIz@OGY8#|wdhfF0`Q)HJ9gk!L_Z{xqO;bP!rjDtW!o+UGTXi6HZaa$KBd_Q^e` zE74&mQ+szWDhS6uT;$WZXolh`J{nhGV1@@+ZcSH-yIq@Rd}))0(V=@@(5_C-FV{vX=%3=Z^cj?wOFvH_BN!~FS%=5#3eFUH#3xWUEW~TO=O}@YXbc>C5#2|cV zoej>?0Hg4L8C+yTx4wGYhhigvZP82HqM5dhj9#_%B|MCI`T#qFj<0irV3J~E>onVe zN(>0-FuYqNv<3rY&^u1WZ76&fS~r%)BedHSfsQ(9h&i^0j0KMwJwiJM@p(V+{1XQb zf!#)Yg)p38JkvVii$pIEVZbq2@4(GwEL{QyU?0)QyQi>j4WJSSB$5CY_5Zr>hyAzz??ym3Tx%GYb{^**j zsolG~*Iq4WpE}VhN-`gjiIAb7pgzjUN~%FYL8m|j4)FuzpVOeFZ%|O5MC2sJG`yEj za?s;QJa7k%AJwJeRiL5YgCBmh2>31b+*;k~5wXyT(=D!m-6(0k!y{b{LcPUm72;hg zqpA{x0N6)1bfl2faQmZZy;}X44MdyHMD9GT6YF&1Q`L}EZ1_6A2&81St}fLrX0@)p z27b+0$^qxBCnNTK7H-L=4E)`zGeOLWR!&8n3>s ziNu@ipNIaRh<;Zk=-p9Aq%~>v!}eST2zF3gEqQJGAm4p?C*tKU5C_@&>%tGPeT@yr z5SM+u2F@DA9GD7azf(HjRQaTb_P%pB;!6tnD%m@}9%NZRk_`?lw`vnz_VF9IQG#p` zR~AiM&C}gP`u1y!9SsMOfS{zOZX4xX0?t#`ZZNv9YA<)x@JIGpU2}Ju4GJJe-9qkn zv)zwbj*;y#gF#Wc(Xq?RE$dVu3~@XfB2pV+2~wUDa_4oCxgm)?umy)tlc{GOY)C7D zPX_+wQtsg0fL7hH1`vc%%f_~~W;mo;^tb4KzOQIaSevwoNtBC&L*ZFHD)oc=(8s*{ z3}(_bW^qKIMc@a3E}AMLmb=2e)j z%XMcYC430~)aj`J{;8wkqV>9S_vUwiPK(ER%YR&(-zf(x`2W(%hn%&=9)Xq@j!zgC ziEYP{ymiCPlKtxyAmti_!6AVPW3Z2#=Pn*Yd@2?xvR=-_Jj}tk#O+1 zsZ|?ZYAD1nKzG8i$+#83FbZ)psu9;k*a#bIw!>g(OumHq*_tTdrY00Z9qjGrcilqfh);B@hS9QRI|=ArFgJtS*0hf3A7eT^!jd^W;CTl*eEFrOtQ1>|W__ zNu&K}L1Qc|lH-vfaT!Qa%7H}$el!fQ$c!HJDAm&i6d|Xfi_=vO;gofb z;H;ij*AOlXBPz11yPvB}`*0oS(xE^p_DCqWO0PD{Ap(mqr@^PyITehjzefcN5=3&U z{GrV*cyJ>mOq&*r9LPWKGvJSV&CSf1=9S7rOQ>l5Ljnh!?cnlkSa`B8A z^1_wkb*}(KJQJO6H zx9tZ1A(g`b*QB`kc;*=r{K?7f~Ed3S3;i}57J6GyZSHjra=P;ZjZEBq3My&>3Lioce3tg;BYmX=8z z!C{b-WFfw}d=S2u{v#aE4`=h0l%htRv8At2#Mr0|Q;tDjw?do(+W8FZ{aP4uA7nT= zZ(65w^_iX@iDLTesav2J$Rgp~ZbyPahCaeol|cK)qH?eHOK z<>`Du_X>i?Z4Bn`capm7X9?`D2D=Wtr)wS83kGu4EuSeO9H#AkT&^5esLe0TlD*C1GhspP!5ecMS*~?m_ zG4lNlA?HUH-Ip`_ag=Pf0tCfSPSUAn|K8{y4b@46@?0sAdNESuKcE#9^_dc7jR%{3 zdNo#B6h?!`l0LukBqKE>2JzFu+bnG%{BOQ!tDqrXA~6r|EpnuP{NXT-3KecduLc)LHx9W)~?eLckv4c)y?gUGKQ@u(D7! zO351sy@CvdWTU(pA1o2)`NJ@hr0`TI;$O7Ua(R{NEN-ZMTOq-`{(3kf?741L)2n@{ z6Qpv^8zJ__mAX+#6Qu@pqKrK^k6hROpRK{Xl$9f0%U+#Xn=E~ITO8`ji~BizvlN9?*)ApMF3ZUK8&3STy3u%= zDu|7cRrJ>w2Cn0EVOhtCth>`F2>aOMBO!37^CTz0AqO&pOp<>?#Pp|B4`U~gT3pA& zv;X1;oxiEiwd8r8L;B&BjjVLDkKI2wY1ZHynkcJV1y)Hs}64Yrs z{`slf;81n+2tXmCa`sv=ukO`#mV0vYj!HS@oYrUNb}2yL$+bhE({17&qZaFctlXf) zY^Dc`X>q&4_v-!zv6PR4@6j$xZ_#1bb}ZCgsXXzMp7r7O@1sw3)@2??1}jcimTd!S zeQ??jz8Hw!Uis8IF!k_0D&(!O<4_pQ&4WCC#Ts{*uHO5JpdhH>I`?@b`novc z%JgvS3kZu_r+wIocHWZ+3jFO>LOF(|;qKJ4olZx?$q(PjJ{BWBaCGW+%Pt_0Tc@eU zM)>7k6U5^D=9D|Pl&1(uK%WnFsLlv?CtE~W4(;=AJm~vIa$?-oqSb>gvjNrOHKyXd zaH6nJc4MVBRyDS5xvNQN-0S9dj2KL9_$7O{`}6#df%Ip{ll;NGlxXG<=<}GtHaftUin10xj@5)x&H4m7v zZu<@!hKF1!Zox6_!YWsYjeahtWbD;MUyjjl`h5e_<`LD<>G)=hNlc{AyHFc9aF)36 zEno{yi`HIyF#}RcU72X2_r+;G*0=IYiP@8Ej1aY{qSP?KcC!A+?84Mhb2t*7{gjrv z&ruveyOLClJnIp-q3V%kBmxmlxe!$hxgnVmTqX#K3;=4`0_`g13AsY;3>$W3Om@Qa^F;9`$Bxt?{ot z?^GMr>LP5BVba17Kc0qk3F2YbkGE?ZALEmmnH4~xWMoc;1IIQuxWfDnaIX0h4EzL_ zf46=p`)AWff``E<^3cl#>KafD{_PvxFe~lu^7mUqGa7EBh))z!1fgT+XALVg`2m4r z8egFux|d1Z4~tc}5X^`Vux1ETR@zI}6XDkvBBqLY3b-!~GN&J+T6h5E0g{u#?=KP3FQdZOVUbUq!tW^+3^k6*GV9Wy*DR#AKiq#+1Y$Z);gy3a&e zvpcjJVm!&sXh8lT@6mPR3Q0HU9`+;~m6`2nw^m1YXHIbP*ITHK2 zO3}F3brDDc<7}6#Xg?1U?@_gWL#DGGbp;0PXjnE|K?a({^MIU3Q{W$~_RW53dYk_7 zE0VDqodBBAZPR6&Pq`O?V}9MvGjA1aUvDr|uG(?1#burP`xr%moX!s$zAPc<+L__a zOY5Q!NIjea{T@X*gC<%BLd#gkt=T@-{%`{yNRT{Aa1~Gj-afHja-E_g{aT<2`D4)%ce}dJ0rS(lDTD2e$yMwKZ{CTK@wqeuUoJ%Pj5F(N6Vr(Xnk;w0^FhM zRgsy0Y8fj+vdL-PPg|+sM{8!%`Z~RE-taXQg#TqUXSMqw7H&!eZ-~&DZN%liiQbDB zyBKj6mejQ9D=a=c*dd6w;?kde&kZa!Ci}GwnWd)*f%CJ=_bHJV8Ui8D_8&8pkZpKc zJ}d-DhRp@F-Np8nQQ@Y9A+{WDZtc3LUyNT%ie21cqzK&}&Zci!mAg?}BMiE-fF-_^ zx4e16|wM-?{9b@!3%P5aor%VrMbvT6*HijAPeb4wtgDY8K8u@zjf=mS?qC*mD6F< zX7^?&uzb|Z`X=*SOS;?KB7m-Sh7C!O%grtG@a`*Z(qozx2dPR+X!C|0bxgA>1XUUu z8l%#nw?&Ss(^o~6d*1AMyr4;qV-3{-qKdjuq7mxAhKi#vfAb;FYG2jaQ13ab?o7U~ zsgYL)qew`O>XgqiN_4%`azLq8vleZi8!hC`E-QX26FHv)C+klIlE6Kk`o{lke@Q7- z-ATT9mC)koFiZU)la(;$NYy&BKZBq>5VUpkrP13q-< zJkTTWsgv1pYm2pUSSbrAlHfHdaPi--O!gp*H3vNFLXH4eg=a~dfG$YPzuLT_-S$GU z{Mfc_T@bt5I~V5u6@ye~K^|d9ElJlV!Zi#HZT**w!bb-SgCeWY#k}c3;Sh7ydV*da zRB=ku&7a605*Qd#uA_#>dK;|Q*)lXg`8m8+cicNpY>boo;`sc6yeYpf^B#N}g3p1sbP0i(gBrxIbJNnv_RwX$)O#9`Qo^ zDOhCY`j8V~uZ#u3TA+C5!iA_lcM@Dy54B+)ZP{z2ko{|&p ztvCwFjy(MqBx8{t-sNRqpN=YrK=&uh136*Q^L)iC`^$jNEB(GaB9L)h%sUHt1a=EG z4p*X1l7v-vFO>eKzZS{Cfh#M$IBK{iq5LpD7H^e!7*DR7f(g-tfr@qMnHS{++I`|NEy{_V;hGFg*cFx@pe60KvCpxXk1E`CCBEpMQ}?e@Xv zgxe3-c{^1nF=#1RB~GNzt?aV^sAN=n#Re?=bf*j#n!&0s0w-tEjdYMZn3)3>t*SY< zr}i9{o`lglGIVaTw-F9#M3mKVmu#*?>Q`Lu;3(4}$cS#^;b{?$Uved}Z(NVA|2lBQ zO~a9k^Z9rknrHvNQROAE-R)y?ZA|aO21WS^nWa?vAG7hcx-4#i-%?_sedC_@0UMSS zNa8Iz8Y__%t<6Yk{1S7lcUz#b3)U^g z5mk%XwBJ8)*D<@}G-7SfQED~+fEAozLs%y@cK@oQB^&z}&JA5%eGnVFp6c9+R`+i` z^z^bO24*hzAG8zC)M=w#o8;xU&o@5QgYu1r@M0n$;EWQsc$6J=@)1GgxP!a44otF8*0VC13zr!8?Ijt@-#sMLawTJ~IBS`3a(V_xl0( z>uHLipMN8?dU<)=6e)rI#yC+r5>PU2%gKg##DgC=A-YAj4_Av$8ZAKR_*8D8 zK|eo=je4Nbcwgy093BPd>U7VThF4fGA?jr{n0r&I@}p2r1f?khaZUP#9kLJ8=`*CR z&VP~L5KiYrGvd#*N3$$1Z0ntk7BKI@mZQS?0f&sGL^^9bskVdOn0HNGsnVR<9cfkN_-_Qy8m*H%UvR*<9gbE73ye{>|w zT2<6C)p^#LoqdMN@ke>nk@$FjC*6nD$CT?N-9>*PSAIQlJk#9|G5^VTaTo@TBY|pP z4~?nTkf8BS`Fai}L}${|xG!W2oN9w{Y2N~ST@Q2oXk~p-y~SnqLS?6puucE21vz9r zYOsRdGT@A50Tc*PDH#1OwD z{u^?Q%hlWqHBE#9#oD?8=eQ)d_cUZ5BU?Kp7Ry}nbjIUv-%1kMU1q-DdQmK#DfgKv zHlqNKUM*^IrWLJC`}X}O`jBi#K-y+&fiffmrBqxHYu3R0C}(pA1rH^YSGY?{4zS2Z zAA5**U$s)FYlU|T^)dBNk%lY`@wvLBCa*6Sd}DGiT{js>j5O&;bvmtU2A!9)R(ZC; z%nMjJKoF=eL^{bkK*(6R{$Vk*8s@TmBc|bz*pvRe^-vTk218tYYZGy#nV{==Y@6r8 zK_)9&^-|%2ZlRFe{=QA$A>%vb`GIN>m^Yb+CI-eQl<4@TFu_;obUv*dIqFRjZ5_5U zE*44wN=nM6;$rGMe+$=9|I!;De+ZCK9}D4EvrdtcRRLjOVG;9}=cp)P_+i<;vy}MQ zt)p@hw{_LyDOsNT&R*^7fZ!lkm_Wi0Z6aiWM#`J7XeMDNp&moGT4B}FpxdMV_ecH9 zwbTCs+QFHgTMcAh_qq+1v)~Pyp?Zh;1zo_GRXmNcC4T?@^*@hszG8Kio*xju81>bq zwK>>7Y!R>&@KO}t#%Em7g2Vo^7Lt_uRJV1wDO>`=2#8jA&|@Mra?*sFb#Fr_cOkfJ z&p@`y{GXLBpdykT*T=eoXH{+>8USyQgOsOk!VLF^ci=!?{MHjgqu@1rGMaVENBIB2 z9QSL?#hC4Cc42c|5QYF|m0u}a|HoFfW-TlTH0>;7wEzq*ZTQRTR8ghpx7Hu~Zl1ct=eqj>s+^ zZo$^c`X_lcy5LpjLH}L!g?Q;VtF;WlR-nTJ4~-h>HpO)xwz%qr>*>df;THH#0sMkn ztvSmD{PuS%;lVqjlHcWs|5$*kFUt^Aic{58Y>1-7YAm^MA4w0RdLxseKkn%bC?7e?hKT|-DNtc{Z>4w zboKR1hBGHl#A)ef#xrJ$pZPXUqf=%CxtCVk@6X@(qdd^O5TqKB?i!JR*EZ%DzsPJmUDSJH!4p>D24Am9N*{eiZs?wU8M4A zNMgjYbz})5;EVMpUb}k0>8`95{>lmWoUctr4CnKh*5gTh8I5+M+Xfs9Rj1UBeiuIP zJXuByiT2EqTC%%_87fZl`uZ#Ep8|U*1}au7pW`AL<=Wp%)hnHoW$>fvaRA195-1+gr##gPEvMdqZ7!n(H5QMqO5l z6gScvpS>vY!qj{w?fhg{c>bsNls4fSx;GXhqO(T7Q`vMSV@fWAT&!tXl)nU-HbwZ6Sk~rQPF*Iu^nJ@vG zW?JE<>aSCr&dC&SuhHVZ62rh;R^tSq|Md{*RZnBdM8?~F-UUgy}@oYDpuMiqKD>l=>AjziDvd8G*q67rItq0W6B#L z&(2mZj|zrjdihd#v?NPmNWs{M;sGUS42d(GcXUmj3|a{P za!e}#EG+5u%q4d&Gq19L;y`z`b0IZ2{v7Ix4-N;J7O>JqN$ZR}f103{SH*)DDWRjC z+eGcr1<}O}S201{q5sH2fs+!W)om$hM3sBOYb=@MbG@qTvKy$$u$=D*IGduqlo%B6 zVVlOrQBS=NMzR#5cWj|6d$pxw;z%=VO{yNuiSrH8Hl_Q<4qT#ksgHyX(~Ql`L(PG}Na* zL!1C6P>Hx(*cUppvTX;d159%%0#wChY{X%xvO&0Bwh+V^2akO@DWRb-aTS#-Mj})$ zC5lD+9?yHq0<6Cr#x1=&Qt4U9Q4t^3%55SfU-`s+A;*KwEhYx8^6Pb;|4IM+#fI&% zm&^4__&siS7Qf?EBWZ554bhmR=yYEFsSGR@3Q{jfLS>?p?G-Kcp6pI~^_L`eh(_39 z3ZZy2r=%u`w9Q3r+Uao0Zt0t_A{Q;>7VheM@qx_KCG9^;+26m*O7pMd8Mtm&kg9Rf zXJXUfo;IZ3KdWf_gDn;?q>%}B?d`C*smIZs(XCDpBTQjXla#vpSk5B@@Qz zG6lZ@q%uXdd9Ns%piNlfO%ezqO~eD6`8=Qf;CtCTV0UZi9;N6zP1X&fpWwccPQMTk z0c#wd=u3ZW{To{R70 z#a0$eM-z%zEW@g^BpBeCf=`&jW1T6pGnmWqt^m-5_)_tbJT?l^U%tZAZW9iOj5!Z1 zGDK3U<68YZ6*gpe4OIQ2kYIuCN2UI4_!ghbRnP9P0K~yr>D7Ez5|$upWwsR42zt`> zctXqD%4Pm8zOSVrAC%;$H>z3T|FU+oDUA2w76YhsA{jI3rIg0Lk5*)AYgGw<&8O3L zeD&x}PpNC3DNxA28CB@0FJ{z!5n~&VHzMyb`Y$fK6%kOA$TC*uvTJKh?!Xl*C*BD8 zMBQO_@5kt~#X?4k-6~sXdV2vbhb8|@RZOU8i$R|>pc~p69YI8Cv0g2?fGnIkr;U|l zPF_Mv=2Ue!5*zLhKdZk1<)P7iB|L?-!F% z)*X4}#IJskDeo5`Wd^wHvS2otaZ@?P>LJq9*>0vPVWKO2PDH@Ks@X}>k6hOou`6G!j{}X{S6GaqWtjqv5){a_>FYbmj)ZpY7(HTk%ixu#!e6rQj5 zN5US~!zVL`dpb+4YQ_v_E?dL_WOcRSSC&swEwIC`vz%9~j;~MmYnea7C7&V8Rn=5B z48QWw6YVHi>%d`XO~{?qOt8Ezwy%3C`ThlQa*GehZw0l(xeVW~tp9Ylesu_)sN1Z^ zu&fGRA7)dG+il8|=p-J|&{YV<#V)n!Xaq_s(h%)6aXR@eMg<33=Syu$$3;|KN%?D% zzx-;TGbk3y@QP*c8U%0*fe)(qRCe7u3#9fZJhFK5Fz42>9pZlVMG=-nC&&1zU@>tq z(R9Z|6IL#XoHYfNuA;f8nHAL`1}jtsbzfL)&@Zz%22GKT&cy7i(gkYy(QV8bjhjE{ ze4Kn%)6Vzy5H-9^G!agKfJU9HKwVTIL5FC@jue)eIX}ehNcO%do?#Ak(EG&Q1~6@O zsI0GDZ>LW`HB68cY}tnI<=W>>)GscG7w>o7iL+1adXdU$nA7w{Jp@)(Ns`-}ZkH9@fX&GB^klyrYXWx1{ z&}uxpHLGSq$SdA8ex}}YKeyFUN+sm05Qq#eRwb3l@{fEBT>e~-3PWGPfmqSu#FGgX zUd|dgU~Oq`giB#{eZjrsa@8^g_tpG<)onjeg!kmFhKbV+{M@=Puwgy~2V|1$eh~aD z^`)Vuv&X>))$ms+{SeVCNISzT4i1yEOf4RJ6j-T2NeL#P!Dhi5ndeTmTvrKbst?&G zQpJweBlb8`%49yXHXvcKuEmgy>(Zr;izOEo=U|tov2&0v{pPo=T(5vYR%RpUP}QSQ z9wk>qj(#h~>0NVCkY*o*NFn|6TZ9J{_O(SQY#jl9=VmVpoI+(OInNZP8f>weZN2|> zRsjvx5}K)1l*_iikLX9SK17F4dG-Ag|0$VVQf#k(Ml?}sA)A!1o`B<;Qafk|no;o4 z=+|(8o{O)v*vj@?RVpG-X7A02h=zZ)TSDh-8^heAhuSNeXwRV-+gh19k*4 zePmJ)4JcZA4wlBR3S()}{1o&xsTo93gPbdl3)ou>6VVz(&g)-3!2ZmoVd;yFz@7{S zm_ZF}GqY$V|6AXpB!b}KTv#3cxyRE`v2H0t@^H%Vc9#R@Bx~U0Mo1LnGHIBMNs9_h zz?!1fjE7#7qn99iAcu6vBPmPMYO%LO#|FCMH69EgLZl$$c$}{l660Vuq**_@0(2Io z?9pKx)_6ab)FmUi{AD8!t9Gctt7{1cFc8nP6PsV2;e3r=;*eWDs~f}10(Q^3T@=`6 zPp*>!!GZ`MLMXbevLW^}d5l^HT&k$RnatQ}WUJ74Ug!M`((xQi3N*GM`EH!ddgZ6yQr5)CqoxdV zx>|++7)VYALO8lBm!4WPpM&DZP`!gRRmj-YFp2z6f!W~IkapNG=Fdij3QrW2DQNGc zY=|Be9qm7E8{S6Jb27EObYapp1o^7(7F59tmIfoxu3j|Qq#iClwl&I2x5sN>NFM+RFxywnt(0-@Z z+i2doKJQKj0pJ=v@UX#mPWDaO@^7v3VpoBs?$Y*^elykY?*`<(i)7-Q6ImZd`xbdo z?E^p-p{*&8A9BD20>m-1m2^gzB91EA~jlny-yqOeSPQTXht#?u=(Ki z^#Mu+Eyu*NVF0Cp&WvN&vTmsk^+>ZG9#5MT^IE0HUuOJZG zV`6wUXEVBf+2%x%>RSObER=q;jI+WycEpK7I_JtW0YukSFh>$>pugfyI1eV+P_hg$ z5Q0^PYOw-aEc?+8@x1Bxfn2@){3bOq7|I+&w%g(1RR8L<{Vgy_M;h*P0GqsXIo!f| z*SHHqn^ZAA4tPm_IrDS5Pp_;*5nl)U0~gf*QOG|kE6)_NQ$iwJsj#=bXhvPyI267K zJv(Hl0LM8b%vGmmehy1kkm?IO(?rl==ec+ZV@RT!BrIC&}7(l+=!>nF_&T!eM zK!;fT5P(@IKkdtGZT~41Hm7BQcrtl6K$@Keja^0%ipZAvW?3~&u0+LO@;c+lYtQ>5 zq>#Yu$Lg>8fi29+6eJPq*7mSxTe;a-7DB8VcVCq$X;Z{&7_(mA1g9i>Y}=ashcs8X z@E}!GC&8QSc^XnqQsh3}50EF?G;^bVP!AiOt>sENy!jz{dP1dsagLTxtIdcZIVM}w zM$Ar4MqUI7VOUb}PzbKth6^=fe$F@~y&FeEMFn$P<<~>V+X9vuzLG9nXcQr@E#_bh zt>d&L2fG4Iqs}PFd3#EKXRRs8RpZ`WLcI8z9F4JHQ~NJ_K^rRBgf1LGKomhw(>=?! z8Rc*v3AnnYggq{{P^Z@Ut6bn&$`$%unPaS$9&$e)=AX1N6nd*R1VoAwHd@2PoN?O4 zxkO5ECJ=kx^UcQ5akiNaM~flg@iLus3r|G_Sf~dd^wH)+@kA4yUZXcMMC~WTahNMJ z08BuE&C=0Fx?S3sn#U7VeTQcHt2w46E`k7Vj60$bOlas>hT!-^0)i)WHT zPX>}_=AfdCW<_RTS#``{)1t^+y4rSIN`c%y6|XU0(YoaED7+Y4e$-=ic~DA2{9>{~ zPg?Y@cWiYB+%dMYc|!0aDboc zi?_MoeD|~1VbuGw0RF!gpO8l#L-!Tni>a4hEU@1~biC^J30^L#-2L3^H}f#SZ%U#( zt~RcZEhSgW$|BQJ`6p^m?SZMXw)V%`zJ9}%$aJvYH>+>ptep2-0N!DT)!Ep|OV9;- zsIQlo^rTnE;ydx87U@rY0K=coAa64k(wG3ZZ_5D>i=Q-C_>z3&kFrY4H`+*JvTZju z;Yp)BxfjZ9$-a$N#2i$rgOUj5T$7E&QVVJkCrDQ>IKL=zrowY5@c!Uu z2t@3y5rN~Nxf@@$b3|D<=wWC2^@U{Bseh}*L+JFnWMPhH@sG8m^Q41bONnj%=`!-Q zsJL0mFqF1)P zj3kFz4m~B!?bD&4K?=kjBKSF<{%yn!S8n7v2o-|JJA6+l!v0@bHMAF7`}oYqL+1o6 zn6OMCRjT9f(xDi+GxVT(y|^GT;?hKPp0Aou->OM+ii-mYtjz8o)^%*+E#i%=BzbUt zH$lZFE${`&&JVl12_w=nes#o6*d?5mo~8K~@gyfWBwO21;GWJs?Nzhz5m;1#bYbub}hZs@6H*2C^i}L3=K=%H{a0 zxs=5DCx^rJ2L)l_82OSq@e6SnxW6uGfdOsf*Ck5Y2n^mC{xtqrAp-Cc)opf~9e zZ9o9wPuU;SEk^_yi7z-D+>ni@9pi%fd2GI7R`;wemz7KV=O$ZwU{nmg8B2*;^Y8BI zJa=;zDrtg}CQcTcNS{BM0cB_ClLC7DqQSqZoMw%C?E9Auiwa}9?(HdCr#yck0>LwN zD`STbO04a6(L8iC(CN<-p?{XQbS`4+y$Ei!a8~(tm1HAWTSAy-I=Bwp=WS!^W7X7M z*twvwt77jJwR7Wf;?Z{2%F4_uIXmG&e7tCeNprEkrPo`?eWwYz445<}!jiHEC+lo1T&RnLT z;+q2O5SDgZ@)-S;dRuAmh+o-zQZf2iShyK(Kusm~^x&FHQF*Pn*L7X@M@jbTyVwxt z^vd!OYo?4UT&j1+DvC^KoZNb#^RncZe3|Ay2vKcffBAG;WA!mtf{=zuZ7^m+#=1-j z8|3;Kk#_lAUJpnecYcdEZKfZHo<%J7(gm{H?b%=(Mug(gKyq7FHZT~al6(4mL0FW( zg8=1pVZpo{*0xhTh4(?2CG>Gd85i2pvNzF7-r`QoJ{F4}w1aO1DAtLth<`Z%J2x@F zIHLh6VkzqY-(nkD!*!vqcQs!ya+AS^%_}I+M%mW}^0&s~SGYey$t2Oqn{I})j9Lo( z@N?~n9ZrekoK4EwJ>H^`5#0P1H#1fdB1?B|Uz(3ov#)yQ%xVSNmqYY_xin(Z=@dK93W z39Bm>v?zOnPea33(LN3y*flb`On6?tl1>X|Je6I(9DEgz(QtnpA~OQi{l!W4vm9jw z8k(~rvqYZN>i-IJb^y)`V)}en`W62|WF7Ky@Kli89NJc6y@NXxyQwmOo>%n=cU5Ea zZ$q@vzDlK(*Wkdpm4q|hZ#79=OFF4Fk+1a!vJ8#_TRk{M-5zb|}` zfAQbc!stk_fqxwJKX|F;HYC=KG|Op#U(P^*kdDwbkHyaY{eELHus9XXk!A%W0khMf=I{{r> zRyCv?PA_V0uRDj}P6B~|0*Y&cN^_C^lj`>{=UVP7a0A}r)Q#*?uxdLl-&JbKY&F5It}R@co!!=!LnKi1@+7r0Aq(ZAvDwkMg9uBOQqcjxjf7WP0}mkVd`6w|Z~x_y z1G{j!_tWf9n98}-fgV2{zdGbiRs;q9!Nros<1Ru$j7_?HVn7kB?%#<5P4Dof4dX5F sfe_c-CPmyRtJM`CRX^%<_#J9u4=;sTMo0qkMHQ5sl#*nnxJl^$18Jz_YXATM literal 0 HcmV?d00001 diff --git a/web/public/images/favicon-160x160.png b/web/public/images/favicon-160x160.png new file mode 100644 index 0000000000000000000000000000000000000000..57a1ef1910d99e5d672d9b28de738cbe687f88af GIT binary patch literal 1405 zcma)+do;OL*f>sshIpkJr1m5#Lm2r)|34?uJIz?wI?;Gp4 zM28m~1gB3;j@GcprC8LZ6gCx<>Zr1K2o=L+h{2?-YM70IqWi0|1b`&$NR4r;wTu2! zz#kEzeEsx^*ev*&bC~KtpT;(|VR@qtq3AHf)v75byjc<9(%k^M(uqMIu&E~26tJE? z3^1Q`&@b#K-U)VWOB4iCg31bZu}Z+~uTEf8`9RRGVRjrYVfxXKT=kP8Bdep)k!d%i z2nCS_vs2|+h=y3KhQd&f=0qToLsCxpZy0RnOLKdsr=@SPNBm$5vaF~I&#Wfan2n_# zSw#(lLXnsX#T_y)mXyr_Ve0xu&YK+4ir@Q2%s{z=a3)H}T-~Q39OeHt!JU_s(W;DJ z$nZ6iC4hPvJpzr-3yB8lX(lS8b+Hj~K1YZf-MiC$D-JAp><(izSy_wK{nuJx=@Ul##msOmDXRafu(O{us4!`=405&bM^^fUwd0btsufy8^awW zyt)&Lo=310k|TEdzh3XABQIYpGbS}fsSi8VTwj%R*_eH*h(kZ6>?L+(P1aiB7Tq&v z|G_E^l#S{e9D2;|*G6@(%u_kp7gWd4JwgnalO(vYze+rVk4Znwv&A9yzFADC#|K%2aGmXc*-+0+k6Lj5ny$O^LPJM}x2|tK`)D7Uw5QeXh<1#QubO zkJI8WhYaNp*Ajr6@E$e!N%I|Vs5~f7vy>X@q&AM3=U;v)RjvnjMRN5{#FuhbQ*sH# z4kLPm#96FiO+s($#(B?Pn)&Jk{_Ph6Ku#C7-M?@OJsKo;OY!LS5$&OAc?RdfoOg+B z|4X~pj~`Doo*Dp4AZs#wm$5_>97W%4lya=V^o<^%F7^56cQvC-FCfnZx3BsvFs6qK zsbD9c<2596B6(zPp@{Ubt0rxHGuV{#z{zhcI!?RuhVg9-8g*vCjw+AH^+zeKG*&QHKb+> literal 0 HcmV?d00001 diff --git a/web/public/images/favicon-16x16.png b/web/public/images/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..662c92a315212b5b2077e11c6947b1367ccd9ff2 GIT binary patch literal 277 zcmV+w0qXvVP)oT z`7^s9fBo*a;6PH24H@LDdd+53NCi}|L4@6y;R*h1f)WO0gkM@Aa@{~-xFe~62NfXX zp@V4but2a!IJD;6fzNuHVb=i>ez>vc|BVI+Y9dj4N*(Y5VbBCEO$@3*&H_5986f0X zM_y=iCBTkbv!Ugb6>IVc-dtb>`Sm+sV}d&iSoB9kqg}Hu_BGDDr0t@WJ)hAs@c)#7 bFyMP{?$Ek8o4%+w00000NkvXXu0mjfFD7=i literal 0 HcmV?d00001 diff --git a/web/public/images/favicon-196x196.png b/web/public/images/favicon-196x196.png new file mode 100644 index 0000000000000000000000000000000000000000..07e3521902a6a987f024098446a6d4532a521a28 GIT binary patch literal 1351 zcmZXUdpOez9L7gKmwAZ&EQw@xaVeKsIBvOaWmBvf>w0oYbUCt;CTrOoY|SmkaS2nS zi$Y07mTkB=`dF3RQd#(Vc@)X9fg<#?YDhj&(-P)xXzYkcLMuqwZu_-#UJ=m> z+Hy-_nUh3eu!S)#AEGVAU~)HXH9QomZbCGGPfu|c z=JrJ`(|i?LD9sDryYyaYl!;3!)yTibHCR3$wuevIQ^FR6cP!j$o#)HD0am)E&(I4T zEX1maw}h;RU~i~_ElwonaYrUv*xul}!Jo6&v9<)q7z{mZv;Ef9KqiTGCdi#s zuh3e~D|D7JQPMMO^OfNQtY0Ehg_%0Ih^t!|)tM<_sz{ivoPG;%-CTOD{yKZ|KGl{QyzxPYVy0;J79&V-5YAO`X_sCze5OYkPjxOZgbFGB*M z?_i#Jv2!|bq_?0Q@g#QoG2_@4ww!A?amgdc;b_)gDHq_txC`M>;bTGWfTzRC@Z60S zAWT{`ujOJ{Ts;T&am(QiW1I6$|0=Kt>pKtiO831Va0QW!EuX?{S}Lk3Po0ulzLP`+ zK)Ot46ezwthorc9P(KHT#urj8>u$0(AH8jhKu4N4wf@)?u+ztX=>$9ZRJm1b!cUA5 zn+9Bjp74lylfg9O5+ZtFw9gCsIRLb-&99O9oOjL!EX`yl*XyKth^i;V#&mS#rXWt& z2mfRvKB#Y1*>6@`$FPM~%etWaOK8CWKlQ|KdOqhh_-g2)i_F$x#5$vcC|DV@`OWR| zz)HDx#QraEEqy1EBsE~l>w%wd- z&>TbE*+%SwOpPIbsXukH)sEec8*q#tWXbjvG?f7$RcHFn9LLr7^jR{Cz8|XmNM79d z>h1cTNVfLaEj!F3M9ribpy^iI?fE<>BbboLcL9wr7pAUlk8mOp=ps?*+*ol5Nq}Ov zJ>a@}%DOLR1fS@qqFONNQiF>=;eAU4GVa>}jdA z(8vy>g9fHQw@rIrY9y@rdVa2F<>Ld-El*c4Ffej@x;TbZ#O=L!y{OfI$Ms^e zfQQ7Lj9>rleSJ6+o;}l?{PmS>(c$^ZZk=aa8470Ju=o=Z^ggcjD!U|ahkvy~mEgt1 zL(X^auL)e7vEmi;!Y590i#A=!1Tt;6E`djz1n(63YMc=keDc@rL zgbj%i{k#w5EDZQqmc>kCoI8W>ym3Qdg30&&Gj30>)T#UI`-JDqVwoFDf1hDw_|NqJ aA-C;LxtGbCSEvKSjlt8^&t;ucLK6T_ex+{! literal 0 HcmV?d00001 diff --git a/web/public/images/favicon-96x96.png b/web/public/images/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..32a80c8c0d1e63ee2b57bb4407f4a9ee4569ac5a GIT binary patch literal 919 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy#d1AIbUfwZ!`0+DEcQ<5Z517Asy zUoZnB1M`I2dzUsC{c(#HcgvU0VqjqA_H=O!skrra`s=>e3Op^>&Axlz`(GH|=B%l! zqT?I3dhwb5RawFH8`;&qyuP+JdcT^5h~6vibXFIZ)eJM3 z8jCe!df5f1JI{P>RVW{1W{~)@a7sz%MKi%im5J>axlfwkvv@d#W8eCYfWv)!tPKq! zPqKv{rzT9Wl6|wp{zJsc9oO{DgIKpT#&>^}ln5<;JXzKuvOpx#AH%dI0O3ZeaG z9IC3@)u(}K%tGe{O<$XKG?miv{L-Orrw2Is`>M^zjO zPu3ZfbH0htDZiS4u`~KnIoQdS*Z#32ppP`kUa0dhdaael@Hc#wR`b=?-!Z;QxR@D z%uZz@26pUC+NXHE8_%4mrzC z9_LS3Divq9Zkk{suS3QTJNd=Icb?q(sXJ+<^n8XehBpPfod3_8;n4E%;TDG|h7|S+ zrsn68ZO8d-E=@X_b^0s6(b}Dzl?)4HudmNuz{6>jBsW3#-McG(Jr=S`On*5J$Uk|1 zoS{l5EX`#}r9+(a9)|K)?pIx=aC_J@-pIWzKVj3DB=h|B(v619$rth-&-Y_)xwTrp((abiU;l~xlf)9GCfG{n8>I&8nR2R% z_{=_|U7h35r%`3?am!-9>uzSD7MHm#zXE6VF)9}PoX23ntj4f=(T>aaxfWP=WiwV7 zGUOkqXZYb#zkoT{Zi*C>-&KhRcGm<7rsW;D&pKyq{JR4hwYx$z8nie>YYGYo^LtDnm{r-UW|?zM2D literal 0 HcmV?d00001 diff --git a/web/public/images/favicon.png b/web/public/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe1615d6e4bc95bafe4d5e983a4589d32a46e29 GIT binary patch literal 542 zcmV+(0^$9MP)kdg0005yNklsx27vC!qH%RT~?1HpfiXz2Ps1Sr2Hus zO1%+w{#@9FmNtuynN8yO)6ucBpVWKadOh#EU+lv9-aYkvPEWn{lmGu?kRk=%s>T@S zCH?fU3<*z|#8@hjmq3}L*ItOy30Xd$AbiG?hun^BJ#<}4}F zobozNTClZ>940)$UW{v@Kt=c+ba8;aY@sobXkaT2)4@OoIVSnR6lFg1nv*OIM4DO2 zCfZ2Q#zxliqzb%I>L{&pf*Hr`_}ydr7?Ix*a$S>2o9yE-Efc*+MBA?Pk(FpSViEF5TLj2=W)!%j*V%2X)v zg+tULT-CrD9ue2;oZu%fNU@u4jx)$Nk_cxsu$mn-sP%S=9QMuH$GH#gdwoJ4t{v(G0@0q4iI7A8km0Pgci7 z=}PVLc2%r;NC0XZ{i>%Opec@p!g zTn~tJ>M^Uevh2w6tD{lhp^Dj!r@z=$b0*~=J>b5O)pm*vwd?-oS*ou6(Axm01wQV= z6~I)U8@jDo>~I|c&xMASWoNO`tr`BBv#Z9q_nXe$sj>9+lNXDIrxRtDT#JbTBwIOK z$wMTQa~&1(4hWq<7DLsg<|w{cE;H}uNzHeI8cX|xcE6J@7R8VNEfabNN4uVuGA-!= zCaNIk7XvsrxvKLO&;#sKZ8t*SpVn#QO#_w*8!!v*o9}*Zx117}iU9~AKoSg4$;Ktz zVh*A{|Kvi~faVHxgm&peS)Un6jl*GJ3- zP)dr#$o(H$6L;4vDn^pH%`7_W*Av(AI%()xIn~l?-<4jS04I*b7V2RsZ86{^0U7$H z!Bvom`vyK>f(n#SV|I`LRkPy~ZlIDR@z<3`dm`Z8JW57jd{DIyc)Qa|jR)vKLj4ns zci_YqIIDf~4}jOU2c6MAXOwegwRt4jrMe;kNMt7iiF_2MfOq?QVCTtNkx5^r0KCqL z;)NyD&f`2}gW4I&OWQiBM^x<%ZhhaU&UUuowdJwAK`pz$I~5)Hb|m1Elv0vf?nkgT z#2|6|0$fx{xW!%0PL(-dWxv%D*Z2R8v-i)kGyWj1Iwth9dTs~Gv${tx@cs*6D`Arq zXodoe1ZZa2ol?1kB$Wpm1|~7E>%_b10sq%BZoAi|y-ZB^)8&iBV)Ek@TUhYtXZMGP z|Igmv_c)HMUv}tPk7{5TxMTnPr{{kE?`Zh6Vi}mhAt;H=O7+RCR&{HmQLUsxWH10)%}$+~Nv6{=|kO;Mu|FpJsks2H-6zz9dvWyG?uk@dZ%n z&+|P2x`?f%0BbijXKP%+b?MDU!R>Us@teX(UK~rN-_IhO$0R!Od%?~UKDd7<>Yo$1 zHJA%r>0Qk3jSumOy>?$}>`_13*7d0=enCP50TieOv%j6)?oyz5fgY=U^>hH;~ zF5T-Amg?somg6V)Mia|7#eOy378E&w>sSH84*R*Q)iHxYJRrdBrz#+TK=)U3X~i4A zx!d5-@^D5CFNtdD#IMAgUkyOrr*N9U1qge_Jzm)q;4G*Q0CXo8ICXtf>>Gcs7|}!p zEUmt(@_BVg)vD*R^?l#Ari%Mrr$F_0N|*nxG&}(;PbS8zvg|L`vc93>avS+jB^6Lr zScAZRWjJ8mv!K`t0IdSwQtWeh<1ugN=4F%sbliTe^`DsWEAWn|_2Ecp`|GxArj;t7 z0kr)aptj_V7lwNH=hSjPGkGZlfVW%8D_rpR(orw@E#X2pe%%SI+h;a@1%TuI_iC?3 z6U2(C(h*hxfJQ!pUvuwhrvJ5i6;3ta8^BZ`CDrp`3)`rX3w&?fWhr-RnU7<{pRBA)bh=;zm8nv z_rryIepOY4KC)+3)hE1C7R+z71@yoFpa1_?i^KazWqnEj1Gv~v>l%6+FFUl+nE%E= z|Hgtv006TcSJ{rDIy0KB{k4{~0IHw%9~e-9*`BW#;2P_H0o4FzNlTz&Yv25}@t4)v zgi*J_9K^M?!Ak`U+YbTs_lSR04-dNH2v_>v6g16K3c#`ZBmI?Oht*#qzqb66-sV#= zIp9(!)IGnBJ&t)bT<)$_0orl*R*Y<5s-Ud4*+}!Y#lF*)o_f01&h#~N_8RQtx5W*B zI=9kob-@bAl$z>}Uo}nrF~;orR<_VV1*$`n?Zk#b+)goo^#`NUb~DRmMx*vJks)Vf zv;Sa^IYX90vpZM?{+(sqH{N=V=i?((0_fBGP&J;%n_}NAyYcJ3lY^JBVvl>(${Gf^ z=wpfFovIdKDG5|aQ39HJQJp=tS2T%Q4QvgN3ipxVsNTze0{~P-AQy#zL2lhacSaF%0n6RCMu31DyJ>q$#<{SOX$bTvQLEFz0$1(G=DIad ze=tRH_2ODFi-2?rxW1BZLp`Ei5m@6RIV~Vi%5z=Ww+j;!FNE{{Ebm9=jh85>CCBIs zmftFhZXAgLpw28c5m3D;_GwiA-O#d5U(tm0GpX>u_{%dy6F0a577yF9Bm8G`_*3p zR8R$MZT&FNW?lqzG#qhF0fdSGs=-ZwcDvYCVHp4{6%p?_MpsLRQq#kAF!4bm zsR|XiU<3?NgUhANa@mA>rSY=X0_vAmcA9Qa80y~LOg+pusSd(o)7ZncF0e>x3DAK8 zR{d`25IKa#5lWRWz~UKPnCh{X;(DH{-;u8`Bm|!~uI`>!9GGM8)x~(L=}he{#XirG z|3q1Kx?lUw<(^H-RKRsXJdi9mi~{N^STF`qS9RBB0l-@6-o0Sq06Pgg1%Lp$6u|O^ z$GvrGu+`SR)e_KvfQzPE2MqXdUxVr(8`f17 zRj5+c3jxa+xK>?LRRmNOg-caI++s|1joLQgE_JWr89+At3xKs&%7_D0tWps{r%MH} zu96B{lp8WkcXf03ZelHg+zH=2)(!0=1=m7VaY3*Q2Nh6T+q^|x>#8E^v=br&5Jr&6 zpt#PeDi{E%uB28pyN(2?KT+H%a6woA%#&NmVF#nyI;Q@I8|4|R$7|WiPv%y<+q5-x zk`7)D(bIz0FP0FNze3V*o{N`t0-#Us>SA$(2|3u=*E);9IZ66I+ZA_*_jRlVfVBXY z3o*Cuse#R}H$+zIYe}(hRIrOKRZtxT=3t_y@_^Z-TMb5mnX$D*1ZJj6R8Pd^?Ie%M z%r@Ev(!F9(Z?YvMjVwD1y30EZPSAF7Lmwm)M+y(^>@$BEex z)d{o(dO3=Ptpu1E0hmzfuJJurZKnXYJG}(4G}gwlgNr`nF*|`TDiJ<=_18}w^+xp{ z6w3UT2~&Z<1aLi14f|FUzY{ldr3(V1DyWJBD(CpXwS8mRUMQ*p*Sd@ zh64<#Tk|!vPzA#A16!xc?tAqbs!%J?*)e6{)g||tp`KQE>&v(lbSyP~;?|VvgB^qV zyRSdr>s#>s;aeB{%SXG~Q+PFarB9vtO|fqb5@UA>B@AGJDzbx`vf4+!E)?mit^%qu z0`Q(+w?75o?yJj;E1k$2ftIUXnhFc4)e>V(vjlh) zrU4lMz`bU;F+fq(AxOQVT0QI-QZ5QYD##8O$hONU699fhw1o=DDgjkkEkG%^+*`2L zKvUuRc-5PJGt;ID5T7fuEdY2s{Z!ugEk&LAra0{C`3miCihX010o^W_gFg?(kZO8} zGcFZ?f$rqg&&MS%sfG;*>R|$xOI=Cv&YW1gKmCCbvb3eG#a!zefh!d#))CPHms`Hv z<%2{4XJ-@IN8^d=MHIyV#Yb6ex!b?j2i_c2cZ%JW1SGJpv|EM102hdbfE;1@DRO-& z5BcI*OaOOVEA`h?$oE|OTng;9JeH?lH^Ee(^Bhm@zxznT(VJplpq}5$V^0YxU_`1K zA0-=81LG)R$^}rpS^j*;Iy8rG)O9UDXdHyrTI(b`S_NG2O8fInVB5zj00Azr2Jxz` zifXZQGma|&jFoNIO&wFg5$JLs{nSN)pxyRGy-W(^=!&hw(sEC()gx_0j4IcFj}kdm zF1>M35^ABFQ2UuBPX&C%*X4N`Wd$VaOXbZ_|IrB%>%7eqrmIz-*owtDst@b5rxw5k zcX5MnDfW%qxhNQ_-eop`9VJj_d+o=q-$qC<(RMa}43zxB1!`Aoqdz`z&M6+hZypG}Jx0p7dOJw~s|8}R*c)$*OF z{^PW30(GnHi{;7o?oF|8s25ZQm;c7YL^)&A?RdgEHmuS|sZxOIG#G=bi3LN+bk91c zTY-mHdI>B*2B>R{gm80OIftrfI9bMU;jgJjJ8fUd2IPY4f@2rCh&s4P zRUhQk0C#pB17JKXcdS+iir?;4yQ&)34{S)4v19+`$-cO;I(iW6WawtqTKp@LYy7dg zUa#GbAh4v;)C-Od0vB|0Hv;<)iybMlW=0*IYj;}i`yI^OXutn;Ee|##GqWG(HaI^e z!tI2+=OD1Eq5#=l$Xs_6Od`T)!UZLe)Hf_7ooJ5JO)t+Cs20sa1 z_wH=6qx|-H{5#gEjz7hMdpSj$MDy*wSDAdUjC22k_vaU5Pt6y{_jvTvDq z=Le-Pgfu@&^qvE)?k3@^(Vagg*5gKBYc~X)n}hV^$VV9^;Q(WBFlO-doK7) zfc5|cxO5@_Y8~#y7IQc!^w@o%#RoC6GP$C;%P{&0FVgC)W+X7JC8Lx^UPS#DR)QA5 z0P1*!EOkg7(9`Q1f*K5p27sO^uk!d^I*BClb_@g#ZRhI8EW1Br01M__g7hht6Ck-g)``J?5xhWcy*uwTi(7bNys_)Yw|Nnp5-+qnWj zQ}@qKT`Z4yzO_CeTJW*ncXv ziV9TO;o#4WUkg186jt~5eg|WZ;l%W{4b;h$7*N;tCj#yC!><;cqXO#likvr4Ux9iz zERU@l#$SY~KoESi{Z}vj_}+@*JEu8u&rTH`iq zAvQ>LVK2`OtV=hq=*I9@`al}E?xD7_FM>@~VW#nqE1wdC?R z4LVJ}p&l+n>R!g37zelZ_sqRKHp*7$A^;kQkhR-naHHh+#Tlad8x+W@zMtw|LM~sv zqDJ97!*G0v>Z^z7iTs`Fn_^$6Ql7g1caVN^iRy8tRg3{(C$T-_e|TS;oO&a=HEV)e z8<)7Z26gH=d@m#3hNw@*4T69HbO9`20Vr;+&PWY)R&8mCQagEHt_c8a=fS-NW!+n3 zs{q8Axes5y*CHej=STfxSzRz6W#~Q2`cJD#SG^6)Uxs__2oU*1Hiz#?eMikFcvcF^e*;X3rtix5B(I-4z)*&{0=g=t0>7JI)jv1R{vZF>|KJ(4 zd>L2x*Hv_=+`$E0aQE%1eq3bZEt^o)vj@4{N4D(}mC>Fo_dR(^(`Cn_njB-Lsy_{O ztN^DY@5ePJRfTn!$|GjG5y0t!GsCh9swGtd80rO` zh5!nd3Oo+QWUT3_8b=`Yq1I__s?`A^_7P~ke`oJtX{`P_?ir@zQ$I5 z$!2gt?-vtxwHU9o-!)F_Q7ByE3INpa7-#htD(d&^`tfMSOQMmU_Q4iKWAm0D=`X&fd8DC^V}lGwqGvoL|qi z@iVi3-xXDrfK?Yj0LX_Z?OHGsD1RTESWoxk){&FfGbevlMe+CVj#XY5>PKnD#2}$V zmfb#2#7@mC?j}v#=SQ6SlF+p3nA;GjpUBX6M_S@qI^B=Mh6`3HU<7~yrQr$64{ia9Tnc_OGQ+m+wytQ!}}ee(!|EH zBoT3!HgblRYb^oybZ+$+(F;DZPIu`sz?;xy)iDq-D5OHRH?|QN!Ut23KeM1~rQWF- z281PJQT4-1v|KQe6fOYsRI%@y4!;5F%XTRiBs*2GY8ODNb*Ew4#bXO=&$9oF2d92i zU)BXcY&frTtoE8x>>KLCXF+I@0qjYlQa>YTp2eK3Pbx#S+M4wc`MMGR#}efBlhb|* zz>a~|Pb-bPoLU;W-7kk&+eL5X+I|1k!~j$$h1k~(d>l`EAW^*KP1FZrI-ok2@7IM( zRe;x)prfr7iAaltC|Y_VsmnhEZ=cGdjb9rW5@)Pbw;;M3x5{!V0Z^lpec1e?(pb)e za6%utHT}jE>*5g2ZxLTh&%G^yH?FcQn2&yC1+x91FUtZ`ok!CO6lW;|Z+t6eYE@@< zkx(+YDxkPij2o3>1>mAF@;s*P+&g;7bStcnfW{7qtRPR)h;IjCnHmDH0NKI2|GD4I z{E!`%0&UGSN=Ku)l2oBrm|D8uYwzXw( zEm@Q-+JE@CGj|Ho>-EYh{gfhh^dY-F!Vq$};K7YB7<6^(Fdj9fc#cw!*(>KQHet$&vnNT$>K-IR>dUO6Y?1iVL zs&`y+?TOkH>Uo2yKEJzP^q8JWl@5#4PO5y!&4a)rYpRb7da@nazH)8-Y$Y(69J)J83n;RCt>9b$Ms+JWTNyXiBCm#J=}k;pbz$#fgPu8RG&=l zAq5N~d$_t8z<=Z8v{qL@rrYB_ZtuDh;K^2?j^E)``}6567hoNl124|hvhZplR9$e5 zK#M(MDWxjg6&K96rb1Nr8?~3pu{`~L>aJ=6g$1L+x_FVr5fbkLZc5@qV}6}s*=G{aPn=hpzWyWK_tu>h3Nr1rE^DoYe8S3e z8&~$*xK*pKW(81RCocA^9%}quaPD-Y9tfIxiAAS!TlGo4|5+XeVSQ^t=1Q#y=b*st zh6FG=VzQ4fx?3F%{G#VHPzv=?omd@4LtSCI_qblnzWv?jt?|`vW_78+0AQ-M+V>3r z81_o|1uziUnuxWASpvi&z!In`hF4Tz^#Yvd@3(qXnxJYX zqWYnBXRTE&taabU)A#yjhAXdydtHe7nw<3#6#EWwD^*xQHK10zbWPnUGk3r3^Tm}a z^*kNpx3etJ0^2jz<2GMByUL!iPKg|WgCW`w$K;wfp-`1nq6iFD*R6-Hoj_Ou0G@>k zFm*sh5)cTWO2Bfby}0VMfZ&HLVL1>CAtTH7T?wFz?BIf0L(v+xP6%t)xk7#5%*#`h z;Is|SO&MePOQ22wc&kyvm-TQ~wtq)v27qM(*pOO%7<9*K{W;CQ8gG0}=+5PT```aN zUjaErXHwl+>1^XEHiC=vzR=eh5a5I_=Q zD1sm;bbiZ^h&vi))nlpi4RosB+<(sdp$=q+b`rMxCku-1ZcEOWHk~k(R3HdP0C~u8 ztU&}Jk}{*sC_0i2$Is5YK7i{(JDuL<~ zj>NxkZCCOylVZ<;fBjpBuB#lP!Bs7tHX%${!N4JjRw{6|b^T0FK4_+XgCIKqtOs(6 z4f>oR@H}-CxY?i79lt&X`J7X%_rp~Ifokl@wIXyr9$x#&+P@eP*91@km;h`?u0w^O zg6fKeLrb91x>^M@GyC4ErFBi<%DS`P$8k7QJ)1=L3h3NTm3RplFN-^y=+yYq}%e>_z=F5;D-zEtV{cfHuxn+;<3EDKzq0^!ym=jGM{p{lO+uS50e zV{*RxZ@&wp1JnZcpZ9pQQ>qK*8T-fM8uWOB0~8y<5@1h1xGfvhK1>Ax9`htGuyt56 z!4oMk0c>mE(w+Zv>edZlQ3MPE6G0VWGE{6>&e&9dkU(lpB|grUV~YKgI;midi2CC^VdER$juY|jek&0D`PtADp+^;djS*h_^ww|Z14ZnR z3?2^`@re7<=%=e*bzp_<=exAxPwUka;|zE8ZWW*t|LQ{>tXliTkSGD58|70e;R1+K z*`2ny)i8IrN>u6vkx^KKANbk1I|{_A`CzD3J)5ik)~TSXpH?Rlj8X#Se_r>Y=Il3Uhnod33otGZx-a zY<1u6kYa_tYs%fRENi>*L(^|SP}8Y?Ppwir%80y#6K|KX2xi&r`nGVl$*aum=Tl1v zU`+!GssKwRwgKOpfoDdoWPw0M!L_59huyZ}etiCZxfs>zlM0~);80cRs33HpnDN-i z@?MH7RecN&{zi)ZM+vgVG2}V8_|I?_i*g>E^E)AL#NznuBwlzq7d;=g?=LCfh8(Hp1DLl^;}jAw-~F(r@#Na#0p`Z+?3j0Sjka=C9KZEp8yrRK!uRW1>5D* z&_bZLPU4OcH3cvU6`Mdtf>ppplvQCAMN0t+@XyiG%i~-aO+DXhK47$6W5j@h8UP?b z{la|d;JZZsw@9%Q!1C>*^u<%^V>UfHe%|c6OW1yceEfJs!uRb$FAlxfzP~R`FfIt-tCRLP1f|8U8AYx3!(SS-> z1~iEpB&mGT;Fna%OP(+LeNOM*z5e}Qd#(R+!;JXfq8_yrBtQTY2)AhE-0y5- z{&XT~F`bee1L~;sWGIdLNQ&$>iQfR^L)W_EWB$}uvL395I-gOL1@A%3b4Ws4;5CVy zk+-&B<`a~y$(?NEK&f9YuP&EZMcTqWZ+L(=yNPBIP(dgK%mGQY;Up*mjVKZ&tbw?N z$bM3RYXDpo5VGxtQ#sg3xFMHve@P_x%e z-hMVpf^r;abxIcGGgDIh7Xtv9g&;F<(>@-XSazI*Ml?GpYJo$?z=3A5!qA{8x&nDV zL962l3y_rKP;aw2*3m}I!q%NGOa`{Rl?t3NH&YhhHd7X4hFpcJOPda$ID0;F!$;n@ z;f>Ec{Y*8gtY8GTZr%FB2fu&kSHAL%JHMU}OKlitc$!373PoZ*^*bghUqpu>DTIix zNRs4c5Zq*muaCelWT4nv9?NobkTjA2V2>&Oyd0Hhcm3TnTIbD5RqV5tX0yuxBdrK< z2+1$609i0eSPe^;lO>DDD*-M02dB_J`*;Gek;V`x9#D1#`5!BCz?f{p+-d=vmjhk4 z66PkLe2(S1;TQy)m(-!kB7a)a!74#hu%cueOcyU?FFj`2ZcBqvHES6>`+N*nd4qW6OKvR`0-oLJO8|v7jz89Yu2nW zv)eY_dd-Kgd*X>F^7P0UI-cT)BV=YldBB{hs>&t9_SRxnHZAoG5WAMfFA4-D4T2{1 zoxv-hq3>^&=NWga0YEN^xb{pPKWlh=5)Epe>Xm7(S(7LJGfl|lTpmOd-dwBp>X*>Nal7tqmXh+hj?jPBNui*gH z|Fuyloc|-#-u~qF9nb9WDq*pt8WC1ie*6h1tY5$W z&_fU1y?eK$OWyg8GhXrXTW`7bzD@T%{q)l^?Wy;K5ZpZ&Kvh+bZF{V)>-fF3vEP(k z2a7Oi)kOM0l1#Dmpd_UtkB!h3V(m>Ou$*yfPnc@yXvCIyA=G9@Ov=X6&#NkB=k{LU zo<@CBd|gp1924cPBaYl`ZGf4R_jdaCC-dX$qXXcwZLsCkvZme&eGXa~W#{pTgG`j~ ziupUF9AC57ZpMs(!DX7`MvS=qb9dbSncJ73aS6{-y{EmX1_A!}2`{?Qb)) zojZ4)e9Fn!Tz}1u9XodI+GS?DckNEe>)Lf|-};ufKCt;8)8Bw4y%81XrxJKjG&#xq zoKPqkZUzRDDRJMf5fA|;Vl$zZS-$2va!qBD!GsOCEZ80p0lA`T)3 zY#0DM^6*dp_VT~J`x9*Tb4zVVys!`q#F^yfvNTwtu0)Os` zXqJzX@7q}^*S(TsCYx+jn&*}L3=!g8ObBsLX;hh;)gu>Juq6Fh2uCdnsQO;yivzpj z#et%*e>Z&XzKXok(B;gZS@wG5(Q~jK#_2!(p_KcezGoFMzx^X}i7c_JyLwdjagH5w z%D$+ixr%p<)}&3`lx(CyvRLo=tM^>`u0K2S$RpF^jHAK#e)rxRKYGKad+rTZjYew- z!QBt3)_mvxefQi==Wh7Z4IAFP;rQc^&+)acYe`Kyc_HmjYZDIYNT!KEREXjnLQ@4u z`w0MmDL91W@lhBSQXU5Jn9VX2ZUIAXH6DbpAOX1Vll;tH-Y-!A8b45;Cqr3CaHG{F{3`>&wCpo<$_h<;%#>(J+O+t1M*_`C-Vls{}n?u)0+SOPQ<9jXIpb|9W zA`oWE_GglJ9i;WAuRrRjqsEvz8ja#{#yL%Az51;2-woG)^s2wVdYt7HQ${82-m&|( zTW;HU^TrcTI`O3^z4VA9ju->&XwB&9r=C9bv{Ns-=pw+~Q!PD7uIXOoO3+Ti44KSA z6>pCu;YHd{(Hhj`L3)|tl1h=!d;pgQJxC*2jbpeBEF@PMGmI20^0`VMTy_%Pp90q~ zcgQa<#pYYe3(1Nna)AA?q+raCT=l|?N2^g-xn0i$R#ktiAk#r5QqfYx5tt2Sdtlqh zjEFjFaX`)9VF@#3bRHoL7+1tDr74ZGmcI3^Z*BeWtuHzLC1;#*#@e-OLkNHI-oHF; z{rVsO%a6wa;isN@>iZ9V|Nc$)Z`rbCRE;XH9{RV3e)6wB*^7b%Nv}HlRTp1;aR?#T zWsTq}lM-FyU_@%`1W9s)5ldQKk$X~5U(%!Zxm5h$!3N+OA1H|hpfX2B*X3%DvQ z7&ej5j32G#Kz{E)4{KF%H1Y-&&_4qsy`!Ny_d*e6XI677SdOo&MAE0*$cz@eP<0jH zYiLU44`%AWrF=f6R%zm2f&QkhpAx9zD|k|QeWz@ai0f`4A>CCgv9RJzG9(m-E&wlE&AG`79-8*-=`;;Wm;fEg%NXkK`nyilsb5lfn zB(o4Fq$~(YfVdn=KD8a_=XL;cI}iT z?8c2ZzV3q8l_ue)dp5o6(syt9<(4StU?FARvSg zKVBP#ChAn_61cCFZ*@~C;;FK5$1=q>phkI(05Q@aA@)O^&Af5FJd`q=gVGDyau9$i zjF8lSZfOhTa=f&_(aF_^Nn!o!VzGm{S$Hlt0n7tdGVQgKmYl-Cg-qUKkVd_PrmR?7an)qaWDU!mw)0@pLolKZ+ZOj z$MYtAK)Z5AhX84KlQdn6^q|T1_KXKe%aA;&hK$%>$N-2hNZBFaSdhs~rYLq1_W=`T z>Mf_TYl%*Tt~^Q2lj|aBMP^_w2nzJX8ha?Ing?YcAa+36RnW&Vzbm?X5FKQh*cpCg z{xp}bll;a1>&2J-`DKqj`sfvxU-6B*zOio2x)=-n>OXw-){VDbf5Y`>pMCcF(@(qV zx~txK$vc5&g{eY_GS&-WCUXqMGAbPHmBR&q5UYeEA*A!L2#cBwmC0n1tRR#Pq|3C~ zK@<$f%oHTYBu7aKo614$dFJ$LwlG*O6qVp>a8rAhiJ~+#JuTApZ+WtJT^J2dc3Uin z9Sp~Ur1l}=!Lm_e1_j;VmOe2O_j@| z^X={FtRNHyt#QQ2vKJ`COX5dnmsDH;3u<;P&cZ$ja>w(Z|GZCs`ZEtauzBZ>o#Vvg_y5i1#~yp^ z$3Aw;uAMv61G*ya7)=V;!H_Mz>oRI1aoLUm?Bk4ZiKZ9=7?Scpc{QmE!c2Ps9?BzA zT0SHyV7QFLIbx~p?RpE69{^DWWm__!qh*MStPygR)O>}GPYh&HfoQ<&iPLtlTFzW0 z&5%buKw|AgLpXeHy^zr|DTUCt!We*wd{=O^T z`~Np>y6VGMZ{4zWRE;Ek@s2ND`N0p3+w~lF*r7XiBoJG2%6NzgHOK^ti+I7zXd36* zFuV+b7#@`(Q*;Tw^hMMb+!TYqGUZo49z18vA)+`;y6Xs;rM=4yGtHF$GDEVQSZ?Z4 zV19yp?K~64QDs)QZu-RZeWASb?qXZsEP3823k(oD5ZUF00Q-fXd`kgJXHR$Pxk|kt zSq|ga@6UevQ!`2OrgJ>z*kf-0{Ov#b!9S0|b=}%^?k;J>2)Oghci|cfR@lVk`}Z$F zHd^*aru?gC!5b*l^mnv@ZQux{3kt;)Kw zJyyEsjiy(U+`5>O{WXsaVcE)@}NB>tJf=P8ihoZp|AO`LvuU8qEMaOK~vSTeEx78Sp;H;>3_Nd$f<`^5$ssSc7b| zT9lV1TVN|U;$Qsm_;WkGOZi&k@@ogdtddI#A>>&?Aq1AJFt&Jd%#?rNCPTI^uXe6E0rbBPdTbM zDbtZ&V3Zvoc9z1y#WzW9L1+Q3f4mGzTcH?Asvm9oMce9JS_U{D|&E$ z`@muc^TLyQ=s#n2cD19~*?ISVu?OY&5ZUJ#Uw7{wqvO%P_xrE5nQf_#HfA9OQdSy+ zw8`w+mp`Rqg>mETVF|z_VFXFSf|(kx9YINsRX50&WLeZSNwQU6C|mwu`?j*NeLbc3 zXGhsZ?j1frtfT>50iGMoRZ?F>c4eFN&B%HWIpo)>U)hS?*rUC-_R=vWvDb<;I^P)k zcjmw(y0$iJXq0QH_U16JO8iv~nam~=-7?iB%?D*8#&>@f$!>@A-`X$|g+*fqF1z3$ zCuxA#!HNbfO9*^H*g4VjM%uAT*J8V?P-W>(4{YANc5O9gu`{A7^MfIp+uch7L;Dv61okUCK>z7Zg-g?7`5<1z+OlS}g-Q@d07?ddLWcaXC_6xG zw(_+220S-Yi&uR#Wi~CkYp?x3S6_XdB(*3JNGX!1I4(`~;FL7(AK+ES0@X0bB+Yn5 z+KC{_EPseB?L4avQ7PT2f8pGHTN{NCG9k&xabE6<1uPF$Y|C&rRM+~WP-du8ldtw76c8{J|lWrD|9MMlW8T99kYz|h5JR= zoUM$(QKDHCnSJ9HBi&MB^O5n#4-VE-g$r(pg}4C5zE@E;0!ou$z}Gq1U<1m!$rAjM zB&K74?bE4{N0il)Q5j~YiJ+6>J>P!xfKYy`Q&w%5`pCq|c=ADj2u@13Qv#>V1Fqz> zLGws0b~8)IRi@IX0J2RBS>?C@>6x{en=xb*_d#R_n*+)&%88ViSEu%tKyBv6epfMr zQ2=Z0>qi8bspMHY*2@;TX^`U0B`E;8Z1gQ4>s6JnOLcc%mj)|jqTs9fWb(Zk$`QaiIRX8QnW4FfR|e!)MhgC zaw2wnRYeMLK39D04uo#$N_<&KqjbK7k(Uj2z}k4oEaXAo?hre;KQx!@s=-|ab zcF2^pXx#$3cUX!hS`(oC)ES4RJ%i-fRNZ8m66MyJo&vMa6DCzgX}5#MKC&v0LXM^f zCUX^MAy~)O^rcG!J$R|Xkcnb+VPLWSqwMTb1`GVO2rN)>a2e#{TgJ1# zy(1BnnM1mYLaO33ZVC?+6%|^7V6>3R7v~*#=#G>rRKrXQ`9ZBh%H+!a#SzXa zjm7bi)Y=cwUxCfQYqP9xD5cQr@S}dS{nIOETA^s3(>y0?BR^XH)o}-Bbwh}-PKKUa zsu7ar{yV!v{_KYmg?AM?&YykQQl)4nDHnArVFso`+GH6T_m_B?vgZ&&0eF>vw*7U? zzN;Jtmp5u4qt5Nk)9;dna!;fV1sbB^TmTfTn>q2R)T+q-=drqstFcnqnRoL43<)uK zDH(oFZgwPT`MjQVm^An5i?S=p_Hk^mArO7=A3r+W4IBRCWiML~JpAx~-h9)>^xZSh ze8p>DckZ6ud!Be=`%O39^5m0GKD(PJHgg99vVv5}3UpR0f68fn?Oet`tKpezxff7M zN6Nn_f8Cx9CuyrKm`~dbdIt)#pC@`EA=C z+iw7qrZ~1FDDl*`DBG#rFn(~BMPgvyQIPVFEbLI;*z!W>$X)tj1H!E$jpB&10_Kmh zZR0|#4qpcw40!6Pr^Y?z%q${koZ-(rvtz0K-1hC;)0nEH7-e;LVA@T)2&Apf-QCR2 z{M}bx`JoS**|)#_oyQ(~e5qfa|H^<6LY7|J4Q9%bM>WbMlqD%@Nf_x8X`8f%S(a=8 zGacZ151{?0+DTX}*+GPE|zx}fDi!qjO+qx}&5LkLQr+OH3b<@Bsd^cJKt1ash#5^;@b9>g6 z8j|wC$zQh@h#v5@>m};}VjT;b;~;jbZT}zkt~Dl#D+=$O8JxA^t~~r93Z@k-RilwV zwenD0YOQH&dH8Ou6%k8NiLnWdwVF282in$D)Jj!QYlH$y@sYM5K57*ev_Aj?i>P4v zf!1X!C@jqFVQ)HY$GzfI#szx6Ow64-cQ0X0&c`|Po$s;~mZ6tImLNT$s;QWnIB`N) zScreX2pCsYnhOexO0Ja3p?1iSAu%%}$BY@>ub-RQTwPRn=E83mUmEdZNJ#LsX;Xo% z`}gm^IBrp+)q1t`+UcS*3*LXvcer0!S=o`?ye09Ar%sJHmVY8WeLu;CC{;&920bTU zQ}~#pe575|G)1Bpgq_xwk?OxoIE-gq%F_S07{B&@Fi_;R zHk(aWlLAPlyLR2`rAy;T;g?`VQewxkcPU?CjDcA*_J22gxS#wqDQQ_^LXuvu-}2=~ z5?)17Oi26?#+iq+fMS=eNc8jbt*@`2JSlAMyg4v$wf?nlUxusSg)9Hg0ANXVb%$)C zeHuV@_E)5p>b^|OIp3C3Y}mV+$W^mO-;4Z0*KMFmjj{GD>r|94;XdF9!N36gI(qb| z?A${#r?%N_zJ9)Pa3q|XkPr_SOg1#!&Cbq6IutWA%G=v3IeAs>?b^)D?3F8*1HU#k zHD_cTFjrMaylx5%99dpg-q>i}{>{$Wb7sQg*4Eav-FvN#){>G^*cb-z#@E~18~C-Q zrKPQ{y|U6Qn^*Mo{$u6Qwu-iChXtClEM1bRqWnl#6e~2|JQMV44^0KwXwV=Zoi-pH zuDlLu;F80@(DUm{%E>)@c0@(Z0Fn~~L9vp&Lxs%s_U&3z_;jGgbLR_&4I7Fvj*Cn9 zG4B{Gm^*LwwryKrP*zs{_FGXWPUejq8Sv;)OLX)cs2(GP1`K!s7#9Yx|JkzzP+o3& z&=eXxxvuUGVeW#WpMc$ATv~cHIeGQHyZ0cA1%Z{l;E5d7N?ji>Dj`bir_?Qd-kgro z=So%EV#@cAFjDwr@i2qiB{GSTBMWvNe-ytdLcGc@Bj?L7{fmCO^j!w05yjFR3kY~x zGnlP?<98=b7j2A*jfrjBwr!geTNB&1ZR;1?wllHq+&uTaf5KgBul~@hyZTghVV_;= z)EW0#9QJ@N=cHHTC1KS$_lz}yfPl#B;CB1s@MOt_$|G28YFYpLcQ`mm=E6OqEffJi z1_2x9BLWd*nAhcurQsko7bfp>cw%BSEX<+5ES6IlGq~i(Gr4Hk*fJCf{g+~eNNa}e_I(K=;}ZyY zEUfJ8!mk*1qKcbM4ijw-#-Jc#ZJjV=${ae<`^FePi2ACgAwg{m7c21Mcz?AG9NKZi z#I%DW*K7v|k&$-c_2F$zX==KL%O%s$VfjIb~{j6${IKz4-@_~BaUL%{x$x3;p&DCuIfR+~gscGs||E5iT<)tCEnSG_1G z&c1~g`{t|o%mof*>~Cx23#U+JIve9GTS&v;4-`c$T`oLFzYM(X6Vjv4D0dBTf zrLXj5Jm49^sIk1KF4Ta4m`YAuwM>O~#e2c=Qf1sU439F@Lw!U;Lu+n!$@>bX=J8hY z{c>2PAu@{Sn-#2Qw_Duo@{mRZ3!F>K@dc`>lg!uDgcMBSalbKWpl#5WxdEwlGSJ3~ zaR}Y4ux}GVzVwoB?w+grV$bruX-6SpZ?O4 z#R|ZZMtstsOIw}QBqhNyG;*2}Yp^=t;A6eQ*Oy9c0Z_iSnml}*olVS+5K<%PA;F`M zFJ2xuJ)#&F1NyGgoWE>VoA3q)a;x;LYnY5X%cRbLQY2RtvuY33FO^BD0xIXuE1D>M z^(+%1@^S~K^R}%U=@n@}K?6JAfeJ`NJZrsc;2l^N&qeQ`w)+$E;sEpm6AQ+#5vB_G zdToDzHQ~?nPa>zLrUG$yMQLm>e|I9%-8I$KQPA4b!wRT>eD(>S^Sv)lP0QY26e11YqM*OssnHnL(pWAbv;obl6xQS2k%!^;c(7hN^C97&Kg88^tClKFl~HU zJlC+~8VcLCu$2jMvl9#!N%uW2iA7O38cFp>o;2j;l)SxWcE4{p;IQ{o=;3d)M#9A% z5{*`ZjlT0Q-hrhVAUczH$<$hW-oEOxF@%VvXqd$hY3W9So3X2A$={zFrJ_kkuWaN< z^BNCGomrp7iFl?E@4mnn?+ygeJu>Q%0H3yW*4qJj>u1bj`W5==JFi}4 zK7(p5Zyy@mqG4`YX7$BJ&zuz<+2N&in1_M8f2@)g>oX-C#R<>&i~iC5jsrNY(5`#h zz>~jftygJf%;1eAkbui*wM|QfRh94O3Wu+H@T~*#^BZext8t~mdfWeXtiBFHYp}I_q|mX9kis`MWJPq zw%?0ekttR6IL{2Lr#?m3_U=~rpEvwo9BNscu}+v9s(58-|GKygEo<)kmon#DCaH!Z zYh8-;ND_PP1o9JM_3394Z2!sB^Gz?|W9BW}@FADW`R8`v;9My44bY0c5bF>*y4yx+ z2{2V!;YvIOvY%$Y6Sk}sVf<6I`P|#S$F(kS@yLE6*+mN()j)5*-Qq0Xs@#?6MH^_X z=93?gu67zp!CegTa|#BC)K5iNou+(DC;z%XB8^zR_%3#_Hj|> z#&^s1*FttLCk}!)U-kUX0!>uzf{F5=By)+RlBw<~@@rUT)g;lob3vsh zc*$=*@_l8&KN(PW04y9gRz3G_b-#XpF=kQfx$|5b*_~W8K!PVpYG{C{59`5FCMCJP zb!jv7+pMOHF)0SaG=RGl3qd}?e~r@|m^FOpEkq;F*|~aprk#di8|jHWgZ?_`Yk9s2 zvC=Nj>mZ}je~HP@(@GY*(gC&1K~CwtbKAQ2wUThzO*Mll9z21E|0O}+rK%J-^eo*D zS)=21HM`oxSFO_O^0z6**tU0M8*MXuo<%SDGr3(BF;6Rc-XTa%(KCA+nJVp)P=pG- zM0`i2T2o^8ikzXTF3q4zA1>?lQi-&VZKG{&cT1c}vp$W9Z_w-(V5J+Pc;#n_^MTln zC0RK490Bfrpx}OK6L^AH>_{T9gx}4ERNxqL6R$Uciyg?7ANuOM+oW~WjZ6lMa-(lk z@pdT~mVd4td97?*9eXrM@Sk_}Nezhfy{1g3NFlQ&r*v$VS_9u@%AZzX;nlT~_Y$tc zA*x<^0OD_dw1f=NkQ5lBI6rV>d;NU&TMpwZl$(2#L+NQceGJoxRLl& zcYok4+9pn;$dMt7?v}6|hNk@#lo&3+J-x)qe913jhE&g6$?z7@t*T;flxZQ6<^n6 zuRdlZYiYfg)T_@Ecg~KWd$}Ljajz4*KPHf_5O}XSZ-2R;d4`w;x~|9bxO%%ePN#Mf zM)=gksZ|;=b4$(_pO+@KnHh#9yA0I&#d!Pbw1C08cgeW2A}rT$?JVla@`uS{ zV@-*Qw{J4Rm@LD+bI_n%f3 ziR4dzo^L>8<4`G%I^J>S92nV>n>Jg77Y`#j(Ieya8R4(&b% zirlyOZoQ1r0|%2{)F_-=Mg0AQCoLl*Q$U$Z8Xm3-S^z~=mS;d*-)gbweIy-qSu2)E zK~;c>mP|xJP(~0T!F}cGcJ%Ft^3*=Ep!^aStNjc&W9sJW+LfM}zVi;aPr*}TW5Xm| z7@{#6RB*Pt`fMbZPqva~toKxwxOHQJ3)K6hh_sBvVk$(D`mOyNL%nrg=`!&B*%XgL zkuVrF?1#>L9q)L1JkFy9A(}QY6Cky>wR^f>e5W{T5dDa>Tv3IdpsgIODFq={jqJs!aenBJsmn+n~xn&T-(aFK@ zotElAO?%x33T{OEUKCAZA5!9UeGDO&`&jjs?e)gR$pu)h>x=639~F%RHvPv&P!~z4 zGS`Y4T@Qv}iV-sMOD-;F9#&X6i6R0jeD-(+o7HBk<}%a1xm>yDDiG2G!)RK2Lt~&W zejH6!r|=MHI0<%1C@=)!H@VJ(`R>iVK(-3K>?}p#SE}?q_VnbSUp+HqRYQe%e z$@?!M*nu*rH>N0xh-Ry$@$qpTBxH0Q7Tvhq z+^n>RMOtAbtNg(x5Lj%XQ4qxzs(hGUv~VIZ36*l3>}+nA^ZDt{!pzXj8Wp!ssgG$| zZ6>=CVbwc(Vj}_W0)6+RLa1jL}By3ijgX>ZYMIKIp456B=nHgFA_nxpph~B-; z(b-#{Sy{W9J9JS{kV$a4J%~BwCW0~3atlWTCmYyE9SIX07V_0!PzK7O5s+ z2L=5^DvL0e6J|yinq{O6!)=O*!=E9rHs@Q4+DaKoadpN6WC}t4TtUuQy=a6a5d{Rl z5}+5Efs&bMi!5wPdX`SVsd)e5t*x!~gTG2fZ?oR={iTK#nS)i;(IL9=Ce?tH8JoUF zH||}z^6?t@a^j}Vwt!<45@}9xy+0~wcft@CA<>iXa=a~gy;fHKutp1Wad6@Dx;u>D zfuCmyM)D^QW&jaUbg~MnFHBq*q||RcpEX?m+iQA{frgIOOTCV4TY9Bi&|*KYVcA=@ zI<+-0HD&vq(@iNk#>C*`_}*AhnMM%A`B2Ls#4+8*O4 z6oXt$#2^?UDlR$tvi07O9|}5~TmCTuX}}>c1pf5-2~iyKz4BJwZ?*1KOi0O2F2=!t zIH;Z?LMdEy2Jvs|rH?lto%cuCkwXPW)`KFe571D%KRBxHx!j_T9;Wuf0ev~!sGa${ z_SL$;OcBUK%!>>jV78VyMmZ9Ti_7DU8K40}0B+>Lo9je>y#4cOpSK&q8Um>J$kdkm zCwNU1&f{}RQc}|6g2K?ZrxH~bQDrE?=;WoUUe24>nY+3_xA2664K&U{|2T4vNuzVC ztE+p@`9B@^f5Il`ag1FL{M8sH>Purj0mch#g1i5KD`8=T`{TDzfWx%3XR_Ewru*nD zO7!~4zzhq9wTJyz^8%<@W)T-KBJ_%jM3A|gEDE_Mq2a!>fbN4;+17L(2f zaF`iBh~h3d*JHmQJ!S%Yj%OYwz`Tnolq0207(Ckl99FKU3Ga1V!s5VP$iUC%`oPea?wy)6pn{ol221dKyl2=C=7BpHB^QGl|W7+<1q89V4 z-JByV4HkzfN5i*2`}|rr?Q}*5kGCO}K=ph&f405p!a^a_Wa&u5XAeI}x(KQab%|@L zqIcnuoyvf<0fX2sKt?yjndm2%9l(tinHwH1dEN~m=EHPhXTDF>?eu~_Io7O&mt`)X z7~hDyS@FAOrDbWBvtK)!@^WiH4NHceqp>x$W;W|@bItCq?iH4<#pgQHeF-S+C)Nl- z6BYD@CXkkPsorS$GC|I%d6BiH-b|$;P2Rtt<>oAU})>;TwI*3&yAShgc=>?Ur^Ffyq%w157(0D zN`G91PMP2{9$Z(-yueSX= ztZ%S9xH?@cP=$%;cU(dUycTQC;pO4sMM6f|ug&4P6*m+NI6Wiy2=%gkHY66e4b%Er ziDe`zm#)@Zx)l@2AoAJtQHQ=ao-@U55eg(zEI)8n!&{2V@(^WAM1!a{plBn63=Ihf zn3xm{34`{=r^Vxw*Y;4l7TLcED~)-{3J((U3g8E;NSTQcFtBy?czn z)e5-B!cUkyf>Ur*ad2>=ITc=!gfI&z7+?n+Xl7uNvlwxxZ$LCQB8V!W(+wv>Piuov zLBR7iPUaiEGmKITq$i~IF>vVy_$4;p~XT;F3nWB*}ynRfe~!EJj4 zX*}!?!uhqo!^*#Ct6I-=RBlUt?T`p?c5(R!p3^w56BWMIXv$4Qp*=8dI`!OI0Yd1A zBf3v&G>02&Ii7HF1$Pgpg>Gh5*J`fVzeW#i;=g>c+1P)t?{C6NGb6h*`R;|6Iq(8JTCcvHe= zy$ef#rar47Y4Mgm+!Nu1-}2~zcf%Ej*F8_A5>$IFmjBykEJIZ^7#u1;wKTY9kf&Tu zh{y;tL*y{7Pm|kM&pZ4}7y|P3eMd%05$i+WGJ^~ryCjO{<%?Fck?Gv^Xumz6!H5+# zOjQCxWcG@*9jlD>?1y4$YoGTQ5K*w!2+SrOdw6+u&hINheXBf%`&jW%8%zDkdKzjP ztL*PDkpB>svfGi;M#emBB`6c$(JKh6ARH5ilR=~=GC4N5KHUGs*Bmk%*;EY4!*2Zb zF*XS8UyJDXVm1$Fj3HjZvqE^v%?J@BaVlM?W(ER)7=`>Hr4)#j3UCTMYFqq@&2Y%n zQ6D3*-Dk^^ZQjL^_RmZztRkDL$(c-jS3sEF*W0=bfs-7$a(Y#Y2Wp>6+4k3Z1TjDW zzWkb<4!dkOjNCgg|J8!TVw9R1p#}Lv4+Q$!^!tzJt4)`WS)?i<5nb5p@hO01|BJ6M z1Tdh4Y|Fg>qza=uCzOEyUn%WhFIxnOhJ^SOJT5oB;vy4uiTrOuRdZx}i-?)5lk+V3mdja{I> zU}O7_o>7z@RkMr-BagT|6st4%hw2Bal631XXB;2h&+u38aI>j~X-D<|#=F30lv-VV zfQ7^3qke!!Fe*hg)@zH%OBAn**`U{T%l)k$3LX+_3nq?XEG`!;Fgs88nLmR3gj%(k z53k1qx$%OM()Cumv@1#^9y{|Tk752jO)5!P-&&o6aS)=c@-P}^NJ~Q_Ak!uE1Ep3+ z%cTn0-S_zk-*2t^xzHhZ3LZWxoUhwyfb36n@kE)9lhN3s+f6U9a41a{Gvv*Z1`6Hd z`B^cwp38YaEDhc-1f(Rq7muA<{?8(!B7v%g3GH5N1>ZI*CK#ex3{)P7>%FnB#sLhv zyId~YO?CaZr^_h^oHou9GP0Q*mUbtE9Xj5QskE2m^j%O^wZ5gM?i|q!`1bE)&qc!C@`&b;!R=w`3Ng1PUqRSrAp&_hRJ0zr*65;~O_d!YMz3&oM za}0ARzaBChkBMb_UzV%;C2jVvCR=g_TT(4r9*71VV<>U)QbFPnL7wQOAd?WVA?Eze ztaom9Th6ZQR;?>Li9yciE5Ru8g?u%FC$#Zt*@u8bkY7<4nM5K+G)PQ|(2u6M;6m^8 zv4sU#M>Y?ZN%$(|p)F#~JgEY`C&J zTs}RQqXu6p$>H()FqN=S-rk=5+LSSDCXAD zD#>JWn!IfnqYn?eHX)-kSsR-hBQ+4Q{Z1SHnY9s@&cY5jT1CHxKMdjt{XR+-E6mq~ z$1=@bI)4~}$BT&MTxqjZj>vavXavt`)d?6}UlyB%MvPmUb$fW2ZNyx;`;&Xd{?6a| zq!ZIAVRN_ls4k~i71yG&(dLmj1IU6}M<^012(ziG*3GhxM>AS`p&H6S5`DoRm?bJu zMOGD=8*hLW8%31&C!3fo0C(#KEUqsvk1s!!yCB!-W-^;rM0RT5qtkLUW226;BO?@}`~DNCjpBO%lBa`%@p8t)s?<81kjy7&G}uX80n8+xDb*jG70vO%+Ns)~OmmjTk` z+}svii2AL*fp2X*HA%M_O#k%9PEK5kX}4{Xvt6zY?XFN* z@9_9|@KKCkJ?T$IK^aaRU0pmLZU|-P6fDLII5;`!BA{l*Cy6Fg4h6q{2~`Q9A~OPo z>eUK|7{3xJ@_61D{CJW!1)7{(TxAT)rw=np+_{kTo&%jvG4RD&)kD`vn1Rv52jU)y zW^&!GuT&!r^0>exAkeFIJuQ|i@B$~NZ@@AxCl@|vgSp?ES`C}acT;NIY<6ruo=3Hb zx?XP?>11x#CRZ3Sv^%wdIK7X**#soK<5>t-Z}6sOkL9xYd=DvVS1L`UPRlJ3 z$(&|y@_)21mQ}9sdEx5~@77hIR^@dkU;aUPpo5j0PLSnJS zrwZDL6HUcP$7mFv|mRtrmtBJG{;dq0Z|#v6+?L(H6GLITN?@qbvSSkfSYs&~Yq z5u#A%Qq7oz!1)*f6cSJsM;sYu9ITM{!u@)RsE74h$Td2jcA8*$G$NMb8lrP5L(kYU zAh`D7S{PnrVt8IqSrvBLtpPgJBK}Ap@!NM-m?%DCM)H~|Xkht1(v%R5?G+-LuBU0aZ$A0-#+g5>=Od4p)A-a2ri~oHxU8@~O8mL2k zMCedRe*H>Fiv$;hht(`BkwveKih_df{_~WjvU*m{79foQIrAjl zX2oRw;{)X|d7&TjgmM3PJ{p^4nkd)P*+zxN%hg)Mzq)t|7b$;^(a*kpEQ$8v1NW?)@9yU|KG5;(sR*fL46hN|7M3Mj{ncoIvqQwfXR{uX?8=zQI9t z@qzQ}czSR!hc7UGH9yhq8PM&k(IeQWuIyj#T_@kpfRZ|${rqial^X!6XTO|e+%ArQ zFG?H9<3}dO6y;?a-r#go;Ycxrsb0`Wbxg(~H{}>bh!_2eMK6n5NB=_`Yvoqs0FtZ? z98x^d+iHQR)>2l{A%+&V^(ng* zLN;)QfAt_>Z@O}h^;v`{U$I#uxW9I&4A7J)Xh}^U=Wj4-YvY7Gv*G!^bGx~erh5>z!=j zRx$9&5L<~&fAcf@v7v2`sg-VH18{KFyJYIfD{qhYcZZz(ZMqQW>2?F}OD(kny>_)D z&AIh)T})-s1-{?R+pa#}&i#-XvtW)R7Le+N-GaB{)9aJ37e$HhRDHNNP{pb&S5k8c zkMCmR&TtMy5VgT)H`UWHv+=$1V;=wEVo7f$H>;*Nwb6AEpuIqjgNxdlSt|O8i_X9c z`rJbF!t9%+h2Sx=n_I#KF{Gd2tOw}1NBgo&p$r&?owk+J{0XP)bj8{T#J_pf^Eh&y zC`bMp!4$KO?i`>2bhAB;3Il}ve<48w^n-`vC?oYeP=g3?pq-(Z!+p9woQ?8*AU`Lp zlSyU^*?OQh6D|F0MOcH{a6pC;Fqmp92|AGY_d6v)Jy5pTs_P@NRycSbpz4jP9uCOS z<(Tj)5Rh%0LMv`fI=>dmqPCXo4qoDRNNWlpB;qf^X*Q#X@L?KR< zvUv--*D~z>*piZU2;{{25yH$NSp&%D(k~n6r?4~(1}73ZH;}UH^B4Ip3W(W>8T&NK z4=spr@Hj*Kfgdwkz71&6^DHy_P+=(ax4yAxI;V9bhfrY*#2H!m1d!s`m5ECwzYGc>)JPPN*el2%6lqVE${6%!9kr5dDXnEnPX*-`Tyu5&o)67F2qu zpg?PGkQ5;Pl;}V|HUGg+LH~n*kw=}|&YWWM>v!*t+g101bi$YnS+}|n0V08lCGebo zo(fuVc!V$7#MQbc*alrq2fwba+8mm$x}b`HC9r0Me_Y&b!mJV@VNsk6z1!8b8ANK)No#a zK$wPLEV4}a_hiVmfl;ht^dkz&b3TU^Q(-Vq*Y7v3?i(!PL;fjuy|;<7*&(I&ua&0)kSi9PZn6prA1F>_PeQwvj%g zG-nCDCwu^6{omNMQ5>&bZ4gi zbs#YwCj%-wtpN=4n3sEy+$a;pBzRd0zhY+*okQisk*@nVHZG`YaD)bgC-vc%{6-ueY(B7noM zrM){x_YJg0a9J5TayvP!nW=muPz77MtpwdRYRD;xhNpJ>ENZ^InF!9~opl}GHpHo_ zW-^w&+O#=RkpHS=p1!M+$SO`b^Cvq1g%;Q0H+frh;=grOyPjXIpzNT6T{=UB+DSSc zU4T3SsoM9eW1G#OH+eic@pGMHI`ireoa&{l&NlP4^*F)Xxkz#i>u8Jorwj1hp37O1 zkZhgIU^*nIpfEI=`g)vyIU~uvfwDCjvSq*oh!?!^Js7WToWU|DBMu({&usmm4eq4D zY}57=5as`S3AP}~G4;Mo$Th%8fZ(LtIX)mO$|1YQriS^auMKB|u?zTV33^fv3C?Ou z2o}Nx__YN%OS^#DDgED?z0M0L2@*kf7}YSPsrc1n>n7zd?o>m|##_zi1DK|0dg>g` zfZWGegu%*1lIc4v93@aG{mNmt#10$}GNR<7$p2Nw4S3BfzsJp&p`K*z?)ox zNXR3%hx=1~Rdt7eV}*RES7M#)93$XU&f=}QbRdPB_4@V=M0IB-5RzoV=Z|d8FWGgx z^c-6WubeybpS(H`HD!eIB2BrF{K2I=_~@}@&%xy0bLKBOC;9Typpw-HxHld<@#*=B z7MFWLU)%{|yh*e8**DMm2g{|g;*HRA^+ilZMzwS%BO}AjH2m#2crvG{cf&;+d|62z z_97QsiuLwUc%64zt=-~`TUub!U@__X!ocwM;5gK+7G_}M{e2LTM!t|O5EYdoWG zhN0tw&_Xu=>g^zElX&WTX)h$xEXm2Ua-bW%`jvOMwkt-fO^DG7KAe~O30{uB+`TrN zuFgZwb;Ici*lWJ}$^J7TB9YoI8ixA_c)84#ZyuKbmC`qlQy zQGHiLn(q}nzb>JRNJ9@L?`4ys_xaWCX2z<# zI1lkcCx!O(s~*t+8H*TEOLPThorm_rMftq>$nA1OUi6kHJoWnZ8};L^mdVwB7unV; z-0tMZK=8w*1!2x3V6s_Q1&;#tnHZ^tcL(`8k*3hGiSQRiX_m!xbVuoy#p#$>miv2$ zrEKj>X*BBq48A&M3Kqdjcbd0YO5a?5M{)Jj7!O$|ZJNTNd6CZ8Xqt6=o-4M6$c6O3 zr}z)ERui@~!2hXArHo-FByjq=cfNA@T`i7E2uqF?8GC{7jxVF@^}o00=_eUzyYDgsEr@q_=ZWz%MilwAHBX~(TaEYF9yp%LSy zg&ej_#qs{^7dnC;ER3~^2OMCOP8_FYqle6>uKr7X1D5sY#j6$vE#IzSKz@Y!<#7CXa@KwMbq3ps+!(T zFrmR;l)uTS-sJic@}iqHjx*bMGIO#NKVX0Vgdv6##8HrB09 z3O^FD7#N+GzC-8@oQe3A#eya%J==du-Aq1sCD7?rMu>@L5+a`XC40)L6AF=`)$T;j zv+B+A6aEeq45GWY>z+`1W3cjNlXKjRjivn@hN83^V6&$&pM7l~`X7aL(>S3b z66Dr5T&s@LnOZNMRDs4{5}eh#g`ty7LyW}LH9@*1`QGhIWCcG_(1(#vsXNSO;CatG z!#TzJh1=C9bSuRj%2xHKP*{})&BUp&Ihz%&Xa@}k8bK@~Il1a&cF0i&GBi^-^sM*w zp2#^k&@ErsEL57(a867(5DS+H?0k>+UEO~B?WWUwd+lP9y0BW#t*q8n>@AHomK~y6 zy*-+3UKith7g%3Kw1bHfwOSGVH zYHw$Bc6k-#FBmH)YEQE65#{`dUs3>PcSle^X61b=4HXo=|62x1i$Md_qhtvVsYBSW z{!OlY8pD}_bh)z+6oNa{8m&)4a)-RZoIBd0Ul~;^KLZa0wPK3RSvO(+S*?d4ItdOBKK}1=l9RaR$I|#U{Q9jm zA`}vJ(S>4gOV3aS<(%g&U#E)NXAz5g9O$po#*Dp9B5&y?FO*wio%K^{-b z4^Bjv{W_hNv#}!4<+zjeKNjS_;nwrw`~yyXgb#$z>6grHw*!Cw-2_I|WJr^SB2mAJ z+c{aou}U8_VaPwajb>EbWYb_^VbjlZ>&N8J3|0dpy@IxW;)ZO z);=v+4!`tsN>)$1vSdwzr4d2-h_E#!Z}i^7 zI*WOJ9v|fH3EIMWh+;AwUQZ%IMyc{7P!3&<%~^xLy`UbBn5P9TUID(hm=VUJCMS}d zZbg=tdO-8R#xnkovHE)}MF06!KAW(o_?%RGa0r|xOH5-r#(W)uDfQzdhVxlO?lYfJ z_R&$AT1kPwtsmQ!i((fb3dST_9BQZ2JFp+<0+kM?G1L>h!4=~CzDD;@ihQfRlSNM? z_&bSz^JZE(VxMk?Gdah5yn4>BSqje%t~aTV#A`?W@Aoi}#x!fpjGEpc7Z0?@I^=KQ z7;Z^*TDRC!bct9V!{4xN{wb|pR0$LH$#Sl$P4P}L<@Ejhhy1{WDk@28^Z?|@kA`t1 zow{5wf)aft?71b*Jtz9qh3w(M>cJ_ahh(jnGgi;?)dHtS{=@JYf}bku!D|hP=JH*f z!A`BqAl&7NW_km|9k(83P*LcYa~$R$4x0RcsDo1n8Ij!?q<*jRC|>xSS4d0dBBQfP zotm48YDZ2Ntn6{P{fTpZy4ZjyCN1<5DH`4eywxKiY{tOD`I?cPqG`wOuMEFZ4SK@y zK)FB3F-gnRfc?>{5MOEMUzO{y>BC$(6pRK{wtntC|8D_p*eclr~z?!rgfx@swIy0ZqLB z_{oRhZkK8&*ULZmw^h}^{DA@pyROyX-MdL)v)kj*;)K&KH(&dny z@4$OJY0*JNfNU*(voaX7MM1M5Ff0%htkmx6jLJpT$9qcx5Ab@3s#zpJv^_bk{*mSF?7@?!)2 zk2j^Rkx(^#OUYIpq3Z^8sc84c>vxMkKTs=35XB8$^GepKebNATSBDwN8at1#I_gL% zPIv+IAs8D>G<24C8U4z&;DEk;kEi;LP5v%|^A?Y9d`QuwDdy2(c|pb*HBa!a0w_?96^&1w9!AN1>>@d=)Mls0&S~QD ztPIk{1ZYz%jj4N&@%z2+Em@~7H9!9AV75w~*^54U$Bb?beaE7LB8)&)iuJoF0hzxs zMM5p)_XC)BQ=(vAy7uS-FtnF>kK&>Xxya z=o;=GpSXuM`SV#7U&_7C`Yb~XVd_vn;+XQNL&gfulvwP;$vzg#gm>4|#&N#X)d&}(!lT|is-qwk+W4il)pAu4v4C6 zvC+sJvnJ;W<0vao$PiW<^Cqup9@s8L8wHYS!#KN{I?p{;P3&W4E~8(S_w^Vx-WN;} zD;!(3mQBNYE57gyah^&A!KMvZqy}h)&qSr%7sZamPc zZB@r%)1KDWzWHo}5)k;&n{o-)CgOxrDEtwrv~-M{WeSJZIsWM}B*C$eNA=KOywetF z;y1D&zo$p|23B<3jL+R{tHA5CfB5<7QiV}6F=Ve+9Y#VcL$SF2WIVwO+)lHJCyw7F z^p&*fA6yw>kJyj2K0q3G6SU+~dvE}JdP~eyA$gCj1)6$_QSpp;qYZ~ipW9zx-AqQ{ zAOUJ*?;M2PaSoqXH+m0TFh_E8uNB)b=f^!b!;NG?BtdLqHufuIM%}US4~9WfdPCE5G_J$3d>~^zIs3<6BOxqiXfV1>+9O+IroWHxRIQ1X_ z1lg)fQX(cbnB8;f_ohYiJ;pd(Eatb_O-W<#ryN~^0%qaGtYS>+uzmJyKUVbxhJT{T zJ^M{IpA`E}^LeySmn~J`>A0)^`2(~bCLcle?#cq3;lybki^mgkPIjZoH&Bx_mkEE+ zDw9Tm4h7aq@sWko^QJ-PS<7n8E|eKWD?O<9BvBR;7IfD-G2KLzOceA9>ynJ7-69WGv0uQYFs-_Islp^qrH3F&| z0{MU24L=(D|8^XHu0Nvv|KL9e@<06ldFbjtiT?*c;o$!dAcH1}4j{+vj literal 0 HcmV?d00001 diff --git a/web/public/images/file-adjusted.png b/web/public/images/file-adjusted.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0a93b599c92b3da1afb6b8b3d5f185d887ba00 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^(||aMgBeJ+-nn%jNI3=ggt-3y|Nq#H`;?$;^RoXy z(?m;x{DK*r{4%dUidK6rWBRJ%z4=?+#Fr|M_qc3n1S-hzba4!+hbn*Av!C#iZ*TO+?!7OcC5q3;8GVBwR8FF{;SS3j3^ HP6E&|Rh!`8|h%OT|&;+UZsyv@)70{m}UuQN#MxC6m0};&~mwfs@ z+n{YB=1GgO*#_-BCOm25?65(r#!<+pHfX1mXy4hObtuu={iY?ejeaFslx-yYMN8p* zS{cGo%n(2F*4?EQ6QL9_E1T$G0!K4(+SxR#DV=Q`7iN@BaGVVk@(0d5bAjjCzz;Yxa++*)+C!Yc@i9#- zR;5+p_?$fiRA_}v`c50Az?+s%7mkIrli@}C5XVxs&rJ()-5M=QXf9eM=GC{kbtkvY z8>p1g0xaXIQDr~psb@bs?_@vqbTMGm^CyelX~~ouJc54ZAkQFXWgXRYYj^!i8A)!m zRh-nU8lj48gd}+!U_`U=1dqGX%86>#bn*(qBbzmUb_48oqn#(Abq<9Q3Ry$DMr(r8 zZnRE~ir-m_P|S1mYBc}sMth9i#1%iT+YlOglUs_b?gO%9=UNGU3g_472+bT;IPdx> znfpN%=A1{xRaR@$R(pQS=LmZ*kC4ZfZA2L4n7ok~b%fORT8Ojq8O<9;wAba|E-frk zU%AKSp9mf?qOGJ~zH)g`m6k(~{5gj(N(xuxpEFjd(()OU)-)gtb5cGJ$W^7~$(IAQ z#e~rrd6}?7oK*b z-AA>-l|l^#uB>%@p?$S8$zIaj509|XUBy5A#6C8XH=T{_Nc{UlEYgUSu4{Qex!J{h&HxjaK9J3|+;j71#}OyqCu=E3`6|QItlr@33Yv)b`pM z`h11;5LTU%0d~$BF$p5n%>TESF=}aGa@N7~n$GL9BtD)#o#J#+PBuYO*-CU?ux?%@ zNRVvG=_Ni5dzXL?O^`x0muRH$f4hAphZr_u4H4nt8BM7a@(ouwNQ(Ze+EmFVE8$y) zv{-|DPmycaGE(mLyZ2)16mPdjspTbq|6?JIPQ_83gz%RZP<+eKX5;@njw;cx!Z{g^?$m}Kf&%WBuO?}%Wjk`d@kakTG3T4h9R6^1%zcq%IORRdk@t-^ z<^Tnc{%QE3EAaZ#)ua^_N&@>?l0>7HW!3yJ^wn9`DY;mzKguTSg7HA zw)1muz9ey}#N%<|iZi(yXKn|~I2|w}c}34cqqa)|S`fx530#bpO9Ecb8oUclfDEn2 vWfI$O?U?VIb7qEN^06Mt&jz2%e=}@Ym?HMna`r8tlNdZ*{an^LB{Ts5Kqgo@ literal 0 HcmV?d00001 diff --git a/web/public/images/file_thumb.png b/web/public/images/file_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3f3091921e372da90a2d29f56190f653aa0eeef7 GIT binary patch literal 8581 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 Ag8%>k literal 0 HcmV?d00001 diff --git a/web/public/images/filetype_header.png b/web/public/images/filetype_header.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c15f663555b91f486c370250d1049394d53eb3 GIT binary patch literal 1331 zcmV-31Ih*$g*$o`;fmT`bWzA^Ug%7FQ(bfuL@v1mfkNd# zMi-ITsL@sEZb_iR?nR~-vVo(EyV}n92b3)|8WK(q(S_kT%*>uMvomwP3!kf%8Tj$? zJ~QV%$2G5?k&EL_1wMdno=6|Y(Fp?p#BmM-2;}U~fk7bz3P{3SBvF7#pf=(f92d9n z8ce2TIo`)b{EGL`0Rx~2HVg$2KpbOuC5W>>$Ag8GqYa{_w&E5xz+60oYuE`ZoAhBA zdF;otFjrdR11Q4rp@_XOU!)IL&{^i*ai&^le~O?tr$V}v>TL^dU_HzWR^S@mfR#lY zyo^>Dpa^=nj|DIv7T|A~Oxv!q0|?B+pVd11Qv`#gOQ~MxtatDntPD>huMZbBS;vlM z71--U@HVD&m93;i*#QLF@kiwmEH8wLV0Ab;XZ4gs7LzDq5?Lf0^uvWBs0ePr1^kE= zfzMWYF<4OqJ=jAO!K%@Q{E${;a208EAc_v8aTOUv8f4Q}1Qo$0_!<*<72fY9T{!Of z9H6&O6p*aWVpjxf_u8820SsX=`Z0zg#?X(&7{Y-Dn5!bF2)>1z_y}#9Exe_W$9BXp zA3exnZ;1eoV>e6@R0JD&rb%4E5)9)Q5{M#!qZq~#j3cSJDuQ($!IN02+4{N*G>-Fl z9bN(KgDHZFV5848ixfV@w=fsSum@>mHP=Ab+D070PxuNiDT2N@e*cXE2q1=5j{v?2 zQv{nKf|}_KEX5esz+5D71s%w1u7Rwz7JPwG?7({Lz$iYO;dv^83LsEAfQq0Z*zhxT z5JeGDn2QI0U({R!S!*ebU@q(db1|X_PMd>S)qgJqP!UuFoAH}qLf-^yw$?6S9n3|S zA~vO3dUF zWMD2b_!#D!Zj4!jQ}_ihgmkSAq8H|$BG{Y})J$h1g9)Ut6j3Zi3KPg+w&wcK+`h+I zbYmI1aTdo)%p{H+_F*9m3$YKQXovZv2m&qGh60@bScps^1}oEIw1hE&ilAniL>74z zkw+Fu&DGVr7(xX0fCz@lm`NN5aT|AV8=w0Mp#F-)ec1oVU9?qr7wCrCM$nrg7(D$4 z+QI9>by&#cuomWGZG~$sh89@B^!Ehi47OGfz`mKk94ZAQwOI#h6RyLlf=O(Gg-o%; z9iI1LGfZSFE+Yo>@RWA|6~SiOu!G#JMJBKk=3*r-!Rmm>UYtWbr~oR0A~JwOFc*i= z533U*1IVEVZD_|1K=jm>=OC psEEwP9$dyfT*4ka0t*9?e*p0-O6!%AnrHw3002ovPDHLkV1nU(M_d2^ literal 0 HcmV?d00001 diff --git a/web/public/images/folder.png b/web/public/images/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..368fc0c585cdae203db35932a2e850bd52afa593 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3`JOJ0As)w*6C_v{H^@D>(ffOz z!ylfG|H%gx3jL!Zd5rF`wa?-8m=`AYf4R%NWnz;%Ke`LAt#L7!l_55z<;*e#jm|^O zmya(N>yNU@`nclgVlm-t!*gOBt<$2IKNi<;?Q!7B2r#x~oN0S&m24yfgP>buncYi& Q6QI=$p00i_>zopr0Mjfwi2wiq literal 0 HcmV?d00001 diff --git a/web/public/images/gear.png b/web/public/images/gear.png new file mode 100644 index 0000000000000000000000000000000000000000..9d0178b27567c8773e046a0090e75b374c19f2ba GIT binary patch literal 234 zcmVA_4+KgP>zwLyd|M~CnP8gjFcj)e&D01UW kv=my-0Y9^n=jXTg2I`R92V-Vb`v3p{07*qoM6N<$g6$+`$N&HU literal 0 HcmV?d00001 diff --git a/web/public/images/hostr-logo-500.png b/web/public/images/hostr-logo-500.png new file mode 100644 index 0000000000000000000000000000000000000000..5700d2665af950bfffde572962f9c40184db9175 GIT binary patch literal 3994 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 literal 0 HcmV?d00001 diff --git a/web/public/images/icons.png b/web/public/images/icons.png new file mode 100644 index 0000000000000000000000000000000000000000..baeb66929bf88abb99597b166704b742ae7988f8 GIT binary patch literal 2505 zcmYk72{=^y8^;H^Y5J3jzeGZ|ArT^4?97<5jIpGWB^6R6B{xE;tl^Hbb#D~17ow4} z%qAvFI&)?kGiU5emb7V6?l~iM&+|U#Ilu4keLvs#{hjkXC(+r_UJ|_#jY6R$aabDy z3MGnxpH(Hq;CrPknGOpb&ijbA@N!Xjl`SqdH#akxOaK7tx!h(5q7Mx*nWN<1@n!&^ zvf1riE|bS=?uIBY2k5}ib8xts!)fDkY5o1}ef$mpYGVoLoFO=^wXdHF@MtVP1B6=H z0?O+FS|67V^tZEk6p%+{^XVLj@mkOZ3{U|sjnz*Fc@z$x20(N`z+ed|U_X`3qXT>j z08v>G4HVEp0fXI7F&{#Z#3G!ht z8XKas;1Ezj9u2l;^I-^rg+&;G^uwb8d^(Fy1z|6U23xZc;BO}41?R&P@q}rJ*Af=y zP+=V=Bkn@G|B_*G8Oz`xc62s82of|7d{zStHUtMOB02{Ncv5%-I1pX9T*^m8_|Q1; z$Vl=}4$NG}B08La^pBMP$`L}Al;y2u?2^&a9Ufe0jgWs55Ctg|Zv7$%-G6N@d4U4q zJNlV}l)(BjaJe5u5gsp`21EWsUUEUIgt`#^y9#LlK9=QXe#2p9xm6+U(6o~Z{54OX zB{;gGL`20_i2t!tVikJz|0Jc>NUvSDUPku+avS6o6gMetR#s8nqNc8)sfE$j*{Z9j zzumyl$k=43soAdGd-j@JSXx=z*xK1+ark}v9i5zA2t+q`56=T$2M>84@$vQZKN@iC z_=&)v;FBSzPKSn_2|pWg?tJ8hsOXs3*tq!1R}!vXPfSWqNlm+vp79qc>t=RNZeITF zzyG;YPh5{j_X=Qv zY|d+LKaURy1_pGUScuHa8cUV4zS7 z`_K&!6cURH^6q2T7CjvN!^@dchLbRb3SPWW_kH5ZAdhuLcFgYo5e^-lxqW<;DRRVu z`2LT}$EHfARvydadrl@1Q&5#`r|pAo&MOS;u#Gtg|lk+Maf~ZqY z;`D-|FJ`^L31?sPMZlJoFYeuAs2bp6?RBELC3Ob|t%C7N7$-KZUvp+US|Np{?gd4L z+3KMxu!%cf4AOgc$)kPB(t;QLzja@8@J3UM2g8P}3_#0pHMJm%{4V~x=LXK*x(i%Q z6O%RKEomgrKBE}PrYCakWm=){ zp3|o?gnyo{(fmCVrOziSx3IBP-(+XZK{h5wKJk|0<9MB=P0;kKJWf& zvT3Gq%w0m9Jf5c16!s{3wQxu~pyTe089pmm_j%K*T)wGho-zW5@Kb}F2 zW69O74KJQVCQzN3>TJ!M}vpn_~(P65)OQWn5D{>#V z-Er({EcK!J_(!~DQL648AIA&97)4n#!iqoRR#?`JW@oOSvPGqfZ*%&*v#Itrdj90$ zFk?L7BBAoyx+)FpB-WdQ4&)LbXv<`HAhr}h+t*1~GNZdp%de1zM?mnjN1R@J@lm@Z zzvp)sl$Dc{WESV{@_H+_jo=SrFECD2U+qcvGem0^%G|n0bHw|hNN@8`YfY}Pk50^$ z#rW&(S+I~YBk*@SZM}D@;mtvEfE>BOpJ1)FH`>CsquzcfYWA7azA=r+0BD?^P2!cN zmhw@XFb`9oT(vN*{hWJbJ!$Ct*UJYm{u?QFyzU$5{2Hj{6RquO3Qpw~U6gc>YHSl~ zofSL|tO!tMXJx)m1$jhq)Rmm$SByS8sL{^9q$;h$;yhyGWt2KZV=y4uwBUh`ZHVOe z;YNkW#xkwaI*Fu$v6B%_6-VYtqcaqIfmp(gYi$ombEz}OSrnH`gL(D#XpH3!`)k%p z3&{gX_Xy+GzHVr}TA%HTdmPOf@BOpgcS);8 zgyA|5c9)f;XSPJll1XQd${mtSJG6Gwpww~7b%))V@(Vk0f{Jf#_jJSesCYO3$n2@7 zHilk@=5C9E{u21!UAbF}NkI}Cnyu2hhet#!oqbEt%3cwt=lu7IJpH<N~7oTkG85Zj$sAVZ6M3Ht$_>JI<7NRJk8t;r0-6SkB2xxZ`>4JT| zky3x^=WX6j^SSFQD=(#;v{g=KqNv4w3-SE!8`GUxVb&SVt5S>#2eVC3P+tQ#F1`Z) zyt3ntazd-9(y3cw<8{>)3Z8-O2@KB4uIzUgdmTHa>Lq3Ts<)5W2CITU4wxxUspUO3 q4H$~Ne$al>soT4&_rkzpuXzw5ZXSI3X%GAtL*Z;4ZK|w%;{OGrlBBT! literal 0 HcmV?d00001 diff --git a/web/public/images/logo-dark-r.png b/web/public/images/logo-dark-r.png new file mode 100644 index 0000000000000000000000000000000000000000..860861c1d705d5c76a9b8aa215bd3f52ae62f367 GIT binary patch literal 884 zcmV-)1B?8LP)+bJvf{Pe8Mjt&)`uqFW-QU~b z;#6yPyTr-0zr;pfYyAEF%hJ`};^p7t#djiax&WO;*$nV{_N@NIyKFH2bO@$zSTg_)+UUUYtRhmaF8LM=&G;^yeD zxxeS@>>4>p*xlfgp{OxTT3vH~sIg!Nvb7_5ta)pkSqpDbL zc|lrdGfrI0)7DXFbQd*6Z-R_JS!LSa;kd%a7Bxg+c7d(9z1-pBVt0Y8x4f6P_Dlc( z00DGTPE!Ct=GbNc00D$aL_t(|UhUCSlXF23fZ^_QV%yHrwr$(C@zKV={%Uh7HOb6D zHn+R))!aN)-91o^A}#8MM>{|=f|#6K9te>)>@&b=`}j1ZLLk%T_Uc zTnr)A+X3n#lje_6C4?FW(8aXMF4rHuSmq?(;mLh~AAD)uR$!bcF~msbp`z^C;Mi*QW4EOG=9 zD-OvPTiYqMvnz-85aVIUY(J$AWRU3yk53371LLVQs>1UNpenk0L?xV23SHw3Fx6rz z>zz#;J-lX!w-D2L%EXW@s%Fp|MAX#j-_^b^#t%smRQ{PUA^h@HEAXO%Z*>6QX{7o= z8|}|u8nTc~P;sFk)*>z-1QAdui@~F`KozRRQ|a-zP(TR*1T~UVT#kT> z2MTH{(o(<(C?HFWTCuVlGAtoM4UmL{NoFQ9?a-WR$*=(64^JP;; zc}~3%8y+!Zq7Ddc!VeDm;n})( zDPljx9OAIU5{jv86Cv19mSJdi$}qW0X2=RDl)W(r+ZQJr&zoXQEKWN7p2@EvHfpG( z8Vfq?q#r%#+358c=;-abCee~0of}P-`1I>{ZS`ZwG4gGXof%g-sd}zu6G!lZ!V%Uo zl|FPrns-q0o=^Q4vi7trl1F5$JS4gD@iiqYIg57`SjR{@Al_Y?x@EH;LyX%-CXN)R za+R!{T4{pjV^%0PDB{i8sh{~Xq_FTU!&{Mdlhe?y82a}BwoN-{g} z5xZIWO&bcCW0)gOm1xU{cAQu^%vWq+1&dk6dI~wf8MN4~%J?=JVx4F+0YD8qm|^K< zlrN+}{wiVroOwqQ@0LzJ5BPrsYJNuTI z)fAg;u1(zZf5=?JTsiNdk+r8_9r4Q~LYk%DujkdeLaDw)xU(kaKGgHmi)56LuMIfiLXkCbQK?Y)_)=DBT6gi|1MbbL1e$S5~$IHrJWjb>%xzGKWS9-u7 zA^s;A5)5e(!H{4`?jLgrh%XdNBWb+ zfOBRskY0$6ar9v@0~#I7?X*YQn!;Ti;W(v~HvY~-bWC9t<&-vBP61c7#gGwbc^lC& zjY3rRat+d|Mv_4)$wd8>kYP07#LgRtj;U-$~aoi z&l&*0#E{E5qz4E7H$p~Xb%hKJL`WQicz|5ya6egI-vI4HHcvC3i3}kPar1SY)G>iX zGU-Z&6 z=}sJlc%p_r2tol)O4)!FCl-2N7y^69=M^{ed51C&A#ZXar!b?%#^Zz{2)(hRvYS;L z#mOtg5XOAUD4`xF3Z;C@eo82$hg(PkS}b&M4^gmTchiO)bVEi^kIJVE;A*br4vMsC zq$7m$6i#Y*hAxfA_$KlwWi>x@+(Ek1m#;PZIi57qF_1>28lrK21iIJ7u*20iS3Go*4DxzZ|n{+}J zqw*mg5se`jH9ImCA&QsL;|KC+*P@WnOZAAd2$g>{dDHNa8sb<`duCyyDOO%P5tR}$9Y_5$swm~pbR^`Qahj`GCD}S5u%2XuYA%f|yqhH2aR#?V zoW!P+YGerQ5SQV+N`w0-#~Ipy%4GMDp`5|wu$G0oAt@AKa=D$W5RGB=S)!)S&xlyqWUsWF;W cL?BxK3;3*7Bgsz$NB{r;07*qoM6N<$f>1DE$p8QV literal 0 HcmV?d00001 diff --git a/web/public/images/logo_dark.png b/web/public/images/logo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..a595745582a86762e59e782d821f8a6e798cf8a6 GIT binary patch literal 335 zcmV-V0kHmwP)H>HZD5I;$kw0M%%W*w$UOO1gj`m1&cwO!C(+H7z96npkF~$1fzmD#kZ!Y z%p#)fUY~H%!aeuS=mrhHQy(~g=^vkP1$6L;HAoS5$o7WW-iM%0Fc1?;BQ>#t8_!Fh zkokxfhp>n(Y-1jM5RYlJ;9?0UH-JKaKC)G!qa^?U002ovPDHLkV1itBi68&~ literal 0 HcmV?d00001 diff --git a/web/public/images/main-logo.png b/web/public/images/main-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9690aa1239a8eb9260b4a8e3665f76473decbf6a GIT binary patch literal 816 zcmV-01JC@4P)4opjFzHUK~N9}t29*+br2#Bp)p(QCQ=a$xVg9py4Im|ap=<7pratTw3CZs zT?#1`4V<*J2MVq2kO;}qnBF~dkOME5SmON^1fO^Q_KP}@mbQ-k$cepT<_ zBi^x1*jFBNJaTqIv*XwX!B~Ec`&g0Fam&s!!5oXM;RNHmAu#L(LtG@y{?@UjtR^(4 zMXkvR_TEnfu99JxJTrJi@>t>lhvIj(n+Pm7l+m#Anz`o_%U|c3VbFGM1!JJH*+ST$ ziWibTcmD`jFM>yrEPcK7S1-nRn_S|&AI!W3K6P|?4J~+I0&@NQ-iy$V&>`V(&k^l>I9gz-j+?BQU}b;_x&ZB_yqGSaJv4MmQ$eNZwj@~0OuWWtew=A zPJ9OFnQNzN-xF&20M7S;ida8Bn7Mhg@S0(8=;KQgg>xV7PV*e+wwGNQCyE uL6CfWOUEwPW8ihUqa&Gz_b79Ic>e%kH>0iPx1qKG0000P$>?J{d!3>O&DVz2_n;9ZF2Pow3>Eak7F*P|spv>Dag@Mt8Ex4kx zawQY9n)4PJ4yMMMk~Yf@Ew)b=CEqEmVmaZSzNC4Dk%Ii(#$cx9ffl;QU&hRlJ0hyW XU_aT{m#=Dq9>{)AS3j3^P6)(asQgEef&X3WwEVrGyy WShPv)OYs|^X$+pOelF{r5}E+VC?(wh literal 0 HcmV?d00001 diff --git a/web/public/images/mstile-144x144.png b/web/public/images/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..219c8eb3068db316cf731e8afc7ae972a8d78b95 GIT binary patch literal 1311 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=3<7*YT!Hj|Qh>EDivduNKuM5a zFaskC!>*HyY6ImS|NrwL-OO&KT{Z&)OP{BUV@SoVx3^vwEw&P1dGJ2)n1QW-K;e*43~dEFbLf{b5I{JHq8<3WZ%$e9hw$E@UAmMJ?v z-eO$1#cqXDfr-Yu(>-3-xINn&m(}iEc+BV0afdTGQg?lJF?B4_(b~b#vE<f5{Z+X4%Qp;rh#_V@c*0uAiX+J?mX3i;DjIdeZdYY5#i*H58iW zE>P@!ueS6=)LPM#Q+B#cm?coco#O8F@m!zD+MYY>PUM&O1iksuWU}<&u04|Lf3V%U z8>}7j$*1b~we&|O0#~Fube72b$6b9o)7inqu{l=%QljXg@K>I7a~?@9czSF>^ZRWc zQat+6#vL<$-{<#!@@?HQl?!t`ve;`ARVvcY8t_*eE-jofJ?^ys>MoOjD;!Z-3aYms z{^VDiyz^6)E>riFn1v7CO8lJjX=ZPCW@P16k&|wdzBMhFHmbIoSMSUAazJWCfeK%Qp3DhpTUmwC0%$hKiUk5ufaCx?*qavlF6w zjFYXFJK303c5U;uD)+r<`CHf7x?}Ew;061HBf3}2PcrV9ezuG2iFU_}-^4k9h>X*m<0vb71e)=eeuD zR7kBZV(MVOzpcu(#B{>@&)#!3o#GUY;yM!d>*=YuXS;hnT?=(Ojvv!}c6M(iqnMz- zN>{UEfbr4a2bk`1gtW0w47L@N zyi(@tNjK zkK9xLJ$)DLlEG@}Hz7JPd#6asmYdTJ(tp-8{PxOKh>le7OIhu!>LmAU{tUMZHkP#l@tZ6+`Yc_L%cdNpQcIOMOm%wsR6$}5crYY>YX%|1w0$6G>c)I$ztaD0e F0sw3}Y-s=h literal 0 HcmV?d00001 diff --git a/web/public/images/mstile-150x150.png b/web/public/images/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..6a902d65cae07a4e2d08ba82b6438b21a301d5ee GIT binary patch literal 1105 zcmeAS@N?(olHy`uVBq!ia0y~yVB`Z~7G|JG*Ze2bfRuEAPlzj!{*ME^_O&|%l;$W2 z@(X5QW>EcgtUDo1=*mI{2Ijk-E{-7;ac>S7G6GdF8vL3*?a=n8AlpEop)b}t!cUs* z5W}7D3)?);Y5Sj+6!v;AdNMB9;762|$htv=-IWaufk(p zP%#r<;!dW;Z#$gVF>aA9Ji+mhMdr{SQU8OA>paeCTC}WV@H?nz;uKJ@p}RGU{WI6Y zudg1xIwi8w^uikEbDJwXT3&@O`JMIo_-*!EjuBn1;&4!0|PFQw$#*d7ig5y(K zmWdn8Z%nC7P-Q=T=7*llyd9w%E^j!zQ})TmDCH#~nHL1j%B6n#yZS^XWScmh5m1D4Vi&`}u>{9!7_hM|78I zRwrr&Eq=e@ne&^f)$b4Zy-1K+xQ|&+l}B82h4rMERRy(sE~ST*?|CldxPRXIGnyLK z37%I!>7CwW$a$UL<#JF*#F`0=k2IdsOnp#qjUL6l+Nt83gYs+97EZ2P8#b- zRlNEw?(%e6;5zSj%MG(1OpkWn`ie(HwvO|j{c*w7+W+~ltT{cC<7~nC%z0%+TvdEG zxc)ovTU980alO1zCCc$l)8pEzzLphIbeADThrnUUy8eU(?~} z#yy=5#YqoOCVieT@j`Fk;|Bttt2>@#y>+yZ_^g~|acraS>l7}rUc-dR)sc-&$xVvP z!si`=XYo9^n;!B)fANWEt?LP8TFv)O&s`2px%{qvW8S2YgN*H|l5E?f177|%JM(+J z#0e1@!6yvPv-cflKQOO_`E91foBNM5WY;b(-NIL#^RItbjlETI=B2`#9f9rER#&Dx zcFlxH?nwDQ>CfuYjepzopr03Vy{cK`qY literal 0 HcmV?d00001 diff --git a/web/public/images/mstile-310x150.png b/web/public/images/mstile-310x150.png new file mode 100644 index 0000000000000000000000000000000000000000..3dbcd2939cbdcc1a20d6f317cf179634998facb2 GIT binary patch literal 1070 zcmeAS@N?(olHy`uVBq!ia0y~yVA5k?VB}+A28zTeG`a&R(Ey(iS0Mc#19+UzWdTaC zl?3?(Gcf-;s!@KVb*c;l1M?wI7srr_xHlIVc^MRVm^VCppyF|8zZy>rW4@}%d`6%i z6cDjH^rhjRXLsUMt($GXy-lzzRAD=?A*Ar#E7i|TXBQM7IF>&7z?_p36%3UZf7>6L zW-Y0{#X5TBoHFlU{_AA+PddGA)*sagX5Vu@FWmE@;GW=;n)vS*y8H~ZzUKBP81n?|J)Ci6jXTp~#ZcYX z>Kg^8Us@;qvVBwPbb(W=^OoFCy3Wd}@P_~S-@I+Fj;#`1tS7mad~XA`*cYCyrCnPYoBCNR(o&oC41Y)E7_?h% z(YiRN`<~d-jtK{CzRWojlymrLcw(WaC6C-M-q%w+#h=cPs5pG^@4q=#9f9H(lMe_S zdedvs`u$i;(wqdgrj0$%be;8n8a2-T7;dO|*CE*Kx$Csjy@3~}c*y+UWGgtKaJn#~ z&78(XH}*^X`D z4pZiS{b`Fd>o?oeCI-`DFXgK2ddpytE5^6B@1vA2P;uxMMjlVimhJq^l0Em`*J`a- zxX>OvDZEwrW~t|5h3)VEcIfu=gqyr!;toCM$9(Aa~w+O3J+3SWcKW&((9aVDk!ko84rQQvSEKRGfD@&H#R7y!S-IUO<(c#B$^;^Y_ zY-zf7|BlNJwbktn=OHyI=i0{Wa^zQ|X(9o$-DDyY=k!kyZH%?Vo(M@?&M= z^Iz4rO-F5b?!TU2_MicjTN7ve4W9jYgDyrcM9z{8%yoZlFDC3tuK*mG-`Sm;ybByd==1o=1<2j&^i&9%Wr7 zE=e8BoJR}xpWAyg_wrQ@K0OQd z)!|9cuJ+W#p5p0O4YI4;$ske4Xb={YP^7JA@cvO#G0?U}!s0VxVhZZS#eaD`dOnHm z;=UZul8hU)e>vy~W22xqzm2IajyLK!%bM~IL_+>Xoft*FN>t_AFCqLaP zcHI+~37JmuF-cLzuO=nFpL}|fc-3?3dU1D&*y<&0TPd{$wh20iDZ{~a7 zoLE->w|J$A;@)_@FYl&xm+L*%&gFJ`2aJwq;&WE7aW`oGbV~L5l|P?OJ-wRvefoCp zeR582{V`g;{hWUbJ-0Z!<;NIpxL=#U|5cd5De>u>>(10#%4;^Q*t$dN!$H-`kejQ& zhI6sq)2on}8T<479IFo(PTyo*<5s@qR*HFm>c?`=1Kp~xLsQ>0dnX#6_L}`&Jy|?J z`fJw@t^c8y zaWN(QZ(@Z$xt2T-{;{j%iP{-19+ho+l1nqiW4<1^v$W{NP2U6V1*MkF-U_@+CT{oM z^yhY^!pE|g2Oet|Dr_vyuQjke_s0P>0jQ&Xsu2De*39h zZfNAP*@ts~TGZ(s+i9{Z|Fr7SXZbTH&i8&F!N_C%L0HYru=uBfzy8Tf^34CQ+@Cu0 zbmVbAYyHWGY!z&cr`z`w%`DB%xt1wxRQ&Sf=68ph64#xH;kZ9{!`kVkKzZ%I-kDI1~$rgQn} zJ({%Ozn-3Ja2L0S*uSfMvQvTORv?3SI)nYXCf+ys?ak^M(JhskA0Hj<7T1s4Q-O=I z+vwV4{Yv|NI2C~Prd}yE{@;XR&;t~Mk+rj;*mn@cej|`eP!!-c=O{OdyHTwFfZ{I{ k@1dApfnq(fEAg3bk+zqsb$0O#Wl&-5>FVdQ&MBb@0O`c_9{>OV literal 0 HcmV?d00001 diff --git a/web/public/images/mstile-70x70.png b/web/public/images/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..9763fe5a6290b0995256cf1086d54d4a085fe5bc GIT binary patch literal 951 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&X$AO%xB}__#DTWmr}TlU`AUNP zf*BYYSVX7&e|@aM=#NM8lh4ka3=GVAo-U3d6}R5b=q`G!z~ibNYw+mn|NXnCy>8jm zec5E<O>Bw!4AWHgzYEj^wQlElB3e7uiKl9(!{z{1wLR_*fvoQ(zOXee6VMXAr+7ic z#kpc~!zHH;f*-v1HQTYQWntQD(m3b00N45l48J_pb-qR~ntn%f#pV!qeXE`hNzE?5 z+pLq0{p!{rK+@~4rEF23y?#`PMEZ*eF zlxwwP$=8TUmk(}aI$VBpwr-<#;Gw70%|}``G96IO_%w|v>cMaEZPS!58Yap(@%-}C zX8e`oQn}Q=!kLBNS)t7E&9*S6${XLE5*Ic94N&DVJ9L<-J>6d7@TR+`j(MMOejbX+LXV&I(!Z*aHJuLmQ!nWa@ z(1L59>o3W@VePnk_S*vqb?ytLB{#C1ljdkL^m)t0>@Jd%yusaYdeZHq#@99lE#|i} zGuR-e(AM|ze3|LarYE0E`3il~IkvE#*!6sO^yjeIXCLS=CW&wRp*-WCP5q!U~c z=i=9=A3B=2lE;~G{d)6%|8nmsY*bmky=Z;xYJ)c{E`7`wxGw6&$X-r85_+-EAx5v%fpST#d3K_m>5i~bX(71cIrapM`Oa__zS`7SbZ2o69*zop?9}s6dmZvXR zaQwfDneYzY#-DSUT>khmrgHf-Zf5sk7wFUP;4U3zi`v#@?LqT?ZWRJ&M99ROxiE%=T{p8Si>XO0pX*e7Yn$;Ckkk3 zg+0uogeER9hXh0;JcdJj;1q%p0R;Jh$XV{D(>)(eT+hE8sQeE5r^2c z!xF3=Zin^4GbrK)rLRA_b|JWHppx;s;1&d=J?)83t? zvV4k{D@9e!&eu_rL4HSzso&UWKm{xaDa};%GP6bgK~k7 z(b3!}LsOrpvqM^FEJjt8pR5@+Mre75!Nkyag_Ac>Uo%Ww7d1tuuDTdDM#;<8nWC;I zLQ+LsYH50iY<-G0PhJ`~NAIlNo&W#=S4l)cRCr$P)kSZ_Fc5}ePm*P3hB7lVGcz;e z|39|Uc2jpf(%3olwD0|qB}=1^85a9bScTIwSIe5Vd+4$$!Q+lN{Pa0CBoF-zxO_QT zn1hN2qs3MhblPM zOSZkMboMT{{#~FZl0jjte;mp=xt(cSfpW9?j0m#{;9Iy!Hw1$_r=9}v-S&00000 LNkvXXu0mjf*TaLh literal 0 HcmV?d00001 diff --git a/web/public/images/round-icons.png b/web/public/images/round-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..753487bc4d7b8e9cb2e569b5f8d19600e44d309d GIT binary patch literal 14170 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 b)djKs=|j%~BQG4>#RjCr<;AK*egysx%>Haa literal 0 HcmV?d00001 diff --git a/web/public/images/search.png b/web/public/images/search.png new file mode 100644 index 0000000000000000000000000000000000000000..d91c2a09322f6433f10b636429cd0b2dce8110f8 GIT binary patch literal 294 zcmV+>0oneEP)(V(Hn<&!!v4>XkgJ|GbS{L#SX;b7(EWgLPzMZ z1R0Uy3v0emhh0d70#~k3ibqJK1fQ-@jv6w-3ycn3pqvbVysl smi{(677m4|m^%Dd>>F8lI4pzw0>gw9=^$4=OaK4?07*qoM6N<$g7=wt`2YX_ literal 0 HcmV?d00001 diff --git a/web/public/images/share_anything.png b/web/public/images/share_anything.png new file mode 100644 index 0000000000000000000000000000000000000000..3dcbf0c631395d91e2e1babb8774746a554041eb GIT binary patch literal 7481 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 literal 0 HcmV?d00001 diff --git a/web/public/images/share_anywhere.png b/web/public/images/share_anywhere.png new file mode 100644 index 0000000000000000000000000000000000000000..f869a6f3a11b19550cd1473eeb1174c6d84f2e01 GIT binary patch literal 6097 zcmaJ_d03L^+E-L$6Bj^H5fS$?1SO*yUzs=5+Ay2QVo3>u|HT*v!mHkr*4D!Z#m%x}Cf7<7wUa`#Vc=NYMk3 zXqCOFF{+M5T9uvp^xgSiW{_#ZmA4l7&lo+rX(gfRVs&ZqR%ZH1T3gt_4++EPnF7*x zNOk*Kd&O8o-H!=gFo^fzv7m!fy_)UMZSPvV8sYm=URUgWe^YY&(VkZp_Xh9n-SO(# zPI;Sd!IuZuw=}t*>>>@8HY5u}`o)d}5wMBSh2E-m>0_bab(6f< zJRKCWFO9Na@2|ts4_#}d&&pHp=<{yWLO+O#{Ny{Ty3fKNu&7jMs~qC24e45r~^4@@`y64R}?|ka$l6gD*CGcRtGF zywI-;aYgQx)J2ox9hlPjwJf(J#LN~uxWZ3P7XQR7BQvd67JgJ%W3-G7gxnh6^TM}+ zr+Cx9^P2>;vuoc%R4{@j3fz8w9J?M_uZBRvi)Z;2f@ySH?7f*ix@olibOoE7U;KT) z+>=Wy6=tgzrLf6?!nTT`#m7S_?mopey9hv!Z1EF+>Haa=Gf`*Mdjs#oriQ3bQL}$$ zkNXzaykJ|@t9D~0Ln}`Skc8-2M6DkxDzp}|F6zKwAzg`*=ph@G_=Q7Z<)7J}zp<)m zi>@ru&i4wBZ?OzA1`w83K`)WuVapN+WiF=*fYd88Vr5YCBle6WEWN1t?qpazA7!Kw z3IO<&b)d*? zj`=hdS~UTSX|lEK$@y|X4M9tI7O35NSVq@Sa?0~U1jb0$>ex5A4NS1q`f} zp^jJ+k+$fOnr;1unv44ibqaPCH|WbF<*MDR$;h-D&$%I})dmaN`S=+Inmj(j6k(Y< zJ3hLLH|0z?!ShC~Q+srj+a8M9eu`E`BSx*p)>s9;u)Br;aQzk%C$gMleu9bzYuN?t zONk?NcMfqK0G7a+X66)(6gLb#A<$V_C$7_MSOaA3Sg@GXLOu{N=Nus1?&EtnV0Kf4o0?P zz;2F)EHjd6Q&2H>ZZ+IiPiC_Gu2}=4+}CdOp?EwISY3WlzjHE_po*_$@iFKU76X3w zWt*uOm+r)V*LBIVQk!^GL$Q8Gkc<KpttMy|6C}7OC

%K@!|mBKw@h*ZR#r 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 literal 0 HcmV?d00001 diff --git a/web/public/images/stripe-128.png b/web/public/images/stripe-128.png new file mode 100644 index 0000000000000000000000000000000000000000..1d89b3bbed555e0c52a83d944144a03f3040c966 GIT binary patch literal 1444 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 Vh`XgHfq#O~P7Ct3f-Np5{|%w-Sdst$ literal 0 HcmV?d00001 diff --git a/web/public/images/tagline.png b/web/public/images/tagline.png new file mode 100644 index 0000000000000000000000000000000000000000..54c33498d14362be51e8ef3173e38a2ab1f52d66 GIT binary patch literal 5753 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 literal 0 HcmV?d00001 diff --git a/web/public/images/user.png b/web/public/images/user.png new file mode 100644 index 0000000000000000000000000000000000000000..ca1a39b3ee0657616ecfa6c06fe0a92f00b3a0c6 GIT binary patch literal 2349 zcmV+|3DWk7P)ygYn29r0CPovZ1_(w31+i&pXrP-Gq@h6;0f7d=1wla+0wN;H=8i#d79m=nV=b9Y`Dt!CI54U%MyTpLM04Rm&Ir?ul_&UaPNalMkp?j2n3+D2PN zJZEYa(78L2j2KPtq8OFg|G|Rw_5+$K+?!4pyJARjMH*m(K1##QeY0_M(ILIzCSabt zZax{w)E*mmKOTL*hszf~q5DcX#+#KqeOSxm#|OCi#d;dHgt9N+kJ3aH(czO(*;zNG z#0L)eFR*CIczxNT39Oi@re@$+u_k}jvw2^`L;41U0lt>=1h(nl8Et@k*-&Q z8L%HX2^ z_sjXzu!#EdM2;7Q@aS|Fbmw*^$Er=FsOSjAlV^268*m7&6vOHDz#g6&%gI)Hkv2w7 znp~_qO9lI8goCk?&aVo&-2NeO5*~blHZ&N+hW9~a+ke|YM0fzpmW0w&8cknAI>&b= zGt_dTLK5gaLEvsq)oU1{iE9E0@IBurnLKuNToZ+35j-a6>7 z;vbcZQQ3PC?Kg$S6?z_3CBd=f+%wFEYsqjUg%Ee8c;Aw-7US}yZ)-A7)C9U?EL5;} zo&v>C8O|1w?9a;PsUa6yKjP`Z_1KRIMC%#^Jr$g*ETDUDF?4Su)ZY_npaTIuevEWe zlbq?n_lN!2Ulzpj)zb(Hoh*vZMpV8zX5+1oOIDJZ@sOtlbl5??91baHO>$tFJd{u8 zE{3{Aa5IrxWf81gu#o1mm3$}G+`aluaDFT4nX`CL%8M%*4ZiH-?oMoa)9LH@j-7{c0uXf~(l z`6^j2zN=?f+%zg2-N_wfVU&93=uS``50wdA-=D#iowK;HIT8-eVVWXP^iLhWL9^*7 z$>u=*Qm&LOg{ow}DVoE>k|fwI&dV}*Zb*aX0v>G6pe`YS_Eig6tO}ykN5?jQ4Y_Z~ zC>~*TTzZ;glV2|L#cNPWmLq;G+rhAeRE(&OV z0$wU#*1hY_@ws92ZJGx)OU0lp;iWs4xCJz$UAP{NRo^2M4X0-fgKLuLA5^} zxj}s0>c_2{{@m;c8`vM;sR#Gbvi@gMQ`|F1Lljj}d&;;ls_VQ|Z4poqH`);mRE7 zOyu$zUwYd8XgR3stf+Q0m4pOzY!t0daKQu0J$N+38Amblmxrs-TDtSuJQY`R-H4UD z^3q^0v>p*$tPO%5Ej<@}soUYhf!%@Jx+s9RbzlsGuS0m!C8j}ScKU=HN9x?7r2pvY zM(qHOMK%A}lM1Bs{KOpMBBwIg%7cOLYS7twqO&5Y{@o;w)J>O>2 z)Ht6{D?)LMaK~qXn$Qd#S!;bc+Mwms=UVP{tIu9KCLbXEul7Xym^aV%?X8dS;kK9y zj?RF>K-wZTw9fRRS+uB2xdCu56<7sq6!A)UAp9&39%eDzOoJpjBMo=M#N3s?$wX{! z-s50y%I$6^=!)JWMSza>mX}#pDRr-ao%?FJQkxJV`U>an@O5dkRmh zBcUY@jOoGx!fIe0kPl=+(@Yu@)I_*C@q#EYYwct{DDgUb>AbhO^m}x_T5n2gf}X4C zUHunRdA2EoM_>Onrts!<|>zRnyq8MbM=z8@%h5qj{J5%Y8>RPU! zDK$|}e7CHiuOZ>o&gdYct(~s#9ZS!?akf6jh7XcX?JSBbkX{+*B>mO)S3&;-A_8ez T`8Y(M00000NkvXXu0mjflyrc% literal 0 HcmV?d00001 diff --git a/web/public/images/video.png b/web/public/images/video.png new file mode 100644 index 0000000000000000000000000000000000000000..0844bb2b86be4a0c6753dd2aa6e14502c89110c7 GIT binary patch literal 243 zcmV148rzS?I`5qch#8@N(fL*TnBEkIOb6(hRM9dvN zWX(Gl1k4-0qUDY~B3F3JF#-9)0skmmEfs#|Y>9Bg2P+P8hJ$_XX}P4z6b4Rs;EB_G tVc4PJlLXU$r+(;nTI3&RQ^Hx4@DH4=6WA_kzRmyu002ovPDHLkV1j!1Xw(1z literal 0 HcmV?d00001 diff --git a/web/public/images/windows-app-icon.png b/web/public/images/windows-app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..388173ae5666f858ce8a34610904c82acf20de8e GIT binary patch literal 9110 zcmcIqc{tQx+y9Qi*!N$QkZjqLkUd+nS1KX25Rst_vJ0VPOZJ^4*$OkVE6L7C_Pwmx z8Qa+2Gsf?Ep7(vP=epkakLS9^cdqX__c`aj?{hDo`yMZ@=xfqaouGmsh*s;e`ZWlG z;Rt^eWlK&`L*iw|ix;4=lOOnsZCl=&NEU3&-wct)S1Kv}*&8~udDfKy!qOwU z-(5v(V-5QC7juWsLus^Kw!Q7;h&}hkwIN<8%|6O@VBMJt@3NRU)B^eDPFhJJcZ3jo z4;Cwiav@*gJd@3|0aq)(>iCM-#0GbmubY%(@no7s%Wyl#_Y-hm+wo-E`-Uo96P(kK z?=}0AB}}-xiyd1CDD8yoyc2e`b)n%jo&heL5U42_s@2Djx*Pe2z6Fy^*cWu~<(xbJj#pAIEHs4Vj{1yp+#y`k#A zk6bjq%?72J?2KrT?S<;dJ5xcrAF6cd@!k*=J3DBF@M6n_Aez{}a9?cqA0VI)U;Nj| z_e>VEZ}CB6kEOO-Rce^MAjs3DC#@!WhX)TqanANiI@p>pB^b20H<~uu+Lmbm0b$+8 z)0BgiNFYwJ6S#$;+!+oaSXJ?5?2=|G4B9*po=GfY?X-q!Lu@zf{P#5=NOWs;)NlVh zDW|Qq9!AzNl2{s!Bm0038(?%(vGz}SjaxWI>V#p-{|NS#yg`(VX z+$bEf=`5yle*{(*<%`W!fCckiVly7#`%xh^{(=cP^r|B5fI$=vdC&Xp^MZGUS-*X| z5*lbLpBjG`d|v?L3Sj)CgZdf-sUQd+QVxg#1zp6#z~`Uu#G#}2e~|oVmW+vSwC@Uj zkld;B8Hv+quzY-mU&L$oRBmEVvti6nBWl) zBCWT+wX?{~Z18OgI@~UAnKC9|{`Bl(88_sMrG?U&i$G9(0Y zh9c>Urwv^j^Q&PJ5EKxGrMxSsq*Q!`oP3E2BB&y`ZS93?n$)WEe5b=b=uiQwWu_W! z9jm+H)8Gi8kb7&pEKI^}`3rx~t1@A9EDqAxh+<%q_)AN)`315`4@LbpwLS7lLqADQ zfE-B0D93H-^aL|h=43$R?NLh24ylftUUH@9cI?p(XA9N`+RTsmOBW2~Oz^M(&y%Z#yy98XGcfRPP8e;D0w5OpNzs&c0H_>p>$ypFU|mnQm8{E%VlC zH=DuWBaMFUipcWq@FG3Zw=}XFjrJMEV%Uw@kBM7#YaYjwP;fxU4jvR0=V}Vk%Ur&v z|7lB|x3OU)jPDq`F-H2Lv^t-T*5r8B!z*xK5LkjDl9W7DRyVJk{xF_G|MU~EQ~jNn zUy6TstV~%!D1;7DML@&k`0b}5>eFpD>rSb8ROrO@nBLxgs^-P&&MJ zV&ct7J7jd@PY#omN!6xEpGOqM81=7FMZB`5>Mk+8jpKO!+;lxBy9)G&AI_5rnp60E z@8NRC#8W8f<8YJ*uqjTQyPiS-LjWCwnH<{IVTymv!}V!YpF))t`l#q%y7XsUEao>Q zaAoKYiTgFvinpE1fxrpqAacj)#R%TX`3y|*;X6NeQ0CNKE#uujX5cfhT2lRFS#jm( z-&QjXz;z&?inaNENx^>C;5}zQVB=6+ZS9yD<;#wX5Gk-s=nC~;*&}W&{lTv2!zUv(=+T{Tia$KE?b4iCNG=mn|l_X7YXv; zsCIo6X;29_+o;F#^>F!Rh^|<(#5C;>Tq^7H>UQ@U>rbk{=J)cDaD%8)H>ZeZ_py)O zRqSSpe9dz}6BcQOtTxKYumFa*694>~*F+p{gP!UsCy1DN-N`j8CHg=Io97ql!<#=% z-E0!bTck>il79#9@aIl-qk6%UGWgz_3H6d z%b!}C@NLyu=0u|{>He$N9*TDQTfegEUf?!qAZRd@@u~6pRZ4?q_k3@46m;`xwclgFLAzQGi3~PZHxhn zJ*wH3)4;r)e|hM!c?2#oE9P^>m#di!w43I#KTt&niq#e3XvY%{mI*e2$0Mvgr)r8vGWQ9S=Q~vI+AO6<25E%?>oMt7FW;6-d{g8yxjQS z*KOwbOKgB{0l^mWKO~ft?mAx%ah`IDYoje161Y_=m4|e`^MKm8p$A2vVPy?i40h6Y zwcuHd2H6DtnDU;?o33d&G?_%N9Ize|)zU9y+PHbun~$FpVn}VPbkTr$oE^b6!mx_G z5Sz~o#rI;oMDu49ZNOgb0TE+H}7W*5qz2=d8X*m@X9e*$N0)`fgewQ zm3)(O7UcOFbS@rps=J(w!mYIrw07cZ4~ zuZy94#~;M1ZHWt0qB_e^S}rri@G$}exQP!uJ3|JgCz7ZNsK;J9@LW*^xq6T-pn#kA zj8a{|rSpXB1`;knSH*=$5<*r7kY;T?ogWno2Z9qpQ{5ll2hb5^iB%rm&PUn5-@bhR z_Ko?|KVGAHfz=YzJ4Lc1Np+#ml}8{^5UwyneD5nE!Mbsng)J>`5ullDe-F1ZmqVut zXIE9FRE}HL>(zt)@~SKMlC~vZ#~D7_^WfNzG&Ql>^V#f`HZhwY7!Yrcwv({}ekyXB z$idfd(y76u+tR1BV+yICY|rjEkesfUId}E6;S=8C_g~B1E_8MBZ3bxqC9oetGtX-7 z>(cdaO_-}ux{o^6O-oA14vjCFJ(GZi!t!UCQjKk*&1Z`ov?lN7C=A_E?5s*r+zFpK zSGYb}FSl0DI9>8U(dQROFfVPRbu~8=+w>d1B3rwHO_1h5l9yDOkq#BxM(Vd?Hq7XI zWweYoyEQ}$-M3f8?b?f7^n`_!ZA4eRm-_BGeTn>Q&X4!(h+qZCm;fgMs59k@wP!KY zwzrktQPFuH7^pdM#Vd-CU%4gVybZH^1f;NAFWjSdk|2#3ls?DWntTP8B=4gI@QicL z=+qM)3x}5|PEEK}j`WT% z@nIpWh1mSS;LtqEkf?z`=1V=F;eSsSTX*pK7@$?w7t~wW?AU!KUkqP9j1LrEbSUwS zhB3CfiSNu6F@_0bhard&pQPZut3KC9%ghd3*p~LS1knt6aBju9ztTiZ+3!UB48AGN zJ3apzLEk`nxS5kLRxe{QHcC#TRiRAc%q45Gk2N5m5CjWAvH*D7m3jGvaX(8Uzt^7s zIcB0%D8sDwsPZpu4*^^ebW%GM2Bs=wyPd4)?DU%}N~m;ch)60-G3@xV*^Y*leXSqu z!a?MJ7#=K9{WcT?qP$g&qaFR@*-|5XPKc&_a0Aw{a-)x4o4Zw1z&|5G!A@xN*{fKQm45HV|qky|4RS9 z(<432M>Ot{grek#lXu^&7u9WU5=tLCAuggG%iGQ9J~1J(Azal_P8!`M$Zf?0@g8*C}?_e0(sXr&1MVN`AYg251yq zx|b5KB`fy_vga&|il@fpKDJViGBuJ6r{BsJ6Bd5#oSS-rfnJ1lUkdNn*E zRrMahuXi!L1_I}~4NpF9pY`c6-vB6QV$k=@C;s-Tb;-=Pp>ju?x^e?t^9CT5&^OJ% zNsGizUjOD6lp znw%j+%{lD(E^DFkFotoYS3m%4@l32#-49WJH*xuKy-KcV4%MI;R?y09*eDA#9o{956i-lOTPTtWf@*Qz8ef}Z=~s%@ULeq8~7M|b}FnsN#uHTIj`5Pr6zZ;bpn zRN97=acA^o$s9cWx?6kFM=R##U#g6v^o1vXK=cJ_ge6ei^z)DIz|Q5 zt@xh>R(DLytvzz)Xn|D~6YvY!%(Vh}FJ!6%MYLZLd`+Q`+{89Jd$Pt!y}$fYRnBA{ zq$)!I+h)Ft76o*uaDPWRyDH03?&Dmk5w89M8%2LIF$-0Ng*yXnO0WPVC(u|0^p~&v zZp7U6f_m8r^3A|NzH`n&dIr^+PWmK(dk_-}G*ScBbGH1wl(^hvd1bA8nWB@vyfB=$ z?Ec<{*%`4B{M8cc)3i${sDO?2_GEM6e!7ErUsO^HQWUAfAo35l?2&u!rCW?M&#!i< zBjT=iOP4QG(%_1F^8Z@ML?)^|F{jHlTRM!kfG@j{>qb7D+?0dLW2u6MWt(%>n4ZWMF5bdDwp&oZlC>*)P%l32>FIrm9Lz&Gr+2?ID#?#L zy2qm;!)h)a&kx&l5Mp6Ty&JOh1C)IzI(4E?8rl4g$tsZVEuRK8B-#Ah+eP+xn?yW{ z@kn%0R?{Dw75pOl$k8$Z44kp=L2Zb69Vg-Tfw+aVAr?iOC)lP-9OzxJ>=LH0?wf(q zw<^W6k%<_>fYXTg@4UL)Br&$kjxsBgR%9Mc&NL|ubr2!N!-SZd6XI`s^C5}?z0Er>Icuk6p< zX{Mq59W-bJq$qju`(n)qOa`6|3~@eo%BilbTP6*G9om=2WWK$oKtjCs8uv`stD}Y> zcLmMIt4)rR$BYag<-87|f?Fk<#oR*1puh3W$#=~DxJZ?c4UsFe*!mjUV3RkS8KIh} z_d(V$xWB9YC!F~emy55+h=K#eUSi{vvmP|e{A^Y&8p)CW>+|DWE--2O3}9KEmT;vF zms>LAW1ZO}>vyt5A7rz;-C`!LH9}mf+4Oj?^h6hGN1;0B_SB9-ary36b)hm}sXAoN z81rUwW3;TpQ*9zl3+_kctLp9QvPYH6QrqB62c0C6$(i~)-KZkR?+PU$t=CUnwDg7_ z&w@^fDWQr4%3;qm9Nl*IsaCqauegSW&wL0q=fSkPhMmy@?KMN|_Lfv}^WZ@ObOglr z!@au#*_U?9!=*}_A3-#<;f>i{POy1)j=yphPYk)U2m>Nu6Ef%|uR_iR2iV2bC+j8> zJa+KB#h?Y&^7@4%vjq@kbawqu&en?;0;|%{;t)rIx3-L6xn4J@--ZaW4VUtY*)^QCM>>}o)s&s@IBrkrFOb6&{nax$$=N}Or`27T9$Q# zT8RaP41=pcCV$Yj_?)5QqDS_=mWv{;3+ggNp6GRM-;ybuC`I|hue>l066qzMS^w49 z>Ag{U`)3*fwgWQO^I|u$-|y}3d~PMLU69|jH2XG(5NXmLWdOZMejO^Jj>1Kk-w>QK zp4K-ie_{2x1shYUSE6<)CI(r=P9!NsTO@7T4K4>>jep@SerKX1!WhQ)JQz;+}aL%M-ht+k(6uAp^!LLG}U|4T5&>H#U zGRj(YiNmyuPa^vkXa!xiucOQrT|p;Sojb2^&U)@f^bF{~*xBAOY%wN)arC3%q$GQ1 zH`7mIjaEw<^3qBNzsp3}h!;5O`hGvZP{U^k!kyn~T`4aJFQ8L@w}`!_6OGZ)uDSlv z-6>6mYM}jQ>RV;wuh|||62@nVf~3@BuxRKY!tAqj*G<=R%dKt~PZ*2vj z6}V#FtefksnV1n;eDSPD%RWkZ_4HmbxgpF+JHv@q5)|uqE>OD-+TnQuj}4D|o#h9m z#AsQoL5FDTT*OJD+C82(bZo6Dk1}Wv%c7_70iSt$OI`RCer)A7%#HQR&CVR3iROeOl{0ZnC?B1{2{oeZLS%oAA z>tsIB81VpRNqRp;yY$|NMYm;`wG7nqRebid`$N0F1lo`2FmH4827Lo(6Z>IHfd?0T zz=Qj|@cdVqZ?}yNqxMJC;5)~qXKt4%P;=>(?~wYR=BOGHk7CO49k-M!-ez3M4R)ED z)W%-Z)1~_E;%rmRc8QavDP|Y?d%hg{I)&F_#{)y%4^PDyVsMLX_e(b9vMonf4=Py>Nxnu(tn@+@fbQ})+O zmSZ1gruGt`NMLYd*C}G{R2tNv4ud>)%Q0B9oeMoNac_mwUR$|EDcgp1A#V z%*~h9Bq}S%smqmWKnLwzl=U~~T7XL)ZpzMmH$9-+z25}_y9`%A^~a*)duyQQd@EF4 zf$oY{>rVMkiH!16d0AOLE^_Sb6S+`5Va5{)`aHM;LL{QAf6j0DavBEOC2bY#x0f*s zJ*|$8iI_@!)!tH~FwruV!LK8nh?%<>*+LD``?>NXr^mb%yzs5%f``=(4=SYlStsXH zHo5_ER7d~CO9r>*m%pU z{TJgxd9QoG1FU|e^q(TYG72+@++no409j0TaKUTC&v)hTVNj7jxa}a(?zy(v3`=Jx z0V;yz3_ZT9pC8!!nwt|sF-*WTbjtvd7fFkF<4>%GYoSf5Nlu~IK|+ZqTi^>y z36U>w&`KwaVa2Y?e|;!xqB(5^N@r<8gVy)e*K?rH_gdmXG+eb*9C!`f%65mY`ylla z{2t4zn=@)0;F0+k{tR1{3v;bGM;Al^hZt}#s9h{S)?H$|dfCczU?~0qgS)|uDuSUL z`&H+TdKJuG| ziOzpDJl;ipO+J?S`0PDW1i$=Q*>SV6zMQ}aoX}4Va$R0C(c&uDt#sBa%%`+DtvPKe zY4n(t8?p0*D&RM1@LMj89CQc#it7)4 ztl)so&ip;bhJtF-;74Oe1jMob=pqL4y$(_cXIDdqzW{^wPV}lAh=Ol?6&+rm1j3^Y z5qq(O`3gEbJtZ{Ln=Cg|$^>BxO`Wk0;6D&7EV@-Jw4jSMBZdCv?0is~a_03g@;z^` z)ahU=txy1rjGpAewScu9lfV7VJrW>aZw0-{RR4W5K(w+jNWK?BdQth#y1l>opk5sU z+D&NI@~@5zq=)*pN>wcM3%eX)P+`~V3;&Vw*g$INb8NE@ExsES7l?o^=%yN+n?dKF zSAc473PsW3t!GcsA|S_zf}{snJJ&8p2vUCcWI&}R&irjX9Qr={%b2_h6LX9nx}`Ij z=U@GX^KCs0;(VL6M&rKlyCilB9BOBJyIp<;o%nDc@+~xs?@8;G?%IW*#2j4@toU0^ zN+_->8FlxVzxmFYP$uZCd?u#M>ZZSWMT|K=bO&#a$rml=#0{*Mq(Z*4{SNG=Q&KZ% z@lZKPx6OO7=iHJ?p_##NlnYe*+1}RpXIgJT*7Ph6@}0KVX~{rTZK${>@gpDweXe)s z-l!B-$*fFELbVSD+s~D#DF1m^GYT71_h_hb;#f`VRnnq2ghSuzFp*iYDutq1QiWr% zu_e*lc7wOv*>RaMUBjpdXzXAj&3M(q1p*}WrYOA$0#cMHO}Yq?PLR-%h!p8vqJT63 zsiBGzDI#p7h!~_uxnbtJ^Evm|{eSPy?(BKaIq#Ww-r0GcS&WI1E(;?MBM1ayK_L-l zAP^1Z_@SqzGW+zhuRx#^6cYmrZEC6O;`{&m|0nRja{^FXn*r)~{~K*)WDZLH@pZbd zArIqec%BKg*p}j~K)3fk?FRRUr$)@L`QCZ3|E|Bu_%lPM6HJcc+!ov~l&(H363yb@ zfw<9*Y1asae9|pDvw53FV)w7{=n?-e5lY=R1Nk7^QW#)T86Uf~kuS$^iuJ5=WX_kN zJGXidI__S5Xv$&se8N|YYo$EZ3O=Y(a=Jp}z-u4uPDbX9> z&wca6X)@bE*zuy&vyc7Zjre8gu%?g8U#g8sS8pD;9;P2+N^K90D1?SZ z0L^Nio8yYUv}F*-aE8yp^?{M$G?1Jx%if)n0Fh36?=h}J*U^C|PK*@P zS|}2DR1nQs)I!M4?gF)_e)-ND?cf#C33vdfe7sNFvhX#&_K&Z840%fGqH@(uK4@k1 zrIItYklYeBZmJAPikFFj^oZ-=w2G(o5~$AkQsUPUccr1@Rm-QJ_ZPtIPwE`8k=&FB z!`_r5(yeLW9#CHeeO^}3xs^cmHhaC$vDAur{qh)xohR_Bq&+!~TOm@7i}}Y!tsC-G zdeDuU*4baiOCSaYUcqNS z1&4)Bb3Y50uXc5hka&q!x&*FC2L}--= z6Rve)$?Yy%LqmZ;m`;MX8kpz(U>x%Z0Cw~GHI?pcI1(E&^Mwc{WeC4B=H{YJCj8^CAn4CN@>Powz+5D%F5$C#fdGB!E^5WG)T1U zU=9Za!|(eMtc{|)#pdV1iL}P^Yj6yI0C*@Jpt)_7O5I;#vpe+i2HHoKNIUXomkQO) zE%9{Ego~-#uuL)#A-*Vy;SbM~qQc_p1S;Fj)F~D;cY4Mc?Mn!#+3zn zczlE6%9cl;aUBIO)OI+@g@27(gW4)Cx!GI&*p%uEnKuoH%agK9P=M9txL_(H*DK)6 zfr{YwkCrR#>e4T1pX^4V!xpCmuKAyOGYPCub;J&@ltM{L=}J!~D`JKhK1-iQ+3-r` zKuOl=m4Rc7b4^>ewHOoyj9E`8O}aC4vOzlIO=dv7UOMnzI=}WF)A&Twr|V32&sWi> z0}bCAyrN)MKvRhF-PnD<97L7IkAWt*hH8}FN4A(%J}4<_5~j<3)!AK&3DY^33nk^+ zh7`n<227Jud8Mo_!9$YO!LLZ%2cM2;cD{}Ku*i+6 zOsem6;Z6j8ctsU^Q^j;#S975IsLP^o@>bLW@hi(mXx_H8;z2qX%J?FTOrU}B!UNa|iCs0Q-npr6T z(L%LO(i=_(Zoq5pyzxbGHk^zoZ z8xYBh;T#+SZHfG1qlU)q7erq|QW)Lf8e!I)DD)8E5&~t0JP;d1qW@~G)e5^{FOUqx z6UlEFn2joGkmy!mypsVUu$2ltB$mc7@XEot^wEs~`ZI)c)+QOaLv$Ak$T>8@*J&5O za4;J_OKip~J>)Pr3^m2eYk&7+w~3s^0@B1znFv#^xI>~?(27lU7Rls0043GH1{&)p zlnIC<&Q+dVq9Os&#!O59xxyKZIm9sNIP4iU0nipNH}0sGQX`@mVat&F-L27)ZRo*c z$oXWcLcVN7)dt@w!3nXTXuHhw=`>clI6%_bQ30ozC_@}`RMXDV!2wr3%qO+Qqg2TE znw|WcZJJBP6W?iY{QAj5)%va9auwssRa*~wuXPTu+o;LVwleY?e8vJ+((9!fol00PsH%6_$|Ga&)+n5SV0EYImU~d% zCob^Fz+IVM{gTs|C;@SWE*k%MyeV~<_lh^V!;@~12Y~}-r3{Gf!JND9KRe1cCRJGQ z`V`%QaKA0OLU7M+=*Fm~Stg=b!1T5G6)$)Ld(3*2^9nJ3G9gSspzuLQHzDlUs`tSqpU} zWMYA}bxoEfrG{iz=|H#yXI=KVFfqy`DsQ*2^vBPF57nAxF^Hu2NL~L5;R+VD6WunL zLPpG?l$yuqxO&`{AiJuOM>5c85O8nMASiYRtT){z%7LUvZM;=ZLOXf0zIb;B-iAVZ zy1m-|i5xZTLP<14?Zb)L9WCd$kh+bc5)*0rVno0B$;Xq0WlWX@CLgUflMwdcrpFm5 zH9;`0jLN=LuQj_8jLI&Dh~1kJh*P=za!^DcLyg`^Hh4 zS5kaL_Y5qQ%2jK!n4%YCQ;kLUE?78cq2BN|oAllivPV)>N|qECew8*3&x!46TZ}#0 z8GNi+9E{x--TPAVvN?0dRzaimlL{#`Krm1nFM#0CZ4(!{eWGfWDa+hI4@G(8Yhjwt zEF{Nhr&8~BPEv%(Rq({q<&?&T)l9trk^z&K`2HIrS%Y1tosQ1F_#=vfEfHPvlZ%IM z^sUBOFk$!|HN^z5j%rHaR*WozQ1<}M=@7NEne3WiM{By-ilYQ}re0usq39K_T&!}! z9P95YNvQ37T4r%Cx7p~Ix#F2%QG%PeZ)cHz-zgdCh$A_HR3Oh~z9`Uz-iI}kXJNeo ziQZOkXK_2{ax!?$q>to^S)a7Ch$SPza{y?o9+eENm+M6P^nrvQXc$^=iUk=~eHiVC zogJw$u}sbW20ehjC+Y8RVnKst`V@B6_jf#ytBlxZt%bDEmaGT~|I80xzejQ9WWKcUB#_N9c705*yyG)7INGt}(O!M}6|63e<$=eMl(2&F(#Kt8zOWhP9Uu8!?`a+Er`^Ax2WH(2^JxK`P2a4)Gw({? zF^LotS=CX?zI~my9+Y1vSkck|ElgQHyfmcuDwnT%J zVd3&!9)MTLH{j`Hp>WSv!yOVk#t!^e>fN5CvR7Jy#iXz1dA;0NYTM4=GZwu*{Jb^; zVveF+tDL6c#R5~);X06oaaGvUJAfX~?ws@~^H6H16t3||%1)gXTDzfnrXT?!drLb& z=q>@K0j{u#=$;L23WJc5_!ze5Rlc@1CR(F0h~=q^EH5e(kLO#Tbea|JDs?_$ zWodG%vz!Y|H8MjEFkq6@{3 zX)Kkt4oX26id;rf)jZMvRQbrL(Ue3AGr6a)Oe$+goQ%{B3a8qsK7r$uV?fPGQ9oXJ z434>we}iLg?{E7t*D4Z{bmwmqRm1%e@CTInBkB)m`_IBZ^9lcK;*X3(^grAABZH5u Y)?|;ht}`u_JN}nKX&WIbH60@V1-8X76951J literal 0 HcmV?d00001 diff --git a/web/public/images/windows-logo-app.png b/web/public/images/windows-logo-app.png new file mode 100644 index 0000000000000000000000000000000000000000..99e05369708857edfb19a6ce309362899e6964f4 GIT binary patch literal 668 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&1|*M957cI0U`qCMaSW+oe0wJ_qc>6J_{ZsL zxw%3@lP4__z39D#d+nT}<_ujgOYt{tvYxtLK3x-Mt#+Mdd}~tKlpwt@?MWuSCs_5i z%(>)bv1xN(*|svd`=_rT4Sru-Y*qcO`t|4iRrfDn{{G6+{Qrah?&lvStFPY3GJw$2rd3a|T63^W z9VnZy4 z?)#-c9#>fF)f-)VE&5(pboKw}RN}GH-CuZkdqQYLlbg(;%#z1~b_q;sZQOROs}E|m zWE@ld@{sf1WA>i8{}0Z(*k{+H&~4Lm_YR-g%Wo5#o{IP!#EN>FG-n{88zMe4OQV{; zhE;4>*>JH-`Li3+naW>YHQ4h-Z0mqIl7|f`j4hXO-JKZgS*+@I7_cv zB!B(`?_@5q`$=n#^U1hazk8%=mn>tZ&Kbmu_>QO zj5_!zy06zmp>uPEz|MR>3zpNrMUThkrsO|njB%__k-lI4M9J+xV_H9N7w;R9i@;RJ N;OXk;vd$@?2>_${A7lUk literal 0 HcmV?d00001 diff --git a/web/public/images/windows-white-icon.png b/web/public/images/windows-white-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac9bb39f4499b1b4d2f1bdf79367ec8b90b356cc GIT binary patch literal 4233 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 brHNeZ71uf=vTB-tUJ)?HmZ&F2?)ZNJX=4^P literal 0 HcmV?d00001 diff --git a/web/public/images/windows.png b/web/public/images/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..211a894d9a1fd280d5d320b820aeba65e5f8eae7 GIT binary patch literal 252 zcmVrxq-h9d7X^3@YjUQ?RxACBas(@I}WV$9zy& z(dAzYlp`)VBiPgTGF-Rvo?!Au@W$$Qb_s$jdK$KV@Az$SpMk;~r<`-gr1Afs=320_ zdQNan@YU*u3mk^vqmHb|7e6D2CBe#}XVg&Cgz^I(WvzQ388(3c0000 + + + + + + Hostr - File not found + + + + + + + + +
+
+
+
+

BRB

+

We're just performing some upgrades, we'll be right back!

+
+
+
+
+ + + + diff --git a/web/public/robots.txt b/web/public/robots.txt new file mode 100644 index 0000000..9213f77 --- /dev/null +++ b/web/public/robots.txt @@ -0,0 +1,3 @@ +# hostr.co/ + +User-agent: * diff --git a/web/public/src/app.js b/web/public/src/app.js new file mode 100644 index 0000000..a548ada --- /dev/null +++ b/web/public/src/app.js @@ -0,0 +1,129 @@ +import angular from 'angular'; +import ngRoute from 'angular/route'; +import ngResource from 'angular/resource'; +import ReconnectingWebSocket from 'angular-reconnecting-websocket'; +import ngDimensions from 'angular-strap/dist/modules/dimensions'; +import ngTooltip from 'angular-strap/dist/modules/tooltip'; + +import { FilesController, FileController, AccountController, ProController, BillingController } from './app/controllers'; +import { appHeader, appFooter, menuDropdown, searchShortcut, stripeSubscribe } from './app/directives'; +import dropzone from './app/directives/dropzone'; +import lazySrc from './app/directives/lazy-src'; +import { fileSize, direct } from './app/filters'; +import { FileService, UserService, EventService, TransactionService, SettingService } from './app/services'; + +// Declare app level module which depends on filters, and services +var app = angular.module('hostr', [ + 'ngRoute', + 'ngResource', + 'reconnectingWebSocket', + 'mgcrea.ngStrap.tooltip' +]); + +app.factory('FileService', ['$resource', '$cacheFactory', FileService.factory]); +app.factory('UserService', ['$resource', UserService.factory]); +app.factory('EventService', ['$rootScope', ReconnectingWebSocket, EventService.factory]); +app.factory('TransactionService', ['$resource', '$cacheFactory', TransactionService.factory]); +app.factory('SettingService', ['$http', SettingService.factory]); + +app.filter('fileSize', [fileSize]); +app.filter('direct', [direct]); + +app.directive('appHeader', [appHeader]); +app.directive('appFooter', [appFooter]); +app.directive('dropzone', ['FileService', '$cacheFactory', '$window', dropzone]); +app.directive('menuDropdown', [menuDropdown]); +app.directive('lazySrc', ['$window', '$document', lazySrc]); +app.directive('searchShortcut', ['$document', searchShortcut]); +app.directive('stripeSubscribe', ['$http', stripeSubscribe]); + +app.config(['$routeProvider', '$locationProvider', '$httpProvider', '$tooltipProvider', function($routeProvider, $locationProvider, $httpProvider, $tooltipProvider) { + + $tooltipProvider.defaults.template = '/jspm_packages/npm/angular-strap@2.1.2/src/tooltip/tooltip.tpl.html'; + + if (typeof window.user !== 'undefined') { + $httpProvider.defaults.headers.common.Authorization = ':' + window.user.token; + } + $locationProvider.html5Mode(true); + + $httpProvider.interceptors.push(['$q', function($q) { + return { + responseError: function(rejection) { + if (rejection.status === 401) { + window.location = '/logout'; + } + return $q.reject(rejection); + } + }; + }]); + + $routeProvider.when('/', { + templateUrl: '/build/partials/files.html', + controller: FilesController, + title: ' - Files', + resolve: { + files: ['FileService', function(Files) { + return Files.query(); + }] + } + }) + .when('/apps', { + templateUrl: '/build/partials/apps.html', + title: ' - Apps for Mac and Windows' + }) + .when('/pro', { + templateUrl: '/build/partials/pro.html', + controller: ProController, + title: ' - Pro' + }) + .when('/account', { + templateUrl: '/build/partials/account.html', + controller: AccountController, + title: ' - Account' + }) + .when('/billing', { + templateUrl: '/build/partials/billing.html', + controller: BillingController, + title: ' - Billing' + }) + .when('/terms', { + templateUrl: '/build/partials/terms.html', + title: ' - Terms of Service' + }) + .when('/privacy', { + templateUrl: '/build/partials/privacy.html', + title: ' - Privacy Policy' + }) + .when('/:id', { + templateUrl: '/build/partials/file.html', + controller: FileController, + resolve: { + file: ['$route', 'FileService', function($route, Files) { + return Files.get({id: $route.current.params.id}); + }] + } + }); +}]); + +app.run(['$location', '$rootScope', function($location, $rootScope) { + + $rootScope.$on('$routeChangeStart', function(e, curr) { + if (curr.$$route && curr.$$route.resolve) { + // Show a loading message until promises are resolved + $rootScope.loadingView = true; + } + }); + $rootScope.$on('$routeChangeSuccess', function (event, current) { + $rootScope.navError = false; + $rootScope.pageTitle = current.$$route.title; + }); + $rootScope.$on('$routeChangeError', function () { + $rootScope.loadingView = false; + $rootScope.navError = true; + }); + $rootScope.$on('$locationChangeStart', function(event, newUrl) { + if (window.ga) { + window.ga('send', 'pageview', newUrl); + } + }); +}]); diff --git a/web/public/src/app/controllers.js b/web/public/src/app/controllers.js new file mode 100644 index 0000000..547752d --- /dev/null +++ b/web/public/src/app/controllers.js @@ -0,0 +1,105 @@ +export class FilesController { + constructor($scope, UserService, files) { + $scope.$root.user = UserService.get(); + files.$promise.then(function() { + $scope.$root.loadingView = false; + }); + $scope.header = 'full'; + if (!$scope.$root.files) { + $scope.$root.files = files; + } + $scope.remove = function(file) { + $scope.$root.files.some(function(existingFile, index) { + if (file.id === existingFile.id) { + file.$remove(function() { + $scope.$root.showDropdown = false; + $scope.$root.files.splice(index, 1); + }); + return true; + } + return false; + }); + }; + } +} +FilesController.$inject = ['$scope', 'UserService', 'files']; + +export class FileController { + constructor ($scope, $rootScope, $routeParams, ReconnectingWebSocket, file) { + file.$promise.then(function() { + $scope.$root.loadingView = false; + $scope.header = 'small'; + $scope.file = file; + $scope.direct = '/file/' + file.id + '/' + file.name; + $rootScope.pageTitle = ' - ' + file.name; + if (file.status === 'uploading') { + file.percent = 0; + var ws = new ReconnectingWebSocket('wss://' + window.location.hostname + window.settings.api + '/file/' + file.id); + ws.onmessage = function (msg) { + var evt = JSON.parse(msg.data); + $rootScope.$broadcast(evt.type, evt.data); + }; + ws.onopen = function() { + ws.send(JSON.stringify({authorization: window.user.token})); + }; + $rootScope.$on('file-progress', function(evt, data) { + $scope.file.percent = data.complete; + }); + $rootScope.$on('file-added', function(evt, data) { + $scope.file = data; + }); + $rootScope.$on('file-accepted', function(evt, data) { + $scope.file = data; + }); + } + }, function() { + $rootScope.navError = true; + $scope.$root.loadingView = false; + }); + } +} +FileController.$inject = ['$scope', '$rootScope', '$routeParams', 'WebSocket', 'file']; + +export class ProController { + constructor ($scope, $http, UserService) { + $scope.$root.loadingView = false; + $scope.user = UserService.get(); + $scope.header = 'full'; + $scope.cancel = function() { + $http.post('/pro/cancel').success(function() { + window.location.reload(true); + }).error(function(data) { + console.log(new Error(data)); + }); + }; + } +} +ProController.$inject = ['$scope', '$http', 'UserService']; + +export class AccountController { + constructor ($scope, UserService, SettingService) { + $scope.$root.loadingView = false; + $scope.$root.user = UserService.get(); + $scope.submit = function(form) { + $scope.updated = false; + $scope.error = false; + SettingService.update(form).then(function() { + $scope.updated = true; + delete $scope.user.new_password; + delete $scope.user.current_password; + }, function(response) { + $scope.error = response.data.error.message; + }); + }; + } +} +AccountController.$inject = ['$scope', 'UserService', 'SettingService']; + +export class BillingController { + constructor ($scope, UserService, TransactionService) { + $scope.$root.loadingView = false; + $scope.$root.user = UserService.get(); + $scope.transactions = TransactionService.query(); + } +} +BillingController.$inject = ['$scope', 'UserService', 'TransactionService']; diff --git a/web/public/src/app/directives.js b/web/public/src/app/directives.js new file mode 100644 index 0000000..5ad1439 --- /dev/null +++ b/web/public/src/app/directives.js @@ -0,0 +1,121 @@ +import $ from 'jquery'; + +export function appHeader() { + return { + restrict: 'E', + templateUrl: '/build/partials/header.html', + replace: true, + link: function postLink(scope) { + scope.userMD5 = window.user.md5; + scope.email = window.user.email; + scope.pro = (window.user.type === 'Pro'); + } + }; +} + + +export function appFooter() { + return { + restrict: 'E', + templateUrl: '/build/partials/footer.html', + replace: true, + link: function postLink(scope) { + scope.userMD5 = window.user.md5; + scope.email = window.user.email; + scope.pro = (window.user.type === 'Pro'); + } + }; +} + + +export function menuDropdown() { + return function($scope, element) { + $scope.$root.overlayClick = function overlayClick() { + $scope.$root.showDropdown = false; + $('.dropdown').hide(); + }; + var activeDropdown = $(element).find('.dropdown'); + element.on('click', function(e) { + if (activeDropdown.not(':visible').length > 0) { + $('.dropdown').hide(); + $scope.$root.showDropdown = true; + activeDropdown.show(); + } else if (e.target === element.find('img')[0]) { + $scope.$root.showDropdown = false; + activeDropdown.hide(); + } + $scope.$apply(); + }); + }; +} + + +export function searchShortcut ($document) { + return function($scope, element) { + $document.bind('keypress', function(event) { + if(event.which === 47) { + if (['INPUT', 'TEXTAREA'].indexOf(document.activeElement.tagName) < 0) { + element[0].focus(); + event.preventDefault(); + } + } + }); + }; +} + + +export function stripeSubscribe($http) { + const handler = window.StripeCheckout.configure({ + key: window.settings.stripePublic, + image: '/images/stripe-128.png', + token: function(token) { + $http.post('/pro/create', {stripeToken: token}) + .success(function(data) { + if (data.status === 'active') { + window.user.plan = 'Pro'; + window.location.reload(true); + } + }) + .error(function() { + alert('Error upgrading your account'); + }); + } + }); + return function(scope, element) { + element.on('click', function() { + // Open Checkout with further options + handler.open({ + name: 'Hostr', + email: window.user.email, + description: 'Hostr Pro Monthly', + amount: 600, + currency: 'USD', + panelLabel: 'Subscribe {{amount}}', + billingAddress: false + }); + }); + }; +} + +// angular.module('hostr').directive('clippy', ['files', function factory() { +// return function(scope, element, attrs) { +// element = element[0]; +// var client = new ZeroClipboard(element); +// client.on('ready', function(readyEvent) { +// element.addEventListener('click', function(event) { +// event.preventDefault(); +// }); +// +// client.on( 'aftercopy', function( event ) { +// if (element.innerHTML == 'Copy Link') { +// element.innerHTML = 'Copied!'; +// setTimeout(function() { +// if (element) { +// element.innerHTML = 'Copy Link'; +// } +// }, 1500); +// } +// }); +// }); +// } +// }]); diff --git a/web/public/src/app/directives/dropzone.js b/web/public/src/app/directives/dropzone.js new file mode 100644 index 0000000..b2ce1e0 --- /dev/null +++ b/web/public/src/app/directives/dropzone.js @@ -0,0 +1,154 @@ +import Dropzone from 'dropzone'; + +function guid() { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + return s4() + s4() + '-' + s4() + '-' + s4() + '-' + + s4() + '-' + s4() + s4() + s4(); +} + +export default function dropzone(FileService, $cacheFactory) { + var dropOverlay = document.getElementById('filedrop-overlay'); + var dropzoneEl; + var errorTimeout; + return function($scope) { + $scope.$on('$viewContentLoaded', function() { + if (!dropzoneEl) { + $scope.$root.uploadingFiles = []; + var clickable = [].slice.call(document.querySelectorAll('.choose-file')); + + dropzoneEl = new Dropzone(document.body, { + url: window.settings.apiURL + '/file', + maxFilesize: window.user.maxFileSize / 1024 / 1024, + maxThumbnailFilesize: 5, + thumbnailWidth: 150, + thumbnailHeight: 98, + parallelUploads: 1, + uploadMultiple: false, + clickable: clickable.length ? clickable : false, + autoDiscover: false, + headers: {'Authorization': ':' + window.user.token}, + previewsContainer: false + }); + dropzoneEl.on('thumbnail', function(file, thumbnail){ + file.thumbnail = thumbnail; + $scope.$apply(); + }); + dropzoneEl.on('addedfile', function(file){ + var id = guid(); + file.guid = id; + $scope.$root.uploadingFiles.push(file); + $scope.$apply(); + }); + dropzoneEl.on('sending', function(file, xhr) { + xhr.setRequestHeader('hostr-guid', file.guid); + }); + dropzoneEl.on('uploadprogress', function(file, progress) { + $scope.$root.progress = { + name: file.name, + percent: progress, + status: 'Uploading' + }; + if (progress === 100) { + $scope.$root.progress.status = 'Processing'; + } + $scope.$apply(); + }); + dropzoneEl.on('complete', function(file){ + delete $scope.$root.progress; + $scope.$apply(); + $scope.$root.uploadingFiles.some(function(uploadingFile, index) { + if (uploadingFile.guid === file.guid) { + $scope.$root.uploadingFiles.splice(index, 1); + $scope.$apply(); + return true; + } + return false; + }); + }); + dropzoneEl.on('error', function(evt, error){ + if (error.error) { + $scope.$root.uploadError = 'Error uploading file: ' + evt.name + '. ' + error.error.message; + } + else if (evt.name) { + $scope.$root.uploadError = 'Error uploading file: ' + evt.name + '. ' + error; + } else { + if (error[0] !== '<') { + $scope.$root.uploadError = 'Uknown error during upload'; + } + } + $scope.$apply(); + clearTimeout(errorTimeout); + errorTimeout = setTimeout(function() { + $scope.$root.uploadError = ''; + $scope.$apply(); + }, 5000); + }); + + var addFile = function(newFile) { + if (!$scope.$root.files.some(function (file) { + return file.id === newFile.id; + })) { + var cache = $cacheFactory.get('files-cache'); + cache.removeAll(); + var file = new FileService(newFile); + $scope.$root.files.unshift(file); + $scope.$root.user.uploads_today++; + $scope.$apply(); + } + }; + + dropzoneEl.on('success', function(file, response){ + addFile(response); + }); + $scope.$on('file-added', function(event, data){ + addFile(data); + }); + $scope.$on('file-accepted', function(event, data){ + $scope.$root.uploadingFiles.some(function(file) { + if (file.guid === data.guid) { + file.id = data.id; + file.href = data.href; + $scope.$apply(); + return true; + } + }); + }); + $scope.$on('file-deleted', function(evt, data) { + $scope.$root.files.forEach(function(file, index) { + if(data.id === file.id) { + delete $scope.$root.files[index]; + $scope.$digest(); + } + }); + }); + + document.body.addEventListener('dragenter', function(){ + dropOverlay.style.display = 'block'; + }); + + dropOverlay.addEventListener('dragleave', function(event){ + if (event.target.outerText !== 'Drop files to upload' || event.x === 0) { + dropOverlay.style.display = 'none'; + } + }); + + dropOverlay.addEventListener('drop', function(){ + dropOverlay.style.display = 'none'; + }); + } else { + var clicker = [].slice.call(document.querySelectorAll('.choose-file')); + if (clicker) { + clicker.forEach(function(el) { + el.addEventListener('click', function() { + return dropzoneEl.hiddenFileInput.click(); + }); + }); + } + } + }); + }; +} diff --git a/web/public/src/app/directives/lazy-src.js b/web/public/src/app/directives/lazy-src.js new file mode 100644 index 0000000..f0c0034 --- /dev/null +++ b/web/public/src/app/directives/lazy-src.js @@ -0,0 +1,222 @@ +import $ from 'jquery'; + +export default function lazySrc($window, $document) { + var lazyLoader = (function() { + var images = []; + var renderTimer = null; + var renderDelay = 100; + var win = $($window); + var doc = $($document); + var documentHeight = doc.height(); + var documentTimer = null; + var documentDelay = 2000; + var isWatchingWindow = false; + + // --- + // PUBLIC METHODS. + // --- + function addImage(image) { + images.push(image); + if (!renderTimer) { + startRenderTimer(); + } + + if (!isWatchingWindow) { + startWatchingWindow(); + } + } + + let removeImage = function(image) { + for (let i = 0; i < images.length; i++) { + if (images[i] === image ) { + images.splice(i, 1); + break; + } + } + if ( !images.length ) { + clearRenderTimer(); + stopWatchingWindow(); + } + }; + + // --- + // PRIVATE METHODS. + // --- + + function clearRenderTimer() { + clearTimeout( renderTimer ); + renderTimer = null; + } + + function checkImages() { + var visible = []; + var hidden = []; + var windowHeight = win.height(); + var scrollTop = win.scrollTop(); + var topFoldOffset = scrollTop; + var bottomFoldOffset = ( topFoldOffset + windowHeight ); + + for (let i = 0; i < images.length; i++) { + var image = images[ i ]; + if ( image.isVisible( topFoldOffset, bottomFoldOffset ) ) { + visible.push( image ); + } else { + hidden.push( image ); + } + } + + for (let i = 0; i < visible.length; i++) { + visible[ i ].render(); + } + + images = hidden; + + clearRenderTimer(); + + if ( !images.length ) { + stopWatchingWindow(); + } + } + + function startRenderTimer() { + renderTimer = setTimeout( checkImages, renderDelay ); + } + + function checkDocumentHeight() { + if ( renderTimer ) { + return; + } + + var currentDocumentHeight = doc.height(); + if ( currentDocumentHeight === documentHeight ) { + return; + } + + documentHeight = currentDocumentHeight; + + startRenderTimer(); + } + + function windowChanged() { + if (!renderTimer) { + startRenderTimer(); + } + } + + function startWatchingWindow() { + + isWatchingWindow = true; + + win.on( 'resize.lazySrc', windowChanged ); + win.on( 'scroll.lazySrc', windowChanged ); + + documentTimer = setInterval( checkDocumentHeight, documentDelay ); + } + + function stopWatchingWindow() { + isWatchingWindow = false; + + win.off( 'resize.lazySrc' ); + win.off( 'scroll.lazySrc' ); + + clearInterval( documentTimer ); + } + + return ({ + addImage: addImage, + removeImage: removeImage + }); + })(); + + function LazyImage( element ) { + var source = null; + var isRendered = false; + var height = null; + + element = $(element); + + // --- + // PUBLIC METHODS. + // --- + function isVisible( topFoldOffset, bottomFoldOffset ) { + if (!element.is(':visible')) { + //return( false ); + } + + bottomFoldOffset = bottomFoldOffset + 50; + + if ( height === null ) { + height = element.height(); + } + + var top = element.offset().top; + var bottom = ( top + height ); + + return ( + ( + ( top <= bottomFoldOffset ) && + ( top >= topFoldOffset ) + ) + || + ( + ( bottom <= bottomFoldOffset ) && + ( bottom >= topFoldOffset ) + ) + || + ( + ( top <= topFoldOffset ) && + ( bottom >= bottomFoldOffset ) + ) + ); + + } + + function renderSource() { + element[ 0 ].src = source; + element[ 0 ].classList.add('loaded'); + } + + function render() { + isRendered = true; + renderSource(); + } + + function setSource( newSource ) { + source = newSource; + if ( isRendered ) { + renderSource(); + } + } + + return ({ + isVisible: isVisible, + render: render, + setSource: setSource + }); + } + + function link( $scope, element, attributes ) { + var lazyImage = new LazyImage( element ); + + lazyLoader.addImage( lazyImage ); + + attributes.$observe( + 'lazySrc', + function( newSource ) { + lazyImage.setSource( newSource ); + } + ); + + $scope.$on( + '$destroy', + function() { + lazyLoader.removeImage( lazyImage ); + } + ); + } + + return ({ + link: link, + restrict: 'A' + }); +} diff --git a/web/public/src/app/filters.js b/web/public/src/app/filters.js new file mode 100644 index 0000000..f781431 --- /dev/null +++ b/web/public/src/app/filters.js @@ -0,0 +1,33 @@ +export function fileSize() { + return function(input) { + if (input >= 1073741824) { + input = Math.round((input / 1073741824) * 10) / 10 + 'GB'; + } else { + if (input >= 1048576) { + input = Math.round((input / 1048576) * 10) / 10 + 'MB'; + } else { + if (input >= 1024) { + input = Math.round((input / 1024) * 10) / 10 + 'KB'; + } else { + input = Math.round(input) + 'B'; + } + } + } + return input; + }; +} + + +export function direct() { + return function(file) { + if(file.name) { + if (file.direct && file.name.split('.').pop().toLowerCase() === 'psd') { + return file.direct['970x'].replace('/970/', '/').slice(0, -4); + } else if (file.direct && file.direct['970x']) { + return file.direct['970x'].replace('/970/', '/'); + } else { + return file.href.replace('hostr.co/', 'hostr.co/file/') + '/' + file.name; + } + } + }; +} diff --git a/web/public/src/app/services.js b/web/public/src/app/services.js new file mode 100644 index 0000000..38cee6b --- /dev/null +++ b/web/public/src/app/services.js @@ -0,0 +1,72 @@ +export class FileService { + constructor($resource, $cacheFactory) { + var cache = $cacheFactory('files-cache'); + return $resource(window.settings.apiURL + '/file/:id', {id: '@id'}, { + query: {method: 'GET', isArray: true, cache: cache, + params: {perpage: 0, all: true} + }, + delete: {method: 'DELETE', isArray: true, cache: cache} + }); + } + + static factory($resource, $cacheFactory) { + return new FileService($resource, $cacheFactory); + } +} + +export class UserService { + constructor($resource) { + return $resource(window.settings.apiURL + '/user'); + } + + static factory($resource) { + return new UserService($resource); + } +} + +export class EventService { + constructor($rootScope, ReconnectingWebSocket) { + if (window.user && WebSocket) { + let ws = new ReconnectingWebSocket('wss' + window.settings.apiURL.replace('https', '').replace('http', '') + '/user'); + ws.onmessage = function (msg) { + var evt = JSON.parse(msg.data); + $rootScope.$broadcast(evt.type, evt.data); + }; + ws.onopen = function() { + ws.send(JSON.stringify({authorization: window.user.token})); + }; + } + return true; + } + + static factory($rootScope, ReconnectingWebSocket) { + return new EventService($rootScope, ReconnectingWebSocket); + } +} + +export class TransactionService { + constructor ($resource, $cacheFactory) { + var cache = $cacheFactory('transaction-cache'); + return $resource(window.settings.apiURL + '/user/transaction/:id', {id: '@id'}, { + query: {method: 'GET', isArray: true, cache: cache} + }); + } + + static factory($resource, $cacheFactory) { + return new TransactionService($resource, $cacheFactory); + } +} + +export class SettingService { + constructor ($http) { + var service = {}; + service.update = function(data) { + return $http.post(window.settings.apiURL + '/user/settings', data); + }; + return service; + } + + static factory($http) { + return new SettingService($http); + } +} diff --git a/web/public/src/lib/smoothscroll.js b/web/public/src/lib/smoothscroll.js new file mode 100644 index 0000000..8ef14ba --- /dev/null +++ b/web/public/src/lib/smoothscroll.js @@ -0,0 +1,224 @@ +/* ============================================================= + + Smooth Scroll v4.5 + Animate scrolling to anchor links, by Chris Ferdinandi. + http://gomakethings.com + + Additional contributors: + https://github.com/cferdinandi/smooth-scroll#contributors + + Free to use under the MIT License. + http://gomakethings.com/mit/ + + * ============================================================= */ + +window.smoothScroll = (function (window, document, undefined) { + + 'use strict'; + + // Default settings + // Private {object} variable + var _defaults = { + speed: 500, + easing: 'easeInOutCubic', + offset: 0, + updateURL: false, + callbackBefore: function () {}, + callbackAfter: function () {} + }; + + // Merge default settings with user options + // Private method + // Returns an {object} + var _mergeObjects = function ( original, updates ) { + for (var key in updates) { + original[key] = updates[key]; + } + return original; + }; + + // Calculate the easing pattern + // Private method + // Returns a decimal number + var _easingPattern = function ( type, time ) { + if ( type == 'easeInQuad' ) return time * time; // accelerating from zero velocity + if ( type == 'easeOutQuad' ) return time * (2 - time); // decelerating to zero velocity + if ( type == 'easeInOutQuad' ) return time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration + if ( type == 'easeInCubic' ) return time * time * time; // accelerating from zero velocity + if ( type == 'easeOutCubic' ) return (--time) * time * time + 1; // decelerating to zero velocity + if ( type == 'easeInOutCubic' ) return time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration + if ( type == 'easeInQuart' ) return time * time * time * time; // accelerating from zero velocity + if ( type == 'easeOutQuart' ) return 1 - (--time) * time * time * time; // decelerating to zero velocity + if ( type == 'easeInOutQuart' ) return time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration + if ( type == 'easeInQuint' ) return time * time * time * time * time; // accelerating from zero velocity + if ( type == 'easeOutQuint' ) return 1 + (--time) * time * time * time * time; // decelerating to zero velocity + if ( type == 'easeInOutQuint' ) return time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration + return time; // no easing, no acceleration + }; + + // Calculate how far to scroll + // Private method + // Returns an integer + var _getEndLocation = function ( anchor, headerHeight, offset ) { + var location = 0; + if (anchor.offsetParent) { + do { + location += anchor.offsetTop; + anchor = anchor.offsetParent; + } while (anchor); + } + location = location - headerHeight - offset; + if ( location >= 0 ) { + return location; + } else { + return 0; + } + }; + + // Determine the document's height + // Private method + // Returns an integer + var _getDocumentHeight = function () { + return Math.max( + document.body.scrollHeight, document.documentElement.scrollHeight, + document.body.offsetHeight, document.documentElement.offsetHeight, + document.body.clientHeight, document.documentElement.clientHeight + ); + }; + + // Convert data-options attribute into an object of key/value pairs + // Private method + // Returns an {object} + var _getDataOptions = function ( options ) { + + if ( options === null || options === undefined ) { + return {}; + } else { + var settings = {}; // Create settings object + options = options.split(';'); // Split into array of options + + // Create a key/value pair for each setting + options.forEach( function(option) { + option = option.trim(); + if ( option !== '' ) { + option = option.split(':'); + settings[option[0]] = option[1].trim(); + } + }); + + return settings; + } + + }; + + // Update the URL + // Private method + // Runs functions + var _updateURL = function ( anchor, url ) { + if ( (url === true || url === 'true') && history.pushState ) { + history.pushState( {pos:anchor.id}, '', anchor ); + } + }; + + // Start/stop the scrolling animation + // Public method + // Runs functions + var animateScroll = function ( toggle, anchor, options, event ) { + + // Options and overrides + options = _mergeObjects( _defaults, options || {} ); // Merge user options with defaults + var overrides = _getDataOptions( toggle ? toggle.getAttribute('data-options') : null ); + var speed = parseInt(overrides.speed || options.speed, 10); + var easing = overrides.easing || options.easing; + var offset = parseInt(overrides.offset || options.offset, 10); + var updateURL = overrides.updateURL || options.updateURL; + + // Selectors and variables + var fixedHeader = document.querySelector('[data-scroll-header]'); // Get the fixed header + var headerHeight = fixedHeader === null ? 0 : (fixedHeader.offsetHeight + fixedHeader.offsetTop); // Get the height of a fixed header if one exists + var startLocation = window.pageYOffset; // Current location on the page + var endLocation = _getEndLocation( document.querySelector(anchor), headerHeight, offset ); // Scroll to location + var animationInterval; // interval timer + var distance = endLocation - startLocation; // distance to travel + var documentHeight = _getDocumentHeight(); + var timeLapsed = 0; + var percentage, position; + + // Prevent default click event + if ( toggle && toggle.tagName === 'A' && event ) { + event.preventDefault(); + } + + // Update URL + _updateURL(anchor, updateURL); + + // Stop the scroll animation when it reaches its target (or the bottom/top of page) + // Private method + // Runs functions + var _stopAnimateScroll = function (position, endLocation, animationInterval) { + var currentLocation = window.pageYOffset; + if ( position == endLocation || currentLocation == endLocation || ( (window.innerHeight + currentLocation) >= documentHeight ) ) { + clearInterval(animationInterval); + options.callbackAfter( toggle, anchor ); // Run callbacks after animation complete + } + }; + + // Loop scrolling animation + // Private method + // Runs functions + var _loopAnimateScroll = function () { + timeLapsed += 16; + percentage = ( timeLapsed / speed ); + percentage = ( percentage > 1 ) ? 1 : percentage; + position = startLocation + ( distance * _easingPattern(easing, percentage) ); + window.scrollTo( 0, Math.floor(position) ); + _stopAnimateScroll(position, endLocation, animationInterval); + }; + + // Set interval timer + // Private method + // Runs functions + var _startAnimateScroll = function () { + options.callbackBefore( toggle, anchor ); // Run callbacks before animating scroll + animationInterval = setInterval(_loopAnimateScroll, 16); + }; + + // Reset position to fix weird iOS bug + // https://github.com/cferdinandi/smooth-scroll/issues/45 + if ( window.pageYOffset === 0 ) { + window.scrollTo( 0, 0 ); + } + + // Start scrolling animation + _startAnimateScroll(); + + }; + + // Initialize Smooth Scroll + // Public method + // Runs functions + var init = function ( options ) { + + // Feature test before initializing + if ( 'querySelector' in document && 'addEventListener' in window && Array.prototype.forEach ) { + + // Selectors and variables + options = _mergeObjects( _defaults, options || {} ); // Merge user options with defaults + var toggles = document.querySelectorAll('[data-scroll]'); // Get smooth scroll toggles + + // When a toggle is clicked, run the click handler + Array.prototype.forEach.call(toggles, function (toggle, index) { + toggle.addEventListener('click', animateScroll.bind( null, toggle, toggle.getAttribute('href'), options ), false); + }); + + } + + }; + + // Return public methods + return { + init: init, + animateScroll: animateScroll + }; + +})(window, document); diff --git a/web/public/src/partials/account.html b/web/public/src/partials/account.html new file mode 100644 index 0000000..46e6fe3 --- /dev/null +++ b/web/public/src/partials/account.html @@ -0,0 +1,74 @@ + + + +
+
+
+ +
+
+
+
+

Go Pro and get 500MB per file upload, no daily upload limits, no advertising and more!

+ +

+ Plan + Free — 20 MB max filesize, 15 file daily upload limit. + + + {{user.uploads_today}}/15 files uploaded today +

+
+
+

+ Plan + Pro — 500 MB max filesize, no daily upload limit. + + + 0/∞ files uploaded today +

+
+
+ +
+
{{error}}
+
Updated your details successfully
+
+ + + + + Required. Password resets will be sent to this address. +
+ +
+ + + + Leave this field blank unless you want to update your password. +
+ +
+ +
+ + + + Required. When updating your details we require your current password. +
+ + + + +
+ +
+
+
+ + diff --git a/web/public/src/partials/apps.html b/web/public/src/partials/apps.html new file mode 100644 index 0000000..95a95b8 --- /dev/null +++ b/web/public/src/partials/apps.html @@ -0,0 +1,23 @@ + + +
+
+
+

Hostr for Mac and Windows

+
    +
  • Drag and drop without opening your browser.
  • +
  • Get links instantly without waiting for uploads to finish
  • +
  • Easily capture and share screenshots.
  • +
  • Quick access to recent files.
  • +
+
+ +
+
+ + diff --git a/web/public/src/partials/billing.html b/web/public/src/partials/billing.html new file mode 100644 index 0000000..35095c9 --- /dev/null +++ b/web/public/src/partials/billing.html @@ -0,0 +1,37 @@ + + +
+
+
+ +
+
+
+ + + + + + + + + + + + + +
DateProductAmount
{{transaction.date | date : "d MMM yy"}}{{transaction.description}}${{transaction.amount}}.00
+
+ You have no billing history. You should check out Pro right now! +
+
+
+
+
+ + diff --git a/web/public/src/partials/collection.html b/web/public/src/partials/collection.html new file mode 100644 index 0000000..b36ca69 --- /dev/null +++ b/web/public/src/partials/collection.html @@ -0,0 +1,70 @@ +
+ +
+ +

Hostr

+
+ + + download (6) +
+ +
+ +
+ + + +
+ kitty + .jpg + + + +
+ + \ No newline at end of file diff --git a/web/public/src/partials/file.html b/web/public/src/partials/file.html new file mode 100644 index 0000000..254f68b --- /dev/null +++ b/web/public/src/partials/file.html @@ -0,0 +1,53 @@ +
+ + + {{ ::file.name }} + +
+ +
+
+ File has not finished uploading… + Please wait. + +

{{file.percent}}%

+ +
+
+ {{file.percent}}% +
+
+
+
+ +
+ +
+ + +
+ + {{:: file.name }} +
+
+

This file has been scanned for viruses but may still not be safe.

+

+

+ +
+
diff --git a/web/public/src/partials/files.html b/web/public/src/partials/files.html new file mode 100644 index 0000000..0024552 --- /dev/null +++ b/web/public/src/partials/files.html @@ -0,0 +1,81 @@ + +
+
+
+
+

Files

+
+ +
+
+
+
+
+
+ {{ uploadingFile.name }} + + + +
+ +
+ +
+
+ + + +
+ {{:: file.name }} + + + +
+
+ +
+
+
+

Right now you have no files!

+

Drop a file onto the page or click to begin.

+

For even easier uploading and sharing download our apps for Mac and Windows. +

+
+
+
+ +
+ diff --git a/web/public/src/partials/footer.html b/web/public/src/partials/footer.html new file mode 100644 index 0000000..ebbb2a8 --- /dev/null +++ b/web/public/src/partials/footer.html @@ -0,0 +1,20 @@ + diff --git a/web/public/src/partials/header.html b/web/public/src/partials/header.html new file mode 100644 index 0000000..357701e --- /dev/null +++ b/web/public/src/partials/header.html @@ -0,0 +1,35 @@ +
+
+
+ +
+
+ + + {{email}} + + + + {{user.uploads_today}} +
+
+ +
+
+
diff --git a/web/public/src/partials/privacy.html b/web/public/src/partials/privacy.html new file mode 100644 index 0000000..ed02c04 --- /dev/null +++ b/web/public/src/partials/privacy.html @@ -0,0 +1,52 @@ + + +
+
+
+

Privacy Policy

+

Introduction

+

Hostr (we" or "us") values its visitors' privacy. This privacy policy is effective 16th February 2013; it summarizes what information we might collect from a registered user or other visitor ("you"), and what we will and will not do with it. + Please note that this privacy policy does not govern the collection and use of information by companies that Hostr does not control, nor by individuals not employed or managed by Hostr. If you visit a Web site that we mention or link to, be sure to review its privacy policy before providing the site with information.

+

What we do with your personally identifiable information

+

It is always up to you whether to disclose personally identifiable information to us, although if you elect not to do so, we reserve the right not to register you as a user or provide you with any products or services. "Personally identifiable information" means information that can be used to identify you as an individual, such as, for example:

+
    +
  • your name, company, email address, phone number, billing address, and shipping address your Hostr user ID and password
  • +
  • credit card information
  • +
  • any account-preference information you provide us
  • +
  • your computer's domain name and IP address, indicating
  • +
  • where your computer is located on the Internet
  • +
  • session data for your login session, so that our computer can ‘talk' to yours while you are logged in
  • +
+

If you do provide personally identifiable information to us, either directly or through a reseller or other business partner, we will: + not sell or rent it to a third party without your permission — although unless you opt out (see below), we may use your contact information to provide you with information we believe you need to know or may find useful, such as (for example) news about our services and products and modifications to the Terms of Service; take commercially reasonable precautions to protect the information from loss, misuse and unauthorized access, disclosure, alteration and destruction; + not use or disclose the information except:

+
    +
  • as necessary to provide services or products you have ordered, such as (for example) by providing it to a carrier to deliver products you have ordered;
  • +
  • in other ways described in this privacy policy or to which you have otherwise consented; in the aggregate with other information in such a way so that your identity cannot reasonably be determined (for example, statistical compilations);
  • +
  • as required by law, for example, in response to a subpoena or search warrant;
  • +
  • to outside auditors who have agreed to keep the information confidential;
  • +
  • as necessary to enforce the Terms of Service;
  • +
  • as necessary to protect the rights, safety, or property of Hostr, its users, or others; this may include (for example) exchanging information with other organizations for fraud protection and/or risk reduction.
  • +
+

Other information we collect

+

We may collect other information that cannot be readily used to identify you, such as (for example) the domain name and IP address of your computer. We may use this information, individually or in the aggregate, for technical administration of our Web site(s); research and development; customer- and account administration; and to help us focus our marketing efforts more precisely.

+

Cookies

+

Hostr uses "cookies" to store personal data on your computer. We may also link information stored on your computer in cookies with personal data about specific individuals stored on our servers. If you set up your Web browser (for example, Internet Explorer or Firefox) so that cookies are not allowed, you might not be able to use some or all of the features of our Web site(s).

+

External data storage sites

+

We may store your data on servers provided by third party hosting vendors with whom we have contracted.

+

Your privacy responsibilities

+

To help protect your privacy, be sure:

+
    +
  • not to share your user ID or password with anyone else;
  • +
  • to take customary precautions to guard against "malware" (viruses, Trojan horses, bots, etc.), for example by installing and updating suitable anti-virus software.
  • +
+

Changes to this privacy policy

+

We reserve the right to change this privacy policy as we deem necessary or appropriate because of legal compliance requirements or changes in our business practices. If you have provided us with an email address, we will endeavor to notify you, by email to that address, of any material change to how we will use personally identifiable information.

+

Questions or comments?

+

If you have questions or comments about Hostr's privacy policy, send an email to support@hostr.com.

+

Thank you for choosing Hostr!

+
+
+
+ + diff --git a/web/public/src/partials/pro.html b/web/public/src/partials/pro.html new file mode 100644 index 0000000..2c995bf --- /dev/null +++ b/web/public/src/partials/pro.html @@ -0,0 +1,67 @@ + +
+
+
+

Hostr Free

+ +

Free!

+ +
    +
  • Simple, Secure file sharing
  • +
  • 15 Uploads per day
  • +
  • Share 25MB files
  • +
  • Ads on popular files
  • +
+ + + +
+
+

Hostr Pro

+ +

$6/month

+ +
    +
  • All the features of Free
  • +
  • Unlimited file sharing
  • +
  • Share 500MB files
  • +
  • No ads, for you or your files
  • +
+ + + +
+
+
+
+

Questions?

+
+
+
+
+

Is there a minimum contract?

+

You can cancel whenever you like. We will downgrade your account at the end of your billing cycle.

+
+
+

Can I pay yearly?

+

Not yet, but we do plan to offer it in the near future.

+
+
+
+
+

How secure is my credit card?

+

Every step of the transaction is protected by 256-bit SSL. We use Stripe for our credit card transactions, meaning your card details are never transmitted to us.

+
+
+

What payment methods do you accept?

+

We accept Visa, MasterCard, and American Express.

+
+
+
+
+

Got more questions?

+

Hit us up on support@hostr.co or click the support link below.

+
+
+
+ diff --git a/web/public/src/partials/terms.html b/web/public/src/partials/terms.html new file mode 100644 index 0000000..be32462 --- /dev/null +++ b/web/public/src/partials/terms.html @@ -0,0 +1,36 @@ + + +
+
+
+

Hostr Terms of Service

+

Prohibited Content

+

Website Hosting

+

Hotlinking graphics is only permitted in the context of sharing, not for hosting your website.

+

Copyright Content

+

The use of warez, media files that you are not the rightful owner of, cracks, and any other forms of copyrighted software that you are not legally allowed to use/distribute are all strictly prohibited.

+

Pornography

+

Pornography of any kind is strictly prohibited. Pornography is defined as content which displays or links to displays of genitalia.

+

Viruses and General Malware

+

Viruses, Trojans, and any other harmful files or malware are all strictly prohibited.

+

Passworded Archives

+

The use of passworded archives is strictly prohibited, Hostr needs to be able to ascertain any archive does not contain any of the above material.

+

Split Archives

+

The use of split archives to circumvent the file size limit is strictly prohibited.

+
+ +

Breaching any of the above terms may result in your account being terminated without warning.

+ +
+ +

Hotlinking

+

Hotlinking images is permitted. However, abuse of this service may result in temporary limitations on your ability to hotlink. This will not affect your ability to continue using your account. Limitations may imposed permanently for continued abuse.

+ +
+ +

Hostr reserves the right to remove content for any reason it deems appropriate.

+
+
+
+ + diff --git a/web/public/styles/app.scss b/web/public/styles/app.scss new file mode 100644 index 0000000..551896c --- /dev/null +++ b/web/public/styles/app.scss @@ -0,0 +1,1048 @@ +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; +} + +html, body { + height: 100%; +} + +$icon-font-path: "../jspm_packages/npm/bootstrap-sass@3.3.5/assets/fonts/bootstrap/"; + +// MAIN VARIABLES +$body-bg: #ededf3; +$text-color: #0f2e3e; +$brand-primary: #456470; +$link-color: #96a9b3; +$link-hover-color: darken($link-color, 15%); + +// TYPOGRAPHY +$font-family-sans-serif: "Open Sans", sans-serif; +$headings-font-family: "Lato", sans-serif; +$headings-font-weight: 300; + +$input-bg: transparent; +$input-border: $brand-primary; +$input-color-placeholder: $input-border; +$input-color: $input-border; +$input-border-focus: lighten($brand-primary, 15%); +$nav-link-hover-bg: transparent; +$br-thumbs: 3px; + +$nav-pills-active-link-hover-bg: none; +$nav-pills-active-link-hover-color: $brand-primary; + +$tooltip-bg: $brand-primary !default; + +@import '../jspm_packages/npm/bootstrap-sass@3.3.5/assets/stylesheets/bootstrap'; + +$throbber-color: #96d4a1 !default; +$throbber-highlight-color: #39b54a !default; +$throbber-height: 5px !default; +$throbber-segment-width: 5px !default; +$throbber-spacing: 5px !default; + +@mixin keyframes($name) { + @-webkit-keyframes #{$name} { + @content; + } + + @-moz-keyframes #{$name} { + @content; + } + + @-o-keyframes #{$name} { + @content; + } + + @keyframes #{$name} { + @content; + } +} + +@mixin animation($value) { + -webkit-animation: $value; + -moz-animation: $value; + -ms-animation: $value; + -o-animation: $value; + animation: $value; +} + +@include keyframes(drop) { + 0% { margin-top: -10px; } + 100% { margin-top: 0px; } +} + +@include keyframes(progress) { + 0% { height: 0px; } + 100% { height: 60px; } +} + +@include keyframes(throbber) { + 0% { + background: $throbber-color; + } + 10% { + background: $throbber-highlight-color; + } + 40% { + background: $throbber-color; + } +} + +@include keyframes(spinner) { + from { + transform: rotate(90deg) rotate(90deg); + } + to { + transform: rotate(270deg) rotate(270deg); + } +} + +.loading-indicator { + @include animation(spinner 400ms linear infinite); + position: fixed; + top: 25px; + right: 25px; + width: 25px; + height: 25px; + box-sizing: border-box; + border: solid 3px transparent; + border-top-color: $throbber-highlight-color; + border-left-color: $throbber-highlight-color; + border-radius: 50%; +} + +#filedrop-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 15; + display: none; + background: #75c844; + color: #fff; + h1 { + display: inline-block; + text-align: center; + width: 100%; + position: absolute; + top: 45%; + font-size: 5em; + } +} + +#dropdown-overlay { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10; +} + +.throbber:not(:required) { + @include animation(throbber 1000ms 300ms infinite ease-out); + background: $throbber-color; + display: inline-block; + position: relative; + text-indent: -9999px; + width: $throbber-segment-width; + height: $throbber-height; + margin: 0 $throbber-segment-width + $throbber-spacing; + border-radius: 50px; + &:before, &:after { + background: $throbber-color; + content: '\x200B'; + display: inline-block; + width: $throbber-segment-width; + height: $throbber-height; + position: absolute; + top: 0; + border-radius: 50px; + } + &:before { + @include animation(throbber 1000ms 150ms infinite ease-out); + left: -($throbber-segment-width + $throbber-spacing); + } + &:after { + @include animation(throbber 1000ms 450ms infinite ease-out); + right: -($throbber-segment-width + $throbber-spacing); + } +} + +.dropdown:after, +.dropdown:before { + bottom: 100%; + left: 80%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} + +.dropdown:after { + border-color: rgba(136, 183, 213, 0); + border-bottom-color: #f5f5f8; + border-width: 6px; + margin-left: -18px; +} +.dropdown:before { + border-color: rgba(194, 225, 245, 0); + border-bottom-color: #c1c1c5; + border-width: 8px; + margin-left: -20px; +} + +.tooltip { + width: 154px; + font-size: 13px; +} + +.add { + a { + cursor: pointer; + } + img { + width: 19px; + height: 19px; + margin-left: 13px; + margin-top: -5px; + } +} + +a { + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: none; + } +} + +#header-messages { + position: fixed; + top: 0; + left: 0; + right: 0; + text-align: center; + z-index: 100000; + + .message-label { + @include animation(progress 300ms 0ms ease-in-out); + font-family: 'Lato', sans-serif; + font-weight: 300; + height: 60px; + line-height: 50px; + padding-bottom: 10px; + position: absolute; + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + font-size: 1.4em; + } +} + +#header-error { + color: #a94442; + height: 60px; + font-size: 0.8em; + font-weight: 700; +} + +#header-progress { + @include animation(progress 300ms 0ms ease-in-out); + height: 60px; + background: #ccc; + color: #fff; + left: 0; + right: 0; + .meter { + @include animation(progress 300ms 0ms ease-in-out); + height: 60px; + position: absolute; + left: 0; + background: #75c844; + } + +} + +.file-progress { + position: absolute; + top: 50%; + left: 50%; + margin: -150px 0 0 -120px; + width: 240px; + height: 200px; + color: lighten(desaturate($text-color, 50%), 50%); + .percent { + // font-size: 24px; + color: #39b54a; + display: block; + margin: 15px 0; + } + + .progress { + overflow: hidden; + height: 2px; + margin-bottom: 20px; + background-color: #c6d5dd; + border-radius: 0; + box-shadow: none; + + .progress-bar { + background-color: #39b54a; + } + } +} + +.header { + padding-top: 70px; + text-align: center; + .logo { + text-align: center; + margin-bottom: 20px; + } + .download { + float: right; + margin-top: 7px; + padding: 0 15px; + } + .menu { + cursor: pointer; + position: relative; + float: right; + padding-bottom: 12px; + margin-bottom: 20px; + > img.dots { + margin-top: 12px; + } + img.avatar { + background: url(../images/person.png) no-repeat; + background-size: 100%; + border-radius: 14px; + border: 0px; + width: 28px; + } + .chevron { + padding-bottom: 20px; + background: url(../images/chevron20.svg) no-repeat center bottom; + } + .dropdown { + @include animation(drop 150ms 0ms ease-in-out); + display: none; + text-align: left; + position: absolute; + background: #f5f5f8; + border: 1px solid #c1c1c5; + width: 240px; + border-radius: 5px; + left: -168px; + top: 32px; + box-shadow: 0px 0px 0px 3px rgba(230, 230, 235, 0.5); + padding: 15px; + color: #96a9b3; + z-index: 1000; + a { + color: #2f4451; + display: block; + margin-bottom: 10px; + &:hover { + color: lighten(#2f4451, 15%); + } + } + a:last-child { + margin-bottom: 0; + } + .meta { + font-size: 12px; + div { + padding-bottom: 10px; + } + } + span { + padding-right: 10px; + &.filesize:after { + content: '\2022'; + padding-left: 12px; + } + } + } + .left.dropdown { + top: 40px; + left: -18px; + @media (max-width: $screen-sm-min) { + left: calc(50% - 100px); + } + } + .left.dropdown:after, + .left.dropdown:before { + left: 18%; + } + } + .user, .stream-title { + float: left; + text-align: left; + @media (max-width: $screen-sm-min) { + float: none; + margin: 0 auto; + } + .chevron { + margin-right: 10px; + } + h3 { + display: inline-block; + vertical-align: middle; + margin: 0; + } + } + .tooltip { + width: 320px; + font-size: 12px; + margin-left: 15px; + } + .remaining { + float: left; + background: url(../images/cloud_upload_font_awesome.svg) no-repeat right; + line-height: 1.8em; + margin-left: 10px; + padding-right: 20px; + color: #c3c3d1; + font-weight: bold; + @media (max-width: $screen-sm-min) { + float: none; + } + } + .limit { + color: #a94442; + background: url(../images/cloud_upload_font_awesome_red.svg) no-repeat right; + } + input[type=search] { + float: right; + outline: none; + background: url(../images/search.png) calc(100% - 10px) center no-repeat; + background-color: transparent; + border: 1px solid #ddd; + padding: 5px; + padding-left: 12px; + padding-right: 35px; + border-radius: 15px; + @media (max-width: $screen-sm-min) { + float: none; + margin: 0 auto; + margin-top: 20px; + padding-right: 12px; + padding-left: 35px; + text-align: center; + background: url(../images/search.png) 10px center no-repeat; + } + &::-webkit-input-placeholder { + color: #7b858e; + } + } +} + +.stream { + .prev, .next { + position: absolute; + top: 50%; + margin-top: -35px; + width: 30px; + height: 70px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: none; + border: none; + &:hover { + &:after, &:before { + background-color: $brand-primary; + } + } + &:after, &:before { + content: ''; + width: 40px; + height: 2px; + background-color: #123040; + display: block; + } + &:after { + -ms-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + margin-top: 26px; + } + &:before { + -ms-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + } + .prev { + left: 0; + } + .next { + right: 0; + &:after { + -ms-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + &:before { + -ms-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + } + .pagination { + margin-top: 50px; + a { + padding-left: 10px; + opacity: 0.5; + &.active { + opacity: 1; + } + &:hover { + opacity: 1; + } + img { + border-radius: 3px; + } + } + } + .content { + position: relative; + } +} + +.filename { + line-height: 26px; + word-wrap: break-word; +} + +.image-preview { + padding-top: 70px; + padding-bottom: 70px; + text-align: center; + img { + margin: 0 auto; + } +} + +.file-icon { + background: url(../images/file_icon.png) top left no-repeat; + width: 70px; + height: 96px; + display: block; +} + +.filetype { + color: $link-color; +} + +.file-preview { + position: relative; + margin-top: 170px; + padding-bottom: 50px; + text-align: center; + form { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + } + .file-icon { + margin-bottom: 35px; + } + span { + margin: 0 auto; + &.filename { + display: block; + } + } + .btn-download { + margin-top: 45px; + padding-right: 50px; + padding-left: 50px; + @include button-variant(white, #39b54a, #39b54a); + } + .banner { + border: 1px solid #ccc; + border-radius: 5px; + div { + position: absolute; + bottom: 4px; + right: 4px; + color: #bcbcbc; + font-size: 0.8em; + } + } + .banner-large { + width: 300px; + margin: 0 auto; + margin-top: -150px; + margin-bottom: 50px; + position: relative; + @media (min-width: $screen-lg-min) { + position: absolute; + top: 0px; + left: 15px; + margin: 0; + } + } + .banner-wide { + position: relative; + margin: 0 auto; + margin-top: 50px; + width: 468px; + } + .file-warning, .file-alert { + background: #ddd; + max-width: 420px; + padding: 20px; + padding-bottom: 10px; + margin: 0 auto; + border-radius: 5px; + margin-top: 40px; + font-size: 0.9em; + } + + .file-alert{ + max-width: 500px; + background: #ff847c; + color: #9d2e2e; + input { + background: #ffbebe; + border-color: #9d2e2e; + color: #9d2e2e; + } + } +} + +.files { + padding-top: 70px; + header h3 { + display: inline; + } + .row:first-child { + margin-bottom: 35px; + } + .truncate { + width: 130px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + color: $link-color; + } + .uploading { + width: 145px; + height: 98px; + background: #eee; + margin: 0 auto 5px; + padding-left: 60px; + padding-top: 38px; + } + .collection, + .file { + .zeroclipboard-is-hover { + color: darken($link-color, 15%); + cursor: pointer; + } + width: 152px; + height: 175px; + background-color: white; + margin-top: 35px; + border: 1px solid #d6d6dc; + box-shadow: 0px 0px 0px 3px #e6e6eb; + border-radius: $br-thumbs; + padding: 5px; + float: left; + -webkit-transition: 0.2s all ease-in; + margin-right: 5px; + @media (min-width: $screen-sm-min) { + margin-right: 37px; + &:nth-of-type(4n) { + margin-right: 0; + } + } + @media (min-width: $screen-md-min) { + margin-right: 45px; + &:nth-of-type(4n) { + margin-right: 45px; + } + &:nth-of-type(5n) { + margin-right: 0; + } + } + @media (min-width: $screen-lg-min) { + margin-right: 45px; + &:nth-of-type(4n) { + margin-right: 45px; + } + &:nth-of-type(5n) { + margin-right: 45px; + } + &:nth-of-type(6n) { + margin-right: 0 !important; + } + } + &:hover { + border-color: #76d3f9; + box-shadow: 0px 0px 0px 3px #cee5f3; + cursor: pointer; + } + .menu { + img { + position: relative; + cursor: pointer; + z-index: 11; + } + float: right; + position: relative; + .dropdown { + @include animation(drop 150ms 0ms ease-in-out); + display: none; + position: absolute; + background: #f5f5f8; + border: 1px solid #c1c1c5; + border-radius: 5px; + right: -10px; + min-width: 170px; + top: 24px; + box-shadow: 0px 0px 0px 3px rgba(230, 230, 235, 0.5); + padding: 15px; + color: #96a9b3; + z-index: 1000; + font-size: 12px; + a { + color: #2f4451; + &:hover { + color: lighten(#2f4451, 15%); + } + } + li:last-child { + margin-bottom: 0; + } + .sep { + padding-bottom: 15px; + border-bottom: 1px solid #ccc; + } + } + .dropdown:after, + .dropdown:before { + bottom: 100%; + left: 98%; + } + } + .image { + width: 140px; + height: 120px; + overflow: hidden; + border-radius: $br-thumbs; + margin: 0 auto 5px; + position: relative; + img { + margin: 0 auto; + position: absolute; + left: 50%; + -webkit-transform: translate(-50%); + transform: translate(-50%); + } + } + .title { + display: block; + margin-left: 5px; + &.num-files { + font-size: 12px; + color: #96a9b3; + } + } + } + + .jumbotron.info { + background: none; + + .lead { + text-align: center; + } + + .drop-zone { + border: 2px dashed #39b54a; + color: lighten(opacify($brand-primary, 0.1), 25%); + + border-radius: 30px; + + margin: 50px auto 50px; + + padding: 100px 15px 100px 15px; + text-align: center; + + .plus { + color: #39b54a; + } + + a { + color: $brand-primary; + &:hover { + color: lighten($brand-primary, 25%); + } + } + } + } + + .file { + height: 100px; + padding: 0; + background-color: lighten($body-bg, 2%); + a { + font-size: 13px; + } + .title { + margin-left: 3px; + float: left; + } + img { + float: right; + margin-top: 3px; + } + &:hover a { + color: $link-hover-color; + } + .image { + width: 150px; + height: 98px; + overflow: hidden; + border-radius: $br-thumbs; + margin: 0 auto 5px; + position: relative; + img, .throb-cont { + position: absolute; + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + } + } + } +} + +.pro { + margin-top: 70px; + li { + margin-bottom: 10px; + } + + ul { + margin-bottom: 30px; + } + + h2 { + font-size: 1.7em; + margin-bottom: 15px; + } + + h3 { + font-size: 1.3em; + } + + .questions { + margin-top: 50px; + + h2 { + text-align: center; + } + + p { + text-align: left; + } + } +} + +.admin { + + padding-top: 50px; + + th { + padding: 0 0 15px 0; + + } + + .amount { + text-align: right; + } + + td { + padding: 0 0 10px 0; + } + .nav-pills { + > li { + &.active > a { + &, + &:hover, + &:focus { + font-weight: bold; + } + } + } + } + + span { + display: block; + } + + .type { + padding: 15px 0; + font-size: 16px; + } + + .lead, .info { + font-size: 13px; + padding: 15px; + border-radius: 4px; + a { + color: #fff; + } + } + + .bg-primary { + border: 1px solid $brand-primary; + } + + .bg-info { + border: 1px solid $brand-info; + } + + .required { + color: #FF524F; + } + + .btn-danger { + float: right; + } + + form { + + .form-group { + >span { + padding: 15px 0; + } + } + + .btn { + margin: 35px auto 0; + &-signup { + @include button-variant(white, #39b54a, #39b54a); + } + } + label { + // font-family: 'Lato', sans-serif; + font-weight: 300; + } + input { + border-radius: 3px; + // font-family: 'Lato', sans-serif; + font-weight: 300; + } + .has-error .form-control { + border-color: #FF524F; + &:focus { + border-color: #FF524F; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffb4b3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffb4b3; + } + } + .has-warning .form-control { + border-color: #F93 !important; + &:focus { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffd894; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffd894; + } + } + } + +} + +.apps { + + padding-left: 20px; + + h1, ul { + margin-bottom: 40px; + } + + li { + font-size: 1.2em; + padding-bottom: 10px; + list-style: none; + + &:before { + color: lighten($text-color, 25%); + content:"\2713\0020"; + } + } + + .downloads { + text-align: center; + } + + .btn { + margin-top: 10px; + font-size: 20px; + } + +} + +.mac-changelog { + padding: 0 10px; + h1 { + font-size: 1.3em; + } + p { + font-size: 1.1em; + padding-left: 5px; + } + a { + color: $text-color; + text-decoration: underline; + } + ul { + padding-top: 10px; + } +} + +.footer { + font-size: 12px; + margin: 50px auto; + text-align: center; + + .nav > li { + display: inline-block; + float: none; + } +} + +.error-page { + background: none; +} + +.stats { + padding-top: 50px; + .traffic { + font-size: 1.5em; + progress { + width: 100%; + } + .traffic-stats { + text-align: right; + } + .traffic-label { + float: left; + color: lighten($brand-primary, 25%); + } + } + .download-count { + font-size: 3em; + } +} diff --git a/web/public/styles/style.scss b/web/public/styles/style.scss new file mode 100644 index 0000000..4f29a3f --- /dev/null +++ b/web/public/styles/style.scss @@ -0,0 +1,469 @@ +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; +} + +html { + height: 100%; +} + +body { + min-height: 100%; +} + +$icon-font-path: "../jspm_packages/npm/bootstrap-sass@3.3.5/assets/fonts/bootstrap/"; + +// MAIN VARIABLES +$body-bg: #0d0d1a; +$text-color: #5c686e; +$brand-primary: #456470; +$link-hover-color: lighten($brand-primary, 15%); + +// TYPOGRAPHY +$font-family-sans-serif: 'Open Sans', sans-serif; +$headings-font-family: 'Lato', sans-serif; +$headings-font-weight: 300; +$headings-color: lighten($brand-primary, 30%); + +// MODIFY GIRD +$grid-gutter-width: 30px !default; +$container-tablet: ((750px + $grid-gutter-width)) !default; +$container-desktop: $container-tablet; +$container-large-desktop: $container-tablet; + +// FORMS + +$input-border-radius: 3px; + +// $input-bg: rgba(255,255,255,0); +// $input-border: $brand-primary; +// $input-color-placeholder: $input-border; +// $input-color: $input-border; +// $input-border-focus: lighten($brand-primary, 15%); + +$nav-link-hover-bg: rgba(255,255,255,0); + + +// bower: scss +@import '../jspm_packages/npm/bootstrap-sass@3.3.5/assets/stylesheets/bootstrap'; +// endbower +html, +body { + height: 100%; +} + +a { + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: none; + } +} + +.header { + padding-top: 70px; + padding-bottom: 70px; + text-align: center; + .logo { + width: 26px; + margin: 0 auto; + } +} + +.btn { + width: auto; + margin: 90px auto 15px; + font-family: 'Lato', sans-serif; + font-weight: 300; + padding-left: 45px; + padding-right: 45px; + padding-top: 5px; + font-size: 30px; +} + +.btn-mast { + @include button-variant(white, rgba(255,255,255,0), white); +} + +.masthead { + @media (min-width: $screen-lg-min) { + height: 100%; + } + text-align: center; + background: url(../images/cloud_top.jpg) 0 0 no-repeat; + .container { + position: relative; + @media (max-width: $screen-lg-min) { + // height: 900px; + padding-top: 100px; + } + @media (min-width: $screen-lg-min) { + height: 100%; + > div:first-child { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50.1%, -50.1%); + -webkit-transform: translate(-50.1%, -50.08%); + } + } + .filetypes { + margin-right: auto; + margin-left: auto; + margin-top: 75px; + margin-bottom: 65px; + width: 505px; + @media (max-width: $screen-sm-min) { + width: 100%; + } + @include clearfix; + span { + float: left; + margin-right: 65px; + } + span:last-child { + margin-right: 0; + } + } + img { + margin: 0 auto; + } + .btn-mast { + @include button-variant(white, rgba(255,255,255,0), white); + } + .more { + position: absolute; + left: 50%; + bottom: 20px; + width: 100px; + transform: translate(-50%); + -webkit-transform: translate(-50%); + img { + display: block; + margin: 0 auto; + margin-top: 5px; + } + } + .app-download { + position: absolute; + top: 75px; + left: 80%; + a { + padding-right: 10px; + opacity: 0.25; + } + a:hover { + opacity: 0.5; + } + img { + vertical-align: baseline; + } + } + @media (max-width: $screen-lg-min) { + .more, .app-download { + display: none; + } + } + } +} + +.user-form { + display: block; + .lead { + text-align: center; + color: #8997A0; + } + .holder { + @media (max-width: $screen-sm-min) { + width: 100%; + } + width: 50%; + margin: 0 auto; + text-align: left; + background: #ededf3; + padding: 35px; + border-radius: 3px; + } + .alert { + padding: 8px 15px; + } + .alert-signin { + @media (max-width: $screen-sm-min) { + width: 100%; + } + margin: 10px auto; + width: 50%; + text-align: center; + } + form { + .btn { + margin: 35px auto 0; + &-signup { + @include button-variant(white, #39b54a, #39b54a); + } + } + label { + font-family: 'Lato', sans-serif; + font-weight: 300; + } + input { + border-radius: 3px; + font-family: 'Lato', sans-serif; + font-weight: 300; + } + .has-error .form-control { + border-color: #FF524F; + &:focus { + border-color: #FF524F; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffb4b3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffb4b3; + } + } + .has-warning .form-control { + border-color: #F93 !important; + &:focus { + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffd894; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ffd894; + } + } + .forgot, .terms { + text-decoration: underline; + } + } + .trail { + font-family: 'Lato', sans-serif; + font-weight: 300; + font-size: 1.15em; + text-align: center; + color: #8997A0; + padding-top: 15px; + } +} + +.headline { + .row { + margin-top: 115px; + > div { + > img { + margin-bottom: 100px; + } + .lead { + margin-top: 45px; + margin-bottom: 130px; + } + } + } + .lead { + @media (min-width: $screen-sm-min) { + font-size: floor($font-size-base * 1.45); + } + line-height: 1.7; + } + h1 { + position: relative; + .tag { + display: inline-block; + width: 36px; + height: 18px; + background-color: #cf0d39; + color: #fff; + font-size: 12px; + text-align: center; + line-height: 16px; + margin-left: 25px; + border-radius: 3px; + font-weight: 400; + vertical-align: middle; + } + } +} + +.features { + background-color: #0d0d1f; + @media (max-width: $screen-sm-min) { + text-align: center; + img { + margin: 0 auto; + } + } + .row { + margin-top: 120px; + &:first-child { + margin-top: 90px; + } + &:last-child { + margin-bottom: 90px; + } + } + h2, + h3 { + color: #309184; + } + h2 { + text-align: center; + } + .f1 .copy { + margin-top: 75px; + } + .f2 .copy { + margin-top: 40px; + } + p { + margin-top: 25px; + line-height: 1.7; + } +} + +.faq { + .row { + margin-top: 60px; + &:first-child { + margin-top: 100px; + margin-bottom: 100px; + @media (max-width: $screen-sm-min) { + margin-top: 60px; + margin-bottom: 60px; + } + } + &.cta { + margin-top: 100px; + margin-bottom: 50px; + } + } + h2 { + text-align: center; + } + h4 { + color: #309184; + } + p { + font-size: 13px; + margin-top: 20px; + line-height: 1.7; + } + .col-sm-4 { + padding-left: 30px; + padding-right: 30px; + @media (max-width: $screen-sm-min) { + padding-right: 8px; + padding-left: 8px; + } + } + .btn { + @media (max-width: $screen-sm-min) { + font-size: 24px; + } + } + text-align: center; + .btn-mast { + @include button-variant(white, #cf0d39, #cf0d39); + } +} + +.pro { + + h2 { + margin-bottom: 0; + } + + h3 { + color: #309184; + margin-top: 5px; + font-size: 1.2em; + } + + li { + padding-bottom: 5px; + &:before { + color: lighten($text-color, 25%); + content:"\2713\0020"; + } + } + + .pricing { + margin-bottom: 20px; + } + + .btn { + margin-top: 10px; + font-size: 20px; + } + +} + +.questions { + margin-top: 50px; + h3 { + color: #309184; + font-size: 1.3em; + } +} + +.apps { + + h1, ul { + margin-bottom: 40px; + } + + li { + font-size: 1.2em; + padding-bottom: 10px; + list-style: none; + + &:before { + color: lighten($text-color, 25%); + content:"\2713\0020"; + } + } + + .downloads { + text-align: center; + } + + .btn { + margin-top: 10px; + font-size: 20px; + } +} + +.footer { + font-size: 12px; + margin: 0 auto; + margin-top: 50px; + margin-bottom: 35px; + text-align: center; + + .nav > li { + display: inline-block; + float: none; + } + + p { + margin-top: 20px; + font-size: 90%; + } +} + + +.icon { + width: 30px; + height: 30px; + display: block; + &.file { + background: url(../images/file.png) 0 0 no-repeat; + } + &.folder { + background: url(../images/folder.png) 0 0 no-repeat; + } + &.music { + background: url(../images/music.png) 0 0 no-repeat; + } + &.url { + background: url(../images/url.png) 0 0 no-repeat; + } + &.video { + background: url(../images/video.png) 0 0 no-repeat; + } + &.camera { + background: url(../images/camera.png) 0 0 no-repeat; + } +} diff --git a/web/public/updaters/mac-changelog.html b/web/public/updaters/mac-changelog.html new file mode 100644 index 0000000..2ce33fa --- /dev/null +++ b/web/public/updaters/mac-changelog.html @@ -0,0 +1,33 @@ + + + + + + + Hostr - File not found + + + + + + +
+

Read this first

+

Note: If you're coming from 0.7.* you'll need to update manually.

+

Click here to download the latest version.

+

We're sorry for the inconvenience, but we think you'll agree the upgrade is worth it.

+

What's new in 0.8.0?

+
    +
  • Instant sharing: get links to the files you're uploading instantly
  • +
  • Tons of bugfixes (including automatic updates!)
  • +
+
+ + + + diff --git a/web/public/updaters/mac.xml b/web/public/updaters/mac.xml new file mode 100644 index 0000000..d3815e1 --- /dev/null +++ b/web/public/updaters/mac.xml @@ -0,0 +1,89 @@ + + + + Hostr's Changelog + https://hostr.co/updaters/mac.xml + Hostr updates. + en + + Version 0.8.0 + + https://hostr.co/updaters/mac-changelog.html + + Mon, 27 Jul 2014 20:55:00 +0000 + + + + Version 0.7.0 + + https://hostr.co/updaters/mac-changelog.html + + Mon, 7 Jul 2014 13:20:11 +0000 + + + + Version 0.6.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 3 May 2013 23:20:11 +0000 + + + + Version 0.5.3 + + https://hostr.co/updaters/mac/changelog + + Wed, 24 Mar 2013 19:30:11 +0000 + + + + Version 0.5.2 + + https://hostr.co/updaters/mac/changelog + + Wed, 24 Mar 2013 19:30:11 +0000 + + + + Version 0.5.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 24 Mar 2013 19:30:11 +0000 + + + + Version 0.4.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 24 Mar 2013 19:30:11 +0000 + + + + Version 0.3.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 24 Mar 2013 19:30:11 +0000 + + + + Version 0.2.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 24 Mar 2013 19:30:11 +0000 + + + + Version 0.1.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 23 Mar 2013 12:20:11 +0000 + + + + diff --git a/web/routes/file.js b/web/routes/file.js new file mode 100644 index 0000000..8e4c455 --- /dev/null +++ b/web/routes/file.js @@ -0,0 +1,59 @@ +import fs from 'fs'; +import path from 'path'; +import mime from 'mime-types'; +import hostrFileStream from '../../lib/hostr-file-stream'; +import { formatFile } from '../../lib/format'; + +import debugname from 'debug'; +const debug = debugname('hostr-web:file'); + +const storePath = process.env.STORE_PATH || path.join(process.env.HOME, '.hostr', 'uploads'); + +const userAgentCheck = function(userAgent) { + if (!userAgent){ + return false; + } + return userAgent.match(/^(wget|curl|vagrant)/i); +}; + +export function* get(id, name, size) { + debug('%s, %s, %s', id, name, size); + const file = yield this.db.Files.findOne({_id: id, 'file_name': name, 'status': 'active'}); + this.assert(file, 404); + let localPath = path.join(storePath, file._id[0], file._id + '_' + file.file_name); + let remotePath = path.join(file._id[0], file._id + '_' + file.file_name); + if (size > 0) { + localPath = path.join(storePath, file._id[0], size, file._id + '_' + file.file_name); + remotePath = path.join(size, file._id + '_' + file.file_name); + } + + let type = 'application/octet-stream'; + if (file.width > 0) { + type = mime.lookup(file.file_name); + } + + this.set('Content-type', type); + this.set('Expires', new Date(2020, 1).toISOString()); + this.set('Cache-control', 'max-age=2592000'); + + this.body = yield hostrFileStream(localPath, remotePath); +} + +export function* resized(size, id, name) { + yield get.call(this, id, name, size); +} + +export function* landing(id, next) { + if (id === 'config.js') { + return yield next; + } + const file = yield this.db.Files.findOne({_id: id}); + this.assert(file, 404); + if(userAgentCheck(this.headers['user-agent'])) { + return direct(file._id, file.file_name); + } + + const formattedFile = formatFile(file); + debug(formattedFile); + yield this.render('file', {file: formattedFile}); +} diff --git a/web/routes/index.js b/web/routes/index.js new file mode 100644 index 0000000..fc49641 --- /dev/null +++ b/web/routes/index.js @@ -0,0 +1,55 @@ +import uuid from 'node-uuid'; +import auth from '../lib/auth'; + +export function* main() { + if (this.session.user) { + if (this.query['app-token']) { + return this.redirect('/'); + } + const token = uuid.v4(); + yield this.redis.set(token, this.session.user.id, 'EX', 604800); + this.session.user.token = token; + yield this.render('index', {user: this.session.user}); + } else { + if (this.query['app-token']) { + const user = yield auth.fromToken(this, this.query['app-token']); + yield auth.setupSession(this, user); + this.redirect('/'); + } else if (this.cookies.r) { + const user = yield auth.fromCookie(this, this.cookies.r); + yield auth.setupSession(this, user); + this.redirect('/'); + } else { + yield this.render('marketing'); + } + } +} + +export function* staticPage(next) { + if (this.session.user) { + const token = uuid.v4(); + yield this.redis.set(token, this.session.user.id, 'EX', 604800); + this.session.user.token = token; + yield this.render('index', {user: this.session.user}); + } else { + switch(this.originalUrl) { + case '/terms': + yield this.render('terms'); + break; + case '/privacy': + yield this.render('privacy'); + break; + case '/pricing': + yield this.render('pricing'); + break; + case '/apps': + yield this.render('apps'); + break; + case '/stats': + yield this.render('index', {user: {}}); + break; + default: + yield next; + } + } +} diff --git a/web/routes/pro.js b/web/routes/pro.js new file mode 100644 index 0000000..fd20710 --- /dev/null +++ b/web/routes/pro.js @@ -0,0 +1,81 @@ +import path from 'path'; +import views from 'co-views'; +const render = views(path.join(__dirname, '/../views'), { default: 'ejs'}); +import Stripe from 'stripe'; +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); +import { Mandrill } from 'mandrill-api/mandrill'; +const mandrill = new Mandrill(process.env.MANDRILL_KEY); + +const fromEmail = process.env.EMAIL_FROM || 'nobody@example.com'; +const fromName = process.env.EMAIL_NAME || 'Nobody'; + +export function* create() { + const Users = this.db.Users; + const Transactions = this.db.Transactions; + const stripeToken = this.request.body.stripeToken; + + const createCustomer = { + card: stripeToken.id, + plan: 'usd_monthly', + email: this.session.email + }; + + const customer = yield stripe.customers.create(createCustomer); + + this.assert(customer.subscription.status === 'active', 400, '{"status": "error"}'); + + delete customer.subscriptions; + + yield Users.updateOne({_id: this.session.user.id}, {'$set': {'stripe_customer': customer, type: 'Pro'}}); + + const transaction = { + 'user_id': this.session.user.id, + amount: customer.subscription.plan.amount, + desc: customer.subscription.plan.name, + date: new Date(customer.subscription.plan.created * 1000) + }; + + yield Transactions.insertOne(transaction); + + this.session.user.plan = 'Pro'; + this.body = {status: 'active'}; + + let html = yield render('email/inlined/pro'); + let text = `Hey, thanks for upgrading to Hostr Pro! + + You've signed up for Hostr Pro Monthly at $6/Month. + + — Jonathan Cremin, Hostr Founder + `; + + mandrill.messages.send({message: { + html: html, + text: text, + subject: 'Hostr Pro', + 'from_email': fromEmail, + 'from_name': fromName, + to: [{ + email: this.session.user.email, + type: 'to' + }], + 'tags': [ + 'pro-upgrade' + ] + }}); +} + +export function* cancel() { + const Users = this.db.Users; + const user = yield Users.findOne({_id: this.session.user.id}); + + const confirmation = yield stripe.customers.cancelSubscription( + user.stripe_customer.id, + user.stripe_customer.subscription.id, + { 'at_period_end': true } + ); + + yield Users.updateOne({_id: this.session.user.id}, {'$set': {'stripe_customer.subscription': confirmation, type: 'Free'}}); + + this.session.user.plan = 'Pro'; + this.body = {status: 'inactive'}; +} diff --git a/web/routes/user.js b/web/routes/user.js new file mode 100644 index 0000000..5a5dda9 --- /dev/null +++ b/web/routes/user.js @@ -0,0 +1,85 @@ +import { authenticate, setupSession, signup as signupUser, activateUser, sendResetToken, validateResetToken, updatePassword } from '../lib/auth'; + +export function* signin() { + if (!this.request.body.email) { + return yield this.render('signin'); + } + + const user = yield authenticate(this, this.request.body.email, this.request.body.password); + if(!user) { + return yield this.render('signin', {error: 'Invalid login details'}); + } else if (user.activationCode) { + return yield this.render('signin', {error: 'Your account hasn\'t been activated yet. Check your for an activation email.'}); + } else { + yield setupSession(this, user); + this.redirect('/'); + } +} + + +export function* signup() { + if (!this.request.body.email) { + return yield this.render('signup'); + } + + if (this.request.body.email !== this.request.body.confirm_email) { + return yield this.render('signup', {error: 'Emails do not match.'}); + } else if (this.request.body.email && !this.request.body.terms) { + return yield this.render('signup', {error: 'You must agree to the terms of service.'}); + } else if (this.request.body.password && this.request.body.password.length < 7) { + return yield this.render('signup', {error: 'Password must be at least 7 characters long.'}); + } + const ip = this.headers['x-real-ip'] || this.ip; + const email = this.request.body.email; + const password = this.request.body.password; + try { + yield signupUser(this, email, password, ip); + } catch (e) { + return yield this.render('signup', {error: e.message}); + } + return yield this.render('signup', {message: 'Thanks for signing up, we\'ve sent you an email to activate your account.'}); +} + + +export function* forgot(token) { + const Reset = this.db.Reset; + const Users = this.db.Users; + if (this.request.body.email) { + var email = this.request.body.email; + yield sendResetToken(this, email); + return yield this.render('forgot', {message: 'We\'ve sent an email with a link to reset your password. Be sure to check your spam folder if you it doesn\'t appear within a few minutes', token: null}); + } else if (token && this.request.body.password) { + if (this.request.body.password.length < 7) { + return this.render('forgot', {error: 'Password needs to be at least 7 characters long.', token: token}); + } + const tokenUser = yield validateResetToken(this, token); + var userId = tokenUser._id; + yield updatePassword(this, userId, this.request.body.password); + yield Reset.remove({_id: userId}); + const user = yield Users.findOne({_id: userId}); + yield setupSession(this, user); + this.redirect('/'); + } else if (token.length) { + const tokenUser = yield validateResetToken(this, token); + if (!tokenUser) { + return yield this.render('forgot', {error: 'Invalid password reset token. It might be expired, or has already been used.', token: null}); + } else { + return yield this.render('forgot', {token: token}); + } + } else { + return yield this.render('forgot', {token: null}); + } +} + + +export function* logout() { + this.cookies.set('r', {expires: new Date(1), path: '/'}); + this.session = null; + this.redirect('/'); +} + + +export function* activate(code) { + yield activateUser(this, code); + this.redirect('/'); +} diff --git a/web/views/apps.ejs b/web/views/apps.ejs new file mode 100644 index 0000000..58d3e68 --- /dev/null +++ b/web/views/apps.ejs @@ -0,0 +1,55 @@ + + + + + Download Hostr for Mac and Windows | Hostr • Instant Sharing + + + + + + <%- CDN(['/styles/style.css']) %> + + + +
+ +
+ +
+
+
+

Hostr for Mac and Windows

+
    +
  • Drag and drop without opening your browser.
  • +
  • Get links instantly without waiting for uploads to finish
  • +
  • Easily capture and share screenshots.
  • +
  • Quick access to recent files.
  • +
+
+ +
+
+ + <% include footer.ejs %> + + + diff --git a/web/views/email/activate.html b/web/views/email/activate.html new file mode 100644 index 0000000..e66e8f8 --- /dev/null +++ b/web/views/email/activate.html @@ -0,0 +1,66 @@ + + + + + +Hostr Activation + + + + + + + + + + + + + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + +
+ Thanks for signing up to Hostr! +
+ Please confirm your email address by clicking the link below. +
+ We may need to send you critical information about our service and it is important that we have an accurate email address. +
+ Confirm email address +
+ — Jonathan Cremin, Hostr Founder +
+
+
+
+ + + diff --git a/web/views/email/forgot.html b/web/views/email/forgot.html new file mode 100644 index 0000000..014279d --- /dev/null +++ b/web/views/email/forgot.html @@ -0,0 +1,61 @@ + + + + + +Hostr Activation + + + + + + + + + + + + + + +
+
+ + + + +
+ + + + + + + + + + + + + +
+ It seems you've forgotten your password :( +
+ To set a new password click the link below. +
+ Set New Password +
+ — Jonathan Cremin, Hostr Founder +
+
+
+
+ + + diff --git a/web/views/email/inlined/activate.ejs b/web/views/email/inlined/activate.ejs new file mode 100644 index 0000000..4d22ad7 --- /dev/null +++ b/web/views/email/inlined/activate.ejs @@ -0,0 +1,111 @@ + + + + + +Hostr Activation + + + + + + + + + + + + + + +
+
+ + + + +
+ + + + + + + + + + + + + + + + +
+ Thanks for signing up to Hostr! +
+ Please confirm your email address by clicking the link below. +
+ We may need to send you critical information about our service and it is important that we have an accurate email address. +
+ Confirm email address +
+ — Jonathan Cremin, Hostr Founder +
+
+
+
+ + + diff --git a/web/views/email/inlined/forgot.ejs b/web/views/email/inlined/forgot.ejs new file mode 100644 index 0000000..e74b40a --- /dev/null +++ b/web/views/email/inlined/forgot.ejs @@ -0,0 +1,106 @@ + + + + + +Hostr Activation + + + + + + + + + + + + + + +
+
+ + + + +
+ + + + + + + + + + + + + +
+ It seems you've forgotten your password :( +
+ To set a new password click the link below. +
+ Set New Password +
+ — Jonathan Cremin, Hostr Founder +
+
+
+
+ + + diff --git a/web/views/email/inlined/pro.ejs b/web/views/email/inlined/pro.ejs new file mode 100644 index 0000000..108e147 --- /dev/null +++ b/web/views/email/inlined/pro.ejs @@ -0,0 +1,101 @@ + + + + + +Hostr Pro + + + + + + + + + + + + + + +
+
+ + + + +
+ + + + + + + + + + +
+ Thanks for upgrading to Hostr Pro! +
+ You've signed up for Hostr Pro Monthly at $6/month +
+ — Jonathan Cremin, Hostr Founder +
+
+
+
+ + + diff --git a/web/views/email/pro.html b/web/views/email/pro.html new file mode 100644 index 0000000..1f1cb57 --- /dev/null +++ b/web/views/email/pro.html @@ -0,0 +1,56 @@ + + + + + +Hostr Pro + + + + + + + + + + + + + + +
+
+ + + + +
+ + + + + + + + + + +
+ Thanks for upgrading to Hostr Pro! +
+ You've signed up for Hostr Pro Monthly at $6/month +
+ — Jonathan Cremin, Hostr Founder +
+
+
+
+ + + diff --git a/web/views/email/style.css b/web/views/email/style.css new file mode 100644 index 0000000..3bd01e3 --- /dev/null +++ b/web/views/email/style.css @@ -0,0 +1,271 @@ +/* ------------------------------------- + GLOBAL + A very basic CSS reset +------------------------------------- */ +* { + margin: 0; + padding: 0; + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + box-sizing: border-box; + font-size: 14px; +} + +img { + max-width: 100%; +} + +body { + -webkit-font-smoothing: antialiased; + -webkit-text-size-adjust: none; + width: 100% !important; + height: 100%; + line-height: 1.6; +} + +/* Let's make sure all tables have defaults */ +table td { + vertical-align: top; +} + +/* ------------------------------------- + BODY & CONTAINER +------------------------------------- */ +body { + background-color: #f6f6f6; +} + +.body-wrap { + background-color: #f6f6f6; + width: 100%; +} + +.container { + display: block !important; + max-width: 600px !important; + margin: 0 auto !important; + /* makes it centered */ + clear: both !important; +} + +.content { + max-width: 600px; + margin: 0 auto; + display: block; + padding: 20px; +} + +/* ------------------------------------- + HEADER, FOOTER, MAIN +------------------------------------- */ +.main { + background: #fff; + border: 1px solid #e9e9e9; + border-radius: 3px; +} + +.content-wrap { + padding: 20px; +} + +.content-block { + padding: 0 0 20px; +} + +.header { + width: 100%; + margin-bottom: 20px; +} + +.logo { + margin-top: 40px; + margin-bottom: 20px; +} + +.footer { + width: 100%; + clear: both; + color: #999; + padding: 20px; +} +.footer a { + color: #999; +} +.footer p, .footer a, .footer unsubscribe, .footer td { + font-size: 12px; +} + +/* ------------------------------------- + TYPOGRAPHY +------------------------------------- */ +h1, h2, h3 { + font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + color: #000; + margin: 40px 0 0; + line-height: 1.2; + font-weight: 400; +} + +h1 { + font-size: 32px; + font-weight: 500; +} + +h2 { + font-size: 24px; +} + +h3 { + font-size: 18px; +} + +h4 { + font-size: 14px; + font-weight: 600; +} + +p, ul, ol { + margin-bottom: 10px; + font-weight: normal; +} +p li, ul li, ol li { + margin-left: 5px; + list-style-position: inside; +} + +/* ------------------------------------- + LINKS & BUTTONS +------------------------------------- */ +a { + color: #456470; + text-decoration: underline; +} + +.btn-primary { + text-decoration: none; + color: #FFF; + background-color: #456470; + border: solid #456470; + /* seems to be a bug stopping this from being applied above */ + border-color: #456470; + border-width: 10px 20px; + line-height: 2; + font-weight: bold; + text-align: center; + cursor: pointer; + display: inline-block; + border-radius: 5px; + text-transform: capitalize; +} + +/* ------------------------------------- + OTHER STYLES THAT MIGHT BE USEFUL +------------------------------------- */ +.last { + margin-bottom: 0; +} + +.first { + margin-top: 0; +} + +.aligncenter { + text-align: center; +} + +.alignright { + text-align: right; +} + +.alignleft { + text-align: left; +} + +.clear { + clear: both; +} + +/* ------------------------------------- + ALERTS + Change the class depending on warning email, good email or bad email +------------------------------------- */ +.alert { + font-size: 16px; + color: #fff; + font-weight: 500; + padding: 20px; + text-align: center; + border-radius: 3px 3px 0 0; +} +.alert a { + color: #fff; + text-decoration: none; + font-weight: 500; + font-size: 16px; +} +.alert.alert-warning { + background: #ff9f00; +} +.alert.alert-bad { + background: #d0021b; +} +.alert.alert-good { + background: #68b90f; +} + +/* ------------------------------------- + INVOICE + Styles for the billing table +------------------------------------- */ +.invoice { + margin: 40px auto; + text-align: left; + width: 80%; +} +.invoice td { + padding: 5px 0; +} +.invoice .invoice-items { + width: 100%; +} +.invoice .invoice-items td { + border-top: #eee 1px solid; +} +.invoice .invoice-items .total td { + border-top: 2px solid #333; + border-bottom: 2px solid #333; + font-weight: 700; +} + +/* ------------------------------------- + RESPONSIVE AND MOBILE FRIENDLY STYLES +------------------------------------- */ +@media only screen and (max-width: 640px) { + h1, h2, h3, h4 { + font-weight: 600 !important; + margin: 20px 0 5px !important; + } + + h1 { + font-size: 22px !important; + } + + h2 { + font-size: 18px !important; + } + + h3 { + font-size: 16px !important; + } + + .container { + width: 100% !important; + } + + .content, .content-wrapper { + padding: 10px !important; + } + + .invoice { + width: 100% !important; + } +} diff --git a/web/views/file.ejs b/web/views/file.ejs new file mode 100644 index 0000000..658e165 --- /dev/null +++ b/web/views/file.ejs @@ -0,0 +1,155 @@ + + + + + + + <%= file.name %> - Hostr, download and share anything. + + + + + <% if (file.width) { %> + + + <% } else { %> + + <% } %> + + + + + <% if(file.width > 280 && file.height > 150) { %> + + + + + + + <% } %> + + + +
+ + + <% if (file.width) { %><%=file.name %><% } %> + +
+ <% if (file.width) { %> +
+ +
+ <% } %> + + <% if (!file.width) { %> +
+ + <%=file.name %> + +
+ <% if (file.malware) { %> +
+

This file has been identified as likely being malware, proceed with caution.

+

+

+

+ <% } else { %> +
+

This file has been scanned for viruses but may still not be safe.

+

+

+ <% } %> + +
+
+ <% } %> + + + + + diff --git a/web/views/footer.ejs b/web/views/footer.ejs new file mode 100644 index 0000000..404e5e0 --- /dev/null +++ b/web/views/footer.ejs @@ -0,0 +1,17 @@ + diff --git a/web/views/forgot.ejs b/web/views/forgot.ejs new file mode 100644 index 0000000..afa5846 --- /dev/null +++ b/web/views/forgot.ejs @@ -0,0 +1,61 @@ + + + + + Password Reset | Hostr • Instant Sharing + + + + + + + + + +
+ +
+ +
+

Reset your Hostr password.

+ <% if(typeof message !== 'undefined') { %> + + <% } %> +
+
+ + <% if(typeof error !== 'undefined') { %> +
+ <%= error %> +
+ <% } %> +
+ <% if (token) { %> + + + <% } else { %> + + + <% } %> +
+ +
+
+

Actually, I remember it. Let me sign in.

+
+ + + <% include footer.ejs %> + + + diff --git a/web/views/index.ejs b/web/views/index.ejs new file mode 100644 index 0000000..2a830ed --- /dev/null +++ b/web/views/index.ejs @@ -0,0 +1,105 @@ + + + + + + + Hostr + + + + + + + + + + + + + + + + + + + + + > + +
+
+
{{progress.status}} {{progress.name}} • {{progress.percent| number:0}}%
+
+
+
{{uploadError}}
+
+
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+
+

404

+

We can't find the file you're looking for :(

+

The owner may have removed it or it may never have existed in the first place.

+ Try our homepage instead :) +
+
+
+
+
+ + +

Drop files to upload

+ + + <% if (typeof user.email !== 'undefined') { %> + + <% } %> + + + + + + + diff --git a/web/views/mac-update-changelog.ejs b/web/views/mac-update-changelog.ejs new file mode 100644 index 0000000..69a4702 --- /dev/null +++ b/web/views/mac-update-changelog.ejs @@ -0,0 +1,24 @@ + + + + Hostr Changelog + + + <%- CDN(['/styles/app.css']) %> + + +
+
+
+

Hostr 0.7.0

+

Changes

+
    +
  • Updated branding
  • +
  • Minor bugfixes
  • +
+

Stay tuned for a bigger update coming soon!

+
+
+
+ + diff --git a/web/views/mac-update.ejs b/web/views/mac-update.ejs new file mode 100644 index 0000000..508ee10 --- /dev/null +++ b/web/views/mac-update.ejs @@ -0,0 +1,25 @@ + + + + Hostr's Changelog + https://hostr.co/updaters/mac.xml + Hostr updates. + en + + Version 0.7.0 + + https://hostr.co/updaters/mac/changelog + + Mon, 7 Jul 2014 13:20:11 +0000 + + + + Version 0.6.0 + + https://hostr.co/updaters/mac/changelog + + Wed, 3 May 2013 23:20:11 +0000 + + + + diff --git a/web/views/marketing.ejs b/web/views/marketing.ejs new file mode 100644 index 0000000..fed680d --- /dev/null +++ b/web/views/marketing.ejs @@ -0,0 +1,186 @@ + + + + + Hostr • Instant Sharing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ logo + +
+ +
+ + + + +
+
+ Learn More + +
+
+ +
+ +
+
+
+ +

Instant sharing. +
new
+

+

+ No more waiting for files to upload before sharing the links. Start uploading and immediately get the link to share with your friends or anyone. Super useful for those large files you need to share! +

+
+
+
+ + +
+
+
+
+

You can share

+
+
+ +
+
+ +
+ +
+
+

... anything and everything ...

+

From .avi to .zip, all file types are supported not just images. Share screenshots, movie clips, audio... anything you can think of!

+
+
+
+ +
+
+ +
+ +
+
+

... from anywhere.

+

Download our Mac and Windows apps to make sharing even simpler, with iOS and Android apps coming soon!

+
+
+ +
+
+
+ +
+
+
+

Still have questions?

+
+
+
+
+

Do have to I pay for hostr?

+

Nope, Hostr is free to use! You can upgrade your account to Pro for more features, but Hostr will always be available for free.

+
+
+

How much can I upload?

+

You can upload 15 files per day for free and unlimited files per day for Pro users.

+
+
+

How long are my files stored for?

+

Files are stored as long as your account is active. In addition, all files are redundantly backed up to Amazon Web Services.

+
+
+
+
+

What is the largest file size I can upload?

+

You can upload 20MB files with a free account and 500MB files with Pro.

+
+
+

Are there any bandwidth limits?

+

There are no bandwidth limits, however we reserve the right to suspend hotlinking of images in cases of abuse.

+
+
+

Will Hostr be around in 6 months?

+

Many sharing services have come and go, but we've been operating for 8 years. Hostr is a labour of love for us.

+
+
+
+
+

Convinced?

+ Create an account +
+
+
+ + + + + + + diff --git a/web/views/pricing.ejs b/web/views/pricing.ejs new file mode 100644 index 0000000..7d37191 --- /dev/null +++ b/web/views/pricing.ejs @@ -0,0 +1,104 @@ + + + + + Hostr Pro Pricing | Hostr • Instant Sharing + + + + + + <%- CDN(['/styles/style.css']) %> + + + +
+ +
+ +
+
+
+

Pricing

+

Hostr is available to everyone for free, no trial period, just free. If you want to get even more from Hostr, you can upgrade to Hostr Pro.

+
+
+ +
+
+

Hostr Free

+ +

Free!

+ +
    +
  • Simple, Secure file sharing
  • +
  • 15 Uploads per day
  • +
  • Share 25MB files
  • +
  • Ads only on popular files
  • +
+ + Sign Up +
+
+

Hostr Pro

+ +

$6/month

+ +
    +
  • All the features of Free
  • +
  • Unlimited file sharing
  • +
  • Share 500MB files
  • +
  • No ads, for you or your files
  • +
+ + Go Pro +
+
+
+ +
+
+
+

Questions?

+
+
+
+
+

Is there a minimum contract?

+

You can cancel whenever you like. We will downgrade your account at the end of your billing cycle.

+
+
+

Can I pay yearly?

+

Not yet, but we do plan to offer it in the near future.

+
+
+
+
+

How secure is my credit card?

+

Every step of the transaction is protected by 256-bit SSL. We use Stripe for our credit card transactions, meaning your card details are never transmitted to us.

+
+
+

What payment methods do you accept?

+

We accept Visa, MasterCard, and American Express.

+
+
+
+
+

Got more questions?

+

Hit us up on support@hostr.co and we'll be happy to answer them.

+
+
+
+ + <% include footer.ejs %> + + + diff --git a/web/views/privacy.ejs b/web/views/privacy.ejs new file mode 100644 index 0000000..5131b77 --- /dev/null +++ b/web/views/privacy.ejs @@ -0,0 +1,81 @@ + + + + + + + Hostr + + + + + + +
+ + +
+ +
+
+
+

Privacy Policy

+

Introduction

+

Hostr (we" or "us") values its visitors' privacy. This privacy policy is effective 16th February 2013; it summarizes what information we might collect from a registered user or other visitor ("you"), and what we will and will not do with it. + Please note that this privacy policy does not govern the collection and use of information by companies that Hostr does not control, nor by individuals not employed or managed by Hostr. If you visit a Web site that we mention or link to, be sure to review its privacy policy before providing the site with information.

+

What we do with your personally identifiable information

+

It is always up to you whether to disclose personally identifiable information to us, although if you elect not to do so, we reserve the right not to register you as a user or provide you with any products or services. "Personally identifiable information" means information that can be used to identify you as an individual, such as, for example:

+
    +
  • your name, company, email address, phone number, billing address, and shipping address your Hostr user ID and password
  • +
  • credit card information
  • +
  • any account-preference information you provide us
  • +
  • your computer's domain name and IP address, indicating
  • +
  • where your computer is located on the Internet
  • +
  • session data for your login session, so that our computer can ‘talk' to yours while you are logged in
  • +
+

If you do provide personally identifiable information to us, either directly or through a reseller or other business partner, we will: + not sell or rent it to a third party without your permission — although unless you opt out (see below), we may use your contact information to provide you with information we believe you need to know or may find useful, such as (for example) news about our services and products and modifications to the Terms of Service; take commercially reasonable precautions to protect the information from loss, misuse and unauthorized access, disclosure, alteration and destruction; + not use or disclose the information except:

+
    +
  • as necessary to provide services or products you have ordered, such as (for example) by providing it to a carrier to deliver products you have ordered;
  • +
  • in other ways described in this privacy policy or to which you have otherwise consented; in the aggregate with other information in such a way so that your identity cannot reasonably be determined (for example, statistical compilations);
  • +
  • as required by law, for example, in response to a subpoena or search warrant;
  • +
  • to outside auditors who have agreed to keep the information confidential;
  • +
  • as necessary to enforce the Terms of Service;
  • +
  • as necessary to protect the rights, safety, or property of Hostr, its users, or others; this may include (for example) exchanging information with other organizations for fraud protection and/or risk reduction.
  • +
+

Other information we collect

+

We may collect other information that cannot be readily used to identify you, such as (for example) the domain name and IP address of your computer. We may use this information, individually or in the aggregate, for technical administration of our Web site(s); research and development; customer- and account administration; and to help us focus our marketing efforts more precisely.

+

Cookies

+

Hostr uses "cookies" to store personal data on your computer. We may also link information stored on your computer in cookies with personal data about specific individuals stored on our servers. If you set up your Web browser (for example, Internet Explorer or Firefox) so that cookies are not allowed, you might not be able to use some or all of the features of our Web site(s).

+

External data storage sites

+

We may store your data on servers provided by third party hosting vendors with whom we have contracted.

+

Your privacy responsibilities

+

To help protect your privacy, be sure:

+
    +
  • not to share your user ID or password with anyone else;
  • +
  • to take customary precautions to guard against "malware" (viruses, Trojan horses, bots, etc.), for example by installing and updating suitable anti-virus software.
  • +
+

Changes to this privacy policy

+

We reserve the right to change this privacy policy as we deem necessary or appropriate because of legal compliance requirements or changes in our business practices. If you have provided us with an email address, we will endeavor to notify you, by email to that address, of any material change to how we will use personally identifiable information.

+

Questions or comments?

+

If you have questions or comments about Hostr's privacy policy, send an email to support@hostr.com.

+

Thank you for choosing Hostr!

+
+
+
+ + <% include footer.ejs %> + + + diff --git a/web/views/signin.ejs b/web/views/signin.ejs new file mode 100644 index 0000000..31c9f85 --- /dev/null +++ b/web/views/signin.ejs @@ -0,0 +1,66 @@ + + + + + Sign in | Hostr • Instant Sharing + + + + + + + + + +
+ +
+ +
+

Sign in to Hostr.

+ <% if(typeof message !== 'undefined') { %> + + <% } %> +
+
+ + <% if(typeof error !== 'undefined') { %> +
+ <%= error %> +
+ <% } %> +
+ + +
+
+ + +
+
+ +
+ + +
+
+

Don't have an account? Sign up now

+
+ + + <% include footer.ejs %> + + + diff --git a/web/views/signup.ejs b/web/views/signup.ejs new file mode 100644 index 0000000..826b678 --- /dev/null +++ b/web/views/signup.ejs @@ -0,0 +1,64 @@ + + + + + Hostr • Instant Sharing + + + + + + + + + +
+ +
+ +
+

Sign up to Hostr.

+
+
+ <% if(typeof error !== 'undefined') { %> +
+ <%= error %> +
+ <% } %> +
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+

Already have an account? Sign in

+
+ + + <% include footer.ejs %> + + + diff --git a/web/views/terms.ejs b/web/views/terms.ejs new file mode 100644 index 0000000..94347eb --- /dev/null +++ b/web/views/terms.ejs @@ -0,0 +1,65 @@ + + + + + + + Hostr + + + + + + +
+ + +
+ +
+
+
+

Hostr Terms of Service

+

Prohibited Content

+

Website Hosting

+

Hotlinking graphics is only permitted in the context of sharing, not for hosting your website.

+

Copyright Content

+

The use of warez, media files that you are not the rightful owner of, cracks, and any other forms of copyrighted software that you are not legally allowed to use/distribute are all strictly prohibited.

+

Pornography

+

Pornography of any kind is strictly prohibited. Pornography is defined as content which displays or links to displays of genitalia.

+

Viruses and General Malware

+

Viruses, Trojans, and any other harmful files or malware are all strictly prohibited.

+

Passworded Archives

+

The use of passworded archives is strictly prohibited, Hostr needs to be able to ascertain any archive does not contain any of the above material.

+

Split Archives

+

The use of split archives to circumvent the file size limit is strictly prohibited.

+
+ +

Breaching any of the above terms may result in your account being terminated without warning.

+ +
+ +

Hotlinking

+

Hotlinking images is permitted. However, abuse of this service may result in temporary limitations on your ability to hotlink. This will not affect your ability to continue using your account. Limitations may imposed permanently for continued abuse.

+ +
+ +

Hostr reserves the right to remove content for any reason it deems appropriate.

+
+
+
+ + <% include footer.ejs %> + + +
+ +
+ +