From d6d5580b3a0d1724f302bc0964a984d20ce52a27 Mon Sep 17 00:00:00 2001 From: Ivan Sadovin Date: Fri, 15 May 2026 17:04:16 +0300 Subject: [PATCH] v1.0.0 --- README.md | 149 ++-- install.xml | 8 + .../extension/payment/payanyway.php | 333 +++++++++ .../en-gb/extension/payment/payanyway.php | 58 ++ .../ru-ru/extension/payment/payanyway.php | 58 ++ upload/admin/view/image/payment/payanyway.png | Bin 0 -> 153838 bytes .../template/extension/payment/payanyway.twig | 237 ++++++ .../extension/payment/payanyway.php | 672 ++++++++++++++++++ .../en-gb/extension/payment/payanyway.php | 14 + .../ru-ru/extension/payment/payanyway.php | 14 + .../model/extension/payment/payanyway.php | 58 ++ .../template/extension/payment/payanyway.twig | 44 ++ 12 files changed, 1579 insertions(+), 66 deletions(-) create mode 100644 install.xml create mode 100755 upload/admin/controller/extension/payment/payanyway.php create mode 100755 upload/admin/language/en-gb/extension/payment/payanyway.php create mode 100755 upload/admin/language/ru-ru/extension/payment/payanyway.php create mode 100755 upload/admin/view/image/payment/payanyway.png create mode 100755 upload/admin/view/template/extension/payment/payanyway.twig create mode 100755 upload/catalog/controller/extension/payment/payanyway.php create mode 100755 upload/catalog/language/en-gb/extension/payment/payanyway.php create mode 100755 upload/catalog/language/ru-ru/extension/payment/payanyway.php create mode 100755 upload/catalog/model/extension/payment/payanyway.php create mode 100755 upload/catalog/view/theme/default/template/extension/payment/payanyway.twig diff --git a/README.md b/README.md index 003c417..e24a121 100644 --- a/README.md +++ b/README.md @@ -1,93 +1,110 @@ -# openCart3 +# 🌟 Платёжный модуль PayAnyWay для [OpenCart](https://www.opencart.com/) v3.x +![openCart](https://img.shields.io/badge/openCart-3.x-0070C0?logo=php&logoColor=white) +![PHP](https://img.shields.io/badge/PHP-5.6%2B-purple) +![License](https://img.shields.io/badge/License-MIT-green) +> **📦 Версия модуля: 1.0.0** -## Getting started +> **ℹ️ Совместимость версий OpenCart:** +> 3.0.0.0, 3.0.1.1, 3.0.1.2, 3.0.2.0, 3.0.3.0, 3.0.3.1, 3.0.3.2, 3.0.3.3, 3.0.3.4, 3.0.3.5, 3.0.3.6, 3.0.3.7, 3.0.3.8, 3.0.3.9, 3.0.4.0, 3.0.4.1, 3.0.5.0 -To make it easy for you to get started with GitLab, here's a list of recommended next steps. +> **ℹ️ Совместимость версий OpenCart "Русская сборка":** +> 3.0.0.1, 3.0.1.1, 3.0.1.2, 3.0.2.0, 3.0.3.0, 3.0.3.1, 3.0.3.2, 3.0.3.6, 3.0.3.7, 3.0.3.8, 3.0.3.9, 3.0.4.0, 3.0.4.1, 3.0.5.0 -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! +> **ℹ️ Совместимость версий ocStore:** +> 3.0.2.0, 3.0.3.7, 3.0.3.9 -## Add your files +> **ℹ️ Примечание по валюте** +> Данный модуль работает **только с валютой RUB (Российский рубль)**. +> Перед активацией модуля убедитесь, что на сайте в качестве базовой валюты установлен RUB, либо у пользователя выбран счёт в RUB. Использование других валют не поддерживается. -* [Create](https://docs.gitlab.com/user/project/repository/web_editor/#create-a-file) or [upload](https://docs.gitlab.com/user/project/repository/web_editor/#upload-a-file) files -* [Add files using the command line](https://docs.gitlab.com/topics/git/add_files/#add-files-to-a-git-repository) or push an existing Git repository with the following command: +## 🏗️ Структура модуля ``` -cd existing_repo -git remote add origin https://git.moneta.ru:8000/products/cashier/cms/openCart3.git -git branch -M main -git push -uf origin main +├── upload +│ ├── admin +│ │ ├── controller/extension/payment/payanyway.php +│ │ ├── language/{en-gb,ru-ru}/extension/payment/payanyway.php +│ │ ├── view/image/payment/payanyway.png +│ │ └── view/template/extension/payment/payanyway.twig +│ └── catalog +│ ├── controller/extension/payment/payanyway.php +│ ├── language/{en-gb,ru-ru}/extension/payment/payanyway.php +│ ├── model/extension/payment/payanyway.php +│ └── view/theme/default/template/extension/payment/payanyway.twig +├── install.xml +└── README.md ``` -## Integrate with your tools +## 🚀 Установка и настройка модуля -* [Set up project integrations](https://git.moneta.ru:8000/products/cashier/cms/openCart3/-/settings/integrations) +1. 📥 [Скачайте архив модуля](https://git.pub.moneta.ru/CMS/openCart3/releases) и переименуйте в `payanyway.ocmod.zip`. +2. 📂 Загрузите расширение через панель управления интернет-магазином. + Выберите раздел **"Модули / Расширения"** → **"Установка расширений"**. Нажмите "Загрузить" и выберите скачанный архив. +3. ⚙️ В разделе **"Модули / Расширения"** → **"Модули / Расширения"** выберите тип расширения **"Оплата"**. + В списке модулей оплаты найдите **PayAnyWay** и нажмите: + - **«Активировать»** — для включения модуля + - **«Редактировать»** — для перехода к настройкам +4. ✏️ Заполните соответствующие поля в настройках способа оплаты: -## Collaborate with your team +| Поле | Описание | +|-------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| **Включить модуль оплаты** | Включите или выключите модуль оплаты | +| **Номер счёта** | Ван номер расширенного счёта в системе [MONETA.RU](https://moneta.ru/) | +| **Код проверки целостности данных** | Код проверки целостности данных, указанный в настройках расширенного счёта в системе [MONETA.RU](https://moneta.ru/) | +| **Сервер платежей** | `Боевой` / `Тестовый` | +| **НДС** | Выберите из списка | +| **Валюта платежа** | `RUB` | +| **Статусы заказа** | Выберите соответствующие статусы заказа из списка | +| **Обрабатываемый** | Укажите статус заказа, который выставляется при его создании | +| **Успешный** | Укажите статус заказа, который выставляется при успешной оплате | +| **Неуспешный** | Укажите статус заказа, который выставляется при ошибке оплаты | +| **Регион отображения** | Географическая зона, в которой будет отображаться способ оплаты | +| **Порядок сортировки** | Определяет порядок отображения платежного метода в списке методов оплаты при оформлении заказа. Чем меньше число, тем выше позиция в списке | -* [Invite team members and collaborators](https://docs.gitlab.com/user/project/members/) -* [Create a new merge request](https://docs.gitlab.com/user/project/merge_requests/creating_merge_requests/) -* [Automatically close issues from merge requests](https://docs.gitlab.com/user/project/issues/managing_issues/#closing-issues-automatically) -* [Enable merge request approvals](https://docs.gitlab.com/user/project/merge_requests/approvals/) -* [Set auto-merge](https://docs.gitlab.com/user/project/merge_requests/auto_merge/) +--- -## Test and Deploy +## 🔧 Инструкция по настройке счета PayAnyWay -Use the built-in continuous integration in GitLab. +1. 📝 [Зарегистрируйтесь](https://payanyway.ru/partnerRegistration.htm) в платёжной системе PayAnyWay и заполните все необходимые данные. Дождитесь проверки аккаунта и создайте **расширенный счет**. -* [Get started with GitLab CI/CD](https://docs.gitlab.com/ci/quick_start/) -* [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/user/application_security/sast/) -* [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/topics/autodevops/requirements/) -* [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/user/clusters/agent/) -* [Set up protected environments](https://docs.gitlab.com/ci/environments/protected_environments/) +2. ⚙️ Заполните настройки расширенного счета (раздел **«Мой счет» → «Управление счетами» → «Редактировать счет»**): -*** +| Параметр | Значение | +|------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **Тестовый режим** | `Нет` | +| **Check URL** | `https://your_site_name/index.php?route=extension/payment/payanyway/callback` | +| **Pay URL** | `https://your_site_name/index.php?route=extension/payment/payanyway/callback` | +| **HTTP method** | `GET` / `POST` | +| **Можно переопределять настройки в URL** | `Да` | +| **Подпись формы оплаты обязательна** | `Да` | +| **Код проверки целостности данных** | `ваш_код` (произвольный набор символов) | +| **Success URL** | Оставить пустым | +| **Fail URL** | Оставить пустым | +| **InProgress URL** | Необязательное поле. URL страницы магазина, куда должен попасть покупатель после успешного запроса на авторизацию средств, до подтверждения списания и зачисления средств. Поддерживается ограниченным количеством методов оплаты. Переход пользователя произойдет независимо от получения магазином средств и отчета о проведенной оплате | +| **Return URL** | Оставить пустым | -# Editing this README +> ⚠️ **Важно!** Для кириллического домена PayURL и CheckURL должны быть указаны в кодировке [Punycode](https://2ip.ru/punycode/). -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template. +--- -## Suggestions for a good README +## 📚 Полезные ресурсы OpenCart -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. +* [OpenCart](https://www.opencart.com/) +* [Документация](https://docs.opencart.com/) +* [Релизы](https://github.com/opencart/opencart/releases) -## Name -Choose a self-explaining name for your project. +## 📚 Полезные ресурсы OpenCart "Русская сборка" -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. +* [Русская сборка OpenCart](https://opencart-russia.ru/) +* [Документация и FAQ](https://forum.opencart-russia.ru/forums/wiki/) +* [Форум поддержки](https://forum.opencart-russia.ru/) -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. +## 📚 Полезные ресурсы OsStore -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. +* [OsStore](https://ocstore.com/) +* [Форум поддержки](https://opencartforum.com/) +--- -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. +**✅ Модуль настроен, приятных платежей!** 💰🎉 \ No newline at end of file diff --git a/install.xml b/install.xml new file mode 100644 index 0000000..10ab807 --- /dev/null +++ b/install.xml @@ -0,0 +1,8 @@ + + + PayAnyWay + payanyway + 1.0.0 + PayAnyWay + https://payanyway.ru/ + diff --git a/upload/admin/controller/extension/payment/payanyway.php b/upload/admin/controller/extension/payment/payanyway.php new file mode 100755 index 0000000..9a1a31d --- /dev/null +++ b/upload/admin/controller/extension/payment/payanyway.php @@ -0,0 +1,333 @@ + '1105', + 'vat0' => '1104', + 'vat5' => '1108', + 'vat7' => '1109', + 'vat10' => '1103', + 'vat22' => '1113', + 'vat105' => '1110', + 'vat107' => '1111', + 'vat110' => '1107', + 'vat122' => '1114' + ); + + private $error = array(); + + /** + * @return void + * @throws \Exception + */ + public function index() { + $this->load->language('extension/payment/payanyway'); + $this->document->setTitle($this->language->get('heading_title')); + + if (($this->request->server['REQUEST_METHOD'] === 'POST') && $this->validate($this->request)) { + $this->load->model('setting/setting'); + $this->model_setting_setting->editSetting('payment_payanyway', $this->request->post); + + $this->session->data['success'] = $this->language->get('text_success'); + + $this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true)); + } + + $data = array(); + $this->applyValidationErrors($data); + + $data['breadcrumbs'] = $this->getBreadcrumbs(); + $data['action'] = $this->url->link('extension/payment/payanyway', 'user_token=' . $this->session->data['user_token'], true); + $data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true); + + $data['payment_payanyway_status'] = $this->retrieveValue('payment_payanyway_status'); + $data['payment_payanyway_account'] = $this->retrieveValue('payment_payanyway_account'); + $data['payment_payanyway_integrity_code'] = $this->getIntegrityCode('payment_payanyway_integrity_code'); + $data['payment_payanyway_server'] = $this->retrieveValue('payment_payanyway_server'); + $data['payment_payanyway_vat_rates'] = $this->getModuleVatRates(); + $data['payment_payanyway_vat_rate'] = $this->retrieveValue('payment_payanyway_vat_rate'); + $data['payment_payanyway_currencies'] = $this->getModuleCurrencies(); + $data['payment_payanyway_currency'] = $this->retrieveValue('payment_payanyway_currency'); + $data['order_statuses'] = $this->getAvailableOrderStatuses(); + $data['payment_payanyway_pending_order_status_id'] = $this->retrieveValue('payment_payanyway_pending_order_status_id'); + $data['payment_payanyway_success_order_status_id'] = $this->retrieveValue('payment_payanyway_success_order_status_id'); + $data['payment_payanyway_error_order_status_id'] = $this->retrieveValue('payment_payanyway_error_order_status_id'); + $data['geo_zones'] = $this->getAvailableGeoZones(); + $data['payment_payanyway_geo_zone_id'] = $this->retrieveValue('payment_payanyway_geo_zone_id'); + $data['payment_payanyway_sort_order'] = $this->retrieveValue('payment_payanyway_sort_order'); + $data['payment_payanyway_cms_module_version'] = $this->getCmsModuleVersion(); + + $data['header'] = $this->load->controller('common/header'); + $data['column_left'] = $this->load->controller('common/column_left'); + $data['footer'] = $this->load->controller('common/footer'); + + $this->response->setOutput($this->load->view('extension/payment/payanyway', $data)); + } + + /** + * @return void + * @throws \Exception + */ + public function install() { + $defaultSettings = array( + 'payment_payanyway_status' => 0, + 'payment_payanyway_account' => '', + 'payment_payanyway_integrity_code' => '', + 'payment_payanyway_server' => 'prod', + 'payment_payanyway_sort_order' => 0, + 'payment_payanyway_cms_module_version' => $this->getCmsModuleVersion(), + ); + + $orderStatuses = $this->getAvailableOrderStatuses(); + + $pendingStatus = array_filter($orderStatuses, function ($status) { + return (int)$status['order_status_id'] === 1; + }); + if (!empty($pendingStatus)) { + $pendingKey = key($pendingStatus); + $defaultSettings['payment_payanyway_pending_order_status_id'] = $pendingStatus[$pendingKey]['order_status_id']; + } + + $successStatus = array_filter($orderStatuses, function ($status) { + return (int)$status['order_status_id'] === 5; + }); + if (!empty($successStatus)) { + $successKey = key($successStatus); + $defaultSettings['payment_payanyway_success_order_status_id'] = $successStatus[$successKey]['order_status_id']; + } + + $errorStatus = array_filter($orderStatuses, function ($status) { + return (int)$status['order_status_id'] === 10; + }); + if (!empty($errorStatus)) { + $errorKey = key($errorStatus); + $defaultSettings['payment_payanyway_error_order_status_id'] = $errorStatus[$errorKey]['order_status_id']; + } + + $this->load->model('setting/setting'); + $this->model_setting_setting->editSetting('payment_payanyway', $defaultSettings); + } + + /** + * @return void + * @throws \Exception + */ + public function uninstall() { + $this->load->model('setting/setting'); + $this->model_setting_setting->deleteSetting('payment_payanyway'); + } + + /** + * @param \Request $request + * @return bool + */ + private function validate($request) { + if (!$this->user->hasPermission('modify', 'extension/payment/payanyway')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + if (!isset($request->post['payment_payanyway_account']) || + ((int)$request->post['payment_payanyway_account'] <= 0) + ) { + $this->error['account'] = $this->language->get('error_account'); + } + + if (empty($request->post['payment_payanyway_integrity_code'])) { + $this->error['integrity_code'] = $this->language->get('error_integrity_code'); + } + + if (empty($request->post['payment_payanyway_pending_order_status_id'])) { + $this->error['pending_order_status'] = $this->language->get('error_order_status'); + } + if (empty($request->post['payment_payanyway_success_order_status_id'])) { + $this->error['success_order_status'] = $this->language->get('error_order_status'); + } + if (empty($request->post['payment_payanyway_error_order_status_id'])) { + $this->error['error_order_status'] = $this->language->get('error_order_status'); + } + + $sortOrder = isset($request->post['payment_payanyway_sort_order']) + ? (int)$request->post['payment_payanyway_sort_order'] + : self::MODULE_DEFAULT_SORT_ORDER; + $request->post['payment_payanyway_sort_order'] = $sortOrder; + $request->post['payment_payanyway_cms_module_version'] = $this->getCmsModuleVersion(); + + return empty($this->error); + } + + /** + * @param array $data + * @return void + */ + private function applyValidationErrors(array &$data) { + $data['error_warning'] = isset($this->error['warning']) ? $this->error['warning'] : ''; + $data['error_account'] = isset($this->error['account']) ? $this->error['account'] : ''; + $data['error_integrity_code'] = isset($this->error['integrity_code']) ? $this->error['integrity_code'] : ''; + $data['error_pending_order_status'] = isset($this->error['pending_order_status']) ? $this->error['pending_order_status'] : ''; + $data['error_success_order_status'] = isset($this->error['success_order_status']) ? $this->error['success_order_status'] : ''; + $data['error_error_order_status'] = isset($this->error['error_order_status']) ? $this->error['error_order_status'] : ''; + } + + /** @return array */ + private function getBreadcrumbs() { + return array( + array( + 'text' => $this->language->get('text_home'), + 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true), + ), + array( + 'text' => $this->language->get('text_extension'), + 'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true), + ), + array( + 'text' => $this->language->get('heading_title'), + 'href' => $this->url->link('extension/payment/payanyway', 'user_token=' . $this->session->data['user_token'], true), + ), + ); + } + + /** + * @param string $key + * @return string + */ + private function getIntegrityCode($key) { + $value = $this->retrieveValue($key); + if (null === $value) { + return ''; + } + + return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); + } + + /** @return array */ + private function getModuleVatRates() { + $result = array(); + foreach ($this->availableVatRates as $vat => $value) { + $label = 'entry_' . $vat . '_label'; + $result[$value] = $this->language->get($label); + } + + return $result; + } + + /** + * @return array + * @throws \Exception + */ + private function getModuleCurrencies() { + $this->load->model('localisation/currency'); + $shopCurrencies = $this->model_localisation_currency->getCurrencies(); + + $result = array(); + foreach ($this->supportedCurrencies as $currencyCode) { + $result[$currencyCode] = isset($shopCurrencies[$currencyCode]) + ? $shopCurrencies[$currencyCode] + : $this->getDefaultCurrencyDefinition($currencyCode); + } + + return $result; + } + + /** + * @param string $currencyCode + * @return array + */ + private function getDefaultCurrencyDefinition($currencyCode) { + $definitions = array( + 'RUB' => array( + 'currency_id' => 0, + 'title' => 'Рубль', + 'code' => 'RUB', + 'symbol_left' => '', + 'symbol_right' => '₽', + 'decimal_place' => '2', + 'value' => 1.00000000, + 'status' => '1', + 'date_modified' => date('Y-m-d H:i:s'), + ), + ); + + return isset($definitions[$currencyCode]) ? $definitions[$currencyCode] : array(); + } + + /** + * @return array + * @throws \Exception + */ + private function getAvailableOrderStatuses() { + $this->load->model('localisation/order_status'); + return $this->model_localisation_order_status->getOrderStatuses(); + } + + /** + * @return array + * @throws \Exception + */ + private function getAvailableGeoZones() { + $this->load->model('localisation/geo_zone'); + return $this->model_localisation_geo_zone->getGeoZones(); + } + + /** @return string */ + private function getCmsModuleVersion() { + $this->load->language('common/footer'); + $textFooter = $this->language->get('text_footer'); + $textFooter = is_string($textFooter) ? $textFooter : ''; + + $cmsName = $this->detectCmsByPatterns($textFooter); + $cmsVersion = defined('VERSION') ? constant('VERSION') : '.unknown'; + + return sprintf('%s v%s | %s v%s', + $cmsName, + $cmsVersion, + self::MODULE_NAME, + self::MODULE_VERSION + ); + } + + private function detectCmsByPatterns($textFooter) { + $patterns = [ + 'ocStore' => '/ocStore/i', + 'Russian OpenCart' => '/opencart-russia/i', + self::CMS_NAME => '/opencart\.com/i' + ]; + + if (!empty($textFooter)) { + foreach ($patterns as $cms => $pattern) { + if (preg_match($pattern, $textFooter)) { + return $cms; + } + } + } + + return self::CMS_NAME; + } + + /** + * @param string $name + * @return mixed + */ + private function retrieveValue($name) { + if (!is_string($name)) { + throw new \InvalidArgumentException("The name must be a string"); + } + + if (isset($this->request->post[$name])) { + return $this->request->post[$name]; + } + + return $this->config->get($name); + } +} diff --git a/upload/admin/language/en-gb/extension/payment/payanyway.php b/upload/admin/language/en-gb/extension/payment/payanyway.php new file mode 100755 index 0000000..7bc0459 --- /dev/null +++ b/upload/admin/language/en-gb/extension/payment/payanyway.php @@ -0,0 +1,58 @@ +PayAnyWay'; + +// Entry +$_['entry_status_label'] = 'Enable payment module'; + +$_['entry_account_label'] = 'Account number'; +$_['entry_account_description'] = 'Your extended account number in the MONETA.RU system'; +$_['entry_integrity_code_label'] = 'Integrity Code'; +$_['entry_integrity_code_description'] = 'Data integrity verification code specified in the extended account settings in the MONETA.RU system'; +$_['entry_server_label'] = 'Payment server'; +$_['entry_server_prod_label'] = 'Production'; +$_['entry_server_demo_label'] = 'Demo'; + +$_['entry_vat_rate_label'] = 'VAT'; +$_['entry_vat_none_label'] = 'Without VAT'; +$_['entry_vat0_label'] = '0%'; +$_['entry_vat5_label'] = '5%'; +$_['entry_vat7_label'] = '7%'; +$_['entry_vat10_label'] = '10%'; +$_['entry_vat22_label'] = '22%'; +$_['entry_vat105_label'] = '5% (calculated rate 5/105)'; +$_['entry_vat107_label'] = '7% (calculated rate 7/107)'; +$_['entry_vat110_label'] = '10% (calculated rate 10/110)'; +$_['entry_vat122_label'] = '22% (calculated rate 22/122)'; + +$_['entry_currency_label'] = 'Payment acceptance'; +$_['entry_currency_rub_label'] = 'Russian Ruble'; +$_['entry_currency_description'] = 'The currencies in the MONETA.RU system and in the store must match'; + +$_['entry_select_order_status_label'] = ' --- Select status --- '; +$_['entry_order_statuses_label'] = 'Order Statuses'; +$_['entry_pending_order_status_label'] = 'Pending'; +$_['entry_success_order_status_label'] = 'Success'; +$_['entry_error_order_status_label'] = 'Error'; + +$_['entry_geo_zone_label'] = 'Area of display'; +$_['entry_sort_order_label'] = 'Sort Order'; + +// Help +$_['help_pending_order_status'] = 'Specify the order status that is set when the order is created'; +$_['help_success_order_status'] = 'Specify the order status that is set upon successful payment'; +$_['help_error_order_status'] = 'Specify the order status that is set upon payment error'; +$_['help_geo_zone'] = 'Geographic area where the payment method will be displayed'; +$_['help_sort_order'] = 'Determines the display order of the payment method. The smaller the number, the higher the position in the list'; + +// Error +$_['error_permission'] = 'Warning: You do not have permission to modify payment PayAnyWay!'; +$_['error_account'] = 'Account Number is required and must be greater than 0'; +$_['error_integrity_code'] = 'Account Integrity Code Required'; +$_['error_order_status'] = 'Select order status'; diff --git a/upload/admin/language/ru-ru/extension/payment/payanyway.php b/upload/admin/language/ru-ru/extension/payment/payanyway.php new file mode 100755 index 0000000..6b2e120 --- /dev/null +++ b/upload/admin/language/ru-ru/extension/payment/payanyway.php @@ -0,0 +1,58 @@ +PayAnyWay'; + +// Entry +$_['entry_status_label'] = 'Включить модуль оплаты'; + +$_['entry_account_label'] = 'Номер счёта'; +$_['entry_account_description'] = 'Ваш номер расширенного счёта в системе MONETA.RU'; +$_['entry_integrity_code_label'] = 'Код проверки целостности данных'; +$_['entry_integrity_code_description'] = 'Код проверки целостности данных, указанный в настройках расширенного счёта в системе MONETA.RU'; +$_['entry_server_label'] = 'Сервер платежей'; +$_['entry_server_prod_label'] = 'Боевой'; +$_['entry_server_demo_label'] = 'Тестовый'; + +$_['entry_vat_rate_label'] = 'НДС'; +$_['entry_vat_none_label'] = 'Без НДС'; +$_['entry_vat0_label'] = '0%'; +$_['entry_vat5_label'] = '5%'; +$_['entry_vat7_label'] = '7%'; +$_['entry_vat10_label'] = '10%'; +$_['entry_vat22_label'] = '22%'; +$_['entry_vat105_label'] = '5% (расчётная ставка 5/105)'; +$_['entry_vat107_label'] = '7% (расчётная ставка 7/107)'; +$_['entry_vat110_label'] = '10% (расчётная ставка 10/110)'; +$_['entry_vat122_label'] = '22% (расчётная ставка 22/122)'; + +$_['entry_currency_label'] = 'Валюта платежа'; +$_['entry_currency_rub_label'] = 'Рубль'; +$_['entry_currency_description'] = 'Валюты в системе MONETA.RU и в магазине должны совпадать'; + +$_['entry_select_order_status_label'] = ' --- Выберите статус --- '; +$_['entry_order_statuses_label'] = 'Статусы заказа'; +$_['entry_pending_order_status_label'] = 'Обрабатываемый'; +$_['entry_success_order_status_label'] = 'Успешный'; +$_['entry_error_order_status_label'] = 'Неуспешный'; + +$_['entry_geo_zone_label'] = 'Регион отображения'; +$_['entry_sort_order_label'] = 'Порядок сортировки'; + +// Help +$_['help_pending_order_status'] = 'Укажите статус заказа, который выставляется при его создании'; +$_['help_success_order_status'] = 'Укажите статус заказа, который выставляется при успешной оплате'; +$_['help_error_order_status'] = 'Укажите статус заказа, который выставляется при ошибке оплаты'; +$_['help_geo_zone'] = 'Географическая зона, в которой будет отображаться способ оплаты'; +$_['help_sort_order'] = 'Определяет порядок отображения платежного метода в списке методов оплаты при оформлении заказа. Чем меньше число, тем выше позиция в списке'; + +// Error +$_['error_permission'] = 'Недостаточно прав для изменения настроек способа оплаты PayAnyWay'; +$_['error_account'] = 'Номер счёта обязателен'; +$_['error_integrity_code'] = 'Код проверки целостности данных обязателен'; +$_['error_order_status'] = 'Выберите статус заказа'; diff --git a/upload/admin/view/image/payment/payanyway.png b/upload/admin/view/image/payment/payanyway.png new file mode 100755 index 0000000000000000000000000000000000000000..724d34b74ceb4b87a34d36a3c53d4686de215411 GIT binary patch literal 153838 zcmaI7by!qU*EW6-1(jA1q+3E70ci zkQ`xv`R(y}-{<%J^L<>GmpJ2`GiU9!?{(kzTKk>OBNdYCwAUdBB2iOS(uJU#Zz1T? z!>a_~m4;Cl5AfGzcLg>5tKi4~>Pzq@bnTU@kvoKkzm5BYCmUPy2E2G1ru-D9=VA@> zdf{dTd3ky9+c`V9TfTT@#qZ)~la7+6g&<}~P3eKYcg8l-A;rWhwQ3JrTPk_yk(#RR zlQN!9Uzru8S>EKtUVagLS>ci;eI|vpkVGCQv$=%Ch?@L2dC6;8Z~eMt1SS2nXGIX5 z6i8-fxbqw4k2Iv$-;R`^!ejB_u`t65o1oxS777K)jmif5@pDWla>Lg}K%i%{?ic2Z z!QEw3`G6@NyJq&(&pjN;V=f~^@a4iaj*8^Z&rw5aKi!Ybu;pv4=%b%M;#P{XeC>^^ zvA9V5-+tN|1qr^hbc&@N=BH;JDrrBo*5*utHLF;O_~o1MyO1zk{l9$@y#D0|{^D?X zDLgCokhdprBS~7nV$-mtrKOFC;s0^Z;MLAxiQiP3zH=*NJ==z>$4u(*!OFS0IyijT z>A!cA7vWt!V0!nAr$OfY@YHSn)_>pm-(SMP-Ge94Dm}kaPBxVSV-hyFlKYGmRq+1z zKR^TdPk$h}rqU-o&>8F{HxPvXedm9E3C{f%EMcCbc@AfcEmN$Nl8!{ZG^hXX{}OCm zlo01F-Ao1F?jBs9XE|`YCY}Q`fWv%V!GRJsx)9%Czsx>ZkZU8AOM=tsQua~WU#ZvbgrZ%-L9#*gE@GH?TI&ryE0^4Zfl8}(H{kal_ zV!HC^3Ph|^A{tm@SZkJimY>`PD>FXqaceq*4GV53T4j!EyP?ZC7|!>T>(i!^Bb-K` zWXmp8QY+MhD385qE^l$)oZ@UY(7jj@z&_u%n$p6|O1P|6%qSk;D=7xi=bQ55P%Ct9 zsz`+28Q50SK746${1VO{b9{X4d~NnR1kbnN_xiwU%*PG?Y&s&D%6P2gz*c+brbbr3 z!O=34uU|Gi;d0a!DCeDKny8&-P!RTO9ELKPv_X|Heak#~j@?d9ZRX|_1rmvj33a~m zFEAS&U{PaJ52cdlIU8oowzn{Q;UsifWXQ`9B=|H-?m&YOg+=yd6CuGvkoVTwm^9Bf zUc?1>Zb^&nLwKF8(kg0hnp(HspB=k3p^wwbuRzrnxqsBSn;zEu#GWXNXY28!FLG$s z%o560Rs^aH6Yg6e5gw+mpW#9Hf>yl=FX*!UP`VIr97)7HxHcp{YUp(k2sF#yfr^1rcm^d>u;=G$|F&sYR<- zqF<PYk(3)dM!Tn zLu=d1+PubdZ6BWI9Nker%xtwkn)g-%VHGWnvf=k_ZZc&#$!^}B;ZuY4w9dEXiNmNN zNWP+RR&3z8f4$m7?@Kph&-Rqf>zM9(r`(xf>zmzsTnEcuaL%!p4@Pfp^~yx3m;QPw z1KH{pjQmxU?wRG9z&u}>i7_ga>?=#1-~RJtwB=(ry@b=wbX`DQ$z^E!okZ3jMxR5H z_`>bYp{7GiBiQpMlMBU)>1rEKOTpPe)WP>vGuW&tn$!ySUHIy}zEp8Nsfs&%p;k{P z_bsQ9)~BPz z9tXe??0&lHS)v;Y-#;I(EV#B&4@u)eT8@j~U0v(a?o02l|IQ3=Z!sE?^~0Pv2Rb*+ zV#q>buS4?4KjU|_i(6Oq6!`Ax6&P-(-EGysEE3hkn z&Gh)h1BslEmGJp8_eGS3ze&BuYxir+9e68)@{|U@#OfV-1@KjA4g9)4u_29DQ>Uoe zcbW;AzUDNtfNF((GGcV^>1M%#YvCO&-^rU5TK!qGtpOMpamUF&{v^K$V{dd?>}jc& zwk3#KyiJ~V_0E`ze|NUv_{8BhBO#>v-jw*Yl;%h=%kx0RpnLbvQf;yp7$u;bg%hMm zm*F$m&%Tg_hpqd@@F3p!C|MU3Z1o*|CR`T$MHW$(P8Dm7G)?a@{E!`gr9%(O1+#yA zf2)l%c4QnGknSBz0EMs)uE{wSR*l&<&9624k^0DQR{ivq*V?fFnH9);!22)=-Mc$h zN&-PS23ay6`34`Ra&Tg+Jp;53KlddGbCJ^cs;KkHgq^u?wB*+F&In9+crmdM=tJ!} zkxPFYf5a#9Gqh4OEjj-*T5&t^3%NxAO**({q+2d>_#xc%9SN3Sxpb$%Q5*d-=ytGwIQ)jrp}j%4hn9$v36i4Iw}O$O7bZ) z;d>Bbg7q`i9*TG)25H$YhF){g6#i)m7p{9c#3xx}!jH|n<$zaL|NiSMshLIR2^&m3 z|EHU%#d9ABisfnbL{+~$NYZZdkIO&z+EX#3rA*epHSO9!GIbzN@EtF=sh9s;j}Y(#O{s z^W*%qzCZqi3VuxYBL)}dXPy2RABE3{$Q{xh9~ye0V-(6sAiL4&X-R|&<~WQK`@vIM z%Sqd*oIUWRi_7jV!9pzr`MtpHSKXdD=8Yl3g{9}Bqu(mshCJZ#2Y;oBhndO3XQo_C z5sP`~vjj!J4CRr=zkJT5kRMmz(M)e*Y;s zc7eizbaE9j@)N#Z(7m7Olk=CLVy^=K3tRDuYsgO`;&LBNP%RuV!ePzGu-PbhK#es~ znn49G`b>G?7rwnY6tduXOsE!=9xzm~T?>}EL}w#INTYHEPRiIGL$Z-00it-s7Pn2> z6vQ?^deB0ce=+<38di-wIlC{6)L*h9cpEzVOIQNAs3pQ3wPvI_V1i6CBvSay05G?v`Y4)yrfN9Ml zbI{?CN{q~(#yW?IW0L)~OOU6wJ`d$!;+f?9(YsW?cFEc8C6L6QzMh+WNn&9nZn%k6 z8~;ee@3U+A4+J&`4S!{Lo15vL`BZ-gyergsDz&L~WPJ2sYM23nw$)2?{$};rM4-H> zg4WCQi=;8zwF04}cxhkzCdS+1Mf1Y@I3tB4DvTRY;`dB$(%h(`Ax0aieLVgf(!X1t z#!nO29}{@b8>a&5mKg4|HI>??zAQp@b`$sfC&E9TB%NT(*-s+?*P0I-#0w@MPrQB- zVIukE7g73lIUq^9zkE&2tBFU<8#A3=P38UMiwNv&J$Svz9KZ=d?XlC|U3qMGm-<%3 zJjmse9=NtM^H5#4X*x4g6l+xOPV8G5XQ6{~9w(|7Sm^FxYkCIh5l6dI+qU?_t-(~vM;GM zU@+M+Hy_{ri*(51u{?LS+_V-0?dgL+zwf3_D_L1#xl+(rvPA}#x=EHCv2@STp+uj| zcXP_dPay&n7W?aA-(JL>O~CVp`Ko$9!%Umj7Kd-ki*R+GY|TD7z_z7sGa(SoLlsAe zcJtex0R*VCV?7HksHet^vl;S-0OHf=&bjtZMp{*hq7OK%2sbPnG!S;x1f4?6q{S}p zH05B*8k4ZAP!(VF(*0GnViqSkvk9a-ET`_ZjF=KG`QN4npn`WVc4ETUK^&mt=>wa< zjdpvGJgKr3xif;_awN>jDVO}$$jLIi0}7eSdC~pXry(fn4hZlX;>=eKLvm!n=@(?^ zX2wyK9dScg1*nd7;_v8C9uW#^EXnT);Qb@9;@@E{LSg zbA;GF)%90THy+VYHehNx6;NyN7B<)qe#glz&|iNJ&*=rIkBy= zg=nt2YKjN7mvP_P7uS%Kf_3xj-<)a&KTKB{F6B?+HZ4f4@t;SqT)ZcOV z1QbU*>d%2ey`%4H>Va0P&IsPUXSlp%j9j`FWX*WqHp~EDzSUA|!Y@aIz=vobe3Dq$ zQO|QxEnQ)u3xd6m=1K008Goe(*-C;ZPfIsYmlSQ^pXrA=RnEE};p+wkAL%Wf`V}!z zbM!ocYY`!9;#D}B|G4iqz5j=y19#ijLKWjRNBAfDhxw#@dh;Dko! zqbX$&#Ti9I=&C^U(&M;0ZJrxB!+gyaBL`CpY;%9c^t7F>BQHViynu=KBuMicYOE)j z)|#z0H^(d*5eUKn0?zk-<}!ILU_61uG`-rwZ?1X>GRj2HxBmv#@6EJ@Cs6*37)mWd0#*c>g^)Dd+yTj-IcZ&A9BIu4kE= z>&%vMC3Z0_j`s_2L=hwReN8rRi}`=8U0zXx`bOND8Q*$ZDj*2L3 zhFy*u7SS|^93OQzTPHQQ@el-f#+hjP%)4C*-quiG&kiF4+Jk>6d+NBbR7FEeQU=!7 zM?*=t9j+@I^f~=kD9Ssm)T%VX!$Sr$Gt2_%#HgQ~!Ne;P4hwTw3ahGk(V|_2;0olO z{(+U6W=|%yZb=Cr`Q;r85in+PN68 z^+E~|Ib9Ratd*-*!q+9i15N^On~oO=xyxedu7I>8SN?o#r{`Wvm2itugn zpiOQg@F$G|h{Ir~AL00(OWa@rNCs2dd@qhu1WnHLsxNYQb7!OXdhV&biyH;WAtseFbZ6XV>D%yVqftqW(1`zBhU!N!H$R2wSo=J^Z zkxSj)2DQ#533K?MC9lYnPg$@8 zW#_XgL=cBI%bKD#PM(2n0b(&tAFAei|6tU&TzvE> zvPS%sL^Iw0vVw+3flKIEUl^LM z%mtBx_$t${$vQh@0Xt}GK+F?FmduEE07+ySyOY>aH&QAn9u%rmY0JXn?P?0%EZCL;}}@x28^(Z&P6odFIaDqGfCFm+0) zeH_g?BY%cv6u+A6P`9FssKZdjiH)(Cq@D{NSa;SZv&t=$tb%~)#3kDsC;qMXEKlq5 z1Hjtema;MR@_M!_0>rPk(fbqR}pVv?KtHKya*Rd5O%_*S# zgEm$$i1~i&nxOSfl&m<65E6X@3In%Vt8L+X4l4!pb{I%nQaYi$3L|lgyIUEjhN$C; zVFpFVvSw3sw=AEX)Iw$9+5Bz5+tYB?;525SPQUP7u3z}1N4DRPcKV`D{JXGk-0#j* zK%#~>S$iHG&e9_A<#!UUH!(GDFAp>LEyQ^sWnAJC0LOb_d?O3(RjgMDZBTS znq(;vOWKXkgi+KHgYxd)sPg)e)%)*TnUsG9smdBg$Y3Q7-RM^~v`IMQZim7v=QH&( zqMvk9XeBwX#?*&CDt`UgI&kHpW?626nW->d)z{N!g**&>Q91-8_ zM1s^Ia;1+^Up6B`ewxrs4toUYNOdYKY!fh%-cgI_baggZzY578Y;MhXIDAIJ?lD$yu20;_Vx{tSF$(Owgx(hil%3fSNoG!y_h zvV3D74?|I4F`{L^I6bL&FQP+jgv&kKaNuDK+N-}2$8k>?tQe7c9}dbEC9)_b2_OQ+ z1orG?(Yrt(x{fvh16%x1@s4QthnW}r1GUqak*Ni1W+p*BpfQK76*F?euG0CRJRlQsCE!QESAu(BV0RUUBM+Z0(1C@l=4!}%t-vN!iKe*-@9#fXJ%LK*2gs~;h4 zlrVJz!4kZYq!##dPH1O!%b+a+SMF?ucNn^(O%T4DZ<4q$#rX$gjcCE+4}P0fSoMNy zF79@L>(O5=)cHw}P!7Qtgud>xKouE8N?(fr>@t*da=3gD#9eX^*8TgB;%P&hxAOY+ zoW~sdeG1~+ksO|>>_o`dg|YkS-t%>?kxljP5^+q6&9cG-fZx+4hey)YZSJd)KR#mE z!Avw0fnyj3|Be?z0juBg;Z`II84|A$*_kq&Vc*LJd<9tGFwd@MjK;W_&;?3ZdapBs z9>(FcRM7xDyy9Lh2RzM9;)~xVS$cmlZGavCcb1SYk7xAVyTqAz=IaUjCmU{=HxZUP z%8yOSmVs>yZ`yzlQ-t*K^MMwV4D8CVt$NdJGY3#{pEL>^68BGT=ZXwdjsyzmz*&0+ zD>=`#5391KR;AIvp@N@Xuo;&!h^!fwbz}*mec-~m>ERi;1T!E^pFu~uUL;w3dU_pT zV6(&a2)_(ax!TcVwY7}`lD2`b{5o6u^=37-so|K=)silSYxxFhU*BlYcFU~H-`6S8kS2`a{kF$qZ<}YrfL46DPMU9M7F3_= zyxcmXmimElR>JRRB#C>n=zxF=uqUSl{T9jx&VRBUk7&)FE278J?r4cK(`c2})p>;W z$k%{HMJj`}InuX$a z2Ol1EZwa+==GT3MlE}uU1NZ3TkF|q{KG?JMXyl?~p$->46IkE(N zA7&b=WOw*-{lK&A{FNzUe72FXx4Zh&iIag5QS^)T!~mF{T0;+;{jEx3v3B&`8~)HW zW~%3N%(4QoZb(y=Cov{0THe=6W)vpwW|rHjd60L}dPi)~NP2#)(&8$pzTC%W*$pi| zqua_253T2uVXxM+bTkLh%uE9%RW374oGW12Q?{ajncP2o8wy5>eS^Oo2P8S&`Hvu! z|D6TMign16Xk2Pj z%E~`J9fB|O!jDM++Z28t#ZStBXZ|YDt*IgH1i*UuaBBR%Pk1#x6mIe(CHNwV zKMo6UTLy_I`sT;>bu|)^n=Ej%TL`?3RdBuPx5!r(U2sBP1`&hP^V+VkXdqb?yMsKZ zQ!WN?Ym~;Ft5>Gx`YE_hC54|@U2PwB+weYE{t94TO4t4x5+9Px)N(mNM))efmv^*hz?xlu0gD^7O%mv>TPY z%|s{B647KN0H~^Bqsm##*i**zxcmiSmq&V>GaF2GIbbT865sNci|E$wBCJNsI|=`V z-mkl;!Ag9<2$qFbiAlA~dhQ!Mb9m!G-+2@7dC8q@tcF?zptTt-mKM3M+}5u{?NFmE z`P#u+1P-RS`qO>3Jk`dB89X-Sdy>2ovrbO-$Mx=qUWI}s8(;&jF7~@Ap6{FIIqlRz zoD#k7d88|lF^a508r!GC4EF?Q%ch7xnWdpGkU-x~jV3`p#t(YJML9<6)jC$zXE+?<80}Z_NmtYF+c{)IJo{@O4()I5YmACK6clE zu-tD0vxb5jFf0F^LJ?|ypW_b>Xd;ku5P|b(M%W!^#!Mfb5p^Jf(PQy%9pv(}|J5Bo zUY`wF&`EopQqltO0hl6CFw3{|P*W*ZA&i}0_h;iuW0ATC*(&(pk@`>>vc5)Zha3h2 zXX+yxxqh3bowX&+$6Itl7A2al>(S3%O%yFkte$WU|K@x|Pu=YJcs)ApRb2{38JC(H zE33&7&c#&XSbJPobC^M1CQa~#!lMxtP;@CqG4DGU(-mx(3;HFz&!{vntmEgOZKSxq z$8LWPQAC64{rUj&DC_Bl#F6!TxRi;n@p=}*qCV^e2lTv8HJML<%58on3?F)(x*X+i z(e(m!^r$2+aj!UT`cSd0)SEy3eEu`4mO69EjfepVvgh-wa%TQN3h%!+RP$_JcDaVs zi-DKA?nLPGQeAh~OuK=wB-ebu^tT09`|*XP;aK3;)6xMg7tGRr9*T7LEwpz?_IPCG zwj;B`r^?WW-_%E&w9=t*3^Q$;Xqda*;=i^ zpKh6ThDaD1B1T@yxesP!h}B4Bn7_@YtuC{UrMQZq>l!K3Hwp*bZ&mqR^ecCVqX4i~ zp;DWiFo4)s50qWRF1v&4iM$`FD=F)&)$)y9qIVPymzj%Bj0(4|Y!ZFvH zUGkd+Xl{XS*tF0Qy;mg>1YON-Sqino%uDT1b2h8pz_%eVSK7C*pJPkIHNlkvKc;Oz zk4jyQVUi1+2Ti79O`+_dHe8RX_|xMl)dSGogGRcgn>2Oxb^<&niX;+lO#b|8*+u_* z#0Mu^Q-j!}m(+5lViiy&P1F*X!&5O|?DJI07(@o$T^vdsz$hARSaUg!4Qvvns`Q_! zs{uVS&YKK8J@ba;*~5@Vou@)R`!63^T-MQB{kf(nPWkB0CvWa1?DY9c4FD5s(Yql!Zm^7~ z3AEUjiwnw%8lK$1R^-=m7_Ao)j8AxeGff24xf3}@gJ7X=d;6MPe(AQ5#dkd6baDjS z)d{=+wg{{i2)ewllG?tH+JLW?$@b39O0}uHE`9e$_H1f|Wo(8a5MRU$uVL?&r3vS> z_!;afv!6&>SMHCC%#(uwwP5R2^qG+ffSuJJj#2ESs9CMY`M6yrsI%Lj!ibZDHzY61 z->epOB1gw_-nzbf-SqX?3)LU(+m5MM zKnkY9g+f#VuNhQv$krdA&zp2v3IrR?sNt_FGi)~?jxulcWei9D4l{(jG^;X@y9t1F z>5HMPJm<-5=}E_VnN9tDoS#t4y_+IcgYfNoW1kS9FHA~8$7KU*x{Qce+&t~tfd>2D zE(N5>3Ro|$^U!UszMLHHERT>-R5%`^TdB7n%}|z`di8K-2B*$qJy(pJK7y&GFU;{u zF)118jef;3pim{Gn=v9@ynXp4t%(aKHDWYHwViKFRDg7O^(dN&9Y^*tWC!zicT#*G z;j{}a@(7*vYPn{xL{7vmF<(3sr55tJMR5!aK2&SU5hE!gd-&rMt|9Tv%}svZxVQVN zFT;?Bi3B8~t^X7kLSDC)lmYon>u?2l6*3aK_O1;>VJI3+>og#s8_yNIn3eNjNV4)= z;O|&@{QWU+AZeYkG>CZtXilB_+6SX2PDWdW9PmcYIT0NAcK2%%0VRg5udk0LWx!_+ z=#LlR3ZVNln3gc4eU0JuVRb^w?Co|;9+&T{rHoE-tSc&c#I1%Lf;_A`w!>;4TIJOV zo3Yx>56eW|74iR`G)&TN4l2_CzZ4s+oBVY0A729#WHQ1c(Fe()(SY0R-bUXfh_}n@ zakk&h@a*3Ai}_Ek*iIq4sR1FZ_yAv)?U|!P+<9VB(u}Gt1#LhUnh839c}AdA6Kgh^ z1Zs|;6}&<%3N_fRaOp@pfitd?;o4!StKAnWxQ0|NZ?Nw$!>dG8V?M4*4XzkTlkQ9K;N^a8*?D3&EPc`#T%OiZ zvTP?aeeLd<(aYliK=%Ab%==S>hzTEVrrb$ZQ$KKzT$szw1Qi#mw(0lq$kmYmts~GL z>B#5^4-ef6Wq-%$2uR)mi5JrlixQZhjjpfL3$OFi%-o$?2eOwNi4N zZlH!4zNVPw9x_xD?l{$# z{{~~gSdC9}IZ*Y6kqv#f9sTNMW=PMiWCX+d+YESR+<+W^jSo$43bFa{&*uoN^EqBj z1*QlX?HL-fr)zLM&ZAP#!POFsxJea_PS9H6&jT(^D{nXi~tqYR*f!YhbJORq6Q7gMnw_T%2>vpH7WnOHrEN zM4>JMKy(-ru7`=3N=n1Jbp*N1HvINFKo!3c2kcYTIMtfkvLv5!fG(G?3m+D8L%@S6 z1p>`C9-VqnHvU381tSfbe_D16&c=;T-lQn^TSMByKW|zua-x1OA;?N@ zavL$1+!hx-NKemGk^<5eVuI&0fq7=Ex!EW4KUtS)eOQHR4| z?{I7u(6rTL1TWW5_s){>ZNO>-Q=2P45H-1|_J&8}4W~$}@jvbrf17?b zYr-$i0wbi&?lU7s##-EYf(&ZH<;l>1?b2lj2=aV^>!Ujb7NV1ZqhWF}M}LWvagogw zbX6~V1pv0O^Y_Y9cg(yv>} zPdJXY?5_8EWK7Y+1c%wLXIU?-mb9SUC+c$P6ol;TfiVVJi{|FPj*jP8j8xX6b^3QA zhe@E|@c4V9ow;n6P82O>DT6fnGrQ4(}KoV6d6rtZz~uP zI;h`4X9#oPn%GDE6aD^r1(scWz|7#^L$8v%;z|>Xc}-h1(FxNB;D)w=P8zMor>D}x z%h^|fc>7orw+g(BC6V{KKBq1Wc0!|H`v0uI!(|4#sZ62(Z~;T_iw~U<&S|yl^HzcB zfRdr}Q-R&a9UqlP#187|V?{zzmv?El%#2WeoWKV#-f;_Y2`HCHRxyIhuXGcXus`SS zJ9WY_+KWmi!0WMXcK7u(>i&GN+`$+Re2bTjU3cqt$t$)tP7KxBaQlb5Nfe~ZYj=$c zewd=XN;2>daf&4B<5MnwRb2-VFIJ;b(oOnzdEg@DzcR`9!EeT_9ZL14BbvJ>9r z5n`llD*s5WeIPZ(hva4Uz;CGCj8FN`j?C0RgI{~PPTvVf^N6p-Kf0YYFsFC-mPW2I zBpRFVmJ1qdHe;bvHl&Oq;UsvIyj?l5&u-iNb1Ir$I<}R&|1I)ots+wq>!odFUign7 zK0E96EY7cr{`p=1tr*4kyqaJBW22yw96x=@cs}~CYO#Qt8QQ#em;1x5rd5)yt)RRX z%gwVVWvgyiDIn(YB+raji-8^I50VXfMfqXcB5vA8QcCaA#dmW!ChS0+ppeAJ(VCX| zptj%?)Yv;}s@Ko))JlgByI^=GHl;m@@(NWbpkzyM~{&OpqGU|T~-vh(>Y1%G* zxYUuZJCw67^nusprl(yc+l!-Ri)iqFR%0!#R`q$KY3)K7$8xHc;p)dTaPOaF(6EGe z66N%3INvUhjJp{|W>f-L6tR-Ls7&7E)27HSed>6+UR&%&Sh z^)y*PTU}swzRh=a3@3I%0m^J1F3({CS%4pL6VTSgNT(OL-DIuIktp@P^ICT}Kc3Ef zI7wfi`bf$!L*2{DAuwJCnk2)GA0DtgNP!`^pEUy-tdW&EQ}2R1gJJ(-H1+*_gOBDa zo*FN%c|IEI{WeD57F0==+M#gN)h<{GdsZJLZ<+r5!+~Kqj@5YieDB%wSj>!sdEuN1 z(CY!mVep~$IRq;C&TcL2=&;`2f~-kY97e`|0F%@3mETNuGy+>h^Md-HXX*t?6PPH% z-W|P}E2W@@W20bQ_s%OT)s2&6+4xcfo3U}-FUV29Kz$ZtKX@N)phK#Ucy7>}-k9l;mv zekTk>=Rc124dC5S$Pe-+#(*x*QY0uzbc0+?d^85{7?HqPzR%wPMoJ;#umPLTT63Z{ zdpu28C6o&haOqSn_-}8j! zT#>ZNjd6Qxr=YbD9Dzf(F*t+Hoa^s-?ZYF`uQ1R$H0~Kp`YwAactfkr!Ef~Z+hyjI zfc_mq*9<^ouLhqUED{O$n-ogGRIXYhlyt=ai0Rd(RhQfmHTY)in zmmz}xG<0!Fvtga3XDu9M=a~h#WJ&D5nxWv%VMb2Y1?Buyes`7)MqGu!*dtVRXFt^M z`jJgSv%sY6?EknEfhw0F(Qw>xk2&m|U740=e7?y#0%$|_KjyJaO^ z7aI%xyKmUO?0ER$Z=ohKSL)I`;l&d{$ecQFy=M3to{TOyg5tM+HHUH8tto^ZW4<2E zY*N&TGe&RQYFazJ%Xi9^N}E-6=PQ1A9%CS7ov}98HG2z^=lR!@9jrKh!sv4{TulK` zVb(z8J~b_5Z`arqP?R#%CI(q z4G3ho-V;y&1B6L^P5_M8KG2*j;=GA2tyzS5m$|v<7jS5X1?P!=tMvkX^?1P5z?7%A zHV<}9wS)r~q-MDH_uBl^C!$kYz$r#HA7*Xfcwe#c4#O^Qy_aUQQ6wtyeOv8jLdpF( zmdKi^D%DfV^=SEUzk7ZUaM^Q!8x|BfA<30`^X_m#A@@%>&eT5zhfXNq*}#{ej5p=u z2HI;Z#IcJ%E`bD;IF25UT)N?QlP_k^nJkhG45TJzXXag}{cxhNTKp81dQxe>_90uX zUVS8gSSB_MJeO2TWR+IQoO1Ph+9GT;K zhANfDaSe&dRS{$mq+org%>R88QUBs@{lF{3wE}8+p%D(oQeG zgjC5Ugpem^U&TVXDT#s6HT!kZ( zuSY?Aq0VSg%N0<*@w%^?yoz3-i7lZ>5eZf%TiLpfja~aIPQz zf>*X~F|7aTZROU7BYukL--*v9xjsB#hZKJNIK+kJ3z*Y;BO-1_E}2J4f2+G`R8b{o zPsvE^Xsjea({p8YA)Rp=w)(9J$A!IRwzS(y8*vVW%uiZ1-~)cm7H0hY@hcD<#-JvWj@B>62$;&W?1VE7{s#Vpyv|PM zsI}9^j8{b}U)*Pa{a;#@9*>%!tuSR898N??iXXD2218^FfCGww6DVIO1NdMn5*HIE z{(=6$vX?)93#2Z573{)J(+RcGP!zQJKrE6!K~xx~Vt%{oAx{zi~ZX1{5x)9mzMBk zX)`!_fMYmDr@>0FiZ3sj(sVxLFFQ|*vx*Hzb$8aX6fCE@`>V=7%$;r(F#N0DI_`av zF+nzjF|RiyJHvJ|0Je|N0I)-)L+D-;=&8Y}bVplv@AFuK zt{dpA2d2O^#=l_F{P@z(yZ^ZqI0LZ%EFL^XNB|fkq*62lYrM~wOZO-3Sm=PatmEND zA+G;|E9YO*a4yC8fPnPk{tEmUq`%=>4WI78oGP9UQ~!!t%+hQGa1F0^WDE>rJC9Jh zvY>lQK->3zM#YV-K`4X9=kPc1%?)Jb%A8Da;+5SF=TjVS1-+=~Pgb24fRTCfxdIJE zQU*o=v~hj4F^19dcTMym`FP9>T`x7U!niYeU={(IG_romgr=k&eHm{6WH&gfYRN-b zi3f$x{yVsUYlEVG2Ee1imwa8D-y{}deZ!O&92{kf#gDN0s13{xK|%1Lp_Hw3T*xrn zI9r$;Sgz#H>AP>P*iQ$90t;kw(^m)v21V*)X!dURJOsY-%?_Co6B@}&QQh~0zg(np zsv}B9d^QkS_)j^mH_RaD83Y7;g8 z6P%3gxSIMJiGwVK)$i+wSYR5>EzrRr-2K6Xv&@d*A7 z!)RN5%QGYIsXc6Vi&Rv6sqCn1AhM{m`9Xc*gVV7R11WVS4$eqA(I1PXkvZ1}m)|XZ z=t+5Z+sMilPyJO?P4sO`&LwtQn|;+AUM%6E%64O_w@4!25vfm<*#C0AoZGyWf$@1^ zopqNVriL~x+B|JNyxFt+aYSq4K6VQ`>%7Iv%F4rEqJ`h*x3eKtaPJ55>fCiEt13yM zHNLI4gNM$ROUC!!eRm5>TCNUNsHBs4^}8iq%*npanI$iTT5_;KsiW+1dx!EIwj-_`==h0qI zi*yn~G0?@M$jgb3g*si_j;N(6`+8uvTP>PBZctDpGFHg7@!a|3^Lq0hS7ys6R%Q$& z55LxM`H^+cA&j&32O>{j|H+f1?dJx+#3?t3a;hQ^AO8%6>U72~{Ur{52ASTKD*64n zIMgyAXlAHF@ollY_cgBqXwBG*GL78Lo-=;R7Wv@kPtm{&Jc#NS!`P$9fyEzV&tv+H z>@pRUlnP!9aWouV`!;Jr;eS)U9}zLFqKwT&vmFGQBOi=C&sxj8OY3}jUjBsZ_03TH zdgqzrLXWEyKfnHwb{WoYtsITed+lGs5`R(xUVZGxVd{11GMTX#Oq6O(bspXD%8PC@arsNTEdhr7PV?ck*fV=lQ%+oVr+{j1#8 z7RTC0=&qNQY@mHeGUoG?vL6)x=9wS5DDohrsM8i+xPaP~wn*8cZoCgF%*}n#2JTHU zrOFu}Ku)j=ty?246kW7zXkBV5nRzbXdwx_`TGNmCI9zOzl|3-nfXZ3_F&=YrEhqVz zmrnD}t(P}m|-TQE1jsKkmC=!{f+^f&H6B)I9m(EZ>5g1CRB|QDX}d!Hv_ZG%e*e!uC2Tj|>EZI<@?ALn z1B`95ca~R%$7SW-rqZV_3=d8yezRU4bZG7#FhjV*N{c+mC@83s3tfo@r)pdF#4nj% z%1QPhTPe84Q|niE?E6hJw7BKsuy)6LEBZ~*-_6GX7|wE$w{O>V;(FU%1E1;XjgBKi z!N02t2%POR4H}$FmcK1Q{?rA2%rcwN_^{5rQwr_7fu1xGcJJP<=O8b(tLNT}fB3=% z`<9&hJGZv@M!9FkpJh7_hdYBb&)NngyG?Q$p5CFMjfEjKD%jo@2l&s=mk)QBOO;=R zaRxVn%%|{ZEiEn0f?Dm6FO*s49UL8(hh8Z`HI*1DNX5vDvbc2L`z*VhjZ4zvQ6D9h z5dlh22@c`^{-M`&DkL|trjl)rR8&&xRL*W&uLUoW5xq>jlwFI;{lb+)*0m^12eGHV z8b=f_{SWZG*&l6inP*&CSy7}9_0Y*EXea-ZtMh4w<&(LpV#l#~x#HXPVUWGSwtsmf z^f5mvv8jXBRW*Y->pI1vX2MtvohBlGof}5iUtU%{lH@+i%GZ@nP*zg%nQ>R!oMeXG zdiPsl>sGIEaco4dg3Uv8w~OQFXqH};5%)H-D=xuuS4$g5hpcUky~rs7ZVVj|ybGtR zkjj(4Jn#Ic7HffgpaiRiS4!c%iKvj0OpA2S-^CbLNL}wl4#h}zUJEG*Ca!bN{Zgm! zC$o`0Ma1q8kzcvx+qcDn1(c6sNIC?le;^^!22`#zcYW!)*67wR8S_kC+b^Nb2Ehxz z7{m@6HZ+%*A&ys!p~c?x3y7kyH`EnUm_S`q-29%T#d^0?|J{CIKD5U!uui!d!2BR%f7U%thv)d zLW7bTPnbYH%HyU7^fmp#Tb3zD&t{M76b#SQCR&)@1bs$v+4@6DKKtE;q+7J{sd>Ug zZ}`E!Z-|Nx>5&PN^lHHYrg9%@uSA_9l_aqQ>aFnOa&dSf*o0w;jcvzUfots= zZ}a%r zh!XJ)(GeNx-nxq!dg?{~7{hMrMRggh{8RGZ_@6EfMk!_JiX3d8Gw9I`EgDwVNYe3yn~vTKZqWQC9Veusj|P4ti`dJ~5Y`}{2b3Vxo8J$<#4CqrHB-*}_N^=_;o`JYRit~`E+!q|+FRLcgp2E~$&c?{3s?7#Jhj`~^xWK7`l_9pdm5yAzb?Q` zOsn*#jL;l%_gp4_-0Rt_k9j4~@$4gAQ^zpZU&A@qMq`HQ5QB;xw!5R`cJZiiCZ_uD z`z+}te^z#k$E36JhVwAnU!Q2VYQVyNiy}vIY4T4n6Qn$tq$3E_v@a8Y&B!oTBsW~& zD=FdgETnWI?47I)-{NU1ZjneakoslcV_ro|hn#&}sPx-IBPCn^d?nbAt0v852SKM* z?YJAhO1}b|f@Fk+HEP$IdYg%Q5Fg0;{TG{^v}sTn-jy$03w{DMKbAICybKk4cErf2q#u}$myMno$skyk11X(d%Au~*&*S_zc?iU*VeXExOulNSo>WU4H!#3!#O9li1 ztPh`jL8%2EMxo9F=q>sf;Atgo?~FfBmr9cH9E^%pzEHh1tE!?YIIr;QBHv5Izek`& zeC_MLe-tr;x=ud|&vo(s{}ONUn{#6?eqK z;xJoGX7!cSZ(>ydJ^PQIzb0_2BKox0(6?u+vtxd#%e;SqKnHxQGRonbx?#1O1wtJ~6;BP4Ak2!Fo zc-7JzG;wcI*+`JstsbTJ4l_X><=30biMo|Dj}j3GBPUbasDqvvR(WBlk}7Mx7htVL z8(5zAdK15}Unt;E5Fy{Z%xQuSbb7%{5KwqeM&7FG{;%d2&03PP4gwyRVwab79>kzX zMsfN1E8eE+twkBkiU zN@hd52qq|+0K=}!CYYdQDGToLkHBb|I<+j7>R%z!e+<6IxKK2So?4afkFtg4<}+PZ zOxA0+XZW-WltrO4>zRUpyFBg4TY5O{Y-tB>$La{gSD5TJJz+bQP7#-lzwVTe_Sf@8 zQ`aaYzKfz7G!tx69~OUzz6!pwETizZ#IL{Ujn+tA-hs!X5%dC< zXC)9i9cv`~VT}tu=pgTzAndihnwxnL?jdzd1l?vDFb8khS!c*7B!6r8`)SC~YH-+Z zuEfMI1&`);YGb%{M;vIAjQoY=jawQC4+t-aB^_vaDQ>1yu^KwfYLzR(7JM#6c!eCI?QEc`Sy#bj0Wo+Y-A90 zoB44QeeWwq=*_O?wL&x>t~bzHm6ESlV#JAp{`+lXKY=Gyi#uj9V>WDRgLFsx>(-^e zPwSo4VoIDMs=qDkJmrK%Y0@K`XO$;%_k6T1);_SwJ*@)-1+g;%ZZ?_C?75bxc+N`N zx@Ur&sxTT^J-;t;&5aKMkL1RlT*>F?H?DZ{8lXW&IJEn3kaZ6Vq232RU^CEp9r4*n zS$p@ZGH2;bby(P{vuQYOU-R)m^#TWM(7fsm?Uh@{qg@c^$Jy{QMC_syR^(oZgSmOF zfCodV!W|78vq3s$_nb~`AO2s1js05+iL zlY1-j)@sVVgOL3Ta6eSX#r3>(=NG5R1pI>LUHY<{Vlkm@`vFhZY@=F`SA7H5r;6QJ z*P>;L_+w@q^MFElq?}k*b_}i)gW0-q`eN}+qR?s8lunkpi6268qM1mEuZ~vL0S5(k zw_X*MPy^<%X9nr~48K^+1OX7ILt@IggV%TDV&+}Kt;EhZp1TWZa?G2s(no(-2TPC? z)0Gcv5?KdWe64_~JrJ##i5`~ruuKSK{$PxUVO7?NFBwe(P1hhzjtf)&Y$sV z4LX^NC$GtY z#ela!!$#YF8d77rU2W?Fj};mkZ(8C!&ni<==RHyss6XUQ>ou&f6Tz-yU&a9B*U}7l z=EX!uZ1^aQuSjYKH7vTEI&*GNp39i2626USBH4Us!9@I~e=(v45;csja4zGi!3)P> z%8Nuxj{wCpcyd7_XV1sBTMN&K)uYw+S;OnI+OQe$2E=yT-XhQ^>~Y2jYW)Yl;Y_Fb z>(W!sK-TOm{x4Zmr@TR1y`F8@xmWS@BWW}vS_?dd*f|`OjG5Ea z8RsXuM$DasJ=uE?LAb|5K86T;m;&H4?T?pr_S|8r;Ez8}TV&%RpMHk@TFdvzs8zOg z|8&|kT;CPQmic??Bkzq|MTq?&9pMb~QLA%Wa0CAj_tDOnR7xQApc#MDCbZ=zvDE{4 zzZy(Q#heuw8#&45FlRcy&rU_Ce~o+Ek=L8SMry+qqfXr6u{Axl!5Bs4l_bqN(k1&s zHLM<@v42MTED=SklU%h&P8rmv$weqLT) zKW7z*G7bL1Iqbo0H7U8S+7Qf`KoYKjJ$k%APKSJqQ7>?Mf4V{sz$(4g$8*HAjJe6C0mdXkvl;n!Ll5}7=lZXF-{T^?CasyqQU_ug}u zWCeC@*#sgExYM1QbEL#q&4^nsLW+`nN$o0CacpMK6S=rX32<)}KSRDty*zt5;nEe@ zWTEepT7@Q#=kjG1>k?`%?5m&NL)I6VqTaGm2AlK;?45&Y&Gb0guHI_7u1(FN=ehyO4OR@Ey9l`TNL#?pxD!}F!U=!=avo96WHCIcbxK zNV*frRr{VwKn9Q8Sut{PKVBVMnCne~H!!f{fl@&ex$Z2BPDz{`=$D#uo;(q$9pkJv zp>D6s%No9J28daF?XeX+`-%1As>iUJOUmM4#gB6^Njm;n@M>DR{qE~w_iF*B?BBOr z(5OFN`}h%vq@@{S$SXBR?oo5b4~t59+=LIv41tA&p?+!m>GUdE+}!h`_sBQfV`t(q za0?5JO-%Nm%axG;EtSAct9eDHA@klbN1+<-;L)jf8;Q#WBDWy0h(yU|&P=JLJ2sfc zAwjnkyIjt^*WKD;hJ8bs0X-MqS~#sv-o?7Dg{Xst)TjgX2&~ib-m33F(pS;V%862R z0JHMLNkm|ls?ApWA2SJjS)K^o*ODl~%aIJRLqp8w_WF--K2N3?*5gqeRHlMshy+nytPX>qQyX_{%--+0R9_ zu=zxmzwQW7`!m0?mh3-175eRorvyN)X15ZJD%LHw@FXB+Ch{7GCI)FMZ(*-A^AJt? z$wmvq{b4|?vmG|WVitcrUOi(`PC(DQAcx-Nm(S~lr?$Jwu-G{^1M|ex^Wrkyhl)Ek zY$}M=^2Z}Z3Y3d-!)#A~IE6X_@#pdgSb; zymR!!>b}~n>UQb=BpnKlBOa_OP}Kj6lOul_B$FoWKUv$RQoaCNx(8;)vFMCW((Njr zLcp$(d8P-SN^JNrqQovS&=Mrxh@Ss!uXE|-`Cs@q28(?8jUv&3Wor^;*O*t3FJHbq z2J0ED|9=)V9~{dSd`K1WG!1eN{o(&QLlR}W_czD>=4*&y;3xV#Efn-6i`D|`zklwt zyN2^*ZA%q(W`AZfe_Z&tS>N}2q%vT~Eb4A4VLAi^ ztA_C(=L^@Txw3{m4qA;_F+6ZDgIG;J^~`ewJLOTCN^R5gh)@jKXSp!JzkqS>N0AP{ zvz@(t>zvvhZrZbksG?KaJHr<|YIZl;?Cb5>)DT9UZ@*0YNzGg#*l~v@hd*Wg$Fl7G z)w25r&r#=N;@<&db|!I{OwgFwg|y|=Dk;8q~|7*x4X%x)GT_NFl3u-RgkM`t7wZkR)TXWIf#f7BE+ zG^9ZmRY%R~Gm;49sm&zv1*7S*eOXqa9PYZ1(OdDP-+Z_$#4gVuT?11xva~+@ zoQ9 zqr65aE*e$#AMM%XDM1N*lHV-Bja6$B{rYA@i*Iz3r7FxJD!whhPOfsm&uBL+dco*w zOV5M#O30f!@rw9t5TsYOR>Iko=B1vPRrzGJ-*!^fwh;8&wJq>LRT-M5Rg9VbF84LE z2bNQTEO~35-nhXia6Xanq60*Z3}bxfvF^4TkqVId%SQZ{PWs2$F`=~AGMhBqO+5|# z8gGStI#y<mv3#(Y? zj=F0~Ca_no0oIIAmQ0eT=yflU(`rh*Gg4R)1+Ja?olH(Pc8*}j-Hz+;iPDPPAXI2tH@Ls!o8i~~>3?Z5$oJJn4dpf7`$0Yj8$y@_B{>98$(rCbc| zIyTx@214@TVIu2!8O!kHFwW{P@L(;I!j-+MN!kgXTQ zKsr;YD88>I#P@V3XR**7L;2Um31aF|k1(%^ zW)x5-;A;{yk9ZA@m;+fthhn5#+NrJR3UOi*@RNA=3HaNZ1h;~Y!Ft|2`E)dkf}SMu z!$#|@29TSZ==`FvxpQDnFf-lt#+5SU(AY5lC^WvbsP7`x0%nE1FWxi3kht@?=3d(#Keu-?}M?)=OU7z1Du-Y1tK^vzW48YfSDcf$b{>&j5qX=_Oi6jU2LZy z>AM6VP}nhTk&2#5+T4>-R3(|4b@_N)$0>ma+n?}%#-|F$i+N2wClZ%XFdTJB4qPve zEDzkWZkskiAkt_4G;l2}m0eqKY$6vUbB%q)^g z>41PEj|X|_UkQ7p08&}ipY#g`lZ6xvT*e;|IVAEzAepi=MDVL~xsn&`?jm47rO^d* zn0hkG1?fF%zb;m>#z_eK$Du`AQd_~crrm%hiQYLp+fG_rnC5PX0j zLDaKZ9XvVqci-`*_j_M|E*Uc>6T>dl%+#Hi%V>445DWX56KWE zyYiu%Q<#>p`8*zDkP(e1rDipCnp7c%NqVV6auPxES48_dL=g#>o+Imc}O-@I|))4YmnTCL0Ib>C*3i5VL=oYdXWs|!h0B&c=JH`cuYtWUeu%=svsX%MdfGH4&HwEJm?zRQ z<=aY{g-CcYoNNc=(%-#RhwVaIR6coB2FfP=3*J+leJ)ujjXnnX_`Px)g19DkKW<^h znUW>9GuSOm%+(x9N}jqU7@U3k<;=?@oUy0k?)J7~DVl(6hnXEF;{KiGSl} z0G=AFl>62#m`dD|dd32l4;cYeFsBz(W}6x0fnow65~!idYE!in%1AGT2qS&FUvB2O zg4^g;6Z~f};AuFb>LOoNoee`65m^5Tb7dYHBN8>QFfH-o zqx#=Tzq|Ib%EIIifw5dfww_l?t{(@wU5kut4o5oy1@?F5Hq9U(7pqe;7UR+x*W9xO zw5zb$^O4k~UO?bBZor~ksTbBeQoiJTWj*SWE>v6U1u5A}5Da*}p)Jrm9_?pM;*ON) zd9SEpq~$q*bVb6GMMqt4abt0s{Pe%iFV%yL?Rt*P=H!#7v41kQS|^FKH^*zF|AJ}5&O=PRBCoxE zlW1Yvb}&nK_$o&zkt>4jo%3{qf^g^DKGDHzl(vuoC;sys5zFPvPtB@m<0EacK36#n z!AE{Q4#G+$e{-vjpu9a$O|pmsF_>Nn^svG@Q|miJTFc~z9H7Cf`BqGq>a~7?u`wrgVVCF)3GEk_LcL0QhNPLIpn0CY%f2o(Fnp#T$gzmt=#~aBq*~fvL7wWz| zno(wDdd=7K@-pq0PwM(ss*Lxz(BXuRADzDR9{sWAQ~4?$-SzJIsW=U@RYa#j0_+=F z2lOo-WTVL0%t0>UiQNKJMMQX3e|q{hWS_0Z?o3dDuyIX-%S&<9URDC!qVM-_j!d3c z3B=Q$qxApWbKS~e5;V46cdV4tbqeF7UT3|D?tT#XBvoYxxf6P|jWkH?U(vOb`NmLD zjZ|ss;hziN2`xYV@hP$fd!!4y3Z6t_0p+K=TCFANOeY6&&N)0QoIntGiKlj0@duC2 zQ2ORFG^vYu0?!JWhXXbd;g83|Y4)gghUQJhCIAOkit9xXoNJ-w^^I!mN)kOk{` zy-HSG`jtf!)cb+$-SK&heROhiObZuxV-@Sa-HK@FJua<@1!~$O`qKoX3v0JQqeSAz zPN;zcSGT-=;@q=+1PC;sE|o$pw;L55+sDqS|FDD=0}*G%3N!hf{bc*oZi{`k6xEd~ zz&TbPK9_oNalE`{{W1CqLE9|WfjPr)??Zb8Yq*FW-~cwtXAdXuwf242`IEpQg(kOY zBbx!$)d498_t8U8u$qov0U(RX%0BjgyHrd9A~@BX^!0RT02Tg>vh&MIpYgX}7*q5x zWz1-pEUC$&E$N;)CWq{1*)I=di4=rjFa^unxp5@BHvD8Nhsjtt1&AAYjZX-oOF{Lj z=jEsW4+t0Q+3seb`pu#o4^|mc#>WXhd2kL-i@k3$UnBkgei2F|Vr-~C;r(Q(O`9(O z@pRk&6y03t6vl41UQd~rFJ+{$qeFJ|yp9V*iE<{uQX}R>k|(rkp_&7n)c<3A&E#jB$;;Y z8ZkM0<=WCi;qI7*b?1t;j1bRhaD}UnSD#XGN)s*Ffr0INM=e##|2sT@T?3)MxONoN zCfnNz6N5G!@YOhaLZx*tpZ$7@zqn!w8j4CnJ0Ag73{vcFTd=SMIzxFEx78{d?Q*|GxK?MylTCInoIch(9qE2T+|bS-jUjDqrCfJ>EEUt zCsjO3{@_Nh85ZX3`Jzb5cmn)bhWq=39w(>(vvU69mr40yIFK z%aHXpw}U{ByM5%G9-f*oqgpcco8sM66-0J8k?ZZ9FCICYQo!00b^`IBs%OtR`~62$ z?(Uf&5}LamswZ<;`!{Sy)~WBR<#R4{c}@JW0PtPg?4%A51A)uZWd& z${+OjDEdmM30M}z2{$zl3^3Nazm16R@#oRKO>$2n`~LSHDKikip-BDjeJxc%tD~(R z0!ey~z+doZTu*fKD{1q#AD~c!NEJ-d*;BbFPkHwZKy13^NnquK0T?OWvfPK$P1sE$ zI~m&(Ogs+1CWu;4n^w_Qw55kVO(4KQrKeS+_TbJkg8lZbE<#|5W1~tIpXbegYBD3f z3t8f#M(t{wW#4z$yPUr}v8getpC0cQe{b|$w*VoCC^77NO1CW;Avv_bKe%vq>)^19 z#{u)g5Q1BQdyF%!oBgVi-%SsS5`vFIW~PSA%4*7Q-D%avUo=jG*LbeCoEAVpF2@g68s`Rjfk=a-d zTw`owoQ{zaS-U<6EgH4#%W^G%79s?#BnB#J0vA9KlAxx==`LVxt9`WrUvEY&(ZhHO zECih$h25M_ln>=E?LLf!D1k=rf2OA}+U?Kulpq&KOg}82HVgN=e3JPb#{d}x^v~1D zW^#u`vk^>&u^j={pa~=V7j$Q6@8*M@!_f4t;)BkIHBN`({I;J8n^tD~3>lIvO;+G< z)aD2RKMm!3+InaH=eEQJI;QxXbI$Aaz7r?e_h#w{f$C1Yi@F#lupi*jjfiTYTX6o} z;QzbbwK~`>Wzm}%TpArR*A=l4uCcqC44ipx?lLJ{t@3c@?mloM^P)$L=s!qRQY)W@uCvsxx%=hul!T54M~ zue^{O0BIi1Uy9I?n@{cug55w{`3YLqfwz=EL+edwi7ZFpDj zlS=}M2Q8%;vRb6 zVJvTQt;RXPTMn0u;JW2o~#4}?3epN3e*j_2BI=ABn1GnH1IdhYJ292@j&S_Gh#EKw#4Vn$+GFuKhk>#J{r%H>KHE$-P-XxNu8 zP~NlkUzRKh%m?($0vNrhdh_g1B7qMkK_dR>gJbpGcSQCP`2l}dqw*)1oc(`OU#j?t zMt#lv6ePo~b|Xzro5|DEGmi4_+I9qh6uJly_l*D{fg<-;R&V@u{89<@8;`EPZJTzh zbtqxv4k-lNYF%x|+G5^EyKy0}9pujfYoRI}vP1`pJP z@kk9%eMFm?mg@B6BpXFa7f((7d6c2~8&!am9k}>bfZvRE&sTc12%A@7UKGd=3PRi? zdTeD6pt@7v?}NRSm`R$rc{nIAWPF0sFKn2k_fg4>9*c1OS%^>dbM8}Xc|0`b@;pfT z3Sj{#v?1pHQg$u{?C+tW%&Gr$;0QbvgB#?F?TDo%ZTu@Q;KF-ofNb@fbHi>F9Ty89 zFoQ3NR^`~b_A(K4P5mz)P1IP;d|o6txD0E9KGgQg1)bN|(!9sv&oDTJo!0Fra<}e6 zwB8(e$fUz=|5WCaS22_J1nGs<{SL@uJ8(bIf1c5{D{g`ZNbK!osqmzj1H;t zxIt#fI`z9F`VSe;Qw=b^ec|h`2KjhUD-h;>y)!YbBAa6N#?}}fD?0+hE=a*ps^aEe z>_MX*ptcx5?fWITv#$eO-3Ef-MtiI>$Ji~9xpYZu6wZQF)0Y2Vhqi$vV+>q$!tEuh zfv^H!{b%b2ebZX}6QQsiGf>C;pPDtq)6~3nB?ac<^@$l)~3V)xff4R z*G6ps?tpDD4En3bt!&;bP4|XHcNz&nkNd{;CxI>SXG;SPcLJLqMct+Nry0U@s3(t^ z=51jQ>;cV@rTHao8=9^P;%n+27tm0Zm4iSkEV#o??RG(x)3Tst51-`E<56btoiL(nJqSov`wP zuelFYwhs<_q^*6<(b#}n-kIiU0#asYy*wGnn(Yr*AP?L72fZQL;ZN5#OPQ1wtFy;) z{|?y3shxCG90hrKH~%nirniq!Jq#=BQ}JjHC}69wMywS)jG50FDf9*Zyo2PuVEv5VU*Kj?nxp7(aVb;>8in#x zV-StEL|LwSTUi6zgEe@HXbfnBReuIGIpMV*GOT@Mb5Ykw0DHfFmFoTgC^JxpZe@xD zGO?7oUCc-%@B$J0mVsD)EMcyrJBZaBh8U$CF}N9=Dma^>LvHR~9I+%1t~p zd-jI+?Scxm1fCMBmUlR36o|TCp_>p33l-XBr77!UA`3jzr>$~Qx-vq-2Y$1cHxKxDqvji z(KEc-H=Q~nS|zQhhOiH6Q9$mAgkH-oSj+PP`;{B^(BJ86UR0JgY@SFxr9P^gtPRG|4tfoh8;3S>P{s*1 z3`KwI1_KN}_FV-Eo*z5981PBpR^9qSXkV6cIA}4D;>1@V;0N=bT6$=^?H`cPJj5^qYSeBpbCX!IWGlwI94Pp~Qq|_&VJZ)O zUYCO;Nl*~(A5Ak+=mrpu!A0x7x7hwNSX+@8u`&v?DqYL0BS(wO$@<&O9>wJS)4RgX zl|F32lpdRZbf%AygQ(XS#ZuhcumIq`Ms1a%#w(?{4kCcnhy2Pa<8n8G+K*P<759M#i7#O(54gwF=nIBe;7E1it?=_y5QgdVfM8{;1me)JE0W%4)u!wmV{f+Vx zTd~E}%E2$Qurm#9BNxzIRHd7EGKu_wPm-^Z(LSqr>0x-%>#&mZXH~c;h-R1G301>+IbLkY>hnq)qJ*t~BXmg16vk-TgcXdU9$lht$ zE>V=GAVlyJZygod-2S30_R(UuIJmpW^xeQ-BAlfjq*hcZ6@sBy7J!FCmZ#G=_daKy;p|N z0H~vI13=!xZBBeNa!o~PTy^KKW(A;S$3=*m>FFJe&E8W z(*)NZwLd5Z2?=)Y=RZC-+38DWk@rU_HID{zZUfYdEc(A(ysQEjpvm;kkDYM@h5_QE zVTT!(qxaroKN3Yjr`|Rx{_+?8!!oO20|n;;AOI|w;IlvQq)Ny6C~~G(wx9ejH$4RU zF?k^Amoh99a7wm11h;D)(WwGpcCEq6MNaLuXW&>G24}>p;Hk(6($*KOn5u=S0Q4s!0;*TqXeT$sWWeVD8Iox=rrBnUkv_(M!&uIuhi$^<%p|H0E%c9ZhD|N-xyr= zTId=ULKsiT^1vCX@K-L)E@Fa`Ac>;;}P+TeE%Tlj$^I z&|v3UgQ^MnP2cR5*Lg)^w!VN<80wxQujIRf#8j85gBU|t(Z};O8#y;y(kFpKfC$Bd zKuu_TWNh`a^3RZ}Pa326%PSw2TZR=J*;HEvVl-2hm9_UiJqofMi|&wz&StH~dQ7%) zR(}UQ2@BBUg()7?L<56TAB93yRr9RFmTW++;y*{ZfEOF_nF*~3&YY5I{HJUI4^i}N zMsxB%&$wvwk4cg#`ZhK#9yzNSqk9->*K@Zf!0GovTOhgJD3;|7p1Au+elewV8)}B}yDfziM?6y~f42vnP zmF2Ir^5Tl)b(k6C7`%pkG)C=#W1EUSt}-jY4f<&Y>j4xTxdbK#VlaSk!eR36(!-wj zKjl^d|K#M~0^M;LRT{AF-*B-7Uj22Dttr3Ykir77@Wqaz?&n2P}X^7uGfL zoBuOOLn=BrIOJb%A0oPVchcYmqgO|d?Qag>eRd9G|HZ(QQ`u`b5&HDBlG1Uv>o^@n z@5dAWxL-jSnIZaX!K8H6$#vYRMypj=0&R@rL)V)=sVX%6DEdT%Jb3sV^S$8Pg9-V# zhk3UA*T{KQXkUMoO`qnd{kS@I?$T?&pI__J1C86i&hOr8`6|13d}z5f^_v&l$VX58 zTRG!5@b?`#9~#S?8sve2E`&&3UfP`|ukvwXZE6fwEA`h7+NIyfN%$>!mV-J+x1f|- zhkfVz`%L_thvJ_IuY80xCMj3xx;;25hb)c!E9mxP6BLt1Ldn)Onx>HE0%`ZolHBRasLW5y zRG~#-8D8s#a36KaByV6jV#fF{Qz($MYT~I`w#IG!Pn9=VL2WF284%RbQXY+|XPoyZ z@Baw0_4k2}8YyBB!fg?qm+{mNJgtkd%R9F~HxM4HD2@C4IPauv%QB)^Xd~YX&Lgvf z6nn{qW$1r-r?V82$c)E%ucRP`YHoA|gtR9`7zFXQQ-L zwmhCl#tKb^!!dfwS1vryPxdELPC}ilFw-qlR2YB-yDmZ|)qOx^ijPYry^UGWU16Zc@c8uf7bb?@So++|hX|-rd>{14nq_N{ z1>EDo!!;kDhw5e$wBd7IuwX!6c$)b&>K+Y{DxJ#V8HL6AT$a3HM1>#)P1DI4Fai4) zIga42FJ?pqID$jBj3y)51M*k&Ky?f|yP=B?0LCx|o)+-Lnt$6Dm`;AQRN+-b=D_N9 z+;b>X^e33I_^fPXw3Bpe@2iiUyZWvOj1YXNh&T7llF_BQO*>G9?Yvbx|JL2I=a@8u z0lG2l88oCR{brH}voBCOit}h0?sN=-TMbd43yU+aV$5KEy}PV3vnPmc6uwL?N+8iv z8{+0hte4>o`a%!cRBcr<`#mOudz2TPVD^A4I5FawIj2tNr)c=t7rzOCm)Wv5hy@hk zWp8j-kJW~{{S^8EewSA|eNW%75p^C}`uwjfh1nWk0uNA=h%K`wY;FLE-3Htz+=h#C ziV|*aJkP@?5_Ad=&yjtmJFRhEy(rthIkA9tp@<2rP<3(EkLpR1Jh&tVIw*vjx;(*? zT|4I}CkXzWuGTEQrS6<=R*%X?Q8MLfzS~MiEZ7gTJzy<{CrwyCPE|oTGEjsE@HDj! zv+)zlz0UK92d)t^h!W8?G^!?ChFtj|HoOCCD$QsNoE> z0TH*&9g1t)`Lv7*jd9X8v$yawKdVCyu1{jWfvQ@NIr0*>4^I0U&5@;q}ad;1VLjVEr5SVJhHaEAv;D3s54UV?Xx-^Ug9zXlH z3s7lB!fafSbSk1o$Ma8Qmq3VeKvkyY-|+)J-hB zB_`WQxSTS21UkDcU|sISiLG?!d|trvRghGJJ0^4Z5&{t_NS~KtTF^2JQ)WBO0jBSi zONvDygPcgy0#iO z)@&KF1ZwQ=>|ua^Ad_OvM=)^_Hzx6>WmYc*(Zcn|1iofwZEbT$Wsn`4+53ufhM;k; zO4KaU{v3WXO+-drX9E`W>dfxun|YEo#wGjaWY&Oe^hqLI z^8K7i)wccxBwe4^#3R4v!vgX((q7PIcB{O_RAo|-+SQ_f@P1cTR`$3zMu`w`V%62T zLVf?*X}ydgVB=A0^U~L74vs&XR1x@riQJAb60U&ky%Vm>l)C7<@qbK&Zk=p{;{v&M zYk=BIgFN4I{dEzIq<_wS{)J90;u&yauk%g@S)h}3y64xf}?XN`P1(WIzOSF>L9<~71purCK3?cN%7(bEG2Ft2D`Ddz1uKS zbI=@+kJrgodX%aXN5dV{-n5_2Fgwb^VYsOnueBNoMtS>NetwV5opwg132L#yJyC+R zeR*f|j^4JkO3)m3T(j9s2i4Yf$wC>7@I=DrI&j$`FMKQh`mn#{0f||>`Q!~kj^9j}dEL^;&??LRA7Wie>&L}q7Eq-D; z`~@D7*xh9oV2a=zxnp`4)uAqXtNB;BeVIAy*744GBCK_MzQ#VV_>gV=Y*{u%xt?45 zmFt`PdpG9*PIKfJ6rAYy#w@~iN}Plw8g+(ql|VN>?iQF8=amypJ@tKiZ4--fQ|s+} z(jMUHv3{AG)dL5?+oStr_l!U~-@RhwYH>IwOGEySykVN2DKTVzZD}48pq3#GjbO&; z-yr<^$&R0M1}7x?$Tl+!n|=7q($C0YJ|1RxW{U$n=+x@BpWA2A zRp()ew1*=f^WCa6x92VmRj}r0|KQ1wemizgn%wp(IvRk=U+6fpdemP-!(@mi-;=mR z?#$kA+|}c?EzdHBc3qs{sZ)lhn`ck_5dEC1XLpE96glTxsJ{R z*`Af=a4s3aNrM(+1frW^*NSw;w5qqma5Lu0woLGF_P$pG>OC%H;(6 z2DiPMR$CsWf^2yqXYxlm)8s;4Wi%mu4P- zMukIis`7gbu-)F!>0nxYQfB~x{C3SNvNZFn%L z9Ota{p2Js4!pr6cnuXvUVD5lN}I`q^yFHi>} zGxyEFJ9B)lnWZbzC=Ua>mxB#r6Ysm}35r0gE5)1AyX3R`1C;N96sX2+aRGl9bxx5e z-kCrK=pMH$<$BoW8pnQs;AS;=4FV$2kn=KiBcUKig1Al(KYkz)6kd_DfbRUwsBzz- zY9qD#mv_1VWX3gukwHv;+w9NFg}ws72BU(qtzVa?)0OhU`<3f3JBV6Ma9 zALc{ssN9I?%0l}xqk9PDzt7v?C((LIsO4cLaMUvuXUcosn#sKoD1MsC2TCVxL}V+4 zpw0bRojb-*y}lmi0~wM_GzPm#9pL&A0n8NPQj`*%Q1Ks7Y8Xs$TT@+}K4OP%cMm2A zQun7>QMnxBi5(|X(0y5URvNnD%PXUeun*by_t#0=l}|N?d(2ZqluuWC)tFf}t(?`M zE~M+6@_X_`sT~y^=eZ#&l=@? zXc+u2+I`mW9}+eg#F!{Bu&fIhfzd@7&hAD=FN!(K*IL#!9D zzn#&6#^nVTHJwR%>)__M`2^nJG8 zq616G)P`wzh#&_-HPaWdVGQ=T^U;8<|4&kAkLN_ZKdK?0pb%U?K1w7!8c^;%d}~?8 z<;bRn5cn&d#rLnup;VrHYXVyEN)^iv27(wNgWYzKVZPAzQff}@gq>tk7W?X)^zQ&##hlmR@Dg>nhz_>9P;i*#DMA3}x0)iLw{9$}&ouzM4!~NkldBe&SFq_B zUTop@65Q%jM`vr6SJ$JgO9-R(&x5_5NQkG~I09ruE*{Xl6E&j;X43j(3^haWAi(h` zBw+bUVDNxGp^+h(v%kO3ZbAgN8y`9muu=hPG-!x_^zGQYS2a<7&m##%i@f?ik4^D{ zp#M$8-&>e7W8gljUi_zv%+`Bw-_+1&yDdi3NRT$=xz2 z2*UX3rWR*;^}PKhvOc=41pdvI%Js{uLc!p8zP?6u;L5vDRigk2eIa%x3Kr4cAfz&R5cy_nLh*b1gx0Is1} z!9?GxIXXH@MSlS=<%tXtCm=Vsr@cgv{8|~65rt*`qMF$UeUjeV$GnRB-%=I~=28nI zePPwZx^c1Y3PY%u^UU%AF28~a0Bzq{^iZw)aPQ<(9$!>BOOx#eJl?vVn>$Nn_$!;m zS=T`__%j}J*!cJn*hS#%u;~{6VxYEuat8!+d&EaQefmr8&=y97KJgj)DNviheo3%N zSDzIuh?KbJ?bs)WA3rAW{^deJhZKOI+vVo{gA0P}q#Ino zTr1(mdN%I#YpWlQrY{jqvDA(a!9(DPrgL!UH2F!!yQ4mV)SouY6fO+tsz30p?vZ8@ zHEqw3#Sa8O$6;fl4*@SNV8*I5nlm?(j3 zvAerBz>Q@Sym&7Bsh~tV{GC2-=>Uj;VZa+zuP|QD3f3r)!x0HN#4dYOph#oV>)aQL0c7Pcp?di$O{xP-J$h=QR@Yn6lG({B)>jDPqwtLGrom2gSI88TBIatW$%Ge z;)=Uzw2O}G4w(~~3A0i1B}}{K_@!4@93*W_W$W_W9ciLgPsIZ5kJtn44OAjSTa=8J z8o{~4QSqR=(_qotfWhD~=d-_d$Bf?P3qzgjh|cpr2Qe=wJt zUdeab(}iV&^R+vb0EP7+6sCRt%n8}b4ZgBzzG;e9F7(>2!C1Xr#uB0?6@G8-9;^L&pYis9Hbm2}N<-{8mYg0qlofLuk zM!n9V*kq@gzi`FV*b`zrzi!^D3tD*mbL#V~3*zjj>S1b0H3knD7dbd}!|bD%*x!E) zy>}?l>xb;| zbLcBX0PKyk^1G>}Qje}uhi9o)I{!YC<~)Gjszf&-Np5MS_e0w3R%66IwE}Y%dv@~- zGX%ybh{@q3!TwnnLRK*${FVYJW%~6NTQ^FQ$9{&WY}DqAjkCxN3+RAg9K0uMpQhLiFmsNc%-vXQKWGkc+2a9`{Rp<^^O~ zyGel-V2U>Uh)M>(H-*v&azX661J0b<9V0tTG5F{Uf;;9p1Voy*+bo2KznV?0crOxF z)1d7q5wgq0+^?iwSeF#J{`y1%ga?!GAG7o%xMOUkPB>Udu)lDHWCn%NyJCH9Ka!oM z6?9X<=oPrU>JNSr-TvxPpd|(X@o%*ano<|9GGOS?A+IJOE9@p`*T}lb;}|KBPb}M zz#%0>0STp~6+{K;?vh3jB}5veQ@Z0tq?AxXx+RWu_npoA{l4$s>z}9`*!y{A)~vN= zhS8Hy$4u1X&%3gkb$iztT4;@H4c9NpLR{3HAr!KbH zej>M^jQ^aDz3BSShHcD$!J4~zhxy9Z>UEeg(W`j5<$4XScbca={4Z;J>16r#SnlQb zZy!5W_-9H;vnA_G-0T5(DkhuWRYLuNL!+?h}GSC$0&HOh~cuwOTxxXA|bow79CXBqrKy zANrM5UIf393cIj|o1g)|W|*fuf1oQnHHj_-#b3#A_Z8|M-u^T`aj;LawmW>ekIoNr zf>QC5Pu?K;(OQESxE@kOD4;B_W|@cSF7ba1`hOMk#e7#mKJ{0ghVN(+6(Qie(S6Tn zpUw{M`oRY#cYjqo(!pQGxAg{%O#$cV74y97L!QBRp!Wj$;JV*)|0NCeVM`H1z|>-u zt+Nk+=0|&@cS|t5et{w+!3ss#&DTq;u9W|5gVEJR3yP z9Za9f_jjvxd6ef}(c-~-;kcA2m|SCPPtWK;2vNMW=a_iS{M__hOJAQZJ=vUTS3pV? zfW-&&WU{J`{1g>5G8lTYhPwlOOiflMC~9nf$73I|bWOxh%SgFty8LJx8P&v^^6a+Z z{GYjW4Kv#825FQ9@ZySc$sZpr;yds@Jex?bAr|&vGb5@$^pe$n=wuh^j61?#*5+_+ zkPCDO-O4G?pRp9=GPYaTydZJDpFv%^Ry&U_08NOq!h^+!DNL!!-5Gf>DQNvkx0Si% z7czgmq9+>l&w=~llujUYEIqkA5z8riKQX3uU zbVCNU4(Wrk!?k$^OD3%K0WcNEhc=&--7j`;X~R8EEM;UIkcZvQ7DOC=e|{W!AOS&< zM7G9TQGMnEMWm|F#VRO%MpFl%3#T@RCcCaZI6HlwmCIQ^fuTQxC|Bs`8l zl0wWx<7dfa?(T*nZQ)%TDvnUvWvqx8bt3NARp*7xHcWk^0J8M=A(2y`zp{8k{2qsx7}z= z|0q0C;`KjmX5_@3$LE}=836`LNBrVkKW<8W(yI|~`B**M^Q`c}X>h$}bOU(IudX4L zWc4HFngDs#q+YXl;-ucHCU2C#e0!DaO8v>OO`HYp%bN;Csq^kN@?g~hVn0G3KQr*2 zi^dZ~N1!Qwa`AY7{yR(T^yOZg(|DtM?VTBD2pZSN??4vLoX>SM@6M7h3k#4}*TYl( z+QD`B&@-O3^ZBowa)mgIEnVVW_I;{0g+G)is24w4AtFIQ<`VsVO7ikvQp3qrHF)IG zd-J&dO@) zEq*@Vw4&M4t=~evBu&5-DOXF{On-VGP7FpRdc(EkaRuog8f2Rm>#Gaz{QwQo^{~6ETJ|+WKfUf`y7csw{K$#Zii?qf5lS^JRWJpPJi)( zdy<`Wp&<>B7ac)=&a{p)h(Ck18ZBX(JHQ1ytq3Q&Lgo!3+#4IKb)h>ssDGT*D@Jtu ztElZg+W70UFFZ*386iu}z8aS(o7$5AiZqPbGXKM_y#pK~-vdz{GEcxk52!y*V7#KE zUo%mLSzK1h?J`uRRPlv-l4uD?lbaPo-h4p+e!P#=^6}%oD0zryL*UMc$WWDrVDnVA zAV6K6tSldrz@Ucy$wyqoF0htFZ~g$7FdPEoC$b+^a{nc$00DiKOs4cy*9JpDk1!6i za<5dRmHRb%#up6mT#Qz~RT*rhexSZ|wILXOX(}9BZ|;3-r22oTFi|`pjpDzV99-?T zd7WoO167IR361r`#H-%fXUWwq=((ehp+#JDa|aTf3XXjGFLB@Xr#&CiFZE<}(NcoQ z5K0l;>@0C}5S|!%*$talei@b2ykUZ(zol68^GAmhIJI?0>((0-d_S zc2u*U!-$qGYRnrS`{%#)_>S>wl{0yL*z32pF^$vZ^f0L=0IR)T!`b;9u2^W^Zr_qe zNj^)8;>7a|+n4?GcROqD7=4#579u-iPEf*RG?_W zBf#kO99Q4p#Cg=)WUK!mjSq`5(04mhM-7L#d`J6pQQ2j_Uwo?_mn~0-Q}I8R*~V(7 z^!2mND{5l;vd!Gu!p^zDsk~VRl%Bs3xJ*dE_ah6t9r&Jwu1u??I}l{#lz;xcjdILm0zFi`t>v{&>DILa)}D23v?qQB*l@%{w$s6U3!3m>%?(tN#4NbI^ov zEz0a*qM{h(^{M1~?}u5v$8R8riv`?EWzuMkghY>T&3SCwnENbT_id#TyfO`d7Bqa} z6&G{ID)_o}?CVG_;Jqw^?C})_VfBZO^%l8(Z-MNAc`W~IvjN@@LL+TTAr+fCO(m!D zkh6V~bCY#U#ZW0(N?G_z!O#7a3`)ivSga`&pCR}8>7CCsaOO(6nrnl7AO>=V3y4a8 zFWVaNdfv*_4sjI+mgQ&S@!jXoXZ^iHYy46~nXlh^zqKWw#~lzP^Z)fwNIbXt*Fyn9 zDNQaU`!mG0F_IMz2kL?2DfriX(Fr=K498`XA8#hK0g&soY;_Kodz{dDEbtz@kxX30 z@3Oa7t)pmtfnCHhA?W?&f9!nIbG10iELD?gU~KIYUZVMNykVLe(x!e3bV@{`?<+E6 z>)N1qAZFG8e_E#qio9ybc_Wu4@CXRI%7A+Qq|MFr1btj19M50CdcCN|i4jY6-be++ z?A{BNaFL;GXbth*uT{-&CXS7`j)VYTn8X5QO`5XK1g}RmE*MA^QY5(cKTGbuL<80{ z0K*3$4xCsa@=okr9vmVz3%%Yvq>AR|DBDA1KGkCq!CIP*oyJrQAMz_(Zlu(xEd`i0doWsNE3!xy4nOMjc zoZPFhI`pPNB}`fho;)%TWj^BW?~HE;Mx!}Hzux^hMZEdw)A<)3X3#JDS3bi7uazpE zHbRNona(j0z?c{sy?7*YK9CxFga@Fw=C;{KQSAysdl55cIwAnRjxqA(` z6q8s>t__rDIhb7qvx}jhEMVP>#JtqJFqJp`(LwOG5KD?U4d{Y+mhnK2s9ig*M{EZ& zD`oR-q(L32J!5JBT$&}%6nKbg);>)Mf=w3m{nJWh%mNj9*o6Ki!>Ou&*>IPib7vwe zfd9}f-#n)hj|&)?U9INKRz9)1Ma6p{e8LDl0)iy?K0G0BB*T&=QmI_;e@mq5IYx(@ zehYp&^vp#&JByV)d5<~AF;>)2+XE-bl!xaCIgpvPRFx~~{Xw^FqJ+kP-^*zVhsoaz z;?A4*BvRmR^{#EkdhBF~tmG@cY|}Vm3vbUsSRgcSvvh6b#0EYf0;gC1;ivZmlRyN2 zOrjdln(`~Qb9eOT65HNr-1^whp{GaDSNudtnwwB!ui=!m;Z}5UM{XFaTIez|RSKCh zNY6OrFYch|VY+5AnzAnjo@ei!m2(a6(%`~SV{Tr++J!=(4Nu!4JfU7HGVrn?4BE~G zt)8l@nxOeWq`{r@(&3u^e(=A(5n*Ap{=dc%t~=~%VWN`}%S`_z&uwAk$DsA!c8+@w zVf>#7d0wf8Zn)XPQHo?V&OCJF3B96j{%hb=9(KlGWIMp_Y-!lDBV1WkTWYQEgbc%h zEjU)HH!fc$8$p44_o?(a6YkE%zUO?^Nt)v^clV_G_AbLJ^~_)K$K3L8=gggOMG zl#n2wZ`thh<>`p`tUt%Ksb=2wG^y!7VP->#PBLTF0WL5HWA^i1mS0r@&P)q+#$)%u z!pTRYjF5fYxK55>);g%)u>l}^6>TD%dX9l{cjhz#>8#~0X; z#k>xAyvAY{co~LsS&mrK^G!@A{h=M;Nmy5Wn365~aA|cmyGWi{14_#L%?BFKCqfpl z3yiw188hBsGvS0f1f2widQHm4iwE0_G|-liQl=7qfT{sI*_EXH$0a*mfdME~!mSoe zV|R|-))x5_S&CVom;9G~CQbmpQTC)E{;T75{c2Q{t+A4rN^6B!WF!-m`doLc*E;(p zw!R(UPQ_=ifjsD$E}pkY24L40*`f+8*|dK zlNSr!#SYKD>-~3o-LG6GqiO7QiHXTADEN}k%*O#n2zJy_o|NnNNQpuRUENU@U}rv1 z2lz?x;t395zP@>;3xeFX#nJuTqV-31MzSy1XBnEsul!m#y}W;;{{}DRQ6L0&CYf1r zuq$OcN#$e=nF$zE@>Wbev>Q-x1^r^nVQc<4v*=YH1aN^6N(B!ELy)AWv5Y__e-(51}Wz06N4gd+$N= zm0<^FWc+mRU`o%}#eZz{P|U!wP$wz@@;&8P0MF1SJADdRIk;A zliI|r4xn1pW*nJ}cM?Q5Msut^ZM__W33J0o>oF5G<~GJ(GJS zkEH|R_pwIaCyGL{l&O*u`>!+^kqe|Gx!`*k$7FMD_`J<vYdT!+&BTeVlQNa(T*51a1%e0U>GkX;#=TzL@`}Yh<<L}4 z>oRE1BMIHOj=J7Ydx2U|blCck<5Y?kpu7ADf7c7i`K}AKjcBNTr@yzilS{3>0vyij zyd%$Bs~V9w7%0}zp@`T01Jl&H_Wt$uFz32Y{$eeP%-&L|j^qr($ZLkX(h{dE{Z9TI zsnKOm2jr&^rLMY0CtQ?s`)1Hw>D7Xg{?N;lOOD%4s2#is+@~JS8ft$CwL;_R0JZIIV8@amn)!lRf%7(e04qDdd>;;Uxi@) zaCvr279l%_5UX<-Nzk6~C@EAMoJ0F5%9x`>)OMLisJLUd_9^$&ve<5WF_Z<;1MP-ja) zyMHJAuBmYcY*}1&eK-%?t=!PmRSg(#VAcPEo=mRM?*h`eIoBC zmO!FzQPZ|D^GJdU3e;lL5ziet)1{BIRZBy^at$*p=4}j>%tpmHmW}ZWk~8bs_Q!0v zDy|{0{H*Ryl-*f7#J0)Bm!-PsDZyB@yn0K;Ap+dPJmACdA-DvH?w*x~w*GsC3=e1( zWC))o{I}db67qW4JXFaY#)SQ;l)Qn%uPvZLMy*0QGS2Vb7@Ce<%v5CKi5)^1h{S2GR?@wb*}XV?@` z6@$p@Nxbsmz=O2a78@!u6@U?6`ZX640JSP;f`m<-BxN=2F?DQJHStHII0 zk0p~5m(Td+GQ93>#OFlO&1A2vG)6VAvA?~f4b$&n^qlRy-yE)57#V>rD~jyQdd4HL zUSsmAN59UuWm|O~B$K6)z(sm!37M&;oX$%2@2ov97snA7bHthFKGNpp!eBfD_!k0o$a^&3KgItCw zCng-DQn;UTJStuC{2}@k>#c7bTdVv?!X(oGfIrBv6)Ka3*_z1tCBuK9HuBr;N1VKp z$4m1(J2J}I@|Pt$zNjFFO0Q?Y8V^LTj8^Xms@9K&${bHk6rUE2uu8-AeQtq1PUBHO zgVX2o=yS(sMOFcX&j_=214z)Q((TyKA_4YCLzQ`lH;X-n8(B@^u16DNQDDu?oOwn@?*C60IMc<#<;19uF92xUCToc(=b5-W(Z*nL7 z4FicR=weopMeJ#)Qx5k(j3hKft~Y*3l@%wy`-R8nm#2TVjdL264sKGKo6X_fQ{#^t zbT$Tv-N(P2>uzh8l;hHPu;Ug6hgp%8B-he3(JB45m0hXbS(@}HGeaJGQ&}@SBO1?J zNVK`mWv$e3_XNT2(o;f-kt`<&LB|@QkRgD#4nxhu&i&bRS&!As-DyEu-=4}OJK$Q{ zIGM>b(~1)m7Pti;HmSrvAC-{y(B1K$c4;5@9zztag!>z&N(oVVjlDCo+vbO>GtjeR z>3Ojj`m1u=3}o>o{MbNOVOS>oVD#2LEaxJE)$1ej-@|87rVifuVr!tmCXPEe|UkJ8?nkJ=Qf#-0m2iVXluOt_q zByxarojeyDhl>Jl=GYEvlC7rLClBX`Km&t@V5k@#5h2C?z`iGTlQ(PVhT0hmk=G1T z+m2MBnSxmX$NqM2!U&36!Zw;H_JZj?zMXQbC|*8du@G`vNQ>4&WxeWR7FU`7s+l_= z1jN*4d89c1T-Ng2F&UIO?rIrQnj#`YX;T*KCSG94RP#N8H2VnHZ<2I^aL zYE5#DGZEta7WM`H7EUmQB;YVvX=Uuif8mnL_@q*2vXnm=UT5u6&y3Q3vogB3qY4Rn zy?uQQA3OzAP+|sa;xql4f+Fqk^?(3t0if0r761$calvJZMpdwU>=Q-gp7G+R{LvIW z`l<-m(-URR8{Eo@8ikNc7=-7k7~Hp2XY{T6x{~%BMbCJWb+ny#@^Se6+1n7?dhgiT z9e5Bng2JYbzix-Zf#jDGsthP!4gUn;qFN5N8SbCr2TdsKm|^+ZQyKc&gU@;^PH?1$ zueMk?yA1xl2;P%B#=9#&$`bfZ^~Q!a$$Q?Nowr| z%H4h^L!D@u_)KWx|2Y&dV(+T5j%Uh4FnM1H@P(`Vi2#JXz#IonfsZP24A4mky$!63 zM0Z;%iNOy5v@damJiLPSH<@yjiNqf`5p|VwgX~~?#RJbc9JYXW~t^^DVqC9eA zmtq>6QPsszG`vM^!(mkfg+!#hq{9?Ztov`y@D2|37>=g16`*Zt|5YRW@%gT64lJdz z_l1cWGf3_E<4pww^}=k?TgoElqmvpW3?`!zwkb89-zC?~1%!XU|8cx(G!96WzS*TI zDkx&)_o;A1!iu>$s?kEO22@ZVu_F^fVGlrX`${&)I)oKnQK%?}+Gn;L;etf-wpu$V zbn%m7;TX*%Nv7NJ3Y}2VkdN2(A#W$cqCk(u%N<-2q1S#G@yQNjN5O64PI;JFJJ#i& z?pl$OQVr2fr4F=$9O*UK0weOXiSnq~69-QY{5!A#V&l;Fu8%rDsemBpo4t`svKtcXAfsqA+4<9U zRp;oA$<|n)y6v5KPZmCq`5uFJIY2Sw{s^hMg$}J{{DxZLzrvYBH(|rk;E;;a?UhSg zH?j2X7FsTLCs4hnuJE2aK%7ojNGIw*4X=^d@|*o9?dhflg1&D)KKuvMSbz`X0BYVb zAxIOy^)2-4QFj2)Tw+^VQ}_D$a|Pv?Av)IK-`;ypu^jm|gpQ)uM!{+qx~5t{u!>MB zSBMOXhChvtf@q}5KuNAesN(*r!oINq8ZpW+tmJs}NcsOttyxs>!NMRESl6QasGKOH z1FU~uKKmUPJSP6(4!G>><0pE%~&$c7G?KoLhBS(``onW=RBwT8N~Y1z)FSq_>L1^KQQ2cqGVSEA9u-K z;xMm#%!HybXxmx5UZpu2p+AtSyqeK;E)P3aT~sfbjx%9w<*~@p{rur*ye=$@3IplP z#lN7s_(f9%K}U0=1$6~1hqm5+gMDTI=>4%vZo;S$WbI=b&~j0`DaeeGk%NA1i`ykT z2S~fK@?j0UC0^+pw~!nR%2B(3u$MZ`o-E3hV%jacLg;*8NI85NR!7;`Z2cL%m0cd< zHK7GJsovRwSf$&kl;h@W6W3ovJS<$6w@aH^>V|(V(MUw$2*Q@hAw|zKYVmFr2VP-6 z=&S5}V4H6|HBBTdE$d!(;9gE69nPE8BFJe#m3gAfWy&JqS?_DxWskNSMrIlh;INUI>lg>8^wbxHVFOD-1I5%_!D>QAC?Nj zskL1;vpugb`}-ym4yCg%oC7ltL_sEy(^qUWRNA!(bJb(Mg%byrVaZI6!KqdT5bPlU2 zlcG~RY5;FvZu)C8O-qX`G7zxk<)@07>~ywsyhOG%r_++7I5NLuW1#D3FV;6q3%uoX z6h!z{ffL{@zvWFx&Lnohq9CjwC&xu5$!tI6WBI%p>JV}9#Gn~19C5o}kC7ee5xC2` z3)#*qo1@ubTCh>NZkfPM;hI#*_sfaV6jt~11$1+Ru5+iP#V!v*Pg{T;u7kK}m4VE| zSH5_ogq}?&HQ1{yR{mXN8cMNZe-=_fI_ph;gi;4vT-D7>XUSmpPfCAQUcm{C=K$Qq z0Bk2*4ptKwt@Wd-QQ1y}aqeJE8Wj|@@2=>{3uCoaN;;lt(im+}wDVFE;A$W(WBW5j zwZ!_4^1fXI)?Ps)%>D z@dsVhSrab(L$oy0MNfg1+BUUTDKRU;S&O)Og*(z(Fa$YsV^z45pV_orJnid)(t}AZ zmA$(z`fNV&`t&3UWuXv3RZH#8k>WUwRI&NECNF#qbb(lppf9Mfi;Fd%UWoN51OlEJ93YnGZMgK5*SoMJ&#%|n7?4-rm zzRZX6-pv}f=g|M6xuftbnaVsX>ILj$*}_NT7w*rHcCILnI1aqTGMWfK92nK@ww+E% z%TKK*REEyeSHt<<@}yjIN=>!gnf zwp~J!dlGp6=LIO_)56#t?LQF1GVeR8FJHEK9wy?Z=+%eXhuf{CnA4u};m3N6(B$Gd zS*j} zV@XmJx(h7ENt1SqP6ha3(knyQX_?JB`~BDC-8pd0qBJ$2T4+6|A-Y0tL5tUT4n+py zrk1s|opUz(+*{R>*M94j78%Kxt={*nJ$~e*OBOUQiE@Izt*A?$v2N^Y?3L`=+Ysk= z)|AO9?=pi`wuWnA!>zx{YrYnqA4v={N`o0o&Lp&cuUhYGv=)iP@Ydy+oQf}NzXjk# zXD+?DBQwU6sdMRp(6S7P6Vc$o#t*EY@Z$1IF8!jqwGM|h0&VhN_rJc1t8gT-K2Mm$ zcM(Nc?ELGg+DM#!rGZXk6R93-08Q!4Vxg{}mGA)KZLvbL|LH{^<0ZeR1bz@U=+)(= zH*qdsz8u=n^WdGmOXY7H>ixuI<(KcE#sPwmiE=*9a?8)WGQ%$us3#|lWZWFn;IO}y z7CV|eEbRu|DTajkAyN4n;hZ>Uq1mwn?dkvComTKg@AiG8k?mrbh|qgeOY1#3>Lnt? zw^A~jjvKPCXFHsE)yjo9kB+pgtP;Ht=gI<_1pgivtTFMYja>0rX`sRZp{|aQS)1@H zz186{;qV6T7sn>vO<6<~284``yPEUzt~3})C9#n&D>z{JQg4;~hJX8yvg2!w0iojttDb&0SQ*>Q6L z$M${2atA;HR)5aC`DYB$dA}T+Qmi=jH${29OHunEP-=~-&!;5pEz1zlUCf2#n4tow1Cpi<&K=3@)VIiKoh;fKQ_V6M}~0KV$Q8EWuP8p!B#- z2qA7?wf%7r#<%G09}tJt01?DN@JDU+9JrsWxGn^j?mUX6mX0dlxXl+O(SAVaBX!FE zK5%TJ9nZ{uE(X8}Hj|3VdC5zcU}zcYADHGdfF_@pTHSJyGj$-}M%5G*g1j2D?X0tH zSF=8GPM6utbCg~MR-N_h^qK~XBg}3Nmad454@SZIz zI(p?Y-4n{|lZEOT0JpW_P%5lZCS z`4QlZeQ(3AOUUZv$d{X+5X;oC2!L?vTU?TwuQuFWsO`nTU{@Q$=1jQj&!LjR9v+}wXw``E zb-5`Wje{5lOQ?elmfF_Yhc9=qC69lTM zq#ozux%PeP#|+qt245Jrm5EwJ{UzcCr(uYeFla!e`FCtO*3SvHsxER35$Fe%uiAJ9vi%BW) zYLbtYZd{@_07+_zQ{eFTiYvQXDhiJ97;=PVsBIoYez}r5y*DC&mnHeW$CNWo>pgFM zHGhcwNX>mK1?F4vnmZjf_smCM#Y@H0Au$alkz8MDzM4rYnXIe<070CpQ3rd5o8)gm z%XBqn{S(>Da%hd7ad_7b_qD_K01rwFyxZ?TK5inN3smyMDMBufI+x}4ohU$?i+(GF zxrRi_nf#*_FMkT@c7emymmAeq)$))+J%PDXBr2D2=E|& z+1J*Qu`1{({XuML2B{g~5^IWrJ@jpISdD;>#&GogRqA~S_!|TG8^G0qlwQK{ymj@8 z&#FesOq^#e;JVN{6nWdwM7=MB?kU5EbL!Fs*R&|F>&}tDzyTP6QevjKXFH$!ere-R z=vZVPo?5{Ckzi*nN-Ou40@^uY>Ak=Yj8A|T=Y`;SPlLBewm&ollP@Vq8v$aW$6gJ4 z6s`!lB(XAF@8MzZKEUD3`|t;Y zMPwcykZtQwcfO~)urh`vBiC@=9{ni zsQ|n7rK*bTWQCXKtXPgj8RNVB{Jb0{(9xtBGG0x+&-vP;mW{0Tdu8g~{xjjasK$dn z+p#!-Zrdi^=&TRf6!&2d=+FL?AP*&zv3NJe7-Tw7?_?0Ek1%z`KUGbBb;{ZUmRC_9 z<}NpR#qIwyfo<(4{NjDCbZx&4Dla2W=wstrTrORH=@7(iip7?v9TZ%=ctKHZez8np zy&_sQj&jZM&$+auFvTt|7v;mMU9^m^SD&XsDa@a*VUM|NxjEnS z7;I7fxLy(h^=uyamI=@xO?fDIp`bo3wLn|-k|u6zJcHZlStyla_BWGLWwB6uXBxiT z{N#0Y*BymUJaC4Y3i@L8HnBQ&zT)-gz$i=d*qsx1A`xdd#0Kpa>lPHlm%VrnOVQ4Q z7-66LIf}TSZOG|o(2KC%EQV2qs0m4na`Qqq-fxSGjKvj2T+3f7%>B?%fu|y1Z+gZe z?nF9F%u61nfM*FD)6e(hJ!za9pSEw0Rs;yl3U~L=u_mXlH|I=NxWJr&YU<#9f-E=*>zrpjXs zPOIA!=_v1}$(lvMq+7v;ZuJddx!qKu?tD~p%kefH0e@r_A|PnZ#or~b>V!J6^Y5<= zC1l@j3i+)hr9@_Az0!9ymmut2V-O3sV3GH4!nx0(JMzN%c}qQsMAwqpC4jI{qoV0~r}Nc^DrD#q$wP2wA{D|G>%R2Ga`z zo%py831ES@yY}SP^>Dz>Z)YleRIS84BkZWsW+gLoEudoET_Xv3it!rledK6;^iGmG_C!4uR<%9 z%@9PT#~gYxj&f_PVtb6;2La%JK@qC355xC%bj#No1b7khl$4$F70 zhecTv_iz@9VE(+H?fGefX2iMCfE*FeiQ}k|I8tMO2UUfH8n3SJf%9y@Bx&HNB4*1| z76Y2tF=7`xP*=eH9Tz?4aE!d7`KBv2t~Mwmtg`>F)jjuTAjK2Irn!%t4c9=5ug@$f z5I3@#gyF~2Bu?E^LopIb*mh7o*;pnVk{$=hlkI4nZiACSeZmKdO4sZf*0W zuFJ!n?{80Ye%9KrOX*fSUC*F(nSk%txa*%=$M3Vbu$S8PL?RTVPdaF3Ju6D)eftTd z?+cY{bAF_(SzCU0hx;mJ?ZE1O8T9}SAufHyg9u+|^ME+??+ODyC8JB8EdU72H1=E_ z>#|(e76mw^owZwR?{ISPe6r-5q<`mNK9v9*`YWO2cQK+iJdFJ|(~`%zY^;x)o881o zWnv)s(_F)w&~l*1K*o^pfQ3#nG8u0qlaG-KB!&l41ZAS|6HkFWZ9cyVuauO!#Ntli zW?6-Q@eId)q{-LAdqs;6+$?#uvga0XJz?Y3rhi}L8rICny3{$21%3KS;w8e?a0zPr zVJgdbdE;o+u8$6bRGiQZ(WMY*e++3@A^9Q6QBKJqy+AiSfLsP|xy6qbiNg^g{t1ZS3lvSJyPKo9nO_e0s zqS@E|$2_d<#(d^3KQHEMP0I`UsLr?>tynr0&=Ixn8`&Oy_|e0cKxtuk`RHeJ+x+hJ z6`pg|r-ul?@LTj(W+XL*40k5l83lnZHSZy$Xp&*)BkMMV@hs8?Y=R40LBTogED)kk zPyUszA9we|a~~EfhVP|7$q3JhiJU|pwi66gWecEofrw6HCu~q1n5!8=h*3qYm145> zs&aE3z6yA8>asJGt1AQrawyH|&m(sUA~(2=nv57#udv#DvNb1UhF|a*0m0nS2xh9Q zlb_QaA2!(d6U&6YbExRuHt>53P$fZDy*8BAReh#3H0 zPG8hzv+Sr}NP6ZWRPZaKfct)LgxcqcVM2o%Bok&)&ph&|F!>ac zg@L_u_^UW{lt;drf9J6%MNJ3CZj{l=q)t03bbjYuY5lL#vZSOPseT$4FMQ@F2c8d@ z^|4GuamYrvGG{ZLimVr*!kR3%aB9FL@oIs+TaA;7a63M(V*WDr5-&#R>dzb~l!77_ z#ZZSH^SVkEQ+l5u9%_X>3^#*>jfYDEQ$Cl=PUY!vi3{SMSy#pN9?EnW&zF61 z$1)f60C|`-zngV6@gO@>u|@bqsm+B97c;UD)*4Y6Ttw+_j&jJt z$6h7039lt54in%UJ?X+s)xOWKKHmUa&e(L16z|l(RDe|AyR~J58ht(*eiL7xmyDne zrYk~e6k}-rU@Kj~g^}(o8lic3CDfaP!v1R0FtiY0P*E$iZaqQsAAe-;3&N5FC~7Y@ zNL_t+_R}qsmZH|~?~dYu0W}3>b?$V`DhR1l*#z9o&xytJSbQm;AW~8bkab!2yF6=+8#M>?sv&?;ZZX7bXzHG0Bc1GTBrbAGLCJqUQ-t5|wwc@dL@f{9qFK-XY(q*bp-8-j4~G_W`wm@`y%u#I66F-j#M7 ztKKzm{n4Q;i;;(>dTCkkCWBW^uc3~IwYDO)~I@l#q>=7#9N zE3t0XI>+pLtTkb)`5*M3SU)w~n|es$rb8nIcC+jGl8o!sbzTIKq->9F*A7BGKYw(^ z+I5`3G8B~cUzTx%xolzq|2#Q!7mA_#1tRqx*?^G4HGqU_vIHv@sfC9<#3f(&0 zPL}eW&tWrv7f~E4_;6viq|?CG;zn&zN_xq&!A_MYHx0y6ETd#w6naG5)YRs1TT9JT z_|atCn|}r;7p-jae{ZLNInYjT&9R9M1<1Q_ip0F!oEiQNpD9Y#|9zLgWO5F4GzOrO zc&I<(CeM4mb3XzdeDhqc-Hwu7k2TjRQGHycw9K-;K$gnz%0oNNJlUZSn1&co^^bS0&$&T@zC2l zVbS0daOjQoEz@g;{j@8boZ(gEtwWQtbLr;;Es#wd#w5qv{lAcFa8>Z))ft%XCKs*q zC#bqO%e8Hvii-6~sh2VvWd=f+;?AK||9A^n)pDf=#k#0>@-9?bH8LW*6vL)CK9r*b z2jHd@@4nB0n-fGjN7(xFAPX1&!;c?O=miASe7>Ux3W7zRFrVKuYxJc<0iesE&QW0P zMzotzYo&AQkut4gbE^sI68F9OL`~#&u7!mzsLBUKotP`s)Aanbo0_cSxOf)x-Z9dd*r3pdCO90XgrIPF77cDNct|$CY z*S3t(5}L?Dn_L8SG94Oc`4qXT6TL`O@N9S63%#!kva003S z(v-dW%-6C+14jppN0Wx4=5I%5n0#BoExaJn4K~e?6{Y#3UQjP~}x5zaca?f-3`t6Sf~yyCB!PzLSy->&N@lJp9J)9-4a5L>JBm zw&tw^BXSR9bZfx@0u$~^h>||gCvI39?xh4AOU=+@leYUEr>A~?;N9I0GPv&P2{(7v z%$LWRJLBL~T%aPdm^!cWjnr3CSH?2f&Y$6EaI&dos-K1_EkA#m27L!+9rQSmS?&Q% zA0YDeVMPUTw-)xD0*g0|udiNXp;>Y7@YS1u=VEgP`^?8_*gR5u@sSgkP;EezE9CcimchU zvXepfgh7!M$`)-}>{-Vyk-cQgz9$+Y`}R9;eV*t0{PF9*di9!__x--_bFOn;*Ex46 zQr@^`jXv}Woss?Nn5x=8kve7~4NF;_xqao>qCPATRve-E$q$6>JvUf%(AES6m|}TD%`Tz!g7O`ObpX zZ(4Gg6&#tJPK3aL(pl+Jpd`>q{BA?Eg$u=hEaaG6hrF-|EAzRU<)r@=bfWs{N>CI?`CMsq~Bk4TX~KU zyYwbJTt)TI2{`ZXJmxwxG+=Bk;n?zd!ErVx(>zRMN;H2ty(0T>{T*Ch@$BaYozznP zC8N2dVy1MaStvx0jeDl{QZ|D_r>K|J{!-x7_Ll?IWy`ThVUvA|tBLIPYlzxm+mibb zsIigteeNDNKX-k!|1JAaF;? ze?}Wb%go!L&t7|2iN4H=LSACUwn*R6rpOCp7{jqc%Z6_5iCG+HY`kP z-vimii6!^e_Gy&AnV^QP6T+DZ{S9bmQH>r5#2y73sDLnqk**7Y*vaDxvE3 zYa+}YFZor=85C!t~{u8h$s`0hj;+6$pRBw9sGX`Srr*eOke9 z3ryejmst`?2V^vDw4HAZ(ZajWJqAouxH>QNB|V$Q6*R&v;KK!^=j~#LXm?*^$+*}R zqgm~J0J^l7PfUo2&@0pOnJ{Wq8=DxYP>z1K#onrX9eFY5>Q`DaWCYp|7_0oj-sRRS zCxXxTmFrNCj=jrbsy#NxcELoQm9bQew7vWet2n5EGn+odN@Y&w7UxBvsh$4evqL#| z|MorF&<^T{sRQB%h>jC0LJ(=bSE*-ozRDz-&Bfr~lomhN&hM!>{i6| zs;uvD3EU?%YKkPP6POeusrmt!z{HQ;lz=@lg8mErkLQN9k5hf`?d2`P@Mp$~Gg04O zR`8%!b)927co%(ZVr9=RRSnnw;@F`<%7zu>Vh-2upXbnIqZxtCcYv-t`|QFl8Az{i z9p8)MoG~;cTmxN+busEd=oQ2TL|F#C%N;?kD<6JA%&nG~Djz`u?52CwcHr-fvhdn< zjt#9)uhzy4;1SKfwVCj}8#%X%nfOgPNt6CU%EqR<1?HUouFc0lHkydqj`a#Xyy0Ip z?_YDC`-}Ubk)jxhj|~@Lhy*I8#Q`P{gURORu*dET=auaIROV+mXvcU%<`d z!9Tyn)6A?1S63W+!DyYjyR=4^+rL1Ng z3+okf4#&MGTeLNI^*{|y#-|v78ZISM5R}!=-^eQc>foJ}`5jum_n;=2d69QMZOE^x z2Z?}C!8cpZ+BCeSaU%dzWew0dyQ{O)&6rXJ2|DXGS_$#T9o6s4WAFRqao)vo|*$6eLFo*p8UsiS(%C2)v$SkkDW(s+N? zv=|K6cs2OxpT5A6ZqNN!?Qj2>+*^nK`+6d4Fk1ryt0M@rHN0}yB1%l##@xO?g~?9L zmAo#k+8R03jPI`yL2Iti4dI768mQiEPUH7Twt!I$-hE#Ovgrs-M4PscIIxb;YHlCS z8V_6?t1@7?YH&v8iFn|4c4XZBO`aFm3}#Lzh(C>UyM{;_3voX2VOvJf|(R|no7e(=tYgm9Y0-=8odi9bsfgXniAZ#Qw zkp45l@7HoLC=1?G(M{iYE?2H)4@&1~Br;`x;E?k1z1?~plm)jyO|#@5mso0!$QV$y zVHUEI6n!buPaTXCK7IN$7c-)MhrdoYztV{)-Ns-3j4+Oh0WaW7Q=PuH5}BnTi}ePV zk8AgjyLX2fVT_3FU8Ir=-UcknYVfB9x^RaaN11I;n;s~#(^ z-i!B}yh`?3%^lIezTLnbJ_=JwIV$mwyjuN)ZsnAT^nY7B5SBw;v(+{HT`(@tSkf=`R z*`}-J-0X1F_4_7#O(d}ue56|>+X3GzfZ`jyQv6UKVHn+&zlzC;iAA9pLIqfJQc;W7 z04v4(zuLS#JBZJ%N>vzkq8K4wVKgPj-FhL*TmPZHhgYmml^8IT@?`J`R+tiMP)c*E!U$3P=Enlwhi_ zzh75~{$#zfV)C!N9vyUn&c0NQS^>JW1*0;H`|s~i1S2D)61bQzd9#SQBF7{nzGq8b zezYwYchW_~yrO~Gm$K#ncR;|cgXd9>{&Ktjv;{xGn;`FePcU_0+hY(C=gE1$mF?9a z%=#gBPc9gmAq|;(rzCi>nWv{F)1Ya;!^GPL{OJ0IhCXn!0NCJsd&LCO6qSiD?}V#Y zKd-?cNkl(pt|AX1dS(j^ie_0d_k{%xu~gc&09McydHmwE*q~==0gA7#5N5Oa_ z1;XQ>;s?k>T;8o0BgK7akRtv=ySxB5LcJfXiG>1|`fqZG>hoOq!M^DroyJ`&unpHq zu|)BJE${ZMzOsAz#dD3hJ@&%4*DqlLHp}ng+SXsaeN3YGTOL!TT*Um<*`>MiJMXak z*>gKEqz0p_x$p1cYs{ul)EqQ}`N+OBgT6fs_`hL>FqdsEN=Nh1Y1&)eV1vR80Lxg*&p z?+}j)A5W~z_WqSu|J7)z7m-2~dR-lVa(z7Q#jj}++pYFOoS&Dz&S)z4J5 z@!a<1spvPi>g4$D&NdBSjxzIxu{X;n4*Tc#em<}Tv>4$>^yZ}Y9F^2vnOop>wod(e z-E@7ILbVtpweogu80o7=M47L>taqe*aw%#Q(4hzAs?sSO)(+PqKJDe?8&@l795^!H zEu;2jC^^Q5`uXDm9Up#3AI&~X$4YE8EtNDbH`C`mJSyePt;Jn;VDaI^I=Y>sNJ+Bt z!#jk!&B_K^mV$N&1RYIRijg_KB`$N3qC=|R%Ilka<&?MMp#<^LE(^5B{2#*dKb0Ge zP~G^y`!4DF^6~hr>};i+C^QTdAPjo^=j!@px-F!i?5{**WNW&#Se9$Ba`opsn?G*@ zB7YY3e(XKVqL9lu(=+eOQv=-Lz?}T|9Iz#0&0C&EgGJ5@N~Q#)lvNJqDml4$#68Y_ zNHsN{96Ar#H#HQ87aivaXCAVQnn4@RU78(ovMR&NIOm+TX$9~R%;+%73XpvVr}G`k zQZpEeig>X#kDe_r>7F_BM0|7ni~o!q>OI-to9{bbVZ4kpqVJrU2|Btr7RI^%a;_m_ z?Y`C>Hq5|hJM{HB^l%IW54r+piF3t-sqY{hPlX7NYhO}ZwdQX4cr%b>et^ayM#{B< zg8CG69myIQ_I*ZMC`W50%3=03Sg_FkDM4e61E2BcRgO-AQ_bKkE%M|o;vAYF98BZR zNt5)PjA!VP#sN-!<5A)jnz5{rfeO+&=-WC5_b>)$N>$9Ivgwz3f%^+uVQ}BeQUFC< z3wev2>^+{?##p#Q$@XsH8yy|8mrY0;*~tVW&5txN`U1vYhSQwwD7>-s8vc*&jDUvB z$MrfB5r3B@D3TW2@A5CPlTp#xI7-R~#w!O5Z8)!#Z4$*-E}qN1Asn;ym^|GXS*%yV zPK&_o0f&hD&z;)bGT73& zPm5cVb?Ko>Be&s|G6}4HS29xZ|40__Ko_h927K7pYnh$J7UuhT)ghYI-@|HtPld^> zxJldE@^TZhe{x;iK495@OTMib6@3N7W~zH1c}e{%?>3j3pXFan{LSS>+S;LD4l7iY zx4Yn(#&hUv80v8F9lc8#G94oQx{`%91N;2#>h031U5;aEFaiae(@ODhRY3q}^J!-I z!8~`(Q10ydpFIR|r(X0l8@_$)4m9xIWNWPcCV%&s#`>YsZeWY7y2ir86F*4(PzQS# zeXTgcl33y0-Q5p^k?&WE&EE-kM6;f2rdEA{l+$z9l-Hi%E*piBD#ilRw*tBTSAaM_ z0v^-v2_fGz()49t?2L)U+x~s60#u!Cl#`O%IUMiV+T-uC1+jzMIOmf>&x*u}$F3}N zw9K7Ge_{mZKmC&r0at_`f)#BI8H|EUO;r5|wkR+Aj@ukroo7+9SDK>_oy8jZ75M)l z$+()DetQ;Fw0m(4?}VS}@gL$h47?2G#jvvIB%P*=f#1kK*h zR{6#VFT_N9;3yePl!;*V8no?Ua6UgKdH{3+b{YrC4Mv3YE1QZLUiy%0Gv`pTtgVc` z;Cn3xR0z393Pj+37Z)3ldzSUleKUpQUO(2Bh!^YIZ#HV*QgJ7Hy>a2({U#cf=8#z2 zLM>+}?r#<4w^@vBv5Y>3@S+$JqcTGia?K+3HuQTD#C8`#sKx98(VBX;6pl4@l1o0P7pR<#gO%7?vbao-at zi{6!%*-zb#Qws8&ahcBAt1%D>AMumBd;{Z^KX?Hl)|C-dXYP4_SXQt{zlAn;fBWX-D9Qr7ZClct#09Qv z#gKw{+)60cE4wGQjMf(<|c8wBpTvKC+{-15VF1LUVQxgB|6-_#c7PTgSBE?4X{*k&mKw zIlEdVd=bZuqx=Qx^=QiqBWNQi`RMab1A-pg59c31|By+hSNn91RMLJYEXDRPo180>J9F?zs z*7n-ge#cLF-w5;=AJ3xhQD4jmojhip8uGJ%t=iAM_Va-`%1mhaz;VBI9jPKyeGO4m z_iV%07n%yc$JzxnV@{(CVI<61){$A5e}bd{oEf6s!8L!bLvd;sqSb4|kYWka&}H7T znKro>?`Fs)^^gt+Q4XOP#dkG=b1WAIJaYuBp^;%PaI@+6DL{qW(k=Dx}Se{{^pai+uR8_ZBMV`=-O3O7mBM0$ukF=>f(Jbi-RN7fd$1y z+|9{ExYR==7sCCIn3sQ#IVlK>PZ3I-HP_m+#k5 zS`Z0lpCraFi|^N_hogJNua2IAUWSa)7v`2@V8=jSf^QqfRYmrMsgjXi**$Q>cGE~? z%l51-EyN6_6@{LK;dP=sv96ShkGvwD9QuogrqEkTy0@FvczC;nGOmn9!)H%Adu5Eu zp#0&wxG4GdO0Zx)RX<>~EfZJ86wB*dSDvW^C~k(#7dZjy3#b`mCSCNSmLR`Aqz*aT z7}rTAKwXX#n#~XuCHF}HQ(Za_UqttU(BHkYbZ`CgN z)|=?o>mjQrzWZn>dWl7;5{RI4pdyh#Wc$zHWJN!O$w72dYaSII}$2kyR8} zPk{31Mpr*0AzIvC?qRBmJ?qan2bbMqWPRW8Fa|C7K(XhlpzQt6{1)G&g}RX~bxf?0 zRkF~&{dtSuKG6?{+Of^ow<`m#tc4Lb{$HNJfatSh{=CqEZK)P)Q83jiv#&7cR8{RB zGfkxorb`?CsyQ^73!QcUMfbCxopsu24RUX4zoJreQ-N8fS=r9o?_3w5(}tr0x*0vvG30F)xXjd3a?3v7ry z6#k_m@*>Vi{1B~I*r);&JGX!T6M?z^iNHM2PLK&R%7I{j7;G@mnaBBXU|*)Uxgk;d z2|_5uj{4sQ^G+$CfYiIEc5JJxl6E_OmACJ$FR#eW&>#EN%G6qxRC`qVK;)8$W&3ln zr_M&k1I4$CYJ2SFi;qh9kcr5W5~2<}b~dneU+?rT$-K>!THEtjjp!DAQj~b*^dl+z zY1G}sn%0zM-+-W+;!Ao|9BJuN=`%axK7$pf(ma*Z*S1#fCNM>E(N{~?%Q?jtB?QH zEBaIczfvdMcM6NuW%il!M@{r|3$k9kCzB_Dk@nmZB!+x;cRHE4Yl4S3qt)3p;CC>1 zAx|N*jy`eHW7a!Q0Rpw4^7Q5EEpKFfEMz-A-qW&aqVJ6ev-k8^unBsmtYMB~#s<}CjInpRSPZ`&g zMH!7^R|tK1Wi85J`>?|Jm1ArdOUTz*iJ_lOTbR$@Yk!SbPHOe88WK|+2r)18!=1yT zdC2|kBu9K#vw8+5wuUq(`Mw6rGWQG9or)T|;x)L{PjhvrnS$6M!>@duzyK+7TnG zSL`&jDIr>Qcw_MQ_?LKLNA|ab&i*L5&=v0J#8-De;ZP@-M#fUH=z#^%#gbkxQMs)q z>ECyZfYr9wK5!M2+(EK9)mK6r=A1vkZhq_u2?l4vzr?PLon?*-{j!B_;U!-*!E51? z$^wK^wX37J0i9$2eCzpExw`o5jWAh`5DvTbhTh_ACRbW#!bskSfX|zf3R<|A#!kZ( zzKnw^@Nw?TMrEcX2Ydv9zU}8J>nbWAMq=ovx|-92S8?H=6z{_Y6I*99a$UKJ>VmW} z+HYb*_=_*fwry{sd3-E_hujIW7QOibhFq)DH2qHg=oe91FJBsyN~MenR|G@bC>AM+ znl|@*ehlSYP>wnNWxKq4o;@y39ocN@>YfY)PONuVu&l2UJTIv@ct~wx9j~L)5juZg zqq*)qnXE#nP2EJS(yB5ZZi(i7P`0r&TplCjiMk}cUOCSbCsKUSh0gKXn4_a>)e;_m zpP+SUW%?U0<>CcA`l16{^4Ma~@!$rZiTvuE~5AYiygBP{cklX5Do9 zc}`<3WZfcuq;#FZ6i>;B7J6jC!ikek*67@9@$M*FZ1pS7x5nY#eI@PIc98GN5<~0a zBy(G>?FmhtPCq`r<#mzCS0D_lKx#CEAF3De`qK1mR8Rw~E?usg|H5~IqNZGpI_f+g z{l$7GbS$Vq0P`wsczBO0@99u2OP#o_3|to%ms;#D5w~EPpheF$XV;RkR)s~2Q2Og* zwYU>+{dOwxEI;jcc9QSg{=N&nsXEAH6kO_b?4jki#4i=Rr>gi!YD~no!%9jfL1cVY z12Ob;84EA4ET_DZ;0(r_1xSdM)vmyS;S@e9AB%);DX!bezk z^Qr&cVD-m-o<2dWveH|2@gN@kfd4aR?pYirNB!;Ji!#*@hnV@_s8m^R70n}q79-zm z*bjFNBrK#^v!%IU#Q0e@;xA)bom#xpyAwthFCuS5dH|4Me9Y+bJceh>;b=TZM-Ee5 z#&Kd0PYoWAK3^AK>yNA%8hz4UrjwoLB-_OiOM3!NZF&6w@haeif+kL|`H0k0Z#kv`4Y3%$)liex{KrEz z<24**rY`bC4V=wOh$rUZ6DQ_le&+dJ?w=?2vBCypF<&+zZOm@>kfbbR8I2{*!?oT2 z-4UQJ_-FM#@y3cx^<|@n3ubLG%*-6eMJ#;|j{61LUXrXi06&i7+10my?{g?O!mesm zsqz>s6@~B06iaT?zB~4N9>W%DPWQZ(#1whAR&N}OdI9lPN9gL?jsgMpTjyeTCFv{Y zF^~9YK6&>S5OBtqtLE&#`1f+IR;?9{K!n5Qpe*p2uN==^cAV*ei`oUAQhkbSs^YlS z5BXqdtDoU&Wg7P*=}6eFGyFFzD=XJfe}=Fmn61K&Jh8clP>R zG7f7Otzg$XR51C#+SR!_om&8Vl|k`y{TM^(8$;30t7{9qD}PspoN99WxkabPuy`Q9 zwH_T&+O$RmekKv9J@1(-%cm-b{|jn85Y+IO+PZ|xx71NO@Pje@=)89+A1By8=D511 z=La%ET(c28{^Wv5+hRJbhPSDN%V4QMKQ~qqr{=*izD0ESYa!yrub__0Y-2KuNg7`8 zdM<9{+1CsIMYr?&_tR`Kkm3wm|M12tZ~oNAqwA;JlGoV%<%ppT6#f#)ZB>tk__0gs zkHl^`9%Ps5=b|H1Y#=d5Cfy+6^~p84(p$Z=Pj^+C#Er4FptZ0C=AZK^-d$#LP)*^I zm8nh|Qng`+z>B#^#_$`wS730&Z>H&@8M$-;tZoEWILGm>Bb^Ri* zu|F%02_I}42?V`p)01m<6x!C_ow8O6T)X1;GBzH}Q)ha5lnow7wr!l%@^qV@sP0pm z`h)Wc4teDlm<9*Gf4|L6ge;01cW%GQ=`H3kly{n=PY`9SE+~*jp>jsk(WJ_+N9axN zg7q4Ka9@xA?kfrU0tKzlF&BmrgI8Xo(la<{+6cMS;li7)T**Ga zK5kJeVjz6&k(1)&e4>de7`_~e{4Ftkv(GUWKZ@)ZJ%d%+NzdJ0l3OS%Xux9{2Ck5B zj=kR~S>jQ>e&)y1N+d$ z+_`s*3+`W)V6@&IXbjZ-IcL(CLx^(9|43WI3!lLj{^!PHKCC1?q}OCFWlnkjRnZ{s zx}}wQS_o{+s8Y8do9eJa*DciOMv*nsjjgvYDY~tbI`U&j0|Hx7-&$o$Ao$2^8P^0iIfNvel7-Vf)0@^an(jna)%Nz{JR zm^4O?M}IXacIr2?(Ukbzmp^fyZ=Dg3j!jShV)ME11R&U`Dc8C4)4gr9LvP4C6;4G8 zQJlFmYJYS&RVuqks@R(!XLy=V8@Kv}Yg1QAkE8%7B-KiZtHph9c+4Sx#%1g(p7O!O zg9i^7#OCRl<8~~6|F+zDCUgRQb<7>&TW~n##Y^itQy1hsSTeS6#%7!1b) zpo`|RF{x_dO9I1&J$maFP27D-Vw=;fg<;x9zG}-?Pt$fH30xu&cTxPr(AwZjWz~D3 zutpruKrgk<(}yIHoY*pju{R)SeFR4sB0{)}5GMCe;pWE{RNpf0-I4wJt((^3Ot3OOwu%3nV@=9)+h4P9Z_bfy z8wsDDAkl3(h4v+v?4u!FufdYSgD*Ev+e*Hv|8ow$4jssFTa62KMKq!6K%WLg6T06l zNPN0-`h!bQdDTQS{$k&un(GjT!lTK~qC9WuEWOptE*nSB^T6^=*(DZoI?yw&{ap!& zNM)AJ5CYPP6A7+{3@9k zynK=H^4XA`op8IWQT5`t*^ypb7v?yP4<#jQGE~)10F^I>p&lVCcjUcZ4%rn;?}w*R zV-fw#SQas9wN9#02>=^X{C7L@1aO(7dVB}g72(0^t96e#4SXUI?p}qP0J+TVyqRwJ zTnY#fgHU7>^t3j9Bj-uvsV6E`YeV%eEF4EeU5XW%Ev&F3MRgyP5?UN_nFw^7^ev9% zl)(h&E4pQ`#-E8lSQi~?3&gle!R#=^Z%;poe*TuW~PfnNW&H=BxH zZ@$mb!FH;71AuO!4mI2@=sMklbMgrv^6*NZSefOn^gH2M=v}S7^VqkIKdt5M(Sg`c z99=(63~jWNk(QP&fHQIK(SsVkyPvk0M#x?U%~ETuXPch%mPP6X++@d2%l#D{afcft zY1IBvWN>V|C+$PFIDae+%^>Ue6p|2&{WM;h81gd-qKgZ>4f?i(Y!lvaK(!66?q4Rq z#5=++V_|3n$JCu*xp_>c_@U^A-}BUQ$Bs>XD&`}WY!H)KL{;Nl{s<1d?>=4Qm z^>g&Do;2D;qv2>zu92koc6OpNBqHXw`0z!KPpd{1YxkA6oAl?SvW|3*RC9$3_i+op zP!#R3*Mu;CT1iRiz`b2F2iZBZnB$AhZ~8dk&|{Ny*`L_%#{Ub^&0sBY8hby#9eh%HM5H(TjRFGBa>7G4%hOvhI!A0FNl7IZ^LdtAR zA${jevYvFr4qLeAqm3NT?4mhKd@S6ZcS-ye&}KA)v6eD=0#aRkOdOByS@K(L8qKSk zdwkD&G9Q!G|MBLvYKnaw?g1W0?G$cdJjn4_cmN`9xE(SC{ z@|^2AxvQjb4se6k|711A+G&h3j}bKl zX#s9lA8=EIH4C*kPUMdoyz7X%2XOAAfr$J7KUQC?`-hi7XZ6-0ifL5eXA(0`0?`Dyjx$zkMEz37dhs9uQq~G z^cY8<5E6?XaZ^lr_(!DweiP#1BM>|U|8k1DJ~khq`ngQ?`~`FCfUhKR4rO>b+BR@n zkab(-m}^;H9y(z`AzT9`K6b2Kf?DU6<7^sn@uNbz1;C%CW!C6d3YP242oMvslYyd3 z$l?#T3(X~`X1kHv7$)W%)RS10gN64)JyGf$*ygw}j+2%$OxfaW(IfVnINf~1?d)1t zTkl1ml#YR@CTdHmp2UM2IjoTv-0mie!7MPD$clTC!K{&z+FFweiT(FiHf2t*=pJDb z#&#T}bg+}r%ity~+zymOk=0!s)5=%S!vCGSyG{p}Qg$Sb6(VSJd*VdngO&maLzr-| z<8LQJnd(Y2)IqUG4FxbS71;-Bkue&i@bCZiwA}3|)`LkJvKv{eop)ZT^#&9;X?EUl zVR*L5#o$~U@4O^S()yo?SPR%)_f;()YE|(9YT;)-b=0!dcd*o5vp@q0cxIPOb|Vyi z7?;mH+c*^AIGW3KCkEXXT2eAa?5J}1p;T=*1M3$pRkDuhbGy`HS7@Ing|l%e{=4de zQY@}l<*FhK@nIF;kRSJUM9^i`P*>M7p91W-XOd4#JV<(1Aa!{%{MWi$8V?TKj7Q##OrN2yW>?7i=E63*Z zI!7pgqF`YbzOVhNss=us89?K*$(e0CwZM84i%u4-oF0$&T9{6cbGl^p3TXfeA8bJo zZDnPN>>>*IwoZglIy7#KC;vLf$=PKOJNe!V@%Rl?umO|`iqtvQG6Y;W|L1Dk?HQGPORl48Eg%V2>ci#Wj!VL_X zkp09EJ_bY*goC4z*%9Q0p0H9WJ5fa!t^BT-;%rK}ubG?Akxl0*5UQ?-vPlQuR#7q* zQL@VGp2wuQ)$XS|C{6`*GxW+C^THsAx~*?{l-+hZybi}xYvrcntl5^$@743cu$2Xg zn&)0J)x3*hOv`)jRsU`E3!_8LM}n4@yC?8ne0Llnc7;K@(&)M-GDJ0MKaY79)!@T- zU+cqD&XZP}OkOZdHXXK4=JQjjY11_v5cW!R$ldVgKpQ%OCy%BOKJ&V32I2lN#Wojv zf8g4B&Qo>ynOolZ4E&K|Ot0YboRz<~+DrMHswsr+S1&0V^90^KsOPbj(ejdgT~)<4 z&1>zwxPI76&0pof7f!NI%cI#Zii2*qRl~l=h1ai}3`7GRGR;T-T7DbATI7?)vEsbq zYL{l+649y$fDReB!9|riXd!Mg# zEd;)DP&v6}O51Kf3(V)jiqL-q3W<}xB_6VhGda1QE?9rpvKHJ#Iu{S@ALCB!czIM5!bJs*^;5U1SjQQULQuD#W(HVjau#J zrxXXfdcElsUL5)R_i+`vk+GlqwEM0Ca~yM<_JC|sllRGs-vwj63a3yaup1cAz#ZLe zd<9_ScS=qm{vm-r6@k5;T&Z7DP!^|&FMhDsjTCael>Zx>vtd{vP7rpnve%1FOG~>e zSJh4$%`dxr`Eo=)V6O0sL)iw~FLSKF+y)Zqxn;d%ih4x$h49EoFGn`)Em_O@+OicNWD0a5XOO)^pPhrr?nR1+3M_vLMg- zzI@I6{b&|G4lq}|c#1f~_wg+Xk^v^gI(on8s&*g#=tr_gf>}!;GyCafPI&TgZyD(a zLDEoNhQBrx4WP@5fU=I~N5ec7v)so)#j2pSaNd>G)#3Vf;6z@(4)3jV$3Q$AGtdZi zTTOo2;GI=q{p+67>LsL{am(-OanS*o#vrE19pl%pB>Am>FPwh~7)vAk9eZBlIUFWs zfAt?9Yg zAW`1e8z^@6`=OprV{w=$bY#0b;z7;^mZ*+kUe%A6&G+Ir#D==KA)s-*vmgBZP8dDE zeqe*)1QO3Y76lzKTbUH@m3>dBPpJ8$a|n95w84FtlGA+(!v6qzQ$}2ibP7Y`X*~Ke zVLdI3dE?@fPwJ@8?R>|-_r`9?D`Y-9bjMEtwH-B7do@JdN(O>($+HB7z-Lasnh=HE~bR_B^wSru0=<)gRTQ;l=g!sfW5_vNMZZ=S?WuR-l z<_Wh7ZRdI-EK7j~wTiiTR42_82zzD@m$IVY#9sG>%l*B>Ry<5f$wR zWbMw_74Cg%N3wt%lilKh4N|xDt+cdB7XzeF5N~EMOr<^{d=iR>VP)&e-AY(?iDVhq zVe7n(Jm7`qd4X>Ex?if+f4;vV!gUspjtmRAS^7%r68qhCOsV_e2rv|1klps8Yu1`; z*Bc?_Miy%*80qsA-rcWf92fY_6`v!ny=M< zR+1w{-{{*hEODV4$O@LVnzv|YowEf_q@wg%$YVLSJOu~(k=fZ<--oHXPeiu`nFe?* z4)O%e=dbN2=O+dq%B%q4jvHZ;$wm*uM_(Xv1$JM1D-e@wUTE{Gc6<~1HSWFs-%NIz zYj=vyqBoDzXWI+-N^^vJI9H(Vy09nJ7*wE;S+DYnq5;Z;t8LRM#qPa#dscp@{hc6l zpoyDr(cw}K2(0p(9-LiMZU*8qZmf`4z1Q_0{nJ`s2FwG;v&+e6RutS0g2J*`b?InV zYdcfiSoh;EDVRq3fA#jb-{EtUaw23W4O1N>)X?$s>lIF21)B`8FXZ?2L6~I78HZiGAQU)frrxaYE+Fg#-9|I1{)O zQW@1Yk4flsK2FRqUis^^6Gky&>)pxDrZ!@9R?zO30$Xmb(s9KG?m{vr+chnHx0>sI zOeuyV?zUU^x}6b*3VX`drIY|yD;tTj1vSTH;lqZ9y{Mc3t=(H(cWGy1mcu=Ip}9wg z3b0#{7LnMSKDDw^G>`1JxJ2vPS;O`eI`F6{ zQ}l@fQE%N3AoBF{Nt6>M)sUM2tn{A}V1614A@gB`l6&;E5FV+`7&X{Piu+|zqoYK> zk3xzPypsEsu#$?WonYL%j(n;Ms`C>mOFazAYz1|!n1qIt44bT*rmL%~llU24dYZoO zd8*7v*d_|_3$YQ;ib^67rt-bQ;5v7ucoYoJ=lLHdT z;vrDF)Jo5X$JKH7=5rd-%St7-6d|bjTtQp1%tAhHN=ZVo)+Lg%F@NX9xomQa`9u55 z=NQEY%FYV5moKxc%% z))P^psGotP;IiH{9C8XP$zogBe;%Wfh-9NzsOEVL)bwvy=ur3VV8?~xu*D;5nDA%M zzM6YH2mHoj$Zl2_!^CWvb#t~t{HvriBd|#F{TzZX(D7fOO2patQ2H&Xep({s zPy~F@eQ_P$R_61!Z*P8308nYzx>yEyp|Ov<+X>;I>346!aZc`ldRem&UMqX+k9wOb zN88MxHFpx8H8>D<$LHtCVmjaHd6EII6h3`_VxEtgBQW2;Nf0Yuqu2p~jMkuKxDc`4D@5RpA8A{5h29o~AOxl_(mhK~o&y@m!wn$O3rio6ryICr_C;5uoUilPAV;}#+YGrz7PJd; zQ4+V%DirGz^B7vq<_gJlK!9~NQaviEp!(@hMjj8&wp*i49(qdccJeIDmK-C&?=sUmaiBaBmlcBiQa9be!qa1{!{>A;_h6cbYUuq+1vt&JG< zK2-ieUaG4o;B0D^buCR5u0^L15m-m%t-G>#-H7JG9+K?9@qVGix@ng}6 z{1t~{4iQ6bG=s`2?sD_98~~l#P0F-}H2NpkrN5xEDTkc~n)Lp>6j%plq*3|Vf24Vz z(+_7xA)v^)caKt>9>Cght#hjfnSgj-e0gqDny87xC@~NY!XVLW*Saj-Qd&u{vv^NR6k%3y*Me8Y9e)uEmLI`W|mlGd9B|LvK;^6-${f5}w;V zt;5D6`ICd?F%67`p0EgIP&s#vCDoEF{?z1>jn2o!*$GHc8#>8k$@|+~>smKJj)m3p z6cK~n_7G(d?=J-#R8iIRA>27Q0btj8$Gr93w5ch&m$k`2ZphrzN8`M~&|=qan(ZA1 zFNll(?t3yIf2b%Vr$UB;IuOwTpuq8@i8+LbNFLc2el&2HnA`G0s73@7+pV{*{vJpN zstOlU7Ia9}G{RV4lzF%*hW$JuGVT*K_3>&c5n@pUMFWv)lAqchDV`yTq7jder6;CN z8zy~F8ZY`XJ0}l_vhD>U)EJa0vZ^vbDdNkt{b-2q>uG+tVS?TsPMhMQV+P$gT0g^Z z^C%an2LEC5xMOm^5?XlP0|3d1@KI`&$@8-@+^3R+>y8(dh?+Gb;Nh?Zo&)5uIIH}> z&iGGS`j~oFR51`PEM_!pz+~gbEtZR&1K2jv&&mG!$-z;!If(#dNS_gMZ=AWDT3ijU z$7}J>b+KfMc-c4nehj5oO0>2~E*&qF_BtS3R)yP*AH!LXvWrz8%{_Lx)@Un&=HTZkM22?n zgxY*6Cdk?wShAeg;|3D@>|L8BDZ+v`QP=EzyR{~P@ab%R?!pLHCx3qBqv^3Ad&#GN{vo?DkhR9_ z>6V6EgVin)GUsl36Gb-G$F8wW5{t5Qaky2JjNFAF%hKc_HETQv3h|6E9f(9&52`O; z1N!Iv;Nh3PPx3haj~8Hx>x_sOnS~c*gZk$tGdG^rAnRvDW{8%&^mP5PBLh&26Q$yO*b*3r68SUuf@XhMBgdCYovwr1`_O(f_=v6 zH*-Aw8OECUd7ggPj?w}B$dI8%;pH38I{2_#FVT(IyZ8D{p6~H;J*>GD$~ox^B_Sm$ ze`s_nhLbL=&IRA7b>_-RaJGPbAWYy1&C zc?cTNI4oCRz*5 z{rrT?~i+c zuLxFBut-LH!`-=Y{JM8*_>0&ffsQeZ$&*WAjfmI8<;LOF!cb)G5Gs9a9UPJk^y$M} z1A3USwt?amGM*7sxhh3djuCem7*xA@N_bmIHyl>0FMqDu2%}GNj zI>@<%=c9}LKoPeljg;@sAiJ7_gS@W@?3U>Erhmaw@^n~Ll}nAag5IaWlRyABb*9q3 zY|RJrn)SN&zIly4?pV^pw%sC%H?UUZhA9y{Jn|%i!h?jEFH_$ZkQ1dxk-V$Y0LWOI z{f8bZKcI)jQUy=h6~EE`^i06-7x2B2%79Vg?$wS!6?~QWEiAj*Qd8^W%dS}}8UG|8 zmv?71@g%TCFr!@}ZBc0;|K8`hbX431`Ea^WUqt0!n^&Hf1==a1_8b}fBJ|FYWrqoqHqN)9%!+EM&Q&dDDC^!0p355dVnTDb+==qBf5JLAZdU|?t z!)|{0%%;lkkJJjcL2+`#HB^_7E0snpSeWplPp|tev#MCl0RI@mp@5&)wNr*5H*sQh z_vjOi*{@e;nPsaGFJ<4^cwwC!MDhOgrN&~a9`*6q&D`5^PqxKTGM#+5~33JXHyd*nh@d$^)!x8)$QvwO@8sJaK(;?_Tf#U3x zr+7pKu0CmH05ERIW!O6~K#Us#jBb;2)3>98@VU42{2aGl1OAn=#IpsP7x-CO z$+RY71nVOaR^W7!Szt6lFTeiWtCJ|vG>Z2Op)Qd+`BLM}kH(}43;gA;Qx!_~l%QT0 z)CT@y^)}Og&dfgsm&;nMKvO0VsOuYYw@6ZS#=RvJXBtpq{PNWFee6{D>23eD)@b8} zO$xyDxO2r$`3rL>t1Vw^OZI^fF>JR8Qa!tEBp>OTy$P9 zDehC3V}Y0sNwagrr>V@s4dXp~A^cTza}=M}7A`}ZVqRAd=|T~{SoqPC2{Q8rQe@l! zOJwsWy^AxZ$$@j%;GDkIhT@;a^?c24IJa&#eF)X3FP>b=@+84o%KA|=QEs_A>Tj1zD1GU|{?po7CJFbB~to?u-X@|da%@BWQA+;EdqH^Ei( zJ1-WFP^+_TzM=o)A!Y-FQ75|%pGJ@82&P1Wuy*m|3)Pa#%l+KCV=)bogMsIQI+i)1 zczg3QXsc3fJEEwyLce!Y^)Bo4nGoNmnGv>5! zH#_ipECH+k|8e!^flzi~|M*BzkrJh{R3d8#MMjYnLv|v23!<_!b_$WL>_ubANXVWr zV=GA!YD$Q)W*N&M`~JJ`(eu9V?>qnXJm#MJ+~=I@`fO+B19@Hs{gEpB zZOP|s{j#tD2Bz<#^gFnnZrQg(;Dzf)ap%NgBxhu2mF16Bm#nc*NN$xVu_*MuB1{iG z+Jb-9Y~=UPsf`pe>{Jb8ry{ZtTfodjl<e{K&opf;rJ*Hnwn9l0ig9Fvc#7^ z7Yo@HKU0s{?ra*`3l^Mm&htD6afmEkfAIb%V(O=TwLfxhA}f9H>q->=$S>?$2kUm& zYwvYKL&2j`;^CsP5t}SyAgS1Ye`tm=BBr9t%x2nhV;OJ&F$!me8SsGnpnG5S99gWn(7u^rtGuM_Kc&lHXn+&z>#HFkLj$u1d<;&h3 zd)k`(mOr=Pv~E`lG=P519bkeGzw$Z#V+gv*c6Tci|9!p2 z`b+n*x9zCWn~VAt4P0jn&bob|+-euC2!ZSKGPY(bHj@9ZxXg+@pGkVc3_zH9wu$Z# z8Wx*)XV20U^>A26-KDKY7AdJy=HD%{U!Z_|B|4gPvTX@YvXj*U zKpT1YYt`R$;;?K2q;}T(Ly*%su+l2ak*Kt+bs?JfgD@Rr&iTfK4|ctmW>_O+>5qXP zrF>Bi=NJFprWozepeXVE+e`l zt#zJWX4JZgZ9OAO1M%~}wjBVCFoFx&sd~-L%^Ce0n(iuXlA9OM7kT*)8@;ip?dfiB zU%czC{35vUZpR*Fl|`$PDJ$ru5$q~t!V(rt!xoyGFG0*|WG3A5e3o zdz~&TUwKx2b$A_R{)K9}iwv&t=Mt{dek_&(8lSCuzvcsUOa32u^N#0!)FI=Q;?7(| zRsiBtI2z%NeOKz*y5~dR8HrKdX_xh1%p;%`w^rfj#j3DutgHkb?*$*ZPp#N1p8V$! ztx5bn$iPY;eU2qJe_DumsQOdm^KJ9Jb=ScTnbq316Sx`Vug z=GPTa{(!_0VbdOL7NL7r8U_*J{Be*5-GsZl)_f6KqmV^ z>5&84Anz4lHw9*^tF(2=luI9^^%79;;>i23uv0nrY?wiIQT$^N zJtHWvu0jv&?mByJEfDpBynj!%M5204pcx{R>_0I3s&}3EE`eJ1yt5PKS4X`eX(`Y* zn=(-*G;2a2c7T$_>pzEV5Tj6W(3-kuS|Oax1=Vr^2~0aLRZK*wI^nq z|M@pssc7z$dk~O?{|#m!nmPnCK6b*foUabI!7k__cXW8j!@F+t6=mc0LKM>h%hY zq+xwZTS`Jk;epZSa0H)BO%z#i?vbfjdn4?K#~Gj{9DL+&gH;ZC-eoBH{HhcUxACbB zm%XWRfgE)Ky?m5Q_U;1tHMjQdt${QrbLmTM-8{WCyyDcd3BDOoFfqC

$1n}1E=alWj(>Er)CzpiKG7;lkbEb~E>Yy`kZ=7)VQ6FcdY_^O#LMUd1ZwBw;x zP#A>ToEvZ#n}5ab0fxmkk+RdPn~Nz{tFIKk_~AaZ(!+gW& zHbyd8a^6w_7V)!?@Qyu@Txip|+f~*MK{$?!9)$N(R*T9X zHOo)E(FiWcGb<^NMG9M8D|yg6;Nx@#9Bbh0IQ-WXaZduye?$!Uh{+EOtgP=+ZuTnC zQ*U6Em3==BIn-e|9f=&YWg`Ud{3{2nog zSfHx|bMPrL>TYS-mu4hN-F6SjoPV`}WGJNgVTk|#lOax?Q>(g&wDj=jM@UrbqO)>S zLGPZ~*UqTJTV!p1?kEz>e8!;odGqvM$U%KOMD0SyU48lC6wtY2a#g2epCh5E!(Ybi z?Kf@jH^kcnQAg;O=!qeGt{pkb!k$Xxq7F z%;hQE7jJoZ>&cx*!V3HKhHh6#{-9}@FE*B18uAf>1ERtA%UOB7J-`Fus?$%ZUfDZJH>DMqH~#2>9Ilby4N52aXQwPkgO`%P*2WNW>eMI)$W z_B$(i6kl+(VngDm<8J$rMU&m{K895>14NYfw3O%HKS!{T;?tKZbL0lw;l`ANa4P^V zu6!mfRycVFzXySw3xjg|FjSQ*!pvppw^{tOa`~z4)6&F|r>DEQAN7BM9F7fl#Y*x0 z2`(^~U76p7k`)KbYqAQon)dSwle<<8P;jfTuqU$cmx&C`#*wvg2Yui^x(V;w2orKfN5RS%$gXD zLvQXzkQoH}wgMP~79#As&rj@Ljzw7Fhf6*wVpkya`7L}8)Bn@$?c>kg@qqkj4?1UQ>g!xtrTdfCG> zyE<6^%G(#-?PQhTc=gHE>j)7>#zH#>l6SrGXJFqM#F>%mX5QE!m?Ts>P2^23mYBeH z`IhwbOC?W~3~*zRis@vDmlp1WMBX6@s_grouAkByvWV(wikuFajPkdF8g}l(ru_e$ z1%buGTdbh8i1aybJ`FV1eiMvJsqif;=aAQqhABnI5r!M?4POTUeDbqZh^b zSFkm5&!>!SUwI$clE0m9T}Z`gw{c++u?!3wA3)u=Yg-{3dq}h;B#<}nTi5Cy*|T81 zY$HBHtQUcK8Tf7_lt(D}boZNq%{pkmtSmB5W*wJQ!s_y?=%K@dh9^m!b%*P zUWLSfOego>hr*~09QVaJ85JAJSVTyGm+m@fWy&GA2FMkSqvARb{2frsBuQB>i4p@x zFR`7BXhM+vP0_c?f2Zi~S%)Y;pv#){TA_?@$U;wEMoKkL5VN&mA5Utw$+f}VatlWBkiU6&_&-- zbsz8U(1<;IJT#p(KU%XNj-%htrm`>NyK)95;_z3@i_d))$CFs>33uDSk-w!W?)7f> z+7OpJ8FoxVtETj>ufkNoFrk`b;!#d1e7V`2EtY=mue^d1X}p_TOlU6OzKlpFKL~N} zjWTOjrHEleE|Zk;uCLJWYrv@55AoTuDi}5@OYD8(@JNB1N?-r;XGhI=vvbtfSvZ@U zaT8IffSmD#M}{XepOmB32EJ)K>1F)@fKLZ+N1>K5XXjV_lkf#ZwCV0l7xEs(1Lrl8 zRE1ii7-$jES{H5L8C+jO+pQE=4hO^5xko)$N61}Q=dI{+1Z!7B? zd1@;W#5#VVyjXoK7P<5)8`D6*ZrPWerm=D6gH)r@m)D5j$pQNX!%BqF$9M?dcB`5U zA2~wNQ=FMo`fvrKu=9Fu2?LKm4% zzd5bbCl9YeL?6sib*d)Py?*8u)Z(mi$k$ooQ1?I-s_|IsEXSic3o`dv%s6>hhs$xZ zK6?qTdnq#Jlqlqi3jzl}(jAc4y?%6N)z`w;#@&4(wVQR?uB@wxS6Kd73dx}CewTY0 zntt!4Yc-~%Dk^jArLpHd!?ZUSPX8>Kkj8|Qxlb-e?lv2Ws_n^+yuzV&qyl|4K|}L) zo3A}1ioeLJDZ#s#x5}90OHFVNl_@jHlPMQLJ{*Pei|Ksd7kk{moucyEXv7{Rd{XyL z9{T2k)e6m$WmD{S?E{n7#t&hBP+1bM>U3Its9nD-+~Ov)^icuJ7}!b_DI6gLzBlAw zkB5oUbQ+LYCmz0!X z@%Tj|`W|o3N=MyZfBe5CSma6}si@XJrn02Ek}V}V2J&lrI^TNE)(BDdB1^db_nEuD zM4hoH#kTuLSZWSO_xzy>K5^A3>0A@S?w}2AjR85VT%NFg(FSh7>YT{0^QmEFbZCoNRf zO4ix0Ui?kNGv(;OzfI*Kk=HYQDdsEzeN{;aHxz}+;mv&ei!8wsGZ36>oVPhfMSU_$ z84-`4yNwOe2-_`waGRfgObb?~BWNS9ozw3F?m@CpM)5{HgeH7eu@bvW1vF?y6?=H($P~fELf~j&@j6Wx$8Jbxp_euCjAKkZ5oFE z@hU4TtD76SMxz7RTxzUY(_*_b-KY$f z-IsMkYik%D7}$=n_2XxC`s`;&8DlW`fy{SlOVTFS?2bBdILN z+lI>SHbf1^|8&MaW1rpM)Zd_-uGZVP7NnUw?~L7!QcQaOyi-Te{5VAutA03$bhoQ{ zxM=I0r~t-T-u&3N_2e76>KPMPvD+o6N>2I28(%9cJMV48p|>3}oV+ram{a*vQV41Q zs*zX!ML}50fPk&G#oMJiD$7I_Z7Y%opls<+b8m;+xs@Jcq4q%dj!be*K0XzTjR<6) zVWcv6+^-o)8O)JCW-j8Ijo!BUs(swogai{J#%e5*O{F3u(YBl42@6GH<&UMr>xtuO zPCup=YxpP*WNtA`eHVW)l*D86tLt5Q_*?w^SaqSGeA}`v6@nDc|g#b=h?&o!>0J%&x(oz?EyOZ(ih*cy#TJk<)8DmVo~Bu^mc&P5B8+ z1H)3rj|!zu5=#j%CNaG?SebG@%4yuS@jF;XcxS+0JDKEyc?03eLh*ezQ@{ z>BlE#eTJC251<0bURC`^RYoPTDwwO;g7(G)SIUX*lJ2xmt9Ki%dl3)dGi7<0tMmsKJx1vsr4CW!n88gSCOO(k`es#<*cazTnU!!#yKW zwbgg$8IC5n5~19M-OM8*Ew956*+t)8daauVm%qQKuye=WBH{cWc2!qMx8P|TmN4Ak0c`Ru@f93tN@d5w?iun@io@BFA_G1GzNV9)^hDx9$25d@Lq#ms@ zPOnDe*_8@x%Zwdh4rnj=rz_o~l9(=NYwFTRaDSpupEO>%=0CGQ2auAJnum8|cSwlA z)nDQhE6}F8Bz~j_C?1Ah=(^Pl4>snzt5|LdyrhqC^q}rqF0u?JxUlr7K85Ccos!z=?U*AKCXL60Yute!S{46iz## zo)P;1L%iDFXg{|_$Eu>7+Jg{$;+`?1j?~%ym^d*Gq5gvCA+O@3q3 zKs*uP6uku;ql!43cDE)!@P+;_%+C!d43my^Ba$bnENRT{ni^FGn6@?lyU+vOgVFS> zy?>&(4TW6Gh;_Fm56or}Pr$_ks_GxgT3-F*S#7G*f1_so6ooUHA+VrAs;|WRvA$OV zJoX**1A{s3oEy=22Lj*++_)xkSK7SSuXRrCJWeK!?@<`1);>5>dix7w+)o$mGv(;) zMh-=kqEIsn1BdF$3t|SlQZ80g!+eU?Fi@!Sn#j8T`{_&NaCM;;;}Yv;UMyqbw=+i~ zgAJyK;g-0?KXh+8gUBVU8HEakb@3oB$a_w++-P{5vT&e+M{OklCSNHl->7Ino7Qxu z9cMo5HtK^qsAlCBjQsoQm0>IAirS1aYU3R(~+b-@?u_23fQD zM_EFWkwVCv)ZC8odJF%}suQ+7m&feooWIN8GsDN`Wh!X%+nM&~g4V-N$e7 zHD}Fqw6O$h!a+P>dh)tX9J`0Fc!kH6z<&i7;b^WnEQz zYVAl5`}P>@@;3Redrnc zO8!HW`q#o{4alB5`)-&ZC^RO=htjPA6n7F?jdFRvnl2ebofHyYCl`2y#fd%DFGtJ2 zth(RzYm2A_gak5H*KTXOch+AxMhpg*Ea;j|q`NTbPR#g*ka||a3%VJ*3WtVn?@ZT3 zVjZt7Z>%Pk)=p)YieJi_=$>)dWFnt0^&KgtGC#XL-^4fRY$MA@VRb>5rT(G9QY$}Y z@~%7f0HrO4>Q)w~H2MLs^yGg7djJ4p`Ki4-wpGmWpBM5jAl3;~ zWq01ocQiyUBI^MdsF>X=0}xDRu6@_LNqa1VytR!DF@5PN{AtS_=_Be0K0I1xE4yYL zHg^&L;?ENYWQIMfyZ?2wY5MHniAf5H!5g(HoYKh+s!325%>;o!p_r6UN#gnuApPlm zp9wNw0AR#LC~$rVbV{K|9s(-vfRC5AJsq-WXAxQNv)%0UG+jI*{)*+Y-x; zVSv{M(s=#L&-(p4Bx_S1zm)AF2W+yF!U59%=;l_uPD7`Eb(`XZEBEazPYs>z-gTvH z-m6Z*QKi-fl#48b>dyt*H?t+-X&u}S;sn#jj6`toyVDRx}1f0xe4{y<8RPm*zqg zUTmPcY7IfSTckM@7Zf!|;fL_qDqstMADM{gS{&hFjh6k1mRJoMYQoDHRYlibr+$+sQ}Xg4M$Q6|}8 zt0|yR%prB&dZaceV)(&pdB!P#^op;y-Me6xK0-uK2NV-P58ft-dp)Pygz)>L0Pqov zyE8ZnX#%87072+(Zoy#Q%Y+W@8?mnXTOu2bNnsZh^_aV5M-tV%0N~!cyrx;!MW(g{ zXlMu-EC-JqwdZ249*R=*{HgmN#jl*P+oJgE1wZV#Gw=;Sz9j2|sSI)Y>B5`$r@q4+vtTSU5yh42{8TxIraW=kYg0^N+sLx~bxqQC82)!R3%OaczC_cO+Q7Zm= ze;ho%?_+xu1Z|;_@T=Qy zk^3c#(LTmFqpUW$i(x;=+_xqcR8E<#_yJau^Bg?0I}d6l!fUrRTK%w`KEuBr3{9wh zd0_T5JO~MUULo9Il;f^Ug|44d{vf$KCvmeVh)|9qlc?6alLf`}0i25vozYUL@d^7s z^I9D>FSYZe{!{(heoeYh>Ax-x->y6Q@kEsDfFs=XK|q+N*~Q(keFCaUq0%?Sb}c=) zIp>anuP5p37+q8VWww2cthzeD;lTWwkj{5tLoAg4d3(&yxf~+o9&w;=;qKLLq>DwM$UkpCAarRRI z0S)g)O(=Nwcsxc({ymWK&^!yOVXBFQ6Zc~LvdQMlSFsGJK7n!I)BN=yDyrSII&HD} z8c+CFB=oyJc8}^}U>ThZi5wnAsDu@(@UO?6Z+9HiymK~Lr29aC2`sCpbI!1y)d+VM zw;e;3ilWU(H-U}#&ISX?PxI0J=oa%1Ceh9|4!0$#^Dyu2f3V-KjI;HLe)qBLVf(`t zGX+&WeV3@am;QJT3I_ZACg0FwXAT{tYi?oLRKoaAQ5|>v$MsjW@Dum2f!__W;`($v zre!i~&)7j2Q?~Ysop(zri;2&AhhpGnY?3$KGb?6>j!7# zr~TL+eF^^0UOU)>3tV~g22iY=qZWiQhj;*@4U`FipNr_7tf~FP?bl>vgAq?RwHz?NPW^H%m zJIQn?4^^S$XCAjyd)-3fF1<(`iA?-w5-66oF`2y{OQ|x`)Dk6JKl}NrIsXL<*15UEyZr_S_&Yn@Ig47``1D<`Y(7d(nLHzg;Q%wP& ztOUS?w*DAd4L0ui|6|Tfbp!nBeioSXz#rMKznDbe(%VQ*8T)X2yXtR>z0iYD_L_FP zQl82GHdv{XY^4UqzYm^@(69XKC6DTjUcYfCR*44pj8bdsoR>h=Ylac?AE-AraLu+- z?adW8Uh_vt7OhFv3&DO;op}%1_;>Pyzhmx1?3GbtWVOoCcpQzVE;c-rP2-b`{G_KJ zQGJZ!h;4eNep)RHqek7g#GVckcj8lf%Dk8VAF3jSpC5|7<1Wf&&y>wKTQ$DtE(o(~ zlpP3iuGG`*r`CQbyixZEhspWdT-YF;+-!@WjP(0Qn5z?%Y>;hcdysOA`S=zt%zDi+ zZa|jm#36X36o&Fju;nSZFb_h6T!-i2+d9znvKd8S?X8-O!j^A|)QWCy#N?Xe6c^}WWR7c6 zv4M@(5y=<-Fmo4^wrcY-4h=Pzj?1-v%{GR`&F0y}vuCL_AWp`;2lApS2P0!!`8Y8# zf$cslScBMrx+`f=zFo({4v6HeR3HeAzrIPZRPiH1O*}W7&4^VZ)RT1>geY(1TP?QO5ejwS8ot*_;L!Q>A9geM7~)+%|NMy2m2V_J zsEUniiAG#e#-_hRO?zVp!1ht+Gpq6bzBk}viDv}f7XBSQz>B3n7zIC9q)&Ev-E?xi z6E-j0S6@icF&2q2kOCw1eKavoT+8$?8Q0kU_?1H3b|Lp#zR!yo^L_;Ua*#!vE6|0G zqQ=s0RZ70FtFGwd&hY90#^+aF{>^^BU+B<~3W*nMEW-J(CN4F-? zykK#Xow6OsC6{^Yz%4FKnskh!`My`QnrGt?2*cQv&y9}K(*+je%XawLYT$T zx5f@(`aY&4JTX&l;LY>r&$*$?z3rOR)b&DuJ#SSqozq0*BzmOhL?#hBZ8&da3j(E( zv1JSXQp@>sGvaBrp@pY?lLZ9+$pU=9VHiz**`EyhcYu4J;VAWT7uIaBrS^mC2oCF~)hN6+%jVEH>r+9~#A`1>)ofA%-4<2_!Oq(H zRSr{iQR>&07Weo$RxtZt{GzxXB!WWkZ9fxJr@4n>ja4~^*8?6PLhH9+U?l0{$HWS> zyvz}U6w2hc-+908#?Q%O85d%&I$#A*j7AzlfH@p7YN@|v5Bb2lg74ZVdsHidK-m#N zLU->ns?AxOjh!n8X&(Gucx=aD>&f1^R$zX<)BdaiuhT8kMR$uTRRQ9OzBY<$g4#?n zR5SJ|kbd3~$%l=~K_ehDA# zC8~_5!{>A>b)l4kY^qiRVm#ZHV~a}jLX0xinF82*qHQhiGB6O;$EmYUF>?_HdB4Pw znaczmp7+fTp5ASMxAfXaGGyCv04X9n`=?7_-b_pC`V%j$0I5GoT8{aELy9G=N7m;6hPpt+=wkH2>N2-2%??|lZs+uh?(12!e5qW z|DcGvhae9K70`G%Sikc!ABMu8dn6LTX#hPxFo@`ntxL}i3mITPYu8No9XyqjDhL>W z76LFGZmE6t#g5}OA%xy=Pg3)(ZlItcHtw=(SJem|kUmLI)vT9K-AfY-YA?2rF8W)L zt{~{-wW>X#lpEY9z$;^7Y@p*WqsB6b)*+w=sTYZ5~dl;6_)+C^b}= z2v7XVzQi*0;OyJM9&i7Q5A*}|f}oph|D;~iTXQCE<1?&i_ui+5F0_WW#Cir}z*D?b z7a91ztef?a7WsW&0e)^1ig-wjAc2+fjqvhI-h)fky0qguU+Z^yImv*T>J0w|ZH*|v_=kV78;viNd=L3!+JP4x# zi%yqhwWX}zvSN?U@qX?!`dTw%hMl&Kau82qgUz$V^RM9C86augdN*c;Nlr*5qp&Ll1bmaXKPuy!^mu@2HJ`J-1`K zmV?ZZ8t{-&@;;l@f9A@%L0$awMlgTNxk3emeHk-UBQ)S{NS={7J#!Yjy|6}ExJOK= zn_IS!m*nur(+>(xhvB6A>gT8C;NfD7#j_o4P*zV5)OW@lM7RxBYqHxDho&FQ`p)U6 z_-})@(5iJB0ruAfW3#o(Wn$-=YfydysN8zCm`!Ap7o+L@fIqv%Gk(-d5ObHYly?K@ zEI4-=>Ii$0CYLL+?;Ck_@w<gF*6z?7NOE+DwN%(9G?6d9QsdU=^ zyw7LdGQzI$=xu{{s|EAp-?q`xJHMZARS~wmV-KoaKeDQD_1K@uHyD*VeujKLo`c{W zH^%@4a`)PAz&WbfgiB)4MscC^U`P91Oc#feXXjLnM&>Sn9n)sUBJS%3ll>CCt?k?7 zqJut(0j5`&79J_Yo`s(RI2B`_5yryX+Zq=(@oK0k@#ye>^z_@LyG`uCC9n)+Grr#u zbuvVGi?q%fsCfZaV{D7LT5kfItw-&;dkQ`Y{BsZ$YI+fVL&{V?di;O@0n$6Zf$uHD zi7-A{uAbzWe0S`jDyO!bp$eMa&{hW$xH#yRhLOYWz9wO8-KRQE#c3X4W{{$?#3|pw zf%kZ~q@=FKQN?oYa+rGep0k+NJEg{(&9tYle?636Yb0Lm zr}qi?2QhxFP_tq*`(Lt(Dg*wGRVu(@m+)Acs<1nandNzsEaso85bRn3`%XN!y&z@| z2nu|+a&GDv>~)mlJirl;Lr8$-@3q<4-DEy++Zi|eFOhquGhkWP)rjBsiURb(K2F~A z`VshBLYOju`AQUdnlh_x8{Oh2aESbSe9tD3U%Tr*qv=zIx~=3J`!lX0X}y4|c24G= z6O>EP&~|c@ZA*Lpw9p2JYAdvz9ro87g$!+?s+@Oo(wTUZ!rXgb5|m+nO0+q!E&Is|^H3wIxQov?@V?8MdQ`Hrw= z-gVy7M4}nq4%Mmxk6go{+{BRL0StlhM;o;;Zx~ih4g4SjB+hu63RWi|K3d+>ainE= zdHhjbKQ_}f1O16VxFrb&1_aAH2eHHkWB}MSE=06|ea{QqWy+fJWWASjbqV0Le0 zR8+*$*w5>Oz!4O#15avKIpQn8zn;Kn?i|;o$-pHdI(w=WN3px=19@V7R>Nbd#=j{O7 z#zc8xH%L}xakcvF^%_skuT85EwpeWKQZkOb)*5qR3ZgxEY%XXcMVcJOE>MBy;&q*e zFHNoy#{?H+b6$@8y=2!i)xFFBnUV(5s6HlyAa&LK=g2V9hxm1#e7jEFnV|*Wog{X( z?xIwQRnsvcUufO2nkGdzFB>TM!wuI4aA?#9Ldc@^&Pa1j*E;{1-&CHpa_!1I^dX-% z@`L?{BY$NR=m*MV7z3XWPH3M3Rf08}AoG>4s+erQ$wBL~+WatS7fArO#Dpj>lQYj@ z8FOqGC6v9uRpk%%bMdMVdxhZZMM&k9>EVGhWbQMra+&$Fx@CEx(vAR70)6zKWm21x zWUQ}%A@x&P0#}Eb%+>=HMi*Dhgeg)j$FlHmHFZIPk&nBQQKXECH?<+sDayZ5|K@k(dnZ$@GzkX&w{#b=4Ny@0yd1#P*yvQ57(BAW+ zZF~x=k~UDhG6WvC&9ke`ZR0el0s@qrJ%W@?0$S}j#Q*>ZG-leOj;Qgg+2qIg1J%c< zf#eu)z6gQ3e7G^{v}!vGL*OZeH5(;Dt%2UQC(W~;M4%d9%D((U&=#bi+kVyGG6Add zDXG~IPe5I1MM8jBY?{|umXI2&lyGH2Vcno&OP@p1P((?Wat- z4=%%2PQQl)PU9dJ%jKG0!Cs2(-PD5ocY*L+ViaC7G!7>+oTGgc(J`1Qt^geNK-2jI zjp*Y4Mv~{L+x3m|kWjVMRXNBnLhKpQesdn|aC%*-X)~lXlJ_Y@D$_yDD{#qI$K8a< zO8nNLg9>kcP~Kjm>_LLy^;CYdfQFBM{&*{`q|hP`q*3XuHNESyQvzPC=N$)WaV-4c zrUjPq7$({(Q59Sa8Z5w0_Wj+DGU@{)S*RCXMI*)gpM8zH@Eth!e|y;@8T1S=XCR$| zkX@8~P!b-1J4^IHV3oPUApLqN{^bWI!>uTIe?E%m>w@>x`D-+FqnOtW2wo#^*Z^1u z8lxfzs_s7gIv;UOMG=J(8iC3LB6-$ctPRoBzm_u6YCF=bpqVj|sx%`vvwGvWpk)0x zC|Z-$eR1kXnsGw5By#^g(&9-FtlG&B?2?~9ugFy;d;-cN0J*qsGo)!RjmQ0 zI%eSfRxSyJNy6bKh39l&PpHXNA*>jX|AIzAd)I4xueO^*@y3lOn)PdpeE;QgBFeU+ znWM{-3yo0r0vLbTmPTE>Q%bB$Q@y^Brk>zc)$E^wFF5)&O%n5bBa2AqvF{AVhJdW< zAIXpEAb|(F8BjJ}+e*PkAd{(kPe9llnz}th01>iikv@qHqtIYA&m?Iih2L&}X5+N( z3_m|NKMO(p5G!R(V|^o)fYufxGJYJ?fXBs4Il}N!havn*23GwyqHM%u%hq$###|~b zXRwt#n6IeF1!lEZy-_R<5;Iqi)UT~^BCXk11}frNAu*b0tOF+)w$=#>b;#lW1UJEF zN6Ck(Mgvke3c7F_jb6p2&Z&d%$S9KK8j}JMPM7Y(wd-KNx9NIS!p^axT;wp>79R_- z3APCP$@xdAZYn552;pDPgZ~Y2+YUXLl>qt(Skys?$2My{`{814g^-Z1QP>HxhKGle z)1@+*+lurGCrP911|Et&H~lttW49l}Am$PK3OE<)YF^`rrn|-0244g2(;;Dy6-3xr z$TL}`vh;<_dsR881LlXU+K9YH5_0Hb!K|RypU7_E2s$}F99*Jz|JATk9mJA@1(Nws z3|R%n6dpgvjt#jK&9kyU8Zbc!X64uWQK1ag%kdmjY2ch2Bg;6PCXV1}`&cWUG>h1l z<%(@peQf+}aGGV$1*h8}jXj`I-oeNnPKQj85^xVv+ID5e{wY^V9aKiSFnh2Z3yl_9 zr>_6Kg82e{*%snBx}+~a(!Q-8-ly{X>yxbj?@4um@p(2HLadd|x%`3;siOa>zC5a7 z6Wlpesjd@`K!ihNlJ%R?GDoV+!R!e&gX2pBVDlytk;e~vY$?gO_z(R7zk_U-uk{C? z70grZJV#{+;q$HTo$9S*ta%%%Pac9Z55QcJDOC7oFC7Z0B5-JI!dJbfycw+JB1 zao@78DgUozx-~@*PS`M;;1un$5;XuRua*u%J`u@YP~s-u8n-*tET&W|$zUiuaz+DF zoc57UvBm0%cY#x*iDhccO0jZC&~G~)5B_z|-*D@=Z;rBS`EmBH*h4s^rC?~qP(l+C z1`m^L;o0Ch83Nx&py@r1f$McNbLk;Wwh&IBr-ZK72>D4234D7Ffg^3L&>%W&Z|LGU zZQy;VPWZqUJ~I$Dc5(l>cQy->#(UxD%7_}0O9)B2`6N;F44?y5!a8a=&X~QvlgiMi zaNBr9Q(~pT++m61pSZG>tcD!wj2|a|EU(#seIW+XLErpY6oyaY;$qIX?tdobC8ek!^EL#_4+18$m~se9da0iZaw0C=2fn7!@5uM;L3kI6>p2J>*`sx9V%S`aMzYLiGJ5;aTklCi~*f%)ad%J>t>c7B)Z@07rDcY3H)LEO7a7Q8IyMN>4kXBw#Mx>-n^Tt7`e zAXpmri^vwilROe>0SR|_4W`A)n4idO>`}x?Ce+=!p{k?5Y%@OsM0%FCsZUz5#Wr9F z&D^@%=Cuj7UiG`h?rdQ(#w*uqlt|}+VPr2qeyrEc8nERZ4q7r%5d1|@C|$_n*woA6f^S+_Kga3 z?RM&rdK>q?f~CKwL}^{&z=}G|4*nia*uxUh{ySQEGi93~EHlUPudq%$_V-UPAvZDe z=J;GXhl;=ufi7y;jcqmeXBaL8mmd z@JK0`Q?U4LrZyo{U8z5P!=5-5{7x}bbcdQwc<5T?b#@)P1H$3T+l}Qltn;6r!z9@s zZ+c#FVe#msZ{WjkLoa4i&b5y(i$7_p^mzN_`MLIaUyCqT5MBkUTmcO~aWRBPWjS-> zHj{n4Tj}rqX6wo2N$d4RljfC>uE>>N?DfYkuiOc0i5o~X_;q=6zZ%AbP}S2#=04;g zM1pdbjBj;i4D<(uPC-+U_>Bw_{@d~S5!zvl0L-tPwy1UQ#G4^SmK&!9=L8ZEiFyhhWX zBSfs2y`ytl@MW+TN~-_MwdP@18^f}31Cv3J;m z#l&YK&BRR&3mm$CO*y#1-wn4EhPG>2QC>6hI9{{99yal*^seD~&(#H71sd7(@SMbK zr3uG`JEwA9WQgAl>z{7ZwJj*9%@k~jLr%j=sKz&*@RRub_3PKPw%0X=r19Z2+W`pH z02c7=jN(R9UCPq9eowlKT&XiG2SxAid&|NGGrEXCl~X3pxALSS}>^-T|ZeBn8=iWvHtZ<1mD4LFrK8

5#^z5M9WYfd@sY}zipZXtom;< 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 B?92cF literal 0 HcmV?d00001 diff --git a/upload/admin/view/template/extension/payment/payanyway.twig b/upload/admin/view/template/extension/payment/payanyway.twig new file mode 100755 index 0000000..45b0db8 --- /dev/null +++ b/upload/admin/view/template/extension/payment/payanyway.twig @@ -0,0 +1,237 @@ +{{ header }} {{ column_left }} +

+ +
+ {% if error_warning %} +
{{ error_warning }} + +
+ {% endif %} +
+
+

{{ text_edit }}

+
+
+ + PayAnyWay + +
+
+
+ + {# Вкл/выкл платежного модуля #} +
+
+
+ + + +
+
+
+ + {# Номер счета #} +
+ +
+ + {% if error_account %} +
{{ error_account }}
+ {% endif %} +
+
+ + {# Код проверки целостности данных #} +
+ +
+ + {% if error_integrity_code %} +
{{ error_integrity_code }}
+ {% endif %} +
+
+ + {# Сервер платежей #} +
+ +
+ +
+
+ + {# НДС #} +
+ +
+ +
+
+ + {# Валюта платежа #} +
+ +
+ +

{{ entry_currency_description }}

+
+
+ + {# Статусы заказа #} +
+ +
+ +
+
+ {# pending #} +
+ +
+ + {% if error_pending_order_status %} +
{{ error_order_status }}
+ {% endif %} +
+
+ + {# success #} +
+ +
+ + {% if error_success_order_status %} +
{{ error_order_status }}
+ {% endif %} +
+
+ + {# error #} +
+ +
+ + {% if error_error_order_status %} +
{{ error_order_status }}
+ {% endif %} +
+
+
+
+ +
+
+ + {# module_geo_zone #} +
+ +
+ +

{{ entry_geo_zone_description }}

+
+
+ + {# sort-order #} +
+ +
+ +
+
+
+
+
+
+
+{{ footer }} diff --git a/upload/catalog/controller/extension/payment/payanyway.php b/upload/catalog/controller/extension/payment/payanyway.php new file mode 100755 index 0000000..60ec208 --- /dev/null +++ b/upload/catalog/controller/extension/payment/payanyway.php @@ -0,0 +1,672 @@ + */ + private $orderInfo; + + /** @throws \Exception */ + public function __construct($registry) { + parent::__construct($registry); + + $this->initializeModule(); + + $this->orderId = $this->getOrderId(); + $this->orderInfo = $this->getOrderInfo(); + } + + /** + * @return string + * @throws \Exception + */ + public function index() { + $this->load->language('extension/payment/payanyway'); + $this->document->setTitle($this->language->get('heading_title')); + + $data['action'] = (self::PAYMENT_SERVER_PROD === $this->server) ? self::PAYMENT_URL_PROD : self::PAYMENT_URL_DEMO; + + $orderTotal = (float)(isset($this->orderInfo['total']) ? $this->orderInfo['total'] : 0); + + $data['MNT_ID'] = $this->mntId; + $data['MNT_TRANSACTION_ID'] = $this->createTransactionId(); + $data['MNT_AMOUNT'] = $this->formatPrice($orderTotal); + $data['MNT_CURRENCY_CODE'] = $this->currency; + $data['MNT_TEST_MODE'] = '0'; + $data['MNT_DESCRIPTION'] = $this->getDescription(); + $data['MNT_SUBSCRIBER_ID'] = $this->getSubscriberId(); + + $signature = md5( + $data['MNT_ID'] . + $data['MNT_TRANSACTION_ID'] . + $data['MNT_AMOUNT'] . + $data['MNT_CURRENCY_CODE'] . + $data['MNT_SUBSCRIBER_ID'] . + $data['MNT_TEST_MODE'] . + $this->integrityCode + ); + $data['MNT_SIGNATURE'] = $signature; + $data['MNT_SUCCESS_URL'] = $this->url->link('extension/payment/payanyway/success', 'language=' . $this->config->get('config_language'), true); + $data['MNT_FAIL_URL'] = $this->url->link('extension/payment/payanyway/fail', 'language=' . $this->config->get('config_language'), true); + $data['MNT_RETURN_URL'] = $this->url->link('checkout/checkout', 'language=' . $this->config->get('config_language'), true); + $data['MNT_CMS'] = $this->cmsModuleVersion; + + $data['btn_confirm'] = $this->language->get('text_paw_pay'); + + $data['confirm_url'] = $this->url->link('extension/payment/payanyway/confirm', 'language=' . $this->config->get('config_language'), true); + + return $this->load->view('extension/payment/payanyway', $data); + } + + /** + * @return void + * @throws \Exception + */ + public function confirm() { + $json = array(); + + $this->load->language('extension/payment/payanyway'); + $this->addOrderHistory($this->pendingOrderStatusId, $this->language->get('text_order_confirmed')); + + $json['success'] = true; + + $this->response->addHeader('Content-Type: application/json'); + $this->response->setOutput(json_encode($json)); + } + + /** + * @return void + * @throws \Exception + */ + public function success() { + $this->load->language('extension/payment/payanyway'); + $this->addOrderHistory($this->pendingOrderStatusId, $this->language->get('text_payment_processing')); + + $this->response->redirect($this->url->link('checkout/success', '', true)); + } + + /** + * @return void + * @throws \Exception + */ + public function fail() { + $this->load->language('extension/payment/payanyway'); + $this->addOrderHistory($this->errorOrderStatusId, $this->language->get('text_payment_error')); + + $this->response->redirect($this->url->link('checkout/failure', '', true)); + } + + /** @return int|null */ + private function getOrderId() { + $orderId = $this->getOrderIdFromTransactionId(); + if (null !== $orderId) { + return $orderId; + } + + return $this->getOrderIdFromSession(); + } + + /** + * @return false|array + * @throws \Exception + */ + private function getOrderInfo() { + if (null === $this->orderId) { + return array(); + } + + $this->load->model('checkout/order'); + return $this->model_checkout_order->getOrder($this->orderId); + } + + /** @return string */ + private function createTransactionId() { + $date = (new \DateTimeImmutable())->format('YmdHis'); + return $this->orderId . self::TRANSACTION_ID_STRING_DELIMITER . $date; + } + + /** + * @param float $price + * @return string + */ + private function formatPrice($price) { + return number_format($price, 2, '.', ''); + } + + /** @return string */ + private function getDescription() { + $clientFirstName = isset($this->orderInfo['firstname']) ? $this->orderInfo['firstname'] : ''; + $clientLastName = isset($this->orderInfo['lastname']) ? $this->orderInfo['lastname'] : ''; + $clientName = trim($clientFirstName . ' ' . $clientLastName); + + $orderId = isset($this->orderInfo['order_id']) ? $this->orderInfo['order_id'] : null; + $description = "Оплата заказа" . (!empty($orderId) ? " №{$orderId}" : ''); + + if ('' !== $clientName) { + $description .= " от {$clientName}"; + } + + $comment = isset($this->orderInfo['comment']) ? $this->orderInfo['comment'] : ''; + if ('' !== $comment) { + $description .= ': ' . htmlspecialchars($comment, ENT_QUOTES, 'UTF-8'); + } + + return $this->validateString($description, self::DESCRIPTION_MAX_LENGTH); + } + + /** + * @param string $value + * @param int $maxLength + * @return string + */ + private function validateString($value, $maxLength) { + $maxLength = max(0, $maxLength); + $value = $this->sanitizeString($value); + + if (mb_strlen($value, 'UTF-8') <= $maxLength) { + return $value; + } + + $trimLength = max(0, $maxLength - 3); + return mb_substr($value, 0, $trimLength, 'UTF-8') . ($maxLength > 3 ? '...' : ''); + } + + /** + * @param string $value + * @return string + */ + private function sanitizeString($value) { + $decoded = html_entity_decode($value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); + $cleaned = preg_replace('/[^\p{L}\p{N}\s.,()_№+-]/u', '', $decoded); + $cleaned = str_replace(['&', '/', '\\', ';', '%', '#', '"', "'"], '', $cleaned); + + return trim(preg_replace('/\s+/', ' ', $cleaned)); + } + + /** @return string */ + private function getSubscriberId() { + $email = isset($this->orderInfo['email']) + ? filter_var($this->orderInfo['email'], FILTER_SANITIZE_EMAIL) + : ''; + if ('' !== $email) { + return $email; + } + + return isset($this->orderInfo['telephone']) + ? preg_replace('/[^0-9+]/', '', $this->orderInfo['telephone']) + : ''; + } + + /** + * @param int $orderStatusId + * @param string $comment + * @return void + * @throws \Exception + */ + private function addOrderHistory($orderStatusId, $comment) { + $this->load->model('checkout/order'); + $this->model_checkout_order->addOrderHistory($this->orderId, $orderStatusId, $comment); + } + + /** + * @return void + * @throws \Exception + */ + public function callback() { + if (null === $this->orderId) { + $this->sendResponse('FAIL'); + } + if (false === $this->orderInfo) { + $this->sendResponse('FAIL'); + } + + $requestData = ($_SERVER['REQUEST_METHOD'] === 'POST') ? $_POST : $_GET; + $callbackData = $this->getCallbackData($requestData); + + (isset($callbackData['MNT_COMMAND'])) && ('CHECK' === $callbackData['MNT_COMMAND']) + ? $this->handleCheckCallback($callbackData) + : $this->handlePayCallback($callbackData); + } + + /** + * @param array $requestData + * @return array + */ + private function getCallbackData(array $requestData) { + return array( + 'MNT_COMMAND' => $this->getOptionalStringWithDefault($requestData, 'MNT_COMMAND'), + 'MNT_ID' => $this->getRequiredString($requestData, 'MNT_ID'), + 'MNT_TRANSACTION_ID' => $this->getRequiredString($requestData, 'MNT_TRANSACTION_ID'), + 'MNT_OPERATION_ID' => $this->getOptionalStringWithDefault($requestData, 'MNT_OPERATION_ID'), + 'MNT_AMOUNT' => $this->getOptionalStringWithDefault($requestData, 'MNT_AMOUNT'), + 'MNT_CURRENCY_CODE' => $this->getRequiredString($requestData, 'MNT_CURRENCY_CODE'), + 'MNT_SUBSCRIBER_ID' => $this->getOptionalStringWithDefault($requestData, 'MNT_SUBSCRIBER_ID'), + 'MNT_TEST_MODE' => $this->getRequiredString($requestData, 'MNT_TEST_MODE'), + 'MNT_SIGNATURE' => $this->getRequiredString($requestData, 'MNT_SIGNATURE'), + ); + } + + /** @return int|null */ + private function getOrderIdFromTransactionId() { + if (!isset($_REQUEST['MNT_TRANSACTION_ID'])) { + return null; + } + $transactionIdData = explode(self::TRANSACTION_ID_STRING_DELIMITER, $_REQUEST['MNT_TRANSACTION_ID']); + + return isset($transactionIdData[0]) ? (int)$transactionIdData[0] : null; + } + + /** @return int|null */ + private function getOrderIdFromSession() { + return isset($this->session->data['order_id']) ? (int)$this->session->data['order_id'] : null; + } + + /** + * @param string $response + * @param int $statusCode + * @return void + */ + private function sendResponse($response, $statusCode = 200) { + http_response_code($statusCode); + + if (strpos($response, ' $data + * @return bool + */ + private function checkSignature(array $data, $callbackSignature) { + $baseFields = array( + 'MNT_ID', + 'MNT_TRANSACTION_ID', + 'MNT_OPERATION_ID', + 'MNT_AMOUNT', + 'MNT_CURRENCY_CODE', + 'MNT_SUBSCRIBER_ID', + 'MNT_TEST_MODE', + ); + + $fields = isset($data['MNT_COMMAND']) && ('CHECK' === $data['MNT_COMMAND']) + ? array_merge(['MNT_COMMAND'], $baseFields) + : $baseFields; + + $signatureString = array_reduce($fields, static function ($carry, $field) use ($data) { + return $carry . $data[$field]; + }, '') . $this->integrityCode; + + return hash_equals(md5($signatureString), $callbackSignature); + } + + /** + * @param array $callbackData + * @return void + * @throws \Exception + */ + private function handleCheckCallback(array $callbackData) { + if (!$this->checkSignature($callbackData, $callbackData['MNT_SIGNATURE'])) { + $this->sendResponse('FAIL'); + } + + $this->load->model('account/order'); + $products = $this->model_account_order->getOrderProducts($this->orderId); + $deliveryPrice = $this->getDeliveryPrice(); + + $orderTotal = (float)(isset($this->orderInfo['total']) ? $this->orderInfo['total'] : 0); + + $xmlData = array( + 'MNT_ID' => $this->mntId, + 'MNT_TRANSACTION_ID' => $callbackData['MNT_TRANSACTION_ID'], + 'MNT_AMOUNT' => $this->formatPrice($orderTotal), + 'MNT_CURRENCY_CODE' => $callbackData['MNT_CURRENCY_CODE'], + 'inventory' => $this->getInventoryJson($products) ?: null, + 'client' => $callbackData['MNT_SUBSCRIBER_ID'], + 'sno' => null, + 'delivery' => (null !== $deliveryPrice) ? $this->formatPrice($deliveryPrice) : null, + ); + + $orderStatusId = (int)(isset($this->orderInfo['order_status_id']) ? $this->orderInfo['order_status_id'] : 1); + + list($xmlData['MNT_RESULT_CODE'], $xmlData['MNT_DESCRIPTION']) = $this->determineCheckResult($callbackData, $orderStatusId); + + $xmlData['MNT_SIGNATURE'] = md5( + $xmlData['MNT_RESULT_CODE'] . + $xmlData['MNT_ID'] . + $xmlData['MNT_TRANSACTION_ID'] . + $this->integrityCode + ); + + $this->sendResponse($this->buildXMLResponse($xmlData)); + } + + /** + * @param array $callbackData + * @param int $orderStatusId + * @return array + * @throws \Exception + */ + private function determineCheckResult(array $callbackData, $orderStatusId) { + $orderStatus = $this->getOrderStatusById($orderStatusId); + + if (empty($callbackData['MNT_AMOUNT'])) { + return array(100, "Order status is '{$orderStatus}'"); + } + + if ($this->successOrderStatusId === $orderStatusId) { + return array(200, 'Order Paid'); + } + + if (in_array($orderStatusId, array(7, 9, 16), true)) { + return array(500, "Order status is '{$orderStatus}'"); + } + + return array(402, 'Order created, but not paid'); + } + + /** + * @param array $callbackData + * @return void + * @throws \Exception + */ + private function handlePayCallback(array $callbackData) { + $orderTotal = (float)(isset($this->orderInfo['total']) ? $this->orderInfo['total'] : 0); + + $currencyCode = isset($this->orderInfo['currency_code']) ? $this->orderInfo['currency_code'] : 'RUB'; + $shopData = array( + 'MNT_ID' => $this->mntId, + 'MNT_TRANSACTION_ID' => $callbackData['MNT_TRANSACTION_ID'], + 'MNT_OPERATION_ID' => $callbackData['MNT_OPERATION_ID'], + 'MNT_AMOUNT' => $this->formatPrice($orderTotal), + 'MNT_CURRENCY_CODE' => $currencyCode, + 'MNT_SUBSCRIBER_ID' => $callbackData['MNT_SUBSCRIBER_ID'], + 'MNT_TEST_MODE' => $callbackData['MNT_TEST_MODE'], + ); + + if (!$this->checkSignature($shopData, $callbackData['MNT_SIGNATURE'])) { + $this->sendResponse('FAIL'); + } + + $isPayedOrder = $this->isOrderPaid(); + + $resultCode = 200; + + $this->load->model('account/order'); + $products = $this->model_account_order->getOrderProducts($this->orderId); + $deliveryPrice = $this->getDeliveryPrice(); + + $xmlData = array( + 'MNT_ID' => $this->mntId, + 'MNT_TRANSACTION_ID' => $callbackData['MNT_TRANSACTION_ID'], + 'MNT_RESULT_CODE' => $resultCode, + 'MNT_SIGNATURE' => md5($resultCode . $this->mntId . $callbackData['MNT_TRANSACTION_ID'] . $this->integrityCode), + 'MNT_AMOUNT' => $callbackData['MNT_AMOUNT'], + 'MNT_CURRENCY_CODE' => $callbackData['MNT_CURRENCY_CODE'], + 'MNT_DESCRIPTION' => $isPayedOrder ? 'Order already paid' : 'Order success paid', + 'inventory' => $this->getInventoryJson($products), + 'client' => $callbackData['MNT_SUBSCRIBER_ID'], + 'sno' => null, + 'delivery' => $deliveryPrice !== null ? $this->formatPrice($deliveryPrice) : null, + ); + + if (!$isPayedOrder) { + $this->load->language('extension/payment/payanyway'); + $this->addOrderHistory($this->successOrderStatusId, $this->language->get('text_payment_completed')); + } + + $this->sendResponse($this->buildXMLResponse($xmlData)); + } + + /** @return bool */ + private function isOrderPaid() { + if (!isset($this->orderInfo['order_status_id'])) { + return false; + } + + return $this->successOrderStatusId === (int)$this->orderInfo['order_status_id']; + } + + /** + * @return float|null + * @throws \Exception + */ + private function getDeliveryPrice() { + $this->load->model('account/order'); + foreach ($this->model_account_order->getOrderTotals($this->orderId) as $orderTotal) { + if (isset($orderTotal['code']) && ($orderTotal['code'] === 'shipping')) { + $deliveryPrice = isset($orderTotal['value']) ? (float)$orderTotal['value'] : 0; + return ($deliveryPrice !== 0.0) ? $deliveryPrice : null; + } + } + + return null; + } + + /** + * @param array $products + * @return false|string + */ + private function getInventoryJson(array $products) { + $inventory = array(); + foreach ($products as $product) { + $name = isset($product['name']) ? $product['name'] : ''; + $price = isset($product['price']) ? (float)$product['price'] : 0; + $quantity = isset($product['quantity']) ? (string)$product['quantity'] : '0'; + + $inventory[] = array( + 'name' => $this->validateString($name, self::INVENTORY_ITEM_NAME_MAX_LENGTH), + 'price' => $this->formatPrice($price), + 'quantity' => $this->formatQuantity($quantity), + 'vatTag' => $this->vatRate, + 'pm' => self::INVENTORY_ITEM_DEFAULT_PAYMENT_METHOD, + 'po' => self::INVENTORY_ITEM_DEFAULT_PAYMENT_OBJECT, + 'measure' => self::INVENTORY_ITEM_DEFAULT_MEASURE, + ); + } + + return json_encode($inventory, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + } + + /** + * @param int $orderStatusId + * @return string + * @throws \Exception + */ + public function getOrderStatusById($orderStatusId) { + $this->load->model('localisation/order_status'); + /**@var array $orderStatuses */ + $orderStatuses = $this->model_localisation_order_status->getOrderStatuses(); + + $orderStatus = 'unknown'; + foreach ($orderStatuses as $orderStatus) { + $statusId = isset($orderStatus['order_status_id']) ? (int)$orderStatus['order_status_id'] : null; + if ($statusId === $orderStatusId) { + $orderStatus = $orderStatus['name']; + break; + } + } + + return $orderStatus; + } + + /** + * @param string $quantity + * @return string + */ + private function formatQuantity($quantity) { + $quantity = str_replace(',', '.', $quantity); + if (strpos($quantity, '.') === false && ctype_digit($quantity)) { + return (string)(int)$quantity; + } + + return number_format((float)$quantity, 3, '.', ''); + } + + /** + * @param array $data + * @return false|string + * @return bool|string + * @throws \Exception + */ + private function buildXMLResponse(array $data) { + $dom = new \DOMDocument('1.0', 'UTF-8'); + $dom->formatOutput = false; + + $root = $dom->createElement('MNT_RESPONSE'); + $dom->appendChild($root); + + $requiredFields = array( + 'MNT_ID', + 'MNT_TRANSACTION_ID', + 'MNT_RESULT_CODE', + 'MNT_DESCRIPTION', + 'MNT_AMOUNT', + 'MNT_CURRENCY_CODE', + 'MNT_SIGNATURE', + ); + + foreach ($requiredFields as $field) { + if (isset($data[$field]) && ($data[$field] !== '')) { + $root->appendChild($dom->createElement($field, (string)$data[$field])); + } + } + + $attributes = $dom->createElement('MNT_ATTRIBUTES'); + $root->appendChild($attributes); + + $attributeMap = array( + 'INVENTORY' => isset($data['inventory']) ? $data['inventory'] : null, + 'CLIENT' => isset($data['client']) ? $data['client'] : null, + 'SNO' => isset($data['sno']) ? $data['sno'] : null, + 'DELIVERY' => isset($data['delivery']) ? $data['delivery'] : null, + ); + + foreach ($attributeMap as $key => $value) { + if (!empty($value)) { + $attrElement = $dom->createElement('ATTRIBUTE'); + $attrElement->appendChild($dom->createElement('KEY', $key)); + $attrElement->appendChild($dom->createElement('VALUE', (string)$value)); + $attributes->appendChild($attrElement); + } + } + + return $dom->saveXML(); + } + + /** + * @param array $params + * @param string $key + * @param string $default + * @return string + */ + private function getOptionalStringWithDefault(array $params, $key, $default = '') { + $optionalString = $this->getOptionalString($params, $key); + if (null !== $optionalString) { + return $optionalString; + } + + return $default; + } + + /** + * @param array $params + * @param string $key + * @return string|null + */ + private function getOptionalString(array $params, $key) { + $value = isset($params[$key]) ? $params[$key] : null; + if (!is_string($value) || trim($value) === '') { + return null; + } + + return $value; + } + + /** + * @param array $params + * @param string $key + * @return string + * @throws \InvalidArgumentException + */ + private function getRequiredString(array $params, $key) { + if (!isset($params[$key])) { + throw new \InvalidArgumentException('Missing required field: ' . $key); + } + + $value = $params[$key]; + if (!is_string($value)) { + throw new \InvalidArgumentException( + sprintf('Field "%s" must be a string, %s given', $key, gettype($value)) + ); + } + + if ('' === $value) { + throw new \InvalidArgumentException(sprintf('Field "%s" must be a non-empty string', $key)); + } + + return $value; + } + + private function initializeModule() { + $this->mntId = (int)$this->config->get('payment_payanyway_account'); + $this->integrityCode = (string)$this->config->get('payment_payanyway_integrity_code'); + $this->server = (string)$this->config->get('payment_payanyway_server'); + $this->vatRate = (string)$this->config->get('payment_payanyway_vat_rate'); + $this->currency = $this->config->get('payment_payanyway_currency'); + $this->pendingOrderStatusId = (int)$this->config->get('payment_payanyway_pending_order_status_id'); + $this->successOrderStatusId = (int)$this->config->get('payment_payanyway_success_order_status_id'); + $this->errorOrderStatusId = (int)$this->config->get('payment_payanyway_error_order_status_id'); + $this->cmsModuleVersion = (string)$this->config->get('payment_payanyway_cms_module_version'); + } +} diff --git a/upload/catalog/language/en-gb/extension/payment/payanyway.php b/upload/catalog/language/en-gb/extension/payment/payanyway.php new file mode 100755 index 0000000..b48dddf --- /dev/null +++ b/upload/catalog/language/en-gb/extension/payment/payanyway.php @@ -0,0 +1,14 @@ + $address + * @return array + */ + public function getMethod(array $address) { + $this->load->language('extension/payment/payanyway'); + + if (!$this->isModuleEnabled() || + !$this->isCurrencySupported() || + !$this->isGeoZoneValid($address) + ) { + return array(); + } + + return array( + 'code' => 'payanyway', + 'title' => $this->language->get('text_title'), + 'terms' => '', + 'sort_order' => $this->config->get('payment_payanyway_sort_order'), + ); + } + + /** @return bool */ + private function isModuleEnabled() { + return (bool)$this->config->get('payment_payanyway_status'); + } + + /** @return bool */ + private function isCurrencySupported() { + $shopCurrency = isset($this->session->data['currency']) ? $this->session->data['currency'] : ''; + + return $shopCurrency === $this->config->get('payment_payanyway_currency'); + } + + /** + * @param array $address + * @return bool + */ + private function isGeoZoneValid(array $address) { + $geoZoneId = (int)$this->config->get('payment_payanyway_geo_zone_id'); + + if ($geoZoneId === 0) { + return true; + } + + $query = $this->db->query( + "SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone + WHERE geo_zone_id = '" . $geoZoneId . "' + AND country_id = '" . (int)$address['country_id'] . "' + AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')" + ); + + return $query->num_rows > 0; + } +} diff --git a/upload/catalog/view/theme/default/template/extension/payment/payanyway.twig b/upload/catalog/view/theme/default/template/extension/payment/payanyway.twig new file mode 100755 index 0000000..a7064d9 --- /dev/null +++ b/upload/catalog/view/theme/default/template/extension/payment/payanyway.twig @@ -0,0 +1,44 @@ +
+ + + + + + + + + + + + +
+
+ +
+
+
+ +